Skip to content

Commit 44a7b29

Browse files
authored
Scripts/Blood Furnace: Update Broggok (TrinityCore#31097)
* use missing text * despawn InCombat trigger by spell * add missing waypoints * add events to activate and prepare Broggok * codestyle changes
1 parent 53daa08 commit 44a7b29

File tree

4 files changed

+159
-64
lines changed

4 files changed

+159
-64
lines changed
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
--
2+
DELETE FROM `creature_text` WHERE `CreatureID` = 17380;
3+
INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES
4+
(17380,0,0,"Kill them!",14,0,100,0,0,0,15115,0,"broggok SAY_INTRO"),
5+
(17380,1,0,"Come intruders....",14,0,100,0,0,0,14259,0,"broggok SAY_AGGRO");
6+
7+
DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId` = 13 AND `SourceEntry` = 26838;
8+
INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`SourceId`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionTarget`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`NegativeCondition`,`ErrorType`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES
9+
(13,1,26838,0,0,31,0,3,16006,0,0,0,0,"","Group 0: Spell 'Despawn InCombat Trigger' (Effect 0) targets creature 'InCombat Trigger'");
10+
11+
DELETE FROM `spell_script_names` WHERE `spell_id` = 26838 AND `ScriptName` = 'spell_gen_despawn_target';
12+
INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES
13+
(26838,'spell_gen_despawn_target');
14+
-- Credit - Cmangos
15+
DELETE FROM `waypoint_data` WHERE `id` = 1381150;
16+
INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`, `move_type`, `action`, `action_chance`, `wpguid`) VALUES
17+
(1381150,1,455.6496,33.33417,9.544375,NULL,0,1,0,100,0),
18+
(1381150,2,456.105,44.3159,9.62544,NULL,0,1,0,100,0),
19+
(1381150,3,458.401,50.6364,9.62375,NULL,0,1,0,100,0),
20+
(1381150,4,461.782,54.9224,9.6233,NULL,0,1,0,100,0),
21+
(1381150,5,463.657,60.3144,9.61813,NULL,0,1,0,100,0),
22+
(1381150,6,456.328,78.3051,9.61487,1.53589,0,1,0,100,0);

src/server/scripts/Outland/HellfireCitadel/BloodFurnace/blood_furnace.h

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -51,9 +51,7 @@ enum BFCreatureIds
5151
NPC_BROGGOK = 17380,
5252
NPC_KELIDAN_THE_BREAKER = 17377,
5353
NPC_PRISONER1 = 17398,
54-
NPC_PRISONER2 = 17429,
55-
NPC_BROGGOK_POISON_CLOUD = 17662,
56-
NPC_INCOMBAT_TRIGGER = 16006
54+
NPC_PRISONER2 = 17429
5755
};
5856

5957
enum BFGameObjectIds

src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_broggok.cpp

Lines changed: 136 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -21,36 +21,54 @@
2121
#include "GameObject.h"
2222
#include "GameObjectAI.h"
2323
#include "InstanceScript.h"
24-
#include "ObjectAccessor.h"
24+
#include "MotionMaster.h"
2525
#include "ScriptedCreature.h"
2626
#include "SpellAuraEffects.h"
2727
#include "SpellScript.h"
2828

2929
enum BroggokTexts
3030
{
31-
SAY_AGGRO = 0
31+
SAY_INTRO = 0,
32+
SAY_AGGRO = 1
3233
};
3334

3435
enum BroggokSpells
3536
{
36-
SPELL_SLIME_SPRAY = 30913,
37-
SPELL_POISON_CLOUD = 30916,
38-
SPELL_POISON_BOLT = 30917,
39-
SPELL_POISON_CLOUD_PASSIVE = 30914,
40-
SPELL_SUMMON_INCOMBAT_TRIGGER = 26837,
37+
SPELL_SLIME_SPRAY = 30913,
38+
SPELL_POISON_BOLT = 30917,
39+
SPELL_POISON_CLOUD = 30916,
40+
41+
SPELL_SUMMON_INCOMBAT_TRIGGER = 26837,
42+
SPELL_DESPAWN_INCOMBAT_TRIGGER = 26838,
43+
44+
// Cloud
45+
SPELL_POISON_CLOUD_PASSIVE = 30914,
4146

4247
// Prisioners
43-
SPELL_STOMP = 31900,
44-
SPELL_CONCUSSION_BLOW = 22427,
45-
SPELL_FRENZY = 8269,
46-
SPELL_CHARGE = 22120
48+
SPELL_STOMP = 31900,
49+
SPELL_CONCUSSION_BLOW = 22427,
50+
SPELL_FRENZY = 8269,
51+
SPELL_CHARGE = 22120
4752
};
4853

4954
enum BroggokEvents
5055
{
51-
EVENT_SLIME_SPRAY = 1,
56+
EVENT_SLIME_SPRAY = 1,
5257
EVENT_POISON_BOLT,
5358
EVENT_POISON_CLOUD,
59+
60+
EVENT_INTRO_1,
61+
EVENT_INTRO_2,
62+
63+
EVENT_ACTIVATE_1,
64+
EVENT_ACTIVATE_2
65+
};
66+
67+
enum BroggokMisc
68+
{
69+
PATH_ROOM = 1381150,
70+
NPC_BROGGOK_POISON_CLOUD = 17662,
71+
NPC_INCOMBAT_TRIGGER = 16006
5472
};
5573

5674
// 17380 - Broggok
@@ -67,11 +85,11 @@ struct boss_broggok : public BossAI
6785
void JustEngagedWith(Unit* who) override
6886
{
6987
BossAI::JustEngagedWith(who);
70-
Talk(SAY_AGGRO);
88+
DoCastSelf(SPELL_DESPAWN_INCOMBAT_TRIGGER);
7189

72-
events.ScheduleEvent(EVENT_SLIME_SPRAY, 10s);
73-
events.ScheduleEvent(EVENT_POISON_BOLT, 7s);
74-
events.ScheduleEvent(EVENT_POISON_CLOUD, 5s);
90+
events.ScheduleEvent(EVENT_SLIME_SPRAY, 8s, 12s);
91+
events.ScheduleEvent(EVENT_POISON_BOLT, 2s, 10s);
92+
events.ScheduleEvent(EVENT_POISON_CLOUD, 5s, 10s);
7593
}
7694

7795
void JustSummoned(Creature* summoned) override
@@ -90,22 +108,29 @@ struct boss_broggok : public BossAI
90108
}
91109
}
92110

111+
void EnterEvadeMode(EvadeReason /*why*/) override
112+
{
113+
summons.DespawnEntry(NPC_BROGGOK_POISON_CLOUD);
114+
DoCastSelf(SPELL_DESPAWN_INCOMBAT_TRIGGER, true);
115+
instance->SetBossState(DATA_BROGGOK, NOT_STARTED);
116+
_DespawnAtEvade();
117+
}
118+
93119
void DoAction(int32 action) override
94120
{
95121
switch (action)
96122
{
97123
case ACTION_PREPARE_BROGGOK:
98-
DoCastSelf(SPELL_SUMMON_INCOMBAT_TRIGGER);
124+
events.ScheduleEvent(EVENT_INTRO_1, 0s);
99125
break;
100126
case ACTION_ACTIVATE_BROGGOK:
101-
me->SetReactState(REACT_AGGRESSIVE);
102-
me->RemoveUnitFlag(UNIT_FLAG_UNINTERACTIBLE);
103-
DoZoneInCombat();
127+
events.ScheduleEvent(EVENT_ACTIVATE_1, 0s);
104128
break;
105129
case ACTION_RESET_BROGGOK:
106130
me->SetReactState(REACT_PASSIVE);
107131
me->SetUnitFlag(UNIT_FLAG_UNINTERACTIBLE);
108-
summons.DespawnAll();
132+
summons.DespawnEntry(NPC_BROGGOK_POISON_CLOUD);
133+
DoCastSelf(SPELL_DESPAWN_INCOMBAT_TRIGGER);
109134
instance->SetBossState(DATA_BROGGOK, NOT_STARTED);
110135
if (GameObject * lever = instance->GetGameObject(DATA_BROGGOK_LEVER))
111136
{
@@ -118,24 +143,73 @@ struct boss_broggok : public BossAI
118143
}
119144
}
120145

121-
void ExecuteEvent(uint32 eventId) override
146+
void UpdateAI(uint32 diff) override
122147
{
123-
switch (eventId)
148+
if (!UpdateVictim())
124149
{
125-
case EVENT_SLIME_SPRAY:
126-
DoCastVictim(SPELL_SLIME_SPRAY);
127-
events.Repeat(4s, 12s);
128-
break;
129-
case EVENT_POISON_BOLT:
130-
DoCastVictim(SPELL_POISON_BOLT);
131-
events.Repeat(4s, 12s);
132-
break;
133-
case EVENT_POISON_CLOUD:
134-
DoCastSelf(SPELL_POISON_CLOUD);
135-
events.Repeat(20s);
136-
break;
137-
default:
138-
break;
150+
UpdateOutOfCombatEvents(diff);
151+
return;
152+
}
153+
154+
events.Update(diff);
155+
156+
if (me->HasUnitState(UNIT_STATE_CASTING))
157+
return;
158+
159+
while (uint32 eventId = events.ExecuteEvent())
160+
{
161+
switch (eventId)
162+
{
163+
case EVENT_SLIME_SPRAY:
164+
DoCastSelf(SPELL_SLIME_SPRAY);
165+
events.Repeat(4s, 12s);
166+
break;
167+
case EVENT_POISON_BOLT:
168+
DoCastSelf(SPELL_POISON_BOLT);
169+
events.Repeat(4s, 12s);
170+
break;
171+
case EVENT_POISON_CLOUD:
172+
DoCastSelf(SPELL_POISON_CLOUD);
173+
events.Repeat(20s);
174+
break;
175+
default:
176+
break;
177+
}
178+
179+
if (me->HasUnitState(UNIT_STATE_CASTING))
180+
return;
181+
}
182+
183+
DoMeleeAttackIfReady();
184+
}
185+
186+
void UpdateOutOfCombatEvents(uint32 diff)
187+
{
188+
events.Update(diff);
189+
190+
while (uint32 eventId = events.ExecuteEvent())
191+
{
192+
switch (eventId)
193+
{
194+
case EVENT_INTRO_1:
195+
DoCastSelf(SPELL_SUMMON_INCOMBAT_TRIGGER);
196+
events.ScheduleEvent(EVENT_INTRO_2, 2s);
197+
break;
198+
case EVENT_INTRO_2:
199+
Talk(SAY_INTRO);
200+
break;
201+
case EVENT_ACTIVATE_1:
202+
me->SetReactState(REACT_AGGRESSIVE);
203+
me->RemoveUnitFlag(UNIT_FLAG_UNINTERACTIBLE);
204+
events.ScheduleEvent(EVENT_ACTIVATE_2, 4s);
205+
break;
206+
case EVENT_ACTIVATE_2:
207+
Talk(SAY_AGGRO);
208+
me->GetMotionMaster()->MovePath(PATH_ROOM, false);
209+
break;
210+
default:
211+
break;
212+
}
139213
}
140214
}
141215
};
@@ -154,10 +228,10 @@ struct BroggokPrisionersAI : public ScriptedAI
154228
void Reset() override
155229
{
156230
scheduler.CancelAll();
157-
scheduler.Schedule(1s, 5s, [this](TaskContext emote)
231+
scheduler.Schedule(1s, 5s, [this](TaskContext task)
158232
{
159233
me->HandleEmoteCommand(Trinity::Containers::SelectRandomContainerElement(PrisionersEmotes));
160-
emote.Repeat(6s, 9s);
234+
task.Repeat(6s, 9s);
161235
});
162236
}
163237

@@ -202,17 +276,18 @@ struct npc_nascent_fel_orc : public BroggokPrisionersAI
202276

203277
void ScheduleEvents() override
204278
{
205-
scheduler.Schedule(15s, [this](TaskContext concussionBlow)
206-
{
207-
DoCastVictim(SPELL_CONCUSSION_BLOW);
208-
concussionBlow.Repeat(8s, 11s);
209-
}).Schedule(7s, [this](TaskContext stomp)
210-
{
211-
DoCastVictim(SPELL_STOMP);
212-
stomp.Repeat(16s, 21s);
213-
});
279+
scheduler
280+
.Schedule(15s, [this](TaskContext task)
281+
{
282+
DoCastVictim(SPELL_CONCUSSION_BLOW);
283+
task.Repeat(8s, 11s);
284+
})
285+
.Schedule(7s, [this](TaskContext task)
286+
{
287+
DoCastSelf(SPELL_STOMP);
288+
task.Repeat(16s, 21s);
289+
});
214290
}
215-
216291
};
217292

218293
// 17429 - Fel Orc Neophyte
@@ -222,17 +297,19 @@ struct npc_fel_orc_neophyte : public BroggokPrisionersAI
222297

223298
void ScheduleEvents() override
224299
{
225-
scheduler.Schedule(5s, [this](TaskContext charge)
226-
{
227-
DoCastVictim(SPELL_CHARGE);
228-
charge.Repeat(20s);
229-
}).Schedule(1s, [this](TaskContext frenzy)
230-
{
231-
DoCastSelf(SPELL_FRENZY);
232-
frenzy.Repeat(12s, 13s);
233-
});
300+
scheduler
301+
.Schedule(5s, [this](TaskContext task)
302+
{
303+
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0))
304+
DoCast(target, SPELL_CHARGE);
305+
task.Repeat(20s);
306+
})
307+
.Schedule(1s, [this](TaskContext task)
308+
{
309+
DoCastSelf(SPELL_FRENZY);
310+
task.Repeat(12s, 13s);
311+
});
234312
}
235-
236313
};
237314

238315
// 181982 - Cell Door Lever

src/server/scripts/Outland/HellfireCitadel/BloodFurnace/instance_blood_furnace.cpp

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -221,7 +221,6 @@ class instance_blood_furnace : public InstanceMapScript
221221
{
222222
if (!prisoner->IsAlive())
223223
prisoner->Respawn(true);
224-
prisoner->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
225224
prisoner->SetImmuneToAll(true);
226225
if (prisoner->IsAIEnabled())
227226
prisoner->AI()->EnterEvadeMode();
@@ -313,7 +312,6 @@ class instance_blood_furnace : public InstanceMapScript
313312
for (GuidSet::const_iterator i = prisoners.begin(); i != prisoners.end(); ++i)
314313
if (Creature* prisoner = instance->GetCreature(*i))
315314
{
316-
prisoner->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
317315
prisoner->SetImmuneToAll(false);
318316
prisoner->AI()->DoZoneInCombat();
319317
}

0 commit comments

Comments
 (0)