mirror of
https://github.com/SapphireServer/Sapphire.git
synced 2025-04-29 07:37:45 +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;
|
||||||
//using namespace Sapphire::Network::Packets::WorldPackets::Server;
|
//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,
|
Sapphire::StatusEffect::StatusEffect::StatusEffect( uint32_t id, Entity::CharaPtr sourceActor, Entity::CharaPtr targetActor,
|
||||||
uint32_t duration, uint32_t tickRate ) :
|
uint32_t duration, uint32_t tickRate ) :
|
||||||
m_id( id ),
|
m_id( id ),
|
||||||
m_sourceActor( sourceActor ),
|
m_sourceActor( sourceActor ),
|
||||||
m_targetActor( targetActor ),
|
m_targetActor( targetActor ),
|
||||||
m_duration( duration ),
|
m_duration( duration ),
|
||||||
|
m_modifiers( 0 ),
|
||||||
m_startTime( 0 ),
|
m_startTime( 0 ),
|
||||||
m_tickRate( tickRate ),
|
m_tickRate( tickRate ),
|
||||||
m_lastTick( 0 )
|
m_lastTick( 0 )
|
||||||
|
@ -87,6 +95,15 @@ void Sapphire::StatusEffect::StatusEffect::applyStatus()
|
||||||
m_startTime = Util::getTimeMs();
|
m_startTime = Util::getTimeMs();
|
||||||
auto& scriptMgr = Common::Service< Scripting::ScriptMgr >::ref();
|
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
|
// this is only right when an action is being used by the player
|
||||||
// else you probably need to use an actorcontrol
|
// else you probably need to use an actorcontrol
|
||||||
|
|
||||||
|
@ -111,6 +128,15 @@ void Sapphire::StatusEffect::StatusEffect::applyStatus()
|
||||||
void Sapphire::StatusEffect::StatusEffect::removeStatus()
|
void Sapphire::StatusEffect::StatusEffect::removeStatus()
|
||||||
{
|
{
|
||||||
auto& scriptMgr = Common::Service< Scripting::ScriptMgr >::ref();
|
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 );
|
scriptMgr.onStatusTimeOut( m_targetActor, m_id );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
#define _STATUSEFFECT_H_
|
#define _STATUSEFFECT_H_
|
||||||
|
|
||||||
#include "Forwards.h"
|
#include "Forwards.h"
|
||||||
|
#include "Action/ActionLut.h"
|
||||||
|
|
||||||
namespace Sapphire {
|
namespace Sapphire {
|
||||||
namespace StatusEffect {
|
namespace StatusEffect {
|
||||||
|
@ -10,6 +11,9 @@ namespace StatusEffect {
|
||||||
class StatusEffect
|
class StatusEffect
|
||||||
{
|
{
|
||||||
public:
|
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,
|
StatusEffect( uint32_t id, Entity::CharaPtr sourceActor, Entity::CharaPtr targetActor,
|
||||||
uint32_t duration, uint32_t tickRate );
|
uint32_t duration, uint32_t tickRate );
|
||||||
|
|
||||||
|
@ -58,7 +62,7 @@ private:
|
||||||
uint16_t m_param;
|
uint16_t m_param;
|
||||||
std::string m_name;
|
std::string m_name;
|
||||||
std::pair< uint8_t, uint32_t > m_currTickEffect;
|
std::pair< uint8_t, uint32_t > m_currTickEffect;
|
||||||
|
std::vector< World::Action::StatusModifier > m_modifiers;
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue