Merge pull request #11359 from MitchesD/obsidian_sanctum
Scripts/ObsidianSanctum: added creature_formations for surrounding creatures and some clean up
This commit is contained in:
@@ -0,0 +1,25 @@
|
||||
DELETE FROM `creature_formations` WHERE `leaderGUID` = 126396;
|
||||
INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI`, `point_1`, `point_2`) VALUES
|
||||
(126396, 126396, 0, 0, 1, 0, 0),
|
||||
(126396, 126399, 0, 0, 1, 0, 0),
|
||||
(126396, 126403, 0, 0, 1, 0, 0),
|
||||
(126396, 126411, 0, 0, 1, 0, 0),
|
||||
(126396, 126404, 0, 0, 1, 0, 0),
|
||||
(126396, 126410, 0, 0, 1, 0, 0),
|
||||
(126396, 126398, 0, 0, 1, 0, 0),
|
||||
(126396, 126409, 0, 0, 1, 0, 0),
|
||||
(126396, 126402, 0, 0, 1, 0, 0),
|
||||
(126396, 126418, 0, 0, 1, 0, 0),
|
||||
(126396, 126419, 0, 0, 1, 0, 0),
|
||||
(126396, 126397, 0, 0, 1, 0, 0),
|
||||
(126396, 126401, 0, 0, 1, 0, 0),
|
||||
(126396, 126407, 0, 0, 1, 0, 0),
|
||||
(126396, 126408, 0, 0, 1, 0, 0),
|
||||
(126396, 126420, 0, 0, 1, 0, 0),
|
||||
(126396, 126421, 0, 0, 1, 0, 0),
|
||||
(126396, 126412, 0, 0, 1, 0, 0),
|
||||
(126396, 126406, 0, 0, 1, 0, 0),
|
||||
(126396, 126400, 0, 0, 1, 0, 0),
|
||||
(126396, 126405, 0, 0, 1, 0, 0),
|
||||
(126396, 126416, 0, 0, 1, 0, 0),
|
||||
(126396, 126417, 0, 0, 1, 0, 0);
|
||||
@@ -37,23 +37,20 @@ enum Noth
|
||||
NPC_GUARDIAN = 16981
|
||||
};
|
||||
|
||||
#define SPELL_BLINK RAND(29208, 29209, 29210, 29211)
|
||||
#define SPELL_BLINK RAND(29208, 29209, 29210, 29211)
|
||||
|
||||
// Teleport position of Noth on his balcony
|
||||
#define TELE_X 2631.370f
|
||||
#define TELE_Y -3529.680f
|
||||
#define TELE_Z 274.040f
|
||||
#define TELE_O 6.277f
|
||||
Position const Teleport = { 2631.370f, -3529.680f, 274.040f, 6.277f };
|
||||
|
||||
#define MAX_SUMMON_POS 5
|
||||
|
||||
const float SummonPos[MAX_SUMMON_POS][4] =
|
||||
Position const SummonPos[MAX_SUMMON_POS] =
|
||||
{
|
||||
{2728.12f, -3544.43f, 261.91f, 6.04f},
|
||||
{2729.05f, -3544.47f, 261.91f, 5.58f},
|
||||
{2728.24f, -3465.08f, 264.20f, 3.56f},
|
||||
{2704.11f, -3456.81f, 265.53f, 4.51f},
|
||||
{2663.56f, -3464.43f, 262.66f, 5.20f},
|
||||
{ 2728.12f, -3544.43f, 261.91f, 6.04f },
|
||||
{ 2729.05f, -3544.47f, 261.91f, 5.58f },
|
||||
{ 2728.24f, -3465.08f, 264.20f, 3.56f },
|
||||
{ 2704.11f, -3456.81f, 265.53f, 4.51f },
|
||||
{ 2663.56f, -3464.43f, 262.66f, 5.20f }
|
||||
};
|
||||
|
||||
enum Events
|
||||
@@ -65,7 +62,7 @@ enum Events
|
||||
EVENT_WARRIOR,
|
||||
EVENT_BALCONY,
|
||||
EVENT_WAVE,
|
||||
EVENT_GROUND,
|
||||
EVENT_GROUND
|
||||
};
|
||||
|
||||
class boss_noth : public CreatureScript
|
||||
@@ -73,17 +70,10 @@ class boss_noth : public CreatureScript
|
||||
public:
|
||||
boss_noth() : CreatureScript("boss_noth") { }
|
||||
|
||||
CreatureAI* GetAI(Creature* creature) const OVERRIDE
|
||||
{
|
||||
return new boss_nothAI(creature);
|
||||
}
|
||||
|
||||
struct boss_nothAI : public BossAI
|
||||
{
|
||||
boss_nothAI(Creature* creature) : BossAI(creature, BOSS_NOTH) { }
|
||||
|
||||
uint32 waveCount, balconyCount;
|
||||
|
||||
void Reset() OVERRIDE
|
||||
{
|
||||
me->SetReactState(REACT_AGGRESSIVE);
|
||||
@@ -104,6 +94,7 @@ public:
|
||||
me->SetReactState(REACT_AGGRESSIVE);
|
||||
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
|
||||
DoZoneInCombat();
|
||||
|
||||
if (me->getThreatManager().isThreatListEmpty())
|
||||
EnterEvadeMode();
|
||||
else
|
||||
@@ -138,11 +129,7 @@ public:
|
||||
void SummonUndead(uint32 entry, uint32 num)
|
||||
{
|
||||
for (uint32 i = 0; i < num; ++i)
|
||||
{
|
||||
uint32 pos = rand()%MAX_SUMMON_POS;
|
||||
me->SummonCreature(entry, SummonPos[pos][0], SummonPos[pos][1], SummonPos[pos][2],
|
||||
SummonPos[pos][3], TEMPSUMMON_CORPSE_DESPAWN, 60000);
|
||||
}
|
||||
me->SummonCreature(entry, SummonPos[rand()%MAX_SUMMON_POS], TEMPSUMMON_CORPSE_DESPAWN, 60000);
|
||||
}
|
||||
|
||||
void UpdateAI(uint32 diff) OVERRIDE
|
||||
@@ -152,6 +139,9 @@ public:
|
||||
|
||||
events.Update(diff);
|
||||
|
||||
if (me->HasUnitState(UNIT_STATE_CASTING))
|
||||
return;
|
||||
|
||||
while (uint32 eventId = events.ExecuteEvent())
|
||||
{
|
||||
switch (eventId)
|
||||
@@ -176,7 +166,7 @@ public:
|
||||
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
|
||||
me->AttackStop();
|
||||
me->RemoveAllAuras();
|
||||
me->NearTeleportTo(TELE_X, TELE_Y, TELE_Z, TELE_O);
|
||||
me->NearTeleportTo(Teleport.GetPositionX(), Teleport.GetPositionY(), Teleport.GetPositionZ(), Teleport.GetOrientation());
|
||||
events.Reset();
|
||||
events.ScheduleEvent(EVENT_WAVE, urand(2000, 5000));
|
||||
waveCount = 0;
|
||||
@@ -185,12 +175,20 @@ public:
|
||||
Talk(SAY_SUMMON);
|
||||
switch (balconyCount)
|
||||
{
|
||||
case 0: SummonUndead(NPC_CHAMPION, RAID_MODE(2, 4)); break;
|
||||
case 1: SummonUndead(NPC_CHAMPION, RAID_MODE(1, 2));
|
||||
SummonUndead(NPC_GUARDIAN, RAID_MODE(1, 2)); break;
|
||||
case 2: SummonUndead(NPC_GUARDIAN, RAID_MODE(2, 4)); break;
|
||||
default:SummonUndead(NPC_CHAMPION, RAID_MODE(5, 10));
|
||||
SummonUndead(NPC_GUARDIAN, RAID_MODE(5, 10));break;
|
||||
case 0:
|
||||
SummonUndead(NPC_CHAMPION, RAID_MODE(2, 4));
|
||||
break;
|
||||
case 1:
|
||||
SummonUndead(NPC_CHAMPION, RAID_MODE(1, 2));
|
||||
SummonUndead(NPC_GUARDIAN, RAID_MODE(1, 2));
|
||||
break;
|
||||
case 2:
|
||||
SummonUndead(NPC_GUARDIAN, RAID_MODE(2, 4));
|
||||
break;
|
||||
default:
|
||||
SummonUndead(NPC_CHAMPION, RAID_MODE(5, 10));
|
||||
SummonUndead(NPC_GUARDIAN, RAID_MODE(5, 10));
|
||||
break;
|
||||
}
|
||||
++waveCount;
|
||||
events.ScheduleEvent(waveCount < 2 ? EVENT_WAVE : EVENT_GROUND, urand(30000, 45000));
|
||||
@@ -211,8 +209,16 @@ public:
|
||||
if (me->HasReactState(REACT_AGGRESSIVE))
|
||||
DoMeleeAttackIfReady();
|
||||
}
|
||||
|
||||
private:
|
||||
uint32 waveCount;
|
||||
uint32 balconyCount;
|
||||
};
|
||||
|
||||
CreatureAI* GetAI(Creature* creature) const OVERRIDE
|
||||
{
|
||||
return new boss_nothAI(creature);
|
||||
}
|
||||
};
|
||||
|
||||
void AddSC_boss_noth()
|
||||
|
||||
Reference in New Issue
Block a user