1
Fork 0
mirror of https://github.com/SapphireServer/Sapphire.git synced 2025-04-28 15:17:46 +00:00
sapphire/src/world/Network/Handlers/ActionHandler.cpp

110 lines
3.1 KiB
C++
Raw Normal View History

2018-03-06 22:22:19 +01:00
#include <Common.h>
#include <Exd/ExdDataGenerated.h>
#include <Network/GamePacketNew.h>
#include <Network/PacketDef/Zone/ClientZoneDef.h>
2018-03-06 22:22:19 +01:00
#include <Logging/Logger.h>
#include <Actor/Player.h>
#include "Network/GameConnection.h"
#include "Framework.h"
#include "Manager/ActionMgr.h"
using namespace Sapphire::Common;
using namespace Sapphire::Network::Packets;
2018-12-23 03:53:08 +01:00
void Sapphire::Network::GameConnection::actionHandler( FrameworkPtr pFw,
const Packets::FFXIVARR_PACKET_RAW& inPacket,
Entity::Player& player )
{
const auto packet = ZoneChannelPacket< Client::FFXIVIpcSkillHandler >( inPacket );
2018-06-28 00:07:07 +02:00
2018-10-14 23:31:52 +11:00
const auto type = packet.data().type;
const auto actionId = packet.data().actionId;
const auto sequence = packet.data().sequence;
2018-10-14 23:31:52 +11:00
const auto targetId = packet.data().targetId;
2019-02-09 19:26:31 +11:00
player.sendDebug( "Skill type: {0}, sequence: {1}, actionId: {2}, targetId: {3}", type, sequence, actionId, targetId );
auto exdData = m_pFw->get< Data::ExdDataGenerated >();
assert( exdData );
2019-02-09 19:26:31 +11:00
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;
}
}
}
void Sapphire::Network::GameConnection::aoeActionHandler( FrameworkPtr pFw,
const Packets::FFXIVARR_PACKET_RAW& inPacket,
Entity::Player& player )
{
const auto packet = ZoneChannelPacket< Client::FFXIVIpcAoESkillHandler >( inPacket );
const auto type = packet.data().type;
const auto actionId = packet.data().actionId;
const auto sequence = packet.data().sequence;
const auto pos = packet.data().pos;
2019-02-09 19:26:31 +11:00
// 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 );
auto action = exdData->get< Data::Action >( actionId );
// ignore invalid actions
if( !action )
return;
auto actionMgr = pFw->get< World::Manager::ActionMgr >();
2019-02-09 19:26:31 +11:00
actionMgr->handleAoEPlayerAction( player, actionId, action, pos );
}