40#include <G3D/Vector3.h>
231 { 8.130936f, -0.2699585f, 20.31728f },
232 { 6.380936f, -0.2699585f, 20.31728f },
233 { 3.507703f, 0.02986573f, 20.78463f },
234 { -2.767633f, 3.743143f, 20.37663f },
235 { -4.017633f, 4.493143f, 20.12663f },
236 { -7.242224f, 6.856013f, 20.03468f },
237 { -7.742224f, 8.606013f, 20.78468f },
238 { -7.992224f, 9.856013f, 21.28468f },
239 { -12.24222f, 23.10601f, 21.28468f },
240 { -14.88477f, 25.20844f, 21.59985f },
246 { 30.43987f, 0.1475817f, 36.10674f },
247 { 21.36141f, -3.056458f, 35.42970f },
248 { 19.11141f, -3.806458f, 35.42970f },
249 { 19.01736f, -3.299440f, 35.39428f },
250 { 18.6747f, -5.862823f, 35.66611f },
251 { 18.6747f, -7.862823f, 35.66611f },
252 { 18.1747f, -17.36282f, 35.66611f },
253 { 18.1747f, -22.61282f, 35.66611f },
254 { 17.9247f, -24.36282f, 35.41611f },
255 { 17.9247f, -26.61282f, 35.66611f },
256 { 17.9247f, -27.86282f, 35.66611f },
257 { 17.9247f, -29.36282f, 35.66611f },
258 { 15.33203f, -30.42621f, 35.93796f }
408 bool summoned =
false;
410 for (
int32 i = first; i <= last; ++i)
418 if (current && current->
IsAlive())
442 for (
int32 i = first; i <= last; ++i)
453 float angle =
frand(
float(-
M_PI) * 0.5f,
float(
M_PI) * 0.5f);
480 init.DisableTransportPathTransformations();
481 init.MoveTo(dest.GetPositionX(), dest.GetPositionY(), dest.GetPositionZ(),
false);
504 go->AddObjectToRemoveList();
507 go->AddObjectToRemoveList();
574 float hx = x, hy = y, hz = z, ho = o;
580 init.DisableTransportPathTransformations();
581 init.MoveTo(x, y, z,
false);
731 std::list<Creature*> creatures;
733 for (std::list<Creature*>::iterator itr = creatures.begin(); itr != creatures.end(); ++itr)
743 for (std::list<Creature*>::iterator itr = creatures.begin(); itr != creatures.end(); ++itr)
754 for (std::list<Creature*>::iterator itr = creatures.begin(); itr != creatures.end(); ++itr)
775 creature->AI()->Talk(textId);
780 otherTransport->EnableMovement(
true);
783 transport->EnableMovement(
true);
797 for (std::list<Creature*>::iterator itr = creatures.begin(); itr != creatures.end(); ++itr)
798 (*itr)->DespawnOrUnsummon(1ms);
813 std::map<ObjectGuid, uint32>::iterator itr =
_shipVisits.find(guid);
826 for (std::map<ObjectGuid, uint32>::const_iterator itr =
_shipVisits.begin(); itr !=
_shipVisits.end(); ++itr)
827 max = std::max(max, itr->second);
844 return GetIcecrownCitadelAI<npc_gunshipAI>(creature);
944 init.DisableTransportPathTransformations();
945 init.MovebyPath(path, 0);
967 transport->EnableMovement(
true);
1108 _instance(creature->GetInstanceScript())
1201 init.DisableTransportPathTransformations();
1202 init.MovebyPath(path, 0);
1224 transport->EnableMovement(
true);
1430 float angle =
frand(0,
float(
M_PI) * 2.0f);
1431 x += 2.0f * std::cos(angle);
1432 y += 2.0f * std::sin(angle);
1444 std::list<Player*> players;
1449 players.remove_if([
this](
Player* player)
1454 if (!players.empty())
1457 for (std::list<Player*>::iterator itr = players.begin(); itr != players.end(); ++itr)
1501 return target->
HasAura(spellId) || target->
GetEntry() == creatureEntry;
1506 std::list<Player*> players;
1511 players.remove_if([
this](
Player* player)
1516 return !players.empty();
1579 return GetIcecrownCitadelAI<npc_gunship_boarding_addAI>(creature);
1777 sCreatureTextMgr->SendChat(owner,
SAY_ZAFOD_ROCKET_PACK_ACTIVE, target,
CHAT_MSG_ADDON,
LANG_ADDON,
TEXT_RANGE_NORMAL, 0,
SoundKitPlayType::Normal,
TEAM_OTHER,
false, target);
1785 sCreatureTextMgr->SendChat(owner,
SAY_ZAFOD_ROCKET_PACK_DISABLED, target,
CHAT_MSG_ADDON,
LANG_ADDON,
TEXT_RANGE_NORMAL, 0,
SoundKitPlayType::Normal,
TEAM_OTHER,
false, target);
1867 if (
Unit* passenger = vehicle->GetPassenger(0))
1920 if (
Unit* passenger = vehicle->GetPassenger(0))
1927 player->SendDirectMessage(data.
Write());
1998 targets.remove_if([team](
WorldObject* target) ->
bool
2005 if (!targets.empty())
2009 targets.push_back(target);
2049 if (!targets.empty())
2053 targets.push_back(target);
2171 targets.remove_if([instance](
WorldObject* target) ->
bool
@ NPC_ALLIANCE_GUNSHIP_CANNON
@ NPC_HORDE_GUNSHIP_CANNON
std::chrono::steady_clock::time_point TimePoint
time_point shorthand typedefs
std::chrono::milliseconds Milliseconds
Milliseconds shorthand typedef.
@ ENCOUNTER_FRAME_DISENGAGE
@ TEMPSUMMON_TIMED_DESPAWN
@ TEMPSUMMON_CORPSE_TIMED_DESPAWN
float frand(float min, float max)
uint32 urand(uint32 min, uint32 max)
#define RegisterSpellScript(spell_script)
void GetCreatureListWithEntryInGrid(Container &container, WorldObject *source, uint32 entry, float maxSearchRange)
void CloseGossipMenuFor(Player *player)
@ TARGET_UNIT_SRC_AREA_ENTRY
@ TARGET_DEST_NEARBY_ENTRY
@ TARGET_UNIT_SRC_AREA_ENEMY
@ TARGET_UNIT_DEST_AREA_ENTRY
@ SPELL_EFFECT_SCRIPT_EFFECT
@ SPELL_EFFECT_TRIGGER_MISSILE
@ SPELL_EFFECT_TELEPORT_UNITS
@ AURA_EFFECT_HANDLE_REAL
@ SPELL_AURA_PERIODIC_DUMMY
@ SPELL_AURA_PERIODIC_TRIGGER_SPELL
@ TRIGGERED_FULL_MASK
Used when doing CastSpell with triggered == true.
@ TRIGGERED_IGNORE_POWER_AND_REAGENT_COST
Will ignore power and reagent cost.
@ TRIGGERED_NONE
Not triggered.
#define BeforeSpellHitFn(F)
#define SpellObjectTargetSelectFn(F, I, N)
#define SpellEffectFn(F, I, N)
#define SpellObjectAreaTargetSelectFn(F, I, N)
#define AuraEffectPeriodicFn(F, I, N)
#define SpellCalcDamageFn(F)
#define AuraEffectApplyFn(F, I, N, M)
#define AuraCheckProcFn(F)
#define AuraCheckAreaTargetFn(F)
#define AuraEffectRemoveFn(F, I, N, M)
@ SPELL_CREATE_ROCKET_PACK
@ ITEM_GOBLIN_ROCKET_PACK
uint32 const SaurfangExitPathSize
@ SPELL_FRIENDLY_BOSS_DAMAGE_MOD
@ SPELL_ON_SKYBREAKER_DECK
@ SPELL_ROCKET_PACK_USEABLE
@ SPELL_ON_ORGRIMS_HAMMER_DECK
@ SPELL_ROCKET_ARTILLERY_H
@ SPELL_BATTLE_EXPERIENCE
@ SPELL_EJECT_ALL_PASSENGERS_WIPE
@ SPELL_AWARD_REPUTATION_BOSS_KILL
@ SPELL_GUNSHIP_FALL_TELEPORT
@ SPELL_MELEE_TARGETING_ON_SKYBREAKER
@ SPELL_DESPERATE_RESOLVE
@ SPELL_MELEE_TARGETING_ON_ORGRIMS_HAMMER
@ SPELL_LOCK_PLAYERS_AND_TAP_CHEST
@ SPELL_ROCKET_PACK_DAMAGE
@ SPELL_TELEPORT_PLAYERS_ON_RESET_H
@ SPELL_BURNING_PITCH_DAMAGE_A
@ SPELL_ROCKET_ARTILLERY_A
@ SPELL_EXPLOSION_VICTORY
@ SPELL_CHECK_FOR_PLAYERS
@ SPELL_TELEPORT_PLAYERS_ON_RESET_A
@ SPELL_TELEPORT_PLAYERS_ON_VICTORY
@ SPELL_TELEPORT_TO_ENEMY_SHIP
@ SPELL_EJECT_ALL_PASSENGERS_BELOW_ZERO
@ SPELL_SHADOW_CHANNELING
@ SPELL_BURNING_PITCH_DAMAGE_H
G3D::Vector3 const SaurfangExitPath[SaurfangExitPathSize]
SlotInfo const SkybreakerSlotInfo[MAX_SLOTS]
Position const SkybreakerTeleportPortal
Position const OrgrimsHammerTeleportPortal
Position const OrgrimsHammerTeleportExit
SlotInfo const OrgrimsHammerSlotInfo[MAX_SLOTS]
@ SAY_ZAFOD_ROCKET_PACK_ACTIVE
@ SAY_SAURFANG_ENTER_SKYBREAKER
@ SAY_MURADIN_ENTER_ORGRIMMS_HAMMER
@ SAY_SAURFANG_AXETHROWERS
@ SAY_ZAFOD_ROCKET_PACK_DISABLED
@ SAY_SAURFANG_ROCKETEERS
Position const SkybreakerAddsSpawnPos
Position const OrgrimsHammerAddsSpawnPos
G3D::Vector3 const MuradinExitPath[MuradinExitPathSize]
void AddSC_boss_icecrown_gunship_battle()
uint32 const MuradinExitPathSize
Position const SkybreakerTeleportExit
@ EVENT_INTRO_SUMMON_ORGRIMS_HAMMER
@ EVENT_INTRO_SUMMON_SKYBREAKER
@ EVENT_KEEP_PLAYER_IN_COMBAT
uint32 GetTickNumber() const
SpellEffectInfo const & GetSpellEffectInfo() const
void PreventDefaultAction()
AuraObjectType GetType() const
HookList< EffectApplyHandler > AfterEffectRemove
HookList< EffectPeriodicHandler > OnEffectPeriodic
SpellInfo const * GetSpellInfo() const
WorldObject * GetOwner() const
HookList< EffectApplyHandler > AfterEffectApply
HookList< CheckAreaTargetHandler > DoCheckAreaTarget
Difficulty GetCastDifficulty() const
HookList< CheckProcHandler > DoCheckProc
HookList< EffectApplyHandler > OnEffectRemove
void Remove(AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)
Unit * GetUnitOwner() const
BattleExperienceEvent(Creature *creature)
bool Execute(uint64 timer, uint32) override
static uint32 const ExperiencedSpells[5]
static Milliseconds const ExperiencedTimes[5]
virtual void JustEngagedWith(Unit *)
virtual void JustDied(Unit *)
void Talk(uint8 id, WorldObject const *whisperTarget=nullptr)
void SetHomePosition(float x, float y, float z, float o)
bool _IsTargetAcceptable(Unit const *target) const
bool HasReactState(ReactStates state) const
void SetReactState(ReactStates st)
void DespawnOrUnsummon(Milliseconds timeToDespawn=0s, Seconds forceRespawnTime=0s)
void SetRegenerateHealth(bool value)
void SetTransportHomePosition(float x, float y, float z, float o)
bool CanStartAttack(Unit const *u, bool force) const
bool HasSpellFocus(Spell const *focusSpell=nullptr) const override
DelayedMovementEvent(Creature *owner, Position const &dest)
bool Execute(uint64, uint32) override
void ScheduleEvent(uint32 eventId, Milliseconds time, uint32 group=0, uint8 phase=0)
bool IsInPhase(uint8 phase) const
void SetPhase(uint8 phase)
void AddEvent(BasicEvent *event, Milliseconds e_time, bool set_addtime=true)
void AddEventAtOffset(BasicEvent *event, Milliseconds offset)
Milliseconds CalculateTime(Milliseconds t_offset) const
virtual bool SetBossState(uint32 id, EncounterState state)
void DoCastSpellOnPlayers(uint32 spell, bool includePets=false, bool includeControlled=false)
virtual ObjectGuid GetGuidData(uint32 type) const override
EncounterState GetBossState(uint32 id) const
void SendEncounterUnit(EncounterFrameType type, Unit const *unit, Optional< int32 > param1={}, Optional< int32 > param2={})
void SetZoneMusic(uint32 zoneId, uint32 musicId)
void LaunchMoveSpline(std::function< void(Movement::MoveSplineInit &init)> &&initializer, uint32 id=0, MovementGeneratorPriority priority=MOTION_PRIORITY_NORMAL, MovementGeneratorType type=EFFECT_MOTION_TYPE)
static Creature * ToCreature(Object *o)
static ObjectGuid GetGUID(Object const *o)
static Player * ToPlayer(Object *o)
void ResetSlots(uint32 team)
void SetTransport(Transport *transport)
Position SelectSpawnPoint() const
bool SummonCreatures(PassengerSlots first, PassengerSlots last)
time_t _respawnCooldowns[MAX_SLOTS]
SlotInfo const * _slotInfo
bool SlotsNeedRefill(PassengerSlots first, PassengerSlots last) const
Position const * _spawnPoint
void ClearSlot(PassengerSlots slot)
ObjectGuid _controlledSlots[MAX_SLOTS]
ResetEncounterEvent(Unit *caster, uint32 spellId, ObjectGuid transport, ObjectGuid otherTransport)
ObjectGuid _otherTransport
bool Execute(uint64, uint32) override
int32 CalcValue(WorldObject const *caster=nullptr, int32 const *basePoints=nullptr, Unit const *target=nullptr, float *variance=nullptr, uint32 castItemId=0, int32 itemLevel=-1) const
void AddCooldown(uint32 spellId, uint32 itemId, Duration cooldownDuration)
bool HasCooldown(SpellInfo const *spellInfo, uint32 itemId=0) 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)
HookList< DamageAndHealingCalcHandler > CalcDamage
HookList< CastHandler > AfterCast
WorldLocation * GetHitDest() const
HookList< HitHandler > AfterHit
HookList< EffectHandler > OnEffectHit
void PreventHitDefaultEffect(SpellEffIndex effIndex)
Unit * GetHitUnit() const
int32 GetEffectValue() const
HookList< EffectHandler > OnEffectHitTarget
HookList< ObjectTargetSelectHandler > OnObjectTargetSelect
HookList< CastHandler > OnCast
HookList< BeforeHitHandler > BeforeHit
HookList< EffectHandler > OnEffectLaunch
HookList< ObjectAreaTargetSelectHandler > OnObjectAreaTargetSelect
bool IsThreatListEmpty(bool includeOffline=false) const
virtual ObjectGuid GetTransportGUID() const =0
virtual void CalculatePassengerPosition(float &x, float &y, float &z, float *o=nullptr) const =0
This method transforms supplied transport offsets into global coordinates.
virtual void CalculatePassengerOffset(float &x, float &y, float &z, float *o=nullptr) const =0
This method transforms supplied global coordinates into local offsets.
TempSummon * SummonPassenger(uint32 entry, Position const &pos, TempSummonType summonType, SummonPropertiesEntry const *properties=nullptr, Milliseconds duration=0ms, Unit *summoner=nullptr, uint32 spellId=0, uint32 vehId=0)
Temporarily summons a creature as passenger on this transport.
bool DoSpellAttackIfReady(uint32 spellId)
virtual void InitializeAI()
virtual uint32 GetData(uint32) const
SpellCastResult DoCastVictim(uint32 spellId, CastSpellExtraArgs const &args={})
SpellCastResult DoCastAOE(uint32 spellId, CastSpellExtraArgs const &args={})
SpellCastResult DoCast(uint32 spellId)
bool IsWithinMeleeRange(Unit const *obj) const
void CombatStop(bool includingCast=false, bool mutualPvP=true, bool(*unitFilter)(Unit const *otherUnit)=nullptr)
ThreatManager & GetThreatManager()
void SetControlled(bool apply, UnitState state)
void SetPower(Powers power, int32 val, bool withPowerUpdate=true)
MotionMaster * GetMotionMaster()
void RemoveNpcFlag(NPCFlags flags)
bool Attack(Unit *victim, bool meleeAttack)
int32 GetPower(Powers power) const
void SetFacingTo(float const ori, bool force=true)
bool HasUnitState(const uint32 f) const
bool HasAura(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, ObjectGuid itemCasterGUID=ObjectGuid::Empty, uint32 reqEffMask=0) const
SpellHistory * GetSpellHistory()
bool HealthBelowPctDamaged(int32 pct, uint32 damage) const
void RemoveVehicleKit(bool onRemoveFromWorld=false)
bool isAttackReady(WeaponAttackType type=BASE_ATTACK) const
void resetAttackTimer(WeaponAttackType type=BASE_ATTACK)
void RemoveAurasDueToSpell(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, uint32 reqEffMask=0, AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)
InstanceScript * GetInstanceScript() const
SpellCastResult CastSpell(CastSpellTargetArg const &targets, uint32 spellId, CastSpellExtraArgs const &args={ })
TransportBase * GetTransport() const
virtual ObjectGuid GetTransGUID() const
Creature * FindNearestCreature(uint32 entry, float range, bool alive=true) const
MovementInfo m_movementInfo
WorldPacket const * Write() override
virtual uint32 GetData(uint32) const
achievement_im_on_a_boat()
bool OnCheck(Player *, Unit *target) override
npc_gunship_boarding_add()
CreatureAI * GetAI(Creature *creature) const override
CreatureAI * GetAI(Creature *creature) const override
bool CheckProc(ProcEventInfo &)
void RemovePassengers(SpellMissInfo missInfo)
void HandleDummy(SpellEffIndex effIndex)
void FilterTargets(std::list< WorldObject * > &targets)
void HandleDummy(SpellEffIndex effIndex)
void CountTargets(std::list< WorldObject * > &targets)
spell_igb_check_for_players()
void TeleportPlayer(SpellEffIndex)
void SelectTransport(WorldObject *&target)
void RelocateDest(SpellEffIndex)
void CalculateDamage(Unit const *, int32 &, int32 &flatMod, float &) const
bool CheckAreaTarget(Unit *unit)
spell_igb_on_gunship_deck()
void HandleApply(AuraEffect const *, AuraEffectHandleModes)
void HandleRemove(AuraEffect const *, AuraEffectHandleModes)
void HandleApply(AuraEffect const *, AuraEffectHandleModes)
void SendClientControl(bool value)
void HandlePeriodicTick(AuraEffect const *aurEff)
void DamageGunship(SpellEffIndex)
void SelectRandomTarget(std::list< WorldObject * > &targets)
void HandleScript(SpellEffIndex effIndex)
bool CheckAreaTarget(Unit *target)
void HandleApply(AuraEffect const *, AuraEffectHandleModes)
void HandleRemove(AuraEffect const *, AuraEffectHandleModes)
bool Validate(SpellInfo const *) override
void HandlePeriodic(AuraEffect const *)
void HandleRemove(AuraEffect const *aurEff, AuraEffectHandleModes)
void FilterTargets(std::list< WorldObject * > &targets)
void RelocateTransportOffset(SpellEffIndex)
#define RegisterIcecrownCitadelCreatureAI(ai_name)
@ ACTION_ENEMY_GUNSHIP_TALK
@ DATA_ICECROWN_GUNSHIP_BATTLE
@ NPC_SKYBREAKER_SORCERER
@ NPC_IGB_MURADIN_BRONZEBEARD
@ NPC_SKYBREAKER_MORTAR_SOLDIER
@ NPC_KOR_KRON_BATTLE_MAGE
@ NPC_MARTYR_STALKER_IGB_SAURFANG
@ NPC_KOR_KRON_AXETHROWER
@ NPC_IGB_HIGH_OVERLORD_SAURFANG
@ NPC_SKYBREAKER_RIFLEMAN
@ NPC_SKYBREAKER_SERGEANT
TimePoint Now()
Current chrono steady_clock time point.
std::vector< Vector3 > PointsArray
TC_GAME_API Transport * GetTransport(WorldObject const &u, ObjectGuid const &guid)
TC_GAME_API Creature * GetCreature(WorldObject const &u, ObjectGuid const &guid)
auto SelectRandomContainerElement(C const &container) -> typename std::add_const< decltype(*std::begin(container))>::type &
static void VisitWorldObjects(WorldObject const *obj, T &visitor, float radius, bool dont_load=true)
struct MovementInfo::TransportInfo transport
constexpr void SetOrientation(float orientation)
constexpr float GetPositionX() const
constexpr float GetPositionY() const
constexpr void GetPosition(float &x, float &y) const
constexpr void Relocate(float x, float y)
void RelocateOffset(Position const &offset)
constexpr float GetOrientation() const
constexpr float GetPositionZ() const
void AttackStart(Unit *) override
== Triggered Actions Requested ==================
void AddThreat(Unit *victim, float amount, Unit *who=nullptr)
void TriggerBurningPitch()
gunship_npc_AI(Creature *creature)
void MovementInform(uint32 type, uint32 pointId) override
void EnterEvadeMode(EvadeReason) override
bool CanAIAttack(Unit const *target) const override
InstanceScript * Instance
void SetData(uint32 type, uint32 data) override
void JustDied(Unit *) override
void SetSlotInfo(uint32 index)
uint32 GetData(uint32 id) const override
std::map< ObjectGuid, uint32 > _shipVisits
npc_gunshipAI(Creature *creature)
void SetGUID(ObjectGuid const &guid, int32 id) override
void DamageTaken(Unit *, uint32 &damage, DamageEffectType, SpellInfo const *) override
void JustDied(Unit *) override
bool HasAttackablePlayerNearby()
void UpdateAI(uint32) override
void SetData(uint32 type, uint32 data) override
bool CanAIAttack(Unit const *target) const override
void DamageTaken(Unit *, uint32 &damage, DamageEffectType, SpellInfo const *) override
void MovementInform(uint32 type, uint32 pointId) override
bool _usedDesperateResolve
npc_gunship_boarding_addAI(Creature *creature)
npc_gunship_boarding_leader(Creature *creature)
void JustEngagedWith(Unit *target) override
void UpdateAI(uint32 diff) override
void PassengerBoarded(Unit *, int8, bool apply) override
== Fields =======================================
void OnCharmed(bool) override
npc_gunship_cannon(Creature *creature)
npc_gunship_gunner(Creature *creature)
void AttackStart(Unit *target) override
== Triggered Actions Requested ==================
void MovementInform(uint32 type, uint32 pointId) override
void UpdateAI(uint32) override
npc_gunship_mage(Creature *creature)
void EnterEvadeMode(EvadeReason) override
void UpdateAI(uint32) override
bool CanAIAttack(Unit const *) const override
void MovementInform(uint32 type, uint32 pointId) override
void UpdateAI(uint32) override
npc_gunship_rocketeer(Creature *creature)
void MovementInform(uint32 type, uint32 pointId) override
InstanceScript * _instance
void DamageTaken(Unit *, uint32 &damage, DamageEffectType, SpellInfo const *) override
void SetData(uint32 type, uint32 data) override
void UpdateAI(uint32 diff) override
TimePoint _firstMageCooldown
PassengerController _controller
time_t _rocketeersYellCooldown
npc_high_overlord_saurfang_igb(Creature *creature)
bool CanAIAttack(Unit const *target) const override
void InitializeAI() override
void DoAction(int32 action) override
bool OnGossipSelect(Player *, uint32, uint32) override
time_t _axethrowersYellCooldown
void EnterEvadeMode(EvadeReason) override
void JustEngagedWith(Unit *) override
InstanceScript * _instance
bool OnGossipSelect(Player *, uint32, uint32) override
void UpdateAI(uint32 diff) override
npc_muradin_bronzebeard_igb(Creature *creature)
void DoAction(int32 action) override
TimePoint _firstMageCooldown
void DamageTaken(Unit *, uint32 &damage, DamageEffectType, SpellInfo const *) override
void EnterEvadeMode(EvadeReason) override
bool CanAIAttack(Unit const *target) const override
PassengerController _controller
void SetData(uint32 type, uint32 data) override
void InitializeAI() override
time_t _riflemanYellCooldown
time_t _mortarYellCooldown
void JustEngagedWith(Unit *) override
bool OnGossipSelect(Player *player, uint32, uint32) override
void UpdateAI(uint32) override
npc_zafod_boombox(Creature *creature)