From a327a83a9ef1ac004e647d81999856e1b41c9a17 Mon Sep 17 00:00:00 2001 From: Ovalord <1Don7H4v3@m41L.com> Date: Thu, 11 Jan 2018 00:38:03 +0100 Subject: [PATCH] Core/Spells: * fixed damage for Victory Rush * Victory Rush will now properly remove Victorious on hit * fixed Vengeance for Warrior, Paladin and Death Knights --- .../4.3.4/custom_2018_01_11_00_world.sql | 23 +++++++ src/server/game/Spells/SpellEffects.cpp | 25 +++++--- src/server/scripts/Spells/spell_generic.cpp | 51 ++++++++++++++++ src/server/scripts/Spells/spell_warrior.cpp | 61 +++++++++++-------- 4 files changed, 126 insertions(+), 34 deletions(-) create mode 100644 sql/updates/world/4.3.4/custom_2018_01_11_00_world.sql diff --git a/sql/updates/world/4.3.4/custom_2018_01_11_00_world.sql b/sql/updates/world/4.3.4/custom_2018_01_11_00_world.sql new file mode 100644 index 0000000000..072e2a516c --- /dev/null +++ b/sql/updates/world/4.3.4/custom_2018_01_11_00_world.sql @@ -0,0 +1,23 @@ +-- Warrior spell bonus datas +DELETE FROM `spell_bonus_data` WHERE `entry` IN (34428, 94009, 6343, 12294, 23881, 23922); +INSERT INTO `spell_bonus_data` (`entry`, `direct_bonus`, `dot_bonus`, `ap_bonus`, `ap_dot_bonus`, `comments`) VALUES +(34428, 0, 0, 0, 0, 'Warrior - Victory Rush'), +(94009, 0, 0, 0, 0, 'Warrior - Rend'), +(6343, 0, 0, 0.228, 0, 'Warrior - Thunder Clap'), +(12294, 0, 0, 0.236, 0, 'Warrior - Mortal Strike'), +(23881, 0, 0, -1, 0, 'Warrior - Bloodthirst'), +(23922, 0, 0, 0.6, 0, 'Warrior - Shield Slam'); + +DELETE FROM `spell_script_names` WHERE `ScriptName` IN +('spell_warr_victory_rush', + 'spell_warr_victorious', + 'spell_warr_rend', + 'spell_warr_mortal_strike', + 'spell_gen_vengeance'); + +INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES +(34428, 'spell_warr_victory_rush'), +(94009, 'spell_warr_rend'), +(93098, 'spell_gen_vengeance'), +(93099, 'spell_gen_vengeance'), +(84839, 'spell_gen_vengeance'); diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp index 6d53c0d193..cb638f9775 100644 --- a/src/server/game/Spells/SpellEffects.cpp +++ b/src/server/game/Spells/SpellEffects.cpp @@ -386,16 +386,23 @@ void Spell::EffectSchoolDMG(SpellEffIndex effIndex) } case SPELLFAMILY_WARRIOR: { - // Victory Rush - if (m_spellInfo->Id == 34428) - ApplyPct(damage, m_caster->GetTotalAttackPowerValue(BASE_ATTACK)); - // Shockwave - else if (m_spellInfo->Id == 46968) + switch (m_spellInfo->Id) { - int32 pct = m_caster->CalculateSpellDamage(unitTarget, m_spellInfo, 2); - if (pct > 0) - damage += int32(CalculatePct(m_caster->GetTotalAttackPowerValue(BASE_ATTACK), pct)); - break; + // Victory Rush + case 34428: + { + float coeff = m_spellInfo->Effects[effIndex].BasePoints * 0.01f; + damage = m_caster->GetTotalAttackPowerValue(BASE_ATTACK) * coeff; + break; + } + // Shockwave + case 46968: + { + int32 pct = m_caster->CalculateSpellDamage(unitTarget, m_spellInfo, 2); + if (pct > 0) + damage += int32(CalculatePct(m_caster->GetTotalAttackPowerValue(BASE_ATTACK), pct)); + break; + } } break; } diff --git a/src/server/scripts/Spells/spell_generic.cpp b/src/server/scripts/Spells/spell_generic.cpp index 2f643088eb..e41c73d648 100644 --- a/src/server/scripts/Spells/spell_generic.cpp +++ b/src/server/scripts/Spells/spell_generic.cpp @@ -4535,6 +4535,56 @@ public: } }; +enum Vengeance +{ + SPELL_VENGEANCE_TRIGGERED = 76691 +}; + +// 93098 - 93099 - 84839 - Vengeance +class spell_gen_vengeance : public SpellScriptLoader +{ + public: + spell_gen_vengeance() : SpellScriptLoader("spell_gen_vengeance") { } + + class spell_gen_vengeance_AuraScript : public AuraScript + { + PrepareAuraScript(spell_gen_vengeance_AuraScript); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_VENGEANCE_TRIGGERED }); + } + + void HandleEffectProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) + { + Unit* caster = GetCaster(); + if (!caster) + return; + + PreventDefaultAction(); + uint32 damage = eventInfo.GetDamageInfo()->GetDamage(); + uint32 casterHealth = CalculatePct(caster->GetHealth(), 10); + if (damage > casterHealth) + damage = casterHealth; + + int32 bp = CalculatePct(damage, GetSpellInfo()->Effects[EFFECT_0].BasePoints); + + if (bp) // make sure that we wont cast Vengeance when the damage bonus is 0 + caster->CastCustomSpell(caster, SPELL_VENGEANCE_TRIGGERED, &bp, &bp, NULL, true); + } + + void Register() override + { + OnEffectProc += AuraEffectProcFn(spell_gen_vengeance_AuraScript::HandleEffectProc, EFFECT_0, SPELL_AURA_DUMMY); + } + }; + + AuraScript* GetAuraScript() const override + { + return new spell_gen_vengeance_AuraScript(); + } +}; + void AddSC_generic_spell_scripts() { new spell_gen_absorb0_hitlimit1(); @@ -4639,4 +4689,5 @@ void AddSC_generic_spell_scripts() new spell_gen_blink(); new spell_gen_toxic_blow_dart(); new spell_gen_projectile_goods(); + new spell_gen_vengeance(); } diff --git a/src/server/scripts/Spells/spell_warrior.cpp b/src/server/scripts/Spells/spell_warrior.cpp index 226906c426..31799ee9de 100644 --- a/src/server/scripts/Spells/spell_warrior.cpp +++ b/src/server/scripts/Spells/spell_warrior.cpp @@ -62,6 +62,8 @@ enum WarriorSpells SPELL_WARRIOR_UNRELENTING_ASSAULT_RANK_2 = 46860, SPELL_WARRIOR_UNRELENTING_ASSAULT_TRIGGER_1 = 64849, SPELL_WARRIOR_UNRELENTING_ASSAULT_TRIGGER_2 = 64850, + SPELL_WARRIOR_VICTORIOUS = 32216, + SPELL_WARRIOR_VICTORIOUS_IMPENDING_VICTORY = 82368, SPELL_WARRIOR_VIGILANCE_PROC = 50725, SPELL_WARRIOR_VENGEANCE = 76691 }; @@ -933,33 +935,43 @@ class spell_warr_sword_and_board : public SpellScriptLoader } }; -// 32216 - Victorious -// 82368 - Victorious -class spell_warr_victorious : public SpellScriptLoader +// 34428 - Victory Rush +class spell_warr_victory_rush : public SpellScriptLoader { - public: - spell_warr_victorious() : SpellScriptLoader("spell_warr_victorious") { } +public: + spell_warr_victory_rush() : SpellScriptLoader("spell_warr_victory_rush") { } - class spell_warr_victorious_AuraScript : public AuraScript + class spell_warr_victory_rush_SpellScript : public SpellScript + { + PrepareSpellScript(spell_warr_victory_rush_SpellScript); + + bool Validate(SpellInfo const* /*spellInfo*/) override { - PrepareAuraScript(spell_warr_victorious_AuraScript); - - void HandleEffectProc(AuraEffect const* /*aurEff*/, ProcEventInfo& /*eventInfo*/) - { - PreventDefaultAction(); - GetTarget()->RemoveAura(GetId()); - } - - void Register() override - { - OnEffectProc += AuraEffectProcFn(spell_warr_victorious_AuraScript::HandleEffectProc, EFFECT_0, SPELL_AURA_DUMMY); - } - }; - - AuraScript* GetAuraScript() const override - { - return new spell_warr_victorious_AuraScript(); + return ValidateSpellInfo( + { + SPELL_WARRIOR_VICTORIOUS, + SPELL_WARRIOR_VICTORIOUS_IMPENDING_VICTORY + }); } + + void HandleHit(SpellEffIndex effIndex) + { + GetCaster()->RemoveAurasDueToSpell(SPELL_WARRIOR_VICTORIOUS); + GetCaster()->RemoveAurasDueToSpell(SPELL_WARRIOR_VICTORIOUS_IMPENDING_VICTORY); + SetHitDamage(CalculatePct(GetCaster()->GetTotalAttackPowerValue(BASE_ATTACK), GetEffectValue())); + } + + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_warr_victory_rush_SpellScript::HandleHit, EFFECT_0, SPELL_EFFECT_SCHOOL_DAMAGE); + } + }; + + SpellScript* GetSpellScript() const override + { + return new spell_warr_victory_rush_SpellScript(); + } + }; // 50720 - Vigilance @@ -1098,7 +1110,6 @@ class spell_warr_strikes_of_opportunity : public SpellScriptLoader } }; - void AddSC_warrior_spell_scripts() { new spell_warr_bloodthirst(); @@ -1124,7 +1135,7 @@ void AddSC_warrior_spell_scripts() new spell_warr_sudden_death(); new spell_warr_sweeping_strikes(); new spell_warr_sword_and_board(); - new spell_warr_victorious(); + new spell_warr_victory_rush(); new spell_warr_vigilance(); new spell_warr_vigilance_trigger(); }