Skip to content

Commit ee3f691

Browse files
committed
Scripts/Sethekk Halls: Update Darkweaver Syth
1 parent 9746b68 commit ee3f691

1 file changed

Lines changed: 55 additions & 42 deletions

File tree

src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_darkweaver_syth.cpp

Lines changed: 55 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,14 @@
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

3240
enum 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

4962
enum 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

Comments
 (0)