From: Perttu Ahola Date: Fri, 2 Dec 2011 15:30:22 +0000 (+0200) Subject: Fix ActiveObject creation for fast player respawns X-Git-Url: http://81.2.79.47:8989/gitweb/?a=commitdiff_plain;h=9344816bd6c40603729256b454e2f171902b02e5;p=zefram%2Fminetest%2Fminetest_engine.git Fix ActiveObject creation for fast player respawns --- diff --git a/src/server.cpp b/src/server.cpp index cb515e0d..b8bdd883 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -1348,6 +1348,15 @@ void Server::AsyncRunStep() if(player->m_hp_not_sent){ SendPlayerHP(player); } + + /* + Add to environment if is not in respawn screen + */ + if(!player->m_is_in_environment && !player->m_respawn_active){ + player->m_removed = false; + player->setId(0); + m_env->addActiveObject(player); + } } } @@ -2127,11 +2136,6 @@ void Server::ProcessData(u8 *data, u32 datasize, u16 peer_id) return; } - // Add PlayerSAO - player->m_removed = false; - player->setId(0); - m_env->addActiveObject(player); - /* Answer with a TOCLIENT_INIT */ @@ -2887,10 +2891,9 @@ void Server::ProcessData(u8 *data, u32 datasize, u16 peer_id) actionstream<getName()<<" respawns at " <getPosition()/BS)<m_removed = false; - srp->setId(0); - m_env->addActiveObject(srp); + + // ActiveObject is added to environment in AsyncRunStep after + // the previous addition has been succesfully removed } else if(command == TOSERVER_INTERACT) { diff --git a/src/serverremoteplayer.h b/src/serverremoteplayer.h index 1ef14ca9..15a9ebc3 100644 --- a/src/serverremoteplayer.h +++ b/src/serverremoteplayer.h @@ -92,9 +92,9 @@ public: bool m_inventory_not_sent; bool m_hp_not_sent; bool m_respawn_active; + bool m_is_in_environment; private: - bool m_is_in_environment; bool m_position_not_sent; };