Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Loading...
Searching...
No Matches
boss_sulfuron_harbinger.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_Sulfuron_Harbringer
8SD%Complete: 80
9SDComment: Adds NYI
10SDCategory: Molten Core
11EndScriptData */
12
13#include "ObjectMgr.h"
14#include "ScriptMgr.h"
15#include "ScriptedCreature.h"
16#include "molten_core.h"
17
19{
20 // Sulfuron Harbringer
26
27 // Adds
28 SPELL_HEAL = 19775,
31};
32
45
47{
48 public:
49 boss_sulfuron() : CreatureScript("boss_sulfuron") { }
50
51 struct boss_sulfuronAI : public BossAI
52 {
54 {
55 }
56
58 {
59 BossAI::EnterCombat(victim);
60 events.ScheduleEvent(EVENT_DARK_STRIKE, 10000);
61 events.ScheduleEvent(EVENT_DEMORALIZING_SHOUT, 15000);
62 events.ScheduleEvent(EVENT_INSPIRE, 13000);
63 events.ScheduleEvent(EVENT_KNOCKDOWN, 6000);
64 events.ScheduleEvent(EVENT_FLAMESPEAR, 2000);
65 }
66
68 {
69 if (!UpdateVictim())
70 return;
71
72 events.Update(diff);
73
74 if (me->HasUnitState(UNIT_STATE_CASTING))
75 return;
76
77 while (uint32 eventId = events.ExecuteEvent())
78 {
79 switch (eventId)
80 {
83 events.ScheduleEvent(EVENT_DARK_STRIKE, std::rand() % 18000 + 15000);
84 break;
87 events.ScheduleEvent(EVENT_DEMORALIZING_SHOUT, std::rand() % 20000 + 15000);
88 break;
89 case EVENT_INSPIRE:
90 {
91 std::list<Creature*> healers = DoFindFriendlyMissingBuff(45.0f, SPELL_INSPIRE);
92 if (!healers.empty())
94
96 events.ScheduleEvent(EVENT_INSPIRE, std::rand() % 26000 + 20000);
97 break;
98 }
99 case EVENT_KNOCKDOWN:
101 events.ScheduleEvent(EVENT_KNOCKDOWN, std::rand() % 15000 + 12000);
102 break;
103 case EVENT_FLAMESPEAR:
104 if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 0.0f, true))
105 DoCast(target, SPELL_FLAMESPEAR);
106 events.ScheduleEvent(EVENT_FLAMESPEAR, std::rand() % 16000 + 12000);
107 break;
108 default:
109 break;
110 }
111 }
112
114 }
115 };
116
118 {
119 return new boss_sulfuronAI(creature);
120 }
121};
122
124{
125 public:
126 npc_flamewaker_priest() : CreatureScript("npc_flamewaker_priest") { }
127
129 {
131 {
132 }
133
135 {
136 events.Reset();
137 }
138
139 void JustDied(Unit* /*killer*/) OVERRIDE
140 {
141 events.Reset();
142 }
143
145 {
147 events.ScheduleEvent(EVENT_HEAL, std::rand() % 30000 + 15000);
148 events.ScheduleEvent(EVENT_SHADOW_WORD_PAIN, 2000);
149 events.ScheduleEvent(EVENT_IMMOLATE, 8000);
150 }
151
153 {
154 if (!UpdateVictim())
155 return;
156
157 events.Update(diff);
158
159 if (me->HasUnitState(UNIT_STATE_CASTING))
160 return;
161
162 while (uint32 eventId = events.ExecuteEvent())
163 {
164 switch (eventId)
165 {
166 case EVENT_HEAL:
167 if (Unit* target = DoSelectLowestHpFriendly(60.0f, 1))
168 DoCast(target, SPELL_HEAL);
169 events.ScheduleEvent(EVENT_HEAL, std::rand() % 20000 + 15000);
170 break;
172 if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 0.0f, true, -SPELL_SHADOWWORDPAIN))
174 events.ScheduleEvent(EVENT_SHADOW_WORD_PAIN, std::rand() % 26000 + 18000);
175 break;
176 case EVENT_IMMOLATE:
177 if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 0.0f, true, -SPELL_IMMOLATE))
178 DoCast(target, SPELL_IMMOLATE);
179 events.ScheduleEvent(EVENT_IMMOLATE, std::rand() % 25000 + 15000);
180 break;
181 default:
182 break;
183 }
184 }
185
187 }
188
189 private:
191 };
192
194 {
195 return new npc_flamewaker_priestAI(creature);
196 }
197};
198
200{
201 new boss_sulfuron();
203}
std::uint32_t uint32
Definition Define.h:77
#define OVERRIDE
Definition Define.h:60
@ UNIT_STATE_CASTING
Definition Unit.h:527
@ SELECT_TARGET_RANDOM
Definition UnitAI.h:23
@ SPELL_DEMORALIZING_SHOUT
@ EVENT_DEMORALIZING_SHOUT
@ SPELL_KNOCKDOWN
void AddSC_boss_sulfuron()
@ SPELL_DEMORALIZING_SHOUT
@ EVENT_SHADOW_WORD_PAIN
@ EVENT_DEMORALIZING_SHOUT
@ EVENT_IMMOLATE
@ SPELL_IMMOLATE
EventMap events
BossAI(Creature *creature, uint32 bossId)
void EnterCombat(Unit *) OVERRIDE
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
CreatureAI * GetAI(Creature *creature) const OVERRIDE
CreatureAI * GetAI(Creature *creature) const OVERRIDE
@ BOSS_SULFURON_HARBINGER
Definition molten_core.h:17
C::value_type const & SelectRandomContainerElement(C const &container)
Definition Containers.h:48
Creature * me
Unit * DoSelectLowestHpFriendly(float range, uint32 minHPDiff=1)
void EnterCombat(Unit *) OVERRIDE
std::list< Creature * > DoFindFriendlyMissingBuff(float range, uint32 spellId)
ScriptedAI(Creature *creature)
void EnterCombat(Unit *victim) OVERRIDE
void UpdateAI(uint32 diff) OVERRIDE
== Triggered Actions Requested ==================
void UpdateAI(uint32 diff) OVERRIDE
== Triggered Actions Requested ==================