diff --git a/src/world/Manager/ActionMgr.cpp b/src/world/Manager/ActionMgr.cpp index 03d0a1da..0de84b90 100644 --- a/src/world/Manager/ActionMgr.cpp +++ b/src/world/Manager/ActionMgr.cpp @@ -16,30 +16,32 @@ World::Manager::ActionMgr::ActionMgr( Sapphire::FrameworkPtr pFw ) : } -void World::Manager::ActionMgr::handleAoEPlayerAction( Entity::Player& player, uint8_t type, - uint32_t actionId, Data::ActionPtr actionData, - Common::FFXIVARR_POSITION3 pos ) +void World::Manager::ActionMgr::handleAoEPlayerAction( Entity::Player& player, uint32_t actionId, + Data::ActionPtr actionData, Common::FFXIVARR_POSITION3 pos ) { player.sendDebug( "got aoe act: {0}", actionData->name ); auto action = Action::make_Action( player.getAsPlayer(), actionId, actionData, framework() ); - action->setType( static_cast< Common::HandleActionType >( type ) ); action->setPos( pos ); bootstrapAction( player, action, *actionData ); } -void World::Manager::ActionMgr::handleTargetedPlayerAction( Entity::Player& player, uint8_t type, - uint32_t actionId, Data::ActionPtr actionData, uint64_t targetId ) +void World::Manager::ActionMgr::handleTargetedPlayerAction( Entity::Player& player, uint32_t actionId, + Data::ActionPtr actionData, uint64_t targetId ) { player.sendDebug( "got act: {0}", actionData->name ); auto action = Action::make_Action( player.getAsPlayer(), actionId, actionData, framework() ); - action->setType( static_cast< Common::HandleActionType >( type ) ); bootstrapAction( player, action, *actionData ); } +void World::Manager::ActionMgr::handleItemAction( Sapphire::Entity::Player& player, uint32_t itemActionId ) +{ + player.sendDebug( "got item act: {0}", itemActionId ); +} + void World::Manager::ActionMgr::bootstrapAction( Entity::Player& player, Action::ActionPtr currentAction, Data::Action& actionData ) diff --git a/src/world/Manager/ActionMgr.h b/src/world/Manager/ActionMgr.h index c40f5e8a..77e7118d 100644 --- a/src/world/Manager/ActionMgr.h +++ b/src/world/Manager/ActionMgr.h @@ -18,11 +18,13 @@ namespace Sapphire::World::Manager explicit ActionMgr( FrameworkPtr pFw ); ~ActionMgr() = default; - void handleTargetedPlayerAction( Entity::Player& player, uint8_t type, uint32_t actionId, + void handleTargetedPlayerAction( Entity::Player& player, uint32_t actionId, Data::ActionPtr actionData, uint64_t targetId ); - void handleAoEPlayerAction( Entity::Player& player, uint8_t type, uint32_t actionId, + void handleAoEPlayerAction( Entity::Player& player, uint32_t actionId, Data::ActionPtr actionData, Common::FFXIVARR_POSITION3 pos ); + void handleItemAction( Entity::Player& player, uint32_t itemActionId ); + private: void bootstrapAction( Entity::Player& player, Action::ActionPtr currentAction, Data::Action& actionData ); bool canPlayerUseAction( Entity::Player& player, Action::Action& currentAction, Data::Action& actionData ); diff --git a/src/world/Network/Handlers/ActionHandler.cpp b/src/world/Network/Handlers/ActionHandler.cpp index 3283813c..a945d943 100644 --- a/src/world/Network/Handlers/ActionHandler.cpp +++ b/src/world/Network/Handlers/ActionHandler.cpp @@ -25,19 +25,53 @@ void Sapphire::Network::GameConnection::actionHandler( FrameworkPtr pFw, const auto sequence = packet.data().sequence; const auto targetId = packet.data().targetId; + player.sendDebug( "Skill type: {0}, sequence: {1}, actionId: {2}, targetId: {3}", type, sequence, actionId, targetId ); + auto exdData = m_pFw->get< Data::ExdDataGenerated >(); assert( exdData ); - auto action = exdData->get< Data::Action >( actionId ); + switch( type ) + { + default: + { + player.sendDebug( "Skill type {0} not supported. Defaulting to normal action", type ); + } + case Common::SkillType::Normal: + { + auto action = exdData->get< Data::Action >( actionId ); + + // ignore invalid actions + if( !action ) + return; + + auto actionMgr = pFw->get< World::Manager::ActionMgr >(); + actionMgr->handleTargetedPlayerAction( player, actionId, action, targetId ); + break; + } + + case Common::SkillType::ItemAction: + { + auto item = exdData->get< Data::Item >( actionId ); + if( !item ) + return; + + if( item->itemAction == 0 ) + return; + + player.sendDebug( "Got itemaction for act: {0}", item->itemAction ); + + break; + } + + case Common::SkillType::MountSkill: + { + + break; + } + } - // ignore invalid actions - if( !action ) - return; - auto actionMgr = pFw->get< World::Manager::ActionMgr >(); - actionMgr->handleTargetedPlayerAction( player, type, actionId, action, targetId ); - player.sendDebug( "Skill type: {0}, sequence: {1}, actionId: {2}, targetId: {3}", type, sequence, actionId, targetId ); } void Sapphire::Network::GameConnection::aoeActionHandler( FrameworkPtr pFw, @@ -51,6 +85,16 @@ void Sapphire::Network::GameConnection::aoeActionHandler( FrameworkPtr pFw, const auto sequence = packet.data().sequence; const auto pos = packet.data().pos; + // todo: find out if there are any other action types which actually use this handler + if( type != Common::SkillType::Normal ) + { + player.sendDebug( "Skill type {0} not supported by aoe action handler!", type ); + return; + } + + player.sendDebug( "Skill type: {0}, sequence: {1}, actionId: {2}, x:{3}, y:{4}, z:{5}", + type, sequence, actionId, pos.x, pos.y, pos.z ); + auto exdData = m_pFw->get< Data::ExdDataGenerated >(); assert( exdData ); @@ -61,8 +105,5 @@ void Sapphire::Network::GameConnection::aoeActionHandler( FrameworkPtr pFw, return; auto actionMgr = pFw->get< World::Manager::ActionMgr >(); - actionMgr->handleAoEPlayerAction( player, type, actionId, action, pos ); - - player.sendDebug( "Skill type: {0}, sequence: {1}, actionId: {2}, x:{3}, y:{4}, z:{5}", - type, sequence, actionId, pos.x, pos.y, pos.z ); + actionMgr->handleAoEPlayerAction( player, actionId, action, pos ); }