diff --git a/src/content_sao.cpp b/src/content_sao.cpp index 835996cc7e90710349ec796ce6135f5646dd4cfd..26b721d39981030eb5e78fa53adb3e8b80ddac13 100644 --- a/src/content_sao.cpp +++ b/src/content_sao.cpp @@ -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), diff --git a/src/content_sao.h b/src/content_sao.h index efbece3cad2273d722a85fba41e01b1cef428215..d6a494ae2a6e38402870504131ddf95e99eb13e9 100644 --- a/src/content_sao.h +++ b/src/content_sao.h @@ -318,7 +318,6 @@ class PlayerSAO : public ServerActiveObject // 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; diff --git a/src/network/packethandlers/server.cpp b/src/network/packethandlers/server.cpp index d9ba8c314a5780fa02aba5804e003def818bfc6c..2deede0ca3f6e6ea29f06e58d25bc25f50503a5e 100644 --- a/src/network/packethandlers/server.cpp +++ b/src/network/packethandlers/server.cpp @@ -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) diff --git a/src/script/lua_api/l_object.cpp b/src/script/lua_api/l_object.cpp index e6a50c3bacbbb1053ce689e2e19071539063c610..0bc6c0bbcdb97083e5919571061983ee6ec5fd7e 100644 --- a/src/script/lua_api/l_object.cpp +++ b/src/script/lua_api/l_object.cpp @@ -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; } diff --git a/src/server.cpp b/src/server.cpp index 3536471bf46f09a0bb36f4ef2a3cf9a8987e56de..84a8df4b886d7182f6b0891d21bd1b21145c0a61 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -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){ diff --git a/src/server.h b/src/server.h index 5dbbcd22b2f4d0ed152d6814780eff6d355d279f..8c5ea2e1e9e619663d4005d2292f8cad6ab4c5f6 100644 --- a/src/server.h +++ b/src/server.h @@ -373,6 +373,8 @@ class Server : public con::PeerHandler, public MapEventReceiver, 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 @@ class Server : public con::PeerHandler, public MapEventReceiver, 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);