1
Fork 0
mirror of https://github.com/SapphireServer/Sapphire.git synced 2025-07-11 14:57:46 +00:00

let caller decide effect delay time

This commit is contained in:
collett 2020-01-14 22:34:19 +09:00
parent 8c9228ff34
commit bb4aab0acc
3 changed files with 18 additions and 27 deletions

View file

@ -541,14 +541,14 @@ void Action::Action::buildEffects()
if( m_lutEntry.targetStatus != 0 ) if( m_lutEntry.targetStatus != 0 )
{ {
if( !isComboAction() || isCorrectCombo() ) if( !isComboAction() || isCorrectCombo() )
m_effectBuilder->applyStatusEffect( actor, m_pSource, m_lutEntry.targetStatus, m_lutEntry.targetStatusDuration, m_lutEntry.targetStatusParam ); m_effectBuilder->applyStatusEffect( actor, m_pSource, m_lutEntry.targetStatus, m_lutEntry.targetStatusDuration, m_lutEntry.targetStatusParam, 500 );
} }
} }
if( m_lutEntry.selfStatus != 0 ) if( m_lutEntry.selfStatus != 0 )
{ {
if( !isComboAction() || isCorrectCombo() ) if( !isComboAction() || isCorrectCombo() )
m_effectBuilder->applyStatusEffect( m_pSource, m_pSource, m_lutEntry.selfStatus, m_lutEntry.selfStatusDuration, m_lutEntry.selfStatusParam ); m_effectBuilder->applyStatusEffect( m_pSource, m_pSource, m_lutEntry.selfStatus, m_lutEntry.selfStatusDuration, m_lutEntry.selfStatusParam, 500 );
} }
m_effectBuilder->buildAndSendPackets( getAnimationLock() ); m_effectBuilder->buildAndSendPackets( getAnimationLock() );

View file

@ -24,13 +24,6 @@ EffectBuilder::EffectBuilder( Entity::CharaPtr source, uint32_t actionId, uint16
} }
uint64_t EffectBuilder::getResultDelayMs()
{
// todo: actually figure this retarded shit out
return Common::Util::getTimeMs() + 600;
}
void EffectBuilder::moveToResultList( Entity::CharaPtr& chara, EffectResultPtr result ) void EffectBuilder::moveToResultList( Entity::CharaPtr& chara, EffectResultPtr result )
{ {
auto it = m_resolvedEffects.find( chara->getId() ); auto it = m_resolvedEffects.find( chara->getId() );
@ -49,23 +42,23 @@ void EffectBuilder::moveToResultList( Entity::CharaPtr& chara, EffectResultPtr r
it->second->push_back( std::move( result ) ); it->second->push_back( std::move( result ) );
} }
void EffectBuilder::heal( Entity::CharaPtr& effectTarget, Entity::CharaPtr& healingTarget, uint32_t amount, Common::ActionHitSeverityType severity, Common::ActionEffectResultFlag flag ) void EffectBuilder::heal( Entity::CharaPtr& effectTarget, Entity::CharaPtr& healingTarget, uint32_t amount, Common::ActionHitSeverityType severity, Common::ActionEffectResultFlag flag, uint64_t resultDelayMs )
{ {
EffectResultPtr nextResult = make_EffectResult( healingTarget, nullptr, getResultDelayMs() ); EffectResultPtr nextResult = make_EffectResult( healingTarget, nullptr, Common::Util::getTimeMs() + resultDelayMs );
nextResult->heal( amount, severity, flag ); nextResult->heal( amount, severity, flag );
moveToResultList( effectTarget, nextResult ); moveToResultList( effectTarget, nextResult );
} }
void EffectBuilder::restoreMP( Entity::CharaPtr& target, Entity::CharaPtr& restoringTarget, uint32_t amount, Common::ActionEffectResultFlag flag ) void EffectBuilder::restoreMP( Entity::CharaPtr& target, Entity::CharaPtr& restoringTarget, uint32_t amount, Common::ActionEffectResultFlag flag, uint64_t resultDelayMs )
{ {
EffectResultPtr nextResult = make_EffectResult( restoringTarget, nullptr, getResultDelayMs() ); // restore mp source actor EffectResultPtr nextResult = make_EffectResult( restoringTarget, nullptr, Common::Util::getTimeMs() + resultDelayMs );
nextResult->restoreMP( amount, flag ); nextResult->restoreMP( amount, flag );
moveToResultList( target, nextResult ); moveToResultList( target, nextResult );
} }
void EffectBuilder::damage( Entity::CharaPtr& effectTarget, Entity::CharaPtr& damagingTarget, uint32_t amount, Common::ActionHitSeverityType severity, Common::ActionEffectResultFlag flag ) void EffectBuilder::damage( Entity::CharaPtr& effectTarget, Entity::CharaPtr& damagingTarget, uint32_t amount, Common::ActionHitSeverityType severity, Common::ActionEffectResultFlag flag, uint64_t resultDelayMs )
{ {
EffectResultPtr nextResult = make_EffectResult( damagingTarget, nullptr, getResultDelayMs() ); EffectResultPtr nextResult = make_EffectResult( damagingTarget, nullptr, Common::Util::getTimeMs() + resultDelayMs );
nextResult->damage( amount, severity, flag ); nextResult->damage( amount, severity, flag );
moveToResultList( effectTarget, nextResult ); moveToResultList( effectTarget, nextResult );
} }
@ -84,16 +77,16 @@ void EffectBuilder::comboSucceed( Entity::CharaPtr& target )
moveToResultList( target, nextResult ); moveToResultList( target, nextResult );
} }
void EffectBuilder::applyStatusEffect( Entity::CharaPtr& target, Entity::CharaPtr& source, uint16_t statusId, uint32_t duration, uint8_t param ) void EffectBuilder::applyStatusEffect( Entity::CharaPtr& target, Entity::CharaPtr& source, uint16_t statusId, uint32_t duration, uint8_t param, uint64_t resultDelayMs )
{ {
EffectResultPtr nextResult = make_EffectResult( target, source, getResultDelayMs() ); EffectResultPtr nextResult = make_EffectResult( target, source, Common::Util::getTimeMs() + resultDelayMs );
nextResult->applyStatusEffect( statusId, duration, param ); nextResult->applyStatusEffect( statusId, duration, param );
moveToResultList( target, nextResult ); moveToResultList( target, nextResult );
} }
void EffectBuilder::applyStatusEffect( Entity::CharaPtr& target, Entity::CharaPtr& source, StatusEffect::StatusEffectPtr pStatusEffect ) void EffectBuilder::applyStatusEffect( Entity::CharaPtr& target, Entity::CharaPtr& source, StatusEffect::StatusEffectPtr pStatusEffect, uint64_t resultDelayMs )
{ {
EffectResultPtr nextResult = make_EffectResult( target, source, getResultDelayMs() ); EffectResultPtr nextResult = make_EffectResult( target, source, Common::Util::getTimeMs() + resultDelayMs );
nextResult->applyStatusEffect( pStatusEffect ); nextResult->applyStatusEffect( pStatusEffect );
moveToResultList( target, nextResult ); moveToResultList( target, nextResult );
} }

View file

@ -13,21 +13,21 @@ namespace Sapphire::World::Action
void heal( Entity::CharaPtr& effectTarget, Entity::CharaPtr& healingTarget, uint32_t amount, void heal( Entity::CharaPtr& effectTarget, Entity::CharaPtr& healingTarget, uint32_t amount,
Common::ActionHitSeverityType severity = Common::ActionHitSeverityType::NormalHeal, Common::ActionHitSeverityType severity = Common::ActionHitSeverityType::NormalHeal,
Common::ActionEffectResultFlag flag = Common::ActionEffectResultFlag::None); Common::ActionEffectResultFlag flag = Common::ActionEffectResultFlag::None, uint64_t resultDelayMs = 600 );
void restoreMP( Entity::CharaPtr& effectTarget, Entity::CharaPtr& restoringTarget, uint32_t amount, void restoreMP( Entity::CharaPtr& effectTarget, Entity::CharaPtr& restoringTarget, uint32_t amount,
Common::ActionEffectResultFlag flag = Common::ActionEffectResultFlag::None); Common::ActionEffectResultFlag flag = Common::ActionEffectResultFlag::None, uint64_t resultDelayMs = 600 );
void damage( Entity::CharaPtr& effectTarget, Entity::CharaPtr& damagingTarget, uint32_t amount, void damage( Entity::CharaPtr& effectTarget, Entity::CharaPtr& damagingTarget, uint32_t amount,
Common::ActionHitSeverityType severity = Common::ActionHitSeverityType::NormalDamage, Common::ActionHitSeverityType severity = Common::ActionHitSeverityType::NormalDamage,
Common::ActionEffectResultFlag flag = Common::ActionEffectResultFlag::None); Common::ActionEffectResultFlag flag = Common::ActionEffectResultFlag::None, uint64_t resultDelayMs = 600 );
void startCombo( Entity::CharaPtr& target, uint16_t actionId ); void startCombo( Entity::CharaPtr& target, uint16_t actionId );
void comboSucceed( Entity::CharaPtr& target ); void comboSucceed( Entity::CharaPtr& target );
void applyStatusEffect( Entity::CharaPtr& target, Entity::CharaPtr& source, uint16_t statusId, uint32_t duration, uint8_t param ); void applyStatusEffect( Entity::CharaPtr& target, Entity::CharaPtr& source, uint16_t statusId, uint32_t duration, uint8_t param, uint64_t resultDelayMs = 600 );
void applyStatusEffect( Entity::CharaPtr& target, Entity::CharaPtr& source, StatusEffect::StatusEffectPtr pStatusEffect ); void applyStatusEffect( Entity::CharaPtr& target, Entity::CharaPtr& source, StatusEffect::StatusEffectPtr pStatusEffect, uint64_t resultDelayMs = 600 );
void statusNoEffect( Entity::CharaPtr& target, uint16_t statusId ); void statusNoEffect( Entity::CharaPtr& target, uint16_t statusId );
@ -36,8 +36,6 @@ namespace Sapphire::World::Action
private: private:
void moveToResultList( Entity::CharaPtr& chara, EffectResultPtr result ); void moveToResultList( Entity::CharaPtr& chara, EffectResultPtr result );
uint64_t getResultDelayMs();
std::shared_ptr< Sapphire::Network::Packets::FFXIVPacketBase > buildNextEffectPacket( uint32_t globalSequence, float animationLock ); std::shared_ptr< Sapphire::Network::Packets::FFXIVPacketBase > buildNextEffectPacket( uint32_t globalSequence, float animationLock );
private: private: