diff options
Diffstat (limited to 'source')
-rw-r--r-- | source/cPlayer.cpp | 8 | ||||
-rw-r--r-- | source/cWorld.cpp | 8 |
2 files changed, 12 insertions, 4 deletions
diff --git a/source/cPlayer.cpp b/source/cPlayer.cpp index 7899fdc97..c71f04d33 100644 --- a/source/cPlayer.cpp +++ b/source/cPlayer.cpp @@ -124,7 +124,12 @@ void cPlayer::Initialize( cWorld* a_World ) cPlayer::~cPlayer(void)
{
+ LOG("Deleting cPlayer \"%s\" @ %p", m_pState->PlayerName.c_str(), this);
+
SaveToDisk();
+
+ m_World->RemovePlayer( this );
+
m_ClientHandle = NULL;
CloseWindow(-1);
@@ -134,7 +139,8 @@ cPlayer::~cPlayer(void) delete m_CreativeInventory;
delete m_pState;
- m_World->RemovePlayer( this );
+
+ LOG("Player %p deleted", this);
}
diff --git a/source/cWorld.cpp b/source/cWorld.cpp index cc7f0b88b..85faa72e0 100644 --- a/source/cWorld.cpp +++ b/source/cWorld.cpp @@ -905,12 +905,13 @@ const double & cWorld::GetSpawnY(void) -void cWorld::Broadcast( const cPacket & a_Packet, cClientHandle* a_Exclude)
+void cWorld::Broadcast( const cPacket & a_Packet, cClientHandle * a_Exclude)
{
cCSLock Lock(m_CSPlayers);
for (cPlayerList::iterator itr = m_Players.begin(); itr != m_Players.end(); ++itr)
{
- if (((*itr)->GetClientHandle() == a_Exclude) || !(*itr)->GetClientHandle()->IsLoggedIn() )
+ cClientHandle * ch = (*itr)->GetClientHandle();
+ if ((ch == a_Exclude) || (ch == NULL) || !ch->IsLoggedIn() || ch->IsDestroyed())
{
continue;
}
@@ -1187,7 +1188,8 @@ void cWorld::SendPlayerList(cPlayer * a_DestPlayer) cCSLock Lock(m_CSPlayers);
for ( cPlayerList::iterator itr = m_Players.begin(); itr != m_Players.end(); ++itr)
{
- if (((*itr)->GetClientHandle() != NULL) && !((*itr)->GetClientHandle()->IsDestroyed()))
+ cClientHandle * ch = (*itr)->GetClientHandle();
+ if ((ch != NULL) && !ch->IsDestroyed())
{
cPacket_PlayerListItem PlayerListItem((*itr)->GetColor() + (*itr)->GetName(), true, (*itr)->GetClientHandle()->GetPing());
a_DestPlayer->GetClientHandle()->Send( PlayerListItem );
|