Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Loading...
Searching...
No Matches
boss_broggok.cpp
Go to the documentation of this file.
1/*
2* This file is part of Project SkyFire https://www.projectskyfire.org.
3* See LICENSE.md file for Copyright information
4*/
5
6/* ScriptData
7SDName: Boss_Broggok
8SD%Complete: 70
9SDComment: pre-event not made
10SDCategory: Hellfire Citadel, Blood Furnace
11EndScriptData */
12
13#include "ScriptMgr.h"
14#include "ScriptedCreature.h"
15#include "blood_furnace.h"
16
18{
20};
21
23{
27
29};
30
32{
33public:
34 boss_broggok() : CreatureScript("boss_broggok") { }
35
36 struct boss_broggokAI : public BossAI
37 {
39 {
40 instance = creature->GetInstanceScript();
41
45 canAttack = false;
46 }
47
57
58 void EnterCombat(Unit* /*who*/) OVERRIDE
59 {
61 }
62
64 {
65 summoned->setFaction(16);
68 summoned->CastSpell(summoned, SPELL_POISON, false, 0, 0, me->GetGUID());
69 }
70
72 {
73 if (!UpdateVictim())
74 return;
75 if (!canAttack)
76 return;
77 if (AcidSpray_Timer <= diff)
78 {
80 AcidSpray_Timer = 4000+rand()%8000;
81 }
82 else
83 AcidSpray_Timer -=diff;
84
85 if (PoisonBolt_Timer <= diff)
86 {
88 PoisonBolt_Timer = 4000+rand()%8000;
89 }
90 else
91 PoisonBolt_Timer -=diff;
92
93 if (PoisonSpawn_Timer <= diff)
94 {
96 PoisonSpawn_Timer = 20000;
97 }
98 else
99 PoisonSpawn_Timer -=diff;
100
102 }
103
104 void JustDied(Unit* /*killer*/) OVERRIDE
105 {
106 if (instance)
107 {
108 instance->HandleGameObject(instance->GetData64(DATA_DOOR4), true);
109 instance->HandleGameObject(instance->GetData64(DATA_DOOR5), true);
111 }
112 }
113
115 {
116 switch (action)
117 {
119 me->SetInCombatWithZone();
120 break;
122 me->SetReactState(REACT_AGGRESSIVE);
124 canAttack = true;
125 break;
127 me->SetReactState(REACT_PASSIVE);
129 canAttack = false;
130 break;
131 }
132 }
133
134 private:
136
141 };
142
144 {
145 return new boss_broggokAI(creature);
146 }
147};
148
150{
151public:
152 go_broggok_lever() : GameObjectScript("go_broggok_lever") { }
153
155 {
156 if (InstanceScript* instance = go->GetInstanceScript())
157 if (instance->GetData(TYPE_BROGGOK_EVENT) != DONE && instance->GetData(TYPE_BROGGOK_EVENT) != IN_PROGRESS)
158 {
159 instance->SetData(TYPE_BROGGOK_EVENT, IN_PROGRESS);
160 if (Creature* broggok = Creature::GetCreature(*go, instance->GetData64(DATA_BROGGOK)))
161 broggok->AI()->DoAction(ACTION_PREPARE_BROGGOK);
162 }
163 go->UseDoorOrButton();
164 return false;
165 }
166};
167
169{
170 new boss_broggok();
171 new go_broggok_lever();
172}
std::int32_t int32
Definition Define.h:73
std::uint32_t uint32
Definition Define.h:77
#define OVERRIDE
Definition Define.h:60
@ IN_PROGRESS
@ DONE
@ NOT_STARTED
@ REACT_PASSIVE
Definition Unit.h:1156
@ REACT_AGGRESSIVE
Definition Unit.h:1158
@ UNIT_FLAG_NON_ATTACKABLE
Definition Unit.h:626
@ UNIT_FLAG_IMMUNE_TO_NPC
Definition Unit.h:634
@ UNIT_FLAG_NOT_SELECTABLE
Definition Unit.h:650
@ UNIT_FLAG_IMMUNE_TO_PC
Definition Unit.h:633
@ UNIT_FIELD_FLAGS
@ ACTION_PREPARE_BROGGOK
@ ACTION_ACTIVATE_BROGGOK
@ ACTION_RESET_BROGGOK
@ TYPE_BROGGOK_EVENT
@ DATA_DOOR5
@ DATA_BROGGOK
@ DATA_DOOR4
@ SPELL_POISON_CLOUD
@ SAY_AGGRO
@ SPELL_POISON_BOLT
@ SPELL_POISON
@ SPELL_SLIME_SPRAY
@ SPELL_POISON_CLOUD
void AddSC_boss_broggok()
#define SAY_AGGRO
@ SPELL_POISON_BOLT
@ SPELL_SLIME_SPRAY
BossAI(Creature *creature, uint32 bossId)
void Talk(uint8 id, WorldObject const *whisperTarget=NULL)
bool UpdateVictim()
CreatureScript(const char *name)
GameObjectScript(const char *name)
void DoMeleeAttackIfReady()
Definition UnitAI.cpp:28
void DoCast(uint32 spellId)
Definition UnitAI.cpp:110
void DoCastVictim(uint32 spellId, bool triggered=false)
Definition UnitAI.cpp:168
Definition Unit.h:1367
static Creature * GetCreature(WorldObject &object, uint64 guid)
Definition Unit.cpp:4905
InstanceScript * GetInstanceScript()
Definition Object.cpp:1612
CreatureAI * GetAI(Creature *creature) const OVERRIDE
bool OnGossipHello(Player *, GameObject *go) OVERRIDE
Creature * me
void UpdateAI(uint32 diff) OVERRIDE
== Triggered Actions Requested ==================
void JustDied(Unit *) OVERRIDE
void DoAction(int32 action) OVERRIDE
void JustSummoned(Creature *summoned) OVERRIDE
boss_broggokAI(Creature *creature)
void EnterCombat(Unit *) OVERRIDE
@ SPELL_POISON