mirror of
https://github.com/SapphireServer/Sapphire.git
synced 2025-05-21 17:47:45 +00:00
bool canApplyMultipleTimes
This commit is contained in:
parent
9b3e793a5c
commit
d1c7b97d9e
9 changed files with 30 additions and 11 deletions
|
@ -42,6 +42,7 @@ struct StatusEntry
|
|||
uint16_t id;
|
||||
int32_t duration;
|
||||
uint32_t flag;
|
||||
bool canApplyMultipleTimes;
|
||||
std::vector< StatusModifier > modifiers;
|
||||
};
|
||||
|
||||
|
|
|
@ -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 )
|
||||
|
|
|
@ -19,6 +19,7 @@ namespace Sapphire::World::Action
|
|||
uint16_t id;
|
||||
int32_t duration;
|
||||
uint32_t flag;
|
||||
bool canApplyMultipleTimes;
|
||||
std::vector< StatusModifier > modifiers;
|
||||
};
|
||||
|
||||
|
|
|
@ -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 );
|
||||
}
|
||||
|
||||
|
|
|
@ -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 );
|
||||
|
|
|
@ -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 );
|
||||
}
|
||||
|
||||
|
|
|
@ -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 );
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
||||
};
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue