diff --git a/src/game/Player.cpp b/src/game/Player.cpp index ab3e98e59..ed23d9c33 100644 --- a/src/game/Player.cpp +++ b/src/game/Player.cpp @@ -426,10 +426,8 @@ Player::~Player () { CleanupsBeforeDelete(); - if(m_uint32Values) // only for fully created Object - { - sSocialMgr.RemovePlayerSocial(GetGUIDLow()); - } + // it must be unloaded already in PlayerLogout and accessed only for loggined player + //m_social = NULL; // Note: buy back item already deleted from DB when player was saved for(int i = 0; i < PLAYER_SLOTS_COUNT; ++i) diff --git a/src/game/SpellEffects.cpp b/src/game/SpellEffects.cpp index 6525efecf..e71114367 100644 --- a/src/game/SpellEffects.cpp +++ b/src/game/SpellEffects.cpp @@ -4945,7 +4945,7 @@ void Spell::EffectDuel(uint32 i) Player *target = (Player*)unitTarget; // caster or target already have requested duel - if( caster->duel || target->duel || target->GetSocial()->HasIgnore(caster->GetGUIDLow()) ) + if( caster->duel || target->duel || !target->GetSocial() || target->GetSocial()->HasIgnore(caster->GetGUIDLow()) ) return; // Players can only fight a duel with each other outside (=not inside dungeons and not in capital cities) diff --git a/src/game/WorldSession.cpp b/src/game/WorldSession.cpp index 60c060567..261d613bf 100644 --- a/src/game/WorldSession.cpp +++ b/src/game/WorldSession.cpp @@ -380,6 +380,7 @@ void WorldSession::LogoutPlayer(bool Save) ///- Delete the player object _player->CleanupsBeforeDelete(); // do some cleanup before deleting to prevent crash at crossreferences to already deleted data + sSocialMgr.RemovePlayerSocial (_player->GetGUIDLow ()); delete _player; _player = NULL;