aboutsummaryrefslogtreecommitdiff
path: root/src/game/Group.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/game/Group.cpp')
-rw-r--r--src/game/Group.cpp21
1 files changed, 20 insertions, 1 deletions
diff --git a/src/game/Group.cpp b/src/game/Group.cpp
index 8afac50da13..8254bf88bb8 100644
--- a/src/game/Group.cpp
+++ b/src/game/Group.cpp
@@ -295,12 +295,14 @@ bool Group::AddMember(const uint64 &guid, const char* name)
uint32 Group::RemoveMember(const uint64 &guid, const uint8 &method)
{
+ BroadcastGroupUpdate();
+
// remove member and change leader (if need) only if strong more 2 members _before_ member remove
if(GetMembersCount() > (isBGGroup() ? 1 : 2)) // in BG group case allow 1 members group
{
bool leaderChanged = _removeMember(guid);
- Player *player = objmgr.GetPlayer( guid );
+ Player *player = objmgr.GetPlayer( guid ); // FG: TODO: could be removed, its just here for consistency
if (player)
{
WorldPacket data;
@@ -1521,3 +1523,20 @@ void Group::_homebindIfInstance(Player *player)
player->m_InstanceValid = false;
}
}
+
+void Group::BroadcastGroupUpdate(void)
+{
+ // FG: HACK: force flags update on group leave - for values update hack
+ // -- not very efficient but safe
+ for(member_citerator citr = m_memberSlots.begin(); citr != m_memberSlots.end(); ++citr)
+ {
+
+ Player *pp = objmgr.GetPlayer(citr->guid);
+ if(pp && pp->IsInWorld())
+ {
+ pp->ForceValuesUpdateAtIndex(UNIT_FIELD_BYTES_2);
+ pp->ForceValuesUpdateAtIndex(UNIT_FIELD_FACTIONTEMPLATE);
+ DEBUG_LOG("-- Forced group value update for '%s'", pp->GetName());
+ }
+ }
+} \ No newline at end of file