diff options
Diffstat (limited to 'src/server/game/Groups/Group.cpp')
-rwxr-xr-x | src/server/game/Groups/Group.cpp | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/src/server/game/Groups/Group.cpp b/src/server/game/Groups/Group.cpp index f9d609150ef..428f0d25a8b 100755 --- a/src/server/game/Groups/Group.cpp +++ b/src/server/game/Groups/Group.cpp @@ -34,6 +34,7 @@ #include "MapInstanced.h" #include "Util.h" #include "LFGMgr.h" +#include "UpdateFieldFlags.h" Roll::Roll(uint64 _guid, LootItem const& li) : itemGUID(_guid), itemid(li.itemid), itemRandomPropId(li.randomPropertyId), itemRandomSuffix(li.randomSuffix), itemCount(li.count), @@ -437,6 +438,47 @@ bool Group::AddMember(Player* player) if (isRaidGroup()) player->UpdateForQuestWorldObjects(); + { + // Broadcast new player group member fields to rest of the group + player->SetFieldNotifyFlag(UF_FLAG_PARTY_MEMBER); + + UpdateData groupData; + WorldPacket groupDataPacket; + + // Broadcast group members' fields to player + for (GroupReference* itr = GetFirstMember(); itr != NULL; itr = itr->next()) + { + if (itr->getSource() == player) + continue; + + if (Player* member = itr->getSource()) + { + if (player->HaveAtClient(member)) + { + member->SetFieldNotifyFlag(UF_FLAG_PARTY_MEMBER); + member->BuildValuesUpdateBlockForPlayer(&groupData, player); + member->RemoveFieldNotifyFlag(UF_FLAG_PARTY_MEMBER); + } + + if (member->HaveAtClient(player)) + { + UpdateData newData; + WorldPacket newDataPacket; + player->BuildValuesUpdateBlockForPlayer(&newData, member); + member->SendDirectMessage(&newDataPacket); + } + } + } + + if (groupData.HasData()) + { + groupData.BuildPacket(&groupDataPacket); + player->SendDirectMessage(&groupDataPacket); + } + + player->RemoveFieldNotifyFlag(UF_FLAG_PARTY_MEMBER); + } + if (m_maxEnchantingLevel < player->GetSkillValue(SKILL_ENCHANTING)) m_maxEnchantingLevel = player->GetSkillValue(SKILL_ENCHANTING); } |