From 6c011baa0279cfc5a6c07bd5372a7ce4c8341301 Mon Sep 17 00:00:00 2001 From: NotAdam Date: Fri, 26 Jul 2019 23:20:13 +1000 Subject: [PATCH] fix actorcast packet opcode, add new opcode --- src/common/Network/PacketDef/Ipcs.h | 4 +++- src/world/Action/Action.cpp | 18 +++++++++++++----- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/src/common/Network/PacketDef/Ipcs.h b/src/common/Network/PacketDef/Ipcs.h index 04ddf0cd..9435f143 100644 --- a/src/common/Network/PacketDef/Ipcs.h +++ b/src/common/Network/PacketDef/Ipcs.h @@ -136,7 +136,9 @@ namespace Sapphire::Network::Packets ActorSetPos = 0x0184, // updated 5.0 - ActorCast = 0x0187, // updated 5.0 + ActorCast = 0x0186, // updated 5.0 + + SomeCustomiseChangePacketProbably = 0x0187, // added 5.0 PartyList = 0x0188, // updated 5.0 HateRank = 0x0189, // updated 5.0 diff --git a/src/world/Action/Action.cpp b/src/world/Action/Action.cpp index 40d8f73b..61d4c991 100644 --- a/src/world/Action/Action.cpp +++ b/src/world/Action/Action.cpp @@ -22,6 +22,7 @@ #include #include +#include using namespace Sapphire; using namespace Sapphire::Common; @@ -223,13 +224,20 @@ void Action::Action::start() if( hasCastTime() ) { auto castPacket = makeWorldPacket< Server::FFXIVIpcActorCast >( getId() ); + auto& data = castPacket->data(); - castPacket->data().action_id = static_cast< uint16_t >( m_id ); - castPacket->data().skillType = Common::SkillType::Normal; - castPacket->data().unknown_1 = m_id; + data.action_id = static_cast< uint16_t >( m_id ); + data.skillType = Common::SkillType::Normal; + data.unknown_1 = m_id; // This is used for the cast bar above the target bar of the caster. - castPacket->data().cast_time = m_castTimeMs / 1000.f; - castPacket->data().target_id = static_cast< uint32_t >( m_targetId ); + data.cast_time = m_castTimeMs / 1000.f; + data.target_id = static_cast< uint32_t >( m_targetId ); + + auto pos = m_pSource->getPos(); + data.posX = Common::Util::floatToUInt16( pos.x ); + data.posY = Common::Util::floatToUInt16( pos.y ); + data.posZ = Common::Util::floatToUInt16( pos.z ); + data.rotation = m_pSource->getRot(); m_pSource->sendToInRangeSet( castPacket, true );