aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2024-03-07 13:31:12 +0100
committerShauren <shauren.trinity@gmail.com>2024-03-07 13:31:12 +0100
commitd397b636d48f55b5e76d77c36ded33b2c8bbe295 (patch)
treefee600afb80320d4cdc81580708d92f0e64a1e97 /src
parent45ee989c70682c001d4467d97bf1ecedcf7dbcc3 (diff)
Core/Objects: Keep current WMO info on position updates and use it in party member state packets
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Entities/Object/Object.cpp1
-rw-r--r--src/server/game/Entities/Object/Object.h5
-rw-r--r--src/server/game/Server/Packets/PartyPackets.cpp8
3 files changed, 10 insertions, 4 deletions
diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp
index afc986f9052..51c85f241df 100644
--- a/src/server/game/Entities/Object/Object.cpp
+++ b/src/server/game/Entities/Object/Object.cpp
@@ -998,6 +998,7 @@ void WorldObject::ProcessPositionDataChanged(PositionFullTerrainStatus const& da
m_outdoors = data.outdoors;
m_staticFloorZ = data.floorZ;
m_liquidStatus = data.liquidStatus;
+ m_currentWmo = data.wmoLocation;
}
void WorldObject::AddToWorld()
diff --git a/src/server/game/Entities/Object/Object.h b/src/server/game/Entities/Object/Object.h
index cbb0486ea90..07cf03d3e28 100644
--- a/src/server/game/Entities/Object/Object.h
+++ b/src/server/game/Entities/Object/Object.h
@@ -22,6 +22,7 @@
#include "Duration.h"
#include "Errors.h"
#include "EventProcessor.h"
+#include "MapDefines.h"
#include "ModelIgnoreFlags.h"
#include "MovementInfo.h"
#include "ObjectDefines.h"
@@ -62,10 +63,8 @@ class WorldPacket;
class ZoneScript;
struct FactionTemplateEntry;
struct Loot;
-struct PositionFullTerrainStatus;
struct QuaternionData;
struct SpellPowerCost;
-enum ZLiquidStatus : uint32;
namespace WorldPackets
{
@@ -530,6 +529,7 @@ class TC_GAME_API WorldObject : public Object, public WorldLocation
bool IsInWorldPvpZone() const;
bool IsOutdoors() const { return m_outdoors; }
ZLiquidStatus GetLiquidStatus() const { return m_liquidStatus; }
+ WmoLocation const* GetCurrentWmo() const { return m_currentWmo ? &*m_currentWmo : nullptr; }
InstanceScript* GetInstanceScript() const;
@@ -789,6 +789,7 @@ class TC_GAME_API WorldObject : public Object, public WorldLocation
float m_staticFloorZ;
bool m_outdoors;
ZLiquidStatus m_liquidStatus;
+ Optional<WmoLocation> m_currentWmo;
//these functions are used mostly for Relocate() and Corpse/Player specific stuff...
//use them ONLY in LoadFromDB()/Create() funcs and nowhere else!
diff --git a/src/server/game/Server/Packets/PartyPackets.cpp b/src/server/game/Server/Packets/PartyPackets.cpp
index d02dfa1bd6f..0791574e61c 100644
--- a/src/server/game/Server/Packets/PartyPackets.cpp
+++ b/src/server/game/Server/Packets/PartyPackets.cpp
@@ -631,8 +631,12 @@ void WorldPackets::Party::PartyMemberFullState::Initialize(Player const* player)
MemberStats.SpecID = AsUnderlyingType(player->GetPrimarySpecialization());
MemberStats.PartyType[0] = player->m_playerData->PartyType[0];
MemberStats.PartyType[1] = player->m_playerData->PartyType[1];
- MemberStats.WmoGroupID = 0;
- MemberStats.WmoDoodadPlacementID = 0;
+
+ if (WmoLocation const* wmoLocation = player->GetCurrentWmo())
+ {
+ MemberStats.WmoGroupID = wmoLocation->GroupId;
+ MemberStats.WmoDoodadPlacementID = wmoLocation->UniqueId;
+ }
// Vehicle
if (::Vehicle const* vehicle = player->GetVehicle())