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 fieldVisi VirtualItems[i].WriteCreate(data, owner, receiver); } data << uint32(ViewerDependentValue::GetValue(this, owner, receiver)); - data << uint32(Flags2); + data << uint32(ViewerDependentValue::GetValue(this, owner, receiver)); data << uint32(ViewerDependentValue::GetValue(this, owner, receiver)); data << uint32(ViewerDependentValue::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::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 Flags; struct FlagsTag : ViewerDependentValueTag {}; UpdateField Flags2; + struct Flags2Tag : ViewerDependentValueTag {}; UpdateField Flags3; struct Flags3Tag : ViewerDependentValueTag {}; UpdateField 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 @@ -240,6 +240,23 @@ public: } }; +template<> +class ViewerDependentValue +{ +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 {