From 4abe2532c3a81efd9e3cd3ff0df4a5d56e44c039 Mon Sep 17 00:00:00 2001 From: Lucy <44952533+Skyliegirl33@users.noreply.github.com> Date: Sat, 21 Jan 2023 02:12:00 +0100 Subject: [PATCH] [wip] Implement persistent emote cancelling --- src/common/Network/CommonActorControl.h | 2 ++ .../Network/Handlers/PacketCommandHandler.cpp | 26 +++++++++++-------- 2 files changed, 17 insertions(+), 11 deletions(-) diff --git a/src/common/Network/CommonActorControl.h b/src/common/Network/CommonActorControl.h index 411ce218..2c971c47 100644 --- a/src/common/Network/CommonActorControl.h +++ b/src/common/Network/CommonActorControl.h @@ -148,6 +148,8 @@ namespace Sapphire::Network::ActorControl Emote = 0x122, EmoteInterrupt = 0x123, + EmoteModeInterrupt = 0x124, + EmoteModeInterruptNonImmediate = 0x125, SetPose = 0x127, diff --git a/src/world/Network/Handlers/PacketCommandHandler.cpp b/src/world/Network/Handlers/PacketCommandHandler.cpp index 265ab496..4d05bd2b 100644 --- a/src/world/Network/Handlers/PacketCommandHandler.cpp +++ b/src/world/Network/Handlers/PacketCommandHandler.cpp @@ -15,6 +15,7 @@ #include "Network/PacketWrappers/InspectPacket.h" #include "Network/PacketWrappers/ActorControlPacket.h" #include "Network/PacketWrappers/ActorControlTargetPacket.h" +#include "Network/PacketWrappers/MoveActorPacket.h" #include "Action/Action.h" @@ -553,15 +554,21 @@ void Sapphire::Network::GameConnection::commandHandler( const Packets::FFXIVARR_ player.sendToInRangeSet( makeActorControl( player.getId(), ActorControlType::EmoteInterrupt ) ); break; } - /* case PacketCommand::PersistentEmoteCancel: // cancel persistent emote - { - player.setPersistentEmote( 0 ); - player.emoteInterrupt(); - player.setStatus( ActorStatus::Idle ); - auto pSetStatusPacket = makeActorControl( player.getId(), SetStatus, static_cast< uint8_t >( ActorStatus::Idle ) ); - player.sendToInRangeSet( pSetStatusPacket ); + case PacketCommand::EMOTE_MODE_CANCEL: + { + if( player.getPersistentEmote() > 0 ) + { + auto movePacket = std::make_shared< MoveActorPacket >( player, player.getRot(), 2, 0, 0, 0x5A / 4 ); + player.sendToInRangeSet( movePacket ); + + player.setPersistentEmote( 0 ); + player.sendToInRangeSet( makeActorControl( player.getId(), ActorControlType::EmoteModeInterrupt ) ); + player.setStatus( ActorStatus::Idle ); + + player.sendToInRangeSet( makeActorControl( player.getId(), SetStatus, static_cast< uint8_t >( ActorStatus::Idle ) ) ); + } break; - }*/ + } case PacketCommand::POSE_EMOTE_CONFIG: // change pose case PacketCommand::POSE_EMOTE_WORK: // reapply pose { @@ -572,9 +579,6 @@ void Sapphire::Network::GameConnection::commandHandler( const Packets::FFXIVARR_ } case PacketCommand::POSE_EMOTE_CANCEL: // cancel pose { - player.setPose( static_cast< uint8_t >( param12 ) ); - auto pSetStatusPacket = makeActorControl( player.getId(), SetPose, param11, param12 ); - player.sendToInRangeSet( pSetStatusPacket, true ); break; } case PacketCommand::REVIVE: // return dead / accept raise