diff options
author | Shauren <shauren.trinity@gmail.com> | 2012-07-22 14:20:26 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2012-07-22 14:20:26 +0200 |
commit | 1fd37ac61b606a8db29e3ff04c3c0dba5f45228e (patch) | |
tree | 93bdf72ce097ae38b3ee9b9a5aac6a148940501e /src/server/game/Groups/Group.cpp | |
parent | 395994c707f2cb1cc5a6022d9f9fc729df64b1dc (diff) |
Core/Object: Use updatefield flags extracted from client to determine whether to send or not a field value instead of sending all data to client for non-player objects
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); } |