diff options
author | Ovahlord <dreadkiller@gmx.de> | 2023-11-18 19:47:12 +0100 |
---|---|---|
committer | Ovahlord <dreadkiller@gmx.de> | 2023-11-18 19:47:12 +0100 |
commit | a1401decb62ae4ab612983e75a99cf917995bd05 (patch) | |
tree | a8c1ad65e5ad7986968b4461ce7fb74d0db03a29 | |
parent | 1581075726dda927816884903f05bbf1f5e615da (diff) |
Core/Player: backported health and mana regeneration calculations from 3.3.5
-rw-r--r-- | src/server/game/DataStores/GameTables.cpp | 8 | ||||
-rw-r--r-- | src/server/game/DataStores/GameTables.h | 98 | ||||
-rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 42 | ||||
-rw-r--r-- | src/server/game/Entities/Player/Player.h | 2 | ||||
-rw-r--r-- | src/server/game/Entities/Unit/StatSystem.cpp | 30 | ||||
-rw-r--r-- | src/server/game/Spells/Auras/SpellAuraDefines.h | 2 | ||||
-rw-r--r-- | src/server/game/Spells/Auras/SpellAuraEffects.cpp | 30 | ||||
-rw-r--r-- | src/server/game/Spells/Auras/SpellAuraEffects.h | 1 | ||||
-rw-r--r-- | src/server/game/Spells/SpellInfo.cpp | 1 | ||||
-rw-r--r-- | src/server/game/Spells/SpellMgr.cpp | 3 | ||||
-rw-r--r-- | src/server/scripts/Spells/spell_priest.cpp | 52 |
11 files changed, 181 insertions, 88 deletions
diff --git a/src/server/game/DataStores/GameTables.cpp b/src/server/game/DataStores/GameTables.cpp index d7bc4adb2cb..505f1c2242c 100644 --- a/src/server/game/DataStores/GameTables.cpp +++ b/src/server/game/DataStores/GameTables.cpp @@ -35,6 +35,10 @@ GameTable<GtCombatRatingsMultByILvl> sCombatRatingsMultByILvlGameTabl GameTable<GtHpPerStaEntry> sHpPerStaGameTable; GameTable<GtItemSocketCostPerLevelEntry> sItemSocketCostPerLevelGameTable; GameTable<GtNpcManaCostScalerEntry> sNpcManaCostScalerGameTable; +GameTable<GtOCTRegenHPEntry> sOCTRegenHPGameTable; +GameTable<GtOCTRegenMPEntry> sOCTRegenMPGameTable; +GameTable<GtRegenHPPerSptEntry> sRegenHPPerSptGameTable; +GameTable<GtRegenMPPerSptEntry> sRegenMPPerSptGameTable; GameTable<GtSpellScalingEntry> sSpellScalingGameTable; GameTable<GtXpEntry> sXpGameTable; @@ -121,6 +125,10 @@ void LoadGameTables(std::string const& dataPath) LOAD_GT(sItemSocketCostPerLevelGameTable, "ItemSocketCostPerLevel.txt"); LOAD_GT(sHpPerStaGameTable, "HpPerSta.txt"); LOAD_GT(sNpcManaCostScalerGameTable, "NPCManaCostScaler.txt"); + LOAD_GT(sOCTRegenHPGameTable, "OCTRegenHP.txt"); + LOAD_GT(sOCTRegenMPGameTable, "OCTRegenMP.txt"); + LOAD_GT(sRegenHPPerSptGameTable, "RegenHPPerSpt.txt"); + LOAD_GT(sRegenMPPerSptGameTable, "RegenMPPerSpt.txt"); LOAD_GT(sSpellScalingGameTable, "SpellScaling.txt"); LOAD_GT(sXpGameTable, "xp.txt"); diff --git a/src/server/game/DataStores/GameTables.h b/src/server/game/DataStores/GameTables.h index 32b5805ba45..ea0f5f043ed 100644 --- a/src/server/game/DataStores/GameTables.h +++ b/src/server/game/DataStores/GameTables.h @@ -121,6 +121,66 @@ struct GtNpcManaCostScalerEntry float Scaler = 0.0f; }; +struct GtOCTRegenHPEntry +{ + float Warrior = 0.0f; + float Paladin = 0.0f; + float Hunter = 0.0f; + float Rogue = 0.0f; + float Priest = 0.0f; + float DeathKnight = 0.0f; + float Shaman = 0.0f; + float Mage = 0.0f; + float Warlock = 0.0f; + float Monk = 0.0f; + float Druid = 0.0f; +}; + +struct GtOCTRegenMPEntry +{ + float Warrior = 0.0f; + float Paladin = 0.0f; + float Hunter = 0.0f; + float Rogue = 0.0f; + float Priest = 0.0f; + float DeathKnight = 0.0f; + float Shaman = 0.0f; + float Mage = 0.0f; + float Warlock = 0.0f; + float Monk = 0.0f; + float Druid = 0.0f; +}; + +struct GtRegenHPPerSptEntry +{ + float Warrior = 0.0f; + float Paladin = 0.0f; + float Hunter = 0.0f; + float Rogue = 0.0f; + float Priest = 0.0f; + float DeathKnight = 0.0f; + float Shaman = 0.0f; + float Mage = 0.0f; + float Warlock = 0.0f; + float Monk = 0.0f; + float Druid = 0.0f; +}; + +struct GtRegenMPPerSptEntry +{ + float Warrior = 0.0f; + float Paladin = 0.0f; + float Hunter = 0.0f; + float Rogue = 0.0f; + float Priest = 0.0f; + float DeathKnight = 0.0f; + float Shaman = 0.0f; + float Mage = 0.0f; + float Warlock = 0.0f; + float Monk = 0.0f; + float Druid = 0.0f; +}; + struct GtSpellScalingEntry { float Rogue = 0.0f; @@ -190,6 +250,10 @@ TC_GAME_API extern GameTable<GtCombatRatingsMultByILvl> sCombatRatin TC_GAME_API extern GameTable<GtHpPerStaEntry> sHpPerStaGameTable; TC_GAME_API extern GameTable<GtItemSocketCostPerLevelEntry> sItemSocketCostPerLevelGameTable; TC_GAME_API extern GameTable<GtNpcManaCostScalerEntry> sNpcManaCostScalerGameTable; +TC_GAME_API extern GameTable<GtOCTRegenHPEntry> sOCTRegenHPGameTable; +TC_GAME_API extern GameTable<GtOCTRegenMPEntry> sOCTRegenMPGameTable; +TC_GAME_API extern GameTable<GtRegenHPPerSptEntry> sRegenHPPerSptGameTable; +TC_GAME_API extern GameTable<GtRegenMPPerSptEntry> sRegenMPPerSptGameTable; TC_GAME_API extern GameTable<GtSpellScalingEntry> sSpellScalingGameTable; TC_GAME_API extern GameTable<GtXpEntry> sXpGameTable; @@ -231,6 +295,40 @@ inline float GetGameTableColumnForClass(T const* row, int32 class_) return 0.0f; } +template<class T> +inline float GetRegenGameTableColumnForClass(T const* row, int32 class_) +{ + switch (class_) + { + case CLASS_WARRIOR: + return row->Warrior; + case CLASS_PALADIN: + return row->Paladin; + case CLASS_HUNTER: + return row->Hunter; + case CLASS_ROGUE: + return row->Rogue; + case CLASS_PRIEST: + return row->Priest; + case CLASS_DEATH_KNIGHT: + return row->DeathKnight; + case CLASS_SHAMAN: + return row->Shaman; + case CLASS_MAGE: + return row->Mage; + case CLASS_WARLOCK: + return row->Warlock; + case CLASS_MONK: + return row->Monk; + case CLASS_DRUID: + return row->Druid; + default: + break; + } + + return 0.0f; +} + inline float GetSpellScalingColumnForClass(GtSpellScalingEntry const* row, int32 class_) { switch (class_) diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 09d98ec22e4..f1a9831ab7b 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -1912,6 +1912,10 @@ void Player::RegenerateHealth() return; float HealthIncreaseRate = sWorld->getRate(RATE_HEALTH); + + if (GetLevel() < 15) + HealthIncreaseRate = sWorld->getRate(RATE_HEALTH) * (2.066f - (GetLevel() * 0.066f)); + float addValue = 0.0f; // polymorphed case @@ -1920,15 +1924,10 @@ void Player::RegenerateHealth() // normal regen case (maybe partly in combat case) else if (!IsInCombat() || HasAuraType(SPELL_AURA_MOD_REGEN_DURING_COMBAT)) { - addValue = HealthIncreaseRate; + addValue = OCTRegenHPPerSpirit() * HealthIncreaseRate; if (!IsInCombat()) { - if (GetLevel() < 15) - addValue = (0.20f * ((float)GetMaxHealth()) / GetLevel() * HealthIncreaseRate); - else - addValue = 0.015f * ((float)GetMaxHealth()) * HealthIncreaseRate; - addValue *= GetTotalAuraMultiplier(SPELL_AURA_MOD_HEALTH_REGEN_PERCENT); addValue += GetTotalAuraModifier(SPELL_AURA_MOD_REGEN) * 0.4f; @@ -5263,6 +5262,37 @@ inline float GetGameTableColumnForCombatRating(GtCombatRatingsEntry const* row, return 1.0f; } +float Player::OCTRegenHPPerSpirit() const +{ + GtOCTRegenHPEntry const* baseGt = sOCTRegenHPGameTable.GetRow(GetLevel()); + GtRegenHPPerSptEntry const* moreGt = sRegenHPPerSptGameTable.GetRow(GetLevel()); + if (!baseGt || !moreGt) + return 0.0f; + + float baseRatio = GetRegenGameTableColumnForClass(baseGt, GetClass()); + float moreRatiob = GetRegenGameTableColumnForClass(moreGt, GetClass()); + + // Formula from PaperDollFrame script + float spirit = GetStat(STAT_SPIRIT); + float baseSpirit = spirit; + if (baseSpirit > 50) + baseSpirit = 50; + float moreSpirit = spirit - baseSpirit; + float regen = baseSpirit * baseRatio + moreSpirit * moreRatiob; + return regen; +} + +float Player::OCTRegenMPPerSpirit() const +{ + GtRegenMPPerSptEntry const* gt = sRegenMPPerSptGameTable.GetRow(GetLevel()); + if (!gt) + return 0.0f; + + float ratio = GetRegenGameTableColumnForClass(gt, GetClass()); + // Formula from PaperDollFrame script + return static_cast<float>(GetStat(STAT_SPIRIT)) * ratio; +} + float Player::GetRatingMultiplier(CombatRating cr) const { GtCombatRatingsEntry const* Rating = sCombatRatingsGameTable.GetRow(GetLevel()); diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index 214c326d32f..b236a5b7df1 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -2026,6 +2026,8 @@ class TC_GAME_API Player : public Unit, public GridObject<Player> void RecalculateRating(CombatRating cr) { ApplyRatingMod(cr, 0, true);} void GetDodgeFromAgility(float &diminishing, float &nondiminishing) const; + float OCTRegenHPPerSpirit() const; + float OCTRegenMPPerSpirit() const; float GetRatingMultiplier(CombatRating cr) const; float GetRatingBonusValue(CombatRating cr) const; diff --git a/src/server/game/Entities/Unit/StatSystem.cpp b/src/server/game/Entities/Unit/StatSystem.cpp index 48a81505c26..fd5464cdddd 100644 --- a/src/server/game/Entities/Unit/StatSystem.cpp +++ b/src/server/game/Entities/Unit/StatSystem.cpp @@ -792,21 +792,29 @@ void Player::UpdateManaRegen() if (manaIndex == MAX_POWERS) return; - // Get base of Mana Pool in sBaseMPGameTable - uint32 basemana = 0; - sObjectMgr->GetPlayerClassLevelInfo(GetClass(), GetLevel(), basemana); - float base_regen = basemana / 100.f; - - base_regen += GetTotalAuraModifierByMiscValue(SPELL_AURA_MOD_POWER_REGEN, POWER_MANA); + float intellect = GetStat(STAT_INTELLECT); + // Mana regen from spirit and intellect + float power_regen = std::sqrt(intellect) * OCTRegenMPPerSpirit(); // Apply PCT bonus from SPELL_AURA_MOD_POWER_REGEN_PERCENT - base_regen *= GetTotalAuraMultiplierByMiscValue(SPELL_AURA_MOD_POWER_REGEN_PERCENT, POWER_MANA); - + power_regen *= GetTotalAuraMultiplierByMiscValue(SPELL_AURA_MOD_POWER_REGEN_PERCENT, POWER_MANA); // Apply PCT bonus from SPELL_AURA_MOD_MANA_REGEN_PCT - base_regen *= GetTotalAuraMultiplierByMiscValue(SPELL_AURA_MOD_MANA_REGEN_PCT, POWER_MANA); + power_regen *= GetTotalAuraMultiplierByMiscValue(SPELL_AURA_MOD_MANA_REGEN_PCT, POWER_MANA); + + // Mana regen from SPELL_AURA_MOD_POWER_REGEN aura + float power_regen_mp5 = (GetTotalAuraModifierByMiscValue(SPELL_AURA_MOD_POWER_REGEN, POWER_MANA) + m_baseManaRegen) / 5.0f; + + // Get bonus from SPELL_AURA_MOD_MANA_REGEN_FROM_STAT aura + for (AuraEffect const* aurEff : GetAuraEffectsByType(SPELL_AURA_MOD_MANA_REGEN_FROM_STAT)) + power_regen_mp5 += GetStat(Stats(aurEff->GetMiscValue())) * aurEff->GetAmount() / 500.0f; + + // Set regen rate in cast state apply only on spirit based regen + int32 modManaRegenInterrupt = GetTotalAuraModifier(SPELL_AURA_MOD_MANA_REGEN_INTERRUPT); + if (modManaRegenInterrupt > 100) + modManaRegenInterrupt = 100; - SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::PowerRegenFlatModifier, manaIndex), base_regen); - SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::PowerRegenInterruptedFlatModifier, manaIndex), base_regen); + SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::PowerRegenFlatModifier, manaIndex), power_regen_mp5 + CalculatePct(power_regen, modManaRegenInterrupt)); + SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::PowerRegenInterruptedFlatModifier, manaIndex), power_regen_mp5 + power_regen); } void Player::UpdateAllRunesRegen() diff --git a/src/server/game/Spells/Auras/SpellAuraDefines.h b/src/server/game/Spells/Auras/SpellAuraDefines.h index 97aa5d5fd83..b0c7825d6bf 100644 --- a/src/server/game/Spells/Auras/SpellAuraDefines.h +++ b/src/server/game/Spells/Auras/SpellAuraDefines.h @@ -310,7 +310,7 @@ enum AuraType : uint32 SPELL_AURA_HASTE_SPELLS = 216, SPELL_AURA_MOD_MELEE_HASTE_2 = 217, SPELL_AURA_ADD_PCT_MODIFIER_BY_SPELL_LABEL = 218, - SPELL_AURA_ADD_FLAT_MODIFIER_BY_SPELL_LABEL = 219, + SPELL_AURA_MOD_MANA_REGEN_FROM_STAT = 219, SPELL_AURA_MOD_ABILITY_SCHOOL_MASK = 220, // NYI SPELL_AURA_MOD_DETAUNT = 221, SPELL_AURA_REMOVE_TRANSMOG_COST = 222, diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp index af36a0adfe2..d386b7a3c0f 100644 --- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp +++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp @@ -286,7 +286,7 @@ NonDefaultConstructible<pAuraEffectHandler> AuraEffectHandler[TOTAL_AURAS]= &AuraEffect::HandleModCastingSpeed, //216 SPELL_AURA_HASTE_SPELLS &AuraEffect::HandleModMeleeSpeedPct, //217 SPELL_AURA_MOD_MELEE_HASTE_2 &AuraEffect::HandleNoImmediateEffect, //218 SPELL_AURA_ADD_PCT_MODIFIER_BY_SPELL_LABEL implemented in AuraEffect::CalculateSpellMod() - &AuraEffect::HandleNoImmediateEffect, //219 SPELL_AURA_ADD_FLAT_MODIFIER_BY_SPELL_LABEL implemented in AuraEffect::CalculateSpellMod() + &AuraEffect::HandleModManaRegen, //219 SPELL_AURA_MOD_MANA_REGEN_FROM_STAT &AuraEffect::HandleNULL, //220 SPELL_AURA_MOD_ABILITY_SCHOOL_MASK &AuraEffect::HandleModDetaunt, //221 SPELL_AURA_MOD_DETAUNT &AuraEffect::HandleNoImmediateEffect, //222 SPELL_AURA_REMOVE_TRANSMOG_COST implemented in WorldSession::HandleTransmogrifyItems @@ -899,20 +899,6 @@ void AuraEffect::CalculateSpellMod() } static_cast<SpellModifierByClassMask*>(m_spellmod)->value = GetAmount(); break; - case SPELL_AURA_ADD_FLAT_MODIFIER_BY_SPELL_LABEL: - if (!m_spellmod) - { - SpellFlatModifierByLabel* spellmod = new SpellFlatModifierByLabel(GetBase()); - spellmod->op = SpellModOp(GetMiscValue()); - - spellmod->type = SPELLMOD_LABEL_FLAT; - spellmod->spellId = GetId(); - spellmod->value.ModIndex = GetMiscValue(); - spellmod->value.LabelID = GetMiscValueB(); - m_spellmod = spellmod; - } - static_cast<SpellFlatModifierByLabel*>(m_spellmod)->value.ModifierValue = GetAmount(); - break; case SPELL_AURA_ADD_PCT_MODIFIER_BY_SPELL_LABEL: if (!m_spellmod) { @@ -3815,6 +3801,20 @@ void AuraEffect::HandleAuraModMaxPower(AuraApplication const* aurApp, uint8 mode target->HandleStatFlatModifier(unitMod, TOTAL_VALUE, float(GetAmount()), apply); } +void AuraEffect::HandleModManaRegen(AuraApplication const* aurApp, uint8 mode, bool /*apply*/) const +{ + if (!(mode & (AURA_EFFECT_HANDLE_CHANGE_AMOUNT_MASK | AURA_EFFECT_HANDLE_STAT))) + return; + + Unit* target = aurApp->GetTarget(); + + if (target->GetTypeId() != TYPEID_PLAYER) + return; + + //Note: an increase in regen does NOT cause threat. + target->ToPlayer()->UpdateManaRegen(); +} + /********************************/ /*** HEAL & ENERGIZE ***/ /********************************/ diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.h b/src/server/game/Spells/Auras/SpellAuraEffects.h index fc72fb89e6a..11d26f00731 100644 --- a/src/server/game/Spells/Auras/SpellAuraEffects.h +++ b/src/server/game/Spells/Auras/SpellAuraEffects.h @@ -248,6 +248,7 @@ class TC_GAME_API AuraEffect void HandleOverrideAttackPowerBySpellPower(AuraApplication const* aurApp, uint8 mode, bool apply) const; void HandleModVersatilityByPct(AuraApplication const* aurApp, uint8 mode, bool apply) const; void HandleAuraModMaxPower(AuraApplication const* aurApp, uint8 mode, bool apply) const; + void HandleModManaRegen(AuraApplication const* aurApp, uint8 mode, bool apply) const; // heal and energize void HandleModPowerRegen(AuraApplication const* aurApp, uint8 mode, bool apply) const; void HandleModPowerRegenPCT(AuraApplication const* aurApp, uint8 mode, bool apply) const; diff --git a/src/server/game/Spells/SpellInfo.cpp b/src/server/game/Spells/SpellInfo.cpp index 9276801cc6a..581578ebc10 100644 --- a/src/server/game/Spells/SpellInfo.cpp +++ b/src/server/game/Spells/SpellInfo.cpp @@ -4864,7 +4864,6 @@ bool _isPositiveEffectImpl(SpellInfo const* spellInfo, SpellEffectInfo const& ef } case SPELL_AURA_ADD_FLAT_MODIFIER: // mods case SPELL_AURA_ADD_PCT_MODIFIER: - case SPELL_AURA_ADD_FLAT_MODIFIER_BY_SPELL_LABEL: case SPELL_AURA_ADD_PCT_MODIFIER_BY_SPELL_LABEL: { switch (SpellModOp(effect.MiscValue)) diff --git a/src/server/game/Spells/SpellMgr.cpp b/src/server/game/Spells/SpellMgr.cpp index bc92cac0b64..20ab87f8188 100644 --- a/src/server/game/Spells/SpellMgr.cpp +++ b/src/server/game/Spells/SpellMgr.cpp @@ -1607,7 +1607,7 @@ void SpellMgr::LoadSpellProcs() continue; if (spellEffectInfo.ApplyAuraName == SPELL_AURA_ADD_PCT_MODIFIER || spellEffectInfo.ApplyAuraName == SPELL_AURA_ADD_FLAT_MODIFIER - || spellEffectInfo.ApplyAuraName == SPELL_AURA_ADD_PCT_MODIFIER_BY_SPELL_LABEL || spellEffectInfo.ApplyAuraName == SPELL_AURA_ADD_FLAT_MODIFIER_BY_SPELL_LABEL + || spellEffectInfo.ApplyAuraName == SPELL_AURA_ADD_PCT_MODIFIER_BY_SPELL_LABEL || spellEffectInfo.ApplyAuraName == SPELL_AURA_IGNORE_SPELL_COOLDOWN) { found = true; @@ -2516,7 +2516,6 @@ void SpellMgr::LoadSpellInfoStore() case SPELL_AURA_ADD_FLAT_MODIFIER: case SPELL_AURA_ADD_PCT_MODIFIER: case SPELL_AURA_ADD_PCT_MODIFIER_BY_SPELL_LABEL: - case SPELL_AURA_ADD_FLAT_MODIFIER_BY_SPELL_LABEL: ASSERT(effect->EffectMiscValue[0] < MAX_SPELLMOD, "MAX_SPELLMOD must be at least %d", effect->EffectMiscValue[0] + 1); break; default: diff --git a/src/server/scripts/Spells/spell_priest.cpp b/src/server/scripts/Spells/spell_priest.cpp index 883d92321c9..2e38dd5ebbb 100644 --- a/src/server/scripts/Spells/spell_priest.cpp +++ b/src/server/scripts/Spells/spell_priest.cpp @@ -271,57 +271,6 @@ struct areatrigger_pri_angelic_feather : AreaTriggerAI } }; -// 391387 - Answered Prayers -class spell_pri_answered_prayers : public AuraScript -{ - bool Validate(SpellInfo const* spellInfo) override - { - return ValidateSpellInfo({ SPELL_PRIEST_ANSWERED_PRAYERS, SPELL_PRIEST_APOTHEOSIS }) - && ValidateSpellEffect({ { spellInfo->Id, EFFECT_1 } }); - } - - void HandleOnProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) const - { - Milliseconds extraDuration = 0ms; - if (AuraEffect const* durationEffect = GetEffect(EFFECT_1)) - extraDuration = Seconds(durationEffect->GetAmount()); - - Unit* target = eventInfo.GetActor(); - - Aura* answeredPrayers = target->GetAura(SPELL_PRIEST_ANSWERED_PRAYERS); - - // Note: if caster has no aura, we must cast it first. - if (!answeredPrayers) - target->CastSpell(target, SPELL_PRIEST_ANSWERED_PRAYERS, TRIGGERED_IGNORE_CAST_IN_PROGRESS); - else - { - // Note: there's no BaseValue dummy that we can use as reference, so we hardcode the increasing stack value. - answeredPrayers->ModStackAmount(1); - - // Note: if current stacks match max. stacks, trigger Apotheosis. - if (answeredPrayers->GetStackAmount() != aurEff->GetAmount()) - return; - - answeredPrayers->Remove(); - - if (Aura* apotheosis = GetTarget()->GetAura(SPELL_PRIEST_APOTHEOSIS)) - { - apotheosis->SetDuration(apotheosis->GetDuration() + extraDuration.count()); - apotheosis->SetMaxDuration(apotheosis->GetMaxDuration() + extraDuration.count()); - } - else - target->CastSpell(target, SPELL_PRIEST_APOTHEOSIS, - CastSpellExtraArgs(TRIGGERED_FULL_MASK & ~TRIGGERED_CAST_DIRECTLY) - .AddSpellMod(SPELLVALUE_DURATION, extraDuration.count())); - } - } - - void Register() override - { - OnEffectProc += AuraEffectProcFn(spell_pri_answered_prayers::HandleOnProc, EFFECT_0, SPELL_AURA_ADD_FLAT_MODIFIER_BY_SPELL_LABEL); - } -}; - // 26169 - Oracle Healing Bonus class spell_pri_aq_3p_bonus : public AuraScript { @@ -2793,7 +2742,6 @@ void AddSC_priest_spell_scripts() RegisterSpellScript(spell_pri_angelic_feather_trigger); RegisterAreaTriggerAI(areatrigger_pri_angelic_feather); RegisterSpellScript(spell_pri_abyssal_reverie); - RegisterSpellScript(spell_pri_answered_prayers); RegisterSpellScript(spell_pri_aq_3p_bonus); RegisterSpellScript(spell_pri_atonement); RegisterSpellScript(spell_pri_atonement_effect); |