Fix damage flash when damage disabled
authorkwolekr <kwolekr@minetest.net>
Fri, 10 Jul 2015 19:58:32 +0000 (15:58 -0400)
committerkwolekr <kwolekr@minetest.net>
Fri, 10 Jul 2015 19:58:57 +0000 (15:58 -0400)
src/network/serverpackethandler.cpp
src/script/lua_api/l_object.cpp
src/server.cpp
src/server.h

index 92dfe1020710ea1fdd4437eed16e0bf67397d8c0..5493dfec133d92ae7244d901c157cabfb265a4ee 100644 (file)
@@ -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
index 4b1cc39fb9775049eb43908ec80b32e99d8fffe2..e407ef162d0a8034283150f9a7fa129e57a54c4b 100644 (file)
@@ -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;
 }
index 19aaa3e7ab79f7e6fc01a0c5d5e9fdc197289adc..9d70ad7b76477c9ac813fc4347e30aab9c18e7b7 100644 (file)
@@ -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);
index 877109a777aefa3555f6e7cc0b934912ccbe206d..fbca05f265607beb24babfc64a775ccd6aee45a2 100644 (file)
@@ -374,7 +374,7 @@ public:
                        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);