From 705b8ab50eba78a8df7496bcbf3fdc926cc0a58e Mon Sep 17 00:00:00 2001 From: avarishd <46330494+avarishd@users.noreply.github.com> Date: Wed, 6 Nov 2024 06:28:53 +0200 Subject: [PATCH] fix(Scripts/Item): Obsidian Armor & Frostfire Regalia Set (#20453) --- .../rev_1730834742791547700.sql | 4 + src/server/scripts/Spells/spell_generic.cpp | 109 ++++++++++-------- 2 files changed, 62 insertions(+), 51 deletions(-) create mode 100644 data/sql/updates/pending_db_world/rev_1730834742791547700.sql diff --git a/data/sql/updates/pending_db_world/rev_1730834742791547700.sql b/data/sql/updates/pending_db_world/rev_1730834742791547700.sql new file mode 100644 index 000000000..92f24b725 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1730834742791547700.sql @@ -0,0 +1,4 @@ +-- Obsidian Armor +DELETE FROM `spell_proc_event` WHERE `entry`=27539; +INSERT INTO `spell_proc_event` (`entry`, `SchoolMask`, `SpellFamilyName`, `SpellFamilyMask0`, `SpellFamilyMask1`, `SpellFamilyMask2`, `procFlags`, `procEx`, `procPhase`, `ppmRate`, `CustomChance`, `Cooldown`) VALUES +(27539, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 10000); diff --git a/src/server/scripts/Spells/spell_generic.cpp b/src/server/scripts/Spells/spell_generic.cpp index 2bc3c97c4..cbdf5c4a4 100644 --- a/src/server/scripts/Spells/spell_generic.cpp +++ b/src/server/scripts/Spells/spell_generic.cpp @@ -1210,6 +1210,7 @@ private: uint32 _limit; }; +// 28764 - Adaptive Warding (Frostfire Regalia Set) enum AdaptiveWarding { SPELL_GEN_ADAPTIVE_WARDING_FIRE = 28765, @@ -1219,7 +1220,6 @@ enum AdaptiveWarding SPELL_GEN_ADAPTIVE_WARDING_ARCANE = 28770 }; -// 28764 - Adaptive Warding (Frostfire Regalia Set) class spell_gen_adaptive_warding : public AuraScript { PrepareAuraScript(spell_gen_adaptive_warding); @@ -1245,7 +1245,7 @@ class spell_gen_adaptive_warding : public AuraScript if (!GetTarget()->GetAuraEffect(SPELL_AURA_MOD_MANA_REGEN_INTERRUPT, SPELLFAMILY_MAGE, 0x10000000, 0x0, 0x0)) return false; - switch (GetFirstSchoolInMask(eventInfo.GetSchoolMask())) + switch (GetFirstSchoolInMask(eventInfo.GetSpellInfo()->GetSchoolMask())) { case SPELL_SCHOOL_NORMAL: case SPELL_SCHOOL_HOLY: @@ -1253,6 +1253,7 @@ class spell_gen_adaptive_warding : public AuraScript default: break; } + return true; } @@ -1261,27 +1262,31 @@ class spell_gen_adaptive_warding : public AuraScript PreventDefaultAction(); uint32 spellId = 0; - switch (GetFirstSchoolInMask(eventInfo.GetSchoolMask())) + if (Player* player = eventInfo.GetActionTarget()->ToPlayer()) { - case SPELL_SCHOOL_FIRE: - spellId = SPELL_GEN_ADAPTIVE_WARDING_FIRE; - break; - case SPELL_SCHOOL_NATURE: - spellId = SPELL_GEN_ADAPTIVE_WARDING_NATURE; - break; - case SPELL_SCHOOL_FROST: - spellId = SPELL_GEN_ADAPTIVE_WARDING_FROST; - break; - case SPELL_SCHOOL_SHADOW: - spellId = SPELL_GEN_ADAPTIVE_WARDING_SHADOW; - break; - case SPELL_SCHOOL_ARCANE: - spellId = SPELL_GEN_ADAPTIVE_WARDING_ARCANE; - break; - default: - return; + switch (GetFirstSchoolInMask(eventInfo.GetSpellInfo()->GetSchoolMask())) + { + case SPELL_SCHOOL_FIRE: + spellId = SPELL_GEN_ADAPTIVE_WARDING_FIRE; + break; + case SPELL_SCHOOL_NATURE: + spellId = SPELL_GEN_ADAPTIVE_WARDING_NATURE; + break; + case SPELL_SCHOOL_FROST: + spellId = SPELL_GEN_ADAPTIVE_WARDING_FROST; + break; + case SPELL_SCHOOL_SHADOW: + spellId = SPELL_GEN_ADAPTIVE_WARDING_SHADOW; + break; + case SPELL_SCHOOL_ARCANE: + spellId = SPELL_GEN_ADAPTIVE_WARDING_ARCANE; + break; + default: + return; + } + + player->CastSpell(player, spellId, true, nullptr, aurEff); } - GetTarget()->CastSpell(GetTarget(), spellId, true, nullptr, aurEff); } void Register() override @@ -1564,6 +1569,7 @@ class spell_gen_nightmare_vine : public SpellScript } }; +// 27539 - Obsidian Armor enum ObsidianArmor { SPELL_GEN_OBSIDIAN_ARMOR_HOLY = 27536, @@ -1574,7 +1580,6 @@ enum ObsidianArmor SPELL_GEN_OBSIDIAN_ARMOR_ARCANE = 27540 }; -// 27539 - Obsidian Armor class spell_gen_obsidian_armor : public AuraScript { PrepareAuraScript(spell_gen_obsidian_armor); @@ -1594,52 +1599,54 @@ class spell_gen_obsidian_armor : public AuraScript bool CheckProc(ProcEventInfo& eventInfo) { - if (eventInfo.GetSpellInfo()) - { + if (!eventInfo.GetSpellInfo()) return false; - } - if (GetFirstSchoolInMask(eventInfo.GetSchoolMask()) == SPELL_SCHOOL_NORMAL) + if (GetFirstSchoolInMask(eventInfo.GetSpellInfo()->GetSchoolMask()) == SPELL_SCHOOL_NORMAL) return false; return true; } - void OnProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) + void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) { PreventDefaultAction(); - uint32 spellId = 0; - switch (GetFirstSchoolInMask(eventInfo.GetSchoolMask())) + if (Player* player = eventInfo.GetActionTarget()->ToPlayer()) { - case SPELL_SCHOOL_HOLY: - spellId = SPELL_GEN_OBSIDIAN_ARMOR_HOLY; - break; - case SPELL_SCHOOL_FIRE: - spellId = SPELL_GEN_OBSIDIAN_ARMOR_FIRE; - break; - case SPELL_SCHOOL_NATURE: - spellId = SPELL_GEN_OBSIDIAN_ARMOR_NATURE; - break; - case SPELL_SCHOOL_FROST: - spellId = SPELL_GEN_OBSIDIAN_ARMOR_FROST; - break; - case SPELL_SCHOOL_SHADOW: - spellId = SPELL_GEN_OBSIDIAN_ARMOR_SHADOW; - break; - case SPELL_SCHOOL_ARCANE: - spellId = SPELL_GEN_OBSIDIAN_ARMOR_ARCANE; - break; - default: - return; + uint32 spellId = 0; + switch (GetFirstSchoolInMask(eventInfo.GetSpellInfo()->GetSchoolMask())) + { + case SPELL_SCHOOL_HOLY: + spellId = SPELL_GEN_OBSIDIAN_ARMOR_HOLY; + break; + case SPELL_SCHOOL_FIRE: + spellId = SPELL_GEN_OBSIDIAN_ARMOR_FIRE; + break; + case SPELL_SCHOOL_NATURE: + spellId = SPELL_GEN_OBSIDIAN_ARMOR_NATURE; + break; + case SPELL_SCHOOL_FROST: + spellId = SPELL_GEN_OBSIDIAN_ARMOR_FROST; + break; + case SPELL_SCHOOL_SHADOW: + spellId = SPELL_GEN_OBSIDIAN_ARMOR_SHADOW; + break; + case SPELL_SCHOOL_ARCANE: + spellId = SPELL_GEN_OBSIDIAN_ARMOR_ARCANE; + break; + default: + return; + } + + player->CastSpell(player, spellId, true, nullptr, aurEff); } - GetTarget()->CastSpell(GetTarget(), spellId, true, nullptr, aurEff); } void Register() override { DoCheckProc += AuraCheckProcFn(spell_gen_obsidian_armor::CheckProc); - OnEffectProc += AuraEffectProcFn(spell_gen_obsidian_armor::OnProc, EFFECT_0, SPELL_AURA_DUMMY); + OnEffectProc += AuraEffectProcFn(spell_gen_obsidian_armor::HandleProc, EFFECT_0, SPELL_AURA_DUMMY); } };