186 {-814.59f, -64.54f, 429.92f, 5.969f},
187 {-784.37f, -33.31f, 429.92f, 5.096f},
188 {-808.99f, -52.10f, 429.92f, 5.668f},
189 {-798.59f, -44.00f, 429.92f, 5.663f},
190 {-812.83f, -77.71f, 429.92f, 0.046f},
195 {-717.83f, -106.56f, 430.02f, 0.122f},
196 {-717.83f, -114.23f, 430.44f, 0.122f},
197 {-717.83f, -109.70f, 430.22f, 0.122f},
198 {-718.45f, -118.24f, 430.26f, 0.052f},
199 {-718.45f, -123.58f, 430.41f, 0.085f},
204 {-724.12f, -176.64f, 430.03f, 2.543f},
205 {-766.70f, -225.03f, 430.50f, 1.710f},
206 {-729.54f, -186.26f, 430.12f, 1.902f},
207 {-756.01f, -219.23f, 430.50f, 2.369f},
208 {-798.01f, -227.24f, 429.84f, 1.446f},
213 {377.02f, -119.10f, 409.81f, 0.0f},
214 {185.62f, -119.10f, 409.81f, 0.0f},
215 {377.02f, 54.78f, 409.81f, 0.0f},
216 {185.62f, 54.78f, 409.81f, 0.0f},
339 vehicleKit->InstallAllAccessories(
false);
418 lift->GetMotionMaster()->MoveRandom(100);
437 for (
uint8 i = 0; i < 7; ++i)
440 thorim->GetMotionMaster()->MoveRandom(100);
451 for (
uint8 i = 0; i < 7; ++i)
454 hodir->GetMotionMaster()->MoveRandom(100);
461 for (
int32 i = 0; i < 4; ++i)
501 if (action && action <= 4)
608 return GetUlduarAI<boss_flame_leviathanAI>(creature);
644 turret->ReplaceAllUnitFlags(
UnitFlags(0));
645 turret->AI()->AttackStart(who);
651 device->SetUninteractible(
false);
664 device->ReplaceAllUnitFlags(
UnitFlags(0));
672 return GetUlduarAI<boss_flame_leviathan_seatAI>(creature);
728 return GetUlduarAI<boss_flame_leviathan_defense_cannonAI>(creature);
757 return GetUlduarAI<boss_flame_leviathan_defense_turretAI>(creature);
774 if (!spellClickHandled)
786 player->ExitVehicle();
794 return GetUlduarAI<boss_flame_leviathan_overload_deviceAI>(creature);
825 return GetUlduarAI<boss_flame_leviathan_safety_containerAI>(creature);
871 container->EnterVehicle(
me);
894 return GetUlduarAI<npc_mechanoliftAI>(creature);
928 return GetUlduarAI<npc_pool_of_tarAI>(creature);
955 return GetUlduarAI<npc_colossusAI>(creature);
993 return GetUlduarAI<npc_thorims_hammerAI>(creature);
1057 return GetUlduarAI<npc_mimirons_infernoAI>(creature);
1095 return GetUlduarAI<npc_hodirs_furyAI>(creature);
1144 return GetUlduarAI<npc_freyas_wardAI>(creature);
1190 return GetUlduarAI<npc_freya_ward_summonAI>(creature);
1230 return GetUlduarAI<npc_brann_bronzebeard_ulduar_introAI>(creature);
1284 delorah->GetMotionMaster()->MovePoint(0, brann->GetPositionX() - 4, brann->GetPositionY(), brann->GetPositionZ());
1299 return GetUlduarAI<npc_lorekeeperAI>(creature);
1333 trigger->DisappearAndDie();
1339 return GetUlduarAI<go_ulduar_towerAI>(go);
1637 if (!creatureTarget)
1654 for (SeatMap::const_iterator itr = vehicle->
Seats.begin(); itr != vehicle->
Seats.end(); ++itr)
1655 if (itr->second.Passenger.Guid.IsPlayer())
1675 if (targets.empty())
1723 if (
Unit* passenger = vehicle->GetPassenger(damage - 1))
1726 std::list<WorldObject*> targetList;
1730 float minDist = 99 * 99;
1731 Unit* target =
nullptr;
1732 for (std::list<WorldObject*>::iterator itr = targetList.begin(); itr != targetList.end(); ++itr)
1736 if (
Vehicle* seat = unit->GetVehicleKit())
1737 if (!seat->GetPassenger(0))
1738 if (
Unit* device = seat->GetPassenger(2))
1753 passenger->ExitVehicle();
#define ASSERT_NOTNULL(pointer)
@ TEMPSUMMON_TIMED_DESPAWN
@ TEMPSUMMON_CORPSE_TIMED_DESPAWN
uint32 urand(uint32 min, uint32 max)
#define RegisterSpellScript(spell_script)
void CloseGossipMenuFor(Player *player)
@ TARGET_UNIT_SRC_AREA_ENEMY
@ SPELL_EFFECT_SCRIPT_EFFECT
@ AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK
@ AURA_EFFECT_HANDLE_REAL
@ SPELL_AURA_CONTROL_VEHICLE
@ SPELL_AURA_MOD_DAMAGE_PERCENT_TAKEN
@ SPELL_AURA_PERIODIC_DUMMY
@ TARGET_OBJECT_TYPE_UNIT
#define BeforeSpellHitFn(F)
#define SpellEffectFn(F, I, N)
#define SpellObjectAreaTargetSelectFn(F, I, N)
#define AuraEffectPeriodicFn(F, I, N)
#define AuraEffectApplyFn(F, I, N, M)
#define AuraEffectRemoveFn(F, I, N, M)
@ UNIT_NPC_FLAG_SPELLCLICK
@ UNIT_FLAG_NON_ATTACKABLE
@ CURRENT_CHANNELED_SPELL
@ NPC_FREYA_TARGET_BEACON
@ NPC_HODIR_TARGET_BEACON
@ NPC_THORIM_TARGET_BEACON
@ NPC_ULDUAR_GAUNTLET_GENERATOR
@ NPC_MIMIRON_TARGET_BEACON
@ GOSSIP_MENU_BRANN_BRONZEBEARD
@ GOSSIP_OPTION_BRANN_BRONZEBEARD
Position const InfernoStart
@ GOSSIP_OPTION_LORE_KEEPER
@ GOSSIP_MENU_LORE_KEEPER
@ SPELL_BUFF_TOWER_OF_FLAMES
@ SPELL_BUFF_TOWER_OF_FR0ST
@ SPELL_FREYA_S_WARD_EFFECT_2
@ SPELL_DUST_CLOUD_IMPACT
@ SPELL_FREYA_S_WARD_EFFECT_1
@ SPELL_BUFF_TOWER_OF_LIFE
@ SPELL_BUFF_TOWER_OF_STORMS
@ SPELL_MIMIRON_S_INFERNO
@ SPELL_INVIS_AND_STEALTH_DETECT
Position const PosSiege[VEHICLE_SPAWNS]
Position const FreyaBeacons[FREYA_SPAWNS]
static constexpr uint32 PATH_ESCORT_MIMIRONS_INFERNO
void AddSC_boss_flame_leviathan()
Position const PosDemolisher[VEHICLE_SPAWNS]
@ EVENT_MIMIRON_S_INFERNO
Position const PosChopper[VEHICLE_SPAWNS]
SpellEffectInfo const & GetSpellEffectInfo() const
HookList< EffectPeriodicHandler > OnEffectPeriodic
WorldObject * GetOwner() const
HookList< EffectApplyHandler > OnEffectRemove
HookList< EffectApplyHandler > OnEffectApply
InstanceScript *const instance
void JustEngagedWith(Unit *who) override
Creature * DoSummonFlyer(uint32 entry, WorldObject *obj, float flightZ, float radius=5.0f, Milliseconds despawnTime=30s, TempSummonType summonType=TEMPSUMMON_CORPSE_TIMED_DESPAWN)
virtual void EnterEvadeMode(EvadeReason why=EvadeReason::Other)
void Talk(uint8 id, WorldObject const *whisperTarget=nullptr)
Creature * DoSummon(uint32 entry, Position const &pos, Milliseconds despawnTime=30s, TempSummonType summonType=TEMPSUMMON_CORPSE_TIMED_DESPAWN)
void SetHomePosition(float x, float y, float z, float o)
void RemoveLootMode(uint16 lootMode)
bool HasLootMode(uint16 lootMode) const
void SetCanMelee(bool canMelee, bool fleeFromMelee=false)
void GetHomePosition(float &x, float &y, float &z, float &ori) const
bool HasReactState(ReactStates state) const
void SetDisplayFromModel(uint32 modelIdx)
bool IsEngaged() const override
void SetReactState(ReactStates st)
void SetLootMode(uint16 lootMode)
void DelayEvents(Milliseconds delay)
void ScheduleEvent(uint32 eventId, Milliseconds time, uint32 group=0, uint8 phase=0)
void CancelEvent(uint32 eventId)
void RescheduleEvent(uint32 eventId, Milliseconds time, uint32 group=0, uint8 phase=0)
bool operator()(WorldObject *target) const
FlameLeviathanPursuedTargetSelector()
Creature * GetCreature(uint32 type)
void DoUpdateWorldState(int32 worldStateId, int32 value)
void LoadGrid(float x, float y)
float GetHeight(PhaseShift const &phaseShift, float x, float y, float z, bool vmap=true, float maxSearchDist=DEFAULT_HEIGHT_SEARCH)
void MoveRandom(float wanderDistance=0.0f, Optional< Milliseconds > duration={}, MovementSlot slot=MOTION_SLOT_DEFAULT)
void MovePoint(uint32 id, Position const &pos, bool generatePath=true, Optional< float > finalOrient={}, Optional< float > speed={}, MovementWalkRunSpeedSelectionMode speedSelectionMode=MovementWalkRunSpeedSelectionMode::Default, Optional< float > closeEnoughDistance={})
void MoveCharge(float x, float y, float z, float speed=SPEED_CHARGE, uint32 id=EVENT_CHARGE, bool generatePath=false, Unit const *target=nullptr, Movement::SpellEffectExtraData const *spellEffectExtraData=nullptr)
static ObjectGuid const Empty
static Creature * ToCreature(Object *o)
static Unit * ToUnit(Object *o)
static ObjectGuid GetGUID(Object const *o)
WorldLocation const * GetDstPos() const
SpellEffectInfo const & GetEffect(SpellEffIndex index) const
static bool ValidateSpellInfo(std::initializer_list< uint32 > spellIds)
static bool ValidateSpellEffect(std::initializer_list< std::pair< uint32, SpellEffIndex > > effects)
void PreventHitDefaultEffect(SpellEffIndex effIndex)
Unit * GetHitUnit() const
int32 GetEffectValue() const
SpellEffectInfo const & GetEffectInfo() const
HookList< EffectHandler > OnEffectHitTarget
void PreventHitEffect(SpellEffIndex effIndex)
HookList< BeforeHitHandler > BeforeHit
WorldLocation const * GetExplTargetDest() const
SpellInfo const * GetSpellInfo() const
HookList< ObjectAreaTargetSelectHandler > OnObjectAreaTargetSelect
SpellCastTargets m_targets
Unit * SelectTarget(SelectTargetMethod targetType, uint32 offset=0, float dist=0.0f, bool playerOnly=false, bool withTank=true, int32 aura=0)
SpellCastResult DoCastAOE(uint32 spellId, CastSpellExtraArgs const &args={})
SpellCastResult DoCast(uint32 spellId)
void EnterVehicle(Unit *base, int8 seatId=-1)
void ClearUnitState(uint32 f)
Vehicle * GetVehicle() const
bool IsWithinCombatRange(Unit const *obj, float dist2compare) const
Creature * GetVehicleCreatureBase() const
void InterruptNonMeleeSpells(bool withDelayed, uint32 spellid=0, bool withInstant=true)
Unit * GetVehicleBase() const
MotionMaster * GetMotionMaster()
Aura * AddAura(uint32 spellId, Unit *target)
void RemoveNpcFlag(NPCFlags flags)
void SetUninteractible(bool apply)
void AddUnitState(uint32 f)
virtual bool UpdatePosition(float x, float y, float z, float ang, bool teleport=false)
uint32 GetFaction() const override
virtual void TextEmote(std::string_view text, WorldObject const *target=nullptr, bool isBossEmote=false)
bool HasUnitState(const uint32 f) const
bool HasAura(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, ObjectGuid itemCasterGUID=ObjectGuid::Empty, uint32 reqEffMask=0) const
void SetUnitFlag(UnitFlags flags)
bool isAttackReady(WeaponAttackType type=BASE_ATTACK) const
Vehicle * GetVehicleKit() const
void resetAttackTimer(WeaponAttackType type=BASE_ATTACK)
void RemoveAurasDueToSpell(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, uint32 reqEffMask=0, AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)
void InterruptSpell(CurrentSpellTypes spellType, bool withDelayed=true, bool withInstant=true)
void RemoveUnitFlag(UnitFlags flags)
Unit * GetPassenger(int8 seatId) const
Gets a passenger on specified seat.
bool HasEmptySeat(int8 seatId) const
Checks if vehicle's seat specified by 'seatId' is empty.
SeatMap Seats
The collection of all seats on the vehicle. Including vacant ones.
bool IsWithinDist2d(float x, float y, float dist) const
InstanceScript * GetInstanceScript() const
SpellCastResult CastSpell(CastSpellTargetArg const &targets, uint32 spellId, CastSpellExtraArgs const &args={ })
TempSummon * SummonCreature(uint32 entry, Position const &pos, TempSummonType despawnType=TEMPSUMMON_MANUAL_DESPAWN, Milliseconds despawnTime=0s, uint32 vehId=0, uint32 spellId=0, ObjectGuid privateObjectOwner=ObjectGuid::Empty)
PhaseShift & GetPhaseShift()
Creature * FindNearestCreature(uint32 entry, float range, bool alive=true) const
bool IsInRange(WorldObject const *obj, float minRange, float maxRange, bool is3D=true) const
virtual uint32 GetData(uint32) const
virtual void SetData(uint32, uint32)
virtual void ProcessEvent(WorldObject *, uint32, WorldObject *)
bool OnCheck(Player *, Unit *target) override
bool OnCheck(Player *source, Unit *) override
achievement_three_car_garage_chopper()
achievement_three_car_garage_demolisher()
bool OnCheck(Player *source, Unit *) override
bool OnCheck(Player *source, Unit *) override
achievement_three_car_garage_siege()
bool OnCheck(Player *, Unit *target) override
boss_flame_leviathan_defense_cannon()
CreatureAI * GetAI(Creature *creature) const override
CreatureAI * GetAI(Creature *creature) const override
boss_flame_leviathan_defense_turret()
CreatureAI * GetAI(Creature *creature) const override
boss_flame_leviathan_overload_device()
CreatureAI * GetAI(Creature *creature) const override
boss_flame_leviathan_safety_container()
boss_flame_leviathan_seat()
CreatureAI * GetAI(Creature *creature) const override
CreatureAI * GetAI(Creature *creature) const override
GameObjectAI * GetAI(GameObject *go) const override
CreatureAI * GetAI(Creature *creature) const override
npc_brann_bronzebeard_ulduar_intro()
CreatureAI * GetAI(Creature *creature) const override
CreatureAI * GetAI(Creature *creature) const override
CreatureAI * GetAI(Creature *creature) const override
CreatureAI * GetAI(Creature *creature) const override
CreatureAI * GetAI(Creature *creature) const override
CreatureAI * GetAI(Creature *creature) const override
CreatureAI * GetAI(Creature *creature) const override
CreatureAI * GetAI(Creature *creature) const override
CreatureAI * GetAI(Creature *creature) const override
void HandleScript(SpellEffIndex)
void CheckCooldownForTarget(SpellMissInfo missInfo)
SpellScript * GetSpellScript() const override
void OnApply(AuraEffect const *, AuraEffectHandleModes)
void OnRemove(AuraEffect const *, AuraEffectHandleModes)
AuraScript * GetAuraScript() const override
spell_load_into_catapult()
void PeriodicTick(AuraEffect const *)
bool Validate(SpellInfo const *) override
void FilterTargetsSubsequently(std::list< WorldObject * > &targets)
void FilterTargets(std::list< WorldObject * > &targets)
SpellScript * GetSpellScript() const override
void OnRemove(AuraEffect const *, AuraEffectHandleModes)
void OnApply(AuraEffect const *, AuraEffectHandleModes)
AuraScript * GetAuraScript() const override
bool Validate(SpellInfo const *spellInfo) override
void PeriodicTick(AuraEffect const *aurEff)
void HandleScript(SpellEffIndex)
spell_vehicle_throw_passenger()
SpellScript * GetSpellScript() const override
TC_GAME_API Unit * GetUnit(WorldObject const &, ObjectGuid const &guid)
TC_GAME_API Player * GetPlayer(Map const *, ObjectGuid const &guid)
void RandomResize(C &container, std::size_t requestedSize)
static void VisitAllObjects(WorldObject const *obj, T &visitor, float radius, bool dont_load=true)
void Start(bool isActiveAttacker=true, ObjectGuid playerGUID=ObjectGuid::Empty, Quest const *quest=nullptr, bool instantRespawn=false, bool canLoopPath=false)
bool HasEscortState(uint32 escortState)
void LoadPath(uint32 pathId)
void UpdateAI(uint32 diff) override
constexpr float GetPositionX() const
constexpr float GetPositionY() const
constexpr void GetPosition(float &x, float &y) const
constexpr float GetExactDistSq(float x, float y, float z) const
constexpr float GetPositionZ() const
void AttackStart(Unit *) override
== Triggered Actions Requested ==================
T const & RAID_MODE(T const &normal10, T const &normal25) const
void JustEngagedWith(Unit *who) override
void InitializeAI() override
uint32 GetData(uint32 type) const override
void JustDied(Unit *) override
void SpellHitTarget(WorldObject *target, SpellInfo const *spellInfo) override
void MovementInform(uint32, uint32 id) override
void SpellHit(WorldObject *, SpellInfo const *spellInfo) override
void DoBatteringRamIfReady()
void DoAction(int32 action) override
void UpdateAI(uint32 diff) override
void SetData(uint32 id, uint32 data) override
boss_flame_leviathanAI(Creature *creature)
void UpdateAI(uint32 diff) override
bool CanAIAttack(Unit const *who) const override
boss_flame_leviathan_defense_cannonAI(Creature *creature)
void DamageTaken(Unit *who, uint32 &damage, DamageEffectType, SpellInfo const *) override
bool CanAIAttack(Unit const *who) const override
boss_flame_leviathan_defense_turretAI(Creature *creature)
boss_flame_leviathan_overload_deviceAI(Creature *creature)
void OnSpellClick(Unit *, bool spellClickHandled) override
boss_flame_leviathan_safety_containerAI(Creature *creature)
void UpdateAI(uint32) override
void JustDied(Unit *) override
InstanceScript * instance
boss_flame_leviathan_seatAI(Creature *creature)
void PassengerBoarded(Unit *who, int8 seatId, bool apply) override
== Fields =======================================
go_ulduar_towerAI(GameObject *go)
void Destroyed(WorldObject *attacker, uint32) override
InstanceScript * instance
npc_brann_bronzebeard_ulduar_introAI(Creature *creature)
bool OnGossipSelect(Player *player, uint32 menuId, uint32 gossipListId) override
InstanceScript * _instance
InstanceScript * instance
npc_colossusAI(Creature *creature)
void JustDied(Unit *) override
void UpdateAI(uint32 diff) override
npc_freya_ward_summonAI(Creature *creature)
void UpdateAI(uint32 diff) override
npc_freyas_wardAI(Creature *creature)
npc_hodirs_furyAI(Creature *creature)
void UpdateAI(uint32) override
void MoveInLineOfSight(Unit *who) override
void DoAction(int32 action) override
npc_lorekeeperAI(Creature *creature)
bool OnGossipSelect(Player *player, uint32 menuId, uint32 gossipListId) override
InstanceScript * _instance
void UpdateAI(uint32 diff) override
npc_mechanoliftAI(Creature *creature)
void JustDied(Unit *) override
void MovementInform(uint32 type, uint32 id) override
void UpdateAI(uint32 diff) override
npc_mimirons_infernoAI(Creature *creature)
npc_pool_of_tarAI(Creature *creature)
void UpdateAI(uint32) override
void DamageTaken(Unit *, uint32 &damage, DamageEffectType, SpellInfo const *) override
void SpellHit(WorldObject *, SpellInfo const *spellInfo) override
void UpdateAI(uint32) override
npc_thorims_hammerAI(Creature *creature)
void MoveInLineOfSight(Unit *who) override
@ DATA_BRANN_BRONZEBEARD_INTRO
@ DATA_LORE_KEEPER_OF_NORGANNON
@ EVENT_TOWER_OF_STORM_DESTROYED
@ EVENT_TOWER_OF_LIFE_DESTROYED
@ EVENT_TOWER_OF_FLAMES_DESTROYED
@ EVENT_TOWER_OF_FROST_DESTROYED
@ ACTION_TOWER_OF_FLAMES_DESTROYED
@ ACTION_TOWER_OF_STORM_DESTROYED
@ ACTION_MOVE_TO_CENTER_POSITION
@ ACTION_TOWER_OF_LIFE_DESTROYED
@ ACTION_TOWER_OF_FROST_DESTROYED
@ WORLD_STATE_FLAME_LEVIATHAN_DESTROYED_TOWERS
@ NPC_SALVAGED_SIEGE_ENGINE
@ NPC_SALVAGED_DEMOLISHER