aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Guilds/Guild.cpp22
-rw-r--r--src/server/game/Guilds/Guild.h2
-rw-r--r--src/server/game/Scripting/ScriptMgr.cpp4
-rw-r--r--src/server/game/Scripting/ScriptMgr.h4
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);