1
Fork 0
mirror of https://github.com/SapphireServer/Sapphire.git synced 2025-04-25 14:07:46 +00:00

Emotes can now be interrupted, getting in and out of persistant emotes including /sit should work fine, too #329

This commit is contained in:
Mordred 2018-07-08 23:44:37 +02:00
parent 58efdbb519
commit e9891a35c0
4 changed files with 18 additions and 0 deletions

View file

@ -125,6 +125,7 @@ namespace Core {
ActorFateOut1 = 0x110, ActorFateOut1 = 0x110,
Emote = 0x122, Emote = 0x122,
EmoteInterrupt = 0x123,
SetPose = 0x127, SetPose = 0x127,

View file

@ -1656,6 +1656,11 @@ void Core::Entity::Player::emote( uint32_t emoteId, uint64_t targetId, bool isSi
emoteId, 0, isSilent ? 1 : 0, 0, targetId ) ); emoteId, 0, isSilent ? 1 : 0, 0, targetId ) );
} }
void Core::Entity::Player::emoteInterrupt()
{
sendToInRangeSet( boost::make_shared< ActorControlPacket142 >( getId(), ActorControlType::EmoteInterrupt ) );
}
void Core::Entity::Player::teleportQuery( uint16_t aetheryteId ) void Core::Entity::Player::teleportQuery( uint16_t aetheryteId )
{ {
auto pExdData = g_fw.get< Data::ExdDataGenerated >(); auto pExdData = g_fw.get< Data::ExdDataGenerated >();

View file

@ -508,6 +508,8 @@ public:
bool isMarkedForZoning() const; bool isMarkedForZoning() const;
void emote( uint32_t emoteId, uint64_t targetId, bool isSilent ); void emote( uint32_t emoteId, uint64_t targetId, bool isSilent );
void emoteInterrupt();
void sendZoneInPackets( uint32_t param1, uint32_t param2, uint32_t param3, uint32_t param4, bool pSetStatus ); void sendZoneInPackets( uint32_t param1, uint32_t param2, uint32_t param3, uint32_t param4, bool pSetStatus );

View file

@ -147,8 +147,18 @@ void Core::Network::GameConnection::clientTriggerHandler( const Packets::FFXIVAR
player.emote( emoteId, targetId, isSilent ); player.emote( emoteId, targetId, isSilent );
break; break;
} }
case ClientTriggerType::EmoteCancel: // emote
{
player.emoteInterrupt();
break;
}
case ClientTriggerType::PersistantEmoteCancel: // cancel persistant emote case ClientTriggerType::PersistantEmoteCancel: // cancel persistant emote
{ {
player.emoteInterrupt();
auto SetStatusPacket = boost::make_shared< ActorControlPacket142 >( player.getId(),
SetStatus,
static_cast< uint8_t >( Entity::Chara::ActorStatus::Idle ) );
player.sendToInRangeSet( SetStatusPacket );
break; break;
} }
case ClientTriggerType::PoseChange: // change pose case ClientTriggerType::PoseChange: // change pose