diff --git a/src/network/serverpackethandler.cpp b/src/network/serverpackethandler.cpp index 92dfe1020710ea1fdd4437eed16e0bf67397d8c0..5493dfec133d92ae7244d901c157cabfb265a4ee 100644 --- a/src/network/serverpackethandler.cpp +++ b/src/network/serverpackethandler.cpp @@ -1151,7 +1151,7 @@ void Server::handleCommand_Damage(NetworkPacket* pkt) << std::endl; playersao->setHP(playersao->getHP() - damage); - SendPlayerHPOrDie(playersao->getPeerID(), playersao->getHP() == 0); + SendPlayerHPOrDie(playersao); } } @@ -1510,14 +1510,12 @@ void Server::handleCommand_Interact(NetworkPacket* pkt) // If the object is a player and its HP changed if (src_original_hp != pointed_object->getHP() && pointed_object->getType() == ACTIVEOBJECT_TYPE_PLAYER) { - SendPlayerHPOrDie(((PlayerSAO*)pointed_object)->getPeerID(), - pointed_object->getHP() == 0); + SendPlayerHPOrDie((PlayerSAO *)pointed_object); } // If the puncher is a player and its HP changed - if (dst_origin_hp != playersao->getHP()) { - SendPlayerHPOrDie(playersao->getPeerID(), playersao->getHP() == 0); - } + if (dst_origin_hp != playersao->getHP()) + SendPlayerHPOrDie(playersao); } } // action == 0 diff --git a/src/script/lua_api/l_object.cpp b/src/script/lua_api/l_object.cpp index 4b1cc39fb9775049eb43908ec80b32e99d8fffe2..e407ef162d0a8034283150f9a7fa129e57a54c4b 100644 --- a/src/script/lua_api/l_object.cpp +++ b/src/script/lua_api/l_object.cpp @@ -222,15 +222,13 @@ int ObjectRef::l_punch(lua_State *L) // If the punched is a player, and its HP changed if (src_original_hp != co->getHP() && co->getType() == ACTIVEOBJECT_TYPE_PLAYER) { - getServer(L)->SendPlayerHPOrDie(((PlayerSAO*)co)->getPeerID(), - co->getHP() == 0); + getServer(L)->SendPlayerHPOrDie((PlayerSAO *)co); } // If the puncher is a player, and its HP changed if (dst_origin_hp != puncher->getHP() && puncher->getType() == ACTIVEOBJECT_TYPE_PLAYER) { - getServer(L)->SendPlayerHPOrDie(((PlayerSAO*)puncher)->getPeerID(), - puncher->getHP() == 0); + getServer(L)->SendPlayerHPOrDie((PlayerSAO *)puncher); } return 0; } @@ -265,9 +263,9 @@ int ObjectRef::l_set_hp(lua_State *L) <<" hp="<<hp<<std::endl;*/ // Do it co->setHP(hp); - if (co->getType() == ACTIVEOBJECT_TYPE_PLAYER) { - getServer(L)->SendPlayerHPOrDie(((PlayerSAO*)co)->getPeerID(), co->getHP() == 0); - } + if (co->getType() == ACTIVEOBJECT_TYPE_PLAYER) + getServer(L)->SendPlayerHPOrDie((PlayerSAO *)co); + // Return return 0; } diff --git a/src/server.cpp b/src/server.cpp index 19aaa3e7ab79f7e6fc01a0c5d5e9fdc197289adc..9d70ad7b76477c9ac813fc4347e30aab9c18e7b7 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -1108,7 +1108,7 @@ PlayerSAO* Server::StageTwoClientInit(u16 peer_id) SendInventory(playersao); // Send HP - SendPlayerHPOrDie(peer_id, playersao->getHP() == 0); + SendPlayerHPOrDie(playersao); // Send Breath SendPlayerBreath(peer_id); @@ -1487,6 +1487,20 @@ void Server::SendMovement(u16 peer_id) Send(&pkt); } +void Server::SendPlayerHPOrDie(PlayerSAO *playersao) +{ + if (!g_settings->getBool("enable_damage")) + return; + + u16 peer_id = playersao->getPeerID(); + bool is_alive = playersao->getHP() > 0; + + if (is_alive) + SendPlayerHP(peer_id); + else + DiePlayer(peer_id); +} + void Server::SendHP(u16 peer_id, u8 hp) { DSTACK(__FUNCTION_NAME); diff --git a/src/server.h b/src/server.h index 877109a777aefa3555f6e7cc0b934912ccbe206d..fbca05f265607beb24babfc64a775ccd6aee45a2 100644 --- a/src/server.h +++ b/src/server.h @@ -374,7 +374,7 @@ class Server : public con::PeerHandler, public MapEventReceiver, u8* ser_vers, u16* prot_vers, u8* major, u8* minor, u8* patch, std::string* vers_string); - void SendPlayerHPOrDie(u16 peer_id, bool die) { die ? DiePlayer(peer_id) : SendPlayerHP(peer_id); } + void SendPlayerHPOrDie(PlayerSAO *player); void SendPlayerBreath(u16 peer_id); void SendInventory(PlayerSAO* playerSAO); void SendMovePlayer(u16 peer_id);