From 0ea8579f9006a8efef0e056e03fd0e3433f9d957 Mon Sep 17 00:00:00 2001 From: Crypticaz Date: Sat, 18 Jun 2022 19:30:05 -0500 Subject: [PATCH 1/7] Fix lifebloom transfer & stack move - Lifebloom now properly transfers stacks from previous target and removes aura as well. --- src/server/scripts/Spells/spell_druid.cpp | 39 +++++++++++++++++++++-- 1 file changed, 37 insertions(+), 2 deletions(-) diff --git a/src/server/scripts/Spells/spell_druid.cpp b/src/server/scripts/Spells/spell_druid.cpp index d13b0ace85a..94290c2acbb 100644 --- a/src/server/scripts/Spells/spell_druid.cpp +++ b/src/server/scripts/Spells/spell_druid.cpp @@ -47,6 +47,7 @@ enum DruidSpells SPELL_DRUID_INCREASED_MOONFIRE_DURATION = 38414, SPELL_DRUID_LIFEBLOOM_ENERGIZE = 64372, SPELL_DRUID_LIFEBLOOM_FINAL_HEAL = 33778, + SPELL_DRUID_LIFEBLOOM = 33763, SPELL_DRUID_LIVING_SEED_HEAL = 48503, SPELL_DRUID_LIVING_SEED_PROC = 48504, SPELL_DRUID_NATURES_GRACE = 16880, @@ -410,14 +411,14 @@ class spell_dru_lifebloom : public SpellScriptLoader { PrepareAuraScript(spell_dru_lifebloom_AuraScript); - bool Validate(SpellInfo const* /*spell*/) override + /*bool Validate(SpellInfo const* spell) override { if (!sSpellMgr->GetSpellInfo(SPELL_DRUID_LIFEBLOOM_FINAL_HEAL)) return false; if (!sSpellMgr->GetSpellInfo(SPELL_DRUID_LIFEBLOOM_ENERGIZE)) return false; return true; - } + }*/ void AfterRemove(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/) { @@ -439,6 +440,39 @@ class spell_dru_lifebloom : public SpellScriptLoader GetTarget()->CastCustomSpell(GetTarget(), SPELL_DRUID_LIFEBLOOM_FINAL_HEAL, &healAmount, NULL, NULL, true, NULL, aurEff, GetCasterGUID()); } + // Lifebloom is considered a single target spell, however it is missing the attribute in DBC so single target is handled here. + void OnApply(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/) + { + if (Unit* caster = GetCaster()) + { + if (Unit* unitTarget = GetTarget()) + { + Aura* aura = unitTarget->GetAura(SPELL_DRUID_LIFEBLOOM); + // lets keep track of applied auras + Unit::AuraList& appliedAuras = caster->GetSingleCastAuras(); + for (Unit::AuraList::iterator iter = appliedAuras.begin(); iter != appliedAuras.end();) + { + if ((*iter) != unitTarget->GetAura(SPELL_DRUID_LIFEBLOOM)) + { + uint32 stackAmount = (*iter)->GetStackAmount(); + aura->SetStackAmount(stackAmount); + (*iter)->Remove(); + iter = appliedAuras.begin(); + } + else + ++iter; + } + + if (caster->GetSingleCastAuras().empty()) + { + // set single target in aura so it's properly removed from list when unapplying + aura->SetIsSingleTarget(true); + caster->GetSingleCastAuras().push_back(aura); + } + } + } + } + void HandleDispel(DispelInfo* dispelInfo) { if (Unit* target = GetUnitOwner()) @@ -463,6 +497,7 @@ class spell_dru_lifebloom : public SpellScriptLoader { AfterEffectRemove += AuraEffectRemoveFn(spell_dru_lifebloom_AuraScript::AfterRemove, EFFECT_1, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); AfterDispel += AuraDispelFn(spell_dru_lifebloom_AuraScript::HandleDispel); + OnEffectApply += AuraEffectApplyFn(spell_dru_lifebloom_AuraScript::OnApply, EFFECT_1, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); } }; From 927455de29b6bed3df0a33104232b623af11c548 Mon Sep 17 00:00:00 2001 From: Crypticaz Date: Sat, 18 Jun 2022 22:13:41 -0500 Subject: [PATCH 2/7] fix (Core/Spells) tiger's fury - Fix casting out of cat form - Fix casting with berserk --- sql/updates/world/2022_06_18_00_world.sql | 2 + src/server/scripts/Spells/spell_druid.cpp | 49 ++++++++++++++++++++++- 2 files changed, 50 insertions(+), 1 deletion(-) create mode 100644 sql/updates/world/2022_06_18_00_world.sql diff --git a/sql/updates/world/2022_06_18_00_world.sql b/sql/updates/world/2022_06_18_00_world.sql new file mode 100644 index 00000000000..b2532345e6d --- /dev/null +++ b/sql/updates/world/2022_06_18_00_world.sql @@ -0,0 +1,2 @@ +DELETE FROM `spell_script_names` WHERE `spell_id`=5217 AND `ScriptName`='spell_dru_tigers_fury'; +INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES (5217, 'spell_dru_tigers_fury'); \ No newline at end of file diff --git a/src/server/scripts/Spells/spell_druid.cpp b/src/server/scripts/Spells/spell_druid.cpp index 94290c2acbb..6b29bbeb8a5 100644 --- a/src/server/scripts/Spells/spell_druid.cpp +++ b/src/server/scripts/Spells/spell_druid.cpp @@ -58,10 +58,56 @@ enum DruidSpells SPELL_DRUID_STAMPEDE_BAER_RANK_1 = 81016, SPELL_DRUID_STAMPEDE_CAT_RANK_1 = 81021, SPELL_DRUID_STAMPEDE_CAT_STATE = 109881, + SPELL_DRUID_BERSERK_AURA = 106951, SPELL_DRUID_TIGER_S_FURY_ENERGIZE = 51178, SPELL_DRUID_BEAR_FORM = 5487, }; +// 5217 - Tiger's Fury +class spell_dru_tigers_fury : public SpellScriptLoader +{ +public: + spell_dru_tigers_fury() : SpellScriptLoader("spell_dru_tigers_fury") { } + + class spell_dru_tigers_fury_SpellScript : public SpellScript + { + PrepareSpellScript(spell_dru_tigers_fury_SpellScript); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + if (!sSpellMgr->GetSpellInfo(SPELL_DRUID_BERSERK_AURA)) + return false; + return true; + } + + SpellCastResult CheckCast() + { + if (Unit* caster = GetCaster()) + { + if (caster->GetShapeshiftForm() != FORM_CAT) + { + SetCustomCastResultMessage(SPELL_CUSTOM_ERROR_MUST_BE_IN_CAT_FORM); + return SpellCastResult::SPELL_FAILED_CUSTOM_ERROR; + } + + if (caster->HasAura(SPELL_DRUID_BERSERK_AURA)) + return SpellCastResult::SPELL_FAILED_DONT_REPORT; + } + return SpellCastResult::SPELL_CAST_OK; + } + + void Register() override + { + OnCheckCast += SpellCheckCastFn(spell_dru_tigers_fury_SpellScript::CheckCast); + } + }; + + SpellScript* GetSpellScript() const + { + return new spell_dru_tigers_fury_SpellScript(); + } +}; + // 1850 - Dash class spell_dru_dash : public SpellScriptLoader { @@ -1020,6 +1066,7 @@ class spell_dru_t10_restoration_4p_bonus : public SpellScriptLoader void AddSC_druid_spell_scripts() { + new spell_dru_tigers_fury(); new spell_dru_dash(); new spell_dru_eclipse("spell_dru_eclipse_lunar"); new spell_dru_eclipse("spell_dru_eclipse_solar"); @@ -1040,4 +1087,4 @@ void AddSC_druid_spell_scripts() new spell_dru_survival_instincts(); new spell_dru_swift_flight_passive(); new spell_dru_t10_restoration_4p_bonus(); -} +} \ No newline at end of file From ad6b2ecde2410f591bda3218c674f68597d3318a Mon Sep 17 00:00:00 2001 From: Crypticaz Date: Sun, 19 Jun 2022 18:34:55 -0500 Subject: [PATCH 3/7] Lifebloom DB update --- sql/updates/world/2022_06_19_00_world.sql | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 sql/updates/world/2022_06_19_00_world.sql diff --git a/sql/updates/world/2022_06_19_00_world.sql b/sql/updates/world/2022_06_19_00_world.sql new file mode 100644 index 00000000000..a1c961257c4 --- /dev/null +++ b/sql/updates/world/2022_06_19_00_world.sql @@ -0,0 +1,2 @@ +DELETE FROM `spell_script_names` WHERE `spell_id`=33763 AND `ScriptName`='spell_dru_lifebloom'; +INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES (33763, 'spell_dru_lifebloom'); From e006daf6ba56afa1736334be16716dbe9f2b7369 Mon Sep 17 00:00:00 2001 From: Crypticaz Date: Sun, 19 Jun 2022 18:39:46 -0500 Subject: [PATCH 4/7] Add back validate hook for lifebloom and remove unused spell --- src/server/scripts/Spells/spell_druid.cpp | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/src/server/scripts/Spells/spell_druid.cpp b/src/server/scripts/Spells/spell_druid.cpp index 6b29bbeb8a5..96f1ce9d601 100644 --- a/src/server/scripts/Spells/spell_druid.cpp +++ b/src/server/scripts/Spells/spell_druid.cpp @@ -45,7 +45,6 @@ enum DruidSpells SPELL_DRUID_GLYPH_OF_INNERVATE = 54833, SPELL_DRUID_GLYPH_OF_STARFIRE = 54846, SPELL_DRUID_INCREASED_MOONFIRE_DURATION = 38414, - SPELL_DRUID_LIFEBLOOM_ENERGIZE = 64372, SPELL_DRUID_LIFEBLOOM_FINAL_HEAL = 33778, SPELL_DRUID_LIFEBLOOM = 33763, SPELL_DRUID_LIVING_SEED_HEAL = 48503, @@ -457,14 +456,12 @@ class spell_dru_lifebloom : public SpellScriptLoader { PrepareAuraScript(spell_dru_lifebloom_AuraScript); - /*bool Validate(SpellInfo const* spell) override + bool Validate(SpellInfo const* spell) override { if (!sSpellMgr->GetSpellInfo(SPELL_DRUID_LIFEBLOOM_FINAL_HEAL)) return false; - if (!sSpellMgr->GetSpellInfo(SPELL_DRUID_LIFEBLOOM_ENERGIZE)) - return false; return true; - }*/ + } void AfterRemove(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/) { From bad9e818b4dd35abc321449fae49e9b588969ad3 Mon Sep 17 00:00:00 2001 From: Crypticaz Date: Sun, 19 Jun 2022 18:06:03 -0500 Subject: [PATCH 5/7] Fix (Core/Spells) dash applied outside cat form --- src/server/game/Spells/Auras/SpellAuraEffects.cpp | 5 +++++ src/server/scripts/Spells/spell_druid.cpp | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp index 9393271416b..de1f1bece84 100644 --- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp +++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp @@ -1845,6 +1845,11 @@ void AuraEffect::HandleAuraModShapeshift(AuraApplication const* aurApp, uint8 mo if (target->getClass() == CLASS_DRUID) { + + // Dash + if (AuraEffect* aurEff = target->GetAuraEffect(SPELL_AURA_MOD_SPEED_ALWAYS, SPELLFAMILY_DRUID, 0, 0, 0x8)) + aurEff->RecalculateAmount(); + // Disarm handling // If druid shifts while being disarmed we need to deal with that since forms aren't affected by disarm // and also HandleAuraModDisarm is not triggered diff --git a/src/server/scripts/Spells/spell_druid.cpp b/src/server/scripts/Spells/spell_druid.cpp index 96f1ce9d601..29a73c61c03 100644 --- a/src/server/scripts/Spells/spell_druid.cpp +++ b/src/server/scripts/Spells/spell_druid.cpp @@ -126,7 +126,7 @@ class spell_dru_dash : public SpellScriptLoader void Register() override { - DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_dru_dash_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_MOD_INCREASE_SPEED); + DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_dru_dash_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_MOD_SPEED_ALWAYS); } }; From e5b8f0c2422a7ecd125d1ea652c94c24630b62a8 Mon Sep 17 00:00:00 2001 From: Crypticaz Date: Sun, 19 Jun 2022 18:11:01 -0500 Subject: [PATCH 6/7] Core/Spells - Move dash to catform to aura script --- sql/updates/world/2022_06_20_00_world.sql | 2 ++ src/server/game/Spells/Auras/SpellAuras.cpp | 1 - src/server/scripts/Spells/spell_druid.cpp | 22 +++++++++++++++++++++ 3 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 sql/updates/world/2022_06_20_00_world.sql diff --git a/sql/updates/world/2022_06_20_00_world.sql b/sql/updates/world/2022_06_20_00_world.sql new file mode 100644 index 00000000000..51e4f2896ff --- /dev/null +++ b/sql/updates/world/2022_06_20_00_world.sql @@ -0,0 +1,2 @@ +DELETE FROM `spell_script_names` WHERE `spell_id`=1850 AND `ScriptName`='spell_dru_dash'; +INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES (1850, 'spell_dru_dash'); diff --git a/src/server/game/Spells/Auras/SpellAuras.cpp b/src/server/game/Spells/Auras/SpellAuras.cpp index 7af8f8f38ef..676cae41b5c 100644 --- a/src/server/game/Spells/Auras/SpellAuras.cpp +++ b/src/server/game/Spells/Auras/SpellAuras.cpp @@ -1240,7 +1240,6 @@ void Aura::HandleAuraSpecificMods(AuraApplication const* aurApp, Unit* caster, b switch (m_spellInfo->Id) { - case 1850: // Dash case 137452: // Displacer Beast case 5215: // Prowl { diff --git a/src/server/scripts/Spells/spell_druid.cpp b/src/server/scripts/Spells/spell_druid.cpp index 29a73c61c03..dccf163b24c 100644 --- a/src/server/scripts/Spells/spell_druid.cpp +++ b/src/server/scripts/Spells/spell_druid.cpp @@ -60,6 +60,7 @@ enum DruidSpells SPELL_DRUID_BERSERK_AURA = 106951, SPELL_DRUID_TIGER_S_FURY_ENERGIZE = 51178, SPELL_DRUID_BEAR_FORM = 5487, + SPELL_DRUID_CAT_FORM = 768, }; // 5217 - Tiger's Fury @@ -117,16 +118,37 @@ class spell_dru_dash : public SpellScriptLoader { PrepareAuraScript(spell_dru_dash_AuraScript); + bool Validate(SpellInfo const* /*spellInfo*/) override + { + if (!sSpellMgr->GetSpellInfo(SPELL_DRUID_CAT_FORM)) + return false; + return true; + } + + void OnApply(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/) + { + if (Unit* caster = GetCaster()) + { + if (!caster->HasAura(SPELL_DRUID_CAT_FORM)) + { + caster->CastSpell(caster, SPELL_DRUID_CAT_FORM, true); + } + } + } + void CalculateAmount(AuraEffect const* /*aurEff*/, int32& amount, bool& /*canBeRecalculated*/) { // do not set speed if not in cat form if (GetUnitOwner()->GetShapeshiftForm() != FORM_CAT) + { amount = 0; + } } void Register() override { DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_dru_dash_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_MOD_SPEED_ALWAYS); + OnEffectApply += AuraEffectApplyFn(spell_dru_dash_AuraScript::OnApply, EFFECT_0, SPELL_AURA_MOD_SPEED_ALWAYS, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK); } }; From 326f0d2c3d410a1edc85192eea0d4d78933fd746 Mon Sep 17 00:00:00 2001 From: Crypticaz Date: Sun, 19 Jun 2022 18:17:36 -0500 Subject: [PATCH 7/7] Reorganize druid script file --- src/server/scripts/Spells/spell_druid.cpp | 30 +++++++++++------------ 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/src/server/scripts/Spells/spell_druid.cpp b/src/server/scripts/Spells/spell_druid.cpp index dccf163b24c..210078d3fc6 100644 --- a/src/server/scripts/Spells/spell_druid.cpp +++ b/src/server/scripts/Spells/spell_druid.cpp @@ -31,36 +31,36 @@ enum DruidSpells { - SPELL_DRUID_WRATH = 5176, - SPELL_DRUID_STARFIRE = 2912, - SPELL_DRUID_STARSURGE = 78674, + SPELL_DRUID_BEAR_FORM = 5487, + SPELL_DRUID_BERSERK_AURA = 106951, + SPELL_DRUID_CAT_FORM = 768, SPELL_DRUID_ECLIPSE_GENERAL_ENERGIZE = 89265, - SPELL_DRUID_STARSURGE_ENERGIZE = 86605, - SPELL_DRUID_LUNAR_ECLIPSE_MARKER = 67484, // Will make the yellow arrow on eclipse bar point to the blue side (lunar) - SPELL_DRUID_SOLAR_ECLIPSE_MARKER = 67483, // Will make the yellow arrow on eclipse bar point to the yellow side (solar) - SPELL_DRUID_SOLAR_ECLIPSE = 48517, - SPELL_DRUID_LUNAR_ECLIPSE = 48518, SPELL_DRUID_FERAL_CHARGE_BEAR = 16979, SPELL_DRUID_FERAL_CHARGE_CAT = 49376, SPELL_DRUID_GLYPH_OF_INNERVATE = 54833, SPELL_DRUID_GLYPH_OF_STARFIRE = 54846, SPELL_DRUID_INCREASED_MOONFIRE_DURATION = 38414, - SPELL_DRUID_LIFEBLOOM_FINAL_HEAL = 33778, SPELL_DRUID_LIFEBLOOM = 33763, + SPELL_DRUID_LIFEBLOOM_FINAL_HEAL = 33778, SPELL_DRUID_LIVING_SEED_HEAL = 48503, SPELL_DRUID_LIVING_SEED_PROC = 48504, + SPELL_DRUID_LUNAR_ECLIPSE = 48518, + SPELL_DRUID_LUNAR_ECLIPSE_MARKER = 67484, // Will make the yellow arrow on eclipse bar point to the blue side (lunar) SPELL_DRUID_NATURES_GRACE = 16880, SPELL_DRUID_NATURES_GRACE_TRIGGER = 16886, + SPELL_DRUID_WRATH = 5176, + SPELL_DRUID_STARFIRE = 2912, + SPELL_DRUID_STARSURGE = 78674, + SPELL_DRUID_STARSURGE_ENERGIZE = 86605, + SPELL_DRUID_SOLAR_ECLIPSE_MARKER = 67483, // Will make the yellow arrow on eclipse bar point to the yellow side (solar) + SPELL_DRUID_SOLAR_ECLIPSE = 48517, SPELL_DRUID_SURVIVAL_INSTINCTS = 50322, SPELL_DRUID_SAVAGE_ROAR = 52610, SPELL_DRUID_SAVAGE_ROAR_TRIGGER = 62071, SPELL_DRUID_STAMPEDE_BAER_RANK_1 = 81016, SPELL_DRUID_STAMPEDE_CAT_RANK_1 = 81021, - SPELL_DRUID_STAMPEDE_CAT_STATE = 109881, - SPELL_DRUID_BERSERK_AURA = 106951, - SPELL_DRUID_TIGER_S_FURY_ENERGIZE = 51178, - SPELL_DRUID_BEAR_FORM = 5487, - SPELL_DRUID_CAT_FORM = 768, + SPELL_DRUID_STAMPEDE_CAT_STATE = 109881, + SPELL_DRUID_TIGER_S_FURY_ENERGIZE = 51178, }; // 5217 - Tiger's Fury @@ -1085,7 +1085,6 @@ class spell_dru_t10_restoration_4p_bonus : public SpellScriptLoader void AddSC_druid_spell_scripts() { - new spell_dru_tigers_fury(); new spell_dru_dash(); new spell_dru_eclipse("spell_dru_eclipse_lunar"); new spell_dru_eclipse("spell_dru_eclipse_solar"); @@ -1105,5 +1104,6 @@ void AddSC_druid_spell_scripts() new spell_dru_stampede(); new spell_dru_survival_instincts(); new spell_dru_swift_flight_passive(); + new spell_dru_tigers_fury(); new spell_dru_t10_restoration_4p_bonus(); } \ No newline at end of file