Skip to content

Commit 828f1b4

Browse files
committed
Scripts/Sethekk Halls: Update Ikiss
1 parent 9746b68 commit 828f1b4

1 file changed

Lines changed: 93 additions & 44 deletions

File tree

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

Lines changed: 93 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,17 @@
1515
* with this program. If not, see <http://www.gnu.org/licenses/>.
1616
*/
1717

18+
/*
19+
* Timers requires to be revisited
20+
* Looks like SPELL_ARCANE_BUBBLE and SPELL_MANA_SHIELD were removed in Cata
21+
*/
22+
1823
#include "ScriptMgr.h"
1924
#include "Containers.h"
2025
#include "ScriptedCreature.h"
2126
#include "SpellScript.h"
27+
#include "SpellInfo.h"
28+
#include "SpellMgr.h"
2229
#include "sethekk_halls.h"
2330

2431
enum IkissTexts
@@ -32,34 +39,52 @@ enum IkissTexts
3239

3340
enum IkissSpells
3441
{
35-
SPELL_BLINK = 38194,
36-
SPELL_BLINK_TELEPORT = 38203,
37-
SPELL_MANA_SHIELD = 38151,
38-
SPELL_ARCANE_BUBBLE = 9438,
39-
SPELL_SLOW = 35032,
42+
// Combat
4043
SPELL_POLYMORPH = 38245,
4144
SPELL_ARCANE_VOLLEY = 35059,
45+
SPELL_SLOW = 35032,
46+
SPELL_MANA_SHIELD = 38151,
47+
48+
// Combat - Sequence
49+
SPELL_BLINK = 38194,
50+
SPELL_ARCANE_BUBBLE = 9438,
4251
SPELL_ARCANE_EXPLOSION = 38197,
52+
53+
// Scripts
54+
SPELL_BLINK_TELEPORT = 38203
4355
};
4456

4557
enum IkissEvents
4658
{
47-
EVENT_POLYMORPH = 1,
48-
EVENT_BLINK,
49-
EVENT_SLOW,
59+
EVENT_POLYMORPH = 1,
5060
EVENT_ARCANE_VOLLEY,
51-
EVENT_ARCANE_EXPLOSION
61+
EVENT_SLOW,
62+
EVENT_MANA_SHIELD,
63+
64+
EVENT_SEQUENCE_1,
65+
EVENT_SEQUENCE_2,
66+
EVENT_SEQUENCE_3
67+
};
68+
69+
enum IkissPhases : uint8
70+
{
71+
PHASE_NONE = 0,
72+
PHASE_HEALTH_80,
73+
PHASE_HEALTH_50,
74+
PHASE_HEALTH_25,
75+
PHASE_HEALTH_15
5276
};
5377

5478
// 18473 - Talon King Ikiss
5579
struct boss_talon_king_ikiss : public BossAI
5680
{
57-
boss_talon_king_ikiss(Creature* creature) : BossAI(creature, DATA_TALON_KING_IKISS), _introDone(false), _manaShieldTriggered(false) { }
81+
boss_talon_king_ikiss(Creature* creature) : BossAI(creature, DATA_TALON_KING_IKISS), _introDone(false), _phase(PHASE_NONE) { }
5882

5983
void Reset() override
6084
{
6185
_Reset();
62-
_manaShieldTriggered = false;
86+
_phase = PHASE_NONE;
87+
me->SetReactState(REACT_AGGRESSIVE);
6388
}
6489

6590
/// @todo: Handle this with GameObject 184118 (Auchindoun Arakkoa - Talon King Ikiss Intro Event - Trigger 000)
@@ -77,27 +102,51 @@ struct boss_talon_king_ikiss : public BossAI
77102
void JustEngagedWith(Unit* who) override
78103
{
79104
BossAI::JustEngagedWith(who);
105+
80106
Talk(SAY_AGGRO);
81-
events.ScheduleEvent(EVENT_ARCANE_VOLLEY, 5s);
82-
events.ScheduleEvent(EVENT_POLYMORPH, 8s);
83-
events.ScheduleEvent(EVENT_BLINK, 35s);
107+
108+
events.ScheduleEvent(EVENT_POLYMORPH, 5s, 15s);
109+
events.ScheduleEvent(EVENT_ARCANE_VOLLEY, 5s, 10s);
84110
if (IsHeroic())
85-
events.ScheduleEvent(EVENT_SLOW, 15s, 30s);
111+
events.ScheduleEvent(EVENT_SLOW, 10s, 20s);
112+
}
113+
114+
void OnSpellCast(SpellInfo const* spellInfo) override
115+
{
116+
if (spellInfo->Id == sSpellMgr->GetSpellIdForDifficulty(SPELL_ARCANE_EXPLOSION, me))
117+
me->SetReactState(REACT_AGGRESSIVE);
86118
}
87119

88120
void DamageTaken(Unit* /*who*/, uint32& damage, DamageEffectType /*damageType*/, SpellInfo const* /*spellInfo = nullptr*/) override
89121
{
90-
if (!_manaShieldTriggered && me->HealthBelowPctDamaged(20, damage))
122+
if (_phase < PHASE_HEALTH_80 && me->HealthBelowPctDamaged(80, damage))
123+
{
124+
_phase++;
125+
events.ScheduleEvent(EVENT_SEQUENCE_1, 0s);
126+
}
127+
128+
if (_phase < PHASE_HEALTH_50 && me->HealthBelowPctDamaged(50, damage))
129+
{
130+
_phase++;
131+
events.ScheduleEvent(EVENT_SEQUENCE_1, 0s);
132+
}
133+
134+
if (_phase < PHASE_HEALTH_25 && me->HealthBelowPctDamaged(25, damage))
135+
{
136+
_phase++;
137+
events.ScheduleEvent(EVENT_SEQUENCE_1, 0s);
138+
}
139+
140+
if (_phase < PHASE_HEALTH_15 && me->HealthBelowPctDamaged(15, damage))
91141
{
92-
DoCastSelf(SPELL_MANA_SHIELD);
93-
_manaShieldTriggered = true;
142+
_phase++;
143+
events.ScheduleEvent(EVENT_MANA_SHIELD, 0s);
94144
}
95145
}
96146

97147
void KilledUnit(Unit* who) override
98148
{
99-
if (who->GetTypeId() == TYPEID_PLAYER)
100-
Talk(SAY_SLAY);
149+
Talk(SAY_SLAY);
101150
}
102151

103152
void JustDied(Unit* /*killer*/) override
@@ -111,30 +160,35 @@ struct boss_talon_king_ikiss : public BossAI
111160
switch (eventId)
112161
{
113162
case EVENT_POLYMORPH:
114-
// Second top aggro in normal, random target in heroic.
115-
if (IsHeroic())
116-
DoCast(SelectTarget(SelectTargetMethod::Random, 0), SPELL_POLYMORPH);
117-
else
118-
DoCast(SelectTarget(SelectTargetMethod::MaxThreat, 1), SPELL_POLYMORPH);
119-
events.Repeat(15s, 17500ms);
163+
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 1, 30.0f))
164+
DoCast(target, SPELL_POLYMORPH);
165+
events.Repeat(10s, 20s);
120166
break;
121167
case EVENT_ARCANE_VOLLEY:
122168
DoCastSelf(SPELL_ARCANE_VOLLEY);
123-
events.Repeat(7s, 12s);
169+
events.Repeat(10s);
124170
break;
125171
case EVENT_SLOW:
126172
DoCastSelf(SPELL_SLOW);
127-
events.Repeat(15s, 40s);
173+
events.Repeat(15s, 20s);
128174
break;
129-
case EVENT_BLINK:
175+
case EVENT_MANA_SHIELD:
176+
DoCastSelf(SPELL_MANA_SHIELD);
177+
break;
178+
179+
case EVENT_SEQUENCE_1:
180+
DoCastSelf(SPELL_BLINK);
181+
ResetThreatList();
182+
me->SetReactState(REACT_PASSIVE);
183+
events.ScheduleEvent(EVENT_SEQUENCE_2, 1200ms);
184+
break;
185+
case EVENT_SEQUENCE_2:
186+
DoCastSelf(SPELL_ARCANE_BUBBLE);
130187
Talk(EMOTE_ARCANE_EXPLOSION);
131-
DoCastAOE(SPELL_BLINK);
132-
events.ScheduleEvent(EVENT_BLINK, 35s, 40s);
133-
events.ScheduleEvent(EVENT_ARCANE_EXPLOSION, 1s);
188+
events.ScheduleEvent(EVENT_SEQUENCE_3, 1200ms);
134189
break;
135-
case EVENT_ARCANE_EXPLOSION:
190+
case EVENT_SEQUENCE_3:
136191
DoCastSelf(SPELL_ARCANE_EXPLOSION);
137-
DoCastSelf(SPELL_ARCANE_BUBBLE, true);
138192
break;
139193
default:
140194
break;
@@ -143,7 +197,7 @@ struct boss_talon_king_ikiss : public BossAI
143197

144198
private:
145199
bool _introDone;
146-
bool _manaShieldTriggered;
200+
uint8 _phase;
147201
};
148202

149203
// 38194 - Blink
@@ -158,24 +212,19 @@ class spell_talon_king_ikiss_blink : public SpellScript
158212

159213
void FilterTargets(std::list<WorldObject*>& targets)
160214
{
161-
if (targets.empty())
162-
return;
163-
164-
WorldObject* target = Trinity::Containers::SelectRandomContainerElement(targets);
165-
targets.clear();
166-
targets.push_back(target);
215+
// This is wrong, full list of targets is sent to client
216+
Trinity::Containers::RandomResize(targets, 1);
167217
}
168218

169-
void HandleDummyHitTarget(SpellEffIndex effIndex)
219+
void HandleDummy(SpellEffIndex /*effIndex*/)
170220
{
171-
PreventHitDefaultEffect(effIndex);
172221
GetHitUnit()->CastSpell(GetCaster(), SPELL_BLINK_TELEPORT, true);
173222
}
174223

175224
void Register() override
176225
{
177226
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_talon_king_ikiss_blink::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY);
178-
OnEffectHitTarget += SpellEffectFn(spell_talon_king_ikiss_blink::HandleDummyHitTarget, EFFECT_0, SPELL_EFFECT_DUMMY);
227+
OnEffectHitTarget += SpellEffectFn(spell_talon_king_ikiss_blink::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
179228
}
180229
};
181230

0 commit comments

Comments
 (0)