mirror of
https://github.com/SapphireServer/Sapphire.git
synced 2025-05-23 10:17:44 +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;
|
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;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -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 )
|
||||||
|
|
|
@ -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;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -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 );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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 );
|
||||||
|
|
|
@ -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 );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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 );
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue