From 738653de06df3f91e01acf712f4693bf3d37911f Mon Sep 17 00:00:00 2001 From: Ovalord <1Don7H4v3@m41L.com> Date: Tue, 16 Jan 2018 21:21:44 +0100 Subject: [PATCH] Core/Spells: removed spell hack from eclipse system and fixed the eclipse system entirely --- .../4.3.4/custom_2018_01_16_00_world.sql | 7 ++ src/server/game/Spells/SpellMgr.cpp | 10 --- src/server/scripts/Spells/spell_druid.cpp | 82 +++++++++++++++---- 3 files changed, 74 insertions(+), 25 deletions(-) create mode 100644 sql/updates/world/4.3.4/custom_2018_01_16_00_world.sql diff --git a/sql/updates/world/4.3.4/custom_2018_01_16_00_world.sql b/sql/updates/world/4.3.4/custom_2018_01_16_00_world.sql new file mode 100644 index 00000000000..0af9a5f9e0c --- /dev/null +++ b/sql/updates/world/4.3.4/custom_2018_01_16_00_world.sql @@ -0,0 +1,7 @@ +DELETE FROM `spell_script_names` WHERE `ScriptName`= 'spell_dru_eclipse_mastery_driver_passive'; +INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES +(79577, 'spell_dru_eclipse_mastery_driver_passive'); + +DELETE FROM `spell_proc` WHERE `SpellID`= 79577; +INSERT INTO `spell_proc` (`SpellID`, `SpellFamilyName`, `SpellFamilyMask0`, `ProcFlags`, `SpellTypeMask`, `SpellPhaseMask`) VALUES +(79577, 0, 0, 0x00010000, 1, 1); diff --git a/src/server/game/Spells/SpellMgr.cpp b/src/server/game/Spells/SpellMgr.cpp index 33c2f6c70af..d77af693a7c 100644 --- a/src/server/game/Spells/SpellMgr.cpp +++ b/src/server/game/Spells/SpellMgr.cpp @@ -3251,16 +3251,6 @@ void SpellMgr::LoadSpellInfoCorrections() spellInfo->Effects[EFFECT_0].SpellClassMask = flag96(0x00067801, 0x10820001, 0x00000801); }); - ApplySpellFix({ - 5176, // Wrath - 2912, // Starfire - 78674 // Starsurge - }, [](SpellInfo* spellInfo) - { - spellInfo->Effects[EFFECT_1].Effect = SPELL_EFFECT_DUMMY; - spellInfo->Effects[EFFECT_1].TargetA = TARGET_UNIT_CASTER; - }); - ApplySpellFix({ 70728, // Exploit Weakness (needs target selection script) 70840 // Devious Minds (needs target selection script) diff --git a/src/server/scripts/Spells/spell_druid.cpp b/src/server/scripts/Spells/spell_druid.cpp index e5e44543abd..cb00dec0348 100644 --- a/src/server/scripts/Spells/spell_druid.cpp +++ b/src/server/scripts/Spells/spell_druid.cpp @@ -178,54 +178,65 @@ class spell_dru_eclipse_energize : public SpellScriptLoader { case SPELL_DRUID_WRATH: { - energizeAmount = -GetSpellInfo()->Effects[effIndex].BasePoints; // -13 - // If we are set to fill the lunar side or we've just logged in with 0 power.. + energizeAmount = -GetSpellInfo()->Effects[EFFECT_1].BasePoints; // -13 + + // If we are currently having the lunar eclipse marker running or start with 0 power after login if ((!caster->HasAura(SPELL_DRUID_SOLAR_ECLIPSE_MARKER) && caster->HasAura(SPELL_DRUID_LUNAR_ECLIPSE_MARKER)) - || caster->GetPower(POWER_ECLIPSE) == 0) + || (!caster->HasAura(SPELL_DRUID_SOLAR_ECLIPSE_MARKER) && caster->GetPower(POWER_ECLIPSE) == 0) + || caster->HasAura(SPELL_DRUID_SOLAR_ECLIPSE)) { caster->CastCustomSpell(caster, SPELL_DRUID_ECLIPSE_GENERAL_ENERGIZE, &energizeAmount, 0, 0, true); - // If the energize was due to 0 power, cast the eclipse marker aura - if (!caster->HasAura(SPELL_DRUID_LUNAR_ECLIPSE_MARKER)) + if (!caster->HasAura(SPELL_DRUID_LUNAR_ECLIPSE_MARKER) || caster->HasAura(SPELL_DRUID_SOLAR_ECLIPSE)) caster->CastSpell(caster, SPELL_DRUID_LUNAR_ECLIPSE_MARKER, true); } + // The energizing effect brought us out of the solar eclipse, remove the aura if (caster->HasAura(SPELL_DRUID_SOLAR_ECLIPSE) && caster->GetPower(POWER_ECLIPSE) <= 0) + { caster->RemoveAurasDueToSpell(SPELL_DRUID_SOLAR_ECLIPSE); + caster->RemoveAurasDueToSpell(SPELL_DRUID_SOLAR_ECLIPSE_MARKER); + } break; } case SPELL_DRUID_STARFIRE: { - energizeAmount = GetSpellInfo()->Effects[effIndex].BasePoints; // 20 - // If we are set to fill the solar side or we've just logged in with 0 power.. + energizeAmount = GetSpellInfo()->Effects[EFFECT_1].BasePoints; // 20 + + // If we are currently having the solar eclipse marker running or start with 0 power after login if ((!caster->HasAura(SPELL_DRUID_LUNAR_ECLIPSE_MARKER) && caster->HasAura(SPELL_DRUID_SOLAR_ECLIPSE_MARKER)) - || caster->GetPower(POWER_ECLIPSE) == 0) + || (!caster->HasAura(SPELL_DRUID_LUNAR_ECLIPSE_MARKER) && caster->GetPower(POWER_ECLIPSE) == 0) + || caster->HasAura(SPELL_DRUID_LUNAR_ECLIPSE)) { caster->CastCustomSpell(caster, SPELL_DRUID_ECLIPSE_GENERAL_ENERGIZE, &energizeAmount, 0, 0, true); - // If the energize was due to 0 power, cast the eclipse marker aura - if (!caster->HasAura(SPELL_DRUID_SOLAR_ECLIPSE_MARKER)) + if (!caster->HasAura(SPELL_DRUID_SOLAR_ECLIPSE_MARKER) || caster->HasAura(SPELL_DRUID_LUNAR_ECLIPSE)) caster->CastSpell(caster, SPELL_DRUID_SOLAR_ECLIPSE_MARKER, true); } + // The energizing effect brought us out of the lunar eclipse, remove the aura if (caster->HasAura(SPELL_DRUID_LUNAR_ECLIPSE) && caster->GetPower(POWER_ECLIPSE) >= 0) + { caster->RemoveAura(SPELL_DRUID_LUNAR_ECLIPSE); + caster->RemoveAurasDueToSpell(SPELL_DRUID_LUNAR_ECLIPSE_MARKER); + } break; } case SPELL_DRUID_STARSURGE: { // If we are set to fill the solar side or we've just logged in with 0 power (confirmed with sniffs) if ((!caster->HasAura(SPELL_DRUID_LUNAR_ECLIPSE_MARKER) && caster->HasAura(SPELL_DRUID_SOLAR_ECLIPSE_MARKER)) - || caster->GetPower(POWER_ECLIPSE) == 0) + || caster->GetPower(POWER_ECLIPSE) == 0 || caster->HasAura(SPELL_DRUID_LUNAR_ECLIPSE)) { - energizeAmount = GetSpellInfo()->Effects[effIndex].BasePoints; // 15 + energizeAmount = GetSpellInfo()->Effects[EFFECT_1].BasePoints; // 15 caster->CastCustomSpell(caster, SPELL_DRUID_STARSURGE_ENERGIZE, &energizeAmount, 0, 0, true); // If the energize was due to 0 power, cast the eclipse marker aura if (!caster->HasAura(SPELL_DRUID_SOLAR_ECLIPSE_MARKER)) caster->CastSpell(caster, SPELL_DRUID_SOLAR_ECLIPSE_MARKER, true); } - else if (!caster->HasAura(SPELL_DRUID_SOLAR_ECLIPSE_MARKER) && caster->HasAura(SPELL_DRUID_LUNAR_ECLIPSE_MARKER)) + else if (!caster->HasAura(SPELL_DRUID_SOLAR_ECLIPSE_MARKER) && caster->HasAura(SPELL_DRUID_LUNAR_ECLIPSE_MARKER) || + caster->HasAura(SPELL_DRUID_SOLAR_ECLIPSE)) { - energizeAmount = -GetSpellInfo()->Effects[effIndex].BasePoints; // -15 + energizeAmount = -GetSpellInfo()->Effects[EFFECT_1].BasePoints; // -15 caster->CastCustomSpell(caster, SPELL_DRUID_STARSURGE_ENERGIZE, &energizeAmount, 0, 0, true); } // The energizing effect brought us out of the lunar eclipse, remove the aura @@ -241,7 +252,7 @@ class spell_dru_eclipse_energize : public SpellScriptLoader void Register() override { - OnEffectHitTarget += SpellEffectFn(spell_dru_eclipse_energize_SpellScript::HandleEnergize, EFFECT_1, SPELL_EFFECT_DUMMY); + OnEffectLaunchTarget += SpellEffectFn(spell_dru_eclipse_energize_SpellScript::HandleEnergize, EFFECT_0, SPELL_EFFECT_SCHOOL_DAMAGE); } }; @@ -251,6 +262,46 @@ class spell_dru_eclipse_energize : public SpellScriptLoader } }; +// 79577 - Eclipse Mastery Passive Driver +class spell_dru_eclipse_mastery_driver_passive : public SpellScriptLoader +{ + public: + spell_dru_eclipse_mastery_driver_passive() : SpellScriptLoader("spell_dru_eclipse_mastery_driver_passive") { } + + class spell_dru_eclipse_mastery_driver_passive_AuraScript : public AuraScript + { + PrepareAuraScript(spell_dru_eclipse_mastery_driver_passive_AuraScript); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo( + { + SPELL_DRUID_LUNAR_ECLIPSE, + SPELL_DRUID_SOLAR_ECLIPSE + }); + } + + bool CheckProc(ProcEventInfo& /*eventInfo*/) + { + if (Unit* caster = GetOwner()->ToUnit()) + if (!caster->HasAura(SPELL_DRUID_LUNAR_ECLIPSE) && !caster->HasAura(SPELL_DRUID_SOLAR_ECLIPSE)) + return true; + + return false; + } + + void Register() override + { + DoCheckProc += AuraCheckProcFn(spell_dru_eclipse_mastery_driver_passive_AuraScript::CheckProc); + } + }; + + AuraScript* GetAuraScript() const override + { + return new spell_dru_eclipse_mastery_driver_passive_AuraScript(); + } +}; + // 5229 - Enrage class spell_dru_enrage : public SpellScriptLoader { @@ -1305,6 +1356,7 @@ void AddSC_druid_spell_scripts() new spell_dru_eclipse("spell_dru_eclipse_lunar"); new spell_dru_eclipse("spell_dru_eclipse_solar"); new spell_dru_eclipse_energize(); + new spell_dru_eclipse_mastery_driver_passive(); new spell_dru_enrage(); new spell_dru_glyph_of_innervate(); new spell_dru_glyph_of_starfire();