1
Fork 0
mirror of https://github.com/SapphireServer/Sapphire.git synced 2025-04-29 07:37:45 +00:00

kinda working effect packets

This commit is contained in:
NotAdam 2019-07-26 20:28:01 +10:00
parent 2581840921
commit d11fa5a6a5
7 changed files with 44 additions and 25 deletions

View file

@ -35,19 +35,21 @@ using namespace Sapphire::World;
Action::Action::Action() = default; Action::Action::Action() = default;
Action::Action::~Action() = default; Action::Action::~Action() = default;
Action::Action::Action( Entity::CharaPtr caster, uint32_t actionId, FrameworkPtr fw ) : Action::Action::Action( Entity::CharaPtr caster, uint32_t actionId, uint16_t sequence, FrameworkPtr fw ) :
Action( std::move( caster ), actionId, nullptr, std::move( fw ) ) Action( std::move( caster ), actionId, sequence, nullptr, std::move( fw ) )
{ {
} }
Action::Action::Action( Entity::CharaPtr caster, uint32_t actionId, Data::ActionPtr actionData, FrameworkPtr fw ) : Action::Action::Action( Entity::CharaPtr caster, uint32_t actionId, uint16_t sequence,
Data::ActionPtr actionData, FrameworkPtr fw ) :
m_pSource( std::move( caster ) ), m_pSource( std::move( caster ) ),
m_pFw( std::move( fw ) ), m_pFw( std::move( fw ) ),
m_actionData( std::move( actionData ) ), m_actionData( std::move( actionData ) ),
m_id( actionId ), m_id( actionId ),
m_targetId( 0 ), m_targetId( 0 ),
m_startTime( 0 ), m_startTime( 0 ),
m_interruptType( Common::ActionInterruptType::None ) m_interruptType( Common::ActionInterruptType::None ),
m_sequence( sequence )
{ {
} }
@ -70,7 +72,7 @@ bool Action::Action::init()
m_actionData = actionData; m_actionData = actionData;
} }
m_effectBuilder = make_EffectBuilder( m_pSource, getId() ); m_effectBuilder = make_EffectBuilder( m_pSource, getId(), m_sequence );
m_castTimeMs = static_cast< uint32_t >( m_actionData->cast100ms * 100 ); m_castTimeMs = static_cast< uint32_t >( m_actionData->cast100ms * 100 );
m_recastTimeMs = static_cast< uint32_t >( m_actionData->recast100ms * 100 ); m_recastTimeMs = static_cast< uint32_t >( m_actionData->recast100ms * 100 );

View file

@ -20,8 +20,8 @@ namespace Sapphire::World::Action
public: public:
Action(); Action();
Action( Entity::CharaPtr caster, uint32_t actionId, FrameworkPtr fw ); Action( Entity::CharaPtr caster, uint32_t actionId, uint16_t sequence, FrameworkPtr fw );
Action( Entity::CharaPtr caster, uint32_t actionId, Data::ActionPtr actionData, FrameworkPtr fw ); Action( Entity::CharaPtr caster, uint32_t actionId, uint16_t sequence, Data::ActionPtr actionData, FrameworkPtr fw );
virtual ~Action(); virtual ~Action();
@ -141,6 +141,8 @@ namespace Sapphire::World::Action
uint32_t m_id; uint32_t m_id;
uint16_t m_sequence;
Common::ActionPrimaryCostType m_primaryCostType; Common::ActionPrimaryCostType m_primaryCostType;
uint16_t m_primaryCost; uint16_t m_primaryCost;

View file

@ -1,7 +1,7 @@
#include "EffectBuilder.h" #include "EffectBuilder.h"
#include "EffectResult.h" #include "EffectResult.h"
#include <Actor/Chara.h> #include <Actor/Player.h>
#include <Network/PacketWrappers/EffectPacket.h> #include <Network/PacketWrappers/EffectPacket.h>
@ -16,9 +16,10 @@ using namespace Sapphire;
using namespace Sapphire::World::Action; using namespace Sapphire::World::Action;
using namespace Sapphire::Network::Packets; using namespace Sapphire::Network::Packets;
EffectBuilder::EffectBuilder( Entity::CharaPtr source, uint32_t actionId ) : EffectBuilder::EffectBuilder( Entity::CharaPtr source, uint32_t actionId, uint16_t sequence ) :
m_sourceChara( std::move( source ) ), m_sourceChara( std::move( source ) ),
m_actionId( actionId ) m_actionId( actionId ),
m_sequence( sequence )
{ {
} }
@ -77,13 +78,25 @@ void EffectBuilder::buildAndSendPackets()
auto effectPacket = std::make_shared< Server::EffectPacket >( m_sourceChara->getId(), result->getTarget()->getId(), m_actionId ); auto effectPacket = std::make_shared< Server::EffectPacket >( m_sourceChara->getId(), result->getTarget()->getId(), m_actionId );
effectPacket->setRotation( Common::Util::floatToUInt16Rot( m_sourceChara->getRot() ) ); effectPacket->setRotation( Common::Util::floatToUInt16Rot( m_sourceChara->getRot() ) );
effectPacket->setSequence( m_sequence );
effectPacket->addEffect( result->buildEffectEntry() ); effectPacket->addEffect( result->buildEffectEntry() );
auto sequence = m_sourceChara->getCurrentTerritory()->getNextEffectSequence(); m_sourceChara->sendToInRangeSet( effectPacket, false );
effectPacket->setSequence( sequence );
m_sourceChara->sendToInRangeSet( effectPacket, true ); // send a dupe packet to the caster with hiddenAnimation field set
if( auto player = m_sourceChara->getAsPlayer() )
{
auto effectPacket2 = std::make_shared< Server::EffectPacket >( m_sourceChara->getId(), result->getTarget()->getId(), m_actionId );
effectPacket2->setRotation( Common::Util::floatToUInt16Rot( m_sourceChara->getRot() ) );
effectPacket2->setSequence( m_sequence );
effectPacket2->data().hiddenAnimation = m_sequence;
effectPacket2->addEffect( result->buildEffectEntry() );
player->queuePacket( effectPacket2 );
}
} }
} }

View file

@ -17,7 +17,7 @@ namespace Sapphire::World::Action
CriticalDirectHit CriticalDirectHit
}; };
EffectBuilder( Entity::CharaPtr source, uint32_t actionId ); EffectBuilder( Entity::CharaPtr source, uint32_t actionId, uint16_t sequence );
void healTarget( Entity::CharaPtr& target, uint32_t amount, void healTarget( Entity::CharaPtr& target, uint32_t amount,
@ -34,11 +34,11 @@ namespace Sapphire::World::Action
uint32_t getResultDelayMs(); uint32_t getResultDelayMs();
private:
uint32_t m_actionId;
uint16_t m_sequence;
Entity::CharaPtr m_sourceChara; Entity::CharaPtr m_sourceChara;
uint32_t m_actionId;
std::unordered_map< uint32_t, EffectResultPtr > m_resolvedEffects; std::unordered_map< uint32_t, EffectResultPtr > m_resolvedEffects;
}; };

View file

@ -19,12 +19,13 @@ World::Manager::ActionMgr::ActionMgr( Sapphire::FrameworkPtr pFw ) :
} }
void World::Manager::ActionMgr::handlePlacedPlayerAction( Entity::Player& player, uint32_t actionId, void World::Manager::ActionMgr::handlePlacedPlayerAction( Entity::Player& player, uint32_t actionId,
Data::ActionPtr actionData, Common::FFXIVARR_POSITION3 pos ) Data::ActionPtr actionData, Common::FFXIVARR_POSITION3 pos,
uint16_t sequence )
{ {
player.sendDebug( "got aoe act: {0}", actionData->name ); player.sendDebug( "got aoe act: {0}", actionData->name );
auto action = Action::make_Action( player.getAsPlayer(), actionId, actionData, framework() ); auto action = Action::make_Action( player.getAsPlayer(), actionId, sequence, actionData, framework() );
if( !action->init() ) if( !action->init() )
return; return;
@ -42,9 +43,10 @@ void World::Manager::ActionMgr::handlePlacedPlayerAction( Entity::Player& player
} }
void World::Manager::ActionMgr::handleTargetedPlayerAction( Entity::Player& player, uint32_t actionId, void World::Manager::ActionMgr::handleTargetedPlayerAction( Entity::Player& player, uint32_t actionId,
Data::ActionPtr actionData, uint64_t targetId ) Data::ActionPtr actionData, uint64_t targetId,
uint16_t sequence )
{ {
auto action = Action::make_Action( player.getAsPlayer(), actionId, actionData, framework() ); auto action = Action::make_Action( player.getAsPlayer(), actionId, sequence, actionData, framework() );
action->setTargetId( targetId ); action->setTargetId( targetId );

View file

@ -22,9 +22,9 @@ namespace Sapphire::World::Manager
~ActionMgr() = default; ~ActionMgr() = default;
void handleTargetedPlayerAction( Entity::Player& player, uint32_t actionId, void handleTargetedPlayerAction( Entity::Player& player, uint32_t actionId,
Data::ActionPtr actionData, uint64_t targetId ); Data::ActionPtr actionData, uint64_t targetId, uint16_t sequence );
void handlePlacedPlayerAction( Entity::Player& player, uint32_t actionId, void handlePlacedPlayerAction( Entity::Player& player, uint32_t actionId,
Data::ActionPtr actionData, Common::FFXIVARR_POSITION3 pos ); Data::ActionPtr actionData, Common::FFXIVARR_POSITION3 pos, uint16_t sequence );
void handleItemAction( Entity::Player& player, uint32_t itemId, Data::ItemActionPtr itemActionData, void handleItemAction( Entity::Player& player, uint32_t itemId, Data::ItemActionPtr itemActionData,
uint16_t itemSourceSlot, uint16_t itemSourceContainer ); uint16_t itemSourceSlot, uint16_t itemSourceContainer );

View file

@ -48,7 +48,7 @@ void Sapphire::Network::GameConnection::actionHandler( FrameworkPtr pFw,
if( !action ) if( !action )
return; return;
actionMgr->handleTargetedPlayerAction( player, actionId, action, targetId ); actionMgr->handleTargetedPlayerAction( player, actionId, action, targetId, sequence );
break; break;
} }
@ -112,5 +112,5 @@ void Sapphire::Network::GameConnection::placedActionHandler( FrameworkPtr pFw,
return; return;
auto actionMgr = pFw->get< World::Manager::ActionMgr >(); auto actionMgr = pFw->get< World::Manager::ActionMgr >();
actionMgr->handlePlacedPlayerAction( player, actionId, action, pos ); actionMgr->handlePlacedPlayerAction( player, actionId, action, pos, sequence );
} }