mirror of
https://github.com/luanti-org/luanti.git
synced 2025-08-26 18:21:04 +00:00
Breath cheat fix: server side
Breath is now handled server side. Changing this behaviour required some modifications to core: * Ignore TOSERVER_BREATH package, marking it as obsolete * Clients doesn't send the breath to server anymore * Use PlayerSAO pointer instead of peer_id in Server::SendPlayerBreath to prevent a useless lookup (little perf gain) * drop a useless static_cast in emergePlayer
This commit is contained in:
parent
a1346c916e
commit
52ba1f867e
13 changed files with 107 additions and 113 deletions
|
@ -193,7 +193,7 @@ const ServerCommandFactory serverCommandFactoryTable[TOSERVER_NUM_MSG_TYPES] =
|
|||
null_command_factory, // 0x3f
|
||||
{ "TOSERVER_REQUEST_MEDIA", 1, true }, // 0x40
|
||||
{ "TOSERVER_RECEIVED_MEDIA", 1, true }, // 0x41
|
||||
{ "TOSERVER_BREATH", 0, true }, // 0x42
|
||||
null_command_factory, // 0x42 old TOSERVER_BREATH. Ignored by servers
|
||||
{ "TOSERVER_CLIENT_READY", 0, true }, // 0x43
|
||||
null_command_factory, // 0x44
|
||||
null_command_factory, // 0x45
|
||||
|
|
|
@ -138,9 +138,11 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
|||
Add nodedef v3 - connected nodeboxes
|
||||
PROTOCOL_VERSION 28:
|
||||
CPT2_MESHOPTIONS
|
||||
PROTOCOL_VERSION 29:
|
||||
Server doesn't accept TOSERVER_BREATH anymore
|
||||
*/
|
||||
|
||||
#define LATEST_PROTOCOL_VERSION 28
|
||||
#define LATEST_PROTOCOL_VERSION 29
|
||||
|
||||
// Server's supported network protocol range
|
||||
#define SERVER_PROTOCOL_VERSION_MIN 13
|
||||
|
@ -833,7 +835,7 @@ enum ToServerCommand
|
|||
<no payload data>
|
||||
*/
|
||||
|
||||
TOSERVER_BREATH = 0x42,
|
||||
TOSERVER_BREATH = 0x42, // Obsolete
|
||||
/*
|
||||
u16 breath
|
||||
*/
|
||||
|
|
|
@ -90,7 +90,7 @@ const ToServerCommandHandler toServerCommandTable[TOSERVER_NUM_MSG_TYPES] =
|
|||
null_command_handler, // 0x3f
|
||||
{ "TOSERVER_REQUEST_MEDIA", TOSERVER_STATE_STARTUP, &Server::handleCommand_RequestMedia }, // 0x40
|
||||
{ "TOSERVER_RECEIVED_MEDIA", TOSERVER_STATE_STARTUP, &Server::handleCommand_ReceivedMedia }, // 0x41
|
||||
{ "TOSERVER_BREATH", TOSERVER_STATE_INGAME, &Server::handleCommand_Breath }, // 0x42
|
||||
{ "TOSERVER_BREATH", TOSERVER_STATE_INGAME, &Server::handleCommand_Deprecated }, // 0x42 Old breath model which is now deprecated for anticheating
|
||||
{ "TOSERVER_CLIENT_READY", TOSERVER_STATE_STARTUP, &Server::handleCommand_ClientReady }, // 0x43
|
||||
null_command_handler, // 0x44
|
||||
null_command_handler, // 0x45
|
||||
|
|
|
@ -1136,46 +1136,6 @@ void Server::handleCommand_Damage(NetworkPacket* pkt)
|
|||
}
|
||||
}
|
||||
|
||||
void Server::handleCommand_Breath(NetworkPacket* pkt)
|
||||
{
|
||||
u16 breath;
|
||||
|
||||
*pkt >> breath;
|
||||
|
||||
RemotePlayer *player = m_env->getPlayer(pkt->getPeerId());
|
||||
|
||||
if (player == NULL) {
|
||||
errorstream << "Server::ProcessData(): Canceling: "
|
||||
"No player for peer_id=" << pkt->getPeerId()
|
||||
<< " disconnecting peer!" << std::endl;
|
||||
m_con.DisconnectPeer(pkt->getPeerId());
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
PlayerSAO *playersao = player->getPlayerSAO();
|
||||
if (playersao == NULL) {
|
||||
errorstream << "Server::ProcessData(): Canceling: "
|
||||
"No player object for peer_id=" << pkt->getPeerId()
|
||||
<< " disconnecting peer!" << std::endl;
|
||||
m_con.DisconnectPeer(pkt->getPeerId());
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
* If player is dead, we don't need to update the breath
|
||||
* He is dead !
|
||||
*/
|
||||
if (playersao->isDead()) {
|
||||
verbosestream << "TOSERVER_BREATH: " << player->getName()
|
||||
<< " is dead. Ignoring packet";
|
||||
return;
|
||||
}
|
||||
|
||||
playersao->setBreath(breath);
|
||||
SendPlayerBreath(pkt->getPeerId());
|
||||
}
|
||||
|
||||
void Server::handleCommand_Password(NetworkPacket* pkt)
|
||||
{
|
||||
if (pkt->getSize() != PASSWORD_SIZE * 2)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue