aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorleak <leakzx@googlemail.com>2011-02-22 16:52:38 +0100
committerleak <leakzx@googlemail.com>2011-02-22 16:52:38 +0100
commit09bac61e426e864d64f5e6a7eb8e645b967dfe03 (patch)
tree56c6c71d35e837555cde23db215556ca98b473f9 /src
parent1cdec5880ebbf26713dbca0d0906a327e84b7260 (diff)
Core/Groups: Move scattered group object deletion to Disband()
Diffstat (limited to 'src')
-rwxr-xr-xsrc/server/game/Battlegrounds/Battleground.cpp1
-rwxr-xr-xsrc/server/game/Entities/Player/Player.cpp16
-rwxr-xr-xsrc/server/game/Groups/Group.cpp14
-rwxr-xr-xsrc/server/game/Groups/Group.h2
4 files changed, 14 insertions, 19 deletions
diff --git a/src/server/game/Battlegrounds/Battleground.cpp b/src/server/game/Battlegrounds/Battleground.cpp
index 658846c881c..e0844cdcccd 100755
--- a/src/server/game/Battlegrounds/Battleground.cpp
+++ b/src/server/game/Battlegrounds/Battleground.cpp
@@ -1034,7 +1034,6 @@ void Battleground::RemovePlayerAtLeave(uint64 guid, bool Transport, bool SendPac
if (!group->RemoveMember(guid)) // group was disbanded
{
SetBgRaid(team, NULL);
- delete group;
}
}
DecreaseInvitedCount(team);
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index d3d38ffa4aa..1179eef26e6 100755
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -2647,12 +2647,12 @@ void Player::UninviteFromGroup()
if (group->IsCreated())
{
group->Disband(true);
- sObjectMgr->RemoveGroup(group);
}
else
+ {
group->RemoveAllInvites();
-
- delete group;
+ delete group;
+ }
}
}
@@ -2660,14 +2660,8 @@ void Player::RemoveFromGroup(Group* group, uint64 guid, RemoveMethod method /* =
{
if (group)
{
- if (group->RemoveMember(guid, method, kicker, reason) <= 1)
- {
- // group->Disband(); already disbanded in RemoveMember
- sObjectMgr->RemoveGroup(group);
- delete group;
- group = NULL;
- // removemember sets the player's group pointer to NULL
- }
+ group->RemoveMember(guid, method, kicker, reason);
+ group = NULL;
}
}
diff --git a/src/server/game/Groups/Group.cpp b/src/server/game/Groups/Group.cpp
index bef3904bddb..2f7ae3c4d5f 100755
--- a/src/server/game/Groups/Group.cpp
+++ b/src/server/game/Groups/Group.cpp
@@ -405,7 +405,7 @@ bool Group::AddMember(Player *player)
return true;
}
-uint32 Group::RemoveMember(const uint64 &guid, const RemoveMethod &method /* = GROUP_REMOVEMETHOD_DEFAULT */, uint64 kicker /* = 0 */, const char* reason /* = NULL */)
+bool Group::RemoveMember(const uint64 &guid, const RemoveMethod &method /*= GROUP_REMOVEMETHOD_DEFAULT*/, uint64 kicker /*= 0*/, const char* reason /*= NULL*/)
{
BroadcastGroupUpdate();
@@ -505,12 +505,15 @@ uint32 Group::RemoveMember(const uint64 &guid, const RemoveMethod &method /* = G
}
SendUpdate();
+
+ return true;
}
// If group size before player removal <= 2 then disband it
else
+ {
Disband();
-
- return m_memberSlots.size();
+ return false;
+ }
}
void Group::ChangeLeader(const uint64 &guid)
@@ -634,9 +637,8 @@ void Group::Disband(bool hideDestroy /* = false */)
ResetInstances(INSTANCE_RESET_GROUP_DISBAND, true, NULL);
}
- m_guid = 0;
- m_leaderGuid = 0;
- m_leaderName = "";
+ sObjectMgr->RemoveGroup(this);
+ delete this;
}
/*********************************************************/
diff --git a/src/server/game/Groups/Group.h b/src/server/game/Groups/Group.h
index e4c4066572a..3928b6ee54a 100755
--- a/src/server/game/Groups/Group.h
+++ b/src/server/game/Groups/Group.h
@@ -190,7 +190,7 @@ class Group
void RemoveAllInvites();
bool AddLeaderInvite(Player *player);
bool AddMember(Player *player);
- uint32 RemoveMember(const uint64 &guid, const RemoveMethod &method = GROUP_REMOVEMETHOD_DEFAULT, uint64 kicker = 0, const char* reason = NULL);
+ bool RemoveMember(const uint64 &guid, const RemoveMethod &method = GROUP_REMOVEMETHOD_DEFAULT, uint64 kicker = 0, const char* reason = NULL);
void ChangeLeader(const uint64 &guid);
void SetLootMethod(LootMethod method);
void SetLooterGuid(const uint64 &guid);