mirror of
https://github.com/SapphireServer/Sapphire.git
synced 2025-05-28 20:27:46 +00:00
fix code following some commented things from old pr that are obvious better
This commit is contained in:
parent
39447bd39b
commit
3b3398e3e0
6 changed files with 41 additions and 22 deletions
|
@ -146,6 +146,8 @@ bool Action::Action::init()
|
||||||
|
|
||||||
addDefaultActorFilters();
|
addDefaultActorFilters();
|
||||||
|
|
||||||
|
m_effectBuilder->setAnimationLock( getAnimationLock() );
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -295,11 +297,13 @@ void Action::Action::start()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if( player )
|
||||||
|
{
|
||||||
// todo: m_recastTimeMs needs to be adjusted for player sks/sps
|
// todo: m_recastTimeMs needs to be adjusted for player sks/sps
|
||||||
auto actionStartPkt = makeActorControlSelf( m_pSource->getId(), ActorControlType::ActionStart, 1, getId(),
|
auto actionStartPkt = makeActorControlSelf( m_pSource->getId(), ActorControlType::ActionStart, 1, getId(),
|
||||||
m_recastTimeMs / 10 );
|
m_recastTimeMs / 10 );
|
||||||
if( player )
|
|
||||||
player->queuePacket( actionStartPkt );
|
player->queuePacket( actionStartPkt );
|
||||||
|
}
|
||||||
|
|
||||||
auto pScriptMgr = m_pFw->get< Scripting::ScriptMgr >();
|
auto pScriptMgr = m_pFw->get< Scripting::ScriptMgr >();
|
||||||
|
|
||||||
|
@ -447,7 +451,7 @@ void Action::Action::buildEffects()
|
||||||
if( m_disableGenericHandler || !hasValidLutEntry() )
|
if( m_disableGenericHandler || !hasValidLutEntry() )
|
||||||
{
|
{
|
||||||
// send any effect packet added by script or an empty one just to play animation for other players
|
// send any effect packet added by script or an empty one just to play animation for other players
|
||||||
m_effectBuilder->buildAndSendPackets( getAnimationLock() );
|
m_effectBuilder->buildAndSendPackets();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -551,7 +555,7 @@ void Action::Action::buildEffects()
|
||||||
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 );
|
||||||
}
|
}
|
||||||
|
|
||||||
m_effectBuilder->buildAndSendPackets( getAnimationLock() );
|
m_effectBuilder->buildAndSendPackets();
|
||||||
|
|
||||||
// at this point we're done with it and no longer need it
|
// at this point we're done with it and no longer need it
|
||||||
m_effectBuilder.reset();
|
m_effectBuilder.reset();
|
||||||
|
|
|
@ -19,6 +19,7 @@ using namespace Sapphire::Network::Packets;
|
||||||
EffectBuilder::EffectBuilder( Entity::CharaPtr source, uint32_t actionId, uint16_t sequence ) :
|
EffectBuilder::EffectBuilder( Entity::CharaPtr source, uint32_t actionId, uint16_t sequence ) :
|
||||||
m_sourceChara( std::move( source ) ),
|
m_sourceChara( std::move( source ) ),
|
||||||
m_actionId( actionId ),
|
m_actionId( actionId ),
|
||||||
|
m_animationLock( 0.6f ),
|
||||||
m_sequence( sequence )
|
m_sequence( sequence )
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -44,35 +45,35 @@ void EffectBuilder::moveToResultList( Entity::CharaPtr& chara, EffectResultPtr r
|
||||||
|
|
||||||
void EffectBuilder::heal( Entity::CharaPtr& effectTarget, Entity::CharaPtr& healingTarget, uint32_t amount, Common::ActionHitSeverityType severity, Common::ActionEffectResultFlag flag, uint64_t resultDelayMs )
|
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, Common::Util::getTimeMs() + resultDelayMs );
|
EffectResultPtr nextResult = make_EffectResult( healingTarget, 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, uint64_t resultDelayMs )
|
void EffectBuilder::restoreMP( Entity::CharaPtr& target, Entity::CharaPtr& restoringTarget, uint32_t amount, Common::ActionEffectResultFlag flag, uint64_t resultDelayMs )
|
||||||
{
|
{
|
||||||
EffectResultPtr nextResult = make_EffectResult( restoringTarget, nullptr, Common::Util::getTimeMs() + resultDelayMs );
|
EffectResultPtr nextResult = make_EffectResult( restoringTarget, 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, uint64_t resultDelayMs )
|
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, Common::Util::getTimeMs() + resultDelayMs );
|
EffectResultPtr nextResult = make_EffectResult( damagingTarget, Common::Util::getTimeMs() + resultDelayMs );
|
||||||
nextResult->damage( amount, severity, flag );
|
nextResult->damage( amount, severity, flag );
|
||||||
moveToResultList( effectTarget, nextResult );
|
moveToResultList( effectTarget, nextResult );
|
||||||
}
|
}
|
||||||
|
|
||||||
void EffectBuilder::startCombo( Entity::CharaPtr& target, uint16_t actionId )
|
void EffectBuilder::startCombo( Entity::CharaPtr& target, uint16_t actionId )
|
||||||
{
|
{
|
||||||
EffectResultPtr nextResult = make_EffectResult( target, nullptr, 0 );
|
EffectResultPtr nextResult = make_EffectResult( target, 0 );
|
||||||
nextResult->startCombo( actionId );
|
nextResult->startCombo( actionId );
|
||||||
moveToResultList( target, nextResult );
|
moveToResultList( target, nextResult );
|
||||||
}
|
}
|
||||||
|
|
||||||
void EffectBuilder::comboSucceed( Entity::CharaPtr& target )
|
void EffectBuilder::comboSucceed( Entity::CharaPtr& target )
|
||||||
{
|
{
|
||||||
EffectResultPtr nextResult = make_EffectResult( target, nullptr, 0 );
|
EffectResultPtr nextResult = make_EffectResult( target, 0 );
|
||||||
nextResult->comboSucceed();
|
nextResult->comboSucceed();
|
||||||
moveToResultList( target, nextResult );
|
moveToResultList( target, nextResult );
|
||||||
}
|
}
|
||||||
|
@ -93,12 +94,17 @@ void EffectBuilder::applyStatusEffect( Entity::CharaPtr& target, Entity::CharaPt
|
||||||
|
|
||||||
void EffectBuilder::statusNoEffect( Entity::CharaPtr& target, uint16_t statusId )
|
void EffectBuilder::statusNoEffect( Entity::CharaPtr& target, uint16_t statusId )
|
||||||
{
|
{
|
||||||
EffectResultPtr nextResult = make_EffectResult( target, nullptr, 0 );
|
EffectResultPtr nextResult = make_EffectResult( target, 0 );
|
||||||
nextResult->statusNoEffect( statusId );
|
nextResult->statusNoEffect( statusId );
|
||||||
moveToResultList( target, nextResult );
|
moveToResultList( target, nextResult );
|
||||||
}
|
}
|
||||||
|
|
||||||
void EffectBuilder::buildAndSendPackets( float animationLock )
|
void EffectBuilder::setAnimationLock( float animationLock )
|
||||||
|
{
|
||||||
|
m_animationLock = animationLock;
|
||||||
|
}
|
||||||
|
|
||||||
|
void EffectBuilder::buildAndSendPackets()
|
||||||
{
|
{
|
||||||
auto targetCount = m_resolvedEffects.size();
|
auto targetCount = m_resolvedEffects.size();
|
||||||
//Logger::debug( "EffectBuilder result: " );
|
//Logger::debug( "EffectBuilder result: " );
|
||||||
|
@ -108,13 +114,13 @@ void EffectBuilder::buildAndSendPackets( float animationLock )
|
||||||
|
|
||||||
do // we want to send at least one packet even nothing is hit so other players can see
|
do // we want to send at least one packet even nothing is hit so other players can see
|
||||||
{
|
{
|
||||||
auto packet = buildNextEffectPacket( globalSequence, animationLock );
|
auto packet = buildNextEffectPacket( globalSequence );
|
||||||
m_sourceChara->sendToInRangeSet( packet, true );
|
m_sourceChara->sendToInRangeSet( packet, true );
|
||||||
}
|
}
|
||||||
while( !m_resolvedEffects.empty() );
|
while( !m_resolvedEffects.empty() );
|
||||||
}
|
}
|
||||||
|
|
||||||
std::shared_ptr< FFXIVPacketBase > EffectBuilder::buildNextEffectPacket( uint32_t globalSequence, float animationLock )
|
std::shared_ptr< FFXIVPacketBase > EffectBuilder::buildNextEffectPacket( uint32_t globalSequence )
|
||||||
{
|
{
|
||||||
auto remainingTargetCount = m_resolvedEffects.size();
|
auto remainingTargetCount = m_resolvedEffects.size();
|
||||||
|
|
||||||
|
@ -183,7 +189,7 @@ std::shared_ptr< FFXIVPacketBase > EffectBuilder::buildNextEffectPacket( uint32_
|
||||||
pHeader->effectCount = static_cast< uint8_t >( remainingTargetCount > packetSize ? packetSize : remainingTargetCount );
|
pHeader->effectCount = static_cast< uint8_t >( remainingTargetCount > packetSize ? packetSize : remainingTargetCount );
|
||||||
pHeader->sourceSequence = m_sequence;
|
pHeader->sourceSequence = m_sequence;
|
||||||
pHeader->globalSequence = globalSequence;
|
pHeader->globalSequence = globalSequence;
|
||||||
pHeader->animationLockTime = animationLock;
|
pHeader->animationLockTime = m_animationLock;
|
||||||
|
|
||||||
uint8_t targetIndex = 0;
|
uint8_t targetIndex = 0;
|
||||||
for( auto it = m_resolvedEffects.begin(); it != m_resolvedEffects.end(); )
|
for( auto it = m_resolvedEffects.begin(); it != m_resolvedEffects.end(); )
|
||||||
|
@ -228,7 +234,7 @@ std::shared_ptr< FFXIVPacketBase > EffectBuilder::buildNextEffectPacket( uint32_
|
||||||
auto effectPacket = std::make_shared< Server::EffectPacket >( m_sourceChara->getId(), firstResult->getTarget()->getId(), m_actionId );
|
auto effectPacket = std::make_shared< Server::EffectPacket >( m_sourceChara->getId(), firstResult->getTarget()->getId(), m_actionId );
|
||||||
effectPacket->setRotation( Common::Util::floatToUInt16Rot( m_sourceChara->getRot() ) );
|
effectPacket->setRotation( Common::Util::floatToUInt16Rot( m_sourceChara->getRot() ) );
|
||||||
effectPacket->setSequence( seq, m_sequence );
|
effectPacket->setSequence( seq, m_sequence );
|
||||||
effectPacket->data().animationLockTime = animationLock;
|
effectPacket->data().animationLockTime = m_animationLock;
|
||||||
|
|
||||||
for( int i = 0; i < resultList->size(); i++ )
|
for( int i = 0; i < resultList->size(); i++ )
|
||||||
{
|
{
|
||||||
|
@ -256,7 +262,7 @@ std::shared_ptr< FFXIVPacketBase > EffectBuilder::buildNextEffectPacket( uint32_
|
||||||
effectPacket->data().effectCount = 0;
|
effectPacket->data().effectCount = 0;
|
||||||
effectPacket->data().sourceSequence = m_sequence;
|
effectPacket->data().sourceSequence = m_sequence;
|
||||||
effectPacket->data().globalSequence = globalSequence;
|
effectPacket->data().globalSequence = globalSequence;
|
||||||
effectPacket->data().animationLockTime = animationLock;
|
effectPacket->data().animationLockTime = m_animationLock;
|
||||||
|
|
||||||
return effectPacket;
|
return effectPacket;
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,6 +11,8 @@ namespace Sapphire::World::Action
|
||||||
public:
|
public:
|
||||||
EffectBuilder( Entity::CharaPtr source, uint32_t actionId, uint16_t sequence );
|
EffectBuilder( Entity::CharaPtr source, uint32_t actionId, uint16_t sequence );
|
||||||
|
|
||||||
|
void setAnimationLock( float animationLock );
|
||||||
|
|
||||||
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, uint64_t resultDelayMs = 600 );
|
Common::ActionEffectResultFlag flag = Common::ActionEffectResultFlag::None, uint64_t resultDelayMs = 600 );
|
||||||
|
@ -31,15 +33,16 @@ namespace Sapphire::World::Action
|
||||||
|
|
||||||
void statusNoEffect( Entity::CharaPtr& target, uint16_t statusId );
|
void statusNoEffect( Entity::CharaPtr& target, uint16_t statusId );
|
||||||
|
|
||||||
void buildAndSendPackets( float animationLock );
|
void buildAndSendPackets();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void moveToResultList( Entity::CharaPtr& chara, EffectResultPtr result );
|
void moveToResultList( Entity::CharaPtr& chara, EffectResultPtr result );
|
||||||
|
|
||||||
std::shared_ptr< Sapphire::Network::Packets::FFXIVPacketBase > buildNextEffectPacket( uint32_t globalSequence, float animationLock );
|
std::shared_ptr< Sapphire::Network::Packets::FFXIVPacketBase > buildNextEffectPacket( uint32_t globalSequence );
|
||||||
|
|
||||||
private:
|
private:
|
||||||
uint32_t m_actionId;
|
uint32_t m_actionId;
|
||||||
|
float m_animationLock;
|
||||||
uint16_t m_sequence;
|
uint16_t m_sequence;
|
||||||
|
|
||||||
Entity::CharaPtr m_sourceChara;
|
Entity::CharaPtr m_sourceChara;
|
||||||
|
|
|
@ -24,6 +24,11 @@ EffectResult::EffectResult( Entity::CharaPtr target, Entity::CharaPtr source, ui
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
EffectResult::EffectResult( Entity::CharaPtr target, uint64_t delayMs ) :
|
||||||
|
EffectResult::EffectResult( std::move( target ), nullptr, delayMs )
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
Entity::CharaPtr EffectResult::getSource() const
|
Entity::CharaPtr EffectResult::getSource() const
|
||||||
{
|
{
|
||||||
return m_source;
|
return m_source;
|
||||||
|
|
|
@ -16,6 +16,7 @@ namespace Sapphire::World::Action
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
explicit EffectResult( Entity::CharaPtr target, Entity::CharaPtr source, uint64_t delayMs );
|
explicit EffectResult( Entity::CharaPtr target, Entity::CharaPtr source, uint64_t delayMs );
|
||||||
|
explicit EffectResult( Entity::CharaPtr target, uint64_t delayMs );
|
||||||
|
|
||||||
void damage( uint32_t amount, Common::ActionHitSeverityType severity, Common::ActionEffectResultFlag flag = Common::ActionEffectResultFlag::None );
|
void damage( uint32_t amount, Common::ActionHitSeverityType severity, Common::ActionEffectResultFlag flag = Common::ActionEffectResultFlag::None );
|
||||||
void heal( uint32_t amount, Common::ActionHitSeverityType severity, Common::ActionEffectResultFlag flag = Common::ActionEffectResultFlag::None );
|
void heal( uint32_t amount, Common::ActionHitSeverityType severity, Common::ActionEffectResultFlag flag = Common::ActionEffectResultFlag::None );
|
||||||
|
|
|
@ -531,7 +531,7 @@ void Sapphire::Entity::Chara::addStatusEffect( StatusEffect::StatusEffectPtr pEf
|
||||||
{
|
{
|
||||||
totalShieldValue /= getMaxHp();
|
totalShieldValue /= getMaxHp();
|
||||||
totalShieldValue *= 100;
|
totalShieldValue *= 100;
|
||||||
statusEffectAdd->data().shieldPercentage = totalShieldValue >= 255 ? 255 : static_cast< uint8_t >( totalShieldValue );
|
statusEffectAdd->data().shieldPercentage = static_cast< uint8_t >( std::min( 255.0f, totalShieldValue ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
sendToInRangeSet( statusEffectAdd, true );
|
sendToInRangeSet( statusEffectAdd, true );
|
||||||
|
@ -664,7 +664,7 @@ void Sapphire::Entity::Chara::sendStatusEffectUpdate()
|
||||||
{
|
{
|
||||||
totalShieldValue /= getMaxHp();
|
totalShieldValue /= getMaxHp();
|
||||||
totalShieldValue *= 100;
|
totalShieldValue *= 100;
|
||||||
statusEffectList->data().shieldPercentage = totalShieldValue >= 255 ? 255 : static_cast< uint8_t >( totalShieldValue );
|
statusEffectList->data().shieldPercentage = static_cast< uint8_t >( std::min( 255.0f, totalShieldValue ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
sendToInRangeSet( statusEffectList, true );
|
sendToInRangeSet( statusEffectList, true );
|
||||||
|
@ -696,7 +696,7 @@ void Sapphire::Entity::Chara::sendEffectResultToUpdateShieldValue()
|
||||||
{
|
{
|
||||||
totalShieldValue /= getMaxHp();
|
totalShieldValue /= getMaxHp();
|
||||||
totalShieldValue *= 100;
|
totalShieldValue *= 100;
|
||||||
pPacket->data().shieldPercentage = totalShieldValue >= 255 ? 255 : static_cast< uint8_t >( totalShieldValue );
|
pPacket->data().shieldPercentage = static_cast< uint8_t >( std::min( 255.0f, totalShieldValue ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
sendToInRangeSet( pPacket, true );
|
sendToInRangeSet( pPacket, true );
|
||||||
|
|
Loading…
Add table
Reference in a new issue