aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorKingPin <none@none>2008-10-28 08:10:44 -0500
committerKingPin <none@none>2008-10-28 08:10:44 -0500
commit3ea64f75812b7cdf81d9bc404ee9f50f16054b6c (patch)
treef94744dca627c05971268a19f5eb381eacfd6653 /src
parentf724227f2478f8755ad22af9be6e0367d109fdd0 (diff)
[svn] * Prevent crash at access to deleted social data for player. Remove social data at logout instead - source mangos
* Fixed subcommands list output at console. - source mangos * Rename scripts update. --HG-- branch : trunk
Diffstat (limited to 'src')
-rw-r--r--src/game/Chat.cpp8
-rw-r--r--src/game/Player.cpp5
-rw-r--r--src/game/SpellEffects.cpp2
-rw-r--r--src/game/WorldSession.cpp1
4 files changed, 10 insertions, 6 deletions
diff --git a/src/game/Chat.cpp b/src/game/Chat.cpp
index 67c79642631..0b1bf2e60b6 100644
--- a/src/game/Chat.cpp
+++ b/src/game/Chat.cpp
@@ -795,7 +795,13 @@ bool ChatHandler::ShowHelpForSubCommands(ChatCommand *table, char const* cmd, ch
if( *subcmd && !hasStringAbbr(table[i].Name, subcmd))
continue;
- (list += "\n ") += table[i].Name;
+ if(m_session)
+ list += "\n ";
+ else
+ list += "\n\r ";
+
+ list += table[i].Name;
+
if(table[i].ChildCommands)
list += " ...";
}
diff --git a/src/game/Player.cpp b/src/game/Player.cpp
index 39ac45bde42..b976ff13890 100644
--- a/src/game/Player.cpp
+++ b/src/game/Player.cpp
@@ -433,10 +433,7 @@ Player::~Player ()
{
CleanupsBeforeDelete();
- if(m_uint32Values) // only for fully created Object
- {
- sSocialMgr.RemovePlayerSocial(GetGUIDLow());
- }
+ //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 4783724d025..90dc40c89fc 100644
--- a/src/game/SpellEffects.cpp
+++ b/src/game/SpellEffects.cpp
@@ -4898,7 +4898,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 7d9e2a365ac..129668be5b0 100644
--- a/src/game/WorldSession.cpp
+++ b/src/game/WorldSession.cpp
@@ -385,6 +385,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;