diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Guilds/Guild.cpp | 22 | ||||
-rw-r--r-- | src/server/game/Guilds/Guild.h | 2 | ||||
-rw-r--r-- | src/server/game/Scripting/ScriptMgr.cpp | 4 | ||||
-rw-r--r-- | src/server/game/Scripting/ScriptMgr.h | 4 |
4 files changed, 15 insertions, 17 deletions
diff --git a/src/server/game/Guilds/Guild.cpp b/src/server/game/Guilds/Guild.cpp index 6bc7dcf5538..d838a01cee9 100644 --- a/src/server/game/Guilds/Guild.cpp +++ b/src/server/game/Guilds/Guild.cpp @@ -1688,10 +1688,10 @@ void Guild::HandleLeaveMember(WorldSession* session) } else { - DeleteMember(player->GetGUID(), false, false); - _LogEvent(GUILD_EVENT_LOG_LEAVE_GUILD, player->GetGUID().GetCounter()); - SendEventPlayerLeft(player); + SendEventPlayerLeft(GetMember(player->GetGUID())); + + DeleteMember(player->GetGUID(), false, false); SendCommandResult(session, GUILD_COMMAND_LEAVE_GUILD, ERR_GUILD_COMMAND_SUCCESS, m_name); } @@ -1724,12 +1724,11 @@ void Guild::HandleRemoveMember(WorldSession* session, ObjectGuid guid) SendCommandResult(session, GUILD_COMMAND_REMOVE_PLAYER, ERR_GUILD_RANK_TOO_HIGH_S, name); else { - // After call to DeleteMember pointer to member becomes invalid - DeleteMember(guid, false, true); _LogEvent(GUILD_EVENT_LOG_UNINVITE_PLAYER, player->GetGUID().GetCounter(), guid.GetCounter()); + SendEventPlayerLeft(member, memberMe, true); - Player* pMember = ObjectAccessor::FindConnectedPlayer(guid); - SendEventPlayerLeft(pMember, player, true); + // After call to DeleteMember pointer to member becomes invalid + DeleteMember(guid, false, true); SendCommandResult(session, GUILD_COMMAND_REMOVE_PLAYER, ERR_GUILD_COMMAND_SUCCESS, name); } @@ -2204,7 +2203,7 @@ void Guild::SendEventNewLeader(Member* newLeader, Member* oldLeader, bool isSelf BroadcastPacket(eventPacket.Write()); } -void Guild::SendEventPlayerLeft(Player* leaver, Player* remover, bool isRemoved) +void Guild::SendEventPlayerLeft(Member* leaver, Member* remover, bool isRemoved) { WorldPackets::Guild::GuildEventPlayerLeft eventPacket; eventPacket.Removed = isRemoved; @@ -2638,8 +2637,6 @@ bool Guild::AddMember(ObjectGuid guid, uint8 rankId) void Guild::DeleteMember(ObjectGuid guid, bool isDisbanding, bool isKicked, bool canDeleteGuild) { - Player* player = ObjectAccessor::FindConnectedPlayer(guid); - // Guild master can be deleted when loading guild and guid doesn't exist in characters table // or when he is removed from guild by gm command if (m_leaderGuid == guid && !isDisbanding) @@ -2672,17 +2669,18 @@ void Guild::DeleteMember(ObjectGuid guid, bool isDisbanding, bool isKicked, bool if (oldLeader) { SendEventNewLeader(newLeader, oldLeader, true); - SendEventPlayerLeft(player); + SendEventPlayerLeft(oldLeader); } } // Call script on remove before member is actually removed from guild (and database) - sScriptMgr->OnGuildRemoveMember(this, player, isDisbanding, isKicked); + sScriptMgr->OnGuildRemoveMember(this, guid, isDisbanding, isKicked); if (Member* member = GetMember(guid)) delete member; m_members.erase(guid); // If player not online data in data field will be loaded from guild tabs no need to update it !! + Player* player = ObjectAccessor::FindConnectedPlayer(guid); if (player) { player->SetInGuild(UI64LIT(0)); diff --git a/src/server/game/Guilds/Guild.h b/src/server/game/Guilds/Guild.h index 22032f05ee3..42951320885 100644 --- a/src/server/game/Guilds/Guild.h +++ b/src/server/game/Guilds/Guild.h @@ -817,7 +817,7 @@ public: void SendEventBankMoneyChanged(); void SendEventMOTD(WorldSession* session, bool broadcast = false); void SendEventNewLeader(Member* newLeader, Member* oldLeader, bool isSelfPromoted = false); - void SendEventPlayerLeft(Player* leaver, Player* remover = nullptr, bool isRemoved = false); + void SendEventPlayerLeft(Member* leaver, Member* remover = nullptr, bool isRemoved = false); void SendEventPresenceChanged(WorldSession* session, bool loggedOn, bool broadcast = false); // Load from DB diff --git a/src/server/game/Scripting/ScriptMgr.cpp b/src/server/game/Scripting/ScriptMgr.cpp index 8b05ec98fa5..1496ca988e5 100644 --- a/src/server/game/Scripting/ScriptMgr.cpp +++ b/src/server/game/Scripting/ScriptMgr.cpp @@ -1354,9 +1354,9 @@ void ScriptMgr::OnGuildAddMember(Guild* guild, Player* player, uint8& plRank) FOREACH_SCRIPT(GuildScript)->OnAddMember(guild, player, plRank); } -void ScriptMgr::OnGuildRemoveMember(Guild* guild, Player* player, bool isDisbanding, bool isKicked) +void ScriptMgr::OnGuildRemoveMember(Guild* guild, ObjectGuid guid, bool isDisbanding, bool isKicked) { - FOREACH_SCRIPT(GuildScript)->OnRemoveMember(guild, player, isDisbanding, isKicked); + FOREACH_SCRIPT(GuildScript)->OnRemoveMember(guild, guid, isDisbanding, isKicked); } void ScriptMgr::OnGuildMOTDChanged(Guild* guild, const std::string& newMotd) diff --git a/src/server/game/Scripting/ScriptMgr.h b/src/server/game/Scripting/ScriptMgr.h index 97f4c4e6bc9..2ac42dd1a63 100644 --- a/src/server/game/Scripting/ScriptMgr.h +++ b/src/server/game/Scripting/ScriptMgr.h @@ -814,7 +814,7 @@ class GuildScript : public ScriptObject virtual void OnAddMember(Guild* /*guild*/, Player* /*player*/, uint8& /*plRank*/) { } // Called when a member is removed from the guild. - virtual void OnRemoveMember(Guild* /*guild*/, Player* /*player*/, bool /*isDisbanding*/, bool /*isKicked*/) { } + virtual void OnRemoveMember(Guild* /*guild*/, ObjectGuid /*guid*/, bool /*isDisbanding*/, bool /*isKicked*/) { } // Called when the guild MOTD (message of the day) changes. virtual void OnMOTDChanged(Guild* /*guild*/, const std::string& /*newMotd*/) { } @@ -1101,7 +1101,7 @@ class ScriptMgr public: /* GuildScript */ void OnGuildAddMember(Guild* guild, Player* player, uint8& plRank); - void OnGuildRemoveMember(Guild* guild, Player* player, bool isDisbanding, bool isKicked); + void OnGuildRemoveMember(Guild* guild, ObjectGuid guid, bool isDisbanding, bool isKicked); void OnGuildMOTDChanged(Guild* guild, const std::string& newMotd); void OnGuildInfoChanged(Guild* guild, const std::string& newInfo); void OnGuildCreate(Guild* guild, Player* leader, const std::string& name); |