fix(Scripts/TempleofAhnQiraj): improve C'thun's script a bit and repl… (#12067)
fix(Scripts/TempleofAhnQiraj): improve C'thun's script a bit and replace eye tentacle spawns with sniffed values
This commit is contained in:
@@ -0,0 +1,56 @@
|
|||||||
|
DELETE FROM `creature_summon_groups` WHERE `summonerId` = 15589;
|
||||||
|
INSERT INTO `creature_summon_groups` (`summonerId`, `summonerType`, `groupId`, `entry`, `position_x`, `position_y`, `position_z`, `orientation`, `summonType`, `summonTime`) VALUES
|
||||||
|
-- Group 1
|
||||||
|
(15589, 0, 0, 15726, -8603.775391, 1974.709351, 100.220718, 0.0, 2, 300000),
|
||||||
|
(15589, 0, 0, 15726, -8605.348633, 1994.268188, 100.221367, 0.0, 2, 300000),
|
||||||
|
(15589, 0, 0, 15726, -8589.451172, 2012.543823, 100.220688, 0.0, 2, 300000),
|
||||||
|
(15589, 0, 0, 15726, -8563.065430, 2010.912842, 100.220688, 0.0, 2, 300000),
|
||||||
|
(15589, 0, 0, 15726, -8550.451172, 1992.396851, 100.171875, 0.0, 2, 300000),
|
||||||
|
(15589, 0, 0, 15726, -8554.344727, 1972.097046, 100.221184, 0.0, 2, 300000),
|
||||||
|
(15589, 0, 0, 15726, -8565.425781, 1961.392578, 100.220581, 0.0, 2, 300000),
|
||||||
|
(15589, 0, 0, 15726, -8588.680664, 1957.962646, 100.498169, 0.0, 2, 300000),
|
||||||
|
-- Group 2
|
||||||
|
(15589, 0, 1, 15726, -8604.788086, 1977.721191, 100.220673, 0.0, 2, 300000),
|
||||||
|
(15589, 0, 1, 15726, -8604.773438, 1997.835571, 100.220657, 0.0, 2, 300000),
|
||||||
|
(15589, 0, 1, 15726, -8586.697266, 2014.359497, 100.221024, 0.0, 2, 300000),
|
||||||
|
(15589, 0, 1, 15726, -8560.730469, 2009.243042, 100.312027, 0.0, 2, 300000),
|
||||||
|
(15589, 0, 1, 15726, -8549.125977, 1989.693115, 100.218964, 0.0, 2, 300000),
|
||||||
|
(15589, 0, 1, 15726, -8555.000977, 1969.066040, 100.220825, 0.0, 2, 300000),
|
||||||
|
(15589, 0, 1, 15726, -8567.546875, 1959.600464, 100.340576, 0.0, 2, 300000),
|
||||||
|
(15589, 0, 1, 15726, -8591.760742, 1960.183838, 100.220749, 0.0, 2, 300000),
|
||||||
|
-- Group 3
|
||||||
|
(15589, 0, 2, 15726, -8584.177734, 2015.206665, 100.220627, 0.0, 2, 300000),
|
||||||
|
(15589, 0, 2, 15726, -8558.459961, 2007.343140, 100.500259, 0.0, 2, 300000),
|
||||||
|
(15589, 0, 2, 15726, -8548.819336, 1987.051270, 100.219139, 0.0, 2, 300000),
|
||||||
|
(15589, 0, 2, 15726, -8557.414063, 1967.254272, 100.220711, 0.0, 2, 300000),
|
||||||
|
(15589, 0, 2, 15726, -8570.909180, 1958.947632, 100.220642, 0.0, 2, 300000),
|
||||||
|
(15589, 0, 2, 15726, -8594.705078, 1962.332764, 100.220726, 0.0, 2, 300000),
|
||||||
|
(15589, 0, 2, 15726, -8605.216797, 1981.862793, 100.220512, 0.0, 2, 300000),
|
||||||
|
(15589, 0, 2, 15726, -8602.661133, 2000.301636, 100.300171, 0.0, 2, 300000),
|
||||||
|
-- Group 4
|
||||||
|
(15589, 0, 3, 15726, -8574.696289, 1958.381958, 100.220482, 0.0, 2, 300000),
|
||||||
|
(15589, 0, 3, 15726, -8597.281250, 1964.753052, 100.220665, 0.0, 2, 300000),
|
||||||
|
(15589, 0, 3, 15726, -8605.613281, 1984.794800, 100.220833, 0.0, 2, 300000),
|
||||||
|
(15589, 0, 3, 15726, -8601.550781, 2002.827759, 100.411690, 0.0, 2, 300000),
|
||||||
|
(15589, 0, 3, 15726, -8580.916016, 2015.309814, 100.220802, 0.0, 2, 300000),
|
||||||
|
(15589, 0, 3, 15726, -8556.536133, 2004.968018, 100.220840, 0.0, 2, 300000),
|
||||||
|
(15589, 0, 3, 15726, -8549.049805, 1984.366577, 100.220390, 0.0, 2, 300000),
|
||||||
|
(15589, 0, 3, 15726, -8559.099609, 1965.337646, 100.220795, 0.0, 2, 300000),
|
||||||
|
-- Group 5
|
||||||
|
(15589, 0, 4, 15726, -8606.484375, 1987.263062, 100.220650, 0.0, 2, 300000),
|
||||||
|
(15589, 0, 4, 15726, -8598.741211, 2005.753418, 100.220520, 0.0, 2, 300000),
|
||||||
|
(15589, 0, 4, 15726, -8577.381836, 2015.370239, 100.220665, 0.0, 2, 300000),
|
||||||
|
(15589, 0, 4, 15726, -8554.274414, 2001.834106, 100.167274, 0.0, 2, 300000),
|
||||||
|
(15589, 0, 4, 15726, -8550.043945, 1980.844604, 100.218864, 0.0, 2, 300000),
|
||||||
|
(15589, 0, 4, 15726, -8560.641602, 1963.641602, 100.218864, 0.0, 2, 300000),
|
||||||
|
(15589, 0, 4, 15726, -8578.719727, 1957.526001, 100.403954, 0.0, 2, 300000),
|
||||||
|
(15589, 0, 4, 15726, -8599.988281, 1968.158936, 100.220963, 0.0, 2, 300000),
|
||||||
|
-- Group 6
|
||||||
|
(15589, 0, 5, 15726, -8562.926758, 1962.273071, 100.220818, 0.0, 2, 300000),
|
||||||
|
(15589, 0, 5, 15726, -8583.307617, 1956.971558, 100.498611, 0.0, 2, 300000),
|
||||||
|
(15589, 0, 5, 15726, -8601.906250, 1970.630859, 100.263298, 0.0, 2, 300000),
|
||||||
|
(15589, 0, 5, 15726, -8606.078125, 1990.227051, 100.220634, 0.0, 2, 300000),
|
||||||
|
(15589, 0, 5, 15726, -8595.287109, 2009.543457, 100.220711, 0.0, 2, 300000),
|
||||||
|
(15589, 0, 5, 15726, -8573.629883, 2014.623413, 100.220512, 0.0, 2, 300000),
|
||||||
|
(15589, 0, 5, 15726, -8552.320313, 1998.953735, 100.130707, 0.0, 2, 300000),
|
||||||
|
(15589, 0, 5, 15726, -8550.862305, 1978.124878, 100.219307, 0.0, 2, 300000);
|
||||||
@@ -91,6 +91,14 @@ enum Spells
|
|||||||
enum Actions
|
enum Actions
|
||||||
{
|
{
|
||||||
ACTION_FLESH_TENTACLE_KILLED = 1,
|
ACTION_FLESH_TENTACLE_KILLED = 1,
|
||||||
|
|
||||||
|
ACTION_SPAWN_EYE_TENTACLES = 1,
|
||||||
|
};
|
||||||
|
|
||||||
|
enum Misc
|
||||||
|
{
|
||||||
|
MAX_TENTACLE_GROUPS = 5,
|
||||||
|
GROUP_BEAM_PHASE = 1
|
||||||
};
|
};
|
||||||
|
|
||||||
enum Yells
|
enum Yells
|
||||||
@@ -146,45 +154,22 @@ public:
|
|||||||
|
|
||||||
struct eye_of_cthunAI : public ScriptedAI
|
struct eye_of_cthunAI : public ScriptedAI
|
||||||
{
|
{
|
||||||
eye_of_cthunAI(Creature* creature) : ScriptedAI(creature)
|
eye_of_cthunAI(Creature* creature) : ScriptedAI(creature), _summons(creature)
|
||||||
{
|
{
|
||||||
instance = creature->GetInstanceScript();
|
instance = creature->GetInstanceScript();
|
||||||
|
|
||||||
SetCombatMovement(false);
|
SetCombatMovement(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
InstanceScript* instance;
|
|
||||||
|
|
||||||
//Global variables
|
|
||||||
uint32 PhaseTimer;
|
|
||||||
|
|
||||||
//Eye beam phase
|
|
||||||
uint32 BeamTimer;
|
|
||||||
uint32 EyeTentacleTimer;
|
|
||||||
uint32 ClawTentacleTimer;
|
|
||||||
|
|
||||||
//Dark Glare phase
|
|
||||||
uint32 DarkGlareTick;
|
|
||||||
uint32 DarkGlareTickTimer;
|
|
||||||
float DarkGlareAngle;
|
|
||||||
bool ClockWise;
|
|
||||||
|
|
||||||
void Reset() override
|
void Reset() override
|
||||||
{
|
{
|
||||||
//Phase information
|
|
||||||
PhaseTimer = 50000; //First dark glare in 50 seconds
|
|
||||||
|
|
||||||
//Eye beam phase 50 seconds
|
|
||||||
BeamTimer = 3000;
|
|
||||||
EyeTentacleTimer = 45000; //Always spawns 5 seconds before Dark Beam
|
|
||||||
ClawTentacleTimer = 12500; //4 per Eye beam phase (unsure if they spawn during Dark beam)
|
|
||||||
|
|
||||||
//Dark Beam phase 35 seconds (each tick = 1 second, 35 ticks)
|
//Dark Beam phase 35 seconds (each tick = 1 second, 35 ticks)
|
||||||
DarkGlareTick = 0;
|
DarkGlareTick = 0;
|
||||||
DarkGlareTickTimer = 1000;
|
|
||||||
DarkGlareAngle = 0;
|
DarkGlareAngle = 0;
|
||||||
ClockWise = false;
|
ClockWise = false;
|
||||||
|
|
||||||
|
_eyeTentacleCounter = 0;
|
||||||
|
|
||||||
//Reset flags
|
//Reset flags
|
||||||
me->RemoveAurasDueToSpell(SPELL_RED_COLORATION);
|
me->RemoveAurasDueToSpell(SPELL_RED_COLORATION);
|
||||||
me->RemoveAurasDueToSpell(SPELL_FREEZE_ANIM);
|
me->RemoveAurasDueToSpell(SPELL_FREEZE_ANIM);
|
||||||
@@ -198,20 +183,128 @@ public:
|
|||||||
Creature* pPortal = me->FindNearestCreature(NPC_CTHUN_PORTAL, 10);
|
Creature* pPortal = me->FindNearestCreature(NPC_CTHUN_PORTAL, 10);
|
||||||
if (pPortal)
|
if (pPortal)
|
||||||
pPortal->SetReactState(REACT_PASSIVE);
|
pPortal->SetReactState(REACT_PASSIVE);
|
||||||
|
|
||||||
|
_summons.DespawnAll();
|
||||||
|
_scheduler.CancelAll();
|
||||||
}
|
}
|
||||||
|
|
||||||
void EnterCombat(Unit* /*who*/) override
|
void EnterCombat(Unit* /*who*/) override
|
||||||
{
|
{
|
||||||
DoZoneInCombat();
|
DoZoneInCombat();
|
||||||
|
ScheduleTasks();
|
||||||
instance->SetData(DATA_CTHUN_PHASE, PHASE_EYE_GREEN_BEAM);
|
instance->SetData(DATA_CTHUN_PHASE, PHASE_EYE_GREEN_BEAM);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SpawnEyeTentacle(float x, float y)
|
void DoAction(int32 action) override
|
||||||
{
|
{
|
||||||
if (Creature* Spawned = DoSpawnCreature(NPC_EYE_TENTACLE, x, y, 0, 0, TEMPSUMMON_CORPSE_DESPAWN, 500))
|
if (action == ACTION_SPAWN_EYE_TENTACLES)
|
||||||
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0))
|
{
|
||||||
if (Spawned->AI())
|
me->SummonCreatureGroup(_eyeTentacleCounter);
|
||||||
Spawned->AI()->AttackStart(target);
|
_eyeTentacleCounter++;
|
||||||
|
|
||||||
|
if (_eyeTentacleCounter >= MAX_TENTACLE_GROUPS)
|
||||||
|
{
|
||||||
|
_eyeTentacleCounter = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ScheduleTasks()
|
||||||
|
{
|
||||||
|
_scheduler.Schedule(3s, [this](TaskContext task)
|
||||||
|
{
|
||||||
|
DoCastRandomTarget(SPELL_GREEN_BEAM);
|
||||||
|
task.SetGroup(GROUP_BEAM_PHASE);
|
||||||
|
task.Repeat();
|
||||||
|
}).Schedule(12s, [this](TaskContext task)
|
||||||
|
{
|
||||||
|
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 0.0f, true))
|
||||||
|
{
|
||||||
|
if (Creature* tentacle = me->SummonCreature(NPC_CLAW_TENTACLE, *target, TEMPSUMMON_CORPSE_DESPAWN, 1000))
|
||||||
|
{
|
||||||
|
tentacle->AI()->AttackStart(target);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
task.SetGroup(GROUP_BEAM_PHASE);
|
||||||
|
task.Repeat();
|
||||||
|
}).Schedule(45s, [this](TaskContext task)
|
||||||
|
{
|
||||||
|
DoAction(ACTION_SPAWN_EYE_TENTACLES);
|
||||||
|
task.SetGroup(GROUP_BEAM_PHASE);
|
||||||
|
task.Repeat();
|
||||||
|
}).Schedule(50s, [this](TaskContext /*task*/)
|
||||||
|
{
|
||||||
|
_scheduler.CancelGroup(GROUP_BEAM_PHASE);
|
||||||
|
|
||||||
|
me->StopMoving();
|
||||||
|
me->SetReactState(REACT_PASSIVE);
|
||||||
|
me->InterruptNonMeleeSpells(false);
|
||||||
|
me->SetTarget(ObjectGuid::Empty);
|
||||||
|
|
||||||
|
_scheduler.Schedule(1s, [this](TaskContext /*task*/)
|
||||||
|
{
|
||||||
|
//Select random target for dark beam to start on
|
||||||
|
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 0.0f, true))
|
||||||
|
{
|
||||||
|
//Face our target
|
||||||
|
DarkGlareAngle = me->GetAngle(target);
|
||||||
|
DarkGlareTick = 0;
|
||||||
|
ClockWise = RAND(true, false);
|
||||||
|
|
||||||
|
me->SetTarget(target->GetGUID());
|
||||||
|
|
||||||
|
//Add red coloration to C'thun
|
||||||
|
DoCast(me, SPELL_RED_COLORATION, true);
|
||||||
|
|
||||||
|
//Freeze animation
|
||||||
|
DoCast(me, SPELL_FREEZE_ANIM, true);
|
||||||
|
|
||||||
|
me->StopMoving();
|
||||||
|
me->SetFacingToObject(target);
|
||||||
|
me->SetOrientation(DarkGlareAngle);
|
||||||
|
}
|
||||||
|
|
||||||
|
_scheduler.Schedule(3s, [this](TaskContext tasker)
|
||||||
|
{
|
||||||
|
me->SetTarget(ObjectGuid::Empty);
|
||||||
|
me->StopMoving();
|
||||||
|
|
||||||
|
if (ClockWise)
|
||||||
|
{
|
||||||
|
me->SetFacingTo(DarkGlareAngle + DarkGlareTick * float(M_PI) / 35);
|
||||||
|
me->SetOrientation(DarkGlareAngle + DarkGlareTick * float(M_PI) / 35);
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
me->SetFacingTo(DarkGlareAngle - DarkGlareTick * float(M_PI) / 35);
|
||||||
|
me->SetOrientation(DarkGlareAngle - DarkGlareTick * float(M_PI) / 35);
|
||||||
|
}
|
||||||
|
|
||||||
|
DoCastSelf(SPELL_DARK_GLARE);
|
||||||
|
++DarkGlareTick;
|
||||||
|
|
||||||
|
if (tasker.GetRepeatCounter() >= 35)
|
||||||
|
{
|
||||||
|
_scheduler.CancelAll();
|
||||||
|
me->SetReactState(REACT_AGGRESSIVE);
|
||||||
|
me->RemoveAurasDueToSpell(SPELL_RED_COLORATION);
|
||||||
|
me->RemoveAurasDueToSpell(SPELL_FREEZE_ANIM);
|
||||||
|
me->InterruptNonMeleeSpells(false);
|
||||||
|
ScheduleTasks();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
tasker.Repeat(1s);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
void JustSummoned(Creature* summon) override
|
||||||
|
{
|
||||||
|
_summons.Summon(summon);
|
||||||
|
summon->SetInCombatWithZone();
|
||||||
}
|
}
|
||||||
|
|
||||||
void UpdateAI(uint32 diff) override
|
void UpdateAI(uint32 diff) override
|
||||||
@@ -220,162 +313,8 @@ public:
|
|||||||
if (!UpdateVictim())
|
if (!UpdateVictim())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
uint32 currentPhase = instance->GetData(DATA_CTHUN_PHASE);
|
switch (instance->GetData(DATA_CTHUN_PHASE))
|
||||||
if (currentPhase == PHASE_EYE_GREEN_BEAM || currentPhase == PHASE_EYE_RED_BEAM)
|
|
||||||
{
|
{
|
||||||
// EyeTentacleTimer
|
|
||||||
if (EyeTentacleTimer <= diff)
|
|
||||||
{
|
|
||||||
//Spawn the 8 Eye Tentacles in the corret spots
|
|
||||||
SpawnEyeTentacle(0, 20); //south
|
|
||||||
SpawnEyeTentacle(10, 10); //south west
|
|
||||||
SpawnEyeTentacle(20, 0); //west
|
|
||||||
SpawnEyeTentacle(10, -10); //north west
|
|
||||||
|
|
||||||
SpawnEyeTentacle(0, -20); //north
|
|
||||||
SpawnEyeTentacle(-10, -10); //north east
|
|
||||||
SpawnEyeTentacle(-20, 0); // east
|
|
||||||
SpawnEyeTentacle(-10, 10); // south east
|
|
||||||
|
|
||||||
EyeTentacleTimer = 45000;
|
|
||||||
}
|
|
||||||
else EyeTentacleTimer -= diff;
|
|
||||||
}
|
|
||||||
|
|
||||||
switch (currentPhase)
|
|
||||||
{
|
|
||||||
case PHASE_EYE_GREEN_BEAM:
|
|
||||||
//BeamTimer
|
|
||||||
if (BeamTimer <= diff)
|
|
||||||
{
|
|
||||||
//SPELL_GREEN_BEAM
|
|
||||||
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0))
|
|
||||||
{
|
|
||||||
me->InterruptNonMeleeSpells(false);
|
|
||||||
DoCast(target, SPELL_GREEN_BEAM);
|
|
||||||
|
|
||||||
//Correctly update our target
|
|
||||||
me->SetTarget(target->GetGUID());
|
|
||||||
}
|
|
||||||
|
|
||||||
//Beam every 3 seconds
|
|
||||||
BeamTimer = 3000;
|
|
||||||
}
|
|
||||||
else BeamTimer -= diff;
|
|
||||||
|
|
||||||
//ClawTentacleTimer
|
|
||||||
if (ClawTentacleTimer <= diff)
|
|
||||||
{
|
|
||||||
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0))
|
|
||||||
{
|
|
||||||
//Spawn claw tentacle on the random target
|
|
||||||
Creature* spawned = me->SummonCreature(NPC_CLAW_TENTACLE, *target, TEMPSUMMON_CORPSE_DESPAWN, 500);
|
|
||||||
|
|
||||||
if (spawned && spawned->AI())
|
|
||||||
{
|
|
||||||
spawned->AI()->AttackStart(target);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//One claw tentacle every 12.5 seconds
|
|
||||||
ClawTentacleTimer = 12500;
|
|
||||||
}
|
|
||||||
else ClawTentacleTimer -= diff;
|
|
||||||
|
|
||||||
//PhaseTimer
|
|
||||||
if (PhaseTimer <= diff)
|
|
||||||
{
|
|
||||||
//Switch to Dark Beam
|
|
||||||
instance->SetData(DATA_CTHUN_PHASE, PHASE_EYE_RED_BEAM);
|
|
||||||
|
|
||||||
me->InterruptNonMeleeSpells(false);
|
|
||||||
me->SetReactState(REACT_PASSIVE);
|
|
||||||
|
|
||||||
//Remove any target
|
|
||||||
me->SetTarget();
|
|
||||||
|
|
||||||
//Select random target for dark beam to start on
|
|
||||||
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0))
|
|
||||||
{
|
|
||||||
//Face our target
|
|
||||||
DarkGlareAngle = me->GetAngle(target);
|
|
||||||
DarkGlareTickTimer = 4000;
|
|
||||||
DarkGlareTick = 0;
|
|
||||||
ClockWise = RAND(true, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
//Add red coloration to C'thun
|
|
||||||
DoCast(me, SPELL_RED_COLORATION, true);
|
|
||||||
|
|
||||||
//Freeze animation
|
|
||||||
DoCast(me, SPELL_FREEZE_ANIM);
|
|
||||||
me->StopMoving();
|
|
||||||
me->SetFacingTo(DarkGlareAngle);
|
|
||||||
me->SetOrientation(DarkGlareAngle);
|
|
||||||
|
|
||||||
//Darkbeam for 35 seconds
|
|
||||||
PhaseTimer = 35000;
|
|
||||||
}
|
|
||||||
else PhaseTimer -= diff;
|
|
||||||
|
|
||||||
break;
|
|
||||||
|
|
||||||
case PHASE_EYE_RED_BEAM:
|
|
||||||
if (DarkGlareTick < 35)
|
|
||||||
{
|
|
||||||
if (DarkGlareTickTimer <= diff)
|
|
||||||
{
|
|
||||||
me->StopMoving();
|
|
||||||
|
|
||||||
//Set angle and cast
|
|
||||||
if (ClockWise)
|
|
||||||
{
|
|
||||||
me->SetFacingTo(DarkGlareAngle + DarkGlareTick * M_PI / 35);
|
|
||||||
me->SetOrientation(DarkGlareAngle + DarkGlareTick * M_PI / 35);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
me->SetFacingTo(DarkGlareAngle - DarkGlareTick * M_PI / 35);
|
|
||||||
me->SetOrientation(DarkGlareAngle - DarkGlareTick * M_PI / 35);
|
|
||||||
}
|
|
||||||
|
|
||||||
//Actual dark glare cast, maybe something missing here?
|
|
||||||
DoCast(me, SPELL_DARK_GLARE, false);
|
|
||||||
|
|
||||||
//Increase tick
|
|
||||||
++DarkGlareTick;
|
|
||||||
|
|
||||||
//1 second per tick
|
|
||||||
DarkGlareTickTimer = 1000;
|
|
||||||
}
|
|
||||||
else DarkGlareTickTimer -= diff;
|
|
||||||
}
|
|
||||||
|
|
||||||
//PhaseTimer
|
|
||||||
if (PhaseTimer <= diff)
|
|
||||||
{
|
|
||||||
//Switch to Eye Beam
|
|
||||||
instance->SetData(DATA_CTHUN_PHASE, PHASE_EYE_GREEN_BEAM);
|
|
||||||
|
|
||||||
BeamTimer = 3000;
|
|
||||||
ClawTentacleTimer = 12500; //4 per Eye beam phase (unsure if they spawn during Dark beam)
|
|
||||||
|
|
||||||
me->InterruptNonMeleeSpells(false);
|
|
||||||
|
|
||||||
//Remove Red coloration from c'thun
|
|
||||||
me->RemoveAurasDueToSpell(SPELL_RED_COLORATION);
|
|
||||||
me->RemoveAurasDueToSpell(SPELL_FREEZE_ANIM);
|
|
||||||
|
|
||||||
//set it back to aggressive
|
|
||||||
me->SetReactState(REACT_AGGRESSIVE);
|
|
||||||
|
|
||||||
//Eye Beam for 50 seconds
|
|
||||||
PhaseTimer = 50000;
|
|
||||||
}
|
|
||||||
else PhaseTimer -= diff;
|
|
||||||
|
|
||||||
break;
|
|
||||||
|
|
||||||
//Transition phase
|
//Transition phase
|
||||||
case PHASE_CTHUN_TRANSITION:
|
case PHASE_CTHUN_TRANSITION:
|
||||||
//Remove any target
|
//Remove any target
|
||||||
@@ -386,13 +325,16 @@ public:
|
|||||||
|
|
||||||
//Dead phase
|
//Dead phase
|
||||||
case PHASE_CTHUN_DONE:
|
case PHASE_CTHUN_DONE:
|
||||||
Creature* pPortal = me->FindNearestCreature(NPC_CTHUN_PORTAL, 10);
|
if (Creature* pPortal = me->FindNearestCreature(NPC_CTHUN_PORTAL, 10))
|
||||||
if (pPortal)
|
{
|
||||||
pPortal->DespawnOrUnsummon();
|
pPortal->DespawnOrUnsummon();
|
||||||
|
}
|
||||||
|
|
||||||
me->DespawnOrUnsummon();
|
me->DespawnOrUnsummon();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_scheduler.Update(diff);
|
||||||
}
|
}
|
||||||
|
|
||||||
void DamageTaken(Unit*, uint32& damage, DamageEffectType, SpellSchoolMask) override
|
void DamageTaken(Unit*, uint32& damage, DamageEffectType, SpellSchoolMask) override
|
||||||
@@ -437,6 +379,18 @@ public:
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
InstanceScript* instance;
|
||||||
|
|
||||||
|
//Dark Glare phase
|
||||||
|
uint32 DarkGlareTick;
|
||||||
|
float DarkGlareAngle;
|
||||||
|
bool ClockWise;
|
||||||
|
|
||||||
|
uint32 _eyeTentacleCounter;
|
||||||
|
TaskScheduler _scheduler;
|
||||||
|
SummonList _summons;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -522,15 +476,6 @@ public:
|
|||||||
DoZoneInCombat();
|
DoZoneInCombat();
|
||||||
}
|
}
|
||||||
|
|
||||||
void SpawnEyeTentacle(float x, float y)
|
|
||||||
{
|
|
||||||
Creature* Spawned;
|
|
||||||
Spawned = DoSpawnCreature(NPC_EYE_TENTACLE, x, y, 0, 0, TEMPSUMMON_CORPSE_DESPAWN, 500);
|
|
||||||
if (Spawned && Spawned->AI())
|
|
||||||
if (Unit* target = SelectRandomNotStomach())
|
|
||||||
Spawned->AI()->AttackStart(target);
|
|
||||||
}
|
|
||||||
|
|
||||||
Unit* SelectRandomNotStomach()
|
Unit* SelectRandomNotStomach()
|
||||||
{
|
{
|
||||||
if (Stomach_Map.empty())
|
if (Stomach_Map.empty())
|
||||||
@@ -607,16 +552,10 @@ public:
|
|||||||
// EyeTentacleTimer
|
// EyeTentacleTimer
|
||||||
if (EyeTentacleTimer <= diff)
|
if (EyeTentacleTimer <= diff)
|
||||||
{
|
{
|
||||||
//Spawn the 8 Eye Tentacles in the corret spots
|
if (Creature* eye = instance->GetCreature(DATA_EYE_OF_CTHUN))
|
||||||
SpawnEyeTentacle(0, 20); //south
|
{
|
||||||
SpawnEyeTentacle(10, 10); //south west
|
eye->AI()->DoAction(ACTION_SPAWN_EYE_TENTACLES);
|
||||||
SpawnEyeTentacle(20, 0); //west
|
}
|
||||||
SpawnEyeTentacle(10, -10); //north west
|
|
||||||
|
|
||||||
SpawnEyeTentacle(0, -20); //north
|
|
||||||
SpawnEyeTentacle(-10, -10); //north east
|
|
||||||
SpawnEyeTentacle(-20, 0); // east
|
|
||||||
SpawnEyeTentacle(-10, 10); // south east
|
|
||||||
|
|
||||||
EyeTentacleTimer = 30000; // every 30sec in phase 2
|
EyeTentacleTimer = 30000; // every 30sec in phase 2
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -30,6 +30,7 @@ EndScriptData */
|
|||||||
ObjectData const creatureData[] =
|
ObjectData const creatureData[] =
|
||||||
{
|
{
|
||||||
{ NPC_SARTURA, DATA_SARTURA },
|
{ NPC_SARTURA, DATA_SARTURA },
|
||||||
|
{ NPC_EYE_OF_CTHUN, DATA_EYE_OF_CTHUN }
|
||||||
};
|
};
|
||||||
|
|
||||||
class instance_temple_of_ahnqiraj : public InstanceMapScript
|
class instance_temple_of_ahnqiraj : public InstanceMapScript
|
||||||
|
|||||||
@@ -38,12 +38,14 @@ enum DataTypes
|
|||||||
DATA_BUG_TRIO_DEATH = 14,
|
DATA_BUG_TRIO_DEATH = 14,
|
||||||
DATA_CTHUN_PHASE = 20,
|
DATA_CTHUN_PHASE = 20,
|
||||||
DATA_VISCIDUS = 21,
|
DATA_VISCIDUS = 21,
|
||||||
DATA_SARTURA = 22
|
DATA_SARTURA = 22,
|
||||||
|
|
||||||
|
DATA_EYE_OF_CTHUN = 23
|
||||||
};
|
};
|
||||||
|
|
||||||
enum Creatures
|
enum Creatures
|
||||||
{
|
{
|
||||||
BOSS_EYE_OF_CTHUN = 15589,
|
NPC_EYE_OF_CTHUN = 15589,
|
||||||
NPC_CTHUN_PORTAL = 15896,
|
NPC_CTHUN_PORTAL = 15896,
|
||||||
NPC_CLAW_TENTACLE = 15725,
|
NPC_CLAW_TENTACLE = 15725,
|
||||||
NPC_EYE_TENTACLE = 15726,
|
NPC_EYE_TENTACLE = 15726,
|
||||||
|
|||||||
Reference in New Issue
Block a user