1
Fork 0
mirror of https://github.com/SapphireServer/Sapphire.git synced 2025-05-21 17:47:45 +00:00

bool canApplyMultipleTimes

This commit is contained in:
Kooper16 2023-07-21 20:59:06 +02:00
parent 9b3e793a5c
commit d1c7b97d9e
9 changed files with 30 additions and 11 deletions

View file

@ -42,6 +42,7 @@ struct StatusEntry
uint16_t id;
int32_t duration;
uint32_t flag;
bool canApplyMultipleTimes;
std::vector< StatusModifier > modifiers;
};

View file

@ -630,7 +630,7 @@ void Action::Action::handleStatusEffects()
{
for( auto& status : m_lutEntry.statuses.target )
{
getActionResultBuilder()->applyStatusEffect( actor, status.id, status.duration, 0, status.modifiers, status.flag, true );
getActionResultBuilder()->applyStatusEffect( actor, status.id, status.duration, 0, status.modifiers, status.flag, status.canApplyMultipleTimes, true );
}
if( actor->getStatusEffectMap().size() > 0 )

View file

@ -19,6 +19,7 @@ namespace Sapphire::World::Action
uint16_t id;
int32_t duration;
uint32_t flag;
bool canApplyMultipleTimes;
std::vector< StatusModifier > modifiers;
};

View file

@ -83,14 +83,14 @@ void ActionResult::applyStatusEffect( uint32_t id, int32_t duration, Entity::Cha
}
void ActionResult::applyStatusEffect( uint32_t id, int32_t duration, Entity::Chara& source, uint8_t param,
std::vector< StatusModifier > modifiers, uint32_t flag, bool shouldOverride )
std::vector< StatusModifier > modifiers, uint32_t flag, bool canApplyMultipleTimes, bool shouldOverride )
{
m_result.Value = static_cast< int16_t >( id );
m_result.Arg2 = param;
m_result.Type = Common::ActionEffectType::CALC_RESULT_TYPE_SET_STATUS;
m_bOverrideStatus = shouldOverride;
m_pStatus = Sapphire::StatusEffect::make_StatusEffect( id, source.getAsChara(), m_target, duration, modifiers, flag, 3000 );
m_pStatus = Sapphire::StatusEffect::make_StatusEffect( id, source.getAsChara(), m_target, duration, modifiers, flag, 3000, canApplyMultipleTimes );
m_pStatus->setParam( param );
}
@ -115,7 +115,7 @@ void ActionResult::applyStatusEffectSelf( uint32_t id, int32_t duration, uint8_t
m_result.Flag = static_cast< uint8_t >( Common::ActionResultFlag::EffectOnSource );
m_bOverrideStatus = shouldOverride;
m_pStatus = Sapphire::StatusEffect::make_StatusEffect( id, m_target, m_target, duration, modifiers, flag, 3000 );
m_pStatus = Sapphire::StatusEffect::make_StatusEffect( id, m_target, m_target, duration, modifiers, flag, 3000, false );
m_pStatus->setParam( param );
}

View file

@ -22,7 +22,7 @@ namespace Sapphire::World::Action
void comboSucceed();
void applyStatusEffect( uint32_t id, int32_t duration, Entity::Chara& source, uint8_t param, bool shouldOverride );
void applyStatusEffect( uint32_t id, int32_t duration, Entity::Chara& source, uint8_t param,
std::vector< World::Action::StatusModifier > modifiers, uint32_t flag, bool shouldOverride );
std::vector< World::Action::StatusModifier > modifiers, uint32_t flag, bool canApplyMultipleTimes, bool shouldOverride );
void applyStatusEffectSelf( uint32_t id, int32_t duration, uint8_t param, bool shouldOverride );
void applyStatusEffectSelf( uint32_t id, int32_t duration, uint8_t param, std::vector< World::Action::StatusModifier > modifiers,
uint32_t flag, bool shouldOverride );

View file

@ -89,10 +89,10 @@ void ActionResultBuilder::applyStatusEffect( Entity::CharaPtr& target, uint16_t
}
void ActionResultBuilder::applyStatusEffect( Entity::CharaPtr& target, uint16_t statusId, uint32_t duration, uint8_t param,
std::vector< World::Action::StatusModifier > modifiers, uint32_t flag, bool shouldOverride )
std::vector< World::Action::StatusModifier > modifiers, uint32_t flag, bool canApplyMultipleTimes, bool shouldOverride )
{
ActionResultPtr nextResult = make_ActionResult( target, 0 );
nextResult->applyStatusEffect( statusId, duration, *m_sourceChara, param, modifiers, flag, shouldOverride );
nextResult->applyStatusEffect( statusId, duration, *m_sourceChara, param, modifiers, flag, canApplyMultipleTimes, shouldOverride );
addResultToActor( target, nextResult );
}

View file

@ -28,7 +28,7 @@ namespace Sapphire::World::Action
void applyStatusEffect( Entity::CharaPtr& target, uint16_t statusId, uint32_t duration, uint8_t param, bool shouldOverride = false );
void applyStatusEffect( Entity::CharaPtr& target, uint16_t statusId, uint32_t duration, uint8_t param,
std::vector< World::Action::StatusModifier > modifiers, uint32_t flag = 0, bool shouldOverride = false );
std::vector< World::Action::StatusModifier > modifiers, uint32_t flag = 0, bool canApplyMultipleTimes = false, bool shouldOverride = false );
void applyStatusEffectSelf( uint16_t statusId, uint32_t duration, uint8_t param, bool shouldOverride = false );
void applyStatusEffectSelf( uint16_t statusId, uint32_t duration, uint8_t param, std::vector< World::Action::StatusModifier > modifiers,
uint32_t flag = 0, bool shouldOverride = false );

View file

@ -23,11 +23,12 @@ using namespace Sapphire::Network::Packets;
Sapphire::StatusEffect::StatusEffect::StatusEffect( uint32_t id, Entity::CharaPtr sourceActor, Entity::CharaPtr targetActor,
uint32_t duration,std::vector< World::Action::StatusModifier >& modifiers,
uint32_t flag, uint32_t tickRate ) :
uint32_t flag, uint32_t tickRate, bool canApplyMultipleTimes ) :
StatusEffect( id, sourceActor, targetActor, duration, tickRate )
{
m_statusModifiers = std::move( modifiers );
m_flag = flag;
m_canApplyMultipleTimes = canApplyMultipleTimes;
}
Sapphire::StatusEffect::StatusEffect::StatusEffect( uint32_t id, Entity::CharaPtr sourceActor, Entity::CharaPtr targetActor,
@ -40,7 +41,8 @@ Sapphire::StatusEffect::StatusEffect::StatusEffect( uint32_t id, Entity::CharaPt
m_startTime( 0 ),
m_tickRate( tickRate ),
m_lastTick( 0 ),
m_flag( 0 )
m_flag( 0 ),
m_canApplyMultipleTimes( false )
{
auto& exdData = Common::Service< Data::ExdData >::ref();
auto entry = exdData.getRow< Excel::Status >( id );
@ -196,6 +198,11 @@ uint32_t Sapphire::StatusEffect::StatusEffect::getFlag() const
return m_flag;
}
bool Sapphire::StatusEffect::StatusEffect::getCanApplyMultipleTimes() const
{
return m_canApplyMultipleTimes;
}
std::vector< World::Action::StatusModifier > Sapphire::StatusEffect::StatusEffect::getStatusModifiers() const
{
return m_statusModifiers;
@ -206,6 +213,11 @@ void Sapphire::StatusEffect::StatusEffect::setFlag( uint32_t flag )
m_flag = flag;
}
void Sapphire::StatusEffect::StatusEffect::setCanApplyMultipleTimes( bool canApplyMultipleTimes )
{
m_canApplyMultipleTimes = canApplyMultipleTimes;
}
void Sapphire::StatusEffect::StatusEffect::setLastTick( uint64_t lastTick )
{
m_lastTick = lastTick;

View file

@ -12,7 +12,7 @@ class StatusEffect
{
public:
StatusEffect( uint32_t id, Entity::CharaPtr sourceActor, Entity::CharaPtr targetActor,
uint32_t duration, std::vector< World::Action::StatusModifier >& modifiers, uint32_t flag, uint32_t tickRate );
uint32_t duration, std::vector< World::Action::StatusModifier >& modifiers, uint32_t flag, uint32_t tickRate, bool canApplyMultipleTimes );
StatusEffect( uint32_t id, Entity::CharaPtr sourceActor, Entity::CharaPtr targetActor,
uint32_t duration, uint32_t tickRate );
@ -50,6 +50,8 @@ public:
uint32_t getFlag() const;
bool getCanApplyMultipleTimes() const;
std::vector< World::Action::StatusModifier > getStatusModifiers() const;
void setLastTick( uint64_t lastTick );
@ -58,6 +60,8 @@ public:
void setFlag( uint32_t flag );
void setCanApplyMultipleTimes( bool canApplyMultipleTimes );
void registerTickEffect( Common::ParamModifier type, uint32_t param );
std::pair< Common::ParamModifier, uint32_t > getTickEffect();
@ -82,6 +86,7 @@ private:
std::vector< World::Action::StatusModifier > m_statusModifiers;
std::unordered_map< Common::ParamModifier, int32_t > m_modifiers;
uint8_t m_slot;
bool m_canApplyMultipleTimes;
};