aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPerttu Ahola <celeron55@gmail.com>2011-12-02 17:30:22 +0200
committerPerttu Ahola <celeron55@gmail.com>2011-12-02 17:30:22 +0200
commit9344816bd6c40603729256b454e2f171902b02e5 (patch)
treefc2572f2f2184422a221a6959e70e81202c61280
parent67c21fc42f79f5efe74e4c8194944ac834224069 (diff)
downloadminetest-9344816bd6c40603729256b454e2f171902b02e5.tar.gz
minetest-9344816bd6c40603729256b454e2f171902b02e5.tar.bz2
minetest-9344816bd6c40603729256b454e2f171902b02e5.zip
Fix ActiveObject creation for fast player respawns
-rw-r--r--src/server.cpp21
-rw-r--r--src/serverremoteplayer.h2
2 files changed, 13 insertions, 10 deletions
diff --git a/src/server.cpp b/src/server.cpp
index cb515e0d0..b8bdd8830 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<<player->getName()<<" respawns at "
<<PP(player->getPosition()/BS)<<std::endl;
-
- srp->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 1ef14ca93..15a9ebc38 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;
};