mirror of
https://github.com/SapphireServer/Sapphire.git
synced 2025-04-28 15:17:46 +00:00
Apply/remove modifiers for statuseffects
This commit is contained in:
parent
dd20478a01
commit
c15ac9031a
2 changed files with 31 additions and 1 deletions
|
@ -17,12 +17,20 @@ using namespace Sapphire::Common;
|
|||
using namespace Sapphire::Network::Packets;
|
||||
//using namespace Sapphire::Network::Packets::WorldPackets::Server;
|
||||
|
||||
Sapphire::StatusEffect::StatusEffect::StatusEffect( uint32_t id, Entity::CharaPtr sourceActor, Entity::CharaPtr targetActor,
|
||||
uint32_t duration, std::vector< World::Action::StatusModifier >& modifiers, uint32_t tickRate ) :
|
||||
StatusEffect( id, sourceActor, targetActor, duration, tickRate )
|
||||
{
|
||||
m_modifiers = std::move( modifiers );
|
||||
}
|
||||
|
||||
Sapphire::StatusEffect::StatusEffect::StatusEffect( uint32_t id, Entity::CharaPtr sourceActor, Entity::CharaPtr targetActor,
|
||||
uint32_t duration, uint32_t tickRate ) :
|
||||
m_id( id ),
|
||||
m_sourceActor( sourceActor ),
|
||||
m_targetActor( targetActor ),
|
||||
m_duration( duration ),
|
||||
m_modifiers( 0 ),
|
||||
m_startTime( 0 ),
|
||||
m_tickRate( tickRate ),
|
||||
m_lastTick( 0 )
|
||||
|
@ -87,6 +95,15 @@ void Sapphire::StatusEffect::StatusEffect::applyStatus()
|
|||
m_startTime = Util::getTimeMs();
|
||||
auto& scriptMgr = Common::Service< Scripting::ScriptMgr >::ref();
|
||||
|
||||
for( const auto& mod : m_modifiers )
|
||||
{
|
||||
// TODO: ticks
|
||||
if( mod.modifier != Common::ParamModifier::TickDamage && mod.modifier != Common::ParamModifier::TickHeal )
|
||||
m_targetActor->addModifier( mod.modifier, mod.value );
|
||||
}
|
||||
|
||||
m_targetActor->calculateStats();
|
||||
|
||||
// this is only right when an action is being used by the player
|
||||
// else you probably need to use an actorcontrol
|
||||
|
||||
|
@ -111,6 +128,15 @@ void Sapphire::StatusEffect::StatusEffect::applyStatus()
|
|||
void Sapphire::StatusEffect::StatusEffect::removeStatus()
|
||||
{
|
||||
auto& scriptMgr = Common::Service< Scripting::ScriptMgr >::ref();
|
||||
|
||||
for( const auto& mod : m_modifiers )
|
||||
{
|
||||
if( mod.modifier != Common::ParamModifier::TickDamage && mod.modifier != Common::ParamModifier::TickHeal )
|
||||
m_targetActor->delModifier( mod.modifier, mod.value );
|
||||
}
|
||||
|
||||
m_targetActor->calculateStats();
|
||||
|
||||
scriptMgr.onStatusTimeOut( m_targetActor, m_id );
|
||||
}
|
||||
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
#define _STATUSEFFECT_H_
|
||||
|
||||
#include "Forwards.h"
|
||||
#include "Action/ActionLut.h"
|
||||
|
||||
namespace Sapphire {
|
||||
namespace StatusEffect {
|
||||
|
@ -10,6 +11,9 @@ namespace StatusEffect {
|
|||
class StatusEffect
|
||||
{
|
||||
public:
|
||||
StatusEffect( uint32_t id, Entity::CharaPtr sourceActor, Entity::CharaPtr targetActor,
|
||||
uint32_t duration, std::vector< World::Action::StatusModifier >& modifiers, uint32_t tickRate );
|
||||
|
||||
StatusEffect( uint32_t id, Entity::CharaPtr sourceActor, Entity::CharaPtr targetActor,
|
||||
uint32_t duration, uint32_t tickRate );
|
||||
|
||||
|
@ -58,7 +62,7 @@ private:
|
|||
uint16_t m_param;
|
||||
std::string m_name;
|
||||
std::pair< uint8_t, uint32_t > m_currTickEffect;
|
||||
|
||||
std::vector< World::Action::StatusModifier > m_modifiers;
|
||||
};
|
||||
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue