From 144911d7c770320cfce72c7618b029fdf7b8e137 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 (cherry picked from commit 53bfb43a532d98f7167596fb519038c72378e70c) --- src/common/Network/CommonActorControl.h | 2 ++ .../Network/Handlers/PacketCommandHandler.cpp | 23 ++++++++++++------- 2 files changed, 17 insertions(+), 8 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 e34f70ff..3e6ba8ac 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" @@ -548,15 +549,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 {