diff --git a/data/sql/updates/pending_db_world/rev_1664500389792248200.sql b/data/sql/updates/pending_db_world/rev_1664500389792248200.sql new file mode 100644 index 000000000..155250a7d --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1664500389792248200.sql @@ -0,0 +1,27 @@ +-- +UPDATE `creature_template` SET `AIName`='', `ScriptName`='npc_violet_hold_defense_system' WHERE `entry`=30837; + +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 30837); + +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 and `SourceEntry` IN (57912, 57930, 58152); +INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`SourceId`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionTarget`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`NegativeCondition`,`ErrorType`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES +(13,1,57912,0,0,31,0,3,29425,0,0,0,0,'','Defense System - Arcane Lightning'), +(13,1,57930,0,0,31,0,3,30857,0,0,0,0,'','Defense System - Arcane Lightning'), +(13,1,58152,0,0,31,0,3,30661,0,0,0,0,'','Defense System - Arcane Lightning'), +(13,1,58152,0,1,31,0,3,30662,0,0,0,0,'','Defense System - Arcane Lightning'), +(13,1,58152,0,2,31,0,3,30663,0,0,0,0,'','Defense System - Arcane Lightning'), +(13,1,58152,0,3,31,0,3,30664,0,0,0,0,'','Defense System - Arcane Lightning'), +(13,1,58152,0,4,31,0,3,30665,0,0,0,0,'','Defense System - Arcane Lightning'), +(13,1,58152,0,5,31,0,3,30666,0,0,0,0,'','Defense System - Arcane Lightning'), +(13,1,58152,0,6,31,0,3,30667,0,0,0,0,'','Defense System - Arcane Lightning'), +(13,1,58152,0,7,31,0,3,30668,0,0,0,0,'','Defense System - Arcane Lightning'), +(13,1,58152,0,8,31,0,3,30918,0,0,0,0,'','Defense System - Arcane Lightning'), +(13,1,58152,0,9,31,0,3,30961,0,0,0,0,'','Defense System - Arcane Lightning'), +(13,1,58152,0,10,31,0,3,30962,0,0,0,0,'','Defense System - Arcane Lightning'), +(13,1,58152,0,11,31,0,3,30963,0,0,0,0,'','Defense System - Arcane Lightning'), +(13,1,58152,0,12,31,0,3,31007,0,0,0,0,'','Defense System - Arcane Lightning'), +(13,1,58152,0,13,31,0,3,31008,0,0,0,0,'','Defense System - Arcane Lightning'), +(13,1,58152,0,14,31,0,3,31009,0,0,0,0,'','Defense System - Arcane Lightning'), +(13,1,58152,0,15,31,0,3,31010,0,0,0,0,'','Defense System - Arcane Lightning'), +(13,1,58152,0,16,31,0,3,31118,0,0,0,0,'','Defense System - Arcane Lightning'), +(13,1,58152,0,17,31,0,3,32191,0,0,0,0,'','Defense System - Arcane Lightning'); diff --git a/src/server/scripts/Northrend/VioletHold/violet_hold.cpp b/src/server/scripts/Northrend/VioletHold/violet_hold.cpp index 14c20d02f..72c88e7bc 100644 --- a/src/server/scripts/Northrend/VioletHold/violet_hold.cpp +++ b/src/server/scripts/Northrend/VioletHold/violet_hold.cpp @@ -1184,6 +1184,36 @@ public: } }; +struct npc_violet_hold_defense_system : public ScriptedAI +{ + npc_violet_hold_defense_system(Creature* creature) : ScriptedAI(creature) { } + + void Reset() override + { + DoCast(RAND(SPELL_DEFENSE_SYSTEM_SPAWN_EFFECT, SPELL_DEFENSE_SYSTEM_VISUAL)); + events.ScheduleEvent(EVENT_ARCANE_LIGHTNING, 4s); + events.ScheduleEvent(EVENT_ARCANE_LIGHTNING_INSTAKILL, 4s); + me->DespawnOrUnsummon(7s, 0s); + } + + void UpdateAI(uint32 diff) override + { + events.Update(diff); + + switch (events.ExecuteEvent()) + { + case EVENT_ARCANE_LIGHTNING: + DoCastAOE(RAND(SPELL_ARCANE_LIGHTNING, SPELL_ARCANE_LIGHTNING_VISUAL)); + events.RepeatEvent(2000); + break; + case EVENT_ARCANE_LIGHTNING_INSTAKILL: + DoCastAOE(SPELL_ARCANE_LIGHTNING_INSTAKILL); + events.RepeatEvent(1000); + break; + } + } +}; + void AddSC_violet_hold() { new go_vh_activation_crystal(); @@ -1201,4 +1231,5 @@ void AddSC_violet_hold() new npc_azure_stalker(); new spell_destroy_door_seal(); + RegisterCreatureAI(npc_violet_hold_defense_system); } diff --git a/src/server/scripts/Northrend/VioletHold/violet_hold.h b/src/server/scripts/Northrend/VioletHold/violet_hold.h index 84d3baa14..65d0723d4 100644 --- a/src/server/scripts/Northrend/VioletHold/violet_hold.h +++ b/src/server/scripts/Northrend/VioletHold/violet_hold.h @@ -98,13 +98,16 @@ enum VHWorldStates enum Spells { - SPELL_CONTROL_CRYSTAL_ACTIVATION = 57804, - SPELL_ARCANE_LIGHTNING = 57912, - SPELL_ARCANE_LIGHTNING_VISUAL = 57930, - SPELL_PORTAL_CHANNEL = 58012, - SPELL_DESTROY_DOOR_SEAL = 58040, - SPELL_CYANIGOSA_TRANSFORM = 58668, - SPELL_CYANIGOSA_BLUE_AURA = 45870, + SPELL_CONTROL_CRYSTAL_ACTIVATION = 57804, + SPELL_DEFENSE_SYSTEM_SPAWN_EFFECT = 57886, + SPELL_DEFENSE_SYSTEM_VISUAL = 57887, + SPELL_ARCANE_LIGHTNING = 57912, + SPELL_ARCANE_LIGHTNING_VISUAL = 57930, + SPELL_ARCANE_LIGHTNING_INSTAKILL = 58152, + SPELL_PORTAL_CHANNEL = 58012, + SPELL_DESTROY_DOOR_SEAL = 58040, + SPELL_CYANIGOSA_TRANSFORM = 58668, + SPELL_CYANIGOSA_BLUE_AURA = 45870 }; enum Events @@ -117,6 +120,10 @@ enum Events EVENT_SUMMON_PORTAL, EVENT_CYANIGOSSA_TRANSFORM, EVENT_CYANIGOSA_ATTACK, + + // Event defense system + EVENT_ARCANE_LIGHTNING, + EVENT_ARCANE_LIGHTNING_INSTAKILL }; enum Data