244 if (a->GetMovementGeneratorType() == POINT_MOTION_TYPE)
246 PointMovementGenerator<Creature> const* pointMovement = dynamic_cast<PointMovementGenerator<Creature> const*>(a);
247 return pointMovement && pointMovement->GetId() == POINT_TARGET_BONESTORM_PLAYER;
289 me->GetMotionMaster()->MoveIdle();
294 return &_coldflameLastPos;
302 return _coldflameTarget;
308 if (index < _boneSpikeImmune.size())
309 return _boneSpikeImmune[index];
323 _coldflameTarget = guid;
326 _boneSpikeImmune.push_back(guid);
336 _boneSpikeImmune.clear();
371 pos.
Relocate(marrowgarAI->GetLastColdflamePosition());
430 if (
Unit* trapped = summ->GetSummonerUnit())
463 init.DisableTransportPathTransformations();
464 init.MoveTo(-0.02206125f, -0.02132235f, 5.514783f,
false);
502 targets.push_back(target);
526 for (
uint8 i = 0; i < 4; ++i)
590 std::list<Unit*> targets;
596 for (std::list<Unit*>::const_iterator itr = targets.begin(); itr != targets.end(); ++itr, ++i)
605 spike->DespawnOrUnsummon();
std::chrono::milliseconds Milliseconds
Milliseconds shorthand typedef.
@ MOTION_PRIORITY_HIGHEST
std::vector< ObjectGuid > GuidVector
#define RegisterSpellScript(spell_script)
@ SPELL_EFFECT_SCRIPT_EFFECT
@ SPELL_EFFECT_APPLY_AURA
@ TARGET_UNIT_DEST_AREA_ENEMY
@ SPELL_FAILED_NO_VALID_TARGETS
#define SpellCheckCastFn(F)
#define SpellEffectFn(F, I, N)
#define SpellObjectAreaTargetSelectFn(F, I, N)
#define AuraCheckAreaTargetFn(F)
@ SPELL_COLDFLAME_BONE_STORM
@ SPELL_COLDFLAME_PASSIVE
@ SPELL_BONE_SPIKE_GRAVEYARD
boss_lord_marrowgar MarrowgarAI
@ POINT_TARGET_BONESTORM_PLAYER
void AddSC_boss_lord_marrowgar()
@ EVENT_COLDFLAME_TRIGGER
@ EVENT_BONE_SPIKE_GRAVEYARD
@ EVENT_ENABLE_BONE_SLICE
uint32 const BoneSpikeSummonId[3]
@ ACTION_CLEAR_SPIKE_IMMUNITIES
WorldObject * GetOwner() const
SpellEffectInfo const & GetEffectInfo(SpellEffIndex effIndex) const
HookList< CheckAreaTargetHandler > DoCheckAreaTarget
bool operator()(Unit *unit) const
BoneSpikeTargetSelector(UnitAI *ai)
InstanceScript *const instance
void DoZoneInCombat(Creature *creature=nullptr)
void Talk(uint8 id, WorldObject const *whisperTarget=nullptr)
void DespawnOrUnsummon(Milliseconds timeToDespawn=0s, Seconds forceRespawnTime=0s)
void DelayEvents(Milliseconds delay)
void RescheduleEvent(EventId eventId, Milliseconds time, GroupIndex group=0u, PhaseIndex phase=0u)
void CancelEvent(EventId eventId)
void ScheduleEvent(EventId eventId, Milliseconds time, GroupIndex group=0u, PhaseIndex phase=0u)
virtual bool SetBossState(uint32 id, EncounterState state)
void LaunchMoveSpline(std::function< void(Movement::MoveSplineInit &init)> &&initializer, uint32 id=0, MovementGeneratorPriority priority=MOTION_PRIORITY_NORMAL, MovementGeneratorType type=EFFECT_MOTION_TYPE)
void MoveChase(Unit *target, Optional< ChaseRange > dist={}, Optional< ChaseAngle > angle={})
void MovePoint(uint32 id, Position const &pos, bool generatePath=true, Optional< float > finalOrient={})
MovementGenerator * GetMovementGenerator(std::function< bool(MovementGenerator const *)> const &filter, MovementSlot slot=MOTION_SLOT_ACTIVE) const
void Remove(MovementGenerator *movement, MovementSlot slot=MOTION_SLOT_ACTIVE)
static ObjectGuid const Empty
static Creature * ToCreature(Object *o)
static Unit * ToUnit(Object *o)
static ObjectGuid GetGUID(Object const *o)
HookList< CheckCastHandler > OnCheckCast
int32 GetHitDamage() const
HookList< HitHandler > OnHit
void PreventHitDefaultEffect(SpellEffIndex effIndex)
Unit * GetHitUnit() const
int32 GetEffectValue() const
HookList< EffectHandler > OnEffectHitTarget
HookList< CastHandler > BeforeCast
void SetHitDamage(int32 damage)
SpellInfo const * GetSpellInfo() const
HookList< ObjectAreaTargetSelectHandler > OnObjectAreaTargetSelect
virtual void DoAction(int32)
void DoMeleeAttackIfReady()
SpellCastResult DoCastVictim(uint32 spellId, CastSpellExtraArgs const &args={})
virtual ObjectGuid GetGUID(int32=0) const
void SelectTargetList(std::list< Unit * > &targetList, uint32 num, SelectTargetMethod targetType, uint32 offset=0, float dist=0.0f, bool playerOnly=false, bool withTank=true, int32 aura=0)
Unit * SelectTarget(SelectTargetMethod targetType, uint32 offset=0, float dist=0.0f, bool playerOnly=false, bool withTank=true, int32 aura=0)
virtual void SetGUID(ObjectGuid const &, int32=0)
SpellCastResult DoCastAOE(uint32 spellId, CastSpellExtraArgs const &args={})
SpellCastResult DoCast(uint32 spellId)
Aura * GetAura(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, ObjectGuid itemCasterGUID=ObjectGuid::Empty, uint8 reqEffMask=0) const
MotionMaster * GetMotionMaster()
float GetCombatReach() const override
TempSummon * ToTempSummon()
bool HasAura(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, ObjectGuid itemCasterGUID=ObjectGuid::Empty, uint8 reqEffMask=0) const
void NearTeleportTo(Position const &pos, bool casting=false)
float GetSpeedRate(UnitMoveType mtype) const
void RemoveAurasDueToSpell(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, uint8 reqEffMask=0, AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)
void SetSpeedRate(UnitMoveType mtype, float rate)
bool HasUnitState(const uint32 f) const
void FinishSpell(CurrentSpellTypes spellType, bool ok=true)
Vehicle * GetVehicleKit() const
Spell * GetCurrentSpell(CurrentSpellTypes spellType) const
InstanceScript * GetInstanceScript() const
SpellCastResult CastSpell(CastSpellTargetArg const &targets, uint32 spellId, CastSpellExtraArgs const &args={ })
void setActive(bool isActiveObject)
Position GetNearPosition(float dist, float angle)
void GetNearPoint2D(WorldObject const *searcher, float &x, float &y, float distance, float absAngle) const
virtual void SetData(uint32, uint32)
static bool ValidateSpellInfo(std::initializer_list< uint32 > spellIds)
at_lord_marrowgar_entrance()
bool TryHandleOnce(Player *player, AreaTriggerEntry const *) override
spell_marrowgar_bone_slice()
void CountTargets(std::list< WorldObject * > &targets)
PrepareSpellScript(spell_marrowgar_bone_slice)
void ClearSpikeImmunities()
void HandleSpikes(SpellEffIndex effIndex)
PrepareSpellScript(spell_marrowgar_bone_spike_graveyard)
SpellCastResult CheckCast()
bool Validate(SpellInfo const *) override
PrepareSpellScript(spell_marrowgar_bone_storm)
PrepareSpellScript(spell_marrowgar_coldflame_bonestorm)
void HandleScriptEffect(SpellEffIndex effIndex)
bool CanBeAppliedOn(Unit *target)
PrepareAuraScript(spell_marrowgar_coldflame_damage)
PrepareSpellScript(spell_marrowgar_coldflame)
void HandleScriptEffect(SpellEffIndex effIndex)
void SelectTarget(std::list< WorldObject * > &targets)
#define RegisterIcecrownCitadelCreatureAI(ai_name)
TC_GAME_API Player * GetPlayer(Map const *, ObjectGuid const &guid)
TC_GAME_API Creature * GetCreature(WorldObject const &u, ObjectGuid const &guid)
float GetExactDist2d(const float x, const float y) const
float GetPositionZ() const
float GetOrientation() const
float GetAbsoluteAngle(float x, float y) const
void SetOrientation(float orientation)
float GetPositionX() const
float GetPositionY() const
void Relocate(float x, float y)
void SetCombatMovement(bool allowMovement)
T const & RAID_MODE(T const &normal10, T const &normal25) const
void SetGUID(ObjectGuid const &guid, int32 id) override
void JustEngagedWith(Unit *) override
GuidVector _boneSpikeImmune
Milliseconds _boneStormDuration
Position const * GetLastColdflamePosition() const
void JustDied(Unit *) override
ObjectGuid GetGUID(int32 type) const override
ObjectGuid _coldflameTarget
void UpdateAI(uint32 diff) override
boss_lord_marrowgar(Creature *creature)
void MovementInform(uint32 type, uint32 id) override
void JustReachedHome() override
void DoAction(int32 action) override
void KilledUnit(Unit *victim) override
Position _coldflameLastPos
void JustDied(Unit *) override
npc_bone_spike(Creature *creature)
void UpdateAI(uint32 diff) override
void KilledUnit(Unit *victim) override
void IsSummonedBy(WorldObject *summonerWO) override
void PassengerBoarded(Unit *passenger, int8, bool apply) override
== Fields =======================================
void IsSummonedBy(WorldObject *ownerWO) override
npc_coldflame(Creature *creature)
void UpdateAI(uint32 diff) override