1
Fork 0
mirror of https://github.com/SapphireServer/Sapphire.git synced 2025-05-03 17:27:47 +00:00

Improve readability of PacketCommand Handlers

This commit is contained in:
Mordred 2023-02-27 13:26:15 +01:00
parent 6cb86efd47
commit 0f08bf8630

View file

@ -399,22 +399,16 @@ void examineHandler( Sapphire::Entity::Player& player, uint32_t targetId )
void Sapphire::Network::GameConnection::commandHandler( const Packets::FFXIVARR_PACKET_RAW& inPacket, Entity::Player& player ) void Sapphire::Network::GameConnection::commandHandler( const Packets::FFXIVARR_PACKET_RAW& inPacket, Entity::Player& player )
{ {
const auto packet = ZoneChannelPacket< FFXIVIpcClientTrigger >( inPacket ); const auto packet = ZoneChannelPacket< FFXIVIpcClientTrigger >( inPacket );
auto& teriMgr = Service< World::Manager::TerritoryMgr >::ref(); auto& teriMgr = Service< World::Manager::TerritoryMgr >::ref();
auto pZone = teriMgr.getTerritoryByGuId( player.getTerritoryId() ); auto pZone = teriMgr.getTerritoryByGuId( player.getTerritoryId() );
const auto& data = packet.data();
const auto commandId = packet.data().Id; const auto commandId = data.Id;
const auto param1 = *reinterpret_cast< const uint64_t* >( &packet.data().Arg0 ); const auto arg0arg1 = *reinterpret_cast< const uint64_t* >( &packet.data().Arg0 );
const auto param11 = packet.data().Arg0;
const auto param12 = packet.data().Arg1;
const auto param2 = packet.data().Arg2;
const auto param4 = packet.data().Arg3;
const auto param3 = packet.data().Target;
Logger::debug( "\t\t {8} | {1:X} ( p1:{2:X} p11:{3:X} p12:{4:X} p2:{5:X} p3:{6:X} p4:{7:X} )", Logger::debug( "\t\t {8} | {1:X} ( p1:{2:X} p11:{3:X} p12:{4:X} p2:{5:X} p3:{6:X} p4:{7:X} )",
m_pSession->getId(), commandId, param1, param11, param12, param2, param3, param4, packetCommandToString( commandId ) ); m_pSession->getId(), commandId, arg0arg1, data.Arg0, data.Arg1, data.Arg2, data.Target, data.Arg3, packetCommandToString( commandId ) );
//Logger::Log(LoggingSeverity::debug, "[" + std::to_string(m_pSession->getId()) + "] " + pInPacket->toString()); //Logger::Log(LoggingSeverity::debug, "[" + std::to_string(m_pSession->getId()) + "] " + pInPacket->toString());
@ -422,19 +416,19 @@ void Sapphire::Network::GameConnection::commandHandler( const Packets::FFXIVARR_
{ {
case PacketCommand::DRAWN_SWORD: // Toggle sheathe case PacketCommand::DRAWN_SWORD: // Toggle sheathe
{ {
if( param11 == 1 ) if( data.Arg0 == 1 )
player.setStance( Stance::Active ); player.setStance( Stance::Active );
else else
{ {
player.setStance( Stance::Passive ); player.setStance( Stance::Passive );
player.setAutoattack( false ); player.setAutoattack( false );
} }
server().queueForPlayers( player.getInRangePlayerIds(), makeActorControl( player.getId(), 0, param11, 1 ) ); server().queueForPlayers( player.getInRangePlayerIds(), makeActorControl( player.getId(), 0, data.Arg0, 1 ) );
break; break;
} }
case PacketCommand::AUTO_ATTACK: // Toggle auto-attack case PacketCommand::AUTO_ATTACK: // Toggle auto-attack
{ {
if( param11 == 1 ) if( data.Arg0 == 1 )
{ {
player.setAutoattack( true ); player.setAutoattack( true );
player.setStance( Stance::Active ); player.setStance( Stance::Active );
@ -442,13 +436,13 @@ void Sapphire::Network::GameConnection::commandHandler( const Packets::FFXIVARR_
else else
player.setAutoattack( false ); player.setAutoattack( false );
server().queueForPlayers( player.getInRangePlayerIds(), makeActorControl( player.getId(), 1, param11, 1 ) ); server().queueForPlayers( player.getInRangePlayerIds(), makeActorControl( player.getId(), 1, data.Arg0, 1 ) );
break; break;
} }
case PacketCommand::TARGET_DECIDE: // Change target case PacketCommand::TARGET_DECIDE: // Change target
{ {
uint64_t targetId = param1; uint64_t targetId = arg0arg1;
if( targetId == player.getTargetId() || targetId == Common::INVALID_GAME_OBJECT_ID ) if( targetId == player.getTargetId() || targetId == Common::INVALID_GAME_OBJECT_ID )
targetId = 0; targetId = 0;
@ -463,7 +457,7 @@ void Sapphire::Network::GameConnection::commandHandler( const Packets::FFXIVARR_
} }
case PacketCommand::COMPANION: case PacketCommand::COMPANION:
{ {
Common::Service< World::Manager::PlayerMgr >::ref().onCompanionUpdate( player, static_cast< uint8_t >( param1 ) ); Common::Service< World::Manager::PlayerMgr >::ref().onCompanionUpdate( player, static_cast< uint8_t >( data.Arg0 ) );
break; break;
} }
case PacketCommand::COMPANION_CANCEL: case PacketCommand::COMPANION_CANCEL:
@ -474,7 +468,7 @@ void Sapphire::Network::GameConnection::commandHandler( const Packets::FFXIVARR_
case PacketCommand::REQUEST_STATUS_RESET: // Remove status (clicking it off) case PacketCommand::REQUEST_STATUS_RESET: // Remove status (clicking it off)
{ {
// todo: check if status can be removed by client from exd // todo: check if status can be removed by client from exd
player.removeSingleStatusEffectById( static_cast< uint32_t >( param1 ) ); player.removeSingleStatusEffectById( data.Arg0 );
break; break;
} }
case PacketCommand::CANCEL_CAST: case PacketCommand::CANCEL_CAST:
@ -485,7 +479,7 @@ void Sapphire::Network::GameConnection::commandHandler( const Packets::FFXIVARR_
} }
case PacketCommand::INSPECT: case PacketCommand::INSPECT:
{ {
uint32_t targetId = param11; uint32_t targetId = data.Arg0;
examineHandler( player, targetId ); examineHandler( player, targetId );
break; break;
} }
@ -495,7 +489,7 @@ void Sapphire::Network::GameConnection::commandHandler( const Packets::FFXIVARR_
} }
case PacketCommand::ACTIVE_TITLE: // Set player title case PacketCommand::ACTIVE_TITLE: // Set player title
{ {
player.setTitle( static_cast< uint16_t >( param1 ) ); player.setTitle( static_cast< uint16_t >( data.Arg0 ) );
break; break;
} }
case PacketCommand::TITLE_LIST: // Get title list case PacketCommand::TITLE_LIST: // Get title list
@ -505,20 +499,20 @@ void Sapphire::Network::GameConnection::commandHandler( const Packets::FFXIVARR_
} }
case PacketCommand::SET_HOWTO: // Update howtos seen case PacketCommand::SET_HOWTO: // Update howtos seen
{ {
uint32_t howToId = param11; uint32_t howToId = data.Arg0;
player.updateHowtosSeen( howToId ); player.updateHowtosSeen( howToId );
break; break;
} }
case PacketCommand::SET_CUTSCENE: case PacketCommand::SET_CUTSCENE:
{ {
server().queueForPlayer( player.getCharacterId(), makeActorControl( player.getId(), ActorControlType::SetCutsceneFlag, param11, 1 ) ); server().queueForPlayer( player.getCharacterId(), makeActorControl( player.getId(), ActorControlType::SetCutsceneFlag, data.Arg0, 1 ) );
break; break;
} }
case PacketCommand::EMOTE: // emote case PacketCommand::EMOTE: // emote
{ {
uint64_t targetId = player.getTargetId(); uint64_t targetId = player.getTargetId();
uint32_t emoteId = param11; uint32_t emoteId = data.Arg0;
bool isSilent = param2 == 1; bool isSilent = data.Arg2 == 1;
auto& exdData = Service< Data::ExdData >::ref(); auto& exdData = Service< Data::ExdData >::ref();
auto emoteData = exdData.getRow< Excel::Emote >( emoteId ); auto emoteData = exdData.getRow< Excel::Emote >( emoteId );
@ -572,8 +566,8 @@ void Sapphire::Network::GameConnection::commandHandler( const Packets::FFXIVARR_
case PacketCommand::POSE_EMOTE_CONFIG: // change pose case PacketCommand::POSE_EMOTE_CONFIG: // change pose
case PacketCommand::POSE_EMOTE_WORK: // reapply pose case PacketCommand::POSE_EMOTE_WORK: // reapply pose
{ {
player.setPose( static_cast< uint8_t >( param12 ) ); player.setPose( static_cast< uint8_t >( data.Arg1 ) );
auto pSetStatusPacket = makeActorControl( player.getId(), SetPose, param11, param12 ); auto pSetStatusPacket = makeActorControl( player.getId(), SetPose, data.Arg0, data.Arg1 );
server().queueForPlayers( player.getInRangePlayerIds( true ), pSetStatusPacket ); server().queueForPlayers( player.getInRangePlayerIds( true ), pSetStatusPacket );
break; break;
} }
@ -584,7 +578,7 @@ void Sapphire::Network::GameConnection::commandHandler( const Packets::FFXIVARR_
case PacketCommand::REVIVE: // return dead / accept raise case PacketCommand::REVIVE: // return dead / accept raise
{ {
auto& warpMgr = Service< WarpMgr >::ref(); auto& warpMgr = Service< WarpMgr >::ref();
switch( static_cast < ResurrectType >( param1 ) ) switch( static_cast < ResurrectType >( data.Arg0 ) )
{ {
case ResurrectType::RaiseSpell: case ResurrectType::RaiseSpell:
// todo: handle raise case (set position to raiser, apply weakness status, set hp/mp/tp as well as packet) // todo: handle raise case (set position to raiser, apply weakness status, set hp/mp/tp as well as packet)
@ -610,7 +604,7 @@ void Sapphire::Network::GameConnection::commandHandler( const Packets::FFXIVARR_
} }
case PacketCommand::ACHIEVEMENT_REQUEST_RATE: case PacketCommand::ACHIEVEMENT_REQUEST_RATE:
{ {
Service< World::Manager::PlayerMgr >::ref().onAchievementProgressChanged( player, param11 ); Service< World::Manager::PlayerMgr >::ref().onAchievementProgressChanged( player, data.Arg0 );
break; break;
} }
case PacketCommand::ACHIEVEMENT_REQUEST: case PacketCommand::ACHIEVEMENT_REQUEST:
@ -621,26 +615,26 @@ void Sapphire::Network::GameConnection::commandHandler( const Packets::FFXIVARR_
case PacketCommand::TELEPO_INQUIRY: // Teleport case PacketCommand::TELEPO_INQUIRY: // Teleport
{ {
player.teleportQuery( static_cast< uint16_t >( param11 ) ); player.teleportQuery( static_cast< uint16_t >( data.Arg0 ) );
break; break;
} }
case PacketCommand::DYE_ITEM: // Dye item case PacketCommand::DYE_ITEM: // Dye item
{ {
// param11 = item to dye container // data.Arg0 = item to dye container
// param12 = item to dye slot // data.Arg1 = item to dye slot
// param2 = dye bag container // data.Arg2 = dye bag container
// param4 = dye bag slot // data.Arg3 = dye bag slot
player.setDyeingInfo( param11, param12, param2, param4 ); player.setDyeingInfo( data.Arg0, data.Arg1, data.Arg2, data.Arg3 );
break; break;
} }
case PacketCommand::GLAMOUR_ITEM: case PacketCommand::GLAMOUR_ITEM:
{ {
player.setGlamouringInfo( param11, param12, param2, param4, true ); player.setGlamouringInfo( data.Arg0, data.Arg1, data.Arg2, data.Arg3, true );
break; break;
} }
case PacketCommand::GLAMOUR_DISPEL: case PacketCommand::GLAMOUR_DISPEL:
{ {
player.setGlamouringInfo( param11, param12, param2, param4, false ); player.setGlamouringInfo( data.Arg0, data.Arg1, data.Arg2, data.Arg3, false );
break; break;
} }
case PacketCommand::DIRECTOR_INIT_RETURN: // Director init finish case PacketCommand::DIRECTOR_INIT_RETURN: // Director init finish
@ -660,13 +654,13 @@ void Sapphire::Network::GameConnection::commandHandler( const Packets::FFXIVARR_
}*/ }*/
case PacketCommand::EVENT_HANDLER: case PacketCommand::EVENT_HANDLER:
{ {
pZone->onEventHandlerOrder( player, param11, param12, param2, static_cast< uint32_t >( param3 ), param4 ); pZone->onEventHandlerOrder( player, data.Arg0, data.Arg1, data.Arg2, static_cast< uint32_t >( data.Target ), data.Arg3 );
break; break;
} }
case PacketCommand::CANCEL_QUEST: case PacketCommand::CANCEL_QUEST:
{ {
player.removeQuest( static_cast< uint16_t >( param1 ) ); player.removeQuest( static_cast< uint16_t >( data.Arg0 ) );
break; break;
} }
case PacketCommand::HOUSING_LOCK_LAND_BY_BUILD: case PacketCommand::HOUSING_LOCK_LAND_BY_BUILD:
@ -675,9 +669,9 @@ void Sapphire::Network::GameConnection::commandHandler( const Packets::FFXIVARR_
if( !hZone ) if( !hZone )
return; return;
player.setActiveLand( static_cast< uint8_t >( param11 ), hZone->getWardNum() ); player.setActiveLand( static_cast< uint8_t >( data.Arg0 ), hZone->getWardNum() );
auto pShowBuildPresetUIPacket = makeActorControl( player.getId(), ShowBuildPresetUI, param11 ); auto pShowBuildPresetUIPacket = makeActorControl( player.getId(), ShowBuildPresetUI, data.Arg0 );
server().queueForPlayer( player.getCharacterId(), pShowBuildPresetUIPacket ); server().queueForPlayer( player.getCharacterId(), pShowBuildPresetUIPacket );
break; break;
@ -686,7 +680,7 @@ void Sapphire::Network::GameConnection::commandHandler( const Packets::FFXIVARR_
{ {
auto& housingMgr = Service< HousingMgr >::ref(); auto& housingMgr = Service< HousingMgr >::ref();
auto ident = housingMgr.clientTriggerParamsToLandIdent( param11, param12 ); auto ident = housingMgr.clientTriggerParamsToLandIdent( data.Arg0, data.Arg1 );
housingMgr.sendLandSignFree( player, ident ); housingMgr.sendLandSignFree( player, ident );
break; break;
@ -695,7 +689,7 @@ void Sapphire::Network::GameConnection::commandHandler( const Packets::FFXIVARR_
{ {
auto& housingMgr = Service< HousingMgr >::ref(); auto& housingMgr = Service< HousingMgr >::ref();
auto ident = housingMgr.clientTriggerParamsToLandIdent( param11, param12, false ); auto ident = housingMgr.clientTriggerParamsToLandIdent( data.Arg0, data.Arg1, false );
housingMgr.sendLandSignOwned( player, ident ); housingMgr.sendLandSignOwned( player, ident );
break; break;
@ -704,7 +698,7 @@ void Sapphire::Network::GameConnection::commandHandler( const Packets::FFXIVARR_
{ {
auto& housingMgr = Service< HousingMgr >::ref(); auto& housingMgr = Service< HousingMgr >::ref();
housingMgr.sendWardLandInfo( player, static_cast< uint8_t >( param12 ), static_cast< uint8_t >( param11 ) ); housingMgr.sendWardLandInfo( player, static_cast< uint8_t >( data.Arg1 ), static_cast< uint8_t >( data.Arg0 ) );
break; break;
} }
@ -715,7 +709,7 @@ void Sapphire::Network::GameConnection::commandHandler( const Packets::FFXIVARR_
if( !hZone ) if( !hZone )
return; return;
auto plot = static_cast< uint8_t >( param12 & 0xFF ); auto plot = static_cast< uint8_t >( data.Arg1 & 0xFF );
housingMgr.relinquishLand( player, *hZone, plot ); housingMgr.relinquishLand( player, *hZone, plot );
break; break;
@ -724,7 +718,7 @@ void Sapphire::Network::GameConnection::commandHandler( const Packets::FFXIVARR_
{ {
auto& housingMgr = Service< HousingMgr >::ref(); auto& housingMgr = Service< HousingMgr >::ref();
auto ident = housingMgr.clientTriggerParamsToLandIdent( param11, param12 ); auto ident = housingMgr.clientTriggerParamsToLandIdent( data.Arg0, data.Arg1 );
housingMgr.requestEstateRename( player, ident ); housingMgr.requestEstateRename( player, ident );
break; break;
@ -733,7 +727,7 @@ void Sapphire::Network::GameConnection::commandHandler( const Packets::FFXIVARR_
{ {
auto& housingMgr = Service< HousingMgr >::ref(); auto& housingMgr = Service< HousingMgr >::ref();
auto ident = housingMgr.clientTriggerParamsToLandIdent( param11, param12 ); auto ident = housingMgr.clientTriggerParamsToLandIdent( data.Arg0, data.Arg1 );
housingMgr.requestEstateEditGreeting( player, ident ); housingMgr.requestEstateEditGreeting( player, ident );
break; break;
@ -742,7 +736,7 @@ void Sapphire::Network::GameConnection::commandHandler( const Packets::FFXIVARR_
{ {
auto& housingMgr = Service< HousingMgr >::ref(); auto& housingMgr = Service< HousingMgr >::ref();
auto ident = housingMgr.clientTriggerParamsToLandIdent( param11, param12 ); auto ident = housingMgr.clientTriggerParamsToLandIdent( data.Arg0, data.Arg1 );
housingMgr.requestEstateEditGuestAccess( player, ident ); housingMgr.requestEstateEditGuestAccess( player, ident );
break; break;
@ -750,13 +744,13 @@ void Sapphire::Network::GameConnection::commandHandler( const Packets::FFXIVARR_
case PacketCommand::HOUSING_WARP_TO_SAFE: case PacketCommand::HOUSING_WARP_TO_SAFE:
{ {
// close ui // close ui
if( param11 == 1 ) if( data.Arg0 == 1 )
break; break;
// param12 is 0 when inside a house // data.Arg1 is 0 when inside a house
uint8_t ward = ( param12 >> 16 ) & 0xFF; uint8_t ward = ( data.Arg1 >> 16 ) & 0xFF;
uint8_t plot = ( param12 & 0xFF ); uint8_t plot = ( data.Arg1 & 0xFF );
auto pShowHousingItemUIPacket = makeActorControl( player.getId(), ShowHousingItemUI, 0, plot ); auto pShowHousingItemUIPacket = makeActorControl( player.getId(), ShowHousingItemUI, 0, plot );
server().queueForPlayer( player.getCharacterId(), pShowHousingItemUIPacket ); server().queueForPlayer( player.getCharacterId(), pShowHousingItemUIPacket );
@ -769,7 +763,7 @@ void Sapphire::Network::GameConnection::commandHandler( const Packets::FFXIVARR_
{ {
auto& housingMgr = Service< HousingMgr >::ref(); auto& housingMgr = Service< HousingMgr >::ref();
auto ident = housingMgr.clientTriggerParamsToLandIdent( param11, param12 ); auto ident = housingMgr.clientTriggerParamsToLandIdent( data.Arg0, data.Arg1 );
housingMgr.sendEstateGreeting( player, ident ); housingMgr.sendEstateGreeting( player, ident );
break; break;
@ -777,19 +771,19 @@ void Sapphire::Network::GameConnection::commandHandler( const Packets::FFXIVARR_
case PacketCommand::HOUSING_LOCK_LAND_BY_BREAK: case PacketCommand::HOUSING_LOCK_LAND_BY_BREAK:
{ {
auto& housingMgr = Service< HousingMgr >::ref(); auto& housingMgr = Service< HousingMgr >::ref();
housingMgr.removeHouse( player, static_cast< uint16_t >( param11 ) ); housingMgr.removeHouse( player, static_cast< uint16_t >( data.Arg0 ) );
break; break;
} }
/* case PacketCommand::RequestLandInventory: /* case PacketCommand::RequestLandInventory:
{ {
uint8_t plot = ( param12 & 0xFF ); uint8_t plot = ( data.Arg1 & 0xFF );
auto& housingMgr = Service< HousingMgr >::ref(); auto& housingMgr = Service< HousingMgr >::ref();
uint16_t inventoryType = InventoryType::HousingExteriorPlacedItems; uint16_t inventoryType = InventoryType::HousingExteriorPlacedItems;
if( param2 == 1 ) if( data.Arg2 == 1 )
inventoryType = InventoryType::HousingExteriorStoreroom; inventoryType = InventoryType::HousingExteriorStoreroom;
housingMgr.sendEstateInventory( player, inventoryType, plot ); housingMgr.sendEstateInventory( player, inventoryType, plot );
@ -814,11 +808,11 @@ void Sapphire::Network::GameConnection::commandHandler( const Packets::FFXIVARR_
{ {
auto& housingMgr = Service< HousingMgr >::ref(); auto& housingMgr = Service< HousingMgr >::ref();
auto slot = param4 & 0xFF; auto slot = data.Arg3 & 0xFF;
auto sendToStoreroom = ( param4 >> 16 ) != 0; auto sendToStoreroom = ( data.Arg3 >> 16 ) != 0;
//player, plot, containerId, slot, sendToStoreroom //player, plot, containerId, slot, sendToStoreroom
housingMgr.reqRemoveHousingItem( player, static_cast< uint16_t >( param12 ), static_cast< uint16_t >( param2 ), static_cast< uint8_t >( slot ), sendToStoreroom ); housingMgr.reqRemoveHousingItem( player, static_cast< uint16_t >( data.Arg1 ), static_cast< uint16_t >( data.Arg2 ), static_cast< uint8_t >( slot ), sendToStoreroom );
break; break;
} }
@ -840,10 +834,10 @@ void Sapphire::Network::GameConnection::commandHandler( const Packets::FFXIVARR_
} }
case PacketCommand::UpdateEstateGuestAccess: case PacketCommand::UpdateEstateGuestAccess:
{ {
auto canTeleport = ( param2 & 0xFF ) == 1; auto canTeleport = ( data.Arg2 & 0xFF ) == 1;
auto unk1 = ( param2 >> 8 & 0xFF ) == 1; // todo: related to fc? or unused? auto unk1 = ( data.Arg2 >> 8 & 0xFF ) == 1; // todo: related to fc? or unused?
auto privateEstateAccess = ( param2 >> 16 & 0xFF ) == 1; auto privateEstateAccess = ( data.Arg2 >> 16 & 0xFF ) == 1;
auto unk = ( param2 >> 24 & 0xFF ) == 1; // todo: related to fc? or unused? auto unk = ( data.Arg2 >> 24 & 0xFF ) == 1; // todo: related to fc? or unused?
player.sendDebug( "can teleport: {0}, unk: {1}, privateEstateAccess: {2}, unk: {3}", player.sendDebug( "can teleport: {0}, unk: {1}, privateEstateAccess: {2}, unk: {3}",
canTeleport, unk1, privateEstateAccess, unk ); canTeleport, unk1, privateEstateAccess, unk );
@ -851,10 +845,10 @@ void Sapphire::Network::GameConnection::commandHandler( const Packets::FFXIVARR_
} }
case PacketCommand::RequestEventBattle: case PacketCommand::RequestEventBattle:
{ {
auto packet = makeActorControlSelf( player.getId(), ActorControl::EventBattleDialog, 0, param12, param2 ); auto packet = makeActorControlSelf( player.getId(), ActorControl::EventBattleDialog, 0, data.Arg1, data.Arg2 );
player.queuePacket( packet ); player.queuePacket( packet );
player.sendDebug( "event battle level sync: {0}, ilevel sync?: {1}", param12, param2 ); player.sendDebug( "event battle level sync: {0}, ilevel sync?: {1}", data.Arg1, data.Arg2 );
break; break;
}*/ }*/