mirror of
https://github.com/SapphireServer/Sapphire.git
synced 2025-05-27 11:57:45 +00:00
Try to implement MP restoring actions.
MPP values in lut entries are input manually.
This commit is contained in:
parent
482745624c
commit
dee59aead1
10 changed files with 1474 additions and 1296 deletions
|
@ -249,11 +249,11 @@ int main()
|
|||
// action.first, data.name, data.potency, data.flankPotency, data.frontPotency, data.rearPotency,
|
||||
// data.curePotency, data.restorePercentage );
|
||||
|
||||
auto out = fmt::format( " // {}\n {{ {}, {{ {}, {}, {}, {}, {}, {} }} }},\n",
|
||||
auto out = fmt::format( " // {}\n {{ {}, {{ {}, {}, {}, {}, {}, {}, {} }} }},\n",
|
||||
data.name, action.first,
|
||||
data.potency, data.comboPotency,
|
||||
data.flankPotency, data.frontPotency, data.rearPotency,
|
||||
data.curePotency );
|
||||
data.curePotency, 0 );
|
||||
|
||||
output += out;
|
||||
// Logger::info( out );
|
||||
|
|
|
@ -419,9 +419,9 @@ void Action::Action::buildEffects()
|
|||
// no script exists but we have a valid lut entry
|
||||
if( auto player = getSourceChara()->getAsPlayer() )
|
||||
{
|
||||
player->sendDebug( "Hit target: pot: {} (c: {}, f: {}, r: {}), heal pot: {}",
|
||||
player->sendDebug( "Hit target: pot: {} (c: {}, f: {}, r: {}), heal pot: {}, mpp: {}",
|
||||
lutEntry.potency, lutEntry.comboPotency, lutEntry.flankPotency, lutEntry.rearPotency,
|
||||
lutEntry.curePotency );
|
||||
lutEntry.curePotency, lutEntry.restoreMPPercentage );
|
||||
}
|
||||
|
||||
for( auto& actor : m_hitActors )
|
||||
|
@ -450,6 +450,11 @@ void Action::Action::buildEffects()
|
|||
m_effectBuilder->selfHeal( actor, m_pSource, lutEntry.curePotency );
|
||||
}
|
||||
|
||||
if ( lutEntry.restoreMPPercentage > 0 )
|
||||
{
|
||||
m_effectBuilder->restoreMP( actor, m_pSource, m_pSource->getMp() * lutEntry.restoreMPPercentage / 100 );
|
||||
}
|
||||
|
||||
if ( !m_actionData->preservesCombo ) // we need something like m_actionData->hasNextComboAction
|
||||
{
|
||||
m_effectBuilder->startCombo( actor, getId() );
|
||||
|
@ -460,6 +465,16 @@ void Action::Action::buildEffects()
|
|||
{
|
||||
// todo: calcHealing()
|
||||
m_effectBuilder->healTarget( actor, lutEntry.curePotency );
|
||||
|
||||
if ( lutEntry.restoreMPPercentage > 0 )
|
||||
{
|
||||
// always restore caster mp I don't think there are any actions that can restore target MP post 5.0
|
||||
m_effectBuilder->restoreMP( actor, m_pSource, m_pSource->getMp() * lutEntry.restoreMPPercentage / 100 );
|
||||
}
|
||||
}
|
||||
else if ( lutEntry.restoreMPPercentage > 0 )
|
||||
{
|
||||
m_effectBuilder->restoreMP( m_pSource, m_pSource, m_pSource->getMp() * lutEntry.restoreMPPercentage / 100 );
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -13,7 +13,7 @@ namespace Sapphire::World::Action
|
|||
uint16_t frontPotency;
|
||||
uint16_t rearPotency;
|
||||
uint16_t curePotency;
|
||||
// uint16_t restorePercentage;
|
||||
uint16_t restoreMPPercentage;
|
||||
};
|
||||
|
||||
class ActionLut
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -67,6 +67,16 @@ void EffectBuilder::selfHeal( Entity::CharaPtr& target, Entity::CharaPtr& source
|
|||
resultList->push_back( std::move( nextResult ) );
|
||||
}
|
||||
|
||||
void EffectBuilder::restoreMP( Entity::CharaPtr& target, Entity::CharaPtr& source, uint32_t amount, Common::ActionHitSeverityType severity )
|
||||
{
|
||||
auto resultList = getResultList( target );
|
||||
assert( resultList );
|
||||
|
||||
EffectResultPtr nextResult = make_EffectResult( source, getResultDelayMs() ); // restore mp source actor
|
||||
nextResult->restoreMP( amount );
|
||||
resultList->push_back( std::move( nextResult ) );
|
||||
}
|
||||
|
||||
void EffectBuilder::damageTarget( Entity::CharaPtr& target, uint32_t amount, Common::ActionHitSeverityType severity )
|
||||
{
|
||||
auto resultList = getResultList( target );
|
||||
|
|
|
@ -18,6 +18,9 @@ namespace Sapphire::World::Action
|
|||
void selfHeal( Entity::CharaPtr& target, Entity::CharaPtr& source, uint32_t amount,
|
||||
Common::ActionHitSeverityType severity = Common::ActionHitSeverityType::NormalHeal );
|
||||
|
||||
void restoreMP( Entity::CharaPtr& target, Entity::CharaPtr& source, uint32_t amount,
|
||||
Common::ActionHitSeverityType severity = Common::ActionHitSeverityType::NormalHeal );
|
||||
|
||||
void damageTarget( Entity::CharaPtr& target, uint32_t amount,
|
||||
Common::ActionHitSeverityType severity = Common::ActionHitSeverityType::NormalDamage );
|
||||
|
||||
|
|
|
@ -57,6 +57,14 @@ void EffectResult::heal( uint32_t amount, Sapphire::Common::ActionHitSeverityTyp
|
|||
m_type = Common::ActionEffectType::Heal;
|
||||
}
|
||||
|
||||
void EffectResult::restoreMP( uint32_t amount )
|
||||
{
|
||||
m_value = amount;
|
||||
m_flag = 0x80;
|
||||
|
||||
m_type = Common::ActionEffectType::MpGain;
|
||||
}
|
||||
|
||||
void EffectResult::startCombo( uint16_t actionId )
|
||||
{
|
||||
m_value = actionId;
|
||||
|
@ -100,6 +108,12 @@ void EffectResult::execute()
|
|||
break;
|
||||
}
|
||||
|
||||
case Common::ActionEffectType::MpGain:
|
||||
{
|
||||
m_target->restoreMP( m_value );
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -17,6 +17,7 @@ namespace Sapphire::World::Action
|
|||
|
||||
void damage( uint32_t amount, Common::ActionHitSeverityType severity );
|
||||
void heal( uint32_t amount, Common::ActionHitSeverityType severity, bool isSelfHeal );
|
||||
void restoreMP( uint32_t amount );
|
||||
void startCombo( uint16_t actionId );
|
||||
void comboVisualEffect();
|
||||
|
||||
|
|
|
@ -438,6 +438,18 @@ void Sapphire::Entity::Chara::heal( uint32_t amount )
|
|||
sendStatusUpdate();
|
||||
}
|
||||
|
||||
void Sapphire::Entity::Chara::restoreMP( uint32_t amount )
|
||||
{
|
||||
if( ( m_mp + amount ) > getMaxMp() )
|
||||
{
|
||||
m_mp = getMaxMp();
|
||||
}
|
||||
else
|
||||
m_mp += amount;
|
||||
|
||||
sendStatusUpdate();
|
||||
}
|
||||
|
||||
/*!
|
||||
Send an HpMpTp update to players in range ( and potentially to self )
|
||||
TODO: poor naming, should be changed. Status is not HP. Also should be virtual
|
||||
|
|
|
@ -263,6 +263,8 @@ namespace Sapphire::Entity
|
|||
|
||||
virtual void heal( uint32_t amount );
|
||||
|
||||
virtual void restoreMP( uint32_t amount );
|
||||
|
||||
virtual bool checkAction();
|
||||
|
||||
virtual void update( uint64_t tickCount );
|
||||
|
|
Loading…
Add table
Reference in a new issue