From ff0a1c8be0dd0c408d949bd05c2f8baeb126f950 Mon Sep 17 00:00:00 2001 From: Lucy <44952533+Skyliegirl33@users.noreply.github.com> Date: Thu, 9 Mar 2023 00:25:18 +0100 Subject: [PATCH] Apply modifiers in applyStatus --- src/world/Actor/Chara.cpp | 2 +- src/world/StatusEffect/StatusEffect.cpp | 25 +++++++++++-------------- src/world/StatusEffect/StatusEffect.h | 1 + 3 files changed, 13 insertions(+), 15 deletions(-) diff --git a/src/world/Actor/Chara.cpp b/src/world/Actor/Chara.cpp index 16d611b2..49f83f3d 100644 --- a/src/world/Actor/Chara.cpp +++ b/src/world/Actor/Chara.cpp @@ -507,8 +507,8 @@ void Sapphire::Entity::Chara::addStatusEffect( StatusEffect::StatusEffectPtr pEf if( nextSlot == -1 ) return; - pEffect->applyStatus(); m_statusEffectMap[ nextSlot ] = pEffect; + pEffect->applyStatus(); auto statusEffectAdd = makeZonePacket< FFXIVIpcActionIntegrity >( getId() ); diff --git a/src/world/StatusEffect/StatusEffect.cpp b/src/world/StatusEffect/StatusEffect.cpp index f0598fb4..56d47746 100644 --- a/src/world/StatusEffect/StatusEffect.cpp +++ b/src/world/StatusEffect/StatusEffect.cpp @@ -25,7 +25,7 @@ Sapphire::StatusEffect::StatusEffect::StatusEffect( uint32_t id, Entity::CharaPt uint32_t duration, std::vector< World::Action::StatusModifier >& modifiers, uint32_t tickRate ) : StatusEffect( id, sourceActor, targetActor, duration, tickRate ) { - setModifiers( modifiers ); + m_statusModifiers = std::move( modifiers ); } Sapphire::StatusEffect::StatusEffect::StatusEffect( uint32_t id, Entity::CharaPtr sourceActor, Entity::CharaPtr targetActor, @@ -97,19 +97,6 @@ std::unordered_map< Common::ParamModifier, int32_t >& Sapphire::StatusEffect::St return m_modifiers; } -void Sapphire::StatusEffect::StatusEffect::setModifiers( std::vector< World::Action::StatusModifier > modifiers ) -{ - for( const auto& mod : modifiers ) - { - if( mod.modifier != Common::ParamModifier::TickDamage && mod.modifier != Common::ParamModifier::TickHeal ) - setModifier( mod.modifier, mod.value ); - else if( mod.modifier == Common::ParamModifier::TickDamage ) - registerTickEffect( mod.modifier, mod.value ); - else if( mod.modifier == Common::ParamModifier::TickHeal ) - registerTickEffect( mod.modifier, mod.value ); - } -} - void Sapphire::StatusEffect::StatusEffect::setModifier( Common::ParamModifier paramModifier, int32_t value ) { m_modifiers[ paramModifier ] = value; @@ -136,6 +123,16 @@ void Sapphire::StatusEffect::StatusEffect::applyStatus() m_startTime = Util::getTimeMs(); auto& scriptMgr = Common::Service< Scripting::ScriptMgr >::ref(); + for( const auto& mod : m_statusModifiers ) + { + if( mod.modifier != Common::ParamModifier::TickDamage && mod.modifier != Common::ParamModifier::TickHeal ) + setModifier( mod.modifier, mod.value ); + else if( mod.modifier == Common::ParamModifier::TickDamage ) + registerTickEffect( mod.modifier, mod.value ); + else if( mod.modifier == Common::ParamModifier::TickHeal ) + registerTickEffect( mod.modifier, mod.value ); + } + m_targetActor->calculateStats(); // this is only right when an action is being used by the player diff --git a/src/world/StatusEffect/StatusEffect.h b/src/world/StatusEffect/StatusEffect.h index 80680efd..4a4015dc 100644 --- a/src/world/StatusEffect/StatusEffect.h +++ b/src/world/StatusEffect/StatusEffect.h @@ -70,6 +70,7 @@ private: uint16_t m_param; std::string m_name; std::pair< Common::ParamModifier, uint32_t > m_currTickEffect; + std::vector< World::Action::StatusModifier > m_statusModifiers; std::unordered_map< Common::ParamModifier, int32_t > m_modifiers; };