diff options
author | Matan Shukry <matanshukry@gmail.com> | 2021-02-23 21:05:39 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-02-23 20:05:39 +0100 |
commit | 2b672d807f82b3ddd12dd15573fb2848692f1318 (patch) | |
tree | cd8698ea35e74b9a8ea6eb96b3ce8f4a4f2d6c80 | |
parent | 03f1d3cedf66711ec375c421ddbb458a9992800b (diff) |
Scripts/Spells: Fix Ferocious Bite damage increase from extra energy (#26093)
-rw-r--r-- | sql/updates/world/master/2021_02_23_00_world_druid_ferocious_bite.sql | 4 | ||||
-rw-r--r-- | src/server/game/Spells/SpellEffects.cpp | 8 | ||||
-rw-r--r-- | src/server/scripts/Spells/spell_druid.cpp | 134 |
3 files changed, 97 insertions, 49 deletions
diff --git a/sql/updates/world/master/2021_02_23_00_world_druid_ferocious_bite.sql b/sql/updates/world/master/2021_02_23_00_world_druid_ferocious_bite.sql new file mode 100644 index 00000000000..12513e5b1eb --- /dev/null +++ b/sql/updates/world/master/2021_02_23_00_world_druid_ferocious_bite.sql @@ -0,0 +1,4 @@ +-- Attach ferocious bite script +DELETE FROM `spell_script_names` WHERE `ScriptName`='spell_dru_ferocious_bite'; +INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES +(22568,'spell_dru_ferocious_bite'); diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp index 58a13257c27..276b1db0f21 100644 --- a/src/server/game/Spells/SpellEffects.cpp +++ b/src/server/game/Spells/SpellEffects.cpp @@ -534,14 +534,6 @@ void Spell::EffectSchoolDMG(SpellEffIndex effIndex) } case SPELLFAMILY_DRUID: { - // Ferocious Bite - if (m_caster->GetTypeId() == TYPEID_PLAYER && m_spellInfo->SpellFamilyFlags[3] & 0x1000) - { - // converts each extra point of energy ( up to 25 energy ) into additional damage - int32 energy = -(m_caster->ModifyPower(POWER_ENERGY, -25)); - // 25 energy = 100% more damage - AddPct(damage, energy * 4); - } break; } case SPELLFAMILY_DEATHKNIGHT: diff --git a/src/server/scripts/Spells/spell_druid.cpp b/src/server/scripts/Spells/spell_druid.cpp index 9f54914c32f..5962c5308e7 100644 --- a/src/server/scripts/Spells/spell_druid.cpp +++ b/src/server/scripts/Spells/spell_druid.cpp @@ -33,47 +33,48 @@ enum DruidSpells { - SPELL_DRUID_BALANCE_T10_BONUS = 70718, - SPELL_DRUID_BALANCE_T10_BONUS_PROC = 70721, - SPELL_DRUID_BLESSING_OF_CENARIUS = 40452, - SPELL_DRUID_BLESSING_OF_ELUNE = 40446, - SPELL_DRUID_BLESSING_OF_REMULOS = 40445, - SPELL_DRUID_BLESSING_OF_THE_CLAW = 28750, - SPELL_DRUID_CAT_FORM = 768, - SPELL_DRUID_EXHILARATE = 28742, - SPELL_DRUID_FERAL_CHARGE_BEAR = 16979, - SPELL_DRUID_FERAL_CHARGE_CAT = 49376, - SPELL_DRUID_FORM_AQUATIC = 1066, - SPELL_DRUID_FORM_FLIGHT = 33943, - SPELL_DRUID_FORM_STAG = 165961, - SPELL_DRUID_FORM_SWIFT_FLIGHT = 40120, - SPELL_DRUID_FORMS_TRINKET_BEAR = 37340, - SPELL_DRUID_FORMS_TRINKET_CAT = 37341, - SPELL_DRUID_FORMS_TRINKET_MOONKIN = 37343, - SPELL_DRUID_FORMS_TRINKET_NONE = 37344, - SPELL_DRUID_FORMS_TRINKET_TREE = 37342, - SPELL_DRUID_GORE_PROC = 93622, - SPELL_DRUID_IDOL_OF_FERAL_SHADOWS = 34241, - SPELL_DRUID_IDOL_OF_WORSHIP = 60774, - SPELL_DRUID_INFUSION = 37238, - SPELL_DRUID_LANGUISH = 71023, - SPELL_DRUID_LIFEBLOOM_ENERGIZE = 64372, - SPELL_DRUID_LIFEBLOOM_FINAL_HEAL = 33778, - SPELL_DRUID_LIVING_SEED_HEAL = 48503, - SPELL_DRUID_LIVING_SEED_PROC = 48504, - SPELL_DRUID_MANGLE = 33917, - SPELL_DRUID_MOONFIRE_DAMAGE = 164812, - SPELL_DRUID_REJUVENATION_T10_PROC = 70691, - SPELL_DRUID_RESTORATION_T10_2P_BONUS = 70658, - SPELL_DRUID_SAVAGE_ROAR = 62071, - SPELL_DRUID_SKULL_BASH_CHARGE = 221514, - SPELL_DRUID_SKULL_BASH_INTERRUPT = 93985, - SPELL_DRUID_STAMPEDE_BAER_RANK_1 = 81016, - SPELL_DRUID_STAMPEDE_CAT_RANK_1 = 81021, - SPELL_DRUID_STAMPEDE_CAT_STATE = 109881, - SPELL_DRUID_SUNFIRE_DAMAGE = 164815, - SPELL_DRUID_SURVIVAL_INSTINCTS = 50322, - SPELL_DRUID_TRAVEL_FORM = 783, + SPELL_DRUID_BALANCE_T10_BONUS = 70718, + SPELL_DRUID_BALANCE_T10_BONUS_PROC = 70721, + SPELL_DRUID_BLESSING_OF_CENARIUS = 40452, + SPELL_DRUID_BLESSING_OF_ELUNE = 40446, + SPELL_DRUID_BLESSING_OF_REMULOS = 40445, + SPELL_DRUID_BLESSING_OF_THE_CLAW = 28750, + SPELL_DRUID_CAT_FORM = 768, + SPELL_DRUID_EXHILARATE = 28742, + SPELL_DRUID_FERAL_CHARGE_BEAR = 16979, + SPELL_DRUID_FERAL_CHARGE_CAT = 49376, + SPELL_DRUID_FORM_AQUATIC = 1066, + SPELL_DRUID_FORM_FLIGHT = 33943, + SPELL_DRUID_FORM_STAG = 165961, + SPELL_DRUID_FORM_SWIFT_FLIGHT = 40120, + SPELL_DRUID_FORMS_TRINKET_BEAR = 37340, + SPELL_DRUID_FORMS_TRINKET_CAT = 37341, + SPELL_DRUID_FORMS_TRINKET_MOONKIN = 37343, + SPELL_DRUID_FORMS_TRINKET_NONE = 37344, + SPELL_DRUID_FORMS_TRINKET_TREE = 37342, + SPELL_DRUID_GORE_PROC = 93622, + SPELL_DRUID_IDOL_OF_FERAL_SHADOWS = 34241, + SPELL_DRUID_IDOL_OF_WORSHIP = 60774, + SPELL_DRUID_INCARNATION_KING_OF_THE_JUNGLE = 102543, + SPELL_DRUID_INFUSION = 37238, + SPELL_DRUID_LANGUISH = 71023, + SPELL_DRUID_LIFEBLOOM_ENERGIZE = 64372, + SPELL_DRUID_LIFEBLOOM_FINAL_HEAL = 33778, + SPELL_DRUID_LIVING_SEED_HEAL = 48503, + SPELL_DRUID_LIVING_SEED_PROC = 48504, + SPELL_DRUID_MANGLE = 33917, + SPELL_DRUID_MOONFIRE_DAMAGE = 164812, + SPELL_DRUID_REJUVENATION_T10_PROC = 70691, + SPELL_DRUID_RESTORATION_T10_2P_BONUS = 70658, + SPELL_DRUID_SAVAGE_ROAR = 62071, + SPELL_DRUID_SKULL_BASH_CHARGE = 221514, + SPELL_DRUID_SKULL_BASH_INTERRUPT = 93985, + SPELL_DRUID_STAMPEDE_BAER_RANK_1 = 81016, + SPELL_DRUID_STAMPEDE_CAT_RANK_1 = 81021, + SPELL_DRUID_STAMPEDE_CAT_STATE = 109881, + SPELL_DRUID_SUNFIRE_DAMAGE = 164815, + SPELL_DRUID_SURVIVAL_INSTINCTS = 50322, + SPELL_DRUID_TRAVEL_FORM = 783, }; class RaidCheck @@ -122,6 +123,56 @@ public: } }; +// 22568 - Ferocious Bite +class spell_dru_ferocious_bite : public SpellScript +{ + PrepareSpellScript(spell_dru_ferocious_bite); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_DRUID_INCARNATION_KING_OF_THE_JUNGLE }) + && sSpellMgr->AssertSpellInfo(SPELL_DRUID_INCARNATION_KING_OF_THE_JUNGLE, DIFFICULTY_NONE)->GetEffect(EFFECT_1); + } + + void HandleHitTargetBurn(SpellEffIndex /*effIndex*/) + { + int32 newValue = int32(float(GetEffectValue()) * _damageMultiplier); + SetEffectValue(newValue); + } + + void HandleHitTargetDmg(SpellEffIndex /*effIndex*/) + { + int32 newValue = int32(float(GetHitDamage()) * (1.0f + _damageMultiplier)); + SetHitDamage(newValue); + } + + void HandleLaunchTarget(SpellEffIndex /*effIndex*/) + { + Unit* caster = GetCaster(); + + int32 maxExtraConsumedPower = GetEffectValue(); + + if (AuraEffect* auraEffect = caster->GetAuraEffect(SPELL_DRUID_INCARNATION_KING_OF_THE_JUNGLE, EFFECT_1)) + { + float multiplier = 1.0f + float(auraEffect->GetAmount()) / 100.0f; + maxExtraConsumedPower = int32(float(maxExtraConsumedPower) * multiplier); + SetEffectValue(maxExtraConsumedPower); + } + + _damageMultiplier = std::min<float>(caster->GetPower(POWER_ENERGY), maxExtraConsumedPower) / maxExtraConsumedPower; + } + + void Register() override + { + OnEffectLaunchTarget += SpellEffectFn(spell_dru_ferocious_bite::HandleLaunchTarget, EFFECT_1, SPELL_EFFECT_POWER_BURN); + OnEffectHitTarget += SpellEffectFn(spell_dru_ferocious_bite::HandleHitTargetBurn, EFFECT_1, SPELL_EFFECT_POWER_BURN); + OnEffectHitTarget += SpellEffectFn(spell_dru_ferocious_bite::HandleHitTargetDmg, EFFECT_0, SPELL_EFFECT_SCHOOL_DAMAGE); + } + +private: + float _damageMultiplier = 0.0f; +}; + // -33943 - Flight Form class spell_dru_flight_form : public SpellScriptLoader { @@ -1568,6 +1619,7 @@ public: void AddSC_druid_spell_scripts() { new spell_dru_dash(); + RegisterSpellScript(spell_dru_ferocious_bite); new spell_dru_flight_form(); new spell_dru_forms_trinket(); RegisterAuraScript(spell_dru_gore); |