67#define MIDDLE_X 30.134f
68#define MIDDLE_Y -923.65f
71#define SPOREBAT_X 30.977156f
72#define SPOREBAT_Y -925.297761f
73#define SPOREBAT_Z 77.176567f
74#define SPOREBAT_O 5.223932f
78 {8.3f, -835.3f, 21.9f, 5.0f},
79 {53.4f, -835.3f, 21.9f, 4.5f},
80 {96.0f, -861.9f, 21.8f, 4.0f},
81 {96.0f, -986.4f, 21.4f, 2.5f},
82 {54.4f, -1010.6f, 22, 1.8f},
83 {9.8f, -1012, 21.7f, 1.4f},
84 {-35.0f, -987.6f, 21.5f, 0.8f},
85 {-58.9f, -901.6f, 21.5f, 6.0f}
90 {71.700752f, -883.905884f, 41.097168f},
91 {45.039848f, -868.022827f, 41.097015f},
92 {14.585141f, -867.894470f, 41.097061f},
93 {-25.415508f, -906.737732f, 41.097061f},
94 {-11.801594f, -963.405884f, 41.097067f},
95 {14.556657f, -979.051514f, 41.097137f},
96 {43.466549f, -979.406677f, 41.097027f},
97 {69.945908f, -964.663940f, 41.097054f}
102 {31.6f, -896.3f, 59.1f},
103 {9.1f, -913.9f, 56.0f},
104 {5.2f, -934.4f, 52.4f},
105 {20.7f, -946.9f, 49.7f},
106 {41.0f, -941.9f, 51.0f},
107 {47.7f, -927.3f, 55.0f},
108 {42.2f, -912.4f, 51.7f},
109 {27.0f, -905.9f, 50.0f}
114 {28.84f, -923.28f, 42.9f, 6.0f},
115 {31.183281f, -953.502625f, 41.523602f, 1.640957f},
116 {58.895180f, -923.124268f, 41.545307f, 3.152848f}
121 {66.427010f, -948.778503f, 41.262245f, 2.584220f},
122 {7.513962f, -959.538208f, 41.300422f, 1.034629f},
123 {-12.843201f, -907.798401f, 41.239620f, 6.087094f}
128 {49.6262f, -902.181f, 43.0975f, 3.95683f},
129 {10.988f, -901.616f, 42.5371f, 5.4373f},
130 {10.3859f, -944.036f, 42.5446f, 0.779888f},
131 {49.3126f, -943.398f, 42.5501f, 2.40174f}
200 for (
uint8 i = 0; i < 4; ++i)
251 if (
Player* player = itr->GetSource())
252 player->DestroyItemCount(31088, 1,
true);
389 for (
uint8 i = 0; i < 4; ++i)
404 sporebat->AI()->AttackStart(target);
421 bool inMeleeRange =
false;
501 CoilfangStrider->AI()->AttackStart(target);
503 CoilfangStrider->AI()->AttackStart(
me->
GetVictim());
568 for (
uint32 i = 1; i < 8; ++i)
831 uint8 channelIdentifier;
832 switch (gObj->GetEntry())
836 channelIdentifier = 0;
840 channelIdentifier = 1;
844 channelIdentifier = 2;
848 channelIdentifier = 3;
854 if (instance->
GetData(identifier))
861 instance->
SetData(identifier, 1);
#define CREATURE_Z_ATTACK_RANGE
@ TEMPSUMMON_DEAD_DESPAWN
@ TEMPSUMMON_TIMED_DESPAWN
@ TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT
@ TEMPSUMMON_CORPSE_DESPAWN
uint32 urand(uint32 min, uint32 max)
@ UNIT_FLAG_NON_ATTACKABLE
void AddSC_boss_lady_vashj()
float SporebatWPPos[8][3]
@ SHIED_GENERATOR_CHANNEL
@ SPELL_STATIC_CHARGE_TRIGGER
float CoilfangElitePos[3][4]
float CoilfangStriderPos[3][4]
float ShieldGeneratorChannelPos[4][4]
void _JustEngagedWith(Unit *who)
virtual void EnterEvadeMode(EvadeReason why=EvadeReason::Other)
void Talk(uint8 id, WorldObject const *whisperTarget=nullptr)
void AttackStart(Unit *victim) override
== Triggered Actions Requested ==================
void SetCanMelee(bool canMelee, bool fleeFromMelee=false)
void setDeathState(DeathState s) override
float GetAttackDistance(Unit const *player) const
void DespawnOrUnsummon(Milliseconds timeToDespawn=0s, Seconds forceRespawnTime=0s)
bool CanCreatureAttack(Unit const *victim, bool force=true) const
void SetDisplayId(uint32 displayId, bool setNative=false) override
void SetCorpseDelay(uint32 delay, bool ignoreCorpseDecayRatio=false)
virtual ObjectGuid GetGuidData(uint32 type) const override
PlayerList const & GetPlayers() const
void MoveChase(Unit *target, Optional< ChaseRange > dist={}, Optional< ChaseAngle > angle={})
void MovePoint(uint32 id, Position const &pos, bool generatePath=true, Optional< float > finalOrient={}, Optional< float > speed={}, MovementWalkRunSpeedSelectionMode speedSelectionMode=MovementWalkRunSpeedSelectionMode::Default, Optional< float > closeEnoughDistance={})
static Creature * ToCreature(Object *o)
uint32 DestroyItemCount(uint32 item, uint32 count, bool update, bool unequip_check=false)
GameObject * GetGOTarget() const
Unit * GetUnitTarget() const
Trinity::IteratorPair< ThreatListIterator, std::nullptr_t > GetUnsortedThreatList() const
SpellCastResult DoCastVictim(uint32 spellId, CastSpellExtraArgs const &args={})
Unit * SelectTarget(SelectTargetMethod targetType, uint32 offset=0, float dist=0.0f, bool playerOnly=false, bool withTank=true, int32 aura=0)
SpellCastResult DoCast(uint32 spellId)
bool IsWithinMeleeRange(Unit const *obj) const
void SetHealth(uint64 val)
ThreatManager & GetThreatManager()
void SetFaction(uint32 faction) override
MotionMaster * GetMotionMaster()
bool SetDisableGravity(bool disable, bool updateAnimTier=true)
bool SetWalk(bool enable)
uint64 CountPctFromMaxHealth(int32 pct) const
void SetSpeedRate(UnitMoveType mtype, float rate)
bool HasAura(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, ObjectGuid itemCasterGUID=ObjectGuid::Empty, uint32 reqEffMask=0) const
void SetUnitFlag(UnitFlags flags)
void KillSelf(bool durabilityLoss=true, bool skipSettingDeathState=false)
void RemoveAurasDueToSpell(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, uint32 reqEffMask=0, AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)
void RemoveUnitFlag(UnitFlags flags)
bool IsWithinDist3d(float x, float y, float z, 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)
bool IsWithinLOSInMap(WorldObject const *obj, LineOfSightChecks checks=LINEOFSIGHT_ALL_CHECKS, VMAP::ModelIgnoreFlags ignoreFlags=VMAP::ModelIgnoreFlags::Nothing) const
bool IsWithinDistInMap(WorldObject const *obj, float dist2compare, bool is3D=true, bool incOwnRadius=true, bool incTargetRadius=true) const
float GetDistance(WorldObject const *obj) const
float GetDistanceZ(WorldObject const *obj) const
virtual uint32 GetData(uint32) const
virtual void SetData(uint32, uint32)
bool OnUse(Player *player, Item *, SpellCastTargets const &targets, ObjectGuid) override
TC_GAME_API Unit * GetUnit(WorldObject const &, ObjectGuid const &guid)
TC_GAME_API Creature * GetCreature(WorldObject const &u, ObjectGuid const &guid)
#define RegisterSerpentshrineCavernCreatureAI(ai_name)
void AttackStart(Unit *) override
== Triggered Actions Requested ==================
void DoTeleportTo(float x, float y, float z, uint32 time=0)
bool HealthBelowPct(uint32 pct) const
void AddThreat(Unit *victim, float amount, Unit *who=nullptr)
void KilledUnit(Unit *) override
uint32 TaintedElementalTimer
void EventTaintedElementalDeath()
uint32 CoilfangEliteTimer
uint32 SummonSporebatStaticTimer
void JustEngagedWith(Unit *who) override
void JustDied(Unit *) override
boss_lady_vashj(Creature *creature)
void MoveInLineOfSight(Unit *who) override
ObjectGuid ShieldGeneratorChannel[4]
void UpdateAI(uint32 diff) override
uint32 ForkedLightningTimer
void CastShootOrMultishot()
uint8 EnchantedElementalPos
uint32 SummonSporebatTimer
InstanceScript * instance
uint32 CoilfangStriderTimer
uint32 EnchantedElementalTimer
void StartEvent(Unit *who)
void UpdateAI(uint32 diff) override
void MoveInLineOfSight(Unit *) override
npc_enchanted_elemental(Creature *creature)
InstanceScript * instance
void JustEngagedWith(Unit *) override
void MoveInLineOfSight(Unit *) override
npc_shield_generator_channel(Creature *creature)
InstanceScript * instance
void UpdateAI(uint32 diff) override
InstanceScript * instance
void JustEngagedWith(Unit *who) override
void UpdateAI(uint32 diff) override
npc_tainted_elemental(Creature *creature)
void JustDied(Unit *) override
InstanceScript * instance
void UpdateAI(uint32 diff) override
void MovementInform(uint32 type, uint32 id) override
void MoveInLineOfSight(Unit *) override
npc_toxic_sporebat(Creature *creature)