From 0edff5ab85e3ddea53cea0b4e29c6227b2e04a23 Mon Sep 17 00:00:00 2001 From: Mordred Date: Sun, 12 Mar 2023 21:06:37 +0100 Subject: [PATCH] Statuseffect fix #2 --- src/world/Action/ActionResult.cpp | 4 ++-- src/world/Actor/Chara.cpp | 14 +++++--------- src/world/Actor/Chara.h | 4 ++-- src/world/Math/CalcStats.cpp | 5 ++++- 4 files changed, 13 insertions(+), 14 deletions(-) diff --git a/src/world/Action/ActionResult.cpp b/src/world/Action/ActionResult.cpp index 588d77ab..21aae445 100644 --- a/src/world/Action/ActionResult.cpp +++ b/src/world/Action/ActionResult.cpp @@ -127,9 +127,9 @@ void ActionResult::execute() case Common::ActionEffectType::CALC_RESULT_TYPE_SET_STATUS: { if( !m_bOverrideStatus ) - m_target->addStatusEffectByIdIfNotExist( m_pStatus->getId(), m_pStatus->getDuration(), *m_pStatus->getSrcActor(), m_pStatus->getParam() ); + m_target->addStatusEffectByIdIfNotExist( m_pStatus ); else - m_target->addStatusEffectById( m_pStatus->getId(), m_pStatus->getDuration(), *m_pStatus->getSrcActor(), m_pStatus->getParam() ); + m_target->addStatusEffectById( m_pStatus ); break; } diff --git a/src/world/Actor/Chara.cpp b/src/world/Actor/Chara.cpp index 80922377..58fefc9e 100644 --- a/src/world/Actor/Chara.cpp +++ b/src/world/Actor/Chara.cpp @@ -503,22 +503,18 @@ void Chara::addStatusEffect( StatusEffect::StatusEffectPtr pEffect ) } /*! \param StatusEffectPtr to be applied to the actor */ -void Chara::addStatusEffectById( uint32_t id, int32_t duration, Entity::Chara& source, uint16_t param ) +void Chara::addStatusEffectById( StatusEffect::StatusEffectPtr pStatus ) { - auto effect = StatusEffect::make_StatusEffect( id, source.getAsChara(), getAsChara(), duration, 3000 ); - effect->setParam( param ); - addStatusEffect( effect ); + addStatusEffect( pStatus ); } /*! \param StatusEffectPtr to be applied to the actor */ -void Chara::addStatusEffectByIdIfNotExist( uint32_t id, int32_t duration, Entity::Chara& source, uint16_t param ) +void Chara::addStatusEffectByIdIfNotExist( StatusEffect::StatusEffectPtr pStatus ) { - if( hasStatusEffect( id ) ) + if( hasStatusEffect( pStatus->getId() ) ) return; - auto effect = StatusEffect::make_StatusEffect( id, source.getAsChara(), getAsChara(), duration, 3000 ); - effect->setParam( param ); - addStatusEffect( effect ); + addStatusEffect( pStatus ); } diff --git a/src/world/Actor/Chara.h b/src/world/Actor/Chara.h index 179d65c3..918f66f3 100644 --- a/src/world/Actor/Chara.h +++ b/src/world/Actor/Chara.h @@ -132,10 +132,10 @@ namespace Sapphire::Entity const uint32_t* getModelArray() const; // add a status effect by id - void addStatusEffectById( uint32_t id, int32_t duration, Entity::Chara& source, uint16_t param = 0 ); + void addStatusEffectById( StatusEffect::StatusEffectPtr pStatus ); // add a status effect by id if it doesn't exist - void addStatusEffectByIdIfNotExist( uint32_t id, int32_t duration, Entity::Chara& source, uint16_t param = 0 ); + void addStatusEffectByIdIfNotExist( StatusEffect::StatusEffectPtr pStatus ); // remove a status effect by id void removeSingleStatusEffectFromId( uint32_t id ); diff --git a/src/world/Math/CalcStats.cpp b/src/world/Math/CalcStats.cpp index b62070fb..af58dad1 100644 --- a/src/world/Math/CalcStats.cpp +++ b/src/world/Math/CalcStats.cpp @@ -663,7 +663,10 @@ std::pair< float, Sapphire::Common::ActionHitSeverityType > CalcStats::calcActio std::pair< float, Sapphire::Common::ActionHitSeverityType > CalcStats::calcActionHealing( const Sapphire::Entity::Chara& chara, uint32_t ptc, float wepDmg ) { // lol just for testing - auto factor = std::floor( ptc * ( wepDmg / 10.0f ) + ptc ); + float det = chara.getStatValue( Common::BaseParam::Determination ); + float mnd = chara.getStatValue( Common::BaseParam::Mind ); + + auto factor = std::floor( ( wepDmg * ( mnd / 200 ) + ( det / 10 ) ) * ( ptc / 100 ) * 1.3f ); Sapphire::Common::ActionHitSeverityType hitType = Sapphire::Common::ActionHitSeverityType::NormalHeal; if( criticalHitProbability( chara ) > range100( rng ) )