Fix ActiveObject creation for fast player respawns

This commit is contained in:
Perttu Ahola 2011-12-02 17:30:22 +02:00
parent 67c21fc42f
commit 9344816bd6
2 changed files with 13 additions and 10 deletions

View File

@ -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)
{

View File

@ -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;
};