diff --git a/src/scripts/action/common/ActionSprint3.cpp b/src/scripts/action/common/ActionSprint3.cpp index 2f8d9942..929487f9 100644 --- a/src/scripts/action/common/ActionSprint3.cpp +++ b/src/scripts/action/common/ActionSprint3.cpp @@ -17,7 +17,7 @@ public: return; uint32_t duration = ( sourceChara->getAsPlayer()->getTp() / 50 ) * 1000; - action.getActionResultBuilder()->applyStatusEffect( sourceChara, 50, duration, 30, false ); + action.getActionResultBuilder()->applyStatusEffectSelf( 50, duration, 30, false ); sourceChara->getAsPlayer()->setTp( 0 ); } }; diff --git a/src/scripts/quest/festivalquest/FesEst101.cpp b/src/scripts/quest/festivalquest/FesEst101.cpp index c7c32883..32b88a78 100644 --- a/src/scripts/quest/festivalquest/FesEst101.cpp +++ b/src/scripts/quest/festivalquest/FesEst101.cpp @@ -295,7 +295,7 @@ private: void Scene00010Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) { - player.addStatusEffectById( Status0, 0, player, Transformation0 ); + // player.addStatusEffectById( Status0, 0, player, Transformation0 ); } ////////////////////////////////////////////////////////////////////// diff --git a/src/world/Action/ActionResult.cpp b/src/world/Action/ActionResult.cpp index 21aae445..37276f8f 100644 --- a/src/world/Action/ActionResult.cpp +++ b/src/world/Action/ActionResult.cpp @@ -82,6 +82,17 @@ void ActionResult::applyStatusEffect( uint32_t id, int32_t duration, Entity::Cha m_pStatus->setParam( param ); } +void ActionResult::applyStatusEffectSelf( uint32_t id, int32_t duration, uint8_t param, bool shouldOverride ) +{ + m_result.Value = static_cast< int16_t >( id ); + m_result.Arg2 = param; + m_result.Type = Common::ActionEffectType::CALC_RESULT_TYPE_SET_STATUS_ME; + + m_bOverrideStatus = shouldOverride; + m_pStatus = StatusEffect::make_StatusEffect( id, m_target, m_target, duration, 3000 ); + m_pStatus->setParam( param ); +} + void ActionResult::mount( uint16_t mountId ) { m_result.Value = static_cast< int16_t >( mountId ); @@ -125,6 +136,7 @@ void ActionResult::execute() } case Common::ActionEffectType::CALC_RESULT_TYPE_SET_STATUS: + case Common::ActionEffectType::CALC_RESULT_TYPE_SET_STATUS_ME: { if( !m_bOverrideStatus ) m_target->addStatusEffectByIdIfNotExist( m_pStatus ); diff --git a/src/world/Action/ActionResult.h b/src/world/Action/ActionResult.h index 933db5fa..a2fbbf85 100644 --- a/src/world/Action/ActionResult.h +++ b/src/world/Action/ActionResult.h @@ -20,6 +20,7 @@ namespace Sapphire::World::Action void startCombo( uint16_t actionId ); void comboSucceed(); void applyStatusEffect( uint32_t id, int32_t duration, Entity::Chara& source, uint8_t param, bool shouldOverride ); + void applyStatusEffectSelf( uint32_t id, int32_t duration, uint8_t param, bool shouldOverride ); void mount( uint16_t mountId ); Entity::CharaPtr getTarget() const; diff --git a/src/world/Action/ActionResultBuilder.cpp b/src/world/Action/ActionResultBuilder.cpp index 3c65fb23..87c83926 100644 --- a/src/world/Action/ActionResultBuilder.cpp +++ b/src/world/Action/ActionResultBuilder.cpp @@ -88,6 +88,14 @@ void ActionResultBuilder::applyStatusEffect( Entity::CharaPtr& target, uint16_t addResultToActor( target, nextResult ); } +void ActionResultBuilder::applyStatusEffectSelf( uint16_t statusId, uint32_t duration, uint8_t param, bool shouldOverride ) +{ + ActionResultPtr nextResult = make_ActionResult( m_sourceChara, 0 ); + nextResult->applyStatusEffectSelf( statusId, duration, param, shouldOverride ); + addResultToActor( m_sourceChara, nextResult ); +} + + void ActionResultBuilder::mount( Entity::CharaPtr& target, uint16_t mountId ) { ActionResultPtr nextResult = make_ActionResult( target, 0 ); @@ -166,7 +174,7 @@ std::shared_ptr< FFXIVPacketBase > ActionResultBuilder::createActionResultPacket for( auto& result : actorResultList ) { auto effect = result->getCalcResultParam(); - if( result->getTarget() == m_sourceChara ) + if( result->getTarget() == m_sourceChara && result->getCalcResultParam().Type != Common::ActionEffectType::CALC_RESULT_TYPE_SET_STATUS_ME ) actionResult->addSourceEffect( effect ); else actionResult->addTargetEffect( effect ); diff --git a/src/world/Action/ActionResultBuilder.h b/src/world/Action/ActionResultBuilder.h index aca5b967..19e00ae2 100644 --- a/src/world/Action/ActionResultBuilder.h +++ b/src/world/Action/ActionResultBuilder.h @@ -26,6 +26,7 @@ namespace Sapphire::World::Action void comboSucceed( Entity::CharaPtr& target ); void applyStatusEffect( Entity::CharaPtr& target, uint16_t statusId, uint32_t duration, uint8_t param, bool shouldOverride ); + void applyStatusEffectSelf( uint16_t statusId, uint32_t duration, uint8_t param, bool shouldOverride ); void mount( Entity::CharaPtr& target, uint16_t mountId ); diff --git a/src/world/Task/ActionIntegrityTask.cpp b/src/world/Task/ActionIntegrityTask.cpp index 10406e5e..7443a839 100644 --- a/src/world/Task/ActionIntegrityTask.cpp +++ b/src/world/Task/ActionIntegrityTask.cpp @@ -52,7 +52,8 @@ void ActionIntegrityTask::execute() if( actionResult && actionResult->getTarget() ) actionResult->execute(); - if( actionResult->getCalcResultParam().Type == Common::CALC_RESULT_TYPE_SET_STATUS ) + if( ( actionResult->getCalcResultParam().Type == Common::CALC_RESULT_TYPE_SET_STATUS ) || + ( actionResult->getCalcResultParam().Type == Common::CALC_RESULT_TYPE_SET_STATUS_ME ) ) { auto& status = data.Status[ statusIdx++ ]; auto pEffect = actionResult->getStatusEffect();