1
Fork 0
mirror of https://github.com/SapphireServer/Sapphire.git synced 2025-04-26 14:37:44 +00:00

There is now an applyStatusEffectSelf for status effects which same source and target.

This commit is contained in:
Mordred 2023-03-13 11:21:42 +01:00
parent b98f63eb75
commit 09db0ee7d2
7 changed files with 27 additions and 4 deletions

View file

@ -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 );
}
};

View file

@ -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 );
}
//////////////////////////////////////////////////////////////////////

View file

@ -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 );

View file

@ -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;

View file

@ -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 );

View file

@ -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 );

View file

@ -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();