Scripts/Ulduar:

* Added script for Freya encounter
* Cleaned up instance script
* Cleaned up teleporter script
* Fixed typo in Hodir script

Signed-off-by: Lopin <Lopin@TwinStar.cz>
This commit is contained in:
Lopin
2011-05-21 14:11:50 +02:00
parent 59c0670f44
commit 18c016a890
22 changed files with 2091 additions and 484 deletions

View File

@@ -1600,6 +1600,21 @@ UPDATE `creature_template` SET `ScriptName`='npc_icicle' WHERE `entry` IN (33169
UPDATE `creature_template` SET `ScriptName`='npc_snowpacked_icicle' WHERE `entry`=33174;
UPDATE `creature_template` SET `ScriptName`='npc_ice_block' WHERE `entry`=32938;
UPDATE `creature_template` SET `ScriptName`='boss_hodir' WHERE `entry`=32845;
UPDATE `creature_template` SET `ScriptName`='boss_freya' WHERE `entry`=32906;
UPDATE `creature_template` SET `ScriptName`='boss_elder_brightleaf' WHERE `entry`=32915;
UPDATE `creature_template` SET `ScriptName`='boss_elder_ironbranch' WHERE `entry`=32913;
UPDATE `creature_template` SET `ScriptName`='boss_elder_stonebark' WHERE `entry`=32914;
UPDATE `creature_template` SET `ScriptName`='npc_ancient_conservator' WHERE `entry`=33203;
UPDATE `creature_template` SET `ScriptName`='npc_snaplasher' WHERE `entry`=32916;
UPDATE `creature_template` SET `ScriptName`='npc_storm_lasher' WHERE `entry`=32919;
UPDATE `creature_template` SET `ScriptName`='npc_ancient_water_spirit' WHERE `entry`=33202;
UPDATE `creature_template` SET `ScriptName`='npc_detonating_lasher' WHERE `entry`=32918;
UPDATE `creature_template` SET `ScriptName`='npc_sun_beam' WHERE `entry`=33170;
UPDATE `creature_template` SET `ScriptName`='npc_nature_bomb' WHERE `entry`=34129;
UPDATE `creature_template` SET `ScriptName`='npc_eonars_gift' WHERE `entry`=33228;
UPDATE `creature_template` SET `ScriptName`='npc_healthy_spore' WHERE `entry`=33215;
UPDATE `creature_template` SET `ScriptName`='npc_unstable_sun_beam' WHERE `entry`=33050;
UPDATE `creature_template` SET `ScriptName`='npc_iron_roots' WHERE `entry` IN (33088,33168);
/* UN'GORO CRATER */

View File

@@ -0,0 +1,9 @@
DELETE FROM `conditions` WHERE `SourceEntry` IN (62385,62386,62387,62521,62525,62524);
INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`ErrorTextId`,`ScriptName`,`Comment`)
VALUES
(13,0,62385,0,18,1,32906,0,0,'','Brightleaf\'s Essence'),
(13,0,62386,0,18,1,32906,0,0,'','Stonebarks\'s Essence'),
(13,0,62387,0,18,1,32906,0,0,'','Ironbranch\'s Essence'),
(13,0,62521,0,18,1,32906,0,0,'','Attuned to Nature 25 Dose Reduction'),
(13,0,62524,0,18,1,32906,0,0,'','Attuned to Nature 2 Dose Reduction'),
(13,0,62525,0,18,1,32906,0,0,'','Attuned to Nature 10 Dose Reduction');

View File

@@ -0,0 +1,24 @@
-- Trigger flag
UPDATE `creature_template` SET `flags_extra`=`flags_extra`|128 WHERE `entry`=34129;
-- Delete NPC which is not supposed to be here
DELETE FROM `creature` WHERE `guid`=136607;
-- Immunity
UPDATE `creature_template` SET `mechanic_immune_mask`=650854239 WHERE `entry`=32906;
-- Spell Difficulties
DELETE FROM `spelldifficulty_dbc` WHERE `id` BETWEEN 3240 AND 3250;
INSERT INTO `spelldifficulty_dbc` (`id`,`spellid0`,`spellid1`,`spellid2`,`spellid3`)
VALUES
(3240,63169,63549,0,0), -- Ulduar: Corrupted Servitor - Petrify Joints
(3241,63082,63559,0,0), -- Ulduar: Misguided Nymph - Bind Life
(3242,63111,63562,0,0), -- Ulduar: Misguided Nymph - Frost Spear
(3243,63136,63564,0,0), -- Ulduar: Misguided Nymph - Winter's Embrace
(3244,63047,63550,0,0), -- Ulduar: Guardian Lasher - Guardian's Lash
(3245,63242,63556,0,0), -- Ulduar: Mangrove Ent - Nourish
(3246,63241,63554,0,0), -- Ulduar: Mangrove Ent - Tranquility
(3247,63240,63553,0,0), -- Ulduar: Ironroot Lasher - Ironroot Thorns
(3248,63247,63568,0,0), -- Ulduar: Nature's Blade - Living Tsunami
(3249,63226,63551,0,0), -- Ulduar: Guardian of Life - Poison Breath
(3250,64587,34650,0,0); -- Ulduar: Nature Bomb - Nature Bomb

View File

@@ -0,0 +1,15 @@
UPDATE `creature_template` SET `ScriptName`='boss_freya' WHERE `entry`=32906;
UPDATE `creature_template` SET `ScriptName`='boss_elder_brightleaf' WHERE `entry`=32915;
UPDATE `creature_template` SET `ScriptName`='boss_elder_ironbranch' WHERE `entry`=32913;
UPDATE `creature_template` SET `ScriptName`='boss_elder_stonebark' WHERE `entry`=32914;
UPDATE `creature_template` SET `ScriptName`='npc_ancient_conservator' WHERE `entry`=33203;
UPDATE `creature_template` SET `ScriptName`='npc_snaplasher' WHERE `entry`=32916;
UPDATE `creature_template` SET `ScriptName`='npc_storm_lasher' WHERE `entry`=32919;
UPDATE `creature_template` SET `ScriptName`='npc_ancient_water_spirit' WHERE `entry`=33202;
UPDATE `creature_template` SET `ScriptName`='npc_detonating_lasher' WHERE `entry`=32918;
UPDATE `creature_template` SET `ScriptName`='npc_sun_beam' WHERE `entry`=33170;
UPDATE `creature_template` SET `ScriptName`='npc_nature_bomb' WHERE `entry`=34129;
UPDATE `creature_template` SET `ScriptName`='npc_eonars_gift' WHERE `entry`=33228;
UPDATE `creature_template` SET `ScriptName`='npc_healthy_spore' WHERE `entry`=33215;
UPDATE `creature_template` SET `ScriptName`='npc_unstable_sun_beam' WHERE `entry`=33050;
UPDATE `creature_template` SET `ScriptName`='npc_iron_roots' WHERE `entry` IN (33088,33168);

View File

@@ -0,0 +1,6 @@
DELETE FROM `spell_script_names` WHERE `spell_id` IN (62519,65158,65160);
INSERT INTO `spell_script_names`
VALUES
(62519, 'spell_freya_attuned_to_nature'),
(65158, 'spell_freya_iron_roots'),
(65160, 'spell_freya_iron_roots');

View File

@@ -425,6 +425,7 @@ void AddSC_boss_general_vezax();
void AddSC_ulduar_teleporter();
void AddSC_boss_mimiron();
void AddSC_boss_hodir();
void AddSC_boss_freya();
void AddSC_instance_ulduar();
void AddSC_boss_keleseth(); //Utgarde Keep
void AddSC_boss_skarvald_dalronn();
@@ -1121,6 +1122,7 @@ void AddNorthrendScripts()
AddSC_ulduar_teleporter();
AddSC_boss_mimiron();
AddSC_boss_hodir();
AddSC_boss_freya();
AddSC_instance_ulduar();
AddSC_boss_keleseth(); //Utgarde Keep
AddSC_boss_skarvald_dalronn();

View File

@@ -3946,11 +3946,6 @@ void SpellMgr::LoadSpellCustomAttr()
mSpellCustomAttr[i] |= SPELL_ATTR0_CU_IGNORE_ARMOR;
++count;
break;
// Strength of the Pack
case 64381:
spellInfo->StackAmount = 4;
++count;
break;
case 63675: // Improved Devouring Plague
spellInfo->AttributesEx3 |= SPELL_ATTR3_NO_DONE_BONUS;
++count;
@@ -4011,6 +4006,15 @@ void SpellMgr::LoadSpellCustomAttr()
spellInfo->MaxAffectedTargets = 1;
++count;
break;
case 62716: // Growth of Nature
case 65584: // Growth of Nature
spellInfo->AttributesEx3 |= SPELL_ATTR3_STACK_FOR_DIFF_CASTERS;
++count;
break;
case 64381: // Strength of the Pack
spellInfo->StackAmount = 4;
++count;
break;
// ENDOF ULDUAR SPELLS
//
// ICECROWN CITADEL SPELLS

View File

@@ -123,7 +123,7 @@ public:
}
if (pInstance)
pInstance->SetData(TYPE_ALGALON, IN_PROGRESS);
pInstance->SetData(BOSS_ALGALON, IN_PROGRESS);
}
void KilledUnit(Unit * /*victim*/)
@@ -137,7 +137,7 @@ public:
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
if (pInstance)
pInstance->SetData(TYPE_ALGALON, NOT_STARTED);
pInstance->SetData(BOSS_ALGALON, NOT_STARTED);
BlackHoleGUID = 0;
@@ -218,7 +218,7 @@ public:
me->DisappearAndDie();
if (pInstance)
pInstance->SetData(TYPE_ALGALON, DONE);
pInstance->SetData(BOSS_ALGALON, DONE);
return;
}

View File

@@ -130,7 +130,7 @@ bool IsEncounterComplete(InstanceScript* pInstance, Creature* me)
for (uint8 i = 0; i < 3; ++i)
{
uint64 guid = pInstance->GetData64(DATA_STEELBREAKER+i);
uint64 guid = pInstance->GetData64(BOSS_STEELBREAKER+i);
if (!guid)
return false;
@@ -149,7 +149,7 @@ void RespawnEncounter(InstanceScript* pInstance, Creature* me)
{
for (uint8 i = 0; i < 3; ++i)
{
uint64 guid = pInstance->GetData64(DATA_STEELBREAKER+i);
uint64 guid = pInstance->GetData64(BOSS_STEELBREAKER+i);
if (!guid)
continue;
@@ -166,14 +166,14 @@ void RespawnEncounter(InstanceScript* pInstance, Creature* me)
void StartEncounter(InstanceScript* pInstance, Creature* me, Unit* /*target*/)
{
if (pInstance->GetBossState(TYPE_ASSEMBLY) == IN_PROGRESS)
if (pInstance->GetBossState(BOSS_ASSEMBLY_OF_IRON) == IN_PROGRESS)
return; // Prevent recursive calls
pInstance->SetBossState(TYPE_ASSEMBLY, IN_PROGRESS);
pInstance->SetBossState(BOSS_ASSEMBLY_OF_IRON, IN_PROGRESS);
for (uint8 i = 0; i < 3; ++i)
{
uint64 guid = pInstance->GetData64(DATA_STEELBREAKER+i);
uint64 guid = pInstance->GetData64(BOSS_STEELBREAKER+i);
if (!guid)
continue;
@@ -221,7 +221,7 @@ public:
me->RemoveAllAuras();
if (pInstance)
{
pInstance->SetBossState(TYPE_ASSEMBLY, NOT_STARTED);
pInstance->SetBossState(BOSS_ASSEMBLY_OF_IRON, NOT_STARTED);
RespawnEncounter(pInstance, me);
}
}
@@ -261,7 +261,7 @@ public:
{
bool has_supercharge = false;
if (Creature* Brundir = Unit::GetCreature(*me, pInstance ? pInstance->GetData64(DATA_BRUNDIR) : 0))
if (Creature* Brundir = Unit::GetCreature(*me, pInstance ? pInstance->GetData64(BOSS_BRUNDIR) : 0))
{
if (Brundir->isAlive())
{
@@ -270,7 +270,7 @@ public:
}
}
if (Creature* Molgeim = Unit::GetCreature(*me, pInstance ? pInstance->GetData64(DATA_MOLGEIM) : 0))
if (Creature* Molgeim = Unit::GetCreature(*me, pInstance ? pInstance->GetData64(BOSS_MOLGEIM) : 0))
{
if (Molgeim->isAlive())
{
@@ -288,7 +288,7 @@ public:
{
DoScriptText(RAND(SAY_STEELBREAKER_DEATH_1, SAY_STEELBREAKER_DEATH_2), me);
if (IsEncounterComplete(pInstance, me) && pInstance)
pInstance->SetData(TYPE_ASSEMBLY, DONE);
pInstance->SetData(BOSS_ASSEMBLY_OF_IRON, DONE);
}
void KilledUnit(Unit * /*who*/)
@@ -364,7 +364,7 @@ public:
{
if (pInstance)
{
pInstance->SetData(TYPE_ASSEMBLY, NOT_STARTED);
pInstance->SetData(BOSS_ASSEMBLY_OF_IRON, NOT_STARTED);
RespawnEncounter(pInstance, me);
}
@@ -408,7 +408,7 @@ public:
{
bool has_supercharge = false;
if (Creature* Steelbreaker = Unit::GetCreature(*me, pInstance ? pInstance->GetData64(DATA_STEELBREAKER) : 0))
if (Creature* Steelbreaker = Unit::GetCreature(*me, pInstance ? pInstance->GetData64(BOSS_STEELBREAKER) : 0))
{
if (Steelbreaker->isAlive())
{
@@ -417,7 +417,7 @@ public:
}
}
if (Creature* Brundir = Unit::GetCreature((*me), pInstance ? pInstance->GetData64(DATA_BRUNDIR) : 0))
if (Creature* Brundir = Unit::GetCreature((*me), pInstance ? pInstance->GetData64(BOSS_BRUNDIR) : 0))
{
if (Brundir->isAlive())
{
@@ -435,7 +435,7 @@ public:
{
DoScriptText(RAND(SAY_MOLGEIM_DEATH_1, SAY_MOLGEIM_DEATH_2), me);
if (IsEncounterComplete(pInstance, me) && pInstance)
pInstance->SetData(TYPE_ASSEMBLY, DONE);
pInstance->SetData(BOSS_ASSEMBLY_OF_IRON, DONE);
}
void KilledUnit(Unit * /*who*/)
@@ -605,7 +605,7 @@ public:
{
if (pInstance)
{
pInstance->SetData(TYPE_ASSEMBLY, NOT_STARTED);
pInstance->SetData(BOSS_ASSEMBLY_OF_IRON, NOT_STARTED);
RespawnEncounter(pInstance, me);
}
@@ -653,7 +653,7 @@ public:
{
bool has_supercharge = false;
if (Creature* Steelbreaker = Unit::GetCreature(*me, pInstance ? pInstance->GetData64(DATA_STEELBREAKER) : 0))
if (Creature* Steelbreaker = Unit::GetCreature(*me, pInstance ? pInstance->GetData64(BOSS_STEELBREAKER) : 0))
{
if (Steelbreaker->isAlive())
{
@@ -662,7 +662,7 @@ public:
}
}
if (Creature* Molgeim = Unit::GetCreature(*me, pInstance ? pInstance->GetData64(DATA_MOLGEIM) : 0))
if (Creature* Molgeim = Unit::GetCreature(*me, pInstance ? pInstance->GetData64(BOSS_MOLGEIM) : 0))
{
if (Molgeim->isAlive())
{
@@ -680,7 +680,7 @@ public:
{
DoScriptText(RAND(SAY_BRUNDIR_DEATH_1, SAY_BRUNDIR_DEATH_2), me);
if (IsEncounterComplete(pInstance, me) && pInstance)
pInstance->SetData(TYPE_ASSEMBLY, DONE);
pInstance->SetData(BOSS_ASSEMBLY_OF_IRON, DONE);
}
void KilledUnit(Unit * /*who*/)

View File

@@ -46,7 +46,7 @@ public:
struct boss_auriaya_AI : public BossAI
{
boss_auriaya_AI(Creature *pCreature) : BossAI(pCreature, TYPE_AURIAYA)
boss_auriaya_AI(Creature *pCreature) : BossAI(pCreature, BOSS_AURIAYA)
{
}

View File

@@ -219,7 +219,7 @@ class boss_flame_leviathan : public CreatureScript
struct boss_flame_leviathanAI : public BossAI
{
boss_flame_leviathanAI(Creature* creature) : BossAI(creature, TYPE_LEVIATHAN), vehicle(creature->GetVehicleKit())
boss_flame_leviathanAI(Creature* creature) : BossAI(creature, BOSS_LEVIATHAN), vehicle(creature->GetVehicleKit())
{
}
@@ -1185,7 +1185,7 @@ class npc_lorekeeper : public CreatureScript
if (player)
player->CLOSE_GOSSIP_MENU();
if (Creature* leviathan = instance->instance->GetCreature(instance->GetData64(TYPE_LEVIATHAN)))
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
creature->SetVisible(false);
@@ -1208,7 +1208,7 @@ class npc_lorekeeper : public CreatureScript
bool OnGossipHello(Player* player, Creature* creature)
{
InstanceScript* instance = creature->GetInstanceScript();
if (instance && instance->GetData(TYPE_LEVIATHAN) !=DONE && player)
if (instance && instance->GetData(BOSS_LEVIATHAN) !=DONE && player)
{
player->PrepareGossipMenu(creature);
@@ -1261,7 +1261,7 @@ public:
//bool OnGossipHello(Player* pPlayer, Creature* creature)
//{
// InstanceScript* instance = creature->GetInstanceScript();
// if (instance && instance->GetData(TYPE_LEVIATHAN) !=DONE)
// if (instance && instance->GetData(BOSS_LEVIATHAN) !=DONE)
// {
// pPlayer->PrepareGossipMenu(creature);
//
@@ -1321,7 +1321,7 @@ class at_RX_214_repair_o_matic_station : public AreaTriggerScript
{
player->MonsterTextEmote(EMOTE_REPAIR, player->GetGUID(), true);
player->CastSpell(vehicle, SPELL_AUTO_REPAIR, true);
if (Creature* leviathan = ObjectAccessor::GetCreature(*player, instance ? instance->GetData64(TYPE_LEVIATHAN) : 0))
if (Creature* leviathan = ObjectAccessor::GetCreature(*player, instance ? instance->GetData64(BOSS_LEVIATHAN) : 0))
leviathan->AI()->SetData(DATA_UNBROKEN, 0); // set bool to false thats checked in leviathan getdata
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -95,7 +95,7 @@ public:
struct boss_general_vezaxAI : public BossAI
{
boss_general_vezaxAI(Creature *pCreature) : BossAI(pCreature, TYPE_VEZAX)
boss_general_vezaxAI(Creature *pCreature) : BossAI(pCreature, BOSS_VEZAX)
{
me->ApplySpellImmune(0, IMMUNITY_EFFECT, SPELL_EFFECT_KNOCK_BACK, true);
me->ApplySpellImmune(0, IMMUNITY_ID, 49560, true); // Death Grip jump effect
@@ -332,7 +332,7 @@ public:
void JustDied(Unit * /*pWho*/)
{
if (Creature * pVezax = me->GetCreature(*me, pInstance ? pInstance->GetData64(TYPE_VEZAX) : 0))
if (Creature * pVezax = me->GetCreature(*me, pInstance ? pInstance->GetData64(BOSS_VEZAX) : 0))
pVezax->AI()->DoAction(ACTION_ANIMUS_DIE);
}
@@ -405,7 +405,7 @@ public:
DoCast(me, SPELL_SARONITE_VAPORS);
me->DespawnOrUnsummon(30000);
if (Creature * pVezax = me->GetCreature(*me, pInstance ? pInstance->GetData64(TYPE_VEZAX) : 0))
if (Creature * pVezax = me->GetCreature(*me, pInstance ? pInstance->GetData64(BOSS_VEZAX) : 0))
pVezax->AI()->DoAction(ACTION_VAPORS_DIE);
}
}

View File

@@ -207,7 +207,7 @@ class npc_flash_freeze : public CreatureScript
// Prevents to have Ice Block on other place than target is
me->NearTeleportTo(target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(), target->GetOrientation());
if (target->GetTypeId() == TYPEID_PLAYER)
if (Creature* Hodir = ObjectAccessor::GetCreature(*me, instance ? instance->GetData64(TYPE_HODIR) : 0))
if (Creature* Hodir = ObjectAccessor::GetCreature(*me, instance ? instance->GetData64(BOSS_HODIR) : 0))
Hodir->AI()->DoAction(ACTION_CHEESE_THE_FREEZE);
}
}
@@ -259,7 +259,7 @@ class npc_ice_block : public CreatureScript
{
Helper->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_DISABLE_MOVE | UNIT_FLAG_STUNNED | UNIT_FLAG_PACIFIED);
if (Creature* Hodir = ObjectAccessor::GetCreature(*me, instance ? instance->GetData64(TYPE_HODIR) : 0))
if (Creature* Hodir = ObjectAccessor::GetCreature(*me, instance ? instance->GetData64(BOSS_HODIR) : 0))
{
if (!Hodir->isInCombat())
{
@@ -287,7 +287,7 @@ class boss_hodir : public CreatureScript
struct boss_hodirAI : public BossAI
{
boss_hodirAI(Creature* creature) : BossAI(creature, TYPE_HODIR)
boss_hodirAI(Creature* creature) : BossAI(creature, BOSS_HODIR)
{
me->SetReactState(REACT_PASSIVE);
}
@@ -457,7 +457,7 @@ class boss_hodir : public CreatureScript
void FlashFreeze()
{
std::list<Unit*> TargetList;
Trinity::AnyUnfriendlyUnitInObjectRangeCheck checker(me, me, 150.0f);
Trinity::AnyUnfriendlyUnitInObjectRangeCheck checker(me, me, 100.0f);
Trinity::UnitListSearcher<Trinity::AnyUnfriendlyUnitInObjectRangeCheck> searcher(me, TargetList, checker);
me->VisitNearbyObject(100.0f, searcher);
for (std::list<Unit*>::iterator itr = TargetList.begin(); itr != TargetList.end(); ++itr)
@@ -633,7 +633,7 @@ class npc_hodir_priest : public CreatureScript
void JustDied(Unit* who)
{
if (Creature* Hodir = ObjectAccessor::GetCreature(*me, instance ? instance->GetData64(TYPE_HODIR) : 0))
if (Creature* Hodir = ObjectAccessor::GetCreature(*me, instance ? instance->GetData64(BOSS_HODIR) : 0))
Hodir->AI()->DoAction(ACTION_I_HAVE_THE_COOLEST_FRIENDS);
}
@@ -695,7 +695,7 @@ class npc_hodir_shaman : public CreatureScript
void JustDied(Unit* who)
{
if (Creature* Hodir = ObjectAccessor::GetCreature(*me, instance ? instance->GetData64(TYPE_HODIR) : 0))
if (Creature* Hodir = ObjectAccessor::GetCreature(*me, instance ? instance->GetData64(BOSS_HODIR) : 0))
Hodir->AI()->DoAction(ACTION_I_HAVE_THE_COOLEST_FRIENDS);
}
@@ -756,7 +756,7 @@ class npc_hodir_druid : public CreatureScript
void JustDied(Unit* who)
{
if (Creature* Hodir = ObjectAccessor::GetCreature(*me, instance ? instance->GetData64(TYPE_HODIR) : 0))
if (Creature* Hodir = ObjectAccessor::GetCreature(*me, instance ? instance->GetData64(BOSS_HODIR) : 0))
Hodir->AI()->DoAction(ACTION_I_HAVE_THE_COOLEST_FRIENDS);
}
@@ -821,7 +821,7 @@ class npc_hodir_mage : public CreatureScript
void JustDied(Unit* who)
{
if (Creature* Hodir = ObjectAccessor::GetCreature(*me, instance ? instance->GetData64(TYPE_HODIR) : 0))
if (Creature* Hodir = ObjectAccessor::GetCreature(*me, instance ? instance->GetData64(BOSS_HODIR) : 0))
Hodir->AI()->DoAction(ACTION_I_HAVE_THE_COOLEST_FRIENDS);
}

View File

@@ -123,7 +123,7 @@ public:
struct boss_ignis_AI : public BossAI
{
boss_ignis_AI(Creature *pCreature) : BossAI(pCreature, TYPE_IGNIS), vehicle(me->GetVehicleKit())
boss_ignis_AI(Creature *pCreature) : BossAI(pCreature, BOSS_IGNIS), vehicle(me->GetVehicleKit())
{
assert(vehicle);
me->ApplySpellImmune(0, IMMUNITY_EFFECT, SPELL_EFFECT_KNOCK_BACK, true);
@@ -328,7 +328,7 @@ public:
if (me->HasAura(SPELL_BRITTLE) && damage >= 5000)
{
DoCast(SPELL_SHATTER);
if (Creature *pIgnis = me->GetCreature(*me, instance->GetData64(TYPE_IGNIS)))
if (Creature *pIgnis = me->GetCreature(*me, instance->GetData64(BOSS_IGNIS)))
if (pIgnis->AI())
pIgnis->AI()->DoAction(ACTION_REMOVE_BUFF);

View File

@@ -102,7 +102,7 @@ class boss_kologarn : public CreatureScript
struct boss_kologarnAI : public BossAI
{
boss_kologarnAI(Creature *pCreature) : BossAI(pCreature, TYPE_KOLOGARN), vehicle(pCreature->GetVehicleKit()),
boss_kologarnAI(Creature *pCreature) : BossAI(pCreature, BOSS_KOLOGARN), vehicle(pCreature->GetVehicleKit()),
left(false), right(false)
{
ASSERT(vehicle);
@@ -160,7 +160,7 @@ class boss_kologarn : public CreatureScript
void PassengerBoarded(Unit* who, int8 /*seatId*/, bool apply)
{
bool isEncounterInProgress = instance->GetBossState(TYPE_KOLOGARN) == IN_PROGRESS;
bool isEncounterInProgress = instance->GetBossState(BOSS_KOLOGARN) == IN_PROGRESS;
if (who->GetEntry() == NPC_LEFT_ARM)
{
left = apply;
@@ -354,7 +354,7 @@ class spell_ulduar_rubble_summon : public SpellScriptLoader
if (!caster)
return;
uint64 originalCaster = caster->GetInstanceScript() ? caster->GetInstanceScript()->GetData64(TYPE_KOLOGARN) : 0;
uint64 originalCaster = caster->GetInstanceScript() ? caster->GetInstanceScript()->GetData64(BOSS_KOLOGARN) : 0;
uint32 spellId = GetEffectValue();
for (uint8 i = 0; i < 5; ++i)
caster->CastSpell(caster, spellId, true, NULL, NULL, originalCaster);

View File

@@ -216,7 +216,7 @@ class boss_razorscale_controller : public CreatureScript
void DoAction(int32 const action)
{
if (instance->GetBossState(TYPE_RAZORSCALE) != IN_PROGRESS)
if (instance->GetBossState(BOSS_RAZORSCALE) != IN_PROGRESS)
return;
switch (action)
@@ -298,7 +298,7 @@ class go_razorscale_harpoon : public GameObjectScript
bool OnGossipHello(Player* /*player*/, GameObject* go)
{
InstanceScript* instance = go->GetInstanceScript();
if (ObjectAccessor::GetCreature(*go, instance ? instance->GetData64(TYPE_RAZORSCALE) : 0))
if (ObjectAccessor::GetCreature(*go, instance ? instance->GetData64(BOSS_RAZORSCALE) : 0))
go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_UNK1);
return false;
}
@@ -311,7 +311,7 @@ class boss_razorscale : public CreatureScript
struct boss_razorscaleAI : public BossAI
{
boss_razorscaleAI(Creature* creature) : BossAI(creature, TYPE_RAZORSCALE)
boss_razorscaleAI(Creature* creature) : BossAI(creature, BOSS_RAZORSCALE)
{
// Do not let Razorscale be affected by Battle Shout buff
me->ApplySpellImmune(0, IMMUNITY_ID, (SPELL_BATTLE_SHOUT), true);
@@ -335,7 +335,7 @@ class boss_razorscale : public CreatureScript
me->SetReactState(REACT_PASSIVE);
PermaGround = false;
HarpoonCounter = 0;
if (Creature* commander = ObjectAccessor::GetCreature(*me, instance ? instance->GetData64(DATA_EXP_COMMANDER) : 0))
if (Creature* commander = ObjectAccessor::GetCreature(*me, instance ? instance->GetData64(DATA_EXPEDITION_COMMANDER) : 0))
commander->AI()->DoAction(ACTION_COMMANDER_RESET);
}
@@ -433,7 +433,7 @@ class boss_razorscale : public CreatureScript
me->SetFlying(false);
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED | UNIT_FLAG_PACIFIED);
if (Creature* commander = ObjectAccessor::GetCreature(*me, instance ? instance->GetData64(DATA_EXP_COMMANDER) : 0))
if (Creature* commander = ObjectAccessor::GetCreature(*me, instance ? instance->GetData64(DATA_EXPEDITION_COMMANDER) : 0))
commander->AI()->DoAction(ACTION_GROUND_PHASE);
events.ScheduleEvent(EVENT_BREATH, 30000, 0, PHASE_GROUND);
events.ScheduleEvent(EVENT_BUFFET, 33000, 0, PHASE_GROUND);
@@ -638,7 +638,7 @@ class npc_expedition_commander : public CreatureScript
switch (Phase)
{
case 1:
instance->SetBossState(TYPE_RAZORSCALE, IN_PROGRESS);
instance->SetBossState(BOSS_RAZORSCALE, IN_PROGRESS);
summons.clear();
AttackStartTimer = 1000;
Phase = 2;
@@ -676,7 +676,7 @@ class npc_expedition_commander : public CreatureScript
Phase = 5;
break;
case 5:
if (Creature* Razorscale = ObjectAccessor::GetCreature(*me, instance ? instance->GetData64(TYPE_RAZORSCALE) : 0))
if (Creature* Razorscale = ObjectAccessor::GetCreature(*me, instance ? instance->GetData64(BOSS_RAZORSCALE) : 0))
{
Razorscale->AI()->DoAction(ACTION_EVENT_START);
me->SetInCombatWith(Razorscale);
@@ -707,7 +707,7 @@ class npc_expedition_commander : public CreatureScript
bool OnGossipHello(Player* player, Creature* creature)
{
InstanceScript* instance = creature->GetInstanceScript();
if (instance && instance->GetBossState(TYPE_RAZORSCALE) == NOT_STARTED)
if (instance && instance->GetBossState(BOSS_RAZORSCALE) == NOT_STARTED)
{
player->PrepareGossipMenu(creature);

View File

@@ -53,7 +53,7 @@ public:
struct boss_thorimAI : public BossAI
{
boss_thorimAI(Creature* pCreature) : BossAI(pCreature, TYPE_THORIM)
boss_thorimAI(Creature* pCreature) : BossAI(pCreature, BOSS_THORIM)
{
}

View File

@@ -176,7 +176,7 @@ public:
struct boss_xt002_AI : public BossAI
{
boss_xt002_AI(Creature *pCreature) : BossAI(pCreature, TYPE_XT002)
boss_xt002_AI(Creature *pCreature) : BossAI(pCreature, BOSS_XT002)
{
}
@@ -547,7 +547,7 @@ public:
void JustDied(Unit * /*victim*/)
{
if (m_pInstance)
if (Creature* pXT002 = me->GetCreature(*me, m_pInstance->GetData64(TYPE_XT002)))
if (Creature* pXT002 = me->GetCreature(*me, m_pInstance->GetData64(BOSS_XT002)))
if (pXT002->AI())
pXT002->AI()->DoAction(ACTION_ENTER_HARD_MODE);
@@ -557,7 +557,7 @@ public:
void DamageTaken(Unit * /*pDone*/, uint32 &damage)
{
if (Creature* pXT002 = me->GetCreature(*me, m_pInstance->GetData64(TYPE_XT002)))
if (Creature* pXT002 = me->GetCreature(*me, m_pInstance->GetData64(BOSS_XT002)))
if (pXT002->AI())
{
uint32 health = me->GetHealth();
@@ -600,13 +600,13 @@ public:
{
me->SetReactState(REACT_PASSIVE);
if (Creature* pXT002 = me->GetCreature(*me, m_pInstance->GetData64(TYPE_XT002)))
if (Creature* pXT002 = me->GetCreature(*me, m_pInstance->GetData64(BOSS_XT002)))
me->GetMotionMaster()->MoveChase(pXT002);
}
void UpdateAI(const uint32 /*diff*/)
{
if (Creature* pXT002 = me->GetCreature(*me, m_pInstance->GetData64(TYPE_XT002)))
if (Creature* pXT002 = me->GetCreature(*me, m_pInstance->GetData64(BOSS_XT002)))
{
if (me->GetDistance2d(pXT002) <= 0.5)
{
@@ -718,7 +718,7 @@ public:
{
me->SetReactState(REACT_PASSIVE);
if (Creature* pXT002 = me->GetCreature(*me, m_pInstance->GetData64(TYPE_XT002)))
if (Creature* pXT002 = me->GetCreature(*me, m_pInstance->GetData64(BOSS_XT002)))
me->GetMotionMaster()->MoveChase(pXT002);
}
@@ -729,7 +729,7 @@ public:
void UpdateAI(const uint32 /*diff*/)
{
if (Creature* pXT002 = me->GetCreature(*me, m_pInstance->GetData64(TYPE_XT002)))
if (Creature* pXT002 = me->GetCreature(*me, m_pInstance->GetData64(BOSS_XT002)))
{
if (me->GetDistance2d(pXT002) <= 0.5)
{

View File

@@ -23,8 +23,8 @@
static const DoorData doorData[] =
{
{GO_LEVIATHAN_DOOR, TYPE_LEVIATHAN, DOOR_TYPE_ROOM, BOUNDARY_S},
{0, 0, DOOR_TYPE_ROOM, BOUNDARY_NONE}
{ GO_LEVIATHAN_DOOR, BOSS_LEVIATHAN, DOOR_TYPE_ROOM, BOUNDARY_S },
{ 0, 0, DOOR_TYPE_ROOM, BOUNDARY_NONE },
};
class instance_ulduar : public InstanceMapScript
@@ -32,46 +32,47 @@ class instance_ulduar : public InstanceMapScript
public:
instance_ulduar() : InstanceMapScript("instance_ulduar", 603) { }
InstanceScript* GetInstanceScript(InstanceMap* pMap) const
InstanceScript* GetInstanceScript(InstanceMap* map) const
{
return new instance_ulduar_InstanceMapScript(pMap);
return new instance_ulduar_InstanceMapScript(map);
}
struct instance_ulduar_InstanceMapScript : public InstanceScript
{
instance_ulduar_InstanceMapScript(InstanceMap* map) : InstanceScript(map) { }
uint32 uiEncounter[MAX_ENCOUNTER];
uint32 Encounter[MAX_ENCOUNTER];
std::string m_strInstData;
uint64 uiLeviathanGUID;
uint64 uiIgnisGUID;
uint64 uiRazorscaleGUID;
uint64 uiRazorscaleController;
uint64 uiRazorHarpoonGUIDs[4];
uint64 uiExpCommanderGUID;
uint64 uiXT002GUID;
uint64 uiAssemblyGUIDs[3];
uint64 uiKologarnGUID;
uint64 uiLeftArmGUID;
uint64 uiRightArmGUID;
uint64 uiAuriayaGUID;
uint64 uiMimironGUID;
uint64 uiHodirGUID;
uint64 uiThorimGUID;
uint64 uiFreyaGUID;
uint64 uiVezaxGUID;
uint64 uiYoggSaronGUID;
uint64 uiAlgalonGUID;
uint64 uiLeviathanGateGUID;
uint64 uiVezaxDoorGUID;
uint64 LeviathanGUID;
uint64 IgnisGUID;
uint64 RazorscaleGUID;
uint64 RazorscaleController;
uint64 RazorHarpoonGUIDs[4];
uint64 ExpeditionCommanderGUID;
uint64 XT002GUID;
uint64 AssemblyGUIDs[3];
uint64 KologarnGUID;
uint64 LeftArmGUID;
uint64 RightArmGUID;
uint64 AuriayaGUID;
uint64 MimironGUID;
uint64 HodirGUID;
uint64 ThorimGUID;
uint64 FreyaGUID;
uint64 KeeperGUIDs[3];
uint64 VezaxGUID;
uint64 YoggSaronGUID;
uint64 AlgalonGUID;
uint64 LeviathanGateGUID;
uint64 VezaxDoorGUID;
uint64 uiKologarnChestGUID;
uint64 uiKologarnBridgeGUID;
uint64 uiKologarnDoorGUID;
uint64 uiThorimChestGUID;
uint64 uiHodirChestGUID;
uint64 uiFreyaChestGUID;
uint64 KologarnChestGUID;
uint64 KologarnBridgeGUID;
uint64 KologarnDoorGUID;
uint64 ThorimChestGUID;
uint64 HodirChestGUID;
uint64 FreyaChestGUID;
uint32 TeamInInstance;
@@ -81,42 +82,43 @@ public:
{
SetBossNumber(MAX_ENCOUNTER);
LoadDoorData(doorData);
uiIgnisGUID = 0;
uiRazorscaleGUID = 0;
uiRazorscaleController = 0;
uiExpCommanderGUID = 0;
uiXT002GUID = 0;
uiKologarnGUID = 0;
uiLeftArmGUID = 0;
uiRightArmGUID = 0;
uiAuriayaGUID = 0;
uiMimironGUID = 0;
uiHodirGUID = 0;
uiThorimGUID = 0;
uiFreyaGUID = 0;
uiVezaxGUID = 0;
uiYoggSaronGUID = 0;
uiAlgalonGUID = 0;
uiKologarnChestGUID = 0;
uiKologarnBridgeGUID = 0;
uiKologarnChestGUID = 0;
uiThorimChestGUID = 0;
uiHodirChestGUID = 0;
uiFreyaChestGUID = 0;
uiLeviathanGateGUID = 0;
uiVezaxDoorGUID = 0;
TeamInInstance = 0;
IgnisGUID = 0;
RazorscaleGUID = 0;
RazorscaleController = 0;
ExpeditionCommanderGUID = 0;
XT002GUID = 0;
KologarnGUID = 0;
LeftArmGUID = 0;
RightArmGUID = 0;
AuriayaGUID = 0;
MimironGUID = 0;
HodirGUID = 0;
ThorimGUID = 0;
FreyaGUID = 0;
VezaxGUID = 0;
YoggSaronGUID = 0;
AlgalonGUID = 0;
KologarnChestGUID = 0;
KologarnBridgeGUID = 0;
KologarnChestGUID = 0;
ThorimChestGUID = 0;
HodirChestGUID = 0;
FreyaChestGUID = 0;
LeviathanGateGUID = 0;
VezaxDoorGUID = 0;
TeamInInstance = 0;
memset(uiEncounter, 0, sizeof(uiEncounter));
memset(uiAssemblyGUIDs, 0, sizeof(uiAssemblyGUIDs));
memset(uiRazorHarpoonGUIDs, 0, sizeof(uiRazorHarpoonGUIDs));
memset(Encounter, 0, sizeof(Encounter));
memset(AssemblyGUIDs, 0, sizeof(AssemblyGUIDs));
memset(RazorHarpoonGUIDs, 0, sizeof(RazorHarpoonGUIDs));
memset(KeeperGUIDs, 0, sizeof(KeeperGUIDs));
}
bool IsEncounterInProgress() const
{
for (uint8 i = 0; i < MAX_ENCOUNTER; ++i)
{
if (uiEncounter[i] == IN_PROGRESS)
if (Encounter[i] == IN_PROGRESS)
return true;
}
@@ -142,42 +144,59 @@ public:
switch (creature->GetEntry())
{
case NPC_LEVIATHAN:
uiLeviathanGUID = creature->GetGUID();
LeviathanGUID = creature->GetGUID();
break;
case NPC_IGNIS:
uiIgnisGUID = creature->GetGUID();
IgnisGUID = creature->GetGUID();
break;
case NPC_RAZORSCALE:
uiRazorscaleGUID = creature->GetGUID();
RazorscaleGUID = creature->GetGUID();
break;
case NPC_RAZORSCALE_CONTROLLER:
uiRazorscaleController = creature->GetGUID();
RazorscaleController = creature->GetGUID();
break;
case NPC_EXPEDITION_COMMANDER:
uiExpCommanderGUID = creature->GetGUID();
return;
ExpeditionCommanderGUID = creature->GetGUID();
break;
case NPC_XT002:
uiXT002GUID = creature->GetGUID();
XT002GUID = creature->GetGUID();
break;
// Assembly of Iron
case NPC_STEELBREAKER:
uiAssemblyGUIDs[0] = creature->GetGUID();
AssemblyGUIDs[0] = creature->GetGUID();
break;
case NPC_MOLGEIM:
uiAssemblyGUIDs[1] = creature->GetGUID();
AssemblyGUIDs[1] = creature->GetGUID();
break;
case NPC_BRUNDIR:
uiAssemblyGUIDs[2] = creature->GetGUID();
AssemblyGUIDs[2] = creature->GetGUID();
break;
// Freya's Keeper
case NPC_IRONBRANCH:
KeeperGUIDs[0] = creature->GetGUID();
if (GetBossState(BOSS_FREYA) == DONE)
creature->DespawnOrUnsummon();
break;
case NPC_BRIGHTLEAF:
KeeperGUIDs[1] = creature->GetGUID();
if (GetBossState(BOSS_FREYA) == DONE)
creature->DespawnOrUnsummon();
break;
case NPC_STONEBARK:
KeeperGUIDs[2] = creature->GetGUID();
if (GetBossState(BOSS_FREYA) == DONE)
creature->DespawnOrUnsummon();
break;
// Kologarn
case NPC_KOLOGARN:
uiKologarnGUID = creature->GetGUID();
KologarnGUID = creature->GetGUID();
break;
case NPC_KOLOGARN_BRIDGE:
// The below hacks are courtesy of the grid/visibilitysystem
if (GetBossState(TYPE_KOLOGARN) == DONE)
if (GetBossState(BOSS_KOLOGARN) == DONE)
{
creature->SetDeadByDefault(true);
creature->setDeathState(CORPSE);
@@ -193,29 +212,30 @@ public:
break;
case NPC_AURIAYA:
uiAuriayaGUID = creature->GetGUID();
AuriayaGUID = creature->GetGUID();
break;
case NPC_MIMIRON:
uiMimironGUID = creature->GetGUID();
MimironGUID = creature->GetGUID();
break;
case NPC_HODIR:
uiHodirGUID = creature->GetGUID();
HodirGUID = creature->GetGUID();
break;
case NPC_THORIM:
uiThorimGUID = creature->GetGUID();
ThorimGUID = creature->GetGUID();
break;
case NPC_FREYA:
uiFreyaGUID = creature->GetGUID();
FreyaGUID = creature->GetGUID();
break;
case NPC_VEZAX:
uiVezaxGUID = creature->GetGUID();
VezaxGUID = creature->GetGUID();
break;
case NPC_YOGGSARON:
uiYoggSaronGUID = creature->GetGUID();
YoggSaronGUID = creature->GetGUID();
break;
case NPC_ALGALON:
uiAlgalonGUID = creature->GetGUID();
AlgalonGUID = creature->GetGUID();
break;
// Hodir's Helper NPCs
case NPC_EIVI_NIGHTFEATHER:
if (TeamInInstance == HORDE)
@@ -253,70 +273,70 @@ public:
}
void OnGameObjectCreate(GameObject* go)
void OnGameObjectCreate(GameObject* gameObject)
{
switch (go->GetEntry())
switch (gameObject->GetEntry())
{
case GO_KOLOGARN_CHEST_HERO:
case GO_KOLOGARN_CHEST:
uiKologarnChestGUID = go->GetGUID();
KologarnChestGUID = gameObject->GetGUID();
break;
case GO_KOLOGARN_BRIDGE:
uiKologarnBridgeGUID = go->GetGUID();
if (GetBossState(TYPE_KOLOGARN) == DONE)
HandleGameObject(0, false, go);
KologarnBridgeGUID = gameObject->GetGUID();
if (GetBossState(BOSS_KOLOGARN) == DONE)
HandleGameObject(0, false, gameObject);
break;
case GO_KOLOGARN_DOOR:
uiKologarnDoorGUID = go->GetGUID();
KologarnDoorGUID = gameObject->GetGUID();
break;
case GO_THORIM_CHEST_HERO:
case GO_THORIM_CHEST:
uiThorimChestGUID = go->GetGUID();
ThorimChestGUID = gameObject->GetGUID();
break;
case GO_HODIR_CHEST_HERO:
case GO_HODIR_CHEST:
uiHodirChestGUID = go->GetGUID();
HodirChestGUID = gameObject->GetGUID();
break;
case GO_FREYA_CHEST_HERO:
case GO_FREYA_CHEST:
uiFreyaChestGUID = go->GetGUID();
FreyaChestGUID = gameObject->GetGUID();
break;
case GO_LEVIATHAN_DOOR:
AddDoor(go, true);
AddDoor(gameObject, true);
break;
case GO_LEVIATHAN_GATE:
uiLeviathanGateGUID = go->GetGUID();
if (GetBossState(TYPE_LEVIATHAN) == DONE)
go->SetGoState(GO_STATE_ACTIVE_ALTERNATIVE);
LeviathanGateGUID = gameObject->GetGUID();
if (GetBossState(BOSS_LEVIATHAN) == DONE)
gameObject->SetGoState(GO_STATE_ACTIVE_ALTERNATIVE);
break;
case GO_VEZAX_DOOR:
uiVezaxDoorGUID = go->GetGUID();
HandleGameObject(0, false, go);
VezaxDoorGUID = gameObject->GetGUID();
HandleGameObject(0, false, gameObject);
break;
case GO_RAZOR_HARPOON_1:
uiRazorHarpoonGUIDs[0] = go->GetGUID();
RazorHarpoonGUIDs[0] = gameObject->GetGUID();
break;
case GO_RAZOR_HARPOON_2:
uiRazorHarpoonGUIDs[1] = go->GetGUID();
RazorHarpoonGUIDs[1] = gameObject->GetGUID();
break;
case GO_RAZOR_HARPOON_3:
uiRazorHarpoonGUIDs[2] = go->GetGUID();
RazorHarpoonGUIDs[2] = gameObject->GetGUID();
break;
case GO_RAZOR_HARPOON_4:
uiRazorHarpoonGUIDs[3] = go->GetGUID();
RazorHarpoonGUIDs[3] = gameObject->GetGUID();
break;
case GO_MOLE_MACHINE:
if (GetBossState(TYPE_RAZORSCALE) == IN_PROGRESS)
go->SetGoState(GO_STATE_ACTIVE);
if (GetBossState(BOSS_RAZORSCALE) == IN_PROGRESS)
gameObject->SetGoState(GO_STATE_ACTIVE);
}
}
void OnGameObjectRemove(GameObject* go)
void OnGameObjectRemove(GameObject* gameObject)
{
switch (go->GetEntry())
switch (gameObject->GetEntry())
{
case GO_LEVIATHAN_DOOR:
AddDoor(go, false);
AddDoor(gameObject, false);
break;
default:
break;
@@ -326,7 +346,7 @@ public:
void ProcessEvent(GameObject* /*go*/, uint32 eventId)
{
// Flame Leviathan's Tower Event triggers
Creature* FlameLeviathan = instance->GetCreature(uiLeviathanGUID);
Creature* FlameLeviathan = instance->GetCreature(LeviathanGUID);
if (FlameLeviathan && FlameLeviathan->isAlive()) //No leviathan, no event triggering ;)
switch (eventId)
@@ -357,63 +377,63 @@ public:
switch (type)
{
case TYPE_LEVIATHAN:
case TYPE_IGNIS:
case TYPE_RAZORSCALE:
case TYPE_XT002:
case TYPE_ASSEMBLY:
case TYPE_AURIAYA:
case TYPE_MIMIRON:
case TYPE_VEZAX:
case BOSS_LEVIATHAN:
case BOSS_IGNIS:
case BOSS_RAZORSCALE:
case BOSS_XT002:
case BOSS_ASSEMBLY_OF_IRON:
case BOSS_AURIAYA:
case BOSS_MIMIRON:
case BOSS_VEZAX:
if (state == DONE)
HandleGameObject(uiVezaxDoorGUID, true);
HandleGameObject(VezaxDoorGUID, true);
break;
case TYPE_YOGGSARON:
case BOSS_YOGGSARON:
break;
case TYPE_KOLOGARN:
case BOSS_KOLOGARN:
if (state == DONE)
{
if (GameObject* go = instance->GetGameObject(uiKologarnChestGUID))
go->SetRespawnTime(go->GetRespawnDelay());
HandleGameObject(uiKologarnBridgeGUID, false);
if (GameObject* gameObject = instance->GetGameObject(KologarnChestGUID))
gameObject->SetRespawnTime(gameObject->GetRespawnDelay());
HandleGameObject(KologarnBridgeGUID, false);
}
if (state == IN_PROGRESS)
HandleGameObject(uiKologarnDoorGUID, false);
HandleGameObject(KologarnDoorGUID, false);
else
HandleGameObject(uiKologarnDoorGUID, true);
HandleGameObject(KologarnDoorGUID, true);
break;
case TYPE_HODIR:
case BOSS_HODIR:
if (state == DONE)
if (GameObject* go = instance->GetGameObject(uiHodirChestGUID))
go->SetRespawnTime(go->GetRespawnDelay());
if (GameObject* gameObject = instance->GetGameObject(HodirChestGUID))
gameObject->SetRespawnTime(gameObject->GetRespawnDelay());
break;
case TYPE_THORIM:
case BOSS_THORIM:
if (state == DONE)
if (GameObject* go = instance->GetGameObject(uiThorimChestGUID))
go->SetRespawnTime(go->GetRespawnDelay());
if (GameObject* gameObject = instance->GetGameObject(ThorimChestGUID))
gameObject->SetRespawnTime(gameObject->GetRespawnDelay());
break;
case TYPE_FREYA:
case BOSS_FREYA:
if (state == DONE)
if (GameObject* go = instance->GetGameObject(uiFreyaChestGUID))
go->SetRespawnTime(go->GetRespawnDelay());
if (GameObject* gameObject = instance->GetGameObject(FreyaChestGUID))
gameObject->SetRespawnTime(gameObject->GetRespawnDelay());
break;
}
}
return true;
return true;
}
void SetData(uint32 type, uint32 data)
{
switch(type)
switch (type)
{
case TYPE_COLOSSUS:
uiEncounter[TYPE_COLOSSUS] = data;
Encounter[TYPE_COLOSSUS] = data;
if (data == 2)
{
if (Creature* pBoss = instance->GetCreature(uiLeviathanGUID))
pBoss->AI()->DoAction(10);
if (GameObject* pGate = instance->GetGameObject(uiLeviathanGateGUID))
pGate->SetGoState(GO_STATE_ACTIVE_ALTERNATIVE);
if (Creature* Leviathan = instance->GetCreature(LeviathanGUID))
Leviathan->AI()->DoAction(10);
if (GameObject* gameObject = instance->GetGameObject(LeviathanGateGUID))
gameObject->SetGoState(GO_STATE_ACTIVE_ALTERNATIVE);
SaveToDB();
}
break;
@@ -427,45 +447,78 @@ public:
switch (type)
{
case DATA_LEFT_ARM:
uiLeftArmGUID = data;
LeftArmGUID = data;
break;
case DATA_RIGHT_ARM:
uiRightArmGUID = data;
RightArmGUID = data;
break;
}
}
uint64 GetData64(uint32 data)
{
switch(data)
switch (data)
{
case TYPE_LEVIATHAN: return uiLeviathanGUID;
case TYPE_IGNIS: return uiIgnisGUID;
case TYPE_RAZORSCALE: return uiRazorscaleGUID;
case DATA_RAZORSCALE_CONTROL: return uiRazorscaleController;
case TYPE_XT002: return uiXT002GUID;
case TYPE_KOLOGARN: return uiKologarnGUID;
case DATA_LEFT_ARM: return uiLeftArmGUID;
case DATA_RIGHT_ARM: return uiRightArmGUID;
case TYPE_AURIAYA: return uiAuriayaGUID;
case TYPE_MIMIRON: return uiMimironGUID;
case TYPE_HODIR: return uiHodirGUID;
case TYPE_THORIM: return uiThorimGUID;
case TYPE_FREYA: return uiFreyaGUID;
case TYPE_VEZAX: return uiVezaxGUID;
case TYPE_YOGGSARON: return uiYoggSaronGUID;
case TYPE_ALGALON: return uiAlgalonGUID;
case BOSS_LEVIATHAN:
return LeviathanGUID;
case BOSS_IGNIS:
return IgnisGUID;
case BOSS_RAZORSCALE:
return RazorscaleGUID;
case DATA_RAZORSCALE_CONTROL:
return RazorscaleController;
case BOSS_XT002:
return XT002GUID;
case BOSS_KOLOGARN:
return KologarnGUID;
case DATA_LEFT_ARM:
return LeftArmGUID;
case DATA_RIGHT_ARM:
return RightArmGUID;
case BOSS_AURIAYA:
return AuriayaGUID;
case BOSS_MIMIRON:
return MimironGUID;
case BOSS_HODIR:
return HodirGUID;
case BOSS_THORIM:
return ThorimGUID;
case BOSS_FREYA:
return FreyaGUID;
case BOSS_VEZAX:
return VezaxGUID;
case BOSS_YOGGSARON:
return YoggSaronGUID;
case BOSS_ALGALON:
return AlgalonGUID;
// razorscale expedition commander
case DATA_EXP_COMMANDER: return uiExpCommanderGUID;
case GO_RAZOR_HARPOON_1: return uiRazorHarpoonGUIDs[0];
case GO_RAZOR_HARPOON_2: return uiRazorHarpoonGUIDs[1];
case GO_RAZOR_HARPOON_3: return uiRazorHarpoonGUIDs[2];
case GO_RAZOR_HARPOON_4: return uiRazorHarpoonGUIDs[3];
// Razorscale expedition commander
case DATA_EXPEDITION_COMMANDER:
return ExpeditionCommanderGUID;
case GO_RAZOR_HARPOON_1:
return RazorHarpoonGUIDs[0];
case GO_RAZOR_HARPOON_2:
return RazorHarpoonGUIDs[1];
case GO_RAZOR_HARPOON_3:
return RazorHarpoonGUIDs[2];
case GO_RAZOR_HARPOON_4:
return RazorHarpoonGUIDs[3];
// Assembly of Iron
case DATA_STEELBREAKER: return uiAssemblyGUIDs[0];
case DATA_MOLGEIM: return uiAssemblyGUIDs[1];
case DATA_BRUNDIR: return uiAssemblyGUIDs[2];
case BOSS_STEELBREAKER:
return AssemblyGUIDs[0];
case BOSS_MOLGEIM:
return AssemblyGUIDs[1];
case BOSS_BRUNDIR:
return AssemblyGUIDs[2];
// Freya's Keepers
case BOSS_BRIGHTLEAF:
return KeeperGUIDs[0];
case BOSS_IRONBRANCH:
return KeeperGUIDs[1];
case BOSS_STONEBARK:
return KeeperGUIDs[2];
}
return 0;
@@ -473,10 +526,10 @@ public:
uint32 GetData(uint32 type)
{
switch(type)
switch (type)
{
case TYPE_COLOSSUS:
return uiEncounter[type];
return Encounter[type];
}
return 0;

View File

@@ -18,118 +18,125 @@
#ifndef DEF_ULDUAR_H
#define DEF_ULDUAR_H
enum UlduarTypes
enum UlduarBosses
{
MAX_ENCOUNTER = 15,
MAX_ENCOUNTER = 20,
TYPE_LEVIATHAN = 0,
TYPE_IGNIS = 1,
TYPE_RAZORSCALE = 2,
TYPE_XT002 = 3,
TYPE_ASSEMBLY = 4,
TYPE_KOLOGARN = 5,
TYPE_AURIAYA = 6,
TYPE_MIMIRON = 7,
TYPE_HODIR = 8,
TYPE_THORIM = 9,
TYPE_FREYA = 10,
TYPE_VEZAX = 11,
TYPE_YOGGSARON = 12,
TYPE_ALGALON = 13,
TYPE_COLOSSUS = 14,
BOSS_LEVIATHAN = 0,
BOSS_IGNIS = 1,
BOSS_RAZORSCALE = 2,
BOSS_XT002 = 3,
BOSS_ASSEMBLY_OF_IRON = 4,
BOSS_STEELBREAKER = 5,
BOSS_MOLGEIM = 6,
BOSS_BRUNDIR = 7,
BOSS_KOLOGARN = 8,
BOSS_AURIAYA = 9,
BOSS_MIMIRON = 10,
BOSS_HODIR = 11,
BOSS_THORIM = 12,
BOSS_FREYA = 13,
BOSS_BRIGHTLEAF = 14,
BOSS_IRONBRANCH = 15,
BOSS_STONEBARK = 16,
BOSS_VEZAX = 17,
BOSS_YOGGSARON = 18,
BOSS_ALGALON = 19,
TYPE_COLOSSUS = 20,
// Assembly of Iorn
DATA_STEELBREAKER,
DATA_MOLGEIM,
DATA_BRUNDIR,
DATA_EXP_COMMANDER,
// Razorscale
DATA_EXPEDITION_COMMANDER,
DATA_RAZORSCALE_CONTROL,
// Kologarn:
// Kologarn
DATA_LEFT_ARM,
DATA_RIGHT_ARM,
};
enum UlduarNPCs
{
NPC_LEVIATHAN = 33113,
NPC_IGNIS = 33118,
NPC_RAZORSCALE = 33186,
NPC_RAZORSCALE_CONTROLLER = 33233,
NPC_STEELFORGED_DEFFENDER = 33236,
NPC_EXPEDITION_COMMANDER = 33210,
NPC_XT002 = 33293,
NPC_STEELBREAKER = 32867,
NPC_MOLGEIM = 32927,
NPC_BRUNDIR = 32857,
NPC_KOLOGARN = 32930,
NPC_KOLOGARN_BRIDGE = 34297,
NPC_FOCUSED_EYEBEAM = 33632,
NPC_FOCUSED_EYEBEAM_RIGHT = 33802,
NPC_LEFT_ARM = 32933,
NPC_RIGHT_ARM = 32934,
NPC_RUBBLE = 33768,
NPC_AURIAYA = 33515,
NPC_MIMIRON = 33350,
NPC_HODIR = 32845,
NPC_THORIM = 32865,
NPC_FREYA = 32906,
NPC_VEZAX = 33271,
NPC_YOGGSARON = 33288,
NPC_ALGALON = 32871,
NPC_LEVIATHAN_MKII = 33432,
NPC_VX_001 = 33651,
NPC_AERIAL_COMMAND_UNIT = 33670,
NPC_LEVIATHAN = 33113,
NPC_IGNIS = 33118,
NPC_RAZORSCALE = 33186,
NPC_RAZORSCALE_CONTROLLER = 33233,
NPC_STEELFORGED_DEFFENDER = 33236,
NPC_EXPEDITION_COMMANDER = 33210,
NPC_XT002 = 33293,
NPC_STEELBREAKER = 32867,
NPC_MOLGEIM = 32927,
NPC_BRUNDIR = 32857,
NPC_KOLOGARN = 32930,
NPC_KOLOGARN_BRIDGE = 34297,
NPC_FOCUSED_EYEBEAM = 33632,
NPC_FOCUSED_EYEBEAM_RIGHT = 33802,
NPC_LEFT_ARM = 32933,
NPC_RIGHT_ARM = 32934,
NPC_RUBBLE = 33768,
NPC_AURIAYA = 33515,
NPC_MIMIRON = 33350,
NPC_HODIR = 32845,
NPC_THORIM = 32865,
NPC_FREYA = 32906,
NPC_VEZAX = 33271,
NPC_YOGGSARON = 33288,
NPC_ALGALON = 32871,
NPC_LEVIATHAN_MKII = 33432,
NPC_VX_001 = 33651,
NPC_AERIAL_COMMAND_UNIT = 33670,
// Freya's Keepers
NPC_IRONBRANCH = 32913,
NPC_BRIGHTLEAF = 32915,
NPC_STONEBARK = 32914,
// Hodir's Helper NPCs
NPC_TOR_GREYCLOUD = 32941,
NPC_KAR_GREYCLOUD = 33333,
NPC_EIVI_NIGHTFEATHER = 33325,
NPC_ELLIE_NIGHTFEATHER = 32901,
NPC_SPIRITWALKER_TARA = 33332,
NPC_SPIRITWALKER_YONA = 32950,
NPC_ELEMENTALIST_MAHFUUN = 33328,
NPC_ELEMENTALIST_AVUUN = 32900,
NPC_AMIRA_BLAZEWEAVER = 33331,
NPC_VEESHA_BLAZEWEAVER = 32946,
NPC_MISSY_FLAMECUFFS = 32893,
NPC_SISSY_FLAMECUFFS = 33327,
NPC_BATTLE_PRIEST_ELIZA = 32948,
NPC_BATTLE_PRIEST_GINA = 33330,
NPC_FIELD_MEDIC_PENNY = 32897,
NPC_FIELD_MEDIC_JESSI = 33326,
NPC_TOR_GREYCLOUD = 32941,
NPC_KAR_GREYCLOUD = 33333,
NPC_EIVI_NIGHTFEATHER = 33325,
NPC_ELLIE_NIGHTFEATHER = 32901,
NPC_SPIRITWALKER_TARA = 33332,
NPC_SPIRITWALKER_YONA = 32950,
NPC_ELEMENTALIST_MAHFUUN = 33328,
NPC_ELEMENTALIST_AVUUN = 32900,
NPC_AMIRA_BLAZEWEAVER = 33331,
NPC_VEESHA_BLAZEWEAVER = 32946,
NPC_MISSY_FLAMECUFFS = 32893,
NPC_SISSY_FLAMECUFFS = 33327,
NPC_BATTLE_PRIEST_ELIZA = 32948,
NPC_BATTLE_PRIEST_GINA = 33330,
NPC_FIELD_MEDIC_PENNY = 32897,
NPC_FIELD_MEDIC_JESSI = 33326,
};
enum UlduarGameObjects
{
GO_KOLOGARN_CHEST_HERO = 195047,
GO_KOLOGARN_CHEST = 195046,
GO_KOLOGARN_BRIDGE = 194232,
GO_KOLOGARN_DOOR = 194553,
GO_THORIM_CHEST_HERO = 194315,
GO_THORIM_CHEST = 194314,
GO_HODIR_CHEST_HERO = 194308,
GO_HODIR_CHEST = 194307,
GO_FREYA_CHEST_HERO = 194325,
GO_FREYA_CHEST = 194324,
GO_LEVIATHAN_DOOR = 194905,
GO_LEVIATHAN_GATE = 194630,
GO_VEZAX_DOOR = 194750,
GO_MOLE_MACHINE = 194316,
GO_RAZOR_HARPOON_1 = 194542,
GO_RAZOR_HARPOON_2 = 194541,
GO_RAZOR_HARPOON_3 = 194543,
GO_RAZOR_HARPOON_4 = 194519,
GO_RAZOR_BROKEN_HARPOON = 194565,
GO_KOLOGARN_CHEST_HERO = 195047,
GO_KOLOGARN_CHEST = 195046,
GO_KOLOGARN_BRIDGE = 194232,
GO_KOLOGARN_DOOR = 194553,
GO_THORIM_CHEST_HERO = 194315,
GO_THORIM_CHEST = 194314,
GO_HODIR_CHEST_HERO = 194308,
GO_HODIR_CHEST = 194307,
GO_FREYA_CHEST_HERO = 194325,
GO_FREYA_CHEST = 194324,
GO_LEVIATHAN_DOOR = 194905,
GO_LEVIATHAN_GATE = 194630,
GO_VEZAX_DOOR = 194750,
GO_MOLE_MACHINE = 194316,
GO_RAZOR_HARPOON_1 = 194542,
GO_RAZOR_HARPOON_2 = 194541,
GO_RAZOR_HARPOON_3 = 194543,
GO_RAZOR_HARPOON_4 = 194519,
GO_RAZOR_BROKEN_HARPOON = 194565,
};
enum UlduarTowerEvents
{
EVENT_TOWER_OF_STORM_DESTROYED = 21031,
EVENT_TOWER_OF_FROST_DESTROYED = 21032,
EVENT_TOWER_OF_FLAMES_DESTROYED = 21033,
EVENT_TOWER_OF_LIFE_DESTROYED = 21030
EVENT_TOWER_OF_STORM_DESTROYED = 21031,
EVENT_TOWER_OF_FROST_DESTROYED = 21032,
EVENT_TOWER_OF_FLAMES_DESTROYED = 21033,
EVENT_TOWER_OF_LIFE_DESTROYED = 21030,
};
enum UlduarAchievementCriteria

View File

@@ -33,85 +33,88 @@ The teleporter appears to be active and stable.
- Conservatory of Life
*/
#define BASE_CAMP 200
#define GROUNDS 201
#define FORGE 202
#define SCRAPYARD 203
#define ANTECHAMBER 204
#define WALKWAY 205
#define CONSERVATORY 206
enum UlduarTeleporter
{
BASE_CAMP = 200,
GROUNDS = 201,
FORGE = 202,
SCRAPYARD = 203,
ANTECHAMBER = 204,
WALKWAY = 205,
CONSERVATORY = 206,
};
class ulduar_teleporter : public GameObjectScript
{
public:
ulduar_teleporter() : GameObjectScript("ulduar_teleporter") { }
public:
ulduar_teleporter() : GameObjectScript("ulduar_teleporter") { }
bool OnGossipSelect(Player *pPlayer, GameObject * /*pGO*/, uint32 sender, uint32 action)
{
pPlayer->PlayerTalkClass->ClearMenus();
if (sender != GOSSIP_SENDER_MAIN)
return false;
if (!pPlayer->getAttackers().empty())
return false;
switch(action)
bool OnGossipSelect(Player* player, GameObject* /*gameObject*/, uint32 sender, uint32 action)
{
case BASE_CAMP:
pPlayer->TeleportTo(603, -706.122f, -92.6024f, 429.876f, 0.0f);
pPlayer->CLOSE_GOSSIP_MENU();
break;
case GROUNDS:
pPlayer->TeleportTo(603, 131.248f, -35.3802f, 409.804f, 0.0f);
pPlayer->CLOSE_GOSSIP_MENU();
break;
case FORGE:
pPlayer->TeleportTo(603, 553.233f, -12.3247f, 409.679f, 0.0f);
pPlayer->CLOSE_GOSSIP_MENU();
break;
case SCRAPYARD:
pPlayer->TeleportTo(603, 926.292f, -11.4635f, 418.595f, 0.0f);
pPlayer->CLOSE_GOSSIP_MENU();
break;
case ANTECHAMBER:
pPlayer->TeleportTo(603, 1498.09f, -24.246f, 420.967f, 0.0f);
pPlayer->CLOSE_GOSSIP_MENU();
break;
case WALKWAY:
pPlayer->TeleportTo(603, 1859.45f, -24.1f, 448.9f, 0.0f);
pPlayer->CLOSE_GOSSIP_MENU();
break;
case CONSERVATORY:
pPlayer->TeleportTo(603, 2086.27f, -24.3134f, 421.239f, 0.0f);
pPlayer->CLOSE_GOSSIP_MENU();
break;
}
player->PlayerTalkClass->ClearMenus();
if (sender != GOSSIP_SENDER_MAIN)
return false;
if (!player->getAttackers().empty())
return false;
return true;
}
bool OnGossipHello(Player *pPlayer, GameObject *pGO)
{
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Teleport to the Expedition Base Camp", GOSSIP_SENDER_MAIN, BASE_CAMP);
if (InstanceScript* pInstance = pGO->GetInstanceScript())
{
if (pInstance->GetData(TYPE_COLOSSUS) == 2) //count of 2 collossus death
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Teleport to the Formation Grounds", GOSSIP_SENDER_MAIN, GROUNDS);
if (pInstance->GetBossState(TYPE_LEVIATHAN) == DONE)
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Teleport to the Colossal Forge", GOSSIP_SENDER_MAIN, FORGE);
if (pInstance->GetBossState(TYPE_XT002) == DONE)
switch (action)
{
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Teleport to the Scrapyard", GOSSIP_SENDER_MAIN, SCRAPYARD);
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Teleport to the Antechamber of Ulduar", GOSSIP_SENDER_MAIN, ANTECHAMBER);
case BASE_CAMP:
player->TeleportTo(603, -706.122f, -92.6024f, 429.876f, 0.0f);
player->CLOSE_GOSSIP_MENU();
break;
case GROUNDS:
player->TeleportTo(603, 131.248f, -35.3802f, 409.804f, 0.0f);
player->CLOSE_GOSSIP_MENU();
break;
case FORGE:
player->TeleportTo(603, 553.233f, -12.3247f, 409.679f, 0.0f);
player->CLOSE_GOSSIP_MENU();
break;
case SCRAPYARD:
player->TeleportTo(603, 926.292f, -11.4635f, 418.595f, 0.0f);
player->CLOSE_GOSSIP_MENU();
break;
case ANTECHAMBER:
player->TeleportTo(603, 1498.09f, -24.246f, 420.967f, 0.0f);
player->CLOSE_GOSSIP_MENU();
break;
case WALKWAY:
player->TeleportTo(603, 1859.45f, -24.1f, 448.9f, 0.0f);
player->CLOSE_GOSSIP_MENU();
break;
case CONSERVATORY:
player->TeleportTo(603, 2086.27f, -24.3134f, 421.239f, 0.0f);
player->CLOSE_GOSSIP_MENU();
break;
}
if (pInstance->GetBossState(TYPE_KOLOGARN) == DONE)
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Teleport to the Shattered Walkway", GOSSIP_SENDER_MAIN, WALKWAY);
if (pInstance->GetBossState(TYPE_AURIAYA) == DONE)
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Teleport to the Conservatory of Life", GOSSIP_SENDER_MAIN, CONSERVATORY);
}
pPlayer->SEND_GOSSIP_MENU(pGO->GetGOInfo()->GetGossipMenuId(), pGO->GetGUID());
return true;
}
return true;
}
bool OnGossipHello(Player* player, GameObject* gameObject)
{
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
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);
if (instance->GetBossState(BOSS_XT002) == DONE)
{
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Teleport to the Scrapyard", GOSSIP_SENDER_MAIN, SCRAPYARD);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Teleport to the Antechamber of Ulduar", GOSSIP_SENDER_MAIN, ANTECHAMBER);
}
if (instance->GetBossState(BOSS_KOLOGARN) == DONE)
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Teleport to the Shattered Walkway", GOSSIP_SENDER_MAIN, WALKWAY);
if (instance->GetBossState(BOSS_AURIAYA) == DONE)
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Teleport to the Conservatory of Life", GOSSIP_SENDER_MAIN, CONSERVATORY);
}
player->SEND_GOSSIP_MENU(gameObject->GetGOInfo()->GetGossipMenuId(), gameObject->GetGUID());
return true;
}
};
void AddSC_ulduar_teleporter()