diff options
author | Shauren <shauren.trinity@gmail.com> | 2019-06-03 20:40:34 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2019-06-08 17:06:57 +0200 |
commit | 455959c6064af6f7863a6b4b57cb0ef1646bd8ef (patch) | |
tree | 7d7a7cdd3a44643ee5fc7d19521ced1c8b815c66 /src/server/game/Groups/Group.cpp | |
parent | 31fda79556e55375962a3c9e46f6dbdbf6e90d18 (diff) |
Core/PacketIO: Rewrite updatefield handling
Diffstat (limited to 'src/server/game/Groups/Group.cpp')
-rw-r--r-- | src/server/game/Groups/Group.cpp | 28 |
1 files changed, 9 insertions, 19 deletions
diff --git a/src/server/game/Groups/Group.cpp b/src/server/game/Groups/Group.cpp index c0b5d775642..ae0d99ecc85 100644 --- a/src/server/game/Groups/Group.cpp +++ b/src/server/game/Groups/Group.cpp @@ -40,13 +40,12 @@ #include "Random.h" #include "SpellAuras.h" #include "UpdateData.h" -#include "UpdateFieldFlags.h" #include "Util.h" #include "World.h" #include "WorldSession.h" Roll::Roll(LootItem const& li) : itemid(li.itemid), -itemRandomPropId(li.randomPropertyId), itemRandomSuffix(li.randomSuffix), itemCount(li.count), +itemRandomPropId(li.randomPropertyId), itemCount(li.count), totalPlayersRolling(0), totalNeed(0), totalGreed(0), totalPass(0), itemSlot(0), rollVoteMask(ROLL_ALL_TYPE_NO_DISENCHANT) { } @@ -112,7 +111,7 @@ bool Group::Create(Player* leader) m_guid = ObjectGuid::Create<HighGuid::Party>(sGroupMgr->GenerateGroupId()); m_leaderGuid = leaderGuid; m_leaderName = leader->GetName(); - leader->SetFlag(PLAYER_FLAGS, PLAYER_FLAGS_GROUP_LEADER); + leader->AddPlayerFlag(PLAYER_FLAGS_GROUP_LEADER); if (isBGGroup() || isBFGroup()) { @@ -488,8 +487,6 @@ bool Group::AddMember(Player* player) { // Broadcast new player group member fields to rest of the group - player->SetFieldNotifyFlag(UF_FLAG_PARTY_MEMBER); - UpdateData groupData(player->GetMapId()); WorldPacket groupDataPacket; @@ -502,17 +499,13 @@ bool Group::AddMember(Player* player) if (Player* existingMember = itr->GetSource()) { if (player->HaveAtClient(existingMember)) - { - existingMember->SetFieldNotifyFlag(UF_FLAG_PARTY_MEMBER); - existingMember->BuildValuesUpdateBlockForPlayer(&groupData, player); - existingMember->RemoveFieldNotifyFlag(UF_FLAG_PARTY_MEMBER); - } + existingMember->BuildValuesUpdateBlockForPlayerWithFlag(&groupData, UF::UpdateFieldFlag::PartyMember, player); if (existingMember->HaveAtClient(player)) { UpdateData newData(player->GetMapId()); WorldPacket newDataPacket; - player->BuildValuesUpdateBlockForPlayer(&newData, existingMember); + player->BuildValuesUpdateBlockForPlayerWithFlag(&newData, UF::UpdateFieldFlag::PartyMember, existingMember); if (newData.HasData()) { newData.BuildPacket(&newDataPacket); @@ -527,8 +520,6 @@ bool Group::AddMember(Player* player) groupData.BuildPacket(&groupDataPacket); player->SendDirectMessage(&groupDataPacket); } - - player->RemoveFieldNotifyFlag(UF_FLAG_PARTY_MEMBER); } if (m_maxEnchantingLevel < player->GetSkillValue(SKILL_ENCHANTING)) @@ -739,9 +730,9 @@ void Group::ChangeLeader(ObjectGuid newLeaderGuid, int8 partyIndex) } if (Player* oldLeader = ObjectAccessor::FindConnectedPlayer(m_leaderGuid)) - oldLeader->RemoveFlag(PLAYER_FLAGS, PLAYER_FLAGS_GROUP_LEADER); + oldLeader->RemovePlayerFlag(PLAYER_FLAGS_GROUP_LEADER); - newLeader->SetFlag(PLAYER_FLAGS, PLAYER_FLAGS_GROUP_LEADER); + newLeader->AddPlayerFlag(PLAYER_FLAGS_GROUP_LEADER); m_leaderGuid = newLeader->GetGUID(); m_leaderName = newLeader->GetName(); ToggleGroupMemberFlag(slot, MEMBER_FLAG_ASSISTANT, false); @@ -2197,11 +2188,10 @@ void Group::BroadcastGroupUpdate(void) // -- not very efficient but safe for (member_citerator citr = m_memberSlots.begin(); citr != m_memberSlots.end(); ++citr) { - Player* pp = ObjectAccessor::FindPlayer(citr->guid); - if (pp) + if (Player * pp = ObjectAccessor::FindPlayer(citr->guid)) { - pp->ForceValuesUpdateAtIndex(UNIT_FIELD_BYTES_2); - pp->ForceValuesUpdateAtIndex(UNIT_FIELD_FACTIONTEMPLATE); + pp->ForceUpdateFieldChange(pp->m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::PvpFlags)); + pp->ForceUpdateFieldChange(pp->m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::FactionTemplate)); TC_LOG_DEBUG("misc", "-- Forced group value update for '%s'", pp->GetName().c_str()); } } |