aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatan Shukry <matanshukry@gmail.com>2021-02-23 21:05:39 +0200
committerGitHub <noreply@github.com>2021-02-23 20:05:39 +0100
commit2b672d807f82b3ddd12dd15573fb2848692f1318 (patch)
treecd8698ea35e74b9a8ea6eb96b3ce8f4a4f2d6c80
parent03f1d3cedf66711ec375c421ddbb458a9992800b (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.sql4
-rw-r--r--src/server/game/Spells/SpellEffects.cpp8
-rw-r--r--src/server/scripts/Spells/spell_druid.cpp134
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);