Fixed some "Entity was not found in any chunk!" warnings
Player's current world is saved in the player file. When a player joins the server, the player joins the last world he was in. It seems MCServer can finally run multiple worlds! It just needs functionality to switch between them git-svn-id: http://mc-server.googlecode.com/svn/trunk@46 0a769ca7-a7f5-676a-18bf-c427514a06d6
This commit is contained in:
@@ -70,14 +70,19 @@ cChunk::~cChunk()
|
||||
m_pState->m_BlockEntities.clear();
|
||||
|
||||
LockEntities();
|
||||
for( EntityList::iterator itr = m_pState->m_Entities.begin(); itr != m_pState->m_Entities.end(); ++itr)
|
||||
if( m_pState->m_Entities.size() > 0 )
|
||||
{
|
||||
if( (*itr)->GetEntityType() != cEntity::E_PLAYER )
|
||||
EntityList Entities = m_pState->m_Entities; // Copy list to a temporary list
|
||||
for( EntityList::iterator itr = Entities.begin(); itr != Entities.end(); ++itr)
|
||||
{
|
||||
m_World->AddToRemoveEntityQueue( **itr ); // World also destroys the entity
|
||||
if( (*itr)->GetEntityType() != cEntity::E_PLAYER )
|
||||
{
|
||||
(*itr)->RemoveFromChunk( this );
|
||||
(*itr)->Destroy();
|
||||
}
|
||||
}
|
||||
m_pState->m_Entities.clear();
|
||||
}
|
||||
m_pState->m_Entities.clear();
|
||||
UnlockEntities();
|
||||
|
||||
if( m_EntitiesCriticalSection )
|
||||
@@ -1027,14 +1032,17 @@ void cChunk::RemoveClient( cClientHandle* a_Client )
|
||||
{
|
||||
m_pState->m_LoadedByClient.remove( a_Client );
|
||||
|
||||
LockEntities();
|
||||
for( EntityList::iterator itr = m_pState->m_Entities.begin(); itr != m_pState->m_Entities.end(); ++itr )
|
||||
if( !a_Client->IsDestroyed() )
|
||||
{
|
||||
LOG("%i %i %i Destroying on %s", m_PosX, m_PosY, m_PosZ, a_Client->GetUsername() );
|
||||
cPacket_DestroyEntity DestroyEntity( *itr );
|
||||
a_Client->Send( DestroyEntity );
|
||||
LockEntities();
|
||||
for( EntityList::iterator itr = m_pState->m_Entities.begin(); itr != m_pState->m_Entities.end(); ++itr )
|
||||
{
|
||||
LOG("%i %i %i Destroying on %s", m_PosX, m_PosY, m_PosZ, a_Client->GetUsername() );
|
||||
cPacket_DestroyEntity DestroyEntity( *itr );
|
||||
a_Client->Send( DestroyEntity );
|
||||
}
|
||||
UnlockEntities();
|
||||
}
|
||||
UnlockEntities();
|
||||
}
|
||||
|
||||
void cChunk::AddEntity( cEntity & a_Entity )
|
||||
|
||||
Reference in New Issue
Block a user