diff --git a/src/world/Action/ActionResult.cpp b/src/world/Action/ActionResult.cpp index 996b5945..1417a074 100644 --- a/src/world/Action/ActionResult.cpp +++ b/src/world/Action/ActionResult.cpp @@ -144,11 +144,9 @@ void ActionResult::execute() case Common::ActionEffectType::CALC_RESULT_TYPE_SET_STATUS_ME: { if( !m_bOverrideStatus ) - m_target->addStatusEffectByIdIfNotExist( m_pStatus->getId(), m_pStatus->getDuration(), *m_pStatus->getSrcActor(), - m_pStatus->getStatusModifiers(), m_pStatus->getFlag(), m_pStatus->getParam() ); + m_target->addStatusEffectByIdIfNotExist( m_pStatus ); else - m_target->addStatusEffectById( m_pStatus->getId(), m_pStatus->getDuration(), *m_pStatus->getSrcActor(), - m_pStatus->getStatusModifiers(), m_pStatus->getFlag(), m_pStatus->getParam() ); + m_target->addStatusEffectById( m_pStatus ); break; } diff --git a/src/world/Actor/Chara.cpp b/src/world/Actor/Chara.cpp index b2d9f0a9..07194934 100644 --- a/src/world/Actor/Chara.cpp +++ b/src/world/Actor/Chara.cpp @@ -503,41 +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 ); -} - -void Chara::addStatusEffectById( uint32_t id, int32_t duration, Entity::Chara& source, - std::vector< World::Action::StatusModifier > modifiers, uint32_t flag, uint16_t param ) -{ - auto effect = StatusEffect::make_StatusEffect( id, source.getAsChara(), getAsChara(), duration, modifiers, flag, 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 ); -} - -void Sapphire::Entity::Chara::addStatusEffectByIdIfNotExist( uint32_t id, int32_t duration, Entity::Chara& source, - std::vector< World::Action::StatusModifier > modifiers, uint32_t flag, uint16_t param ) -{ - if( hasStatusEffect( id ) ) - return; - - auto effect = StatusEffect::make_StatusEffect( id, source.getAsChara(), getAsChara(), duration, modifiers, flag, 3000 ); - effect->setParam( param ); - addStatusEffect( effect ); + addStatusEffect( pStatus ); } int8_t Chara::getStatusEffectFreeSlot() diff --git a/src/world/Actor/Chara.h b/src/world/Actor/Chara.h index c8cbd3a6..722f4af3 100644 --- a/src/world/Actor/Chara.h +++ b/src/world/Actor/Chara.h @@ -140,13 +140,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( uint32_t id, int32_t duration, Entity::Chara& source, - std::vector< World::Action::StatusModifier > modifiers, uint32_t flag, 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( uint32_t id, int32_t duration, Entity::Chara& source, - std::vector< World::Action::StatusModifier > modifiers, uint32_t flag, 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 ) )