1515 * with this program. If not, see <http://www.gnu.org/licenses/>.
1616 */
1717
18+ /*
19+ * Chain Lightning repeat timer requires to be revisited
20+ * The way he casts shocks is quite tricky, requires research and proper implementation. He can cast all 4 shocks in a row with 1 sec
21+ delay between shocks in normal (sniff) and heroic (video). At the same time he can cast shocks with bigger delays(too short sniff).
22+ Looks like he can't cast same shock more than once per 'wave'. Looks like shocks are always shuffled before using. Elementals casts
23+ serverside spells on spawn and on death but looks like on-death spells has nothing to do with shocks. Maybe on-spawn does
24+ */
25+
1826#include " ScriptMgr.h"
1927#include " ScriptedCreature.h"
2028#include " SpellScript.h"
@@ -31,12 +39,17 @@ enum SythTexts
3139
3240enum SythSpells
3341{
34- SPELL_FROST_SHOCK = 21401 ,
35- SPELL_FLAME_SHOCK = 34354 ,
36- SPELL_SHADOW_SHOCK = 30138 ,
37- SPELL_ARCANE_SHOCK = 37132 ,
42+ SPELL_FROST_SHOCK = 12548 ,
43+ SPELL_FROST_SHOCK_H = 21401 ,
44+ SPELL_FLAME_SHOCK = 15039 ,
45+ SPELL_FLAME_SHOCK_H = 15616 ,
46+ SPELL_SHADOW_SHOCK = 33620 ,
47+ SPELL_SHADOW_SHOCK_H = 38136 ,
48+ SPELL_ARCANE_SHOCK = 33534 ,
49+ SPELL_ARCANE_SHOCK_H = 38135 ,
3850
3951 SPELL_CHAIN_LIGHTNING = 15659 ,
52+ SPELL_CHAIN_LIGHTNING_H = 15305 ,
4053
4154 SPELL_SUMMON_ELEMENTALS = 33595 ,
4255
@@ -48,10 +61,10 @@ enum SythSpells
4861
4962enum SythEvents
5063{
51- EVENT_FLAME_SHOCK = 1 ,
52- EVENT_ARCANE_SHOCK ,
53- EVENT_FROST_SHOCK ,
64+ EVENT_FROST_SHOCK = 1 ,
65+ EVENT_FLAME_SHOCK ,
5466 EVENT_SHADOW_SHOCK ,
67+ EVENT_ARCANE_SHOCK ,
5568 EVENT_CHAIN_LIGHTNING ,
5669 EVENT_SUMMON
5770};
@@ -84,28 +97,14 @@ struct boss_darkweaver_syth : public BossAI
8497 void JustEngagedWith (Unit* who) override
8598 {
8699 BossAI::JustEngagedWith (who);
87- events.ScheduleEvent (EVENT_FLAME_SHOCK , 2s);
88- events.ScheduleEvent (EVENT_ARCANE_SHOCK , 4s);
89- events.ScheduleEvent (EVENT_FROST_SHOCK , 6s);
90- events.ScheduleEvent (EVENT_SHADOW_SHOCK , 8s);
91- events.ScheduleEvent (EVENT_CHAIN_LIGHTNING , 10s, 15s);
92100
93101 Talk (SAY_AGGRO );
94- }
95-
96- void JustDied (Unit* /* killer*/ ) override
97- {
98- _JustDied ();
99- Talk (SAY_DEATH );
100102
101- if (Creature* lakka = me->FindNearestCreature (NPC_LAKKA , 500 .0f , true ))
102- lakka->AI ()->Talk (SAY_LAKKA_FREE );
103- }
104-
105- void KilledUnit (Unit* who) override
106- {
107- if (who->GetTypeId () == TYPEID_PLAYER )
108- Talk (SAY_SLAY );
103+ events.ScheduleEvent (EVENT_FROST_SHOCK , 6s);
104+ events.ScheduleEvent (EVENT_FLAME_SHOCK , 2s);
105+ events.ScheduleEvent (EVENT_SHADOW_SHOCK , 8s);
106+ events.ScheduleEvent (EVENT_ARCANE_SHOCK , 4s);
107+ events.ScheduleEvent (EVENT_CHAIN_LIGHTNING , 8s);
109108 }
110109
111110 void JustSummoned (Creature* summoned) override
@@ -116,9 +115,9 @@ struct boss_darkweaver_syth : public BossAI
116115 summons.Summon (summoned);
117116 }
118117
119- void OnSpellCast (SpellInfo const * spell ) override
118+ void OnSpellCast (SpellInfo const * spellInfo ) override
120119 {
121- if (spell ->Id == SPELL_SUMMON_ELEMENTALS )
120+ if (spellInfo ->Id == SPELL_SUMMON_ELEMENTALS )
122121 Talk (SAY_SUMMON );
123122 }
124123
@@ -143,29 +142,43 @@ struct boss_darkweaver_syth : public BossAI
143142 }
144143 }
145144
145+ void KilledUnit (Unit* /* who*/ ) override
146+ {
147+ Talk (SAY_SLAY );
148+ }
149+
150+ void JustDied (Unit* /* killer*/ ) override
151+ {
152+ _JustDied ();
153+ Talk (SAY_DEATH );
154+
155+ if (Creature* lakka = me->FindNearestCreature (NPC_LAKKA , 500 .0f , true ))
156+ lakka->AI ()->Talk (SAY_LAKKA_FREE );
157+ }
158+
146159 void ExecuteEvent (uint32 eventId) override
147160 {
148161 switch (eventId)
149162 {
150- case EVENT_FLAME_SHOCK :
151- DoCastVictim (SPELL_FLAME_SHOCK );
163+ case EVENT_FROST_SHOCK :
164+ DoCastVictim (DUNGEON_MODE ( SPELL_FROST_SHOCK , SPELL_FROST_SHOCK_H ) );
152165 events.Repeat (10s, 15s);
153166 break ;
154- case EVENT_ARCANE_SHOCK :
155- DoCastVictim (SPELL_ARCANE_SHOCK );
167+ case EVENT_FLAME_SHOCK :
168+ DoCastVictim (DUNGEON_MODE ( SPELL_FLAME_SHOCK , SPELL_FLAME_SHOCK_H ) );
156169 events.Repeat (10s, 15s);
157170 break ;
158- case EVENT_FROST_SHOCK :
159- DoCastVictim (SPELL_FROST_SHOCK );
171+ case EVENT_SHADOW_SHOCK :
172+ DoCastVictim (DUNGEON_MODE ( SPELL_SHADOW_SHOCK , SPELL_SHADOW_SHOCK_H ) );
160173 events.Repeat (10s, 15s);
161174 break ;
162- case EVENT_SHADOW_SHOCK :
163- DoCastVictim (SPELL_SHADOW_SHOCK );
175+ case EVENT_ARCANE_SHOCK :
176+ DoCastVictim (DUNGEON_MODE ( SPELL_ARCANE_SHOCK , SPELL_ARCANE_SHOCK_H ) );
164177 events.Repeat (10s, 15s);
165178 break ;
166179 case EVENT_CHAIN_LIGHTNING :
167- DoCastVictim (SPELL_CHAIN_LIGHTNING );
168- events.Repeat (25s );
180+ DoCastVictim (DUNGEON_MODE ( SPELL_CHAIN_LIGHTNING , SPELL_CHAIN_LIGHTNING_H ) );
181+ events.Repeat (20s, 35s );
169182 break ;
170183 case EVENT_SUMMON :
171184 DoCastSelf (SPELL_SUMMON_ELEMENTALS );
@@ -198,10 +211,10 @@ class spell_darkweaver_syth_summon_elementals : public SpellScript
198211 void HandleScript (SpellEffIndex /* effIndex*/ )
199212 {
200213 Unit* caster = GetCaster ();
201- caster->CastSpell (caster , SPELL_SUMMON_SYTH_ARCANE , TRIGGERED_IGNORE_SPELL_AND_CATEGORY_CD );
202- caster->CastSpell (caster , SPELL_SUMMON_SYTH_FIRE , TRIGGERED_IGNORE_SPELL_AND_CATEGORY_CD );
203- caster->CastSpell (caster , SPELL_SUMMON_SYTH_FROST , TRIGGERED_IGNORE_SPELL_AND_CATEGORY_CD );
204- caster->CastSpell (caster , SPELL_SUMMON_SYTH_SHADOW , TRIGGERED_IGNORE_SPELL_AND_CATEGORY_CD );
214+ caster->CastSpell (nullptr , SPELL_SUMMON_SYTH_ARCANE , true );
215+ caster->CastSpell (nullptr , SPELL_SUMMON_SYTH_FIRE , true );
216+ caster->CastSpell (nullptr , SPELL_SUMMON_SYTH_FROST , true );
217+ caster->CastSpell (nullptr , SPELL_SUMMON_SYTH_SHADOW , true );
205218 }
206219
207220 void Register () override
0 commit comments