diff options
Diffstat (limited to 'src')
3 files changed, 20 insertions, 2 deletions
diff --git a/src/server/game/Entities/Object/Updates/UpdateFields.cpp b/src/server/game/Entities/Object/Updates/UpdateFields.cpp index 5b3ad53b13e..db98a205b5c 100644 --- a/src/server/game/Entities/Object/Updates/UpdateFields.cpp +++ b/src/server/game/Entities/Object/Updates/UpdateFields.cpp @@ -715,7 +715,7 @@ void UnitData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisi VirtualItems[i].WriteCreate(data, owner, receiver); } data << uint32(ViewerDependentValue<FlagsTag>::GetValue(this, owner, receiver)); - data << uint32(Flags2); + data << uint32(ViewerDependentValue<Flags2Tag>::GetValue(this, owner, receiver)); data << uint32(ViewerDependentValue<Flags3Tag>::GetValue(this, owner, receiver)); data << uint32(ViewerDependentValue<AuraStateTag>::GetValue(this, owner, receiver)); for (uint32 i = 0; i < 2; ++i) @@ -1098,7 +1098,7 @@ void UnitData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ignor } if (changesMask[42]) { - data << uint32(Flags2); + data << uint32(ViewerDependentValue<Flags2Tag>::GetValue(this, owner, receiver)); } if (changesMask[43]) { diff --git a/src/server/game/Entities/Object/Updates/UpdateFields.h b/src/server/game/Entities/Object/Updates/UpdateFields.h index cfc51d4d0fb..941aad27d07 100644 --- a/src/server/game/Entities/Object/Updates/UpdateFields.h +++ b/src/server/game/Entities/Object/Updates/UpdateFields.h @@ -241,6 +241,7 @@ struct UnitData : public IsUpdateFieldStructureTag, public HasChangesMask<227> UpdateField<uint32, 32, 41> Flags; struct FlagsTag : ViewerDependentValueTag<uint32> {}; UpdateField<uint32, 32, 42> Flags2; + struct Flags2Tag : ViewerDependentValueTag<uint32> {}; UpdateField<uint32, 32, 43> Flags3; struct Flags3Tag : ViewerDependentValueTag<uint32> {}; UpdateField<uint32, 32, 44> AuraState; diff --git a/src/server/game/Entities/Object/Updates/ViewerDependentValues.h b/src/server/game/Entities/Object/Updates/ViewerDependentValues.h index f73bed33eb5..4911f67518c 100644 --- a/src/server/game/Entities/Object/Updates/ViewerDependentValues.h +++ b/src/server/game/Entities/Object/Updates/ViewerDependentValues.h @@ -241,6 +241,23 @@ public: }; template<> +class ViewerDependentValue<UF::UnitData::Flags2Tag> +{ +public: + using value_type = UF::UnitData::Flags2Tag::value_type; + + static value_type GetValue(UF::UnitData const* unitData, Unit const* /*unit*/, Player const* receiver) + { + value_type flags = unitData->Flags2; + // Gamemasters should be always able to interact with units - remove uninteractible flag + if (receiver->IsGameMaster()) + flags &= ~UNIT_FLAG2_UNTARGETABLE_BY_CLIENT; + + return flags; + } +}; + +template<> class ViewerDependentValue<UF::UnitData::Flags3Tag> { public: |