Scripts/Ulduar: Cleanup in Flame Leviathan.

This commit is contained in:
Supabad
2011-07-03 21:16:52 +02:00
parent 5df24441d1
commit 1a0506ca72
4 changed files with 397 additions and 385 deletions
@@ -31,7 +31,6 @@
#include "ObjectMgr.h"
#include "ulduar.h"
enum Spells
{
SPELL_PURSUED = 62374,
@@ -88,7 +87,7 @@ enum Creatures
NPC_MIMIRON_TARGET_BEACON = 33369,
NPC_HODIR_TARGET_BEACON = 33108,
NPC_FREYA_TARGET_BEACON = 33366,
NPC_LOREKEEPER = 33686, //Hard mode starter
NPC_LOREKEEPER = 33686, // Hard mode starter
NPC_BRANZ_BRONZBEARD = 33579,
NPC_DELORAH = 33701,
NPC_ULDUAR_GAUNTLET_GENERATOR = 33571, // Trigger tied to towers
@@ -137,6 +136,9 @@ enum Vehicles
#define EMOTE_REPAIR "Automatic repair sequence initiated."
#define DATA_SHUTOUT 29112912 // 2911, 2912 are achievement IDs
#define DATA_UNBROKEN 29052906 // 2905, 2906 are achievement IDs
#define DATA_ORBIT_ACHIEVEMENTS 1
#define VEHICLE_SPAWNS 5
#define FREYA_SPAWNS 4
enum Yells
{
@@ -158,12 +160,14 @@ enum Yells
SAY_OVERLOAD_3 = -1603075,
};
enum actions
enum MiscellanousData
{
ACTION_TOWER_OF_STORM_DESTROYED = 1,
ACTION_TOWER_OF_FROST_DESTROYED = 2,
ACTION_TOWER_OF_FLAMES_DESTROYED = 3,
ACTION_TOWER_OF_LIFE_DESTROYED = 4,
// Other actions are in Ulduar.h
ACTION_START_HARD_MODE = 5,
ACTION_SPAWN_VEHICLES = 6,
// Amount of seats depending on Raid mode
TWO_SEATS = 2,
FOUR_SEATS = 4,
};
Position const Center[]=
@@ -171,7 +175,12 @@ Position const Center[]=
{354.8771f, -12.90240f, 409.803650f, 0.0f},
};
Position const PosSiege[5] =
Position const InfernoStart[]=
{
{390.93f, -13.91f, 409.81f, 0.0f},
};
Position const PosSiege[VEHICLE_SPAWNS] =
{
{-814.59f, -64.54f, 429.92f, 5.969f},
{-784.37f, -33.31f, 429.92f, 5.096f},
@@ -180,7 +189,7 @@ Position const PosSiege[5] =
{-812.83f, -77.71f, 429.92f, 0.046f},
};
Position const PosChopper[5] =
Position const PosChopper[VEHICLE_SPAWNS] =
{
{-717.83f, -106.56f, 430.02f, 0.122f},
{-717.83f, -114.23f, 430.44f, 0.122f},
@@ -189,7 +198,7 @@ Position const PosChopper[5] =
{-718.45f, -123.58f, 430.41f, 0.085f},
};
Position const PosDemolisher[5] =
Position const PosDemolisher[VEHICLE_SPAWNS] =
{
{-724.12f, -176.64f, 430.03f, 2.543f},
{-766.70f, -225.03f, 430.50f, 1.710f},
@@ -198,7 +207,13 @@ Position const PosDemolisher[5] =
{-798.01f, -227.24f, 429.84f, 1.446f},
};
#define DATA_ORBIT_ACHIEVEMENTS 1
Position const FreyaBeacons[FREYA_SPAWNS] =
{
{377.02f, -119.10f, 409.81f, 0.0f},
{185.62f, -119.10f, 409.81f, 0.0f},
{377.02f, 54.78f, 409.81f, 0.0f},
{185.62f, 54.78f, 409.81f, 0.0f},
};
class boss_flame_leviathan : public CreatureScript
{
@@ -244,6 +259,7 @@ class boss_flame_leviathan : public CreatureScript
void Reset()
{
_Reset();
//resets shutdown counter to 0. 2 or 4 depending on raid mode
Shutdown = 0;
me->SetReactState(REACT_DEFENSIVE);
}
@@ -298,7 +314,8 @@ class boss_flame_leviathan : public CreatureScript
DoScriptText(SAY_AGGRO, me);
}
// TODO: effect 0 and effect 1 may be on different target
//TODO: effect 0 and effect 1 may be on different target
//TODO: Move to spellscript
void SpellHitTarget(Unit* target, SpellEntry const* spell)
{
if (spell->Id == SPELL_PURSUED)
@@ -354,7 +371,7 @@ class boss_flame_leviathan : public CreatureScript
events.Update(diff);
if (Shutdown == RAID_MODE(2, 4))
if (Shutdown == RAID_MODE(TWO_SEATS, FOUR_SEATS))
{
Shutdown = 0;
events.ScheduleEvent(EVENT_SHUTDOWN, 4000);
@@ -381,25 +398,22 @@ class boss_flame_leviathan : public CreatureScript
if (me->HasUnitState(UNIT_STAT_CASTING))
return;
uint32 eventId = events.GetEvent();
switch(eventId)
while (uint32 eventId = events.ExecuteEvent())
{
switch (eventId)
{
case 0:
break; // this is a must
case EVENT_PURSUE:
DoScriptText(RAND(SAY_TARGET_1, SAY_TARGET_2, SAY_TARGET_3), me);
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 75, true))
{
me->AddAura(SPELL_PURSUED, target);
me->CastSpell(target, SPELL_PURSUED, true);
me->MonsterTextEmote(EMOTE_PURSUE, target->GetGUID(), true);
}
events.RepeatEvent(30*IN_MILLISECONDS);
break;
case EVENT_MISSILE:
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM))
DoCast(target, SPELL_MISSILE_BARRAGE);
events.RepeatEvent(1500);
DoCast(me, SPELL_MISSILE_BARRAGE, true);
events.RepeatEvent(2*IN_MILLISECONDS);
break;
case EVENT_VENT:
DoCastAOE(SPELL_FLAME_VENTS);
@@ -418,7 +432,7 @@ class boss_flame_leviathan : public CreatureScript
case EVENT_SHUTDOWN:
DoScriptText(RAND(SAY_OVERLOAD_1, SAY_OVERLOAD_2, SAY_OVERLOAD_3), me);
me->MonsterTextEmote(EMOTE_OVERLOAD, 0, true);
me->AddAura(SPELL_SYSTEMS_SHUTDOWN, me);
me->CastSpell(me, SPELL_SYSTEMS_SHUTDOWN, true);
me->RemoveAurasDueToSpell(SPELL_GATHERING_SPEED);
events.ScheduleEvent(EVENT_REPAIR, 4000);
events.CancelEvent(EVENT_SHUTDOWN);
@@ -439,7 +453,7 @@ class boss_flame_leviathan : public CreatureScript
events.CancelEvent(EVENT_THORIM_S_HAMMER);
break;
case EVENT_MIMIRON_S_INFERNO: // Tower of Flames
me->SummonCreature(NPC_MIMIRON_BEACON, 390.93f, -13.91f, 409.81f);
me->SummonCreature(NPC_MIMIRON_BEACON, InfernoStart->GetPositionX(), InfernoStart->GetPositionY(), InfernoStart->GetPositionZ());
DoScriptText(SAY_TOWER_FLAME, me);
events.CancelEvent(EVENT_MIMIRON_S_INFERNO);
break;
@@ -454,61 +468,41 @@ class boss_flame_leviathan : public CreatureScript
break;
case EVENT_FREYA_S_WARD: // Tower of Nature
DoScriptText(SAY_TOWER_NATURE, me);
StartFreyaEvent();
for (int32 i = 0; i < 4; ++i)
me->SummonCreature(NPC_FREYA_BEACON, FreyaBeacons[i]);
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM))
DoCast(target, SPELL_FREYA_S_WARD);
events.CancelEvent(EVENT_FREYA_S_WARD);
break;
default:
events.PopEvent();
break;
}
}
//TODO: Fix this spell, gets applied on players who are on leviathan should be excluded?
/*if (me->IsWithinMeleeRange(me->getVictim())) //bugged spell casts on units that are boarded on leviathan
DoSpellAttackIfReady(SPELL_BATTERING_RAM);*/
DoMeleeAttackIfReady();
}
void StartFreyaEvent()//summon these 4 on each corner wich wil spawn additional hostile mobs
{
me->SummonCreature(NPC_FREYA_BEACON, 377.02f, -119.10f, 409.81f);
me->SummonCreature(NPC_FREYA_BEACON, 377.02f, 54.78f, 409.81f);
me->SummonCreature(NPC_FREYA_BEACON, 185.62f, 54.78f, 409.81f);
me->SummonCreature(NPC_FREYA_BEACON, 185.62f, -119.10f, 409.81f);
}
void DoAction(int32 const action)
{
// Start encounter
if (action == 10)
if (action && action <= 4) // Tower destruction, debuff leviathan loot and reduce active tower count
{
if (!me->isDead())
{
me->SetHomePosition(Center->GetPositionX(), Center->GetPositionY(), Center->GetPositionZ(), 0);
me->GetMotionMaster()->MoveCharge(Center->GetPositionX(), Center->GetPositionY(), Center->GetPositionZ()); //position center
me->SetReactState(REACT_AGGRESSIVE);
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_STUNNED);
return;
}
}
if (action && action <= 4) // Tower destruction, debuff leviathan loot and reduce active tower
{
if (me->HasLootMode(31) && ActiveTowersCount == 4)
if (me->HasLootMode(LOOT_MODE_DEFAULT | LOOT_MODE_HARD_MODE_1 | LOOT_MODE_HARD_MODE_2 | LOOT_MODE_HARD_MODE_3 | LOOT_MODE_HARD_MODE_4) && ActiveTowersCount == 4)
{
me->RemoveLootMode(LOOT_MODE_HARD_MODE_4);
--ActiveTowersCount;
}
if (me->HasLootMode(15) && ActiveTowersCount == 3)
if (me->HasLootMode(LOOT_MODE_DEFAULT | LOOT_MODE_HARD_MODE_1 | LOOT_MODE_HARD_MODE_2 | LOOT_MODE_HARD_MODE_3) && ActiveTowersCount == 3)
{
me->RemoveLootMode(LOOT_MODE_HARD_MODE_3);
--ActiveTowersCount;
}
if (me->HasLootMode(7) && ActiveTowersCount == 2)
if (me->HasLootMode(LOOT_MODE_DEFAULT | LOOT_MODE_HARD_MODE_1 | LOOT_MODE_HARD_MODE_2) && ActiveTowersCount == 2)
{
me->RemoveLootMode(LOOT_MODE_HARD_MODE_2);
--ActiveTowersCount;
}
if (me->HasLootMode(3) && ActiveTowersCount == 1)
if (me->HasLootMode(LOOT_MODE_DEFAULT | LOOT_MODE_HARD_MODE_1) && ActiveTowersCount == 1)
{
me->RemoveLootMode(LOOT_MODE_HARD_MODE_1);
--ActiveTowersCount;
@@ -517,25 +511,35 @@ class boss_flame_leviathan : public CreatureScript
switch (action)
{
case 0: // Activate hard-mode setting counter to 4 towers, enable all towers apply buffs on levithian
case ACTION_TOWER_OF_STORM_DESTROYED:
towerOfStorms = false;
break;
case ACTION_TOWER_OF_FROST_DESTROYED:
towerOfFrost = false;
break;
case ACTION_TOWER_OF_FLAMES_DESTROYED:
towerOfFlames = false;
break;
case ACTION_TOWER_OF_LIFE_DESTROYED:
towerOfLife = false;
break;
case ACTION_START_HARD_MODE: // Activate hard-mode enable all towers, apply buffs on leviathan
ActiveTowers = true;
towerOfStorms = true;
towerOfLife = true;
towerOfFlames = true;
towerOfFrost = true;
me->SetLootMode(31);
me->SetLootMode(LOOT_MODE_DEFAULT | LOOT_MODE_HARD_MODE_1 | LOOT_MODE_HARD_MODE_2 | LOOT_MODE_HARD_MODE_3 | LOOT_MODE_HARD_MODE_4);
break;
case ACTION_TOWER_OF_STORM_DESTROYED: // Tower of Storms destroyed
towerOfStorms = false;
break;
case ACTION_TOWER_OF_FROST_DESTROYED: // Tower of Frost destroyed
towerOfFrost = false;
break;
case ACTION_TOWER_OF_FLAMES_DESTROYED: // Tower of Flames destroyed
towerOfFlames = false;
break;
case ACTION_TOWER_OF_LIFE_DESTROYED: // Tower of Nature destroyed
towerOfLife = false;
case ACTION_MOVE_TO_CENTER_POSITION: // Triggered by 2 Collossus near door
if (!me->isDead())
{
me->SetHomePosition(Center->GetPositionX(), Center->GetPositionY(), Center->GetPositionZ(), 0);
me->GetMotionMaster()->MoveCharge(Center->GetPositionX(), Center->GetPositionY(), Center->GetPositionZ()); //position center
me->SetReactState(REACT_AGGRESSIVE);
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_STUNNED);
return;
}
break;
default:
break;
@@ -628,7 +632,7 @@ class boss_flame_leviathan_defense_cannon : public CreatureScript
void Reset ()
{
NapalmTimer = 5000;
NapalmTimer = 5*IN_MILLISECONDS;
DoCast(me, AURA_STEALTH_DETECTION);
}
@@ -833,7 +837,7 @@ class npc_pool_of_tar : public CreatureScript
{
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
me->SetReactState(REACT_PASSIVE);
me->AddAura(SPELL_TAR_PASSIVE, me);
me->CastSpell(me, SPELL_TAR_PASSIVE, true);
}
void DamageTaken(Unit* /*who*/, uint32& damage)
@@ -873,7 +877,7 @@ class npc_colossus : public CreatureScript
void JustDied(Unit* /*Who*/)
{
if (me->GetHomePosition().IsInDist(Center, 50.f))
instance->SetData(TYPE_COLOSSUS, instance->GetData(TYPE_COLOSSUS)+1);
instance->SetData(DATA_COLOSSUS, instance->GetData(DATA_COLOSSUS)+1);
}
void UpdateAI(uint32 const /*diff*/)
@@ -901,7 +905,7 @@ class npc_thorims_hammer : public CreatureScript
npc_thorims_hammerAI(Creature* creature) : ScriptedAI(creature)
{
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
me->AddAura(AURA_DUMMY_BLUE, me);
me->CastSpell(me, AURA_DUMMY_BLUE, true);
}
void MoveInLineOfSight(Unit* who)
@@ -916,7 +920,7 @@ class npc_thorims_hammer : public CreatureScript
void UpdateAI(uint32 const /*diff*/)
{
if (!me->HasAura(AURA_DUMMY_BLUE))
me->AddAura(AURA_DUMMY_BLUE, me);
me->CastSpell(me, AURA_DUMMY_BLUE, true);
UpdateVictim();
}
@@ -943,7 +947,7 @@ public:
npc_mimirons_infernoAI(Creature* creature) : npc_escortAI(creature)
{
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
me->AddAura(AURA_DUMMY_YELLOW, me);
me->CastSpell(me, AURA_DUMMY_YELLOW, true);
me->SetReactState(REACT_PASSIVE);
}
@@ -978,7 +982,7 @@ public:
infernoTimer -= diff;
if (!me->HasAura(AURA_DUMMY_YELLOW))
me->AddAura(AURA_DUMMY_YELLOW, me);
me->CastSpell(me, AURA_DUMMY_YELLOW, true);
}
}
};
@@ -995,7 +999,7 @@ class npc_hodirs_fury : public CreatureScript
npc_hodirs_furyAI(Creature* creature) : ScriptedAI(creature)
{
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
me->AddAura(AURA_DUMMY_GREEN, me);
me->CastSpell(me, AURA_DUMMY_GREEN, true);
}
void MoveInLineOfSight(Unit* who)
@@ -1010,7 +1014,7 @@ class npc_hodirs_fury : public CreatureScript
void UpdateAI(uint32 const /*diff*/)
{
if (!me->HasAura(AURA_DUMMY_GREEN))
me->AddAura(AURA_DUMMY_GREEN, me);
me->CastSpell(me, AURA_DUMMY_GREEN, true);
UpdateVictim();
}
@@ -1031,7 +1035,7 @@ class npc_freyas_ward : public CreatureScript
{
npc_freyas_wardAI(Creature* creature) : ScriptedAI(creature)
{
me->AddAura(AURA_DUMMY_GREEN, me);
me->CastSpell(me, AURA_DUMMY_GREEN, true);
}
uint32 summonTimer;
@@ -1053,7 +1057,7 @@ class npc_freyas_ward : public CreatureScript
summonTimer -= diff;
if (!me->HasAura(AURA_DUMMY_GREEN))
me->AddAura(AURA_DUMMY_GREEN, me);
me->CastSpell(me, AURA_DUMMY_GREEN, true);
UpdateVictim();
}
@@ -1110,6 +1114,7 @@ class npc_freya_ward_summon : public CreatureScript
//npc lore keeper
#define GOSSIP_ITEM_1 "Activate secondary defensive systems"
#define GOSSIP_ITEM_2 "Confirmed"
class npc_lorekeeper : public CreatureScript
{
public:
@@ -1124,7 +1129,7 @@ class npc_lorekeeper : public CreatureScript
void DoAction(int32 const action)
{
// Start encounter
if (action == 0)
if (action == ACTION_SPAWN_VEHICLES)
{
for (int32 i = 0; i < RAID_MODE(2, 5); ++i)
DoSummon(VEHICLE_SIEGE, PosSiege[i], 3000, TEMPSUMMON_CORPSE_TIMED_DESPAWN);
@@ -1162,9 +1167,9 @@ class npc_lorekeeper : public CreatureScript
if (Creature* leviathan = instance->instance->GetCreature(instance->GetData64(BOSS_LEVIATHAN)))
{
CAST_AI(boss_flame_leviathan::boss_flame_leviathanAI, (leviathan->AI()))->DoAction(0); //enable hard mode activating the 4 additional events spawning additional vehicles
leviathan->AI()->DoAction(ACTION_START_HARD_MODE);
creature->SetVisible(false);
creature->AI()->DoAction(0); // spawn the vehicles
creature->AI()->DoAction(ACTION_SPAWN_VEHICLES); // spawn the vehicles
if (Creature* Delorah = creature->FindNearestCreature(NPC_DELORAH, 1000, true))
{
if (Creature* Branz = creature->FindNearestCreature(NPC_BRANZ_BRONZBEARD, 1000, true))
@@ -390,23 +390,20 @@ class instance_ulduar : public InstanceMapScript
switch (eventId)
{
case EVENT_TOWER_OF_STORM_DESTROYED:
FlameLeviathan->AI()->DoAction(1);
FlameLeviathan->AI()->DoAction(ACTION_TOWER_OF_STORM_DESTROYED);
break;
case EVENT_TOWER_OF_FROST_DESTROYED:
FlameLeviathan->AI()->DoAction(2);
FlameLeviathan->AI()->DoAction(ACTION_TOWER_OF_FROST_DESTROYED);
break;
case EVENT_TOWER_OF_FLAMES_DESTROYED:
FlameLeviathan->AI()->DoAction(3);
FlameLeviathan->AI()->DoAction(ACTION_TOWER_OF_FLAMES_DESTROYED);
break;
case EVENT_TOWER_OF_LIFE_DESTROYED:
FlameLeviathan->AI()->DoAction(4);
FlameLeviathan->AI()->DoAction(ACTION_TOWER_OF_LIFE_DESTROYED);
break;
}
}
void ProcessEvent(Unit* /*unit*/, uint32 /*eventId*/)
{
}
bool SetBossState(uint32 type, EncounterState state)
{
@@ -475,12 +472,12 @@ class instance_ulduar : public InstanceMapScript
{
switch (type)
{
case TYPE_COLOSSUS:
Encounter[TYPE_COLOSSUS] = data;
case DATA_COLOSSUS:
Encounter[DATA_COLOSSUS] = data;
if (data == 2)
{
if (Creature* Leviathan = instance->GetCreature(LeviathanGUID))
Leviathan->AI()->DoAction(10);
Leviathan->AI()->DoAction(ACTION_MOVE_TO_CENTER_POSITION);
if (GameObject* gameObject = instance->GetGameObject(LeviathanGateGUID))
gameObject->SetGoState(GO_STATE_ACTIVE_ALTERNATIVE);
SaveToDB();
@@ -591,7 +588,7 @@ class instance_ulduar : public InstanceMapScript
{
switch (type)
{
case TYPE_COLOSSUS:
case DATA_COLOSSUS:
return Encounter[type];
case DATA_HODIR_RARE_CACHE:
return HodirRareCacheData;
@@ -607,7 +604,7 @@ class instance_ulduar : public InstanceMapScript
OUT_SAVE_INST_DATA;
std::ostringstream saveStream;
saveStream << "U U " << GetBossSaveData() << GetData(TYPE_COLOSSUS);
saveStream << "U U " << GetBossSaveData() << GetData(DATA_COLOSSUS);
OUT_SAVE_INST_DATA_COMPLETE;
return saveStream.str();
@@ -637,7 +634,7 @@ class instance_ulduar : public InstanceMapScript
if (tmpState == IN_PROGRESS || tmpState > SPECIAL)
tmpState = NOT_STARTED;
if (i == TYPE_COLOSSUS)
if (i == DATA_COLOSSUS)
SetData(i, tmpState);
else
SetBossState(i, EncounterState(tmpState));
@@ -45,24 +45,6 @@ enum UlduarBosses
BOSS_VEZAX = 17,
BOSS_YOGGSARON = 18,
BOSS_ALGALON = 19,
TYPE_COLOSSUS = 20,
// Razorscale
DATA_EXPEDITION_COMMANDER,
DATA_RAZORSCALE_CONTROL,
// XT-002
DATA_TOY_PILE_0,
DATA_TOY_PILE_1,
DATA_TOY_PILE_2,
DATA_TOY_PILE_3,
// Kologarn
DATA_LEFT_ARM,
DATA_RIGHT_ARM,
// Hodir
DATA_HODIR_RARE_CACHE,
};
enum UlduarNPCs
@@ -161,12 +143,17 @@ enum UlduarGameObjects
GO_ARCHIVUM_DOOR = 194556,
};
enum UlduarTowerEvents
enum LeviathanData
{
EVENT_TOWER_OF_STORM_DESTROYED = 21031,
EVENT_TOWER_OF_FROST_DESTROYED = 21032,
EVENT_TOWER_OF_FLAMES_DESTROYED = 21033,
EVENT_TOWER_OF_LIFE_DESTROYED = 21030,
ACTION_TOWER_OF_STORM_DESTROYED = 1,
ACTION_TOWER_OF_FROST_DESTROYED = 2,
ACTION_TOWER_OF_FLAMES_DESTROYED = 3,
ACTION_TOWER_OF_LIFE_DESTROYED = 4,
ACTION_MOVE_TO_CENTER_POSITION = 10,
};
enum UlduarAchievementCriteriaIds
@@ -175,6 +162,29 @@ enum UlduarAchievementCriteriaIds
CRITERIA_DISARMED = 21687,
};
enum UlduarData
{
// Collosus (Leviathan)
DATA_COLOSSUS = 20,
// Razorscale
DATA_EXPEDITION_COMMANDER,
DATA_RAZORSCALE_CONTROL,
// XT-002
DATA_TOY_PILE_0,
DATA_TOY_PILE_1,
DATA_TOY_PILE_2,
DATA_TOY_PILE_3,
// Kologarn
DATA_LEFT_ARM,
DATA_RIGHT_ARM,
// Hodir
DATA_HODIR_RARE_CACHE,
};
template<class AI>
CreatureAI* GetUlduarAI(Creature* creature)
{
@@ -97,7 +97,7 @@ class ulduar_teleporter : public GameObjectScript
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Teleport to the Expedition Base Camp", GOSSIP_SENDER_MAIN, BASE_CAMP);
if (InstanceScript* instance = gameObject->GetInstanceScript())
{
if (instance->GetData(TYPE_COLOSSUS) == 2) //count of 2 collossus death
if (instance->GetData(DATA_COLOSSUS) == 2) //count of 2 collossus death
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Teleport to the Formation Grounds", GOSSIP_SENDER_MAIN, GROUNDS);
if (instance->GetBossState(BOSS_LEVIATHAN) == DONE)
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Teleport to the Colossal Forge", GOSSIP_SENDER_MAIN, FORGE);