diff --git a/data/sql/updates/pending_db_world/rev_1696582271290131600.sql b/data/sql/updates/pending_db_world/rev_1696582271290131600.sql new file mode 100644 index 000000000..a77254db4 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1696582271290131600.sql @@ -0,0 +1,7 @@ +-- Lord Valthalak's Amulet +DELETE FROM `spell_script_names` WHERE `spell_id`=27360; +INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES (27360, 'spell_gen_valthalak_amulet'); + +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId` = 17 AND `SourceGroup` = 0 AND `SourceEntry` = 27360; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(17, 0, 27360, 0, 0, 29, 0, 16073, 50, 0, 1, 0, 0, '', 'Allow using Lord Valthalak\'s Amulet only if there is no Spirit of Lord Valthalak within 50 yards.'); diff --git a/src/server/game/Spells/SpellInfoCorrections.cpp b/src/server/game/Spells/SpellInfoCorrections.cpp index c3ca283d2..ff52a96b6 100644 --- a/src/server/game/Spells/SpellInfoCorrections.cpp +++ b/src/server/game/Spells/SpellInfoCorrections.cpp @@ -4572,6 +4572,12 @@ void SpellMgr::LoadSpellInfoCorrections() spellInfo->RangeEntry = sSpellRangeStore.LookupEntry(13); // 50000yd }); + // Instill Lord Valthalak's Spirit DND + ApplySpellFix({ 27360 }, [](SpellInfo* spellInfo) + { + spellInfo->ChannelInterruptFlags |= AURA_INTERRUPT_FLAG_MOVE; + }); + for (uint32 i = 0; i < GetSpellInfoStoreSize(); ++i) { SpellInfo* spellInfo = mSpellInfoMap[i]; diff --git a/src/server/scripts/Spells/spell_generic.cpp b/src/server/scripts/Spells/spell_generic.cpp index 299e993b5..548889f95 100644 --- a/src/server/scripts/Spells/spell_generic.cpp +++ b/src/server/scripts/Spells/spell_generic.cpp @@ -4997,6 +4997,32 @@ class spell_gen_spirit_of_competition_winner : public SpellScript } }; +// 27360 - Lord Valthalak's Amulet +enum Valthalak +{ + SPELL_INSTILL_LORD_VALTHALAK_SPIRIT = 27360, + NPC_LORD_VALTHALAK = 16042 +}; + +class spell_gen_valthalak_amulet : public SpellScript +{ + PrepareSpellScript(spell_gen_valthalak_amulet) + + SpellCastResult CheckCast() + { + if (Unit* target = GetExplTargetUnit()) + if (target->GetEntry() == NPC_LORD_VALTHALAK && target->isDead()) + return SPELL_CAST_OK; + + return SPELL_FAILED_BAD_TARGETS; + } + + void Register() override + { + OnCheckCast += SpellCheckCastFn(spell_gen_valthalak_amulet::CheckCast); + } +}; + void AddSC_generic_spell_scripts() { RegisterSpellScript(spell_silithyst); @@ -5145,4 +5171,5 @@ void AddSC_generic_spell_scripts() RegisterSpellScript(spell_gen_curse_of_pain); RegisterSpellScript(spell_gen_spirit_of_competition_participant); RegisterSpellScript(spell_gen_spirit_of_competition_winner); + RegisterSpellScript(spell_gen_valthalak_amulet); }