Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Loading...
Searching...
No Matches
boss_moam.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#include "ScriptMgr.h"
7#include "ScriptedCreature.h"
8#include "ruins_of_ahnqiraj.h"
9
15
17{
21 SPELL_SUMMON_MANA_FIEND_1 = 25681, // TARGET_DEST_CASTER_FRONT
22 SPELL_SUMMON_MANA_FIEND_2 = 25682, // TARGET_DEST_CASTER_LEFT
23 SPELL_SUMMON_MANA_FIEND_3 = 25683, // TARGET_DEST_CASTER_RIGHT
25};
26
35
41
43{
44 public:
45 boss_moam() : CreatureScript("boss_moam") { }
46
47 struct boss_moamAI : public BossAI
48 {
49 boss_moamAI(Creature* creature) : BossAI(creature, DATA_MOAM)
50 {
51 }
52
54 {
55 _Reset();
56 me->SetPower(POWER_MANA, 0);
57 _isStonePhase = false;
58 events.ScheduleEvent(EVENT_STONE_PHASE, 90000);
59 //events.ScheduleEvent(EVENT_WIDE_SLASH, 11000);
60 }
61
62 void DamageTaken(Unit* /*attacker*/, uint32& /*damage*/) OVERRIDE
63 {
64 if (!_isStonePhase && HealthBelowPct(45))
65 {
66 _isStonePhase = true;
68 }
69 }
70
71 void DoAction(int32 action) OVERRIDE
72 {
73 switch (action)
74 {
76 {
77 me->RemoveAurasDueToSpell(SPELL_ENERGIZE);
78 events.ScheduleEvent(EVENT_STONE_PHASE, 90000);
79 _isStonePhase = false;
80 break;
81 }
83 {
88 events.ScheduleEvent(EVENT_STONE_PHASE_END, 90000);
89 break;
90 }
91 default:
92 break;
93 }
94 }
95
97 {
98 if (!UpdateVictim())
99 return;
100
101 events.Update(diff);
102
103 if (me->GetPower(POWER_MANA) == me->GetMaxPower(POWER_MANA))
104 {
105 if (_isStonePhase)
108 me->SetPower(POWER_MANA, 0);
109 }
110
111 if (_isStonePhase)
112 {
113 if (events.ExecuteEvent() == EVENT_STONE_PHASE_END)
115 return;
116 }
117
118 // Messing up mana-drain channel
119 //if (me->HasUnitState(UNIT_STATE_CASTING))
120 // return;
121
122 while (uint32 eventId = events.ExecuteEvent())
123 {
124 switch (eventId)
125 {
128 break;
129 case EVENT_DRAIN_MANA:
130 {
131 std::list<Unit*> targetList;
132 {
133 const std::list<HostileReference*>& threatlist = me->getThreatManager().getThreatList();
134 for (std::list<HostileReference*>::const_iterator itr = threatlist.begin(); itr != threatlist.end(); ++itr)
135 if ((*itr)->getTarget()->GetTypeId() == TypeID::TYPEID_PLAYER && (*itr)->getTarget()->getPowerType() == POWER_MANA)
136 targetList.push_back((*itr)->getTarget());
137 }
138
140
141 for (std::list<Unit*>::iterator itr = targetList.begin(); itr != targetList.end(); ++itr)
143
144 events.ScheduleEvent(EVENT_DRAIN_MANA, std::rand() % 15000 + 5000);
145 break;
146 }/*
147 case EVENT_WIDE_SLASH:
148 DoCast(me, SPELL_WIDE_SLASH);
149 events.ScheduleEvent(EVENT_WIDE_SLASH, 11000);
150 break;
151 case EVENT_TRASH:
152 DoCast(me, SPELL_TRASH);
153 events.ScheduleEvent(EVENT_WIDE_SLASH, 16000);
154 break;*/
155 default:
156 break;
157 }
158 }
159
161 }
162 private:
164 };
165
167 {
168 return new boss_moamAI(creature);
169 }
170};
171
173{
174 new boss_moam();
175}
Actions
std::int32_t int32
Definition Define.h:73
std::uint32_t uint32
Definition Define.h:77
#define OVERRIDE
Definition Define.h:60
@ TYPEID_PLAYER
Definition Object.h:55
@ POWER_MANA
@ EVENT_WIDE_SLASH
@ ACTION_STONE_PHASE_START
Definition boss_moam.cpp:38
@ ACTION_STONE_PHASE_END
Definition boss_moam.cpp:39
@ SPELL_ARCANE_ERUPTION
Definition boss_moam.cpp:20
@ SPELL_SUMMON_MANA_FIEND_3
Definition boss_moam.cpp:23
@ SPELL_ENERGIZE
Definition boss_moam.cpp:24
@ SPELL_DRAIN_MANA
Definition boss_moam.cpp:19
@ SPELL_SUMMON_MANA_FIEND_2
Definition boss_moam.cpp:22
@ SPELL_SUMMON_MANA_FIEND_1
Definition boss_moam.cpp:21
void AddSC_boss_moam()
@ EMOTE_AGGRO
Definition boss_moam.cpp:12
@ EMOTE_MANA_FULL
Definition boss_moam.cpp:13
@ EVENT_STONE_PHASE_END
Definition boss_moam.cpp:32
@ EVENT_STONE_PHASE
Definition boss_moam.cpp:31
@ EVENT_DRAIN_MANA
Definition boss_moam.cpp:30
@ EVENT_TRAMPLE
Definition boss_moam.cpp:29
@ SPELL_DRAIN_MANA
EventMap events
BossAI(Creature *creature, uint32 bossId)
bool UpdateVictim()
CreatureScript(const char *name)
void DoMeleeAttackIfReady()
Definition UnitAI.cpp:28
void DoCast(uint32 spellId)
Definition UnitAI.cpp:110
void DoCastAOE(uint32 spellId, bool triggered=false)
Definition UnitAI.cpp:176
Definition Unit.h:1367
CreatureAI * GetAI(Creature *creature) const OVERRIDE
void RandomResizeList(std::list< T > &list, uint32 size)
Definition Containers.h:19
@ DATA_MOAM
Creature * me
bool HealthBelowPct(uint32 pct) const
void DamageTaken(Unit *, uint32 &) OVERRIDE
Definition boss_moam.cpp:62
void Reset() OVERRIDE
Definition boss_moam.cpp:53
void DoAction(int32 action) OVERRIDE
Definition boss_moam.cpp:71
boss_moamAI(Creature *creature)
Definition boss_moam.cpp:49
void UpdateAI(uint32 diff) OVERRIDE
== Triggered Actions Requested ==================
Definition boss_moam.cpp:96