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

Public Member Functions

 boss_mimiron (Creature *creature)
 
void Reset () override
 
void RegisterFlame (ObjectGuid guid)
 
void UnregisterFlame (ObjectGuid guid)
 
uint32 GetActiveFlameCount () const
 
void AttackStart (Unit *who) override
 
void JustReachedHome () override
 
void JustEngagedWith (Unit *) override
 Called for reaction when initially engaged - this happens after JustEnteredCombat.
 
void UpdateAI (uint32 diff) override
 Use to start attacking a target. Called just before JustEngagedWith()
 
void SpellHit (Unit *, SpellInfo const *spellInfo) override
 
void MoveInLineOfSight (Unit *) override
 
void EnterEvadeMode (EvadeReason why) override
 
void ResetGameObjects ()
 
void CloseDoorAndButton ()
 
void SetData (uint32, uint32 value) override
 
uint32 GetData (uint32 id) const override
 
- Public Member Functions inherited from BossAI
 BossAI (Creature *creature, uint32 bossId)
 
 ~BossAI () override
 
bool CanRespawn () override
 
void OnSpellCast (SpellInfo const *spell) override
 
void OnChannelFinished (SpellInfo const *spell) override
 
void OnSpellFailed (SpellInfo const *spell) override
 
void DamageTaken (Unit *attacker, uint32 &damage, DamageEffectType damagetype, SpellSchoolMask damageSchoolMask) override
 Called at any Damage from any attacker (before damage apply)
 
void JustSummoned (Creature *summon) override
 
void SummonedCreatureDespawn (Creature *summon) override
 
void SummonedCreatureDespawnAll () override
 
void UpdateAI (uint32 diff) override
 Use to start attacking a target. Called just before JustEngagedWith()
 
void ScheduleHealthCheckEvent (uint32 healthPct, std::function< void()> exec, bool allowedWhileCasting=true)
 Executes a function once the creature reaches the defined health point percent.
 
void ScheduleHealthCheckEvent (std::initializer_list< uint8 > healthPct, std::function< void()> exec, bool allowedWhileCasting=true)
 
void ProcessHealthCheck ()
 
void ScheduleEnrageTimer (uint32 spellId, Milliseconds timer, uint8 textId=0)
 
virtual void ExecuteEvent (uint32)
 
virtual void ScheduleTasks ()
 
void Reset () override
 
void JustEngagedWith (Unit *) override
 Called for reaction when initially engaged - this happens after JustEnteredCombat.
 
void EnterEvadeMode (EvadeReason why=EVADE_REASON_OTHER) override
 
void JustDied (Unit *) override
 
void JustReachedHome () override
 
- Public Member Functions inherited from ScriptedAI
 ScriptedAI (Creature *creature)
 
 ~ScriptedAI () override
 
void AttackStartNoMove (Unit *target)
 
void DamageTaken (Unit *, uint32 &, DamageEffectType, SpellSchoolMask) override
 Called at any Damage from any attacker (before damage apply)
 
void UpdateAI (uint32 diff) override
 Use to start attacking a target. Called just before JustEngagedWith()
 
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 (Position const *pos, Axis axis, bool above)
 
void Reset () override
 
void JustEngagedWith (Unit *) override
 Called for reaction when initially engaged - this happens after JustEnteredCombat.
 
void AttackStart (Unit *) override
 
void DoStartMovement (Unit *target, float distance=0.0f, float angle=0.0f)
 
void DoStartNoMovement (Unit *target)
 
void DoStopAttack ()
 
void DoRewardPlayersInArea ()
 
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 DoTeleportPlayer (Unit *unit, Position pos)
 
void DoTeleportAll (float x, float y, float z, float o)
 
Unit * DoSelectLowestHpFriendly (float range, uint32 minHPDiff=1)
 
std::list< Creature * > DoFindFriendlyCC (float range)
 
std::list< Creature * > DoFindFriendlyMissingBuff (float range, uint32 spellId)
 
Player * GetPlayerAtMinimumRange (float minRange)
 
Creature * DoSpawnCreature (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=0ms, uint32 uniqueId=0)
 
void ScheduleTimedEvent (Milliseconds timerMax, std::function< void()> exec, Milliseconds repeatMin, Milliseconds repeatMax=0ms, 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)
 
virtual bool CheckEvadeIfOutOfCombatArea () const
 
bool IsHeroic () const
 
Difficulty GetDifficulty () const
 
bool Is25ManRaid () const
 
template<class T >
T const & DUNGEON_MODE (T const &normal5, T const &heroic10) const
 
template<class T >
T const & RAID_MODE (T const &normal10, T const &normal25) const
 
template<class T >
T const & RAID_MODE (T const &normal10, T const &normal25, T const &heroic10, T const &heroic25) const
 
Player * SelectTargetFromPlayerList (float maxdist, uint32 excludeAura=0, bool mustBeInLOS=false) const
 
void SetInvincibility (bool apply)
 
bool IsInvincible () const
 
void SetAutoAttackAllowed (bool allow)
 
bool IsAutoAttackAllowed () const
 
- Public Member Functions inherited from CreatureAI
void Talk (uint8 id, WorldObject const *whisperTarget=nullptr, Milliseconds delay=0ms)
 Causes the creature to talk/say the text assigned to their entry in the creature_text database table.
 
void Talk (uint8 id, Milliseconds delay)
 
WorldObject * GetSummoner () const
 Returns the summoner creature/object, if the creature is a temporary summon.
 
 CreatureAI (Creature *creature)
 
 ~CreatureAI () override
 
bool IsEngaged () const
 Check if creature is currently engaged in combat.
 
void MoveCircleChecks ()
 
void MoveBackwardsChecks ()
 
void MoveInLineOfSight_Safe (Unit *who)
 == Reactions At =================================
 
void TriggerAlert (Unit const *who) const
 
virtual bool IsEscortNPC (bool=true) const
 
void JustEnteredCombat (Unit *who) override
 Called when the unit enters combat.
 
virtual void JustStartedThreateningMe (Unit *who)
 
void EngagementStart (Unit *who)
 
void EngagementOver ()
 
void JustExitedCombat () override
 Called when the unit leaves combat.
 
virtual void IsSummonedBy (WorldObject *)
 
virtual void SummonedCreatureDies (Creature *, Unit *)
 
virtual void SummonedCreatureEvade (Creature *)
 
virtual void OnSpellStart (SpellInfo const *)
 
virtual void AttackedBy (Unit *)
 
virtual bool IsEscorted ()
 
virtual void JustRespawned ()
 
virtual void PathEndReached (uint32)
 
virtual void WaypointPathStarted (uint32)
 == Waypoints system =============================
 
virtual void WaypointStarted (uint32, uint32)
 
virtual void WaypointReached (uint32, uint32)
 
virtual void WaypointPathEnded (uint32, uint32)
 
void OnCharmed (bool apply) override
 Called when unit is charmed.
 
void DoZoneInCombat (Creature *creature=nullptr, float maxRangeToNearestTarget=250.0f)
 
virtual void ReceiveEmote (Player *, uint32)
 
virtual void OwnerAttackedBy (Unit *attacker)
 
virtual void OwnerAttacked (Unit *target)
 
void OnOwnerCombatInteraction (Unit *target)
 
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 ()
 
int32 VisualizeBoundary (uint32 duration, Unit *owner=nullptr, bool fill=false, bool checkZ=false) const
 
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 *)
 
virtual void OnAuraRemove (AuraApplication *, AuraRemoveMode)
 
virtual void DistancingStarted ()
 
virtual void DistancingEnded ()
 
- Public Member Functions inherited from UnitAI
 UnitAI (Unit *unit)
 
virtual ~UnitAI ()
 
virtual bool CanAIAttack (Unit const *) const
 
virtual void InitializeAI ()
 
virtual void DoAction (int32)
 
virtual void SetGUID (ObjectGuid const &, int32=0)
 
virtual ObjectGuid GetGUID (int32=0) const
 
Unit * SelectTarget (SelectTargetMethod targetType, uint32 position=0, float dist=0.0f, bool playerOnly=false, bool withTank=true, int32 aura=0)
 
template<class PREDICATE >
Unit * SelectTarget (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)
 Select the best (up to) <num> targets (in <targetType> order) from the threat list that fulfill the following:
 
template<class PREDICATE >
void SelectTargetList (std::list< Unit * > &targetList, uint32 num, SelectTargetMethod targetType, uint32 position, PREDICATE const &predicate)
 
virtual void OnDespawn ()
 Called when the unit is about to be removed from the world (despawn, grid unload, corpse disappearing, player logging out etc.)
 
virtual void EvadeTimerExpired ()
 Called when evade timer expires (target unreachable for too long)
 
virtual void DamageDealt (Unit *, uint32 &, DamageEffectType, SpellSchoolMask)
 Called at any Damage to any victim (before damage apply)
 
virtual void HealReceived (Unit *, uint32 &)
 Called when the creature receives heal.
 
virtual void OnPowerUpdate (Powers, int32, int32, uint32)
 Called when the creature power updates.
 
virtual void HealDone (Unit *, uint32 &)
 Called when the unit heals.
 
virtual void OnCalculateMeleeDamageReceived (uint32 &, Unit *)
 Called during damage calculations.
 
virtual void OnCalculateSpellDamageReceived (int32 &, Unit *)
 
virtual void OnCalculatePeriodicTickReceived (uint32 &, Unit *)
 Called during calculation when receiving periodic healing or damage (DoT or HoT)
 
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)
 To specify the caster as target if the spell is self-cast.
 
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, bool withTank=true, int32 aura=0)
 Cast the spell on a random unit from the threat list.
 
SpellCastResult DoCastMaxThreat (uint32 spellId, uint32 threatTablePosition=0, float dist=0.0f, bool playerOnly=true, bool triggered=false)
 Cast spell on the top threat target, which may not 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)
 Called when a summon reaches a waypoint or point movement finished.
 
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
 

Private Attributes

bool _isEvading
 
bool _hardmode
 
bool _berserk
 
bool _achievProximityMine
 
bool _achievBombBot
 
bool _achievRocketStrike
 
uint32 _allowedFlameSpreadTime
 
bool _changeAllowedFlameSpreadTime
 
uint8 _minutesTalkNum
 
uint32 _outOfCombatTimer
 
GuidList _activeFlames
 

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 ()
 
- Public Attributes inherited from BossAI
float callForHelpRange
 
InstanceScript *const instance
 
- Public Attributes inherited from ScriptedAI
Creature * me
 
- Static Public Attributes inherited from UnitAI
static AISpellInfoType * AISpellInfo
 
- Protected Member Functions inherited from BossAI
void _Reset ()
 
void _JustEngagedWith ()
 
void _JustDied ()
 
void _JustReachedHome ()
 
void _EnterEvadeMode (EvadeReason why=EVADE_REASON_OTHER)
 
void TeleportCheaters ()
 
- Protected Member Functions inherited from CreatureAI
bool UpdateVictim ()
 
bool UpdateVictimWithGaze ()
 
void SetGazeOn (Unit *target)
 
Creature * DoSummon (uint32 entry, Position const &pos, uint32 despawnTime=30000, TempSummonType summonType=TEMPSUMMON_CORPSE_TIMED_DESPAWN)
 
Creature * DoSummon (uint32 entry, WorldObject *obj, float radius=5.0f, uint32 despawnTime=30000, TempSummonType summonType=TEMPSUMMON_CORPSE_TIMED_DESPAWN)
 
Creature * DoSummonFlyer (uint32 entry, WorldObject *obj, float flightZ, float radius=5.0f, uint32 despawnTime=30000, TempSummonType summonType=TEMPSUMMON_CORPSE_TIMED_DESPAWN)
 
bool _EnterEvadeMode (EvadeReason why=EVADE_REASON_OTHER)
 
- Protected Attributes inherited from BossAI
SummonList summons
 
- Protected Attributes inherited from CreatureAI
Creature *const me
 
EventMap events
 
TaskScheduler scheduler
 
CreatureBoundary const * _boundary
 
bool _negateBoundary
 
bool _isEngaged
 
- Protected Attributes inherited from UnitAI
Unit *const me
 

Detailed Description

Constructor & Destructor Documentation

◆ boss_mimiron()

boss_mimiron::boss_mimiron ( Creature *  creature)
inline
288 : BossAI(creature, BOSS_MIMIRON)
289 {
290 if (!me->IsAlive())
292
293 _isEvading = false;
294 }
@ DONE
Definition InstanceScript.h:61
Definition ScriptedCreature.h:496
InstanceScript *const instance
Definition ScriptedCreature.h:503
virtual bool SetBossState(uint32 id, EncounterState state)
Definition InstanceScript.cpp:406
bool IsAlive() const
Definition Unit.h:1812
Creature * me
Definition ScriptedCreature.h:292
bool _isEvading
Definition boss_mimiron.cpp:950
@ BOSS_MIMIRON
Definition ulduar.h:41

References _isEvading, BOSS_MIMIRON, DONE, BossAI::instance, Unit::IsAlive(), ScriptedAI::me, and InstanceScript::SetBossState().

Member Function Documentation

◆ AttackStart()

void boss_mimiron::AttackStart ( Unit *  who)
inlineoverridevirtual

Reimplemented from UnitAI.

330 {
331 if (who)
332 me->Attack(who, true); // skip following
333 }
bool Attack(Unit *victim, bool meleeAttack)
Definition Unit.cpp:7110

References Unit::Attack(), and ScriptedAI::me.

◆ CloseDoorAndButton()

void boss_mimiron::CloseDoorAndButton ( )
inline
872 {
873 if (GameObject* button = me->FindNearestGameObject(GO_BUTTON, 200.0f))
874 if (button->GetGoState() != GO_STATE_ACTIVE)
875 {
876 button->SetLootState(GO_READY);
877 button->UseDoorOrButton(0, false);
878 }
879 }
@ GO_STATE_ACTIVE
Definition GameObjectData.h:708
@ GO_READY
Definition GameObject.h:116
@ GO_BUTTON
Definition boss_mimiron.cpp:123
Definition GameObject.h:125
GameObject * FindNearestGameObject(uint32 entry, float range, bool onlySpawned=false) const
Definition Object.cpp:2574

References WorldObject::FindNearestGameObject(), GO_BUTTON, GO_READY, GO_STATE_ACTIVE, and ScriptedAI::me.

Referenced by JustEngagedWith().

◆ EnterEvadeMode()

void boss_mimiron::EnterEvadeMode ( EvadeReason  why)
inlineoverridevirtual

Reimplemented from CreatureAI.

820 {
821 // Once Mimiron turns friendly for the defeat RP, don't reset the encounter.
823 return;
824 if (_isEvading)
825 return;
826 _isEvading = true;
827
828 if (Creature* c = GetLMK2())
829 c->AI()->EnterEvadeMode(why);
830 if (Creature* c = GetVX001())
831 {
832 c->AI()->EnterEvadeMode(why);
833 c->DespawnOrUnsummon();
834 }
835 if (Creature* c = GetACU())
836 {
837 c->AI()->EnterEvadeMode(why);
838 c->DespawnOrUnsummon();
839 }
840
841 summons.DoAction(DO_DESPAWN_SUMMONS); // despawn summons of summons
842
844 me->ExitVehicle();
846
847 _isEvading = false;
848 }
@ FACTION_FRIENDLY
Definition SharedDefines.h:189
@ DO_DESPAWN_SUMMONS
Definition boss_mimiron.cpp:237
#define GetACU()
Definition boss_mimiron.cpp:281
#define GetVX001()
Definition boss_mimiron.cpp:280
#define GetLMK2()
Definition boss_mimiron.cpp:279
SummonList summons
Definition ScriptedCreature.h:550
void EnterEvadeMode(EvadeReason why=EVADE_REASON_OTHER) override
Definition ScriptedCreature.h:537
Definition Creature.h:47
void DoAction(int32 info, uint16 max=0)
Definition ScriptedCreature.h:113
uint32 GetFaction() const override
Definition Unit.h:857
void RemoveAllAuras()
Definition Unit.cpp:5393
void ExitVehicle(Position const *exitPosition=nullptr)
Definition Unit.cpp:15393

References _isEvading, DO_DESPAWN_SUMMONS, SummonList::DoAction(), BossAI::EnterEvadeMode(), Unit::ExitVehicle(), FACTION_FRIENDLY, GetACU, Unit::GetFaction(), GetLMK2, GetVX001, ScriptedAI::me, Unit::RemoveAllAuras(), and BossAI::summons.

Referenced by JustEngagedWith(), SetData(), and UpdateAI().

◆ GetActiveFlameCount()

uint32 boss_mimiron::GetActiveFlameCount ( ) const
inline
325 {
326 return static_cast<uint32>(_activeFlames.size());
327 }
std::uint32_t uint32
Definition Define.h:107
GuidList _activeFlames
Definition boss_mimiron.cpp:960

References _activeFlames.

◆ GetData()

uint32 boss_mimiron::GetData ( uint32  id) const
inlineoverridevirtual

Reimplemented from UnitAI.

930 {
931 switch (id)
932 {
933 case 1:
934 return (_hardmode ? 1 : 0);
935 case 2:
936 return (_berserk ? 1 : 0);
937 case 10:
939 case 11:
940 return (_achievProximityMine ? 1 : 0);
941 case 12:
942 return (_achievBombBot ? 1 : 0);
943 case 13:
944 return (_achievRocketStrike ? 1 : 0);
945 }
946 return 0;
947 }
bool _achievProximityMine
Definition boss_mimiron.cpp:953
uint32 _allowedFlameSpreadTime
Definition boss_mimiron.cpp:956
bool _achievRocketStrike
Definition boss_mimiron.cpp:955
bool _achievBombBot
Definition boss_mimiron.cpp:954
bool _hardmode
Definition boss_mimiron.cpp:951
bool _berserk
Definition boss_mimiron.cpp:952

References _achievBombBot, _achievProximityMine, _achievRocketStrike, _allowedFlameSpreadTime, _berserk, and _hardmode.

◆ JustEngagedWith()

void boss_mimiron::JustEngagedWith ( Unit *  )
inlineoverridevirtual

Called for reaction when initially engaged - this happens after JustEnteredCombat.

Reimplemented from CreatureAI.

342 {
343 me->setActive(true);
347 events.Reset();
348
349 if (Creature* c = GetLMK2())
350 {
351 if (c->IsInEvadeMode())
352 {
354 return;
355 }
356 if (!c->IsAlive())
357 c->Respawn();
358
359 me->EnterVehicle(c, 1);
360 }
361 else
362 {
364 return;
365 }
367
368 if (!_hardmode)
369 {
371 events.ScheduleEvent(EVENT_SIT_LMK2, 6s);
372 events.ScheduleEvent(EVENT_BERSERK, 15min);
373 }
374 else
375 {
376 events.ScheduleEvent(EVENT_MIMIRON_SAY_HARDMODE, 7s);
377 events.ScheduleEvent(EVENT_BERSERK, 10min);
378
379 if (Creature* computer = me->SummonCreature(NPC_COMPUTER, 2746.7f, 2569.44f, 410.39f, 0.0f, TEMPSUMMON_TIMED_DESPAWN, 1000))
380 computer->AI()->Talk(TALK_COMPUTER_INITIATED);
381
382 events.ScheduleEvent(EVENT_COMPUTER_SAY_MINUTES, 3s);
384 for (uint32 i = 0; i < uint32(TALK_COMPUTER_ZERO - _minutesTalkNum - 1); ++i)
385 events.ScheduleEvent(EVENT_COMPUTER_SAY_MINUTES, Milliseconds((i + 1) * 60000));
387 }
388
389 // ensure LMK2 is at proper position
390 if (Creature* LMK2 = GetLMK2())
391 {
392 LMK2->UpdatePosition(LMK2->GetHomePosition(), true);
393 LMK2->StopMovingOnCurrentPos();
394 }
395
398 }
std::chrono::milliseconds Milliseconds
Milliseconds shorthand typedef.
Definition Duration.h:27
@ IN_PROGRESS
Definition InstanceScript.h:59
@ TEMPSUMMON_TIMED_DESPAWN
Definition Object.h:52
@ UNIT_FLAG_NOT_SELECTABLE
Definition UnitDefines.h:282
@ EVENT_SIT_LMK2
Definition boss_mimiron.cpp:163
@ EVENT_MIMIRON_SAY_HARDMODE
Definition boss_mimiron.cpp:219
@ EVENT_BERSERK
Definition boss_mimiron.cpp:190
@ EVENT_COMPUTER_SAY_MINUTES
Definition boss_mimiron.cpp:218
@ NPC_COMPUTER
Definition boss_mimiron.cpp:108
@ TALK_COMPUTER_ZERO
Definition boss_mimiron.cpp:275
@ TALK_COMPUTER_TEN
Definition boss_mimiron.cpp:265
@ TALK_COMPUTER_INITIATED
Definition boss_mimiron.cpp:263
@ SAY_MKII_ACTIVATE
Definition boss_mimiron.cpp:245
events
Definition boss_sartura.cpp:43
@ EVADE_REASON_OTHER
Definition CreatureAI.h:92
void DoZoneInCombat(Creature *creature=nullptr, float maxRangeToNearestTarget=250.0f)
Definition CreatureAI.cpp:117
bool IsBossDone(uint32 bossId) const
Definition InstanceScript.h:300
void EnterVehicle(Unit *base, int8 seatId=-1)
Definition Unit.cpp:15297
void SetUnitFlag(UnitFlags flags)
UnitFlags available in UnitDefines.h.
Definition Unit.h:754
void setActive(bool isActiveObject)
Definition Object.cpp:1091
TempSummon * SummonCreature(uint32 id, Position const &pos, TempSummonType spwtype=TEMPSUMMON_MANUAL_DESPAWN, uint32 despwtime=0, uint32 vehId=0, SummonPropertiesEntry const *properties=nullptr, bool visibleBySummonerOnly=false) const
Definition Object.cpp:2460
Talk
Definition hyjal.cpp:82
uint8 _minutesTalkNum
Definition boss_mimiron.cpp:958
void EnterEvadeMode(EvadeReason why) override
Definition boss_mimiron.cpp:819
void CloseDoorAndButton()
Definition boss_mimiron.cpp:871

References _hardmode, _minutesTalkNum, BOSS_MIMIRON, CloseDoorAndButton(), CreatureAI::DoZoneInCombat(), EnterEvadeMode(), Unit::EnterVehicle(), CreatureAI::EVADE_REASON_OTHER, EVENT_BERSERK, EVENT_COMPUTER_SAY_MINUTES, EVENT_MIMIRON_SAY_HARDMODE, EVENT_SIT_LMK2, GetLMK2, IN_PROGRESS, BossAI::instance, InstanceScript::IsBossDone(), ScriptedAI::me, NPC_COMPUTER, Unit::RemoveAllAuras(), SAY_MKII_ACTIVATE, WorldObject::setActive(), InstanceScript::SetBossState(), Unit::SetUnitFlag(), WorldObject::SummonCreature(), TALK_COMPUTER_INITIATED, TALK_COMPUTER_TEN, TALK_COMPUTER_ZERO, TEMPSUMMON_TIMED_DESPAWN, and UNIT_FLAG_NOT_SELECTABLE.

◆ JustReachedHome()

void boss_mimiron::JustReachedHome ( )
inlineoverridevirtual

Reimplemented from CreatureAI.

336 {
338 me->setActive(false);
339 }
void _JustReachedHome()
Definition ScriptedCreature.h:545

References BossAI::_JustReachedHome(), ScriptedAI::me, and WorldObject::setActive().

◆ MoveInLineOfSight()

void boss_mimiron::MoveInLineOfSight ( Unit *  )
inlineoverridevirtual

Reimplemented from CreatureAI.

817{}

◆ RegisterFlame()

void boss_mimiron::RegisterFlame ( ObjectGuid  guid)
inline
315 {
316 _activeFlames.push_back(guid);
317 }

References _activeFlames.

◆ Reset()

void boss_mimiron::Reset ( )
inlineoverridevirtual

Reimplemented from UnitAI.

297 {
298 _hardmode = false;
299 _berserk = false;
300 _achievProximityMine = false;
301 _achievBombBot = false;
302 _achievRocketStrike = false;
304 _activeFlames.clear();
309
311 _Reset();
312 }
void _Reset()
Definition ScriptedCreature.cpp:648
void RemoveUnitFlag(UnitFlags flags)
UnitFlags available in UnitDefines.h.
Definition Unit.h:755
uint32 _outOfCombatTimer
Definition boss_mimiron.cpp:959
bool _changeAllowedFlameSpreadTime
Definition boss_mimiron.cpp:957
void ResetGameObjects()
Definition boss_mimiron.cpp:850

References _achievBombBot, _achievProximityMine, _achievRocketStrike, _activeFlames, _allowedFlameSpreadTime, _berserk, _changeAllowedFlameSpreadTime, _hardmode, _outOfCombatTimer, BossAI::_Reset(), BOSS_MIMIRON, BossAI::instance, InstanceScript::IsBossDone(), ScriptedAI::me, Unit::RemoveUnitFlag(), ResetGameObjects(), and UNIT_FLAG_NOT_SELECTABLE.

◆ ResetGameObjects()

void boss_mimiron::ResetGameObjects ( )
inline
851 {
852 if (GameObject* elevator = me->FindNearestGameObject(GO_MIMIRON_ELEVATOR, 200.0f))
853 {
854 if (elevator->GetGoState() != GO_STATE_ACTIVE )
855 {
856 elevator->SetLootState(GO_READY);
857 elevator->SetByteValue(GAMEOBJECT_BYTES_1, 0, GO_STATE_ACTIVE);
858 }
859 elevator->EnableCollision(false);
860 }
861
862 if (GameObject* button = me->FindNearestGameObject(GO_BUTTON, 200.0f))
863 if (button->GetGoState() != GO_STATE_READY )
864 {
865 button->SetLootState(GO_READY);
866 button->UseDoorOrButton(0, false);
867 button->RemoveGameObjectFlag(GO_FLAG_IN_USE);
868 }
869 }
@ GO_STATE_READY
Definition GameObjectData.h:709
@ GO_FLAG_IN_USE
Definition SharedDefines.h:1607
@ GAMEOBJECT_BYTES_1
Definition UpdateFields.h:404
@ GO_MIMIRON_ELEVATOR
Definition ulduar.h:309

References WorldObject::FindNearestGameObject(), GAMEOBJECT_BYTES_1, GO_BUTTON, GO_FLAG_IN_USE, GO_MIMIRON_ELEVATOR, GO_READY, GO_STATE_ACTIVE, GO_STATE_READY, and ScriptedAI::me.

Referenced by Reset().

◆ SetData()

void boss_mimiron::SetData ( uint32  ,
uint32  value 
)
inlineoverridevirtual

Reimplemented from UnitAI.

882 {
883 switch (value) // end of phase 1-3, 4-6 for voltron
884 {
885 case 1:
886 events.ScheduleEvent(EVENT_LMK2_RETREAT_INTERVAL, 5s);
887 break;
888 case 2:
889 events.ScheduleEvent(EVENT_VX001_EMOTESTATE_DEATH, 2500ms);
890 break;
891 case 3:
892 events.ScheduleEvent(EVENT_SAY_ACU_DEAD, 5s);
893 break;
894 case 4:
895 case 5:
896 case 6:
897 {
898 Creature* LMK2 = GetLMK2();
899 Creature* VX001 = GetVX001();
900 Creature* ACU = GetACU();
901 if (!LMK2 || !VX001 || !ACU)
902 {
904 return;
905 }
906
910 if (s1 && s2 && s3 && s1->GetSpellInfo()->Id == SPELL_SELF_REPAIR && s2->GetSpellInfo()->Id == SPELL_SELF_REPAIR && s3->GetSpellInfo()->Id == SPELL_SELF_REPAIR)
911 events.ScheduleEvent(EVENT_FINISH, 0ms);
912 }
913 break;
914 case 7:
915 _hardmode = true;
916 break;
917 case 11:
919 break;
920 case 12:
921 _achievBombBot = true;
922 break;
923 case 13:
924 _achievRocketStrike = true;
925 break;
926 }
927 }
@ CURRENT_GENERIC_SPELL
Definition Unit.h:564
@ EVENT_FINISH
Definition boss_mimiron.cpp:186
@ EVENT_SAY_ACU_DEAD
Definition boss_mimiron.cpp:179
@ EVENT_LMK2_RETREAT_INTERVAL
Definition boss_mimiron.cpp:165
@ EVENT_VX001_EMOTESTATE_DEATH
Definition boss_mimiron.cpp:178
@ SPELL_SELF_REPAIR
Definition boss_mimiron.cpp:96
uint32 Id
Definition SpellInfo.h:344
Definition Spell.h:298
SpellInfo const * GetSpellInfo() const
Definition Spell.h:601
Spell * GetCurrentSpell(CurrentSpellTypes spellType) const
Definition Unit.h:1593

References _achievBombBot, _achievProximityMine, _achievRocketStrike, _hardmode, CURRENT_GENERIC_SPELL, EnterEvadeMode(), CreatureAI::EVADE_REASON_OTHER, EVENT_FINISH, EVENT_LMK2_RETREAT_INTERVAL, EVENT_SAY_ACU_DEAD, EVENT_VX001_EMOTESTATE_DEATH, GetACU, Unit::GetCurrentSpell(), GetLMK2, Spell::GetSpellInfo(), GetVX001, SpellInfo::Id, and SPELL_SELF_REPAIR.

◆ SpellHit()

void boss_mimiron::SpellHit ( Unit *  ,
SpellInfo const *  spellInfo 
)
inlineoverridevirtual

Reimplemented from CreatureAI.

809 {
810 if (spellInfo->Id == SPELL_TELEPORT)
811 {
814 }
815 }
void DespawnOrUnsummon(Milliseconds msTimeToDespawn=0ms, Seconds forcedRespawnTimer=0s)
Definition Creature.cpp:2221
virtual void SetData(uint32, uint32)
Definition ZoneScript.h:52
@ SPELL_TELEPORT
Definition karazhan.cpp:36
@ EVENT_KEEPER_TELEPORTED
Definition ulduar.h:431

References Creature::DespawnOrUnsummon(), DONE, EVENT_KEEPER_TELEPORTED, SpellInfo::Id, BossAI::instance, ScriptedAI::me, ZoneScript::SetData(), and SPELL_TELEPORT.

◆ UnregisterFlame()

void boss_mimiron::UnregisterFlame ( ObjectGuid  guid)
inline
320 {
321 _activeFlames.remove(guid);
322 }

References _activeFlames.

◆ UpdateAI()

void boss_mimiron::UpdateAI ( uint32  )
inlineoverridevirtual

Use to start attacking a target. Called just before JustEngagedWith()

Implements UnitAI.

401 {
402 if (!me->IsInCombat())
403 {
404 _outOfCombatTimer += diff;
405 if (_outOfCombatTimer >= 10000)
406 {
408 if (Creature* c = GetLMK2())
410 }
411 return;
412 }
413
415 if (me->GetExactDist(&p) > 80.0f || !SelectTargetFromPlayerList(150.0f))
416 {
418 return;
419 }
420
421 events.Update(diff);
422
423 switch (events.ExecuteEvent())
424 {
425 case 0:
426 break;
428 if (Creature* computer = me->SummonCreature(NPC_COMPUTER, 2746.7f, 2569.44f, 410.39f, 0.0f, TEMPSUMMON_TIMED_DESPAWN, 1000))
429 computer->AI()->Talk(_minutesTalkNum++);
430 break;
433 events.ScheduleEvent(EVENT_SPAWN_FLAMES_INITIAL, 0ms);
434 events.ScheduleEvent(EVENT_SIT_LMK2, 4s);
435 break;
437 {
440
441 std::vector<Player*> pg;
442 Map::PlayerList const& pl = me->GetMap()->GetPlayers();
443 for( Map::PlayerList::const_iterator itr = pl.begin(); itr != pl.end(); ++itr )
444 if (Player* plr = itr->GetSource())
445 if (plr->IsAlive() && plr->GetExactDist2d(me) < 150.0f && !plr->IsGameMaster())
446 pg.push_back(plr);
447
448 for( uint8 i = 0; i < 3; ++i )
449 if (!pg.empty())
450 {
451 uint8 index = urand(0, pg.size() - 1);
452 Player* player = pg[index];
453 float angle = rand_norm() * 2 * M_PI;
454 float z = 364.35f;
455 if (!player->IsWithinLOS(player->GetPositionX() + cos(angle) * 5.0f, player->GetPositionY() + std::sin(angle) * 5.0f, z))
456 {
457 angle = player->GetAngle(2744.65f, 2569.46f);
458 }
459 me->CastSpell(player->GetPositionX() + cos(angle) * 5.0f, player->GetPositionY() + std::sin(angle) * 5.0f, z, SPELL_SUMMON_FLAMES_INITIAL, true);
460 pg.erase(pg.begin() + index);
461 }
462
463 events.Repeat(30s);
464 }
465 break;
466 case EVENT_BERSERK:
467 _berserk = true;
469 events.ScheduleEvent(EVENT_BERSERK_2, 0ms);
470 break;
471 case EVENT_BERSERK_2:
472 {
473 Creature* VX001 = nullptr;
474 Creature* LMK2 = nullptr;
475 Creature* ACU = nullptr;
476 if ((VX001 = GetVX001()))
477 VX001->CastSpell(VX001, SPELL_BERSERK, true);
478 if ((LMK2 = GetLMK2()))
479 LMK2->CastSpell(LMK2, SPELL_BERSERK, true);
480 if ((ACU = GetACU()))
481 ACU->CastSpell(ACU, SPELL_BERSERK, true);
482 events.Repeat(30s);
483 }
484 break;
485 case EVENT_SIT_LMK2:
486 if (Creature* LMK2 = GetLMK2())
487 {
488 me->EnterVehicle(LMK2, 6);
489 events.ScheduleEvent(EVENT_SIT_LMK2_INTERVAL, 2s);
490 break;
491 }
493 break;
495 if (Creature* LMK2 = GetLMK2())
496 {
497 if (_hardmode)
498 {
499 LMK2->CastSpell(LMK2, SPELL_EMERGENCY_MODE, true);
500 if (Vehicle* veh = LMK2->GetVehicleKit())
501 if (Unit* cannon = veh->GetPassenger(3))
502 cannon->CastSpell(cannon, SPELL_EMERGENCY_MODE, true);
503 }
504 LMK2->AI()->SetData(1, 1);
505 break;
506 }
508 break;
510 if (Creature* LMK2 = GetLMK2())
511 {
512 me->EnterVehicle(LMK2, 1);
514 LMK2->SetFacingTo(3.58f);
515 events.ScheduleEvent(EVENT_ELEVATOR_INTERVAL_0, 6s);
516 break;
517 }
519 break;
521 if (GameObject* elevator = me->FindNearestGameObject(GO_MIMIRON_ELEVATOR, 100.0f))
522 {
523 elevator->SetLootState(GO_READY);
524 elevator->UseDoorOrButton(0, false);
525 elevator->EnableCollision(false);
526 if (Creature* trigger = me->SummonCreature(NPC_WORLD_TRIGGER, elevator->GetPositionX(), elevator->GetPositionY(), elevator->GetPositionZ(), 0.0f, TEMPSUMMON_TIMED_DESPAWN, 5000))
527 trigger->CastSpell(trigger, SPELL_ELEVATOR_KNOCKBACK);
528 }
529 events.ScheduleEvent(EVENT_ELEVATOR_INTERVAL_1, 6s);
530 break;
532 if (me->SummonCreature(NPC_VX001, 2744.65f, 2569.46f, 364.40f, 3.14f, TEMPSUMMON_MANUAL_DESPAWN))
533 {
534 if (GameObject* elevator = me->FindNearestGameObject(GO_MIMIRON_ELEVATOR, 100.0f))
535 {
536 elevator->SetLootState(GO_READY);
537 elevator->UseDoorOrButton(0, true);
538 elevator->EnableCollision(false);
539 }
540 events.ScheduleEvent(EVENT_ELEVATOR_INTERVAL_2, 18s);
541 break;
542 }
544 break;
546 if (Creature* VX001 = GetVX001())
547 {
548 me->EnterVehicle(VX001, 0);
549 events.ScheduleEvent(EVENT_SITTING_ON_VX001, 4s);
550 break;
551 }
553 break;
556 events.ScheduleEvent(EVENT_ENTER_VX001, 5s);
557 break;
559 if (Creature* VX001 = GetVX001())
560 {
561 me->EnterVehicle(VX001, 1);
562 events.ScheduleEvent(EVENT_EMOTE_VX001, 2s);
563 break;
564 }
566 break;
568 if (Creature* VX001 = GetVX001())
569 {
571 events.ScheduleEvent(EVENT_VX001_START_FIGHT, 1750ms);
572 break;
573 }
575 break;
577 if (Creature* VX001 = GetVX001())
578 {
579 if (_hardmode)
580 VX001->CastSpell(VX001, SPELL_EMERGENCY_MODE, true);
581 VX001->AI()->SetData(1, 2);
583 break;
584 }
586 break;
588 if (Creature* VX001 = GetVX001())
589 {
592 events.ScheduleEvent(EVENT_GET_OUT_VX001, 2500ms);
593 break;
594 }
596 break;
598 if (Creature* VX001 = GetVX001())
600 {
601 me->EnterVehicle(VX001, 4);
602 events.ScheduleEvent(EVENT_SAY_VX001_DEAD, 2s);
603 break;
604 }
606 break;
610 events.ScheduleEvent(EVENT_ENTER_ACU, 7s);
611 break;
612 case EVENT_ENTER_ACU:
613 if (Creature* ACU = GetACU())
614 {
615 me->EnterVehicle(ACU, 0);
616 events.ScheduleEvent(EVENT_SAY_ACU_ACTIVATE, 6s);
617 break;
618 }
620 break;
623 events.ScheduleEvent(EVENT_ACU_START_ATTACK, 4s);
624 break;
626 if (Creature* ACU = GetACU())
627 {
628 if (_hardmode)
629 ACU->CastSpell(ACU, SPELL_EMERGENCY_MODE, true);
630 ACU->AI()->SetData(1, 3);
632 break;
633 }
635 break;
638 events.ScheduleEvent(EVENT_LEVIATHAN_COME_CLOSER, 5s);
639 break;
641 if (Creature* LMK2 = GetLMK2())
642 {
643 LMK2->GetMotionMaster()->MoveCharge(2755.77f, 2574.95f, 364.31f, 21.0f);
644 events.ScheduleEvent(EVENT_VX001_EMOTE_JUMP, 4s);
645 break;
646 }
648 break;
650 {
651 Creature* LMK2 = GetLMK2();
652 Creature* VX001 = GetVX001();
653 if (!VX001 || !LMK2)
654 {
656 return;
657 }
658
659 VX001->SendMeleeAttackStop();
662 events.ScheduleEvent(EVENT_LEVIATHAN_RIDE_MIDDLE, 4800ms);
663 }
664 break;
666 {
667 Creature* VX001 = GetVX001();
668 Creature* LMK2 = GetLMK2();
669 if (!VX001 || !LMK2)
670 {
672 return;
673 }
674
675 LMK2->GetMotionMaster()->MoveCharge(2744.65f, 2569.46f, 364.31f, 21.0f);
678 VX001->EnterVehicle(LMK2, 3);
679 events.ScheduleEvent(EVENT_JOIN_TOGETHER, 3s);
680 }
681 break;
683 {
684 Creature* ACU = GetACU();
685 Creature* VX001 = GetVX001();
686 if (!VX001 || !ACU)
687 {
689 return;
690 }
691
692 ACU->SetDisableGravity(false);
693 ACU->EnterVehicle(VX001, 3);
694 me->EnterVehicle(VX001, 1);
696 events.ScheduleEvent(EVENT_START_PHASE4, 10s);
697 }
698 break;
700 {
701 Creature* VX001 = GetVX001();
702 Creature* LMK2 = GetLMK2();
703 Creature* ACU = GetACU();
704 if (!VX001 || !LMK2 || !ACU)
705 {
707 return;
708 }
709
710 LMK2->AI()->SetData(1, 4);
711 VX001->AI()->SetData(1, 4);
712 ACU->AI()->SetData(1, 4);
713 LMK2->CastSpell(LMK2, SPELL_SELF_REPAIR, true); //LMK2->SetHealth( LMK2->GetMaxHealth()/2 );
714 VX001->CastSpell(VX001, SPELL_SELF_REPAIR, true); //VX001->SetHealth( VX001->GetMaxHealth()/2 );
715 ACU->CastSpell(ACU, SPELL_SELF_REPAIR, true); //ACU->SetHealth( ACU->GetMaxHealth()/2 );
716 if (_hardmode)
717 {
718 LMK2->CastSpell(LMK2, SPELL_EMERGENCY_MODE, true);
719 VX001->CastSpell(VX001, SPELL_EMERGENCY_MODE, true);
720 ACU->CastSpell(ACU, SPELL_EMERGENCY_MODE, true);
721 }
723 }
724 break;
725 case EVENT_FINISH:
726 {
727 Creature* LMK2 = GetLMK2();
728 Creature* VX001 = GetVX001();
729 Creature* ACU = GetACU();
730
731 if (!VX001 || !LMK2 || !ACU)
732 return;
733
734 LMK2->GetMotionMaster()->Clear();
735 LMK2->StopMoving();
736 LMK2->InterruptNonMeleeSpells(false);
737 LMK2->AttackStop();
738 LMK2->AI()->SetData(1, 0);
739 LMK2->DespawnOrUnsummon(7s);
741 VX001->InterruptNonMeleeSpells(false);
742 VX001->AttackStop();
743 VX001->AI()->SetData(1, 0);
744 VX001->DespawnOrUnsummon(7s);
746 ACU->InterruptNonMeleeSpells(false);
747 ACU->AttackStop();
748 ACU->AI()->SetData(1, 0);
749 ACU->DespawnOrUnsummon(7s);
751
752 Position exitPos = me->GetPosition();
753 me->_ExitVehicle(&exitPos);
754 me->AttackStop();
758
760
761 float angle = VX001->GetOrientation();
762 float v_x = me->GetPositionX() + cos(angle) * 10.0f;
763 float v_y = me->GetPositionY() + std::sin(angle) * 10.0f;
764 me->GetMotionMaster()->MoveJump(v_x, v_y, 364.32f, 7.0f, 7.0f);
765
767
769
770 if (_hardmode)
771 if (Creature* computer = me->SummonCreature(NPC_COMPUTER, 2746.7f, 2569.44f, 410.39f, 0.0f, TEMPSUMMON_TIMED_DESPAWN, 1000))
772 computer->AI()->Talk(TALK_COMPUTER_TERMINATED);
773
774 events.Reset();
775 events.ScheduleEvent(EVENT_STAND_UP_FRIENDLY, 6s);
776 }
777 break;
782 events.ScheduleEvent(EVENT_SAY_VOLTRON_DEAD, 4s);
783 break;
788 // spawn chest
790 {
791 // Summoned by the map, not Mimiron, so the chest survives his despawn during the outro.
792 if (GameObject* go = me->GetMap()->SummonGameObject(chestId, 2744.65f, 2569.46f, 364.397f, 0, 0, 0, 0, 0, 0))
793 {
794 go->ReplaceAllGameObjectFlags((GameObjectFlags)0);
795 go->SetLootRecipient(me->GetMap());
796 go->SetRespawnTime(7 * DAY);
797 }
798 }
799 events.ScheduleEvent(EVENT_DISAPPEAR, 9s);
800 break;
801 case EVENT_DISAPPEAR:
804 break;
805 }
806 }
constexpr auto DAY
Definition Common.h:49
static First const & RAND(First const &first, Second const &second, Rest const &... rest)
Definition CreatureAIImpl.h:25
@ ACHIEVEMENT_CRITERIA_TYPE_KILL_CREATURE
Definition DBCEnums.h:122
std::uint8_t uint8
Definition Define.h:109
@ TEMPSUMMON_MANUAL_DESPAWN
Definition Object.h:57
uint32 urand(uint32 min, uint32 max)
Definition Random.cpp:44
double rand_norm()
Definition Random.cpp:85
@ EMOTE_ONESHOT_CUSTOM_SPELL_02
Definition SharedDefines.h:2002
@ EMOTE_ONESHOT_EMERGE
Definition SharedDefines.h:2047
@ EMOTE_STATE_DROWNED
Definition SharedDefines.h:1982
@ EMOTE_STATE_CUSTOM_SPELL_01
Definition SharedDefines.h:2014
@ EMOTE_ONESHOT_TALK
Definition SharedDefines.h:1899
GameObjectFlags
Definition SharedDefines.h:1606
@ REACT_PASSIVE
Definition Unit.h:574
@ UNIT_NPC_EMOTESTATE
Definition UpdateFields.h:140
@ EVENT_ELEVATOR_INTERVAL_2
Definition boss_mimiron.cpp:167
@ EVENT_ELEVATOR_INTERVAL_1
Definition boss_mimiron.cpp:166
@ EVENT_ENTER_VX001
Definition boss_mimiron.cpp:169
@ EVENT_SPAWN_FLAMES_INITIAL
Definition boss_mimiron.cpp:220
@ EVENT_VX001_EMOTE_JUMP
Definition boss_mimiron.cpp:181
@ EVENT_SIT_LMK2_INTERVAL
Definition boss_mimiron.cpp:164
@ EVENT_SAY_VX001_DEAD
Definition boss_mimiron.cpp:174
@ EVENT_SITTING_ON_VX001
Definition boss_mimiron.cpp:168
@ EVENT_SAY_ACU_ACTIVATE
Definition boss_mimiron.cpp:176
@ EVENT_SAY_VOLTRON_DEAD
Definition boss_mimiron.cpp:188
@ EVENT_EMOTE_VX001
Definition boss_mimiron.cpp:170
@ EVENT_ACU_START_ATTACK
Definition boss_mimiron.cpp:177
@ EVENT_GET_OUT_VX001
Definition boss_mimiron.cpp:173
@ EVENT_STAND_UP_FRIENDLY
Definition boss_mimiron.cpp:187
@ EVENT_VX001_START_FIGHT
Definition boss_mimiron.cpp:171
@ EVENT_LEVIATHAN_COME_CLOSER
Definition boss_mimiron.cpp:180
@ EVENT_DISAPPEAR
Definition boss_mimiron.cpp:189
@ EVENT_ELEVATOR_INTERVAL_0
Definition boss_mimiron.cpp:172
@ EVENT_ENTER_ACU
Definition boss_mimiron.cpp:175
@ EVENT_START_PHASE4
Definition boss_mimiron.cpp:185
@ EVENT_JOIN_TOGETHER
Definition boss_mimiron.cpp:183
@ EVENT_BERSERK_2
Definition boss_mimiron.cpp:191
@ EVENT_LEVIATHAN_RIDE_MIDDLE
Definition boss_mimiron.cpp:182
Position const ACUSummonPos
Definition boss_mimiron.cpp:284
@ NPC_LEVIATHAN_MKII
Definition boss_mimiron.cpp:104
@ NPC_WORLD_TRIGGER
Definition boss_mimiron.cpp:114
@ NPC_VX001
Definition boss_mimiron.cpp:106
@ NPC_AERIAL_COMMAND_UNIT
Definition boss_mimiron.cpp:107
@ SPELL_ENTER_VEHICLE_1
Definition boss_mimiron.cpp:153
@ NPC_FLAMES_INITIAL
Definition boss_mimiron.cpp:133
@ SPELL_ENTER_VEHICLE_2
Definition boss_mimiron.cpp:154
@ SPELL_EMERGENCY_MODE
Definition boss_mimiron.cpp:129
@ SPELL_ENTER_VEHICLE_0
Definition boss_mimiron.cpp:152
@ SPELL_SUMMON_FLAMES_INITIAL
Definition boss_mimiron.cpp:132
@ SPELL_ENTER_VEHICLE_4
Definition boss_mimiron.cpp:155
@ SPELL_ELEVATOR_KNOCKBACK
Definition boss_mimiron.cpp:54
@ SPELL_SLEEP_VISUAL_2
Definition boss_mimiron.cpp:98
@ SPELL_BERSERK
Definition boss_mimiron.cpp:39
@ SPELL_SLEEP_VISUAL_1
Definition boss_mimiron.cpp:97
@ SAY_AERIAL_ACTIVATE
Definition boss_mimiron.cpp:251
@ SAY_VX001_ACTIVATE
Definition boss_mimiron.cpp:248
@ SAY_V07TRON_ACTIVATE
Definition boss_mimiron.cpp:254
@ SAY_AERIAL_DEATH
Definition boss_mimiron.cpp:253
@ SAY_VX001_DEATH
Definition boss_mimiron.cpp:250
@ SAY_MKII_DEATH
Definition boss_mimiron.cpp:247
@ SAY_HARDMODE_ON
Definition boss_mimiron.cpp:244
@ SAY_V07TRON_DEATH
Definition boss_mimiron.cpp:256
@ TALK_COMPUTER_TERMINATED
Definition boss_mimiron.cpp:264
@ SAY_BERSERK
Definition boss_mimiron.cpp:257
void SetInCombatWithZone()
Set in combat all units in the dungeon/raid. Affect only units with IsAIEnabled.
Definition Creature.cpp:2887
void GetHomePosition(float &x, float &y, float &z, float &ori) const
Definition Creature.h:349
void SetReactState(ReactStates state)
A creature can have 3 ReactStates : Agressive, Passive, Neutral.
Definition Creature.h:99
CreatureAI * AI() const
Definition Creature.h:143
void DoUpdateAchievementCriteria(AchievementCriteriaTypes type, uint32 miscValue1=0, uint32 miscValue2=0, Unit *unit=nullptr)
Definition InstanceScript.cpp:680
Definition LinkedList.h:139
Definition MapRefMgr.h:26
iterator begin()
Definition MapRefMgr.h:36
iterator end()
Definition MapRefMgr.h:37
GameObject * SummonGameObject(uint32 entry, float x, float y, float z, float ang, float rotation0, float rotation1, float rotation2, float rotation3, uint32 respawnTime, bool checkTransport=true)
Definition Object.cpp:2407
PlayerList const & GetPlayers() const
Definition Map.h:335
void MoveCharge(float x, float y, float z, float speed=SPEED_CHARGE, uint32 id=EVENT_CHARGE, Movement::PointsArray const *path=nullptr, bool generatePath=false, float orientation=0.0f, ObjectGuid targetGUID=ObjectGuid::Empty)
The unit will charge the target. Doesn't work with UNIT_FLAG_DISABLE_MOVE.
Definition MotionMaster.cpp:825
void MoveJump(Position const &pos, float speedXY, float speedZ, uint32 id=0)
Definition MotionMaster.h:257
void Clear(bool reset=true)
Definition MotionMaster.h:194
Definition Player.h:1086
void DespawnEntry(uint32 entry)
Definition ScriptedCreature.cpp:55
void DespawnAll(Milliseconds delay=0ms)
Definition ScriptedCreature.cpp:72
virtual void SetData(uint32, uint32)
Definition UnitAI.h:219
SpellCastResult DoCastSelf(uint32 spellId, bool triggered=false)
Definition UnitAI.h:399
Definition Unit.h:670
void SetFacingTo(float ori)
Definition Unit.cpp:16157
void SetFaction(uint32 faction)
Definition Unit.cpp:6886
void InterruptNonMeleeSpells(bool withDelayed, uint32 spellid=0, bool withInstant=true, bool bySelf=false)
Definition Unit.cpp:4079
MotionMaster * GetMotionMaster()
Definition Unit.h:1774
void StopMoving()
Definition Unit.cpp:12709
void _ExitVehicle(Position const *exitPosition=nullptr)
Definition Unit.cpp:15430
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:1378
void RemoveAurasDueToSpell(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, uint8 reqEffMask=0, AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)
Definition Unit.cpp:4969
void SetDisableGravity(bool disable)
Definition Unit.cpp:16208
void SetUInt32Value(uint16 index, uint32 value)
Definition Unit.cpp:17078
void HandleEmoteCommand(uint32 emoteId)
Definition Unit.cpp:2202
Vehicle * GetVehicleKit() const
Definition Unit.h:1947
bool AttackStop()
Force the unit to stop attacking. This will clear UNIT_STATE_MELEE_ATTACKING, Interrupt current spell...
Definition Unit.cpp:7270
void SendMeleeAttackStop(Unit const *victim=nullptr) const
Send to the client SMSG_ATTACKSTOP but doesn't clear UNIT_STATE_MELEE_ATTACKING on server side or int...
Definition Unit.cpp:3285
bool IsInCombat() const
Definition Unit.h:949
Definition Vehicle.h:28
Map * GetMap() const
Definition Object.h:637
bool IsWithinLOS(float x, float y, float z, VMAP::ModelIgnoreFlags ignoreFlags=VMAP::ModelIgnoreFlags::Nothing, LineOfSightChecks checks=LINEOFSIGHT_ALL_CHECKS) const
Definition Object.cpp:1391
Seconds GetGameTime()
Definition GameTime.cpp:39
Definition Position.h:27
float GetAngle(Position const *pos) const
Definition Position.cpp:85
float GetExactDist(float x, float y, float z) const
Definition Position.h:182
float GetOrientation() const
Definition Position.h:124
float GetPositionX() const
Definition Position.h:121
void GetPosition(float &x, float &y) const
Definition Position.h:126
float GetPositionY() const
Definition Position.h:122
T const & RAID_MODE(T const &normal10, T const &normal25) const
Definition ScriptedCreature.h:419
Player * SelectTargetFromPlayerList(float maxdist, uint32 excludeAura=0, bool mustBeInLOS=false) const
Definition ScriptedCreature.cpp:591
@ GO_MIMIRON_CHEST
Definition ulduar.h:267
@ GO_MIMIRON_CHEST_HARD
Definition ulduar.h:268
@ GO_MIMIRON_CHEST_HERO
Definition ulduar.h:269
@ GO_MIMIRON_CHEST_HERO_HARD
Definition ulduar.h:270

References _allowedFlameSpreadTime, _berserk, _changeAllowedFlameSpreadTime, Unit::_ExitVehicle(), _hardmode, _minutesTalkNum, _outOfCombatTimer, ACHIEVEMENT_CRITERIA_TYPE_KILL_CREATURE, ACUSummonPos, Creature::AI(), Unit::AttackStop(), MapRefMgr::begin(), BOSS_MIMIRON, Unit::CastSpell(), MotionMaster::Clear(), DAY, SummonList::DespawnAll(), SummonList::DespawnEntry(), Creature::DespawnOrUnsummon(), DO_DESPAWN_SUMMONS, SummonList::DoAction(), UnitAI::DoCastSelf(), DONE, InstanceScript::DoUpdateAchievementCriteria(), EMOTE_ONESHOT_CUSTOM_SPELL_02, EMOTE_ONESHOT_EMERGE, EMOTE_ONESHOT_TALK, EMOTE_STATE_CUSTOM_SPELL_01, EMOTE_STATE_DROWNED, MapRefMgr::end(), EnterEvadeMode(), Unit::EnterVehicle(), CreatureAI::EVADE_REASON_OTHER, EVENT_ACU_START_ATTACK, EVENT_BERSERK, EVENT_BERSERK_2, EVENT_COMPUTER_SAY_MINUTES, EVENT_DISAPPEAR, EVENT_ELEVATOR_INTERVAL_0, EVENT_ELEVATOR_INTERVAL_1, EVENT_ELEVATOR_INTERVAL_2, EVENT_EMOTE_VX001, EVENT_ENTER_ACU, EVENT_ENTER_VX001, EVENT_FINISH, EVENT_GET_OUT_VX001, EVENT_JOIN_TOGETHER, EVENT_LEVIATHAN_COME_CLOSER, EVENT_LEVIATHAN_RIDE_MIDDLE, EVENT_LMK2_RETREAT_INTERVAL, EVENT_MIMIRON_SAY_HARDMODE, EVENT_SAY_ACU_ACTIVATE, EVENT_SAY_ACU_DEAD, EVENT_SAY_VOLTRON_DEAD, EVENT_SAY_VX001_DEAD, EVENT_SIT_LMK2, EVENT_SIT_LMK2_INTERVAL, EVENT_SITTING_ON_VX001, EVENT_SPAWN_FLAMES_INITIAL, EVENT_STAND_UP_FRIENDLY, EVENT_START_PHASE4, EVENT_VX001_EMOTE_JUMP, EVENT_VX001_EMOTESTATE_DEATH, EVENT_VX001_START_FIGHT, FACTION_FRIENDLY, WorldObject::FindNearestGameObject(), GetACU, Position::GetAngle(), Position::GetExactDist(), GameTime::GetGameTime(), Creature::GetHomePosition(), GetLMK2, WorldObject::GetMap(), Unit::GetMotionMaster(), Position::GetOrientation(), Map::GetPlayers(), Position::GetPosition(), Position::GetPositionX(), Position::GetPositionY(), GetVX001, GO_MIMIRON_CHEST, GO_MIMIRON_CHEST_HARD, GO_MIMIRON_CHEST_HERO, GO_MIMIRON_CHEST_HERO_HARD, GO_MIMIRON_ELEVATOR, GO_READY, Unit::HandleEmoteCommand(), BossAI::instance, Unit::InterruptNonMeleeSpells(), Unit::IsInCombat(), WorldObject::IsWithinLOS(), ScriptedAI::me, MotionMaster::MoveCharge(), MotionMaster::MoveJump(), NPC_AERIAL_COMMAND_UNIT, NPC_COMPUTER, NPC_FLAMES_INITIAL, NPC_LEVIATHAN_MKII, NPC_VX001, NPC_WORLD_TRIGGER, ScriptedAI::RAID_MODE(), RAND(), rand_norm(), REACT_PASSIVE, Unit::RemoveAurasDueToSpell(), Unit::RemoveUnitFlag(), SAY_AERIAL_ACTIVATE, SAY_AERIAL_DEATH, SAY_BERSERK, SAY_HARDMODE_ON, SAY_MKII_DEATH, SAY_V07TRON_ACTIVATE, SAY_V07TRON_DEATH, SAY_VX001_ACTIVATE, SAY_VX001_DEATH, ScriptedAI::SelectTargetFromPlayerList(), Unit::SendMeleeAttackStop(), InstanceScript::SetBossState(), UnitAI::SetData(), Unit::SetDisableGravity(), Unit::SetFaction(), Creature::SetInCombatWithZone(), Creature::SetReactState(), Unit::SetUInt32Value(), SPELL_BERSERK, SPELL_ELEVATOR_KNOCKBACK, SPELL_EMERGENCY_MODE, SPELL_ENTER_VEHICLE_0, SPELL_ENTER_VEHICLE_1, SPELL_ENTER_VEHICLE_2, SPELL_ENTER_VEHICLE_4, SPELL_SELF_REPAIR, SPELL_SLEEP_VISUAL_1, SPELL_SLEEP_VISUAL_2, SPELL_SUMMON_FLAMES_INITIAL, SPELL_TELEPORT, Unit::StopMoving(), WorldObject::SummonCreature(), Map::SummonGameObject(), BossAI::summons, TALK_COMPUTER_TERMINATED, TEMPSUMMON_MANUAL_DESPAWN, TEMPSUMMON_TIMED_DESPAWN, UNIT_FLAG_NOT_SELECTABLE, UNIT_NPC_EMOTESTATE, and urand().

Member Data Documentation

◆ _achievBombBot

bool boss_mimiron::_achievBombBot
private

Referenced by GetData(), Reset(), and SetData().

◆ _achievProximityMine

bool boss_mimiron::_achievProximityMine
private

Referenced by GetData(), Reset(), and SetData().

◆ _achievRocketStrike

bool boss_mimiron::_achievRocketStrike
private

Referenced by GetData(), Reset(), and SetData().

◆ _activeFlames

GuidList boss_mimiron::_activeFlames
private

◆ _allowedFlameSpreadTime

uint32 boss_mimiron::_allowedFlameSpreadTime
private

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

◆ _berserk

bool boss_mimiron::_berserk
private

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

◆ _changeAllowedFlameSpreadTime

bool boss_mimiron::_changeAllowedFlameSpreadTime
private

Referenced by Reset(), and UpdateAI().

◆ _hardmode

bool boss_mimiron::_hardmode
private

◆ _isEvading

bool boss_mimiron::_isEvading
private

Referenced by boss_mimiron(), and EnterEvadeMode().

◆ _minutesTalkNum

uint8 boss_mimiron::_minutesTalkNum
private

Referenced by JustEngagedWith(), and UpdateAI().

◆ _outOfCombatTimer

uint32 boss_mimiron::_outOfCombatTimer
private

Referenced by Reset(), and UpdateAI().


The documentation for this struct was generated from the following file: