aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Groups/Group.cpp
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2019-06-03 20:40:34 +0200
committerShauren <shauren.trinity@gmail.com>2019-06-08 17:06:57 +0200
commit455959c6064af6f7863a6b4b57cb0ef1646bd8ef (patch)
tree7d7a7cdd3a44643ee5fc7d19521ced1c8b815c66 /src/server/game/Groups/Group.cpp
parent31fda79556e55375962a3c9e46f6dbdbf6e90d18 (diff)
Core/PacketIO: Rewrite updatefield handling
Diffstat (limited to 'src/server/game/Groups/Group.cpp')
-rw-r--r--src/server/game/Groups/Group.cpp28
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());
}
}