diff --git a/src/common/Common.h b/src/common/Common.h index a2e9f834..3a951027 100644 --- a/src/common/Common.h +++ b/src/common/Common.h @@ -756,6 +756,7 @@ namespace Sapphire::Common BetweenAreas = 24, BoundByDuty = 28, + Performing = 40, WatchingCutscene = 50, // this is actually just a dummy, this id is different diff --git a/src/common/Network/PacketDef/Ipcs.h b/src/common/Network/PacketDef/Ipcs.h index bf6aa15f..3bc671e5 100644 --- a/src/common/Network/PacketDef/Ipcs.h +++ b/src/common/Network/PacketDef/Ipcs.h @@ -277,7 +277,7 @@ namespace Sapphire::Network::Packets ////////////////////////////////////////////////// DuelChallenge = 0x0277, // 4.2; this is responsible for opening the ui - PerformNote = 0x0286, // updated 4.3 + PerformNote = 0x0248, // updated 5.45 hotfix PrepareZoning = 0x01EE, // updated 5.45 hotfix ActorGauge = 0x018E, // updated 5.45 hotfix @@ -415,7 +415,7 @@ namespace Sapphire::Network::Packets UpdatePositionInstance = 0x034E, // updated 5.45 hotfix - PerformNoteHandler = 0x029B, // updated 4.3 + PerformNoteHandler = 0x0336, // updated 5.45 hotfix WorldInteractionHandler = 0x02E4, // updated 5.45 hotfix Dive = 0x00F1, // updated 5.45 hotfix diff --git a/src/common/Network/PacketDef/Zone/ServerZoneDef.h b/src/common/Network/PacketDef/Zone/ServerZoneDef.h index ccf2324f..74126f05 100644 --- a/src/common/Network/PacketDef/Zone/ServerZoneDef.h +++ b/src/common/Network/PacketDef/Zone/ServerZoneDef.h @@ -1851,7 +1851,7 @@ namespace Sapphire::Network::Packets::Server struct FFXIVIpcPerformNote : FFXIVIpcBasePacket< PerformNote > { - uint8_t data[32]; + uint8_t data[16]; }; struct FFXIVIpcHousingUpdateLandFlagsSlot : FFXIVIpcBasePacket< HousingUpdateLandFlagsSlot > diff --git a/src/world/Network/Handlers/ClientTriggerHandler.cpp b/src/world/Network/Handlers/ClientTriggerHandler.cpp index 3e1bb620..3cd9517d 100644 --- a/src/world/Network/Handlers/ClientTriggerHandler.cpp +++ b/src/world/Network/Handlers/ClientTriggerHandler.cpp @@ -494,7 +494,22 @@ void Sapphire::Network::GameConnection::clientTriggerHandler( const Packets::FFX player.sendDebug( "event battle p1: {0}, p11: {1}, p12: {2}, p2: {3}, p3: {4}, p4: {5}, p5: {6}", param1, param11, param12, param2, param3, param4, param5 ); break; } - + case ClientTriggerType::OpenPerformInstrumentUI: + { + //param11 = instrument, 0 = end + player.sendDebug( "perform: {}", param11 ); + if( param11 == 0 ) + { + player.sendToInRangeSet( makeActorControl( player.getId(), ActorControl::SetStatus, 1, 0, 0, 0 ), true ); + player.unsetStateFlag( PlayerStateFlag::Performing ); + } + else + { + player.sendToInRangeSet( makeActorControl( player.getId(), ActorControl::SetStatus, 16, param11, 0, 0 ), true ); + player.setStateFlag( PlayerStateFlag::Performing ); + } + break; + } default: { Logger::debug( "[{0}] Unhandled action: {1:04X}", m_pSession->getId(), commandId ); diff --git a/src/world/Network/Handlers/PacketHandlers.cpp b/src/world/Network/Handlers/PacketHandlers.cpp index 35fd8b10..db311736 100644 --- a/src/world/Network/Handlers/PacketHandlers.cpp +++ b/src/world/Network/Handlers/PacketHandlers.cpp @@ -607,7 +607,7 @@ void Sapphire::Network::GameConnection::performNoteHandler( const Packets::FFXIV Entity::Player& player ) { auto performPacket = makeZonePacket< FFXIVIpcPerformNote >( player.getId() ); - memcpy( &performPacket->data().data[ 0 ], &inPacket.data[ 0x10 ], 32 ); + memcpy( &performPacket->data().data[ 0 ], &inPacket.data[ 0x10 ], 16 ); player.sendToInRangeSet( performPacket ); }