diff options
6 files changed, 40 insertions, 39 deletions
diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp index c1351fd30a7..675d0fff723 100644 --- a/src/server/game/Entities/Creature/Creature.cpp +++ b/src/server/game/Entities/Creature/Creature.cpp @@ -3205,7 +3205,7 @@ SpawnTrackingStateData const* Creature::GetSpawnTrackingStateDataForPlayer(Playe if (!player) return nullptr; - if (SpawnMetadata const* data = sObjectMgr->GetSpawnMetadata(SPAWN_TYPE_CREATURE, GetSpawnId())) + if (CreatureData const* data = GetCreatureData()) { if (data->spawnTrackingQuestObjectiveId && data->spawnTrackingData) { diff --git a/src/server/game/Entities/GameObject/GameObject.cpp b/src/server/game/Entities/GameObject/GameObject.cpp index ae7f5f69ceb..16b983d6214 100644 --- a/src/server/game/Entities/GameObject/GameObject.cpp +++ b/src/server/game/Entities/GameObject/GameObject.cpp @@ -3586,7 +3586,7 @@ SpawnTrackingStateData const* GameObject::GetSpawnTrackingStateDataForPlayer(Pla if (!player) return nullptr; - if (SpawnMetadata const* data = sObjectMgr->GetSpawnMetadata(SPAWN_TYPE_GAMEOBJECT, GetSpawnId())) + if (GameObjectData const* data = GetGameObjectData()) { if (data->spawnTrackingQuestObjectiveId && data->spawnTrackingData) { diff --git a/src/server/game/Entities/Object/Updates/UpdateFields.cpp b/src/server/game/Entities/Object/Updates/UpdateFields.cpp index 03352b2c6ac..83784f90050 100644 --- a/src/server/game/Entities/Object/Updates/UpdateFields.cpp +++ b/src/server/game/Entities/Object/Updates/UpdateFields.cpp @@ -929,19 +929,20 @@ bool PassiveSpellHistory::operator==(PassiveSpellHistory const& right) const void UnitData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Unit const* owner, Player const* receiver) const { + ViewerDependentValue<StateWorldEffectIDsTag>::value_type stateWorldEffectIDs = ViewerDependentValue<StateWorldEffectIDsTag>::GetValue(this, owner, receiver); + data << int32(ViewerDependentValue<DisplayIDTag>::GetValue(this, owner, receiver)); data << uint32(ViewerDependentValue<NpcFlagsTag>::GetValue(this, owner, receiver)); data << uint32(ViewerDependentValue<NpcFlags2Tag>::GetValue(this, owner, receiver)); data << uint32(ViewerDependentValue<StateSpellVisualIDTag>::GetValue(this, owner, receiver)); data << uint32(ViewerDependentValue<StateAnimIDTag>::GetValue(this, owner, receiver)); data << uint32(ViewerDependentValue<StateAnimKitIDTag>::GetValue(this, owner, receiver)); - std::vector stateWorldEffects = ViewerDependentValue<StateWorldEffectIDsTag>::GetValue(this, owner, receiver); - data << uint32(stateWorldEffects.size()); + data << uint32(stateWorldEffectIDs->size()); data << uint32(StateWorldEffectsQuestObjectiveID); data << int32(SpellOverrideNameID); - for (uint32 i = 0; i < stateWorldEffects.size(); ++i) + for (uint32 i = 0; i < stateWorldEffectIDs->size(); ++i) { - data << uint32((stateWorldEffects)[i]); + data << uint32((*stateWorldEffectIDs)[i]); } data << Charm; data << Summon; @@ -1169,6 +1170,8 @@ void UnitData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ignor if (changesMask.GetBlock(i)) data.WriteBits(changesMask.GetBlock(i), 32); + ViewerDependentValue<StateWorldEffectIDsTag>::value_type stateWorldEffectIDs = {}; + if (changesMask[0]) { if (changesMask[1]) @@ -1177,11 +1180,11 @@ void UnitData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ignor } if (changesMask[2]) { - std::vector stateWorldEffects = ViewerDependentValue<StateWorldEffectIDsTag>::GetValue(this, owner, receiver); - data.WriteBits(stateWorldEffects.size(), 32); - for (uint32 i = 0; i < stateWorldEffects.size(); ++i) + stateWorldEffectIDs = ViewerDependentValue<StateWorldEffectIDsTag>::GetValue(this, owner, receiver); + data.WriteBits(stateWorldEffectIDs->size(), 32); + for (uint32 i = 0; i < stateWorldEffectIDs->size(); ++i) { - data << uint32((stateWorldEffects)[i]); + data << uint32((*stateWorldEffectIDs)[i]); } } } @@ -6438,17 +6441,18 @@ void ActivePlayerData::ClearChangesMask() void GameObjectData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, GameObject const* owner, Player const* receiver) const { + ViewerDependentValue<StateWorldEffectIDsTag>::value_type stateWorldEffectIDs = ViewerDependentValue<StateWorldEffectIDsTag>::GetValue(this, owner, receiver); + data << int32(DisplayID); data << uint32(SpellVisualID); data << uint32(ViewerDependentValue<StateSpellVisualIDTag>::GetValue(this, owner, receiver)); - data << uint32(ViewerDependentValue<StateAnimIDTag>::GetValue(this, owner, receiver)); - data << uint32(ViewerDependentValue<StateAnimKitIDTag>::GetValue(this, owner, receiver)); - std::vector stateWorldEffects = ViewerDependentValue<StateWorldEffectIDsTag>::GetValue(this, owner, receiver); - data << uint32(stateWorldEffects.size()); + data << uint32(ViewerDependentValue<SpawnTrackingStateAnimIDTag>::GetValue(this, owner, receiver)); + data << uint32(ViewerDependentValue<SpawnTrackingStateAnimKitIDTag>::GetValue(this, owner, receiver)); + data << uint32(stateWorldEffectIDs->size()); data << uint32(StateWorldEffectsQuestObjectiveID); - for (uint32 i = 0; i < stateWorldEffects.size(); ++i) + for (uint32 i = 0; i < stateWorldEffectIDs->size(); ++i) { - data << uint32((stateWorldEffects)[i]); + data << uint32((*stateWorldEffectIDs)[i]); } data << CreatedBy; data << GuildGUID; @@ -6489,15 +6493,17 @@ void GameObjectData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool { data.WriteBits(changesMask.GetBlock(0), 25); + ViewerDependentValue<StateWorldEffectIDsTag>::value_type stateWorldEffectIDs = {}; + if (changesMask[0]) { if (changesMask[1]) { - std::vector stateWorldEffects = ViewerDependentValue<StateWorldEffectIDsTag>::GetValue(this, owner, receiver); - data.WriteBits(stateWorldEffects.size(), 32); - for (uint32 i = 0; i < stateWorldEffects.size(); ++i) + stateWorldEffectIDs = ViewerDependentValue<StateWorldEffectIDsTag>::GetValue(this, owner, receiver); + data.WriteBits(stateWorldEffectIDs->size(), 32); + for (uint32 i = 0; i < stateWorldEffectIDs->size(); ++i) { - data << uint32((stateWorldEffects)[i]); + data << uint32((*stateWorldEffectIDs)[i]); } } } @@ -6556,11 +6562,11 @@ void GameObjectData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool } if (changesMask[7]) { - data << uint32(ViewerDependentValue<StateAnimIDTag>::GetValue(this, owner, receiver)); + data << uint32(ViewerDependentValue<SpawnTrackingStateAnimIDTag>::GetValue(this, owner, receiver)); } if (changesMask[8]) { - data << uint32(ViewerDependentValue<StateAnimKitIDTag>::GetValue(this, owner, receiver)); + data << uint32(ViewerDependentValue<SpawnTrackingStateAnimKitIDTag>::GetValue(this, owner, receiver)); } if (changesMask[9]) { diff --git a/src/server/game/Entities/Object/Updates/UpdateFields.h b/src/server/game/Entities/Object/Updates/UpdateFields.h index 335a55666bd..0f24599e5db 100644 --- a/src/server/game/Entities/Object/Updates/UpdateFields.h +++ b/src/server/game/Entities/Object/Updates/UpdateFields.h @@ -1204,9 +1204,9 @@ struct GameObjectData : public IsUpdateFieldStructureTag, public HasChangesMask< UpdateField<uint32, 0, 6> StateSpellVisualID; struct StateSpellVisualIDTag : ViewerDependentValueTag<uint32> {}; UpdateField<uint32, 0, 7> SpawnTrackingStateAnimID; - struct StateAnimIDTag : ViewerDependentValueTag<uint32> {}; + struct SpawnTrackingStateAnimIDTag : ViewerDependentValueTag<uint32> {}; UpdateField<uint32, 0, 8> SpawnTrackingStateAnimKitID; - struct StateAnimKitIDTag : ViewerDependentValueTag<uint32> {}; + struct SpawnTrackingStateAnimKitIDTag : ViewerDependentValueTag<uint32> {}; UpdateField<uint32, 0, 9> StateWorldEffectsQuestObjectiveID; UpdateField<ObjectGuid, 0, 10> CreatedBy; UpdateField<ObjectGuid, 0, 11> GuildGUID; diff --git a/src/server/game/Entities/Object/Updates/ViewerDependentValues.h b/src/server/game/Entities/Object/Updates/ViewerDependentValues.h index 646673552c9..9422d37bdcb 100644 --- a/src/server/game/Entities/Object/Updates/ViewerDependentValues.h +++ b/src/server/game/Entities/Object/Updates/ViewerDependentValues.h @@ -207,17 +207,15 @@ template<> class ViewerDependentValue<UF::UnitData::StateWorldEffectIDsTag> { public: - using value_type = UF::UnitData::StateWorldEffectIDsTag::value_type; + using value_type = UF::UnitData::StateWorldEffectIDsTag::value_type const*; static value_type GetValue(UF::UnitData const* unitData, Unit const* unit, Player const* receiver) { - value_type stateWorldEffects = unitData->StateWorldEffectIDs; - if (unit->IsCreature()) if (SpawnTrackingStateData const* spawnTrackingStateData = unit->GetSpawnTrackingStateDataForPlayer(receiver)) - stateWorldEffects = spawnTrackingStateData->StateWorldEffects; + return &spawnTrackingStateData->StateWorldEffects; - return stateWorldEffects; + return &*unitData->StateWorldEffectIDs; } }; @@ -462,16 +460,14 @@ template<> class ViewerDependentValue<UF::GameObjectData::StateWorldEffectIDsTag> { public: - using value_type = UF::GameObjectData::StateWorldEffectIDsTag::value_type; + using value_type = UF::GameObjectData::StateWorldEffectIDsTag::value_type const*; static value_type GetValue(UF::GameObjectData const* gameObjectData, GameObject const* gameObject, Player const* receiver) { - value_type stateWorldEffects = gameObjectData->StateWorldEffectIDs; - if (SpawnTrackingStateData const* spawnTrackingStateData = gameObject->GetSpawnTrackingStateDataForPlayer(receiver)) - stateWorldEffects = spawnTrackingStateData->StateWorldEffects; + return &spawnTrackingStateData->StateWorldEffects; - return stateWorldEffects; + return &*gameObjectData->StateWorldEffectIDs; } }; @@ -493,10 +489,10 @@ public: }; template<> -class ViewerDependentValue<UF::GameObjectData::StateAnimIDTag> +class ViewerDependentValue<UF::GameObjectData::SpawnTrackingStateAnimIDTag> { public: - using value_type = UF::GameObjectData::StateAnimIDTag::value_type; + using value_type = UF::GameObjectData::SpawnTrackingStateAnimIDTag::value_type; static value_type GetValue(UF::GameObjectData const* /*gameObjectData*/, GameObject const* gameObject, Player const* receiver) { @@ -510,10 +506,10 @@ public: }; template<> -class ViewerDependentValue<UF::GameObjectData::StateAnimKitIDTag> +class ViewerDependentValue<UF::GameObjectData::SpawnTrackingStateAnimKitIDTag> { public: - using value_type = UF::GameObjectData::StateAnimKitIDTag::value_type; + using value_type = UF::GameObjectData::SpawnTrackingStateAnimKitIDTag::value_type; static value_type GetValue(UF::GameObjectData const* gameObjectData, GameObject const* gameObject, Player const* receiver) { diff --git a/src/server/game/Server/Packets/MovementPackets.cpp b/src/server/game/Server/Packets/MovementPackets.cpp index 1dd15b811a0..451a4235a7b 100644 --- a/src/server/game/Server/Packets/MovementPackets.cpp +++ b/src/server/game/Server/Packets/MovementPackets.cpp @@ -687,7 +687,6 @@ WorldPacket const* WorldPackets::Movement::TransferPending::Write() if (TransferSpellID) _worldPacket << int32(*TransferSpellID); - return &_worldPacket; } |
