From 0305777e382948135cd19b4cdc4774b670c9f1d3 Mon Sep 17 00:00:00 2001 From: NotAdam Date: Thu, 12 Jul 2018 20:42:28 +1000 Subject: [PATCH 1/2] fix emotes which require a weapon to be unholstered --- src/common/Exd/ExdDataGenerated.cpp | 1 + src/common/Exd/ExdDataGenerated.h | 1 + src/common/Network/CommonActorControl.h | 3 ++- src/servers/sapphire_zone/Actor/Chara.cpp | 2 +- .../sapphire_zone/Network/Handlers/ClientTriggerHandler.cpp | 6 ++++++ 5 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/common/Exd/ExdDataGenerated.cpp b/src/common/Exd/ExdDataGenerated.cpp index 2f7b3af1..b058341e 100644 --- a/src/common/Exd/ExdDataGenerated.cpp +++ b/src/common/Exd/ExdDataGenerated.cpp @@ -1427,6 +1427,7 @@ Core::Data::Emote::Emote( uint32_t row_id, Core::Data::ExdDataGenerated* exdData emoteCategory = exdData->getField< uint8_t >( row, 11 ); emoteMode = exdData->getField< uint8_t >( row, 12 ); hasCancelEmote = exdData->getField< bool >( row, 15 ); + drawsWeapon = exdData->getField< bool >( row, 16 ); textCommand = exdData->getField< int32_t >( row, 18 ); icon = exdData->getField< uint16_t >( row, 19 ); logMessageTargeted = exdData->getField< uint16_t >( row, 20 ); diff --git a/src/common/Exd/ExdDataGenerated.h b/src/common/Exd/ExdDataGenerated.h index a4a516bc..c0f9d8e4 100644 --- a/src/common/Exd/ExdDataGenerated.h +++ b/src/common/Exd/ExdDataGenerated.h @@ -1605,6 +1605,7 @@ struct Emote uint16_t logMessageUntargeted; uint8_t emoteMode; bool hasCancelEmote; + bool drawsWeapon; Emote( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ); }; diff --git a/src/common/Network/CommonActorControl.h b/src/common/Network/CommonActorControl.h index 42aaae59..61163967 100644 --- a/src/common/Network/CommonActorControl.h +++ b/src/common/Network/CommonActorControl.h @@ -17,7 +17,8 @@ namespace Core { enum ActorControlType : uint16_t { - ToggleWeapon = 0x01, + ToggleWeapon = 0x00, + ToggleAutoAttack = 0x01, SetStatus = 0x02, CastStart = 0x03, ToggleAggro = 0x04, diff --git a/src/servers/sapphire_zone/Actor/Chara.cpp b/src/servers/sapphire_zone/Actor/Chara.cpp index 4fbc8716..9f78525b 100644 --- a/src/servers/sapphire_zone/Actor/Chara.cpp +++ b/src/servers/sapphire_zone/Actor/Chara.cpp @@ -257,7 +257,7 @@ void Core::Entity::Chara::setStance( Stance stance ) { m_currentStance = stance; - FFXIVPacketBasePtr packet = boost::make_shared< ActorControlPacket142 >( m_id, ToggleAggro, stance, 1 ); + FFXIVPacketBasePtr packet = boost::make_shared< ActorControlPacket142 >( m_id, ToggleWeapon, stance, 0 ); sendToInRangeSet( packet ); } diff --git a/src/servers/sapphire_zone/Network/Handlers/ClientTriggerHandler.cpp b/src/servers/sapphire_zone/Network/Handlers/ClientTriggerHandler.cpp index b2a3322e..27271528 100644 --- a/src/servers/sapphire_zone/Network/Handlers/ClientTriggerHandler.cpp +++ b/src/servers/sapphire_zone/Network/Handlers/ClientTriggerHandler.cpp @@ -165,6 +165,12 @@ void Core::Network::GameConnection::clientTriggerHandler( const Packets::FFXIVAR } player.emote( emoteId, targetId, isSilent ); + + if( emoteData->drawsWeapon ) + { + player.setStance( Entity::Chara::Stance::Active ); + } + break; } case ClientTriggerType::EmoteCancel: // emote From a1ec09db720d255ec9f3e838b870f1c17e32e267 Mon Sep 17 00:00:00 2001 From: NotAdam Date: Thu, 12 Jul 2018 20:55:46 +1000 Subject: [PATCH 2/2] fix sitting animating incorrectly for other clients, fixes #329 --- src/common/Network/CommonActorControl.h | 1 - .../sapphire_zone/Network/Handlers/ClientTriggerHandler.cpp | 4 ++-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/common/Network/CommonActorControl.h b/src/common/Network/CommonActorControl.h index 61163967..4749dc2d 100644 --- a/src/common/Network/CommonActorControl.h +++ b/src/common/Network/CommonActorControl.h @@ -18,7 +18,6 @@ namespace Core { enum ActorControlType : uint16_t { ToggleWeapon = 0x00, - ToggleAutoAttack = 0x01, SetStatus = 0x02, CastStart = 0x03, ToggleAggro = 0x04, diff --git a/src/servers/sapphire_zone/Network/Handlers/ClientTriggerHandler.cpp b/src/servers/sapphire_zone/Network/Handlers/ClientTriggerHandler.cpp index 27271528..e6a9a32d 100644 --- a/src/servers/sapphire_zone/Network/Handlers/ClientTriggerHandler.cpp +++ b/src/servers/sapphire_zone/Network/Handlers/ClientTriggerHandler.cpp @@ -150,6 +150,8 @@ void Core::Network::GameConnection::clientTriggerHandler( const Packets::FFXIVAR if( !emoteData ) return; + player.emote( emoteId, targetId, isSilent ); + bool isPersistent = emoteData->emoteMode != 0; if( isPersistent ) @@ -164,8 +166,6 @@ void Core::Network::GameConnection::clientTriggerHandler( const Packets::FFXIVAR static_cast< uint8_t >( Entity::Chara::ActorStatus::EmoteMode ), emoteData->hasCancelEmote ? 1 : 0 ), true ); } - player.emote( emoteId, targetId, isSilent ); - if( emoteData->drawsWeapon ) { player.setStance( Entity::Chara::Stance::Active );