From 097a00b91331bda7e2896a36c735c4cd029e6630 Mon Sep 17 00:00:00 2001 From: Mordred Date: Thu, 20 Jan 2022 22:42:26 +0100 Subject: [PATCH 1/3] Task for dead bnpc removal --- src/world/Actor/BNpc.cpp | 5 ++++ src/world/Task/RemoveBNpcTask.cpp | 42 +++++++++++++++++++++++++++++++ src/world/Task/RemoveBNpcTask.h | 23 +++++++++++++++++ src/world/Territory/Territory.cpp | 15 ----------- 4 files changed, 70 insertions(+), 15 deletions(-) create mode 100644 src/world/Task/RemoveBNpcTask.cpp create mode 100644 src/world/Task/RemoveBNpcTask.h diff --git a/src/world/Actor/BNpc.cpp b/src/world/Actor/BNpc.cpp index b5210dfb..024fbfc7 100644 --- a/src/world/Actor/BNpc.cpp +++ b/src/world/Actor/BNpc.cpp @@ -41,6 +41,8 @@ #include #include #include +#include +#include #include using namespace Sapphire::Common; @@ -774,6 +776,9 @@ void Sapphire::Entity::BNpc::onDeath() m_timeOfDeath = Util::getTimeSeconds(); setOwner( nullptr ); + auto& taskMgr = Common::Service< World::Manager::TaskMgr >::ref(); + auto removeTask = std::make_shared< Sapphire::World::RemoveBNpcTask >( 10000, getAsBNpc() ); + taskMgr.queueTask( removeTask ); auto& exdData = Common::Service< Data::ExdData >::ref(); auto paramGrowthInfo = exdData.getRow< Component::Excel::ParamGrow >( m_level ); diff --git a/src/world/Task/RemoveBNpcTask.cpp b/src/world/Task/RemoveBNpcTask.cpp new file mode 100644 index 00000000..29c95eab --- /dev/null +++ b/src/world/Task/RemoveBNpcTask.cpp @@ -0,0 +1,42 @@ +#include "RemoveBNpcTask.h" + +#include +#include +#include +#include + +#include +#include + +using namespace Sapphire::World; + +RemoveBNpcTask::RemoveBNpcTask( uint64_t delayTime, Entity::BNpcPtr bnpc ) : + Task( delayTime ), + m_pBNpc( std::move( bnpc ) ) +{ +} + +void RemoveBNpcTask::onQueue() +{ + Logger::debug( { __FUNCTION__ } ); +} + +void RemoveBNpcTask::execute() +{ + Logger::info( toString() ); + + auto teriMgr = Common::Service< World::Manager::TerritoryMgr >::ref(); + auto pZone = teriMgr.getTerritoryByGuId( m_pBNpc->getTerritoryId() ); + + if( !pZone ) + return; + + pZone->removeActor( m_pBNpc ); +} + +std::string RemoveBNpcTask::toString() +{ + return fmt::format( "RemoveBNpcTask: BNpc#{}, TerritoryId#{}, ElapsedTimeMs: {}", m_pBNpc->getId(), m_pBNpc->getTerritoryId(), getDelayTimeMs() ); +} + + diff --git a/src/world/Task/RemoveBNpcTask.h b/src/world/Task/RemoveBNpcTask.h new file mode 100644 index 00000000..77b33461 --- /dev/null +++ b/src/world/Task/RemoveBNpcTask.h @@ -0,0 +1,23 @@ +#pragma once + +#include +#include +#include +#include "Task.h" + +namespace Sapphire::World +{ + +class RemoveBNpcTask : public Task +{ +public: + RemoveBNpcTask( uint64_t delayTime, Entity::BNpcPtr bnpc ); + + void onQueue() override; + void execute() override; + std::string toString() override; +private: + Entity::BNpcPtr m_pBNpc; +}; + +} diff --git a/src/world/Territory/Territory.cpp b/src/world/Territory/Territory.cpp index 632d62fc..87c16c8a 100644 --- a/src/world/Territory/Territory.cpp +++ b/src/world/Territory/Territory.cpp @@ -417,21 +417,6 @@ void Sapphire::Territory::updateBNpcs( uint64_t tickCount ) m_lastMobUpdate = tickCount; uint64_t currTime = Common::Util::getTimeSeconds(); - for( const auto& entry : m_bNpcMap ) - { - Entity::BNpcPtr pBNpc = entry.second; - - if( !pBNpc ) - continue; - - if( !pBNpc->isAlive() ) - if( currTime - pBNpc->getTimeOfDeath() > 10 ) - { - removeActor( pBNpc ); - break; - } - } - // Update loop may move actors from cell to cell, breaking iterator validity std::vector< Entity::BNpcPtr > activeBNpc; From 092e3eca767e2af8319429db3e9831ad0250c103 Mon Sep 17 00:00:00 2001 From: Mordred Date: Thu, 20 Jan 2022 22:45:48 +0100 Subject: [PATCH 2/3] Removed test tasks and moved info print on task execute to taskmgr --- src/world/Manager/TaskMgr.cpp | 3 ++- src/world/Task/RemoveBNpcTask.cpp | 1 - src/world/WorldServer.cpp | 4 ---- 3 files changed, 2 insertions(+), 6 deletions(-) diff --git a/src/world/Manager/TaskMgr.cpp b/src/world/Manager/TaskMgr.cpp index 70e91a3b..ebcc203c 100644 --- a/src/world/Manager/TaskMgr.cpp +++ b/src/world/Manager/TaskMgr.cpp @@ -10,12 +10,13 @@ using namespace Sapphire::World; void TaskMgr::update( uint64_t tickCount ) { - for( auto it = m_taskList.begin(); it != m_taskList.end(); ) + for( auto it = m_taskList.begin(); it != m_taskList.end(); ) { auto pTask = *it; // is the task ready for execution? if( ( tickCount - pTask->getQueueTimeMs() ) >= pTask->getDelayTimeMs() ) { + Logger::info( pTask->toString() ); pTask->execute(); it = m_taskList.erase( it ); } diff --git a/src/world/Task/RemoveBNpcTask.cpp b/src/world/Task/RemoveBNpcTask.cpp index 29c95eab..f6236793 100644 --- a/src/world/Task/RemoveBNpcTask.cpp +++ b/src/world/Task/RemoveBNpcTask.cpp @@ -23,7 +23,6 @@ void RemoveBNpcTask::onQueue() void RemoveBNpcTask::execute() { - Logger::info( toString() ); auto teriMgr = Common::Service< World::Manager::TerritoryMgr >::ref(); auto pZone = teriMgr.getTerritoryByGuId( m_pBNpc->getTerritoryId() ); diff --git a/src/world/WorldServer.cpp b/src/world/WorldServer.cpp index 7f4f2b9e..8a5f8059 100644 --- a/src/world/WorldServer.cpp +++ b/src/world/WorldServer.cpp @@ -263,10 +263,6 @@ void WorldServer::run( int32_t argc, char* argv[] ) Logger::info( "World server running on {0}:{1}", m_ip, m_port ); - taskMgr->queueTask( std::make_shared< Sapphire::World::TestTask >( 10000 ) ); - taskMgr->queueTask( std::make_shared< Sapphire::World::TestTask >( 5000 ) ); - taskMgr->queueTask( std::make_shared< Sapphire::World::TestTask >( 2000 ) ); - mainLoop(); for( auto& thread_entry : thread_list ) From e5028fea52b3bc8ead12ca9b74e87c38343d5695 Mon Sep 17 00:00:00 2001 From: Mordred Date: Thu, 20 Jan 2022 23:40:18 +0100 Subject: [PATCH 3/3] More readability of packet commands --- src/common/Network/CommonActorControl.h | 2 + src/world/Manager/TaskMgr.cpp | 2 +- .../Network/Handlers/PacketCommandHandler.cpp | 345 +++++++++++++++++- 3 files changed, 344 insertions(+), 5 deletions(-) diff --git a/src/common/Network/CommonActorControl.h b/src/common/Network/CommonActorControl.h index 1b0629c9..46d951ff 100644 --- a/src/common/Network/CommonActorControl.h +++ b/src/common/Network/CommonActorControl.h @@ -627,4 +627,6 @@ namespace Sapphire::Network::ActorControl }; + + } diff --git a/src/world/Manager/TaskMgr.cpp b/src/world/Manager/TaskMgr.cpp index ebcc203c..b3d3eebe 100644 --- a/src/world/Manager/TaskMgr.cpp +++ b/src/world/Manager/TaskMgr.cpp @@ -16,7 +16,7 @@ void TaskMgr::update( uint64_t tickCount ) // is the task ready for execution? if( ( tickCount - pTask->getQueueTimeMs() ) >= pTask->getDelayTimeMs() ) { - Logger::info( pTask->toString() ); + Logger::info( "[TaskMgr] " + pTask->toString() ); pTask->execute(); it = m_taskList.erase( it ); } diff --git a/src/world/Network/Handlers/PacketCommandHandler.cpp b/src/world/Network/Handlers/PacketCommandHandler.cpp index f23bf976..d751c292 100644 --- a/src/world/Network/Handlers/PacketCommandHandler.cpp +++ b/src/world/Network/Handlers/PacketCommandHandler.cpp @@ -32,6 +32,343 @@ using namespace Sapphire::Network::Packets::WorldPackets::Client; using namespace Sapphire::Network::ActorControl; using namespace Sapphire::World::Manager; +const char* packetCommandToString( uint16_t commandId ) +{ + switch( commandId ) + { + case DRAWN_SWORD: + return "DRAWN_SWORD"; + case AUTO_ATTACK: + return "DRAWN_SWORD"; + case TARGET_DECIDE: + return "TARGET_DECIDE"; + case REQUEST_ACTION: + return "REQUEST_ACTION"; + case CANCEL_MOUNT: + return "CANCEL_MOUNT"; + case COMPANION: + return "COMPANION"; + case COMPANION_CANCEL: + return "COMPANION_CANCEL"; + case REQUEST_STATUS_RESET: + return "REQUEST_STATUS_RESET"; + case CANCEL_CAST: + return "CANCEL_CAST"; + case MOUNT_LINK: + return "MOUNT_LINK"; + case UNMOUNT_LINK: + return "UNMOUNT_LINK"; + case BALLISTA_ACCESS: + return "BALLISTA_ACCESS"; + case REVIVE: + return "REVIVE"; + case FINISH_LOADING: + return "FINISH_LOADING"; + case TELEPO_INQUIRY: + return "TELEPO_INQUIRY"; + case TELEPO_INVITATION_ANSWER: + return "TELEPO_INVITATION_ANSWER"; + case TELEPO_CANCEL: + return "TELEPO_CANCEL"; + case RAISE_CANCEL: + return "RAISE_CANCEL"; + case WARP_REPLY: + return "WARP_REPLY"; + case REQUEST_MODE: + return "REQUEST_MODE"; + case PUBLIC_INSTANCE: + return "PUBLIC_INSTANCE"; + case NEWBIE_TELEPO_INQUIRY: + return "NEWBIE_TELEPO_INQUIRY"; + case INSPECT: + return "INSPECT"; + case MARKING: + return "MARKING"; + case ACTIVE_TITLE: + return "ACTIVE_TITLE"; + case TITLE_LIST: + return "TITLE_LIST"; + case BORROW_ACTION: + return "BORROW_ACTION"; + case RANDOM: + return "RANDOM"; + case NAME: + return "NAME"; + case SET_HOWTO: + return "SET_HOWTO"; + case SET_CUTSCENE: + return "SET_CUTSCENE"; + case PHYSICAL_BONUS: + return "PHYSICAL_BONUS"; + case GROUND_MARKING: + return "GROUND_MARKING"; + case CONTENTS_NOTE_REQUEST: + return "CONTENTS_NOTE_REQUEST"; + case BAHAMUTGUIDE_AGREEMENT_CHECK_REPLY: + return "BAHAMUTGUIDE_AGREEMENT_CHECK_REPLY"; + case SET_MARKET_PRICE: + return "SET_MARKET_PRICE"; + case DEPOP_RETAINER: + return "DEPOP_RETAINER"; + case MARKET_EDIT_START: + return "MARKET_EDIT_START"; + case MARKET_EDIT_END: + return "MARKET_EDIT_END"; + case MONSTER_NOTE_RANK_NEW_FLAG: + return "MONSTER_NOTE_RANK_NEW_FLAG"; + case CHANGE_ITEM_COLOR: + return "CHANGE_ITEM_COLOR"; + case LOAD_LEGACY_ITEM: + return "LOAD_LEGACY_ITEM"; + case BRING_OUT_LEGACY_ITEM: + return "BRING_OUT_LEGACY_ITEM"; + case FCCHEST_LOAD: + return "FCCHEST_LOAD"; + case FCCHEST_LOCK: + return "FCCHEST_LOCK"; + case FCCHEST_UNLOCK: + return "FCCHEST_UNLOCK"; + case START_MATERIA_CRAFT: + return "START_MATERIA_CRAFT"; + case PREPARE_MATERIA_CRAFT: + return "PREPARE_MATERIA_CRAFT"; + case CANCEL_MATERIA_CRAFT: + return "CANCEL_MATERIA_CRAFT"; + case ACCEPT_MATERIA_REQUEST: + return "ACCEPT_MATERIA_REQUEST"; + case CANCEL_ATTACH_MATERIA_REQUEST: + return "CANCEL_ATTACH_MATERIA_REQUEST"; + case CHECK_FOR_MATERIA_REQUEST: + return "CHECK_FOR_MATERIA_REQUEST"; + case EXCHANGE_INACTIVE_MATERIA: + return "EXCHANGE_INACTIVE_MATERIA"; + case DECAL_ITEM: + return "DECAL_ITEM"; + case DECAL_MANNEQUIN: + return "DECAL_MANNEQUIN"; + case DECAL_STORAGE_GROUP: + return "DECAL_STORAGE_GROUP"; + case SELL_INACTIVE_MATERIA: + return "SELL_INACTIVE_MATERIA"; + case MATERIA_REQUEST_CLASS_CHANGED: + return "MATERIA_REQUEST_CLASS_CHANGED"; + case ITEM_RESYNC: + return "ITEM_RESYNC"; + case FCCHEST_GIL_DEPOSIT: + return "FCCHEST_GIL_DEPOSIT"; + case FCCHEST_GIL_TAKE: + return "FCCHEST_GIL_TAKE"; + case FCCHEST_LOAD_LOG: + return "FCCHEST_LOAD_LOG"; + case SET_VANITY_PATTERN: + return "SET_VANITY_PATTERN"; + case REQUEST_RETAINER_LIST: + return "REQUEST_RETAINER_LIST"; + case REMOVE_VANITY_PATTERN: + return "REMOVE_VANITY_PATTERN"; + case CABINET_REQUEST: + return "CABINET_REQUEST"; + case CABINET_STORAGE: + return "CABINET_STORAGE"; + case CABINET_TAKEOUT: + return "CABINET_TAKEOUT"; + case SALVAGE: + return "SALVAGE"; + case REQUEST_SALVAGE_SUCCESS_RATE: + return "REQUEST_SALVAGE_SUCCESS_RATE"; + case MOBHUNT_RECEIPT_ORDER: + return "MOBHUNT_RECEIPT_ORDER"; + case MOBHUNT_BREAK_ORDER: + return "MOBHUNT_BREAK_ORDER"; + case EMOTE: + return "EMOTE"; + case EMOTE_WITH_WARP: + return "EMOTE_WITH_WARP"; + case EMOTE_CANCEL: + return "EMOTE_CANCEL"; + case EMOTE_MODE_CANCEL: + return "EMOTE_MODE_CANCEL"; + case EMOTE_MODE_CANCEL_WITH_WARP: + return "EMOTE_MODE_CANCEL_WITH_WARP"; + case POSE_EMOTE_CONFIG: + return "POSE_EMOTE_CONFIG"; + case POSE_EMOTE_WORK: + return "POSE_EMOTE_WORK"; + case POSE_EMOTE_CANCEL: + return "POSE_EMOTE_CANCEL"; + case JUMP_START: + return "JUMP_START"; + case JUMP_LANDING: + return "JUMP_LANDING"; + case GIMMICK_JUMP_END: + return "GIMMICK_JUMP_END"; + case START_CRAFT: + return "START_CRAFT"; + case FISHING: + return "FISHING"; + case PACKET_COMMOND_TRACKING: + return "PACKET_COMMOND_TRACKING"; + case PACKET_COMMOND_JOURNAL_CONFIG: + return "PACKET_COMMOND_JOURNAL_CONFIG"; + case GATHERING_NOTEBOOK_START: + return "GATHERING_NOTEBOOK_START"; + case GATHERING_NOTEBOOK_DIVISION: + return "GATHERING_NOTEBOOK_DIVISION"; + case GATHERING_NOTEBOOK_AREA: + return "GATHERING_NOTEBOOK_AREA"; + case RECIPE_NOTEBOOK_START: + return "RECIPE_NOTEBOOK_START"; + case RECIPE_NOTEBOOK_DIVISION: + return "RECIPE_NOTEBOOK_DIVISION"; + case END_AUTO_CRAFT: + return "END_AUTO_CRAFT"; + case CANCEL_QUEST: + return "CANCEL_QUEST"; + case DIRECTOR_INIT_RETURN: + return "DIRECTOR_INIT_RETURN"; + case CANCEL_GUILDLEVE: + return "CANCEL_GUILDLEVE"; + case RETRY_GUILDLEVE: + return "RETRY_GUILDLEVE"; + case START_GUILDLEVE: + return "START_GUILDLEVE"; + case RETIRE_GUILDLEVE: + return "RETIRE_GUILDLEVE"; + case CHANGE_GUILDLEVE_DIFFICULTY: + return "CHANGE_GUILDLEVE_DIFFICULTY"; + case SYNC_DIRECTOR: + return "SYNC_DIRECTOR"; + case EVENT_HANDLER: + return "EVENT_HANDLER"; + case FATE_START: + return "FATE_START"; + case FATE_INIT_RETURN: + return "FATE_INIT_RETURN"; + case FATE_CREATE_CHARACTER_RETURN: + return "FATE_CREATE_CHARACTER_RETURN"; + case FATE_SYNC_CONTEXT_WORK: + return "FATE_SYNC_CONTEXT_WORK"; + case FATE_LEVEL_SYNC: + return "FATE_LEVEL_SYNC"; + case FATE_INIT_CHARACTER_RETURN: + return "FATE_INIT_CHARACTER_RETURN"; + case ACHIEVEMENT_REQUEST_RATE: + return "ACHIEVEMENT_REQUEST_RATE"; + case ACHIEVEMENT_REQUEST: + return "ACHIEVEMENT_REQUEST"; + case TROPHY_RECEPTION: + return "TROPHY_RECEPTION"; + case TROPHY_ACQUISITION: + return "TROPHY_ACQUISITION"; + case HOUSING_LOCK_LAND_BY_BUILD: + return "HOUSING_LOCK_LAND_BY_BUILD"; + case HOUSING_LOCK_LAND_BY_EXTERIOR: + return "HOUSING_LOCK_LAND_BY_EXTERIOR"; + case HOUSING_LOCK_LAND_BY_INTERIOR: + return "HOUSING_LOCK_LAND_BY_INTERIOR"; + case HOUSING_LOCK_LAND_BY_BREAK: + return "HOUSING_LOCK_LAND_BY_BREAK"; + case HOUSING_UNLOCK_HOUSE: + return "HOUSING_UNLOCK_HOUSE"; + case HOUSING_AUCTION_INFO: + return "HOUSING_AUCTION_INFO"; + case HOUSING_GET_PROFILE: + return "HOUSING_GET_PROFILE"; + case HOUSING_GET_PROFILE_LIST: + return "HOUSING_GET_PROFILE_LIST"; + case HOUSING_RELEASE: + return "HOUSING_RELEASE"; + case HOUSING_BUILD: + return "HOUSING_BUILD"; + case HOUSING_BREAK: + return "HOUSING_BREAK"; + case HOUSING_LOAD_PARTS: + return "HOUSING_LOAD_PARTS"; + case HOUSING_LOAD_ROOM: + return "HOUSING_LOAD_ROOM"; + case HOUSING_LOAD_YARD: + return "HOUSING_LOAD_YARD"; + case HOUSING_UNPLACE: + return "HOUSING_UNPLACE"; + case HOUSING_HOUSE_NAME: + return "HOUSING_HOUSE_NAME"; + case HOUSING_GREETING: + return "HOUSING_GREETING"; + case HOUSING_GREETING_BY_ADDRESS: + return "HOUSING_GREETING_BY_ADDRESS"; + case HOUSING_WELCOME: + return "HOUSING_WELCOME"; + case HOUSING_LOAD_FURNITURE: + return "HOUSING_LOAD_FURNITURE"; + case HOUSING_WARP_TO_SAFE: + return "HOUSING_WARP_TO_SAFE"; + case HOUSING_LAYOUTMODE: + return "HOUSING_LAYOUTMODE"; + case HOUSING_RELEASE_PERSONAL_ROOM: + return "HOUSING_RELEASE_PERSONAL_ROOM"; + case HOUSING_GET_PERSONAL_ROOM_PROFILE_LIST: + return "HOUSING_GET_PERSONAL_ROOM_PROFILE_LIST"; + case HOUSING_GET_PERSONAL_ROOM_PROFILE: + return "HOUSING_GET_PERSONAL_ROOM_PROFILE"; + case HOUSING_GET_BUDDY_STABLE_LIST: + return "HOUSING_GET_BUDDY_STABLE_LIST"; + case HOUSING_TRAIN_BUDDY: + return "HOUSING_TRAIN_BUDDY"; + case HOUSING_FEED_BUDDY: + return "HOUSING_FEED_BUDDY"; + case PVP_LEARN_ACTION: + return "PVP_LEARN_ACTION"; + case PVP_LEARN_ACTION_TRAIT: + return "PVP_LEARN_ACTION_TRAIT"; + case PVP_LEARN_TRAIT: + return "PVP_LEARN_TRAIT"; + case PVP_ACTION: + return "PVP_ACTION"; + case PVP_RESET_REWARD: + return "PVP_RESET_REWARD"; + case DISCARD_TREASURE_MAP: + return "DISCARD_TREASURE_MAP"; + case TREASURE_HUNT_GET_MAP_TIME: + return "TREASURE_HUNT_GET_MAP_TIME"; + case SET_RETAINER_TASK: + return "SET_RETAINER_TASK"; + case CANCEL_RETAINER_TASK: + return "CANCEL_RETAINER_TASK"; + case SET_VENTURE_TUTORIAL_FLAGS: + return "SET_VENTURE_TUTORIAL_FLAGS"; + case SET_RETAINER_FLAGS: + return "SET_RETAINER_FLAGS"; + case RELIC_NOTE_CLEAR: + return "RELIC_NOTE_CLEAR"; + case RELIC_GEM_ABSORB_MATERIA: + return "RELIC_GEM_ABSORB_MATERIA"; + case REPAIR_ITEM: + return "REPAIR_ITEM"; + case REPAIR_ITEM_NPC: + return "REPAIR_ITEM_NPC"; + case REPAIR_STORAGE_GROUP: + return "REPAIR_STORAGE_GROUP"; + case REPAIR_STORAGE_GROUP_NPC: + return "REPAIR_STORAGE_GROUP_NPC"; + case REPAIR_MANNEQUIN: + return "REPAIR_MANNEQUIN"; + case REPAIR_MANNEQUIN_NPC: + return "REPAIR_MANNEQUIN_NPC"; + case BUDDY_ACTION: + return "BUDDY_ACTION"; + case BUDDY_EQUIP: + return "BUDDY_EQUIP"; + case BUDDY_INCREASE_SKILL_LINE: + return "BUDDY_INCREASE_SKILL_LINE"; + case PET_COMMAND: + return "PET_COMMAND"; + case SCREEN_SHOT: + return "SCREEN_SHOT"; + default: + return "UNKNOWN"; + } +} + void examineHandler( Sapphire::Entity::Player& player, uint32_t targetId ) { using namespace Sapphire; @@ -72,8 +409,8 @@ void Sapphire::Network::GameConnection::commandHandler( const Packets::FFXIVARR_ const auto param3 = packet.data().Target; - Logger::debug( "[{0}] Incoming Packet Command: {1:X} ( p1:{2:X} p2:{3:X} p3:{4:X} )", - m_pSession->getId(), commandId, param1, param2, param3 ); + Logger::debug( "\t\t {5} | {1:X} ( p1:{2:X} p2:{3:X} p3:{4:X} )", + m_pSession->getId(), commandId, param1, param2, param3, packetCommandToString( commandId ) ); //Logger::Log(LoggingSeverity::debug, "[" + std::to_string(m_pSession->getId()) + "] " + pInPacket->toString()); @@ -121,7 +458,7 @@ void Sapphire::Network::GameConnection::commandHandler( const Packets::FFXIVARR_ } case PacketCommand::COMPANION: { - player.setCompanion( static_cast< uint16_t >( param1 ) ); + player.setCompanion( static_cast< uint8_t >( param1 ) ); break; } case PacketCommand::REQUEST_STATUS_RESET: // Remove status (clicking it off) @@ -480,7 +817,7 @@ void Sapphire::Network::GameConnection::commandHandler( const Packets::FFXIVARR_ default: { - Logger::debug( "[{0}] Unhandled action: {1:04X}", m_pSession->getId(), commandId ); + Logger::debug( "[{0}] Unhandled Command: {1:04X}", m_pSession->getId(), commandId ); break; } }