aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Guilds/Guild.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/game/Guilds/Guild.cpp')
-rw-r--r--src/server/game/Guilds/Guild.cpp31
1 files changed, 13 insertions, 18 deletions
diff --git a/src/server/game/Guilds/Guild.cpp b/src/server/game/Guilds/Guild.cpp
index 568194d1f04..18fed0e33c6 100644
--- a/src/server/game/Guilds/Guild.cpp
+++ b/src/server/game/Guilds/Guild.cpp
@@ -1532,7 +1532,8 @@ void Guild::HandleAcceptMember(WorldSession* session)
void Guild::HandleLeaveMember(WorldSession* session)
{
Player* player = session->GetPlayer();
- bool disband = false;
+
+ sCalendarMgr->RemovePlayerGuildEventsAndSignups(player->GetGUID(), GetId());
// If leader is leaving
if (_IsLeader(player))
@@ -1544,7 +1545,6 @@ void Guild::HandleLeaveMember(WorldSession* session)
{
// Guild is disbanded if leader leaves.
Disband();
- disband = true;
}
}
else
@@ -1557,11 +1557,6 @@ void Guild::HandleLeaveMember(WorldSession* session)
SendCommandResult(session, GUILD_COMMAND_QUIT, ERR_GUILD_COMMAND_SUCCESS, m_name);
}
-
- sCalendarMgr->RemovePlayerGuildEventsAndSignups(player->GetGUID(), GetId());
-
- if (disband)
- delete this;
}
void Guild::HandleRemoveMember(WorldSession* session, std::string_view name)
@@ -1786,7 +1781,6 @@ void Guild::HandleDisband(WorldSession* session)
{
Disband();
TC_LOG_DEBUG("guild", "Guild Successfully Disbanded");
- delete this;
}
}
@@ -2110,13 +2104,8 @@ bool Guild::Validate()
if (!pLeader)
{
CharacterDatabaseTransaction dummy(nullptr);
- DeleteMember(dummy, m_leaderGuid);
- // If no more members left, disband guild
- if (m_members.empty())
- {
- Disband();
+ if (DeleteMember(dummy, m_leaderGuid))
return false;
- }
}
else if (!pLeader->IsRank(GR_GUILDMASTER))
_SetLeaderGUID(*pLeader);
@@ -2276,7 +2265,7 @@ bool Guild::AddMember(CharacterDatabaseTransaction trans, ObjectGuid guid, uint8
return true;
}
-void Guild::DeleteMember(CharacterDatabaseTransaction trans, ObjectGuid guid, bool isDisbanding, bool isKicked, bool canDeleteGuild)
+bool Guild::DeleteMember(CharacterDatabaseTransaction trans, ObjectGuid guid, bool isDisbanding, bool isKicked)
{
ObjectGuid::LowType lowguid = guid.GetCounter();
Player* player = ObjectAccessor::FindConnectedPlayer(guid);
@@ -2298,9 +2287,7 @@ void Guild::DeleteMember(CharacterDatabaseTransaction trans, ObjectGuid guid, bo
if (!newLeader)
{
Disband();
- if (canDeleteGuild)
- delete this;
- return;
+ return true;
}
_SetLeaderGUID(*newLeader);
@@ -2333,6 +2320,14 @@ void Guild::DeleteMember(CharacterDatabaseTransaction trans, ObjectGuid guid, bo
_DeleteMemberFromDB(trans, lowguid);
if (!isDisbanding)
_UpdateAccountsNumber();
+
+ if (m_members.empty())
+ {
+ Disband();
+ return true;
+ }
+
+ return false;
}
bool Guild::ChangeMemberRank(CharacterDatabaseTransaction trans, ObjectGuid guid, uint8 newRank)