AzerothCore 3.3.5a
OpenSource WoW Emulator
Loading...
Searching...
No Matches
boss_janalai::boss_janalaiAI Struct Reference
Inheritance diagram for boss_janalai::boss_janalaiAI:
ScriptedAI CreatureAI UnitAI

Public Member Functions

 boss_janalaiAI (Creature *creature)
 
void Reset () override
 
void JustDied (Unit *) override
 
void KilledUnit (Unit *) override
 
void JustEngagedWith (Unit *) override
 Called for reaction when initially engaged.
 
void DamageDealt (Unit *target, uint32 &damage, DamageEffectType) override
 
void FireWall ()
 
void SpawnBombs ()
 
bool HatchAllEggs (uint32 action)
 
void Boom ()
 
void HandleBombSequence ()
 
void UpdateAI (uint32 diff) override
 
bool CheckEvadeIfOutOfCombatArea () const override
 
- Public Member Functions inherited from ScriptedAI
 ScriptedAI (Creature *creature)
 
 ~ScriptedAI () override
 
void AttackStartNoMove (Unit *target)
 
void DamageTaken (Unit *, uint32 &, DamageEffectType, SpellSchoolMask) override
 
void UpdateAI (uint32 diff) override
 
void JustDied (Unit *) override
 
void KilledUnit (Unit *) override
 
void JustSummoned (Creature *) override
 
void SummonedCreatureDespawn (Creature *) override
 
void SpellHit (Unit *, SpellInfo const *) override
 
void SpellHitTarget (Unit *, SpellInfo const *) override
 
void MovementInform (uint32, uint32) override
 
void OnPossess (bool)
 
bool IsInRoom (const Position *pos, Axis axis, bool above)
 
void Reset () override
 
void JustEngagedWith (Unit *) override
 Called for reaction when initially engaged.
 
void AttackStart (Unit *) override
 
void DoStartMovement (Unit *target, float distance=0.0f, float angle=0.0f)
 
void DoStartNoMovement (Unit *target)
 
void DoStopAttack ()
 
void DoCastSpell (Unit *target, SpellInfo const *spellInfo, bool triggered=false)
 
void DoPlaySoundToSet (WorldObject *source, uint32 soundId)
 
void DoPlayMusic (uint32 soundId, bool zone)
 
void DoAddThreat (Unit *unit, float amount)
 
void DoModifyThreatByPercent (Unit *unit, int32 pct)
 
void DoResetThreat (Unit *unit)
 
void DoResetThreatList ()
 
float DoGetThreat (Unit *unit)
 
void DoTeleportPlayer (Unit *unit, float x, float y, float z, float o)
 
void DoTeleportAll (float x, float y, float z, float o)
 
UnitDoSelectLowestHpFriendly (float range, uint32 minHPDiff=1)
 
std::list< Creature * > DoFindFriendlyCC (float range)
 
std::list< Creature * > DoFindFriendlyMissingBuff (float range, uint32 spellId)
 
PlayerGetPlayerAtMinimumRange (float minRange)
 
CreatureDoSpawnCreature (uint32 entry, float offsetX, float offsetY, float offsetZ, float angle, uint32 type, uint32 despawntime)
 
bool IsUniqueTimedEventDone (uint32 id) const
 
void SetUniqueTimedEventDone (uint32 id)
 
void ResetUniqueTimedEvent (uint32 id)
 
void ClearUniqueTimedEventsDone ()
 
void ScheduleTimedEvent (Milliseconds timerMin, Milliseconds timerMax, std::function< void()> exec, Milliseconds repeatMin, Milliseconds repeatMax=0s, uint32 uniqueId=0)
 
void ScheduleTimedEvent (Milliseconds timerMax, std::function< void()> exec, Milliseconds repeatMin, Milliseconds repeatMax=0s, uint32 uniqueId=0)
 
void ScheduleUniqueTimedEvent (Milliseconds timer, std::function< void()> exec, uint32 uniqueId)
 
bool HealthBelowPct (uint32 pct) const
 
bool HealthAbovePct (uint32 pct) const
 
SpellInfo const * SelectSpell (Unit *target, uint32 school, uint32 mechanic, SelectTargetType targets, uint32 powerCostMin, uint32 powerCostMax, float rangeMin, float rangeMax, SelectEffect effect)
 
void SetEquipmentSlots (bool loadDefault, int32 mainHand=EQUIP_NO_CHANGE, int32 offHand=EQUIP_NO_CHANGE, int32 ranged=EQUIP_NO_CHANGE)
 
void SetCombatMovement (bool allowMovement)
 
bool IsCombatMovementAllowed () const
 
virtual bool CheckEvadeIfOutOfCombatArea () const
 
bool IsHeroic () const
 
Difficulty GetDifficulty () const
 
bool Is25ManRaid () const
 
template<class T >
const T & DUNGEON_MODE (const T &normal5, const T &heroic10) const
 
template<class T >
const T & RAID_MODE (const T &normal10, const T &normal25) const
 
template<class T >
const T & RAID_MODE (const T &normal10, const T &normal25, const T &heroic10, const T &heroic25) const
 
PlayerSelectTargetFromPlayerList (float maxdist, uint32 excludeAura=0, bool mustBeInLOS=false) const
 
- Public Member Functions inherited from CreatureAI
void Talk (uint8 id, WorldObject const *whisperTarget=nullptr, Milliseconds delay=0s)
 Causes the creature to talk/say the text assigned to their entry in the creature_text database table.
 
void Talk (uint8 id, Milliseconds delay)
 
 CreatureAI (Creature *creature)
 
 ~CreatureAI () override
 
void MoveCircleChecks ()
 
void MoveBackwardsChecks ()
 
void MoveInLineOfSight_Safe (Unit *who)
 == Reactions At =================================
 
void TriggerAlert (Unit const *who) const
 
virtual bool CanRespawn ()
 
virtual void EnterEvadeMode (EvadeReason why=EVADE_REASON_OTHER)
 
virtual void JustEngagedWith (Unit *)
 Called for reaction when initially engaged.
 
virtual void JustDied (Unit *)
 
virtual void KilledUnit (Unit *)
 
virtual void JustSummoned (Creature *)
 
virtual void IsSummonedBy (WorldObject *)
 
virtual void SummonedCreatureDespawn (Creature *)
 
virtual void SummonedCreatureDies (Creature *, Unit *)
 
virtual void SummonedCreatureDespawnAll ()
 
virtual void SpellHit (Unit *, SpellInfo const *)
 
virtual void SpellHitTarget (Unit *, SpellInfo const *)
 
virtual void AttackedBy (Unit *)
 
virtual bool IsEscorted ()
 
virtual void JustRespawned ()
 
virtual void MovementInform (uint32, uint32)
 
virtual void PathEndReached (uint32)
 
void OnCharmed (bool apply) override
 
virtual void JustReachedHome ()
 
void DoZoneInCombat (Creature *creature=nullptr, float maxRangeToNearestTarget=250.0f)
 
virtual void ReceiveEmote (Player *, uint32)
 
virtual void OwnerAttackedBy (Unit *)
 
virtual void OwnerAttacked (Unit *)
 
virtual void CorpseRemoved (uint32 &)
 == Triggered Actions Requested ==================
 
virtual void PassengerBoarded (Unit *, int8, bool)
 == Fields =======================================
 
virtual bool BeforeSpellClick (Unit *)
 
virtual void OnSpellClick (Unit *, bool &)
 
virtual bool CanSeeAlways (WorldObject const *)
 
virtual bool CanBeSeen (Player const *)
 
virtual bool CanAlwaysBeDetectable (WorldObject const *)
 
virtual void PetStopAttack ()
 
virtual bool CheckInRoom ()
 
CreatureBoundary const * GetBoundary () const
 
void SetBoundary (CreatureBoundary const *boundary, bool negativeBoundaries=false)
 
bool IsInBoundary (Position const *who=nullptr) const
 
virtual void CalculateThreat (Unit *, float &, SpellInfo const *)
 
virtual bool OnTeleportUnreacheablePlayer (Player *)
 
- Public Member Functions inherited from UnitAI
 UnitAI (Unit *unit)
 
virtual ~UnitAI ()
 
virtual bool CanAIAttack (Unit const *) const
 
virtual void AttackStart (Unit *)
 
virtual void UpdateAI (uint32)=0
 
virtual void InitializeAI ()
 
virtual void Reset ()
 
virtual void OnCharmed (bool apply)=0
 
virtual void DoAction (int32)
 
virtual uint32 GetData (uint32) const
 
virtual void SetData (uint32, uint32)
 
virtual void SetGUID (ObjectGuid, int32=0)
 
virtual ObjectGuid GetGUID (int32=0) const
 
UnitSelectTarget (SelectTargetMethod targetType, uint32 position=0, float dist=0.0f, bool playerOnly=false, bool withTank=true, int32 aura=0)
 
template<class PREDICATE >
UnitSelectTarget (SelectTargetMethod targetType, uint32 position, PREDICATE const &predicate)
 
void SelectTargetList (std::list< Unit * > &targetList, uint32 num, SelectTargetMethod targetType, uint32 position=0, float dist=0.0f, bool playerOnly=false, bool withTank=true, int32 aura=0)
 
template<class PREDICATE >
void SelectTargetList (std::list< Unit * > &targetList, uint32 num, SelectTargetMethod targetType, uint32 position, PREDICATE const &predicate)
 
virtual void JustEnteredCombat (Unit *)
 Called when the unit enters combat (NOTE: Creature engage logic should NOT be here, but in JustEngagedWith, which happens once threat is established!)
 
virtual void JustExitedCombat ()
 Called when the unit leaves combat.
 
virtual void DamageDealt (Unit *, uint32 &, DamageEffectType)
 
virtual void DamageTaken (Unit *, uint32 &, DamageEffectType, SpellSchoolMask)
 
virtual void HealReceived (Unit *, uint32 &)
 
virtual void OnPowerUpdate (Powers, int32, int32, uint32)
 
virtual void HealDone (Unit *, uint32 &)
 
virtual void OnCalculateMeleeDamageReceived (uint32 &, Unit *)
 
virtual void OnCalculateSpellDamageReceived (int32 &, Unit *)
 
virtual void OnCalculatePeriodicTickReceived (uint32 &, Unit *)
 
void AttackStartCaster (Unit *victim, float dist)
 
SpellCastResult DoAddAuraToAllHostilePlayers (uint32 spellid)
 
SpellCastResult DoCast (uint32 spellId)
 
SpellCastResult DoCast (Unit *victim, uint32 spellId, bool triggered=false)
 
SpellCastResult DoCastSelf (uint32 spellId, bool triggered=false)
 
SpellCastResult DoCastToAllHostilePlayers (uint32 spellid, bool triggered=false)
 
SpellCastResult DoCastVictim (uint32 spellId, bool triggered=false)
 
SpellCastResult DoCastAOE (uint32 spellId, bool triggered=false)
 
SpellCastResult DoCastRandomTarget (uint32 spellId, uint32 threatTablePosition=0, float dist=0.0f, bool playerOnly=true, bool triggered=false)
 
SpellCastResult DoCastMaxThreat (uint32 spellId, uint32 threatTablePosition=0, float dist=0.0f, bool playerOnly=true, bool triggered=false)
 Cast spell on the max threat target, which may not always be the current victim.
 
float DoGetSpellMaxRange (uint32 spellId, bool positive=false)
 
void DoMeleeAttackIfReady ()
 
bool DoSpellAttackIfReady (uint32 spell)
 
void DoSpellAttackToRandomTargetIfReady (uint32 spell, uint32 threatTablePosition=0, float dist=0.f, bool playerOnly=true)
 
virtual void SummonMovementInform (Creature *, uint32, uint32)
 
virtual void sGossipHello (Player *)
 
virtual void sGossipSelect (Player *, uint32, uint32)
 
virtual void sGossipSelectCode (Player *, uint32, uint32, char const *)
 
virtual void sQuestAccept (Player *, Quest const *)
 
virtual void sQuestSelect (Player *, Quest const *)
 
virtual void sQuestComplete (Player *, Quest const *)
 
virtual void sQuestReward (Player *, Quest const *, uint32)
 
virtual void sOnGameEvent (bool, uint16)
 
virtual std::string GetDebugInfo () const
 

Public Attributes

InstanceScriptinstance
 
uint32 FireBreathTimer
 
uint32 BombTimer
 
uint32 BombSequenceTimer
 
uint32 BombCount
 
uint32 HatcherTimer
 
uint32 EnrageTimer
 
bool noeggs
 
bool enraged
 
bool isBombing
 
bool isFlameBreathing
 
ObjectGuid FireBombGUIDs [40]
 
- Public Attributes inherited from ScriptedAI
Creatureme
 
bool IsFleeing
 

Additional Inherited Members

- Public Types inherited from ScriptedAI
enum class  Axis {
  AXIS_X ,
  AXIS_Y
}
 
- Public Types inherited from CreatureAI
enum  EvadeReason {
  EVADE_REASON_NO_HOSTILES ,
  EVADE_REASON_BOUNDARY ,
  EVADE_REASON_SEQUENCE_BREAK ,
  EVADE_REASON_NO_PATH ,
  EVADE_REASON_OTHER
}
 
- Static Public Member Functions inherited from CreatureAI
static bool IsInBounds (CreatureBoundary const &boundary, Position const *who)
 
- Static Public Member Functions inherited from UnitAI
static void FillAISpellInfo ()
 
- Static Public Attributes inherited from UnitAI
static AISpellInfoTypeAISpellInfo
 
- Protected Member Functions inherited from CreatureAI
bool UpdateVictim ()
 
bool UpdateVictimWithGaze ()
 
void SetGazeOn (Unit *target)
 
CreatureDoSummon (uint32 entry, Position const &pos, uint32 despawnTime=30000, TempSummonType summonType=TEMPSUMMON_CORPSE_TIMED_DESPAWN)
 
CreatureDoSummon (uint32 entry, WorldObject *obj, float radius=5.0f, uint32 despawnTime=30000, TempSummonType summonType=TEMPSUMMON_CORPSE_TIMED_DESPAWN)
 
CreatureDoSummonFlyer (uint32 entry, WorldObject *obj, float flightZ, float radius=5.0f, uint32 despawnTime=30000, TempSummonType summonType=TEMPSUMMON_CORPSE_TIMED_DESPAWN)
 
virtual void MoveInLineOfSight (Unit *)
 
bool _EnterEvadeMode (EvadeReason why=EVADE_REASON_OTHER)
 
- Protected Attributes inherited from CreatureAI
Creature *const me
 
EventMap events
 
TaskScheduler scheduler
 
CreatureBoundary const * _boundary
 
bool _negateBoundary
 
- Protected Attributes inherited from UnitAI
Unit *const me
 

Detailed Description

Constructor & Destructor Documentation

◆ boss_janalaiAI()

boss_janalai::boss_janalaiAI::boss_janalaiAI ( Creature creature)
inline
121 : ScriptedAI(creature)
122 {
123 instance = creature->GetInstanceScript();
124 }
Definition: ScriptedCreature.h:192
InstanceScript * GetInstanceScript() const
Definition: Object.cpp:1192
InstanceScript * instance
Definition: boss_janalai.cpp:126

References WorldObject::GetInstanceScript(), and instance.

Member Function Documentation

◆ Boom()

void boss_janalai::boss_janalaiAI::Boom ( )
inline
255 {
256 std::list<Creature*> templist;
257 float x, y, z;
258 me->GetPosition(x, y, z);
259
263
264 for (std::list<Creature*>::const_iterator i = templist.begin(); i != templist.end(); ++i)
265 {
266 (*i)->CastSpell(*i, SPELL_FIRE_BOMB_DAMAGE, true);
267 (*i)->RemoveAllAuras();
268 }
269 }
@ NPC_FIRE_BOMB
Definition: boss_janalai.cpp:75
@ SPELL_FIRE_BOMB_DAMAGE
Definition: boss_janalai.cpp:60
Creature * me
Definition: ScriptedCreature.h:282
float GetGridActivationRange() const
Definition: Object.cpp:1623
void GetPosition(float &x, float &y) const
Definition: Position.h:122
static void VisitGridObjects(WorldObject const *obj, T &visitor, float radius, bool dont_load=true)
Definition: CellImpl.h:179
Definition: GridNotifiers.h:470
Definition: GridNotifiers.h:1457

References WorldObject::GetGridActivationRange(), Position::GetPosition(), ScriptedAI::me, NPC_FIRE_BOMB, SPELL_FIRE_BOMB_DAMAGE, and Cell::VisitGridObjects().

Referenced by HandleBombSequence().

◆ CheckEvadeIfOutOfCombatArea()

bool boss_janalai::boss_janalaiAI::CheckEvadeIfOutOfCombatArea ( ) const
inlineoverridevirtual

Reimplemented from ScriptedAI.

423 {
424 return me->GetPositionZ() <= 12.0f;
425 }
float GetPositionZ() const
Definition: Position.h:119

References Position::GetPositionZ(), and ScriptedAI::me.

◆ DamageDealt()

void boss_janalai::boss_janalaiAI::DamageDealt ( Unit target,
uint32 damage,
DamageEffectType   
)
inlineoverridevirtual

Reimplemented from UnitAI.

187 {
189 {
190 if (!me->HasInArc(M_PI / 6, target))
191 damage = 0;
192 }
193 }
bool HasInArc(float arcangle, const Position *pos, float targetRadius=0.0f) const
Definition: Position.cpp:140
bool isFlameBreathing
Definition: boss_janalai.cpp:139

References Position::HasInArc(), isFlameBreathing, and ScriptedAI::me.

◆ FireWall()

void boss_janalai::boss_janalaiAI::FireWall ( )
inline
196 {
197 for (uint8 i = 0; i < 4; ++i)
198 {
199 uint8 WallNum = i == 0 || i == 2 ? 3 : 2;
200
201 for (uint8 j = 0; j < WallNum; j++)
202 {
203 Creature* wall = WallNum == 3
206
207 if (wall)
208 {
209 wall->CastSpell(wall, SPELL_FIRE_WALL, true);
210 }
211 }
212 }
213 }
std::uint8_t uint8
Definition: Define.h:110
@ TEMPSUMMON_TIMED_DESPAWN
Definition: Object.h:44
@ SPELL_FIRE_WALL
Definition: boss_janalai.cpp:49
float FireWallCoords[4][4]
Definition: boss_janalai.cpp:86
Definition: Creature.h:46
TempSummon * SummonCreature(uint32 id, const Position &pos, TempSummonType spwtype=TEMPSUMMON_MANUAL_DESPAWN, uint32 despwtime=0, uint32 vehId=0, SummonPropertiesEntry const *properties=nullptr, bool visibleBySummonerOnly=false) const
Definition: Object.cpp:2343
SpellCastResult CastSpell(SpellCastTargets const &targets, SpellInfo const *spellInfo, CustomSpellValues const *value, TriggerCastFlags triggerFlags=TRIGGERED_NONE, Item *castItem=nullptr, AuraEffect const *triggeredByAura=nullptr, ObjectGuid originalCaster=ObjectGuid::Empty)
Definition: Unit.cpp:1169

References Unit::CastSpell(), FireWallCoords, ScriptedAI::me, NPC_FIRE_BOMB, SPELL_FIRE_WALL, WorldObject::SummonCreature(), and TEMPSUMMON_TIMED_DESPAWN.

Referenced by UpdateAI().

◆ HandleBombSequence()

void boss_janalai::boss_janalaiAI::HandleBombSequence ( )
inline
272 {
273 if (BombCount < 40)
274 {
276 {
277 FireBomb->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
278 DoCast(FireBomb, SPELL_FIRE_BOMB_THROW, true);
279 FireBomb->SetUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
280 }
281 ++BombCount;
282 if (BombCount == 40)
283 {
284 BombSequenceTimer = 5000;
285 }
286 else BombSequenceTimer = 100;
287 }
288 else
289 {
290 Boom();
291 isBombing = false;
292 BombTimer = urand(20000, 40000);
294 if (EnrageTimer <= 10000)
295 EnrageTimer = 0;
296 else
297 EnrageTimer -= 10000;
298 }
299 }
uint32 urand(uint32 min, uint32 max)
Definition: Random.cpp:44
@ UNIT_FLAG_NOT_SELECTABLE
Definition: Unit.h:473
@ SPELL_FIRE_BOMB_CHANNEL
Definition: boss_janalai.cpp:57
@ SPELL_FIRE_BOMB_THROW
Definition: boss_janalai.cpp:58
Unit * GetUnit(WorldObject const &, ObjectGuid const guid)
Definition: ObjectAccessor.cpp:202
SpellCastResult DoCast(uint32 spellId)
Definition: UnitAI.cpp:177
Definition: Unit.h:1302
void RemoveAurasDueToSpell(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, uint8 reqEffMask=0, AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)
Definition: Unit.cpp:4855
uint32 BombCount
Definition: boss_janalai.cpp:131
uint32 BombTimer
Definition: boss_janalai.cpp:129
ObjectGuid FireBombGUIDs[40]
Definition: boss_janalai.cpp:141
void Boom()
Definition: boss_janalai.cpp:254
uint32 BombSequenceTimer
Definition: boss_janalai.cpp:130
uint32 EnrageTimer
Definition: boss_janalai.cpp:133
bool isBombing
Definition: boss_janalai.cpp:137

References BombCount, BombSequenceTimer, BombTimer, Boom(), UnitAI::DoCast(), EnrageTimer, FireBombGUIDs, ObjectAccessor::GetUnit(), isBombing, ScriptedAI::me, Unit::RemoveAurasDueToSpell(), SPELL_FIRE_BOMB_CHANNEL, SPELL_FIRE_BOMB_THROW, UNIT_FLAG_NOT_SELECTABLE, and urand().

Referenced by UpdateAI().

◆ HatchAllEggs()

bool boss_janalai::boss_janalaiAI::HatchAllEggs ( uint32  action)
inline
231 {
232 std::list<Creature*> templist;
233 float x, y, z;
234 me->GetPosition(x, y, z);
235
239
240 //LOG_ERROR("scripts", "Eggs {} at middle", templist.size());
241 if (templist.empty())
242 return false;
243
244 for (std::list<Creature*>::const_iterator i = templist.begin(); i != templist.end(); ++i)
245 {
246 if (action == 1)
247 (*i)->SetDisplayId(10056);
248 else if (action == 2 && (*i)->GetDisplayId() != 11686)
249 (*i)->CastSpell(*i, SPELL_HATCH_EGG, false);
250 }
251 return true;
252 }
@ NPC_EGG
Definition: boss_janalai.cpp:74
@ SPELL_HATCH_EGG
Definition: boss_janalai.cpp:63

References WorldObject::GetGridActivationRange(), Position::GetPosition(), ScriptedAI::me, NPC_EGG, SPELL_HATCH_EGG, and Cell::VisitGridObjects().

Referenced by Reset(), and UpdateAI().

◆ JustDied()

void boss_janalai::boss_janalaiAI::JustDied ( Unit )
inlineoverridevirtual

Reimplemented from ScriptedAI.

167 {
169
171 }
@ DONE
Definition: InstanceScript.h:60
@ SAY_DEATH
Definition: boss_janalai.cpp:40
@ DATA_JANALAIEVENT
Definition: zulaman.h:31
Talk
Definition: boss_fathomlord_karathress.cpp:25
virtual void SetData(uint32, uint32)
Definition: ZoneScript.h:53

References DATA_JANALAIEVENT, DONE, instance, SAY_DEATH, and ZoneScript::SetData().

◆ JustEngagedWith()

void boss_janalai::boss_janalaiAI::JustEngagedWith ( Unit )
inlineoverridevirtual

Called for reaction when initially engaged.

Reimplemented from ScriptedAI.

179 {
181
183 // DoZoneInCombat();
184 }
@ IN_PROGRESS
Definition: InstanceScript.h:58
@ SAY_AGGRO
Definition: boss_janalai.cpp:34

References DATA_JANALAIEVENT, IN_PROGRESS, instance, SAY_AGGRO, and ZoneScript::SetData().

◆ KilledUnit()

void boss_janalai::boss_janalaiAI::KilledUnit ( Unit )
inlineoverridevirtual

Reimplemented from ScriptedAI.

174 {
175 Talk(SAY_SLAY);
176 }
@ SAY_SLAY
Definition: boss_janalai.cpp:39

References SAY_SLAY.

◆ Reset()

void boss_janalai::boss_janalaiAI::Reset ( )
inlineoverridevirtual

Reimplemented from ScriptedAI.

144 {
146
147 FireBreathTimer = 8000;
148 BombTimer = 30000;
149 BombSequenceTimer = 1000;
150 BombCount = 0;
151 HatcherTimer = 10000;
153
154 noeggs = false;
155 isBombing = false;
156 enraged = false;
157
158 isFlameBreathing = false;
159
160 for (uint8 i = 0; i < 40; ++i)
161 FireBombGUIDs[i].Clear();
162
163 HatchAllEggs(1);
164 }
constexpr auto IN_MILLISECONDS
Definition: Common.h:55
constexpr auto MINUTE
Definition: Common.h:49
@ NOT_STARTED
Definition: InstanceScript.h:57
uint32 FireBreathTimer
Definition: boss_janalai.cpp:128
bool enraged
Definition: boss_janalai.cpp:136
bool noeggs
Definition: boss_janalai.cpp:135
bool HatchAllEggs(uint32 action)
Definition: boss_janalai.cpp:230
uint32 HatcherTimer
Definition: boss_janalai.cpp:132

References BombCount, BombSequenceTimer, BombTimer, DATA_JANALAIEVENT, enraged, EnrageTimer, FireBombGUIDs, FireBreathTimer, HatchAllEggs(), HatcherTimer, IN_MILLISECONDS, instance, isBombing, isFlameBreathing, MINUTE, noeggs, NOT_STARTED, and ZoneScript::SetData().

◆ SpawnBombs()

void boss_janalai::boss_janalaiAI::SpawnBombs ( )
inline
216 {
217 float dx, dy;
218 for (int i(0); i < 40; ++i)
219 {
220 dx = float(irand(-area_dx / 2, area_dx / 2));
221 dy = float(irand(-area_dy / 2, area_dy / 2));
222
223 Creature* bomb = DoSpawnCreature(NPC_FIRE_BOMB, dx, dy, 0, 0, TEMPSUMMON_TIMED_DESPAWN, 15000);
224 if (bomb)
225 FireBombGUIDs[i] = bomb->GetGUID();
226 }
227 BombCount = 0;
228 }
int32 irand(int32 min, int32 max)
Definition: Random.cpp:37
const int area_dx
Definition: boss_janalai.cpp:78
const int area_dy
Definition: boss_janalai.cpp:79
Creature * DoSpawnCreature(uint32 entry, float offsetX, float offsetY, float offsetZ, float angle, uint32 type, uint32 despawntime)
Definition: ScriptedCreature.cpp:309
static ObjectGuid GetGUID(Object const *o)
Definition: Object.h:106

References area_dx, area_dy, BombCount, ScriptedAI::DoSpawnCreature(), FireBombGUIDs, Object::GetGUID(), irand(), NPC_FIRE_BOMB, and TEMPSUMMON_TIMED_DESPAWN.

Referenced by UpdateAI().

◆ UpdateAI()

void boss_janalai::boss_janalaiAI::UpdateAI ( uint32  diff)
inlineoverridevirtual

Reimplemented from ScriptedAI.

302 {
304 {
305 if (!me->IsNonMeleeSpellCast(false))
306 isFlameBreathing = false;
307 else
308 return;
309 }
310
311 if (isBombing)
312 {
313 if (BombSequenceTimer <= diff)
315 else
316 BombSequenceTimer -= diff;
317 return;
318 }
319
320 if (!UpdateVictim())
321 return;
322
323 //enrage if under 25% hp before 5 min.
324 if (!enraged && HealthBelowPct(25))
325 EnrageTimer = 0;
326
327 if (EnrageTimer <= diff)
328 {
329 if (!enraged)
330 {
331 DoCast(me, SPELL_ENRAGE, true);
332 enraged = true;
333 EnrageTimer = 300000;
334 }
335 else
336 {
338 DoCast(me, SPELL_BERSERK, true);
339 EnrageTimer = 300000;
340 }
341 }
342 else EnrageTimer -= diff;
343
344 if (BombTimer <= diff)
345 {
347
348 me->AttackStop();
353 //DoTeleportPlayer(me, JanalainPos[0][0], JanalainPos[0][1], JanalainPos[0][2], 0);
354 //DoCast(me, SPELL_TELE_TO_CENTER, true);
355
356 FireWall();
357 SpawnBombs();
358 isBombing = true;
359 BombSequenceTimer = 100;
360
361 //Teleport every Player into the middle
362 Map* map = me->GetMap();
363 if (!map->IsDungeon())
364 return;
365
366 Map::PlayerList const& PlayerList = map->GetPlayers();
367 for (Map::PlayerList::const_iterator i = PlayerList.begin(); i != PlayerList.end(); ++i)
368 if (Player* i_pl = i->GetSource())
369 if (i_pl->IsAlive())
370 DoTeleportPlayer(i_pl, JanalainPos[0][0] - 5 + rand() % 10, JanalainPos[0][1] - 5 + rand() % 10, JanalainPos[0][2], 0);
371 //DoCast(Temp, SPELL_SUMMON_PLAYERS, true) // core bug, spell does not work if too far
372 return;
373 }
374 else BombTimer -= diff;
375
376 if (!noeggs)
377 {
378 if (HealthBelowPct(35))
379 {
381
382 me->AttackStop();
386 DoCast(me, SPELL_HATCH_ALL, false);
387 HatchAllEggs(2);
388 noeggs = true;
389 }
390 else if (HatcherTimer <= diff)
391 {
392 if (HatchAllEggs(0))
393 {
397 HatcherTimer = 90000;
398 }
399 else
400 noeggs = true;
401 }
402 else HatcherTimer -= diff;
403 }
404
406
407 if (FireBreathTimer <= diff)
408 {
409 if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0))
410 {
411 me->AttackStop();
413 DoCast(target, SPELL_FLAME_BREATH, false);
414 me->StopMoving();
415 isFlameBreathing = true;
416 }
417 FireBreathTimer = 8000;
418 }
419 else FireBreathTimer -= diff;
420 }
@ TEMPSUMMON_CORPSE_TIMED_DESPAWN
Definition: Object.h:47
float hatcherway[2][5][3]
Definition: boss_janalai.cpp:94
@ NPC_AMANI_HATCHER
Definition: boss_janalai.cpp:72
@ SAY_FIRE_BOMBS
Definition: boss_janalai.cpp:35
@ SAY_SUMMON_HATCHER
Definition: boss_janalai.cpp:36
@ SAY_ALL_EGGS
Definition: boss_janalai.cpp:37
@ SAY_BERSERK
Definition: boss_janalai.cpp:38
float JanalainPos[1][3]
Definition: boss_janalai.cpp:81
@ SPELL_ENRAGE
Definition: boss_janalai.cpp:50
@ SPELL_HATCH_ALL
Definition: boss_janalai.cpp:53
@ SPELL_FLAME_BREATH
Definition: boss_janalai.cpp:48
@ SPELL_BERSERK
Definition: boss_janalai.cpp:54
Definition: LinkedList.h:139
void DoMeleeAttackIfReady()
Definition: UnitAI.cpp:39
Unit * SelectTarget(SelectTargetMethod targetType, uint32 position=0, float dist=0.0f, bool playerOnly=false, bool withTank=true, int32 aura=0)
Definition: UnitAI.cpp:110
bool UpdateVictim()
Definition: CreatureAI.cpp:268
void DoTeleportPlayer(Unit *unit, float x, float y, float z, float o)
Definition: ScriptedCreature.cpp:457
bool HealthBelowPct(uint32 pct) const
Definition: ScriptedCreature.h:368
Map * GetMap() const
Definition: Object.h:517
float GetOrientation() const
Definition: Position.h:120
Definition: Player.h:1056
MotionMaster * GetMotionMaster()
Definition: Unit.h:2276
bool IsNonMeleeSpellCast(bool withDelayed, bool skipChanneled=false, bool skipAutorepeat=false, bool isAutoshoot=false, bool skipInstant=true) const
Definition: Unit.cpp:4051
void StopMoving()
Definition: Unit.cpp:16918
void StopMovingOnCurrentPos()
Definition: Unit.cpp:16957
void NearTeleportTo(Position &pos, bool casting=false, bool vehicleTeleport=false, bool withPet=false, bool removeTransport=false)
Definition: Unit.cpp:20250
bool AttackStop()
Definition: Unit.cpp:10407
Definition: Map.h:313
bool IsDungeon() const
Definition: Map.h:448
PlayerList const & GetPlayers() const
Definition: Map.h:485
Definition: MapRefMgr.h:26
iterator begin()
Definition: MapRefMgr.h:36
iterator end()
Definition: MapRefMgr.h:37
void Clear(bool reset=true)
Definition: MotionMaster.h:165
void SpawnBombs()
Definition: boss_janalai.cpp:215
void HandleBombSequence()
Definition: boss_janalai.cpp:271
void FireWall()
Definition: boss_janalai.cpp:195

References Unit::AttackStop(), MapRefMgr::begin(), BombSequenceTimer, BombTimer, MotionMaster::Clear(), UnitAI::DoCast(), UnitAI::DoMeleeAttackIfReady(), ScriptedAI::DoTeleportPlayer(), MapRefMgr::end(), enraged, EnrageTimer, FireBreathTimer, FireWall(), WorldObject::GetMap(), Unit::GetMotionMaster(), Position::GetOrientation(), Map::GetPlayers(), HandleBombSequence(), HatchAllEggs(), HatcherTimer, hatcherway, ScriptedAI::HealthBelowPct(), isBombing, Map::IsDungeon(), isFlameBreathing, Unit::IsNonMeleeSpellCast(), JanalainPos, ScriptedAI::me, Unit::NearTeleportTo(), noeggs, NPC_AMANI_HATCHER, SAY_ALL_EGGS, SAY_BERSERK, SAY_FIRE_BOMBS, SAY_SUMMON_HATCHER, UnitAI::SelectTarget(), SpawnBombs(), SPELL_BERSERK, SPELL_ENRAGE, SPELL_FIRE_BOMB_CHANNEL, SPELL_FLAME_BREATH, SPELL_HATCH_ALL, Unit::StopMoving(), Unit::StopMovingOnCurrentPos(), WorldObject::SummonCreature(), TEMPSUMMON_CORPSE_TIMED_DESPAWN, and CreatureAI::UpdateVictim().

Member Data Documentation

◆ BombCount

uint32 boss_janalai::boss_janalaiAI::BombCount

◆ BombSequenceTimer

uint32 boss_janalai::boss_janalaiAI::BombSequenceTimer

Referenced by HandleBombSequence(), Reset(), and UpdateAI().

◆ BombTimer

uint32 boss_janalai::boss_janalaiAI::BombTimer

Referenced by HandleBombSequence(), Reset(), and UpdateAI().

◆ enraged

bool boss_janalai::boss_janalaiAI::enraged

Referenced by Reset(), and UpdateAI().

◆ EnrageTimer

uint32 boss_janalai::boss_janalaiAI::EnrageTimer

Referenced by HandleBombSequence(), Reset(), and UpdateAI().

◆ FireBombGUIDs

ObjectGuid boss_janalai::boss_janalaiAI::FireBombGUIDs[40]

◆ FireBreathTimer

uint32 boss_janalai::boss_janalaiAI::FireBreathTimer

Referenced by Reset(), and UpdateAI().

◆ HatcherTimer

uint32 boss_janalai::boss_janalaiAI::HatcherTimer

Referenced by Reset(), and UpdateAI().

◆ instance

InstanceScript* boss_janalai::boss_janalaiAI::instance

◆ isBombing

bool boss_janalai::boss_janalaiAI::isBombing

Referenced by HandleBombSequence(), Reset(), and UpdateAI().

◆ isFlameBreathing

bool boss_janalai::boss_janalaiAI::isFlameBreathing

Referenced by DamageDealt(), Reset(), and UpdateAI().

◆ noeggs

bool boss_janalai::boss_janalaiAI::noeggs

Referenced by Reset(), and UpdateAI().