aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/game/Entities/Object/Object.cpp74
-rw-r--r--src/server/game/Entities/Object/Object.h4
-rw-r--r--src/server/game/Spells/Auras/SpellAuraEffects.cpp7
3 files changed, 29 insertions, 56 deletions
diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp
index f20d452dc96..70b2618ef6c 100644
--- a/src/server/game/Entities/Object/Object.cpp
+++ b/src/server/game/Entities/Object/Object.cpp
@@ -777,64 +777,56 @@ void Object::BuildFieldsUpdate(Player* player, UpdateDataMapType& data_map) cons
BuildValuesUpdateBlockForPlayer(&iter->second, iter->first);
}
-void Object::GetUpdateFieldData(Player const* target, uint32*& flags, bool& isOwner, bool& isItemOwner, bool& hasSpecialInfo, bool& isPartyMember) const
+uint32 Object::GetUpdateFieldData(Player const* target, uint32*& flags) const
{
- // This function assumes updatefield index is always valid
+ uint32 visibleFlag = UF_FLAG_PUBLIC;
+
+ if (target == this)
+ visibleFlag |= UF_FLAG_PRIVATE;
+
switch (GetTypeId())
{
case TYPEID_ITEM:
case TYPEID_CONTAINER:
flags = ItemUpdateFieldFlags;
- isOwner = isItemOwner = ((Item*)this)->GetOwnerGUID() == target->GetGUID();
+ if (((Item*)this)->GetOwnerGUID() == target->GetGUID())
+ visibleFlag |= UF_FLAG_OWNER | UF_FLAG_ITEM_OWNER;
break;
case TYPEID_UNIT:
case TYPEID_PLAYER:
{
Player* plr = ToUnit()->GetCharmerOrOwnerPlayerOrPlayerItself();
flags = UnitUpdateFieldFlags;
- isOwner = ToUnit()->GetOwnerGUID() == target->GetGUID();
- hasSpecialInfo = ToUnit()->HasAuraTypeWithCaster(SPELL_AURA_EMPATHY, target->GetGUID());
- isPartyMember = plr && plr->IsInSameGroupWith(target);
+ if (ToUnit()->GetOwnerGUID() == target->GetGUID())
+ visibleFlag |= UF_FLAG_OWNER;
+
+ if (ToUnit()->HasAuraTypeWithCaster(SPELL_AURA_EMPATHY, target->GetGUID()))
+ visibleFlag |= UF_FLAG_SPECIAL_INFO;
+
+ if (plr && plr->IsInSameGroupWith(target))
+ visibleFlag |= UF_FLAG_PARTY_MEMBER;
break;
}
case TYPEID_GAMEOBJECT:
flags = GameObjectUpdateFieldFlags;
- isOwner = ToGameObject()->GetOwnerGUID() == target->GetGUID();
+ if (ToGameObject()->GetOwnerGUID() == target->GetGUID())
+ visibleFlag |= UF_FLAG_OWNER;
break;
case TYPEID_DYNAMICOBJECT:
flags = DynamicObjectUpdateFieldFlags;
- isOwner = ((DynamicObject*)this)->GetCasterGUID() == target->GetGUID();
+ if (((DynamicObject*)this)->GetCasterGUID() == target->GetGUID())
+ visibleFlag |= UF_FLAG_OWNER;
break;
case TYPEID_CORPSE:
flags = CorpseUpdateFieldFlags;
- isOwner = ToCorpse()->GetOwnerGUID() == target->GetGUID();
+ if (ToCorpse()->GetOwnerGUID() == target->GetGUID())
+ visibleFlag |= UF_FLAG_OWNER;
break;
case TYPEID_OBJECT:
break;
}
-}
-bool Object::IsUpdateFieldVisible(uint32 flags, bool isSelf, bool isOwner, bool isItemOwner, bool isPartyMember) const
-{
- if (flags == UF_FLAG_NONE)
- return false;
-
- if (flags & UF_FLAG_PUBLIC)
- return true;
-
- if (flags & UF_FLAG_PRIVATE && isSelf)
- return true;
-
- if (flags & UF_FLAG_OWNER && isOwner)
- return true;
-
- if (flags & UF_FLAG_ITEM_OWNER && isItemOwner)
- return true;
-
- if (flags & UF_FLAG_PARTY_MEMBER && isPartyMember)
- return true;
-
- return false;
+ return visibleFlag;
}
void Object::_LoadIntoDataField(std::string const& data, uint32 startOffset, uint32 count)
@@ -857,16 +849,10 @@ void Object::_LoadIntoDataField(std::string const& data, uint32 startOffset, uin
void Object::_SetUpdateBits(UpdateMask* updateMask, Player* target) const
{
uint32* flags = NULL;
- bool isSelf = target == this;
- bool isOwner = false;
- bool isItemOwner = false;
- bool hasSpecialInfo = false;
- bool isPartyMember = false;
-
- GetUpdateFieldData(target, flags, isOwner, isItemOwner, hasSpecialInfo, isPartyMember);
+ uint32 visibleFlag = GetUpdateFieldData(target, flags);
for (uint16 index = 0; index < m_valuesCount; ++index)
- if (_fieldNotifyFlags & flags[index] || (flags[index] & UF_FLAG_SPECIAL_INFO && hasSpecialInfo) || (_changesMask.GetBit(index) && IsUpdateFieldVisible(flags[index], isSelf, isOwner, isItemOwner, isPartyMember)))
+ if (_fieldNotifyFlags & flags[index] || ((flags[index] & visibleFlag) & UF_FLAG_SPECIAL_INFO) || (_changesMask.GetBit(index) && (flags[index] & visibleFlag)))
updateMask->SetBit(index);
}
@@ -874,16 +860,10 @@ void Object::_SetCreateBits(UpdateMask* updateMask, Player* target) const
{
uint32* value = m_uint32Values;
uint32* flags = NULL;
- bool isSelf = target == this;
- bool isOwner = false;
- bool isItemOwner = false;
- bool hasSpecialInfo = false;
- bool isPartyMember = false;
-
- GetUpdateFieldData(target, flags, isOwner, isItemOwner, hasSpecialInfo, isPartyMember);
+ uint32 visibleFlag = GetUpdateFieldData(target, flags);
for (uint16 index = 0; index < m_valuesCount; ++index, ++value)
- if (_fieldNotifyFlags & flags[index] || (flags[index] & UF_FLAG_SPECIAL_INFO && hasSpecialInfo) || (*value && IsUpdateFieldVisible(flags[index], isSelf, isOwner, isItemOwner, isPartyMember)))
+ if (_fieldNotifyFlags & flags[index] || ((flags[index] & visibleFlag) & UF_FLAG_SPECIAL_INFO) || (*value && (flags[index] & visibleFlag)))
updateMask->SetBit(index);
}
diff --git a/src/server/game/Entities/Object/Object.h b/src/server/game/Entities/Object/Object.h
index 641f9afb154..ae3d545b7d7 100644
--- a/src/server/game/Entities/Object/Object.h
+++ b/src/server/game/Entities/Object/Object.h
@@ -326,9 +326,7 @@ class Object
std::string _ConcatFields(uint16 startIndex, uint16 size) const;
void _LoadIntoDataField(std::string const& data, uint32 startOffset, uint32 count);
- void GetUpdateFieldData(Player const* target, uint32*& flags, bool& isOwner, bool& isItemOwner, bool& hasSpecialInfo, bool& isPartyMember) const;
-
- bool IsUpdateFieldVisible(uint32 flags, bool isSelf, bool isOwner, bool isItemOwner, bool isPartyMember) const;
+ uint32 GetUpdateFieldData(Player const* target, uint32*& flags) const;
void _SetUpdateBits(UpdateMask* updateMask, Player* target) const;
void _SetCreateBits(UpdateMask* updateMask, Player* target) const;
diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp
index 52e8523a72a..d6b19e6010a 100644
--- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp
+++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp
@@ -5061,10 +5061,6 @@ void AuraEffect::HandleAuraEmpathy(AuraApplication const* aurApp, uint8 mode, bo
return;
Unit* target = aurApp->GetTarget();
-
- if (target->GetTypeId() != TYPEID_UNIT)
- return;
-
if (!apply)
{
// do not remove unit flag if there are more than this auraEffect of that kind on unit on unit
@@ -5072,8 +5068,7 @@ void AuraEffect::HandleAuraEmpathy(AuraApplication const* aurApp, uint8 mode, bo
return;
}
- CreatureTemplate const* ci = sObjectMgr->GetCreatureTemplate(target->GetEntry());
- if (ci && ci->type == CREATURE_TYPE_BEAST)
+ if (target->GetCreatureType() == CREATURE_TYPE_BEAST)
target->ApplyModUInt32Value(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_SPECIALINFO, apply);
}