1
Fork 0
mirror of https://github.com/SapphireServer/Sapphire.git synced 2025-05-23 10:17:44 +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; uint16_t id;
int32_t duration; int32_t duration;
uint32_t flag; uint32_t flag;
bool canApplyMultipleTimes;
std::vector< StatusModifier > modifiers; std::vector< StatusModifier > modifiers;
}; };

View file

@ -630,7 +630,7 @@ void Action::Action::handleStatusEffects()
{ {
for( auto& status : m_lutEntry.statuses.target ) 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 ) if( actor->getStatusEffectMap().size() > 0 )

View file

@ -19,6 +19,7 @@ namespace Sapphire::World::Action
uint16_t id; uint16_t id;
int32_t duration; int32_t duration;
uint32_t flag; uint32_t flag;
bool canApplyMultipleTimes;
std::vector< StatusModifier > modifiers; 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, 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.Value = static_cast< int16_t >( id );
m_result.Arg2 = param; m_result.Arg2 = param;
m_result.Type = Common::ActionEffectType::CALC_RESULT_TYPE_SET_STATUS; m_result.Type = Common::ActionEffectType::CALC_RESULT_TYPE_SET_STATUS;
m_bOverrideStatus = shouldOverride; 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 ); 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_result.Flag = static_cast< uint8_t >( Common::ActionResultFlag::EffectOnSource );
m_bOverrideStatus = shouldOverride; 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 ); m_pStatus->setParam( param );
} }

View file

@ -22,7 +22,7 @@ namespace Sapphire::World::Action
void comboSucceed(); 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, bool shouldOverride );
void applyStatusEffect( uint32_t id, int32_t duration, Entity::Chara& source, uint8_t param, 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, bool shouldOverride );
void applyStatusEffectSelf( uint32_t id, int32_t duration, uint8_t param, std::vector< World::Action::StatusModifier > modifiers, void applyStatusEffectSelf( uint32_t id, int32_t duration, uint8_t param, std::vector< World::Action::StatusModifier > modifiers,
uint32_t flag, bool shouldOverride ); 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, 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 ); 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 ); 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, bool shouldOverride = false );
void applyStatusEffect( Entity::CharaPtr& target, uint16_t statusId, uint32_t duration, uint8_t param, 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, bool shouldOverride = false );
void applyStatusEffectSelf( uint16_t statusId, uint32_t duration, uint8_t param, std::vector< World::Action::StatusModifier > modifiers, void applyStatusEffectSelf( uint16_t statusId, uint32_t duration, uint8_t param, std::vector< World::Action::StatusModifier > modifiers,
uint32_t flag = 0, bool shouldOverride = false ); 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, Sapphire::StatusEffect::StatusEffect::StatusEffect( uint32_t id, Entity::CharaPtr sourceActor, Entity::CharaPtr targetActor,
uint32_t duration,std::vector< World::Action::StatusModifier >& modifiers, 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 ) StatusEffect( id, sourceActor, targetActor, duration, tickRate )
{ {
m_statusModifiers = std::move( modifiers ); m_statusModifiers = std::move( modifiers );
m_flag = flag; m_flag = flag;
m_canApplyMultipleTimes = canApplyMultipleTimes;
} }
Sapphire::StatusEffect::StatusEffect::StatusEffect( uint32_t id, Entity::CharaPtr sourceActor, Entity::CharaPtr targetActor, 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_startTime( 0 ),
m_tickRate( tickRate ), m_tickRate( tickRate ),
m_lastTick( 0 ), m_lastTick( 0 ),
m_flag( 0 ) m_flag( 0 ),
m_canApplyMultipleTimes( false )
{ {
auto& exdData = Common::Service< Data::ExdData >::ref(); auto& exdData = Common::Service< Data::ExdData >::ref();
auto entry = exdData.getRow< Excel::Status >( id ); auto entry = exdData.getRow< Excel::Status >( id );
@ -196,6 +198,11 @@ uint32_t Sapphire::StatusEffect::StatusEffect::getFlag() const
return m_flag; return m_flag;
} }
bool Sapphire::StatusEffect::StatusEffect::getCanApplyMultipleTimes() const
{
return m_canApplyMultipleTimes;
}
std::vector< World::Action::StatusModifier > Sapphire::StatusEffect::StatusEffect::getStatusModifiers() const std::vector< World::Action::StatusModifier > Sapphire::StatusEffect::StatusEffect::getStatusModifiers() const
{ {
return m_statusModifiers; return m_statusModifiers;
@ -206,6 +213,11 @@ void Sapphire::StatusEffect::StatusEffect::setFlag( uint32_t flag )
m_flag = flag; m_flag = flag;
} }
void Sapphire::StatusEffect::StatusEffect::setCanApplyMultipleTimes( bool canApplyMultipleTimes )
{
m_canApplyMultipleTimes = canApplyMultipleTimes;
}
void Sapphire::StatusEffect::StatusEffect::setLastTick( uint64_t lastTick ) void Sapphire::StatusEffect::StatusEffect::setLastTick( uint64_t lastTick )
{ {
m_lastTick = lastTick; m_lastTick = lastTick;

View file

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