diff --git a/src/common/Common.h b/src/common/Common.h index 277e5bd1..0149a389 100644 --- a/src/common/Common.h +++ b/src/common/Common.h @@ -1051,6 +1051,7 @@ namespace Sapphire::Common BlockParryRateBonus = 14, MPRestorePerGCD = 15, AlwaysCombo = 16, + PotencyMultiplier = 17, }; enum class ActionTypeFilter : int32_t diff --git a/src/world/Action/Action.cpp b/src/world/Action/Action.cpp index 646759bf..c2e4288e 100644 --- a/src/world/Action/Action.cpp +++ b/src/world/Action/Action.cpp @@ -668,6 +668,11 @@ void Action::Action::buildEffects() player->gaugeGnbSetAmmo( std::min( 2, player->gaugeGnbGetAmmo() + m_lutEntry.bonusDataByte4 ) ); break; } + case Common::ClassJob::Samurai: + { + player->gaugeSamSetKenki( std::min( 100, player->gaugeSamGetKenki() + m_lutEntry.bonusDataByte4 ) ); + break; + } } } } @@ -1160,12 +1165,12 @@ Action::EffectBuilderPtr Action::Action::getEffectbuilder() return m_effectBuilder; } -Data::ActionPtr Action::Action::getActionData() const +Data::ActionPtr Action::Action::getActionData() { return m_actionData; } -Action::ActionEntry Action::Action::getActionEntry() const +Action::ActionEntry& Action::Action::getActionEntry() { return m_lutEntry; } diff --git a/src/world/Action/Action.h b/src/world/Action/Action.h index 3c215684..8c91dc57 100644 --- a/src/world/Action/Action.h +++ b/src/world/Action/Action.h @@ -126,8 +126,8 @@ namespace Sapphire::World::Action */ Entity::CharaPtr getHitChara(); - Data::ActionPtr getActionData() const; - ActionEntry getActionEntry() const; + Data::ActionPtr getActionData(); + ActionEntry& getActionEntry(); float getAnimationLock(); void setPrimaryCost( Common::ActionPrimaryCostType type, uint16_t cost ); diff --git a/src/world/Action/ActionLutData.cpp b/src/world/Action/ActionLutData.cpp index 4d4eeb93..bf4c3a4b 100644 --- a/src/world/Action/ActionLutData.cpp +++ b/src/world/Action/ActionLutData.cpp @@ -3023,8 +3023,8 @@ ActionLut::StatusEffectTable ActionLut::m_statusEffectTable = //Jinpu, 陣風: DamageMultiplier, All, 13% //{ 1298, { 1, 255, 13, 0, 0 } }, - //Kaiten, 必殺剣・回天: DamageMultiplier, All, 50% - { 1229, { 1, 255, 50, 0, 0 } }, + //Kaiten, 必殺剣・回天: PotencyMultiplier, 1 uses, 50% + { 1229, { 17, 1, 0, 3, 50 } }, //Higanbana, 彼岸花: Dot, Physical, potency 60 { 1228, { 4, 1, 60, 0, 0 } }, diff --git a/src/world/StatusEffect/StatusEffect.cpp b/src/world/StatusEffect/StatusEffect.cpp index 8432331c..91bf3208 100644 --- a/src/world/StatusEffect/StatusEffect.cpp +++ b/src/world/StatusEffect/StatusEffect.cpp @@ -380,8 +380,32 @@ void Sapphire::StatusEffect::StatusEffect::onBeforeActionStart( Sapphire::World: } action->setAlwaysCombo(); } - break; } + break; + } + case Common::StatusEffectType::PotencyMultiplier: + { + if( checkAction1( action, m_effectEntry ) ) + { + if( m_effectEntry.effectValue1 > 0 ) + { + if( m_effectEntry.effectValue1 == getStacks() ) + { + // if stacks equal to remaining uses, assume it is synced + setStacks( getStacks() - 1 ); + m_targetActor->sendStatusEffectUpdate(); + } + m_effectEntry.effectValue1--; + if( m_effectEntry.effectValue1 == 0 ) + { + markToRemove(); + } + action->getActionEntry().damagePotency *= 1.0 + ( m_effectEntry.effectValue4 / 100.0 ); + action->getActionEntry().damageComboPotency *= 1.0 + ( m_effectEntry.effectValue4 / 100.0 ); + action->getActionEntry().damageDirectionalPotency *= 1.0 + ( m_effectEntry.effectValue4 / 100.0 ); + } + } + break; } } }