Send Breath packet on event, don't check it at each AsyncRunStep
authorLoic Blot <loic.blot@unix-experience.fr>
Tue, 3 Mar 2015 15:23:47 +0000 (16:23 +0100)
committerLoic Blot <loic.blot@unix-experience.fr>
Tue, 3 Mar 2015 15:33:20 +0000 (16:33 +0100)
src/content_sao.cpp
src/content_sao.h
src/network/packethandlers/server.cpp
src/script/lua_api/l_object.cpp
src/server.cpp
src/server.h

index 835996cc7e90710349ec796ce6135f5646dd4cfd..26b721d39981030eb5e78fa53adb3e8b80ddac13 100644 (file)
@@ -718,7 +718,6 @@ PlayerSAO::PlayerSAO(ServerEnvironment *env_, Player *player_, u16 peer_id_,
        // public
        m_moved(false),
        m_inventory_not_sent(false),
-       m_breath_not_sent(false),
        m_wielded_item_not_sent(false),
        m_physics_override_speed(1),
        m_physics_override_jump(1),
index efbece3cad2273d722a85fba41e01b1cef428215..d6a494ae2a6e38402870504131ddf95e99eb13e9 100644 (file)
@@ -318,7 +318,6 @@ public:
        // Some flags used by Server
        bool m_moved;
        bool m_inventory_not_sent;
-       bool m_breath_not_sent;
        bool m_wielded_item_not_sent;
 
        float m_physics_override_speed;
index d9ba8c314a5780fa02aba5804e003def818bfc6c..2deede0ca3f6e6ea29f06e58d25bc25f50503a5e 100644 (file)
@@ -922,7 +922,7 @@ void Server::handleCommand_Breath(NetworkPacket* pkt)
        }
 
        playersao->setBreath(breath);
-       m_script->player_event(playersao,"breath_changed");
+       SendPlayerBreath(pkt->getPeerId());
 }
 
 void Server::handleCommand_Password(NetworkPacket* pkt)
index e6a50c3bacbbb1053ce689e2e19071539063c610..0bc6c0bbcdb97083e5919571061983ee6ec5fd7e 100644 (file)
@@ -812,7 +812,11 @@ int ObjectRef::l_set_breath(lua_State *L)
        u16 breath = luaL_checknumber(L, 2);
        // Do it
        co->setBreath(breath);
-       co->m_breath_not_sent = true;
+
+       // If the object is a player sent the breath to client
+       if (co->getType() == ACTIVEOBJECT_TYPE_PLAYER)
+                       getServer(L)->SendPlayerBreath(((PlayerSAO*)co)->getPeerID());
+
        return 0;
 }
 
index 3536471bf46f09a0bb36f4ef2a3cf9a8987e56de..84a8df4b886d7182f6b0891d21bd1b21145c0a61 100644 (file)
@@ -604,20 +604,15 @@ void Server::AsyncRunStep(bool initial_step)
                        if(playersao == NULL)
                                continue;
 
-                       /*
-                               Send player breath if changed
-                       */
-                       if(playersao->m_breath_not_sent) {
-                               SendPlayerBreath(*i);
-                       }
 
-                       /*
-                               Send player inventories if necessary
-                       */
                        if(playersao->m_moved) {
                                SendMovePlayer(*i);
                                playersao->m_moved = false;
                        }
+
+                       /*
+                               Send player inventories if necessary
+                       */
                        if(playersao->m_inventory_not_sent) {
                                UpdateCrafting(*i);
                                SendInventory(*i);
@@ -1892,8 +1887,8 @@ void Server::SendPlayerBreath(u16 peer_id)
        DSTACK(__FUNCTION_NAME);
        PlayerSAO *playersao = getPlayerSAO(peer_id);
        assert(playersao);
-       playersao->m_breath_not_sent = false;
-       m_script->player_event(playersao,"breath_changed");
+
+       m_script->player_event(playersao, "breath_changed");
        SendBreath(peer_id, playersao->getBreath());
 }
 
@@ -2604,6 +2599,7 @@ void Server::RespawnPlayer(u16 peer_id)
        playersao->setBreath(PLAYER_MAX_BREATH);
 
        SendPlayerHP(peer_id);
+       SendPlayerBreath(peer_id);
 
        bool repositioned = m_script->on_respawnplayer(playersao);
        if(!repositioned){
index 5dbbcd22b2f4d0ed152d6814780eff6d355d279f..8c5ea2e1e9e619663d4005d2292f8cad6ab4c5f6 100644 (file)
@@ -373,6 +373,8 @@ public:
                        std::string* vers_string);
 
        void SendPlayerHPOrDie(u16 peer_id, bool die) { die ? DiePlayer(peer_id) : SendPlayerHP(peer_id); }
+       void SendPlayerBreath(u16 peer_id);
+
        // Bind address
        Address m_bind_addr;
 
@@ -397,7 +399,7 @@ private:
        void SendChatMessage(u16 peer_id, const std::wstring &message);
        void SendTimeOfDay(u16 peer_id, u16 time, f32 time_speed);
        void SendPlayerHP(u16 peer_id);
-       void SendPlayerBreath(u16 peer_id);
+
        void SendMovePlayer(u16 peer_id);
        void SendLocalPlayerAnimations(u16 peer_id, v2s32 animation_frames[4], f32 animation_speed);
        void SendEyeOffset(u16 peer_id, v3f first, v3f third);