Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Loading...
Searching...
No Matches
boss_the_maker.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_The_Maker
8SD%Complete: 80
9SDComment: Mind control no support
10SDCategory: Hellfire Citadel, Blood Furnace
11EndScriptData */
12
13#include "ScriptMgr.h"
14#include "ScriptedCreature.h"
15#include "blood_furnace.h"
16
18{
22};
23
31
33{
34public:
35 boss_the_maker() : CreatureScript("boss_the_maker") { }
36
38 {
39 boss_the_makerAI(Creature* creature) : ScriptedAI(creature)
40 {
41 instance = creature->GetInstanceScript();
42 }
43
45
50
52 {
53 AcidSpray_Timer = 15000;
55 Domination_Timer = 120000;
56 Knockdown_Timer = 10000;
57
58 if (!instance)
59 return;
60
62 instance->HandleGameObject(instance->GetData64(DATA_DOOR2), true);
63 }
64
65 void EnterCombat(Unit* /*who*/) OVERRIDE
66 {
68
69 if (!instance)
70 return;
71
73 instance->HandleGameObject(instance->GetData64(DATA_DOOR2), false);
74 }
75
76 void KilledUnit(Unit* /*victim*/) OVERRIDE
77 {
79 }
80
81 void JustDied(Unit* /*killer*/) OVERRIDE
82 {
84
85 if (!instance)
86 return;
87
89 instance->HandleGameObject(instance->GetData64(DATA_DOOR2), true);
90 instance->HandleGameObject(instance->GetData64(DATA_DOOR3), true);
91 }
92
94 {
95 if (!UpdateVictim())
96 return;
97
98 if (AcidSpray_Timer <= diff)
99 {
101 AcidSpray_Timer = 15000 + rand() % 8000;
102 }
103 else
104 AcidSpray_Timer -= diff;
105
106 if (ExplodingBreaker_Timer <= diff)
107 {
108 if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
110 ExplodingBreaker_Timer = 4000 + rand() % 8000;
111 }
112 else
114
115 /* // Disabled until Core Support for mind control
116 if (domination_timer_timer <= diff)
117 {
118 Unit* target;
119 target = SelectUnit(SELECT_TARGET_RANDOM, 0);
120
121 DoCast(target, SPELL_DOMINATION);
122
123 domination_timer = 120000;
124 } else domination_timer -=diff;
125 */
126
127 if (Knockdown_Timer <= diff)
128 {
130 Knockdown_Timer = 4000 + rand() % 8000;
131 }
132 else
133 Knockdown_Timer -= diff;
134
136 }
137 };
138
140 {
141 return new boss_the_makerAI(creature);
142 }
143};
144
146{
147 new boss_the_maker();
148}
149
std::uint32_t uint32
Definition Define.h:77
#define OVERRIDE
Definition Define.h:60
@ IN_PROGRESS
@ DONE
@ NOT_STARTED
@ SELECT_TARGET_RANDOM
Definition UnitAI.h:23
@ TYPE_THE_MAKER_EVENT
@ DATA_DOOR3
@ DATA_DOOR2
#define SAY_AGGRO
#define SAY_KILL
@ SPELL_KNOCKDOWN
@ SAY_AGGRO
@ SAY_KILL
@ SAY_DIE
@ SPELL_KNOCKDOWN
@ SPELL_EXPLODING_BREAKER
@ SPELL_ACID_SPRAY
@ SPELL_DOMINATION
void AddSC_boss_the_maker()
void Talk(uint8 id, WorldObject const *whisperTarget=NULL)
bool UpdateVictim()
CreatureScript(const char *name)
void DoMeleeAttackIfReady()
Definition UnitAI.cpp:28
void DoCast(uint32 spellId)
Definition UnitAI.cpp:110
Unit * SelectTarget(SelectAggroTarget targetType, uint32 position=0, float dist=0.0f, bool playerOnly=false, int32 aura=0)
Definition UnitAI.cpp:66
void DoCastVictim(uint32 spellId, bool triggered=false)
Definition UnitAI.cpp:168
Definition Unit.h:1367
InstanceScript * GetInstanceScript()
Definition Object.cpp:1612
CreatureAI * GetAI(Creature *creature) const OVERRIDE
ScriptedAI(Creature *creature)
void EnterCombat(Unit *) OVERRIDE
void UpdateAI(uint32 diff) OVERRIDE
== Triggered Actions Requested ==================