aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/game/Entities/Creature/Creature.cpp2
-rw-r--r--src/server/game/Entities/GameObject/GameObject.cpp2
-rw-r--r--src/server/game/Entities/Object/Updates/UpdateFields.cpp46
-rw-r--r--src/server/game/Entities/Object/Updates/UpdateFields.h4
-rw-r--r--src/server/game/Entities/Object/Updates/ViewerDependentValues.h24
-rw-r--r--src/server/game/Server/Packets/MovementPackets.cpp1
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;
}