Skip to content

Commit fd42b89

Browse files
authored
Scripts/Sethekk Halls: Improve Anzu (TrinityCore#31087)
* Add missing texts * Implement intro event * Update summon event (now Banish is canceled when all Brood of Anzu is killed) * Remove redundant checks and actions to prevent double-summon of Anzu (not needed anymore, handled in SAI) * Prevent calling Ikiss' intro if already done
1 parent 4dece3f commit fd42b89

File tree

5 files changed

+120
-47
lines changed

5 files changed

+120
-47
lines changed
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
--
2+
DELETE FROM `creature_text` WHERE `CreatureID` = 23035;
3+
INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES
4+
(23035,0,0,"No! How can this be?",14,0,100,0,0,0,20797,0,"Anzu SAY_INTRO_1"),
5+
(23035,1,0,"Pain will be the price for your insolence! You cannot stop me from claiming the Emerald Dream as my own!",14,0,100,0,0,0,20799,0,"Anzu SAY_INTRO_2"),
6+
(23035,2,0,"Awaken, my children and assist your master!",14,0,100,0,0,0,20991,0,"Anzu SAY_SUMMON"),
7+
(23035,3,0,"Yes... cast your precious little spells, ak-a-ak!",15,0,100,0,0,0,21012,0,"Anzu SAY_BOMB"),
8+
(23035,3,1,"Your magics shall be your undoing... ak-a-ak...",15,0,100,0,0,0,21015,0,"Anzu SAY_BOMB"),
9+
(23035,3,2,"Your powers... ak-ak... turn against you...",15,0,100,0,0,0,21016,0,"Anzu SAY_BOMB"),
10+
(23035,3,3,"Your spells... ke-kaw... are weak magics... easy to turn against you...",15,0,100,0,0,0,21017,0,"Anzu SAY_BOMB");
11+
12+
-- 3.3.5 only
13+
UPDATE `creature_template` SET `unit_flags` = `unit_flags` |512|256 WHERE `entry` = 23035;
14+
15+
-- Ignore pathfinding, otherwise creatures will be not engaged and remain in the sky
16+
UPDATE `creature_template` SET `flags_extra` = `flags_extra` |0x20000000 WHERE `entry` = 23132;

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

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

18+
/*
19+
* Pathing for Brood of Anzu is NYI (try to remove extra flag to ignore pathfinding when paths will be implemented)
20+
* Birds-helpers are NYI
21+
*/
22+
1823
#include "ScriptMgr.h"
1924
#include "ScriptedCreature.h"
2025
#include "sethekk_halls.h"
2126

2227
enum AnzuTexts
2328
{
24-
SAY_SUMMON_BROOD = 0,
25-
SAY_SPELL_BOMB = 1
29+
SAY_INTRO_1 = 0,
30+
SAY_INTRO_2 = 1,
31+
SAY_SUMMON = 2,
32+
SAY_BOMB = 3
2633
};
2734

2835
enum AnzuSpells
2936
{
37+
SPELL_SHADOWFORM = 37816,
38+
3039
SPELL_PARALYZING_SCREECH = 40184,
3140
SPELL_SPELL_BOMB = 40303,
3241
SPELL_CYCLONE_OF_FEATHERS = 40321,
@@ -38,7 +47,12 @@ enum AnzuEvents
3847
EVENT_PARALYZING_SCREECH = 1,
3948
EVENT_SPELL_BOMB,
4049
EVENT_CYCLONE_OF_FEATHERS,
41-
EVENT_SUMMON
50+
EVENT_SUMMON_1,
51+
EVENT_SUMMON_2,
52+
53+
EVENT_INTRO_1,
54+
EVENT_INTRO_2,
55+
EVENT_INTRO_3
4256
};
4357

4458
enum AnzuPhases : uint8
@@ -48,7 +62,12 @@ enum AnzuPhases : uint8
4862
PHASE_HEALTH_33
4963
};
5064

51-
Position const PosSummonBrood[7] =
65+
enum AnzuMisc
66+
{
67+
NPC_BROOD_OF_ANZU = 23132
68+
};
69+
70+
static Position const PosSummonBrood[] =
5271
{
5372
{ -118.1717f, 284.5299f, 121.2287f, 2.775074f },
5473
{ -98.15528f, 293.4469f, 109.2385f, 0.174533f },
@@ -62,87 +81,142 @@ Position const PosSummonBrood[7] =
6281
// 23035 - Anzu
6382
struct boss_anzu : public BossAI
6483
{
65-
boss_anzu(Creature* creature) : BossAI(creature, DATA_ANZU), _phase(PHASE_NONE) { }
84+
boss_anzu(Creature* creature) : BossAI(creature, DATA_ANZU), _phase(PHASE_NONE), _deadBroodCount(0) { }
85+
86+
void JustAppeared() override
87+
{
88+
events.ScheduleEvent(EVENT_INTRO_1, 0s);
89+
}
6690

6791
void Reset() override
6892
{
69-
//_Reset();
70-
events.Reset();
93+
_Reset();
7194
_phase = PHASE_NONE;
95+
_deadBroodCount = 0;
96+
me->SetReactState(REACT_AGGRESSIVE);
7297
}
7398

7499
void JustEngagedWith(Unit* who) override
75100
{
76101
BossAI::JustEngagedWith(who);
77-
events.ScheduleEvent(EVENT_PARALYZING_SCREECH, 14s);
78-
events.ScheduleEvent(EVENT_CYCLONE_OF_FEATHERS, 5s);
102+
events.ScheduleEvent(EVENT_PARALYZING_SCREECH, 15s, 25s);
103+
events.ScheduleEvent(EVENT_SPELL_BOMB, 20s, 30s);
104+
events.ScheduleEvent(EVENT_CYCLONE_OF_FEATHERS, 10s, 15s);
79105
}
80106

81107
void DamageTaken(Unit* /*killer*/, uint32& damage, DamageEffectType /*damageType*/, SpellInfo const* /*spellInfo = nullptr*/) override
82108
{
83109
if (_phase < PHASE_HEALTH_66 && me->HealthBelowPctDamaged(66, damage))
84110
{
85111
_phase++;
86-
Talk(SAY_SUMMON_BROOD);
87-
events.ScheduleEvent(EVENT_SUMMON, 3s);
112+
events.ScheduleEvent(EVENT_SUMMON_1, 0s);
88113
}
89114

90115
if (_phase < PHASE_HEALTH_33 && me->HealthBelowPctDamaged(33, damage))
91116
{
92117
_phase++;
93-
Talk(SAY_SUMMON_BROOD);
94-
events.ScheduleEvent(EVENT_SUMMON, 3s);
118+
events.ScheduleEvent(EVENT_SUMMON_1, 0s);
119+
}
120+
}
121+
122+
void SummonedCreatureDies(Creature* /*summon*/, Unit* /*killer*/) override
123+
{
124+
_deadBroodCount++;
125+
126+
if (_deadBroodCount == std::size(PosSummonBrood))
127+
{
128+
me->RemoveAurasDueToSpell(SPELL_BANISH_SELF);
129+
_deadBroodCount = 0;
95130
}
96131
}
97132

98133
void UpdateAI(uint32 diff) override
99134
{
100135
if (!UpdateVictim())
136+
{
137+
events.Update(diff);
138+
139+
while (uint32 eventId = events.ExecuteEvent())
140+
{
141+
switch (eventId)
142+
{
143+
case EVENT_INTRO_1:
144+
Talk(SAY_INTRO_1);
145+
DoCastSelf(SPELL_SHADOWFORM);
146+
events.ScheduleEvent(EVENT_INTRO_2, 6s);
147+
break;
148+
case EVENT_INTRO_2:
149+
Talk(SAY_INTRO_2);
150+
events.ScheduleEvent(EVENT_INTRO_3, 4s);
151+
break;
152+
case EVENT_INTRO_3:
153+
me->RemoveAurasDueToSpell(SPELL_SHADOWFORM);
154+
me->SetImmuneToAll(false);
155+
break;
156+
default:
157+
break;
158+
}
159+
}
101160
return;
161+
}
102162

103163
events.Update(diff);
104164

165+
if (me->HasUnitState(UNIT_STATE_CASTING))
166+
return;
167+
105168
while (uint32 eventId = events.ExecuteEvent())
106169
{
107170
switch (eventId)
108171
{
109172
case EVENT_PARALYZING_SCREECH:
110-
DoCastVictim(SPELL_PARALYZING_SCREECH);
111-
events.Repeat(25s);
112-
break;
113-
case EVENT_CYCLONE_OF_FEATHERS:
114-
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0))
115-
DoCast(target, SPELL_CYCLONE_OF_FEATHERS);
116-
events.Repeat(21s);
117-
break;
118-
case EVENT_SUMMON:
119-
// TODO: Add pathing for Brood of Anzu
120-
for (uint8 i = 0; i < 7; i++)
121-
me->SummonCreature(NPC_BROOD_OF_ANZU, PosSummonBrood[i], TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 46s);
122-
123-
DoCastSelf(SPELL_BANISH_SELF);
124-
events.ScheduleEvent(EVENT_SPELL_BOMB, 12s);
173+
DoCastSelf(SPELL_PARALYZING_SCREECH);
174+
events.Repeat(25s, 35s);
125175
break;
126176
case EVENT_SPELL_BOMB:
127177
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0))
128178
{
129179
if (target->GetPowerType() == POWER_MANA)
130180
{
131181
DoCast(target, SPELL_SPELL_BOMB);
132-
Talk(SAY_SPELL_BOMB, target);
182+
Talk(SAY_BOMB, target);
133183
}
134184
}
185+
events.Repeat(20s, 30s);
186+
break;
187+
case EVENT_CYCLONE_OF_FEATHERS:
188+
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0))
189+
DoCast(target, SPELL_CYCLONE_OF_FEATHERS);
190+
events.Repeat(20s, 25s);
191+
break;
192+
case EVENT_SUMMON_1:
193+
me->SetReactState(REACT_PASSIVE);
194+
Talk(SAY_SUMMON);
195+
196+
_deadBroodCount = 0;
197+
for (Position const& summonPos : PosSummonBrood)
198+
me->SummonCreature(NPC_BROOD_OF_ANZU, summonPos, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 46s);
199+
200+
events.ScheduleEvent(EVENT_SUMMON_2, 3s);
201+
break;
202+
case EVENT_SUMMON_2:
203+
me->SetReactState(REACT_AGGRESSIVE);
204+
DoCastSelf(SPELL_BANISH_SELF);
135205
break;
136206
default:
137207
break;
138208
}
209+
210+
if (me->HasUnitState(UNIT_STATE_CASTING))
211+
return;
139212
}
140213

141214
DoMeleeAttackIfReady();
142215
}
143216

144217
private:
145218
uint8 _phase;
219+
uint8 _deadBroodCount;
146220
};
147221

148222
void AddSC_boss_anzu()

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,10 +59,10 @@ struct boss_talon_king_ikiss : public BossAI
5959
void Reset() override
6060
{
6161
_Reset();
62-
_introDone = false;
6362
_manaShieldTriggered = false;
6463
}
6564

65+
/// @todo: Handle this with GameObject 184118 (Auchindoun Arakkoa - Talon King Ikiss Intro Event - Trigger 000)
6666
void MoveInLineOfSight(Unit* who) override
6767
{
6868
if (!_introDone && who->GetTypeId() == TYPEID_PLAYER && me->IsWithinDistInMap(who, 100.0f))

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

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -48,17 +48,6 @@ class instance_sethekk_halls : public InstanceMapScript
4848
LoadObjectData(nullptr, gameObjectData);
4949
}
5050

51-
void OnCreatureCreate(Creature* creature) override
52-
{
53-
if (creature->GetEntry() == NPC_ANZU)
54-
{
55-
if (GetBossState(DATA_ANZU) == DONE)
56-
creature->DisappearAndDie();
57-
else
58-
SetBossState(DATA_ANZU, IN_PROGRESS);
59-
}
60-
}
61-
6251
bool SetBossState(uint32 type, EncounterState state) override
6352
{
6453
if (!InstanceScript::SetBossState(type, state))

src/server/scripts/Outland/Auchindoun/SethekkHalls/sethekk_halls.h

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -36,12 +36,6 @@ enum SHDataTypes
3636
DATA_TALON_KING_COFFER = 3
3737
};
3838

39-
enum SHCreatureIds
40-
{
41-
NPC_ANZU = 23035,
42-
NPC_BROOD_OF_ANZU = 23132
43-
};
44-
4539
enum SHGameObjectIds
4640
{
4741
GO_IKISS_DOOR = 183398,

0 commit comments

Comments
 (0)