From bb35edd56b4af3f348624c1db8073c20845c81c3 Mon Sep 17 00:00:00 2001 From: Adam Date: Sun, 4 Mar 2018 17:41:17 +1100 Subject: [PATCH] fix rotation in objectspawn ipc and send it too --- src/common/Network/PacketDef/Zone/ServerZoneDef.h | 6 +++--- src/servers/sapphire_zone/Actor/EventObject.cpp | 5 ++++- src/servers/sapphire_zone/Actor/EventObject.h | 2 +- src/servers/sapphire_zone/Zone/Zone.cpp | 4 ++-- src/servers/sapphire_zone/Zone/Zone.h | 2 +- 5 files changed, 11 insertions(+), 8 deletions(-) diff --git a/src/common/Network/PacketDef/Zone/ServerZoneDef.h b/src/common/Network/PacketDef/Zone/ServerZoneDef.h index 59ebd4ab..071ebc50 100644 --- a/src/common/Network/PacketDef/Zone/ServerZoneDef.h +++ b/src/common/Network/PacketDef/Zone/ServerZoneDef.h @@ -1327,15 +1327,15 @@ struct FFXIVIpcObjectSpawn : FFXIVIpcBasePacket uint32_t hierachyId; float scale; int16_t unknown20a; - uint16_t unknown20b; + uint16_t rotation; int16_t unknown24a; int16_t unknown24b; uint16_t unknown28a; int16_t unknown28c; uint32_t unknown2C; Common::FFXIVARR_POSITION3 position; - int16_t rotation; - int16_t unknown; + int16_t unknown3C; + int16_t unknown3E; }; struct FFXIVIpcObjectDespawn : FFXIVIpcBasePacket diff --git a/src/servers/sapphire_zone/Actor/EventObject.cpp b/src/servers/sapphire_zone/Actor/EventObject.cpp index abc5c92e..11fa13a3 100644 --- a/src/servers/sapphire_zone/Actor/EventObject.cpp +++ b/src/servers/sapphire_zone/Actor/EventObject.cpp @@ -9,6 +9,7 @@ #include #include #include +#include using namespace Core::Common; using namespace Core::Network::Packets; @@ -19,7 +20,7 @@ extern Core::Logger g_log; Core::Entity::EventObject::EventObject( uint32_t actorId, uint32_t objectId, uint32_t mapLinkId, uint8_t initialState, Common::FFXIVARR_POSITION3 pos, - const std::string& givenName ) : + float rotation, const std::string& givenName ) : Core::Entity::Actor( ObjKind::EventObj ), m_mapLinkId( mapLinkId ), m_state( initialState ), @@ -30,6 +31,7 @@ Core::Entity::EventObject::EventObject( uint32_t actorId, uint32_t objectId, uin m_pos.x = pos.x; m_pos.y = pos.y; m_pos.z = pos.z; + m_rot = rotation; } uint32_t Core::Entity::EventObject::getMapLinkId() const @@ -112,6 +114,7 @@ void Core::Entity::EventObject::spawn( Core::Entity::PlayerPtr pTarget ) eobjStatePacket.data().position = getPos(); eobjStatePacket.data().scale = getScale(); eobjStatePacket.data().actorId = getId(); + eobjStatePacket.data().rotation = Math::Util::floatToUInt16Rot( getRot() ); pTarget->queuePacket( eobjStatePacket ); } diff --git a/src/servers/sapphire_zone/Actor/EventObject.h b/src/servers/sapphire_zone/Actor/EventObject.h index 2fd57a09..f1762b52 100644 --- a/src/servers/sapphire_zone/Actor/EventObject.h +++ b/src/servers/sapphire_zone/Actor/EventObject.h @@ -11,7 +11,7 @@ namespace Entity { public: EventObject( uint32_t actorId, uint32_t objectId, uint32_t mapLinkId, uint8_t initialState, Common::FFXIVARR_POSITION3 pos, - const std::string& givenName = "none" ); + float rotation, const std::string& givenName = "none" ); using OnTalkEventHandler = std::function< void( Entity::Player&, Entity::EventObjectPtr, InstanceContentPtr, uint64_t ) >; diff --git a/src/servers/sapphire_zone/Zone/Zone.cpp b/src/servers/sapphire_zone/Zone/Zone.cpp index 1c56ad10..03c42ada 100644 --- a/src/servers/sapphire_zone/Zone/Zone.cpp +++ b/src/servers/sapphire_zone/Zone/Zone.cpp @@ -693,9 +693,9 @@ uint32_t Core::Zone::getNextEObjId() } Core::Entity::EventObjectPtr Core::Zone::registerEObj( const std::string &name, uint32_t objectId, uint32_t mapLink, - uint8_t state, FFXIVARR_POSITION3 pos, float scale ) + uint8_t state, FFXIVARR_POSITION3 pos, float scale, float rotation ) { - auto eObj = Entity::make_EventObject( getNextEObjId(), objectId, mapLink, state, pos, name ); + auto eObj = Entity::make_EventObject( getNextEObjId(), objectId, mapLink, state, pos, rotation, name ); eObj->setScale( scale ); registerEObj( eObj ); diff --git a/src/servers/sapphire_zone/Zone/Zone.h b/src/servers/sapphire_zone/Zone/Zone.h index 81170219..de83e10f 100644 --- a/src/servers/sapphire_zone/Zone/Zone.h +++ b/src/servers/sapphire_zone/Zone/Zone.h @@ -114,7 +114,7 @@ public: void updateSessions( bool changedWeather ); Entity::EventObjectPtr registerEObj( const std::string& name, uint32_t objectId, uint32_t mapLink, - uint8_t state, Common::FFXIVARR_POSITION3 pos, float scale ); + uint8_t state, Common::FFXIVARR_POSITION3 pos, float scale, float rotation ); void registerEObj( Entity::EventObjectPtr object ); Entity::EventObjectPtr getEObj( uint32_t objId );