Core/Spells: removed spell hack from eclipse system and fixed the eclipse system entirely

This commit is contained in:
Ovalord
2018-01-16 21:21:44 +01:00
parent 21a8784d39
commit 738653de06
3 changed files with 74 additions and 25 deletions

View File

@@ -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);

View File

@@ -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)

View File

@@ -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();