forked from Mirrorlandia_minetest/minetest
Send Position packet on event, don't check it at each AsyncRunStep.
* This permit to cleanup the player checking loop
This commit is contained in:
parent
7f8f9785d7
commit
40bf1d7b5f
@ -29,6 +29,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
|||||||
#include "tool.h" // For ToolCapabilities
|
#include "tool.h" // For ToolCapabilities
|
||||||
#include "gamedef.h"
|
#include "gamedef.h"
|
||||||
#include "player.h"
|
#include "player.h"
|
||||||
|
#include "server.h"
|
||||||
#include "scripting_game.h"
|
#include "scripting_game.h"
|
||||||
#include "genericobject.h"
|
#include "genericobject.h"
|
||||||
#include "log.h"
|
#include "log.h"
|
||||||
@ -716,7 +717,6 @@ PlayerSAO::PlayerSAO(ServerEnvironment *env_, Player *player_, u16 peer_id_,
|
|||||||
m_attachment_parent_id(0),
|
m_attachment_parent_id(0),
|
||||||
m_attachment_sent(false),
|
m_attachment_sent(false),
|
||||||
// public
|
// public
|
||||||
m_moved(false),
|
|
||||||
m_physics_override_speed(1),
|
m_physics_override_speed(1),
|
||||||
m_physics_override_jump(1),
|
m_physics_override_jump(1),
|
||||||
m_physics_override_gravity(1),
|
m_physics_override_gravity(1),
|
||||||
@ -867,7 +867,7 @@ void PlayerSAO::step(float dtime, bool send_recommended)
|
|||||||
m_attachment_position = v3f(0,0,0);
|
m_attachment_position = v3f(0,0,0);
|
||||||
m_attachment_rotation = v3f(0,0,0);
|
m_attachment_rotation = v3f(0,0,0);
|
||||||
m_player->setPosition(m_last_good_position);
|
m_player->setPosition(m_last_good_position);
|
||||||
m_moved = true;
|
((Server*)m_env->getGameDef())->SendMovePlayer(m_peer_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
//dstream<<"PlayerSAO::step: dtime: "<<dtime<<std::endl;
|
//dstream<<"PlayerSAO::step: dtime: "<<dtime<<std::endl;
|
||||||
@ -982,8 +982,7 @@ void PlayerSAO::setPos(v3f pos)
|
|||||||
m_player->setPosition(pos);
|
m_player->setPosition(pos);
|
||||||
// Movement caused by this command is always valid
|
// Movement caused by this command is always valid
|
||||||
m_last_good_position = pos;
|
m_last_good_position = pos;
|
||||||
// Force position change on client
|
((Server*)m_env->getGameDef())->SendMovePlayer(m_peer_id);
|
||||||
m_moved = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void PlayerSAO::moveTo(v3f pos, bool continuous)
|
void PlayerSAO::moveTo(v3f pos, bool continuous)
|
||||||
@ -993,22 +992,19 @@ void PlayerSAO::moveTo(v3f pos, bool continuous)
|
|||||||
m_player->setPosition(pos);
|
m_player->setPosition(pos);
|
||||||
// Movement caused by this command is always valid
|
// Movement caused by this command is always valid
|
||||||
m_last_good_position = pos;
|
m_last_good_position = pos;
|
||||||
// Force position change on client
|
((Server*)m_env->getGameDef())->SendMovePlayer(m_peer_id);
|
||||||
m_moved = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void PlayerSAO::setYaw(float yaw)
|
void PlayerSAO::setYaw(float yaw)
|
||||||
{
|
{
|
||||||
m_player->setYaw(yaw);
|
m_player->setYaw(yaw);
|
||||||
// Force change on client
|
((Server*)m_env->getGameDef())->SendMovePlayer(m_peer_id);
|
||||||
m_moved = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void PlayerSAO::setPitch(float pitch)
|
void PlayerSAO::setPitch(float pitch)
|
||||||
{
|
{
|
||||||
m_player->setPitch(pitch);
|
m_player->setPitch(pitch);
|
||||||
// Force change on client
|
((Server*)m_env->getGameDef())->SendMovePlayer(m_peer_id);
|
||||||
m_moved = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int PlayerSAO::punch(v3f dir,
|
int PlayerSAO::punch(v3f dir,
|
||||||
@ -1241,7 +1237,6 @@ bool PlayerSAO::checkMovementCheat()
|
|||||||
<<" moved too fast; resetting position"
|
<<" moved too fast; resetting position"
|
||||||
<<std::endl;
|
<<std::endl;
|
||||||
m_player->setPosition(m_last_good_position);
|
m_player->setPosition(m_last_good_position);
|
||||||
m_moved = true;
|
|
||||||
cheated = true;
|
cheated = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -314,9 +314,6 @@ private:
|
|||||||
bool m_attachment_sent;
|
bool m_attachment_sent;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
// Some flags used by Server
|
|
||||||
bool m_moved;
|
|
||||||
|
|
||||||
float m_physics_override_speed;
|
float m_physics_override_speed;
|
||||||
float m_physics_override_jump;
|
float m_physics_override_jump;
|
||||||
float m_physics_override_gravity;
|
float m_physics_override_gravity;
|
||||||
|
@ -579,10 +579,10 @@ void Server::handleCommand_PlayerPos(NetworkPacket* pkt)
|
|||||||
player->control.LMB = (keyPressed & 128);
|
player->control.LMB = (keyPressed & 128);
|
||||||
player->control.RMB = (keyPressed & 256);
|
player->control.RMB = (keyPressed & 256);
|
||||||
|
|
||||||
bool cheated = playersao->checkMovementCheat();
|
if (playersao->checkMovementCheat()) {
|
||||||
if (cheated) {
|
|
||||||
// Call callbacks
|
// Call callbacks
|
||||||
m_script->on_cheat(playersao, "moved_too_fast");
|
m_script->on_cheat(playersao, "moved_too_fast");
|
||||||
|
SendMovePlayer(pkt->getPeerId());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -581,32 +581,6 @@ void Server::AsyncRunStep(bool initial_step)
|
|||||||
Do background stuff
|
Do background stuff
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
|
||||||
Handle players
|
|
||||||
*/
|
|
||||||
{
|
|
||||||
JMutexAutoLock lock(m_env_mutex);
|
|
||||||
|
|
||||||
std::list<u16> clientids = m_clients.getClientIDs();
|
|
||||||
|
|
||||||
ScopeProfiler sp(g_profiler, "Server: handle players");
|
|
||||||
|
|
||||||
for(std::list<u16>::iterator
|
|
||||||
i = clientids.begin();
|
|
||||||
i != clientids.end(); ++i)
|
|
||||||
{
|
|
||||||
PlayerSAO *playersao = getPlayerSAO(*i);
|
|
||||||
if(playersao == NULL)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
|
|
||||||
if(playersao->m_moved) {
|
|
||||||
SendMovePlayer(*i);
|
|
||||||
playersao->m_moved = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Transform liquids */
|
/* Transform liquids */
|
||||||
m_liquid_transform_timer += dtime;
|
m_liquid_transform_timer += dtime;
|
||||||
if(m_liquid_transform_timer >= m_liquid_transform_every)
|
if(m_liquid_transform_timer >= m_liquid_transform_every)
|
||||||
@ -2590,6 +2564,7 @@ void Server::RespawnPlayer(u16 peer_id)
|
|||||||
bool repositioned = m_script->on_respawnplayer(playersao);
|
bool repositioned = m_script->on_respawnplayer(playersao);
|
||||||
if(!repositioned){
|
if(!repositioned){
|
||||||
v3f pos = findSpawnPos(m_env->getServerMap());
|
v3f pos = findSpawnPos(m_env->getServerMap());
|
||||||
|
// setPos will send the new position to client
|
||||||
playersao->setPos(pos);
|
playersao->setPos(pos);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -374,9 +374,8 @@ public:
|
|||||||
|
|
||||||
void SendPlayerHPOrDie(u16 peer_id, bool die) { die ? DiePlayer(peer_id) : SendPlayerHP(peer_id); }
|
void SendPlayerHPOrDie(u16 peer_id, bool die) { die ? DiePlayer(peer_id) : SendPlayerHP(peer_id); }
|
||||||
void SendPlayerBreath(u16 peer_id);
|
void SendPlayerBreath(u16 peer_id);
|
||||||
|
|
||||||
// Envlock and conlock should be locked when calling these
|
|
||||||
void SendInventory(u16 peer_id);
|
void SendInventory(u16 peer_id);
|
||||||
|
void SendMovePlayer(u16 peer_id);
|
||||||
|
|
||||||
// Bind address
|
// Bind address
|
||||||
Address m_bind_addr;
|
Address m_bind_addr;
|
||||||
@ -402,7 +401,6 @@ private:
|
|||||||
void SendTimeOfDay(u16 peer_id, u16 time, f32 time_speed);
|
void SendTimeOfDay(u16 peer_id, u16 time, f32 time_speed);
|
||||||
void SendPlayerHP(u16 peer_id);
|
void SendPlayerHP(u16 peer_id);
|
||||||
|
|
||||||
void SendMovePlayer(u16 peer_id);
|
|
||||||
void SendLocalPlayerAnimations(u16 peer_id, v2s32 animation_frames[4], f32 animation_speed);
|
void SendLocalPlayerAnimations(u16 peer_id, v2s32 animation_frames[4], f32 animation_speed);
|
||||||
void SendEyeOffset(u16 peer_id, v3f first, v3f third);
|
void SendEyeOffset(u16 peer_id, v3f first, v3f third);
|
||||||
void SendPlayerPrivileges(u16 peer_id);
|
void SendPlayerPrivileges(u16 peer_id);
|
||||||
|
Loading…
Reference in New Issue
Block a user