mirror of
https://github.com/SapphireServer/Sapphire.git
synced 2025-04-29 07:37:45 +00:00
send effect packets for single target damage attacks
This commit is contained in:
parent
a40859e4b4
commit
a5dd8fb816
2 changed files with 38 additions and 19 deletions
|
@ -11,6 +11,7 @@
|
||||||
#include "Network/PacketWrappers/ActorControlPacket142.h"
|
#include "Network/PacketWrappers/ActorControlPacket142.h"
|
||||||
#include "Network/PacketWrappers/ActorControlPacket143.h"
|
#include "Network/PacketWrappers/ActorControlPacket143.h"
|
||||||
#include "Network/PacketWrappers/ActorControlPacket144.h"
|
#include "Network/PacketWrappers/ActorControlPacket144.h"
|
||||||
|
#include <Network/PacketWrappers/EffectPacket.h>
|
||||||
|
|
||||||
using namespace Sapphire::Common;
|
using namespace Sapphire::Common;
|
||||||
using namespace Sapphire::Network;
|
using namespace Sapphire::Network;
|
||||||
|
@ -252,19 +253,37 @@ void Sapphire::Action::Action::onFinish()
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
buildEffectPackets();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Sapphire::Action::Action::buildEffectPacket()
|
void Sapphire::Action::Action::buildEffectPackets()
|
||||||
{
|
{
|
||||||
for( int i = 0; i < EffectPacketIdentity::MAX_ACTION_EFFECT_PACKET_IDENT; ++i )
|
for( int i = 0; i < EffectPacketIdentity::MAX_ACTION_EFFECT_PACKET_IDENT; ++i )
|
||||||
{
|
{
|
||||||
auto& packetData = m_effects[ static_cast< EffectPacketIdentity >( i ) ];
|
auto& packetData = m_effects[ static_cast< EffectPacketIdentity >( i ) ];
|
||||||
|
|
||||||
// todo: this
|
if( packetData.m_hitActors.size() == 1 )
|
||||||
|
{
|
||||||
|
// send normal effect
|
||||||
|
auto effectPacket = std::make_shared< Network::Packets::Server::EffectPacket >( m_pSource->getId(), m_pTarget->getId(), getId() );
|
||||||
|
effectPacket->setTargetActor( packetData.m_hitActors[ 0 ] );
|
||||||
|
effectPacket->setDisplayType( Common::ActionEffectDisplayType::ShowActionName );
|
||||||
|
|
||||||
|
for( auto& effect : packetData.m_entries )
|
||||||
|
{
|
||||||
|
effectPacket->addEffect( effect );
|
||||||
|
}
|
||||||
|
|
||||||
|
m_pSource->sendToInRangeSet( effectPacket, true );
|
||||||
|
}
|
||||||
|
else if( packetData.m_hitActors.size() > 1 )
|
||||||
|
{
|
||||||
|
// todo: aoe effects
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Sapphire::Action::Action::damageTarget( uint32_t amount, Entity::Chara& chara,
|
void Sapphire::Action::Action::damageTarget( uint32_t potency, Entity::Chara& chara,
|
||||||
Common::ActionAspect aspect )
|
Common::ActionAspect aspect )
|
||||||
{
|
{
|
||||||
Common::EffectEntry entry{};
|
Common::EffectEntry entry{};
|
||||||
|
@ -276,20 +295,20 @@ void Sapphire::Action::Action::damageTarget( uint32_t amount, Entity::Chara& cha
|
||||||
entry.hitSeverity = Common::ActionHitSeverityType::NormalDamage;
|
entry.hitSeverity = Common::ActionHitSeverityType::NormalDamage;
|
||||||
|
|
||||||
// todo: handle > 65535 damage values, not sure if this is right?
|
// todo: handle > 65535 damage values, not sure if this is right?
|
||||||
if( amount > 65535 )
|
if( potency > 65535 )
|
||||||
{
|
{
|
||||||
entry.value = static_cast< int16_t >( amount / 10 );
|
entry.value = static_cast< int16_t >( potency / 10 );
|
||||||
// todo: rename this? need to confirm how it works again
|
// todo: rename this? need to confirm how it works again
|
||||||
entry.bonusPercent = 1;
|
entry.bonusPercent = 1;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
entry.value = static_cast< int16_t >( amount );
|
entry.value = static_cast< int16_t >( potency );
|
||||||
|
|
||||||
// todo: aspected damage?
|
// todo: aspected damage?
|
||||||
chara.takeDamage( amount );
|
chara.takeDamage( potency );
|
||||||
|
|
||||||
if( auto player = m_pSource->getAsPlayer() )
|
if( auto player = m_pSource->getAsPlayer() )
|
||||||
player->sendDebug( "hit actorId#{0} for damage: {1}", chara.getId(), amount );
|
player->sendDebug( "hit actorId#{0} for damage: {1}", chara.getId(), potency );
|
||||||
|
|
||||||
m_effects[ EffectPacketIdentity::DamageEffect ].m_entries.emplace_back( entry );
|
m_effects[ EffectPacketIdentity::DamageEffect ].m_entries.emplace_back( entry );
|
||||||
|
|
||||||
|
@ -297,7 +316,7 @@ void Sapphire::Action::Action::damageTarget( uint32_t amount, Entity::Chara& cha
|
||||||
m_effects[ EffectPacketIdentity::DamageEffect ].m_hitActors.emplace_back( chara.getId() );
|
m_effects[ EffectPacketIdentity::DamageEffect ].m_hitActors.emplace_back( chara.getId() );
|
||||||
}
|
}
|
||||||
|
|
||||||
void Sapphire::Action::Action::healTarget( uint32_t amount, Entity::Chara& chara )
|
void Sapphire::Action::Action::healTarget( uint32_t potency, Entity::Chara& chara )
|
||||||
{
|
{
|
||||||
Common::EffectEntry entry{};
|
Common::EffectEntry entry{};
|
||||||
|
|
||||||
|
@ -307,19 +326,19 @@ void Sapphire::Action::Action::healTarget( uint32_t amount, Entity::Chara& chara
|
||||||
entry.hitSeverity = Common::ActionHitSeverityType::NormalHeal;
|
entry.hitSeverity = Common::ActionHitSeverityType::NormalHeal;
|
||||||
|
|
||||||
// todo: handle > 65535 healing values, not sure if this is right?
|
// todo: handle > 65535 healing values, not sure if this is right?
|
||||||
if( amount > 65535 )
|
if( potency > 65535 )
|
||||||
{
|
{
|
||||||
entry.value = static_cast< int16_t >( amount / 10 );
|
entry.value = static_cast< int16_t >( potency / 10 );
|
||||||
// todo: rename this? need to confirm how it works again
|
// todo: rename this? need to confirm how it works again
|
||||||
entry.bonusPercent = 1;
|
entry.bonusPercent = 1;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
entry.value = static_cast< int16_t >( amount );
|
entry.value = static_cast< int16_t >( potency );
|
||||||
|
|
||||||
chara.heal( amount );
|
chara.heal( potency );
|
||||||
|
|
||||||
if( auto player = m_pSource->getAsPlayer() )
|
if( auto player = m_pSource->getAsPlayer() )
|
||||||
player->sendDebug( "hit actorId#{0} for heal: {1}", chara.getId(), amount );
|
player->sendDebug( "hit actorId#{0} for heal: {1}", chara.getId(), potency );
|
||||||
|
|
||||||
m_effects[ EffectPacketIdentity::HealingEffect ].m_entries.emplace_back( entry );
|
m_effects[ EffectPacketIdentity::HealingEffect ].m_entries.emplace_back( entry );
|
||||||
|
|
||||||
|
|
|
@ -68,21 +68,21 @@ namespace Sapphire::Action
|
||||||
*/
|
*/
|
||||||
void start();
|
void start();
|
||||||
|
|
||||||
void buildEffectPacket();
|
void buildEffectPackets();
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* @brief Damages a target and adds the effect entry
|
* @brief Damages a target and adds the effect entry
|
||||||
* @param amount The amount of damage the target takes
|
* @param potency The amount of damage the target takes
|
||||||
* @param chara The chara to inflict damage upon
|
* @param chara The chara to inflict damage upon
|
||||||
* @param aspect The aspect of the damage
|
* @param aspect The aspect of the damage
|
||||||
*/
|
*/
|
||||||
void damageTarget( uint32_t amount, Entity::Chara& chara, Common::ActionAspect aspect = Common::ActionAspect::None );
|
void damageTarget( uint32_t potency, Entity::Chara& chara, Common::ActionAspect aspect = Common::ActionAspect::None );
|
||||||
/*!
|
/*!
|
||||||
* @brief Heals a target and adds the effect entry
|
* @brief Heals a target and adds the effect entry
|
||||||
* @param amount Amount of healing to apply
|
* @param potency Amount of healing to apply
|
||||||
* @param chara Chara to receive healing
|
* @param chara Chara to receive healing
|
||||||
*/
|
*/
|
||||||
void healTarget( uint32_t amount, Entity::Chara& chara );
|
void healTarget( uint32_t potency, Entity::Chara& chara );
|
||||||
|
|
||||||
virtual void onStart();
|
virtual void onStart();
|
||||||
virtual void onFinish();
|
virtual void onFinish();
|
||||||
|
|
Loading…
Add table
Reference in a new issue