aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ossirian.cpp55
1 files changed, 33 insertions, 22 deletions
diff --git a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ossirian.cpp b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ossirian.cpp
index 7d1f866561f..f6c1f2f4e16 100644
--- a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ossirian.cpp
+++ b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ossirian.cpp
@@ -42,13 +42,19 @@ enum Texts
enum Spells
{
- SPELL_SILENCE = 25195,
+ SPELL_CURSE_OF_TONGUES = 25195,
SPELL_CYCLONE = 25189,
+ SPELL_SAND_STORM = 25160,
SPELL_STOMP = 25188,
SPELL_SUPREME = 25176,
SPELL_SUMMON = 20477,
- SPELL_SAND_STORM = 25160,
- SPELL_SUMMON_CRYSTAL = 25192
+ SPELL_SUMMON_CRYSTAL = 25192,
+
+ SPELL_WEAKNESS_FIRE = 25177,
+ SPELL_WEAKNESS_FROST = 25178,
+ SPELL_WEAKNESS_NATURE = 25180,
+ SPELL_WEAKNESS_ARCANE = 25181,
+ SPELL_WEAKNESS_SHADOW = 25183
};
enum Actions
@@ -63,28 +69,28 @@ enum Events
EVENT_STOMP = 3
};
-uint8 const NUM_CRYSTALS = 9;
+uint8 const NUM_CRYSTALS = 12;
-// You spin me right round, baby
-// right round like a record, baby
-// right round round round
Position CrystalCoordinates[NUM_CRYSTALS] =
{
- { -9394.230469f, 1951.808594f, 85.97733f, 0.0f },
- { -9357.931641f, 1930.596802f, 85.556198f, 0.0f },
- { -9383.113281f, 2011.042725f, 85.556389f, 0.0f },
- { -9243.36f, 1979.04f, 85.556f, 0.0f },
- { -9281.68f, 1886.66f, 85.5558f, 0.0f },
- { -9241.8f, 1806.39f, 85.5557f, 0.0f },
- { -9366.78f, 1781.76f, 85.5561f, 0.0f },
- { -9430.37f, 1786.86f, 85.557f, 0.0f },
- { -9406.73f, 1863.13f, 85.5558f, 0.0f }
+ { -9188.4404296875f, 1940.2099609375f, 85.6390991210937f, 3.17650008201599f },
+ { -9244.41015625f, 1808.97998046875f, 85.6390991210937f, 5.63741016387939f },
+ { -9248.41015625f, 1974.82995605469f, 85.6390991210937f, 5.89920997619629f },
+ { -9282.080078125f, 1887.33996582031f, 85.6390991210937f, 2.00712990760803f },
+ { -9299.73046875f, 1748.44995117187f, 85.6390991210937f, 1.44861996173859f },
+ { -9357.8603515625f, 1929.07995605469f, 85.6390991210937f, 1.06465005874634f },
+ { -9367.169921875f, 1780.89001464844f, 85.6390991210937f, 1.90241003036499f },
+ { -9383.2900390625f, 2012.68005371094f, 85.6511001586914f, 2.93214988708496f },
+ { -9406.099609375f, 1862.38000488281f, 85.6390991210937f, 6.2308201789856f },
+ { -9407.7197265625f, 1960.2099609375f, 85.6390991210937f, 1.11700999736786f },
+ { -9432.400390625f, 1782.53002929687f, 85.6390991210937f, 5.86430978775024f },
+ { -9506.1904296875f, 1865.56994628906f, 85.6390991210937f, 4.27606010437012f }
};
float RoomRadius = 165.0f;
uint8 const NUM_TORNADOS = 5; /// @todo This number is completly random!
uint8 const NUM_WEAKNESS = 5;
-uint32 const SpellWeakness[NUM_WEAKNESS] = { 25177, 25178, 25180, 25181, 25183 };
+uint32 const SpellWeakness[NUM_WEAKNESS] = { SPELL_WEAKNESS_FIRE, SPELL_WEAKNESS_FROST, SPELL_WEAKNESS_NATURE, SPELL_WEAKNESS_ARCANE, SPELL_WEAKNESS_SHADOW };
Position const RoomCenter = { -9343.041992f, 1923.278198f, 85.555984f, 0.0 };
class boss_ossirian : public CreatureScript
@@ -125,6 +131,9 @@ class boss_ossirian : public CreatureScript
if (spell->Id == SpellWeakness[i])
{
me->RemoveAurasDueToSpell(SPELL_SUPREME);
+ // Despawn used crystal
+ if (GameObject* crystal = GetClosestGameObjectWithEntry(caster, GO_OSSIRIAN_CRYSTAL, 5.0f))
+ crystal->Delete();
if (Creature* creatureCaster = caster->ToCreature())
creatureCaster->DespawnOrUnsummon();
SpawnNextCrystal();
@@ -148,7 +157,7 @@ class boss_ossirian : public CreatureScript
events.ScheduleEvent(EVENT_CYCLONE, 20s);
events.ScheduleEvent(EVENT_STOMP, 30s);
- DoCast(me, SPELL_SUPREME);
+ DoCastSelf(SPELL_SUPREME);
Talk(SAY_AGGRO);
Map* map = me->GetMap();
@@ -198,7 +207,7 @@ class boss_ossirian : public CreatureScript
if (Creature* Trigger = me->SummonCreature(NPC_OSSIRIAN_TRIGGER, CrystalCoordinates[CrystalIterator]))
{
TriggerGUID = Trigger->GetGUID();
- if (GameObject* Crystal = Trigger->SummonGameObject(GO_OSSIRIAN_CRYSTAL, CrystalCoordinates[CrystalIterator], QuaternionData(), uint32(-1)))
+ if (GameObject* Crystal = Trigger->SummonGameObject(GO_OSSIRIAN_CRYSTAL, CrystalCoordinates[CrystalIterator], QuaternionData(), uint32(-1), GO_SUMMON_TIMED_DESPAWN))
{
CrystalGUID = Crystal->GetGUID();
++CrystalIterator;
@@ -246,7 +255,7 @@ class boss_ossirian : public CreatureScript
if (ApplySupreme)
{
- DoCast(me, SPELL_SUPREME);
+ DoCastSelf(SPELL_SUPREME);
Talk(SAY_SUPREME);
}
@@ -255,7 +264,7 @@ class boss_ossirian : public CreatureScript
switch (eventId)
{
case EVENT_SILENCE:
- DoCast(me, SPELL_SILENCE);
+ DoCastAOE(SPELL_CURSE_OF_TONGUES);
events.ScheduleEvent(EVENT_SILENCE, 20s, 30s);
break;
case EVENT_CYCLONE:
@@ -263,7 +272,7 @@ class boss_ossirian : public CreatureScript
events.ScheduleEvent(EVENT_CYCLONE, 20s);
break;
case EVENT_STOMP:
- DoCast(me, SPELL_STOMP);
+ DoCastSelf(SPELL_STOMP);
events.ScheduleEvent(EVENT_STOMP, 30s);
break;
default:
@@ -294,6 +303,8 @@ class go_ossirian_crystal : public GameObjectScript
bool GossipHello(Player* player) override
{
+ // Crystal animation on use
+ me->SetLootState(GO_ACTIVATED);
Creature* ossirian = player->FindNearestCreature(NPC_OSSIRIAN, 30.0f);
if (!ossirian || instance->GetBossState(DATA_OSSIRIAN) != IN_PROGRESS)
return false;