mirror of
https://github.com/mod-playerbots/azerothcore-wotlk.git
synced 2026-02-02 02:23:49 +00:00
Big re-organization of repository [W.I.P]
This commit is contained in:
@@ -1,609 +0,0 @@
|
||||
/*
|
||||
REWRITTEN BY XINEF
|
||||
*/
|
||||
|
||||
#include "ScriptMgr.h"
|
||||
#include "ScriptedCreature.h"
|
||||
#include "arcatraz.h"
|
||||
|
||||
|
||||
enum MillhouseSays
|
||||
{
|
||||
SAY_INTRO_1 = 0,
|
||||
SAY_INTRO_2 = 1,
|
||||
SAY_WATER = 2,
|
||||
SAY_BUFFS = 3,
|
||||
SAY_DRINK = 4,
|
||||
SAY_READY = 5,
|
||||
SAY_KILL = 6,
|
||||
SAY_PYRO = 7,
|
||||
SAY_ICEBLOCK = 8,
|
||||
SAY_LOWHP = 9,
|
||||
SAY_DEATH = 10,
|
||||
SAY_COMPLETE = 11,
|
||||
SAY_INTRO_3 = 12,
|
||||
SAY_INTRO_4 = 13,
|
||||
};
|
||||
|
||||
enum MillhouseSpells
|
||||
{
|
||||
SPELL_CONJURE_WATER = 36879,
|
||||
SPELL_ARCANE_INTELLECT = 36880,
|
||||
SPELL_ICE_ARMOR = 36881,
|
||||
SPELL_ARCANE_MISSILES = 33832,
|
||||
SPELL_CONE_OF_COLD = 12611,
|
||||
SPELL_FIRE_BLAST = 13341,
|
||||
SPELL_FIREBALL = 14034,
|
||||
SPELL_FROSTBOLT = 15497,
|
||||
SPELL_PYROBLAST = 33975,
|
||||
SPELL_ICEBLOCK = 36911,
|
||||
};
|
||||
|
||||
enum MillhouseEvents
|
||||
{
|
||||
EVENT_MILLHOUSE_INTRO1 = 1,
|
||||
EVENT_MILLHOUSE_INTRO2 = 2,
|
||||
EVENT_MILLHOUSE_INTRO3 = 3,
|
||||
EVENT_MILLHOUSE_INTRO4 = 4,
|
||||
EVENT_MILLHOUSE_INTRO5 = 5,
|
||||
EVENT_MILLHOUSE_INTRO6 = 6,
|
||||
EVENT_MILLHOUSE_INTRO7 = 7,
|
||||
EVENT_MILLHOUSE_INTRO8 = 8,
|
||||
EVENT_MILLHOUSE_INTRO9 = 9,
|
||||
EVENT_SEARCH_FIGHT = 10,
|
||||
EVENT_TELEPORT_VISUAL = 11,
|
||||
|
||||
EVENT_MILL_CHECK_HEALTH = 20,
|
||||
EVENT_MILL_PYROBLAST = 21,
|
||||
EVENT_MILL_BASE_SPELL = 22,
|
||||
EVENT_MILL_ICEBLOCK = 23
|
||||
};
|
||||
|
||||
class npc_millhouse_manastorm : public CreatureScript
|
||||
{
|
||||
public:
|
||||
npc_millhouse_manastorm() : CreatureScript("npc_millhouse_manastorm") { }
|
||||
|
||||
struct npc_millhouse_manastormAI : public ScriptedAI
|
||||
{
|
||||
npc_millhouse_manastormAI(Creature* creature) : ScriptedAI(creature)
|
||||
{
|
||||
instance = creature->GetInstanceScript();
|
||||
}
|
||||
|
||||
InstanceScript* instance;
|
||||
EventMap events;
|
||||
EventMap events2;
|
||||
|
||||
void InitializeAI()
|
||||
{
|
||||
ScriptedAI::InitializeAI();
|
||||
|
||||
me->SetReactState(REACT_PASSIVE);
|
||||
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC|UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
events2.Reset();
|
||||
events2.ScheduleEvent(EVENT_TELEPORT_VISUAL, 0);
|
||||
events2.ScheduleEvent(EVENT_MILLHOUSE_INTRO1, 3000);
|
||||
}
|
||||
|
||||
void Reset()
|
||||
{
|
||||
events.Reset();
|
||||
}
|
||||
|
||||
void AttackStart(Unit* who)
|
||||
{
|
||||
if (who && me->Attack(who, true))
|
||||
me->GetMotionMaster()->MoveChase(who, 20.0f);
|
||||
}
|
||||
|
||||
void KilledUnit(Unit* /*who*/)
|
||||
{
|
||||
Talk(SAY_KILL);
|
||||
}
|
||||
|
||||
void JustDied(Unit* /*killer*/)
|
||||
{
|
||||
Talk(SAY_DEATH);
|
||||
}
|
||||
|
||||
void EnterCombat(Unit*)
|
||||
{
|
||||
events.ScheduleEvent(EVENT_MILL_CHECK_HEALTH, 1000);
|
||||
events.ScheduleEvent(EVENT_MILL_PYROBLAST, 30000);
|
||||
events.ScheduleEvent(EVENT_MILL_BASE_SPELL, 2000);
|
||||
events.ScheduleEvent(EVENT_MILL_ICEBLOCK, 1000);
|
||||
}
|
||||
|
||||
void UpdateAI(uint32 diff)
|
||||
{
|
||||
events2.Update(diff);
|
||||
switch (events2.ExecuteEvent())
|
||||
{
|
||||
case EVENT_TELEPORT_VISUAL:
|
||||
me->CastSpell(me, SPELL_TELEPORT_VISUAL, true);
|
||||
break;
|
||||
case EVENT_MILLHOUSE_INTRO1:
|
||||
Talk(SAY_INTRO_1);
|
||||
events2.ScheduleEvent(EVENT_MILLHOUSE_INTRO2, 18000);
|
||||
break;
|
||||
case EVENT_MILLHOUSE_INTRO2:
|
||||
Talk(SAY_INTRO_2);
|
||||
events2.ScheduleEvent(EVENT_MILLHOUSE_INTRO3, 8000);
|
||||
break;
|
||||
case EVENT_MILLHOUSE_INTRO3:
|
||||
Talk(SAY_INTRO_3);
|
||||
events2.ScheduleEvent(EVENT_MILLHOUSE_INTRO4, 6000);
|
||||
break;
|
||||
case EVENT_MILLHOUSE_INTRO4:
|
||||
Talk(SAY_INTRO_4);
|
||||
events2.ScheduleEvent(EVENT_MILLHOUSE_INTRO5, 8000);
|
||||
break;
|
||||
case EVENT_MILLHOUSE_INTRO5:
|
||||
Talk(SAY_WATER);
|
||||
me->CastSpell(me, SPELL_CONJURE_WATER, false);
|
||||
events2.ScheduleEvent(EVENT_MILLHOUSE_INTRO6, 7000);
|
||||
break;
|
||||
case EVENT_MILLHOUSE_INTRO6:
|
||||
Talk(SAY_BUFFS);
|
||||
me->CastSpell(me, SPELL_ICE_ARMOR, false);
|
||||
events2.ScheduleEvent(EVENT_MILLHOUSE_INTRO7, 7000);
|
||||
break;
|
||||
case EVENT_MILLHOUSE_INTRO7:
|
||||
Talk(SAY_DRINK);
|
||||
me->CastSpell(me, SPELL_ARCANE_INTELLECT, false);
|
||||
events2.ScheduleEvent(EVENT_MILLHOUSE_INTRO8, 7000);
|
||||
break;
|
||||
case EVENT_MILLHOUSE_INTRO8:
|
||||
Talk(SAY_READY);
|
||||
me->GetMotionMaster()->MovePoint(1, 445.82f, -158.38f, 43.067f);
|
||||
events2.ScheduleEvent(EVENT_MILLHOUSE_INTRO9, 5000);
|
||||
break;
|
||||
case EVENT_MILLHOUSE_INTRO9:
|
||||
me->SetFacingTo(M_PI*1.5f);
|
||||
me->SetHomePosition(me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), M_PI*1.5f);
|
||||
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC|UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
me->SetReactState(REACT_AGGRESSIVE);
|
||||
events2.ScheduleEvent(EVENT_SEARCH_FIGHT, 1000);
|
||||
break;
|
||||
case EVENT_SEARCH_FIGHT:
|
||||
if (!me->IsInCombat() && !me->IsInEvadeMode())
|
||||
if (Unit* target = me->SelectNearbyTarget(NULL, 30.0f))
|
||||
AttackStart(target);
|
||||
events2.ScheduleEvent(EVENT_SEARCH_FIGHT, 1000);
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
if (!UpdateVictim())
|
||||
return;
|
||||
|
||||
events.Update(diff);
|
||||
if (me->HasUnitState(UNIT_STATE_CASTING))
|
||||
return;
|
||||
|
||||
switch (events.ExecuteEvent())
|
||||
{
|
||||
case EVENT_MILL_CHECK_HEALTH:
|
||||
if (HealthBelowPct(20))
|
||||
{
|
||||
Talk(SAY_LOWHP);
|
||||
break;
|
||||
}
|
||||
events.ScheduleEvent(EVENT_MILL_CHECK_HEALTH, 1000);
|
||||
break;
|
||||
case EVENT_MILL_PYROBLAST:
|
||||
Talk(SAY_PYRO);
|
||||
me->CastSpell(me->GetVictim(), SPELL_PYROBLAST, false);
|
||||
events.ScheduleEvent(EVENT_MILL_PYROBLAST, 30000);
|
||||
break;
|
||||
case EVENT_MILL_ICEBLOCK:
|
||||
if (me->GetDistance(me->GetVictim()) < 5.0f)
|
||||
{
|
||||
Talk(SAY_ICEBLOCK);
|
||||
me->CastSpell(me, SPELL_ICEBLOCK, true);
|
||||
break;
|
||||
}
|
||||
events.ScheduleEvent(EVENT_MILL_ICEBLOCK, 1000);
|
||||
break;
|
||||
case EVENT_MILL_BASE_SPELL:
|
||||
switch (RAND(SPELL_FIREBALL, SPELL_ARCANE_MISSILES, SPELL_FROSTBOLT))
|
||||
{
|
||||
case SPELL_FIREBALL:
|
||||
me->CastSpell(me->GetVictim(), SPELL_FIREBALL, false);
|
||||
events.ScheduleEvent(EVENT_MILL_BASE_SPELL, 4000);
|
||||
break;
|
||||
case SPELL_ARCANE_MISSILES:
|
||||
me->CastSpell(me->GetVictim(), SPELL_ARCANE_MISSILES, false);
|
||||
events.ScheduleEvent(EVENT_MILL_BASE_SPELL, 9000);
|
||||
break;
|
||||
case SPELL_FROSTBOLT:
|
||||
me->CastSpell(me->GetVictim(), SPELL_FROSTBOLT, false);
|
||||
events.ScheduleEvent(EVENT_MILL_BASE_SPELL, 4000);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
DoMeleeAttackIfReady();
|
||||
}
|
||||
};
|
||||
|
||||
CreatureAI* GetAI(Creature* creature) const
|
||||
{
|
||||
return new npc_millhouse_manastormAI(creature);
|
||||
}
|
||||
};
|
||||
|
||||
enum WardenSays
|
||||
{
|
||||
YELL_INTRO1 = 0,
|
||||
YELL_INTRO2 = 1,
|
||||
YELL_RELEASE1 = 2,
|
||||
YELL_RELEASE2A = 3,
|
||||
YELL_RELEASE2B = 4,
|
||||
YELL_RELEASE3 = 5,
|
||||
YELL_RELEASE4 = 6,
|
||||
YELL_WELCOME = 7,
|
||||
|
||||
SAY_HARBINGER_INTRO = 0,
|
||||
};
|
||||
|
||||
enum WardenUnits
|
||||
{
|
||||
NPC_TRICKSTER = 20905,
|
||||
NPC_PH_HUNTER = 20906,
|
||||
NPC_MILLHOUSE = 20977,
|
||||
NPC_AKKIRIS = 20908,
|
||||
NPC_SULFURON = 20909,
|
||||
NPC_TW_DRAK = 20910,
|
||||
NPC_BL_DRAK = 20911,
|
||||
};
|
||||
|
||||
enum WardenSpells
|
||||
{
|
||||
SPELL_TARGET_ALPHA = 36858,
|
||||
SPELL_TARGET_BETA = 36854,
|
||||
SPELL_TARGET_DELTA = 36856,
|
||||
SPELL_TARGET_GAMMA = 36857,
|
||||
SPELL_TARGET_OMEGA = 36852,
|
||||
SPELL_BUBBLE_VISUAL = 36849,
|
||||
|
||||
SPELL_MIND_REND = 36859,
|
||||
SPELL_QID10886 = 39564 // Trial of the Naaru: Tenacity
|
||||
};
|
||||
|
||||
enum WardenEvents
|
||||
{
|
||||
EVENT_WARDEN_CHECK_PLAYERS = 1,
|
||||
EVENT_WARDEN_INTRO1 = 2,
|
||||
EVENT_WARDEN_INTRO2,
|
||||
EVENT_WARDEN_INTRO3,
|
||||
EVENT_WARDEN_INTRO4,
|
||||
EVENT_WARDEN_INTRO5,
|
||||
EVENT_WARDEN_INTRO6,
|
||||
EVENT_WARDEN_INTRO7,
|
||||
EVENT_WARDEN_INTRO8,
|
||||
EVENT_WARDEN_INTRO9,
|
||||
EVENT_WARDEN_INTRO10,
|
||||
EVENT_WARDEN_INTRO11,
|
||||
EVENT_WARDEN_INTRO12,
|
||||
EVENT_WARDEN_INTRO13,
|
||||
EVENT_WARDEN_INTRO14,
|
||||
EVENT_WARDEN_INTRO15,
|
||||
EVENT_WARDEN_INTRO16,
|
||||
EVENT_WARDEN_INTRO17,
|
||||
EVENT_WARDEN_INTRO18,
|
||||
EVENT_WARDEN_INTRO19,
|
||||
EVENT_WARDEN_INTRO20,
|
||||
EVENT_WARDEN_INTRO21,
|
||||
EVENT_WARDEN_INTRO22,
|
||||
EVENT_WARDEN_INTRO23,
|
||||
EVENT_WARDEN_INTRO24,
|
||||
EVENT_WARDEN_INTRO25,
|
||||
EVENT_WARDEN_INTRO26,
|
||||
EVENT_WARDEN_INTRO27,
|
||||
EVENT_WARDEN_INTRO28,
|
||||
EVENT_WARDEN_INTRO29
|
||||
};
|
||||
|
||||
class npc_warden_mellichar : public CreatureScript
|
||||
{
|
||||
public:
|
||||
npc_warden_mellichar() : CreatureScript("npc_warden_mellichar") { }
|
||||
|
||||
struct npc_warden_mellicharAI : public BossAI
|
||||
{
|
||||
npc_warden_mellicharAI(Creature* creature) : BossAI(creature, DATA_WARDEN_MELLICHAR)
|
||||
{
|
||||
}
|
||||
|
||||
void JustSummoned(Creature* summon)
|
||||
{
|
||||
summons.Summon(summon);
|
||||
}
|
||||
|
||||
void SummonedCreatureDies(Creature* summon, Unit*)
|
||||
{
|
||||
if (summon->GetEntry() == NPC_HARBINGER_SKYRISS)
|
||||
{
|
||||
Unit::Kill(me, me);
|
||||
me->setActive(false);
|
||||
instance->SetBossState(DATA_WARDEN_MELLICHAR, DONE);
|
||||
if (Creature* creature = summons.GetCreatureWithEntry(NPC_MILLHOUSE))
|
||||
{
|
||||
instance->DoCastSpellOnPlayers(SPELL_QID10886);
|
||||
creature->AI()->Talk(SAY_COMPLETE);
|
||||
creature->SetUInt32Value(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void MoveInLineOfSight(Unit*) { }
|
||||
void AttackStart(Unit*) { }
|
||||
void EnterCombat(Unit*) { }
|
||||
|
||||
void JustDied(Unit*)
|
||||
{
|
||||
me->setActive(false);
|
||||
}
|
||||
|
||||
void Reset()
|
||||
{
|
||||
_Reset();
|
||||
me->setActive(false);
|
||||
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC|UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
me->RemoveFlag(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_DEAD);
|
||||
me->RemoveFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_FEIGN_DEATH);
|
||||
me->CastSpell((Unit*)NULL, SPELL_TARGET_OMEGA, false);
|
||||
instance->HandleGameObject(instance->GetData64(DATA_WARDENS_SHIELD), true);
|
||||
instance->SetBossState(DATA_WARDEN_MELLICHAR, NOT_STARTED);
|
||||
|
||||
}
|
||||
|
||||
void DamageTaken(Unit* attacker, uint32& damage, DamageEffectType, SpellSchoolMask)
|
||||
{
|
||||
if (attacker && IS_PLAYER_GUID(attacker->GetCharmerOrOwnerOrOwnGUID()) && damage > 0 && !me->isActiveObject())
|
||||
{
|
||||
me->setActive(true);
|
||||
me->InterruptNonMeleeSpells(false);
|
||||
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC|UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
events.ScheduleEvent(EVENT_WARDEN_INTRO1, 1500);
|
||||
events.ScheduleEvent(EVENT_WARDEN_CHECK_PLAYERS, 1000);
|
||||
instance->SetBossState(DATA_WARDEN_MELLICHAR, IN_PROGRESS);
|
||||
}
|
||||
damage = 0;
|
||||
}
|
||||
|
||||
void SetData(uint32 type, uint32 data)
|
||||
{
|
||||
if (data == FAIL)
|
||||
{
|
||||
CreatureAI::EnterEvadeMode();
|
||||
return;
|
||||
}
|
||||
if (data != DONE)
|
||||
return;
|
||||
|
||||
switch (type)
|
||||
{
|
||||
case DATA_WARDEN_1:
|
||||
events.ScheduleEvent(EVENT_WARDEN_INTRO8, 2000);
|
||||
break;
|
||||
case DATA_WARDEN_3:
|
||||
events.ScheduleEvent(EVENT_WARDEN_INTRO19, 2000);
|
||||
break;
|
||||
case DATA_WARDEN_4:
|
||||
events.ScheduleEvent(EVENT_WARDEN_INTRO24, 2000);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void UpdateAI(uint32 diff)
|
||||
{
|
||||
events.Update(diff);
|
||||
switch (events.ExecuteEvent())
|
||||
{
|
||||
case EVENT_WARDEN_CHECK_PLAYERS:
|
||||
if (!SelectTargetFromPlayerList(100.0f))
|
||||
{
|
||||
CreatureAI::EnterEvadeMode();
|
||||
return;
|
||||
}
|
||||
events.ScheduleEvent(EVENT_WARDEN_CHECK_PLAYERS, 1000);
|
||||
break;
|
||||
case EVENT_WARDEN_INTRO1:
|
||||
Talk(YELL_INTRO1);
|
||||
me->SetFacingTo(M_PI/2.0f);
|
||||
me->CastSpell(me, SPELL_BUBBLE_VISUAL, false);
|
||||
events.ScheduleEvent(EVENT_WARDEN_INTRO2, 1400);
|
||||
break;
|
||||
case EVENT_WARDEN_INTRO2:
|
||||
instance->HandleGameObject(instance->GetData64(DATA_WARDENS_SHIELD), false);
|
||||
events.ScheduleEvent(EVENT_WARDEN_INTRO3, 20000);
|
||||
break;
|
||||
case EVENT_WARDEN_INTRO3:
|
||||
Talk(YELL_INTRO2);
|
||||
events.ScheduleEvent(EVENT_WARDEN_INTRO4, 5000);
|
||||
break;
|
||||
case EVENT_WARDEN_INTRO4:
|
||||
me->SetFacingTo(0.5f);
|
||||
me->CastSpell((Unit*)NULL, SPELL_TARGET_ALPHA, false);
|
||||
events.ScheduleEvent(EVENT_WARDEN_INTRO5, 2000);
|
||||
break;
|
||||
case EVENT_WARDEN_INTRO5:
|
||||
instance->SetData(DATA_WARDEN_1, IN_PROGRESS);
|
||||
events.ScheduleEvent(EVENT_WARDEN_INTRO6, 3000);
|
||||
break;
|
||||
case EVENT_WARDEN_INTRO6:
|
||||
me->SetFacingTo(M_PI*1.5f);
|
||||
me->CastSpell((Unit*)NULL, SPELL_TARGET_OMEGA, false);
|
||||
events.ScheduleEvent(EVENT_WARDEN_INTRO7, 5000);
|
||||
break;
|
||||
case EVENT_WARDEN_INTRO7:
|
||||
me->SummonCreature(RAND(NPC_TRICKSTER, NPC_PH_HUNTER), 478.326f, -148.505f, 42.56f, 3.19f, TEMPSUMMON_MANUAL_DESPAWN);
|
||||
// Wait for kill
|
||||
break;
|
||||
case EVENT_WARDEN_INTRO8:
|
||||
Talk(YELL_RELEASE1);
|
||||
me->InterruptNonMeleeSpells(false);
|
||||
me->SetFacingTo(2.6f);
|
||||
events.ScheduleEvent(EVENT_WARDEN_INTRO10, 4000);
|
||||
break;
|
||||
case EVENT_WARDEN_INTRO10:
|
||||
me->CastSpell((Unit*)NULL, SPELL_TARGET_BETA, false);
|
||||
events.ScheduleEvent(EVENT_WARDEN_INTRO11, 2000);
|
||||
break;
|
||||
case EVENT_WARDEN_INTRO11:
|
||||
Talk(YELL_RELEASE2A);
|
||||
instance->SetData(DATA_WARDEN_2, IN_PROGRESS);
|
||||
events.ScheduleEvent(EVENT_WARDEN_INTRO12, 2000);
|
||||
break;
|
||||
case EVENT_WARDEN_INTRO12:
|
||||
me->SetFacingTo(M_PI*1.5f);
|
||||
me->CastSpell((Unit*)NULL, SPELL_TARGET_OMEGA, false);
|
||||
events.ScheduleEvent(EVENT_WARDEN_INTRO13, 6000);
|
||||
break;
|
||||
case EVENT_WARDEN_INTRO13:
|
||||
me->SummonCreature(NPC_MILLHOUSE, 413.292f, -148.378f, 42.56f, 6.27f, TEMPSUMMON_MANUAL_DESPAWN);
|
||||
events.ScheduleEvent(EVENT_WARDEN_INTRO14, 14000);
|
||||
break;
|
||||
case EVENT_WARDEN_INTRO14:
|
||||
Talk(YELL_RELEASE2B);
|
||||
me->InterruptNonMeleeSpells(false);
|
||||
me->SetFacingTo(3.3f);
|
||||
events.ScheduleEvent(EVENT_WARDEN_INTRO15, 5000);
|
||||
break;
|
||||
case EVENT_WARDEN_INTRO15:
|
||||
me->CastSpell((Unit*)NULL, SPELL_TARGET_DELTA, false);
|
||||
events.ScheduleEvent(EVENT_WARDEN_INTRO16, 2000);
|
||||
break;
|
||||
case EVENT_WARDEN_INTRO16:
|
||||
instance->SetData(DATA_WARDEN_3, IN_PROGRESS);
|
||||
events.ScheduleEvent(EVENT_WARDEN_INTRO17, 2000);
|
||||
break;
|
||||
case EVENT_WARDEN_INTRO17:
|
||||
me->SetFacingTo(M_PI*1.5f);
|
||||
me->CastSpell((Unit*)NULL, SPELL_TARGET_OMEGA, false);
|
||||
events.ScheduleEvent(EVENT_WARDEN_INTRO18, 6000);
|
||||
break;
|
||||
case EVENT_WARDEN_INTRO18:
|
||||
me->SummonCreature(RAND(NPC_AKKIRIS, NPC_SULFURON), 420.179f, -174.396f, 42.58f, 0.02f, TEMPSUMMON_MANUAL_DESPAWN);
|
||||
// Wait for kill
|
||||
break;
|
||||
case EVENT_WARDEN_INTRO19:
|
||||
Talk(YELL_RELEASE3);
|
||||
me->InterruptNonMeleeSpells(false);
|
||||
me->SetFacingTo(6.05f);
|
||||
events.ScheduleEvent(EVENT_WARDEN_INTRO20, 4000);
|
||||
break;
|
||||
case EVENT_WARDEN_INTRO20:
|
||||
me->CastSpell((Unit*)NULL, SPELL_TARGET_GAMMA, false);
|
||||
events.ScheduleEvent(EVENT_WARDEN_INTRO21, 2000);
|
||||
break;
|
||||
case EVENT_WARDEN_INTRO21:
|
||||
instance->SetData(DATA_WARDEN_4, IN_PROGRESS);
|
||||
events.ScheduleEvent(EVENT_WARDEN_INTRO22, 2000);
|
||||
break;
|
||||
case EVENT_WARDEN_INTRO22:
|
||||
me->SetFacingTo(M_PI*1.5f);
|
||||
me->CastSpell((Unit*)NULL, SPELL_TARGET_OMEGA, false);
|
||||
events.ScheduleEvent(EVENT_WARDEN_INTRO23, 6000);
|
||||
break;
|
||||
case EVENT_WARDEN_INTRO23:
|
||||
me->SummonCreature(RAND(NPC_TW_DRAK, NPC_BL_DRAK), 471.795f, -174.58f, 42.58f, 3.06f, TEMPSUMMON_MANUAL_DESPAWN);
|
||||
// Wait for kill
|
||||
break;
|
||||
case EVENT_WARDEN_INTRO24:
|
||||
instance->SetData(DATA_WARDEN_5, IN_PROGRESS);
|
||||
Talk(YELL_RELEASE4);
|
||||
me->InterruptNonMeleeSpells(false);
|
||||
events.ScheduleEvent(EVENT_WARDEN_INTRO25, 8000);
|
||||
break;
|
||||
case EVENT_WARDEN_INTRO25:
|
||||
if (Creature* cr = me->SummonCreature(NPC_HARBINGER_SKYRISS, 445.763f, -191.639f, 44.64f, 1.60f, TEMPSUMMON_MANUAL_DESPAWN))
|
||||
{
|
||||
cr->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC|UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
cr->CastSpell(cr, SPELL_TELEPORT_VISUAL, true);
|
||||
}
|
||||
events.ScheduleEvent(EVENT_WARDEN_INTRO26, 1000);
|
||||
break;
|
||||
case EVENT_WARDEN_INTRO26:
|
||||
if (Creature* creature = summons.GetCreatureWithEntry(NPC_HARBINGER_SKYRISS))
|
||||
creature->AI()->Talk(SAY_HARBINGER_INTRO);
|
||||
events.ScheduleEvent(EVENT_WARDEN_INTRO27, 23000);
|
||||
break;
|
||||
case EVENT_WARDEN_INTRO27:
|
||||
Talk(YELL_WELCOME);
|
||||
events.ScheduleEvent(EVENT_WARDEN_INTRO28, 5000);
|
||||
break;
|
||||
case EVENT_WARDEN_INTRO28:
|
||||
instance->HandleGameObject(instance->GetData64(DATA_WARDENS_SHIELD), true);
|
||||
if (Creature* creature = summons.GetCreatureWithEntry(NPC_HARBINGER_SKYRISS))
|
||||
creature->CastSpell((Unit*)NULL, SPELL_MIND_REND, false);
|
||||
events.ScheduleEvent(EVENT_WARDEN_INTRO29, 4000);
|
||||
break;
|
||||
|
||||
case EVENT_WARDEN_INTRO29:
|
||||
events.Reset();
|
||||
me->SetFlag(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_DEAD);
|
||||
me->SetFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_FEIGN_DEATH);
|
||||
if (Creature* creature = summons.GetCreatureWithEntry(NPC_HARBINGER_SKYRISS))
|
||||
{
|
||||
creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC|UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
if (Player* player = SelectTargetFromPlayerList(50.0f))
|
||||
AttackStart(player);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
CreatureAI* GetAI(Creature* creature) const
|
||||
{
|
||||
return new npc_warden_mellicharAI(creature);
|
||||
}
|
||||
};
|
||||
|
||||
class spell_arcatraz_soul_steal : public SpellScriptLoader
|
||||
{
|
||||
public:
|
||||
spell_arcatraz_soul_steal() : SpellScriptLoader("spell_arcatraz_soul_steal") { }
|
||||
|
||||
class spell_arcatraz_soul_steal_AuraScript : public AuraScript
|
||||
{
|
||||
PrepareAuraScript(spell_arcatraz_soul_steal_AuraScript)
|
||||
|
||||
void HandleEffectApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
|
||||
{
|
||||
if (Unit* caster = GetCaster())
|
||||
caster->CastSpell(caster, SPELL_SOUL_STEAL, true);
|
||||
}
|
||||
|
||||
void HandleEffectRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
|
||||
{
|
||||
if (Unit* caster = GetCaster())
|
||||
caster->RemoveAurasDueToSpell(SPELL_SOUL_STEAL);
|
||||
}
|
||||
|
||||
void Register()
|
||||
{
|
||||
OnEffectApply += AuraEffectApplyFn(spell_arcatraz_soul_steal_AuraScript::HandleEffectApply, EFFECT_0, SPELL_AURA_MOD_DAMAGE_PERCENT_DONE, AURA_EFFECT_HANDLE_REAL);
|
||||
OnEffectRemove += AuraEffectRemoveFn(spell_arcatraz_soul_steal_AuraScript::HandleEffectRemove, EFFECT_0, SPELL_AURA_MOD_DAMAGE_PERCENT_DONE, AURA_EFFECT_HANDLE_REAL);
|
||||
}
|
||||
};
|
||||
|
||||
AuraScript* GetAuraScript() const
|
||||
{
|
||||
return new spell_arcatraz_soul_steal_AuraScript();
|
||||
}
|
||||
};
|
||||
|
||||
void AddSC_arcatraz()
|
||||
{
|
||||
new npc_millhouse_manastorm();
|
||||
new npc_warden_mellichar();
|
||||
|
||||
new spell_arcatraz_soul_steal();
|
||||
}
|
||||
@@ -1,53 +0,0 @@
|
||||
/*
|
||||
REWRITTEN BY XINEF
|
||||
*/
|
||||
|
||||
#ifndef ARCATRAZ_H
|
||||
#define ARCATRAZ_H
|
||||
|
||||
enum DataTypes
|
||||
{
|
||||
// Encounter States/Boss GUIDs
|
||||
DATA_ZEREKETH = 0,
|
||||
DATA_DALLIAH = 1,
|
||||
DATA_SOCCOTHRATES = 2,
|
||||
DATA_WARDEN_MELLICHAR = 3,
|
||||
MAX_ENCOUTER = 4,
|
||||
|
||||
// Additional Data
|
||||
DATA_WARDEN_1 = 5, // used by SmartAI
|
||||
DATA_WARDEN_2 = 6, // used by SmartAI
|
||||
DATA_WARDEN_3 = 7, // used by SmartAI
|
||||
DATA_WARDEN_4 = 8, // used by SmartAI
|
||||
DATA_WARDEN_5 = 9, // used by SmartAI
|
||||
DATA_WARDENS_SHIELD = 10
|
||||
};
|
||||
|
||||
enum CreatureIds
|
||||
{
|
||||
NPC_DALLIAH = 20885,
|
||||
NPC_SOCCOTHRATES = 20886,
|
||||
NPC_MELLICHAR = 20904,
|
||||
NPC_HARBINGER_SKYRISS = 20912,
|
||||
NPC_ALPHA_POD_TARGET = 21436
|
||||
};
|
||||
|
||||
enum GameObjectIds
|
||||
{
|
||||
GO_CONTAINMENT_CORE_SECURITY_FIELD_ALPHA = 184318, // door opened when Wrath-Scryer Soccothrates dies
|
||||
GO_CONTAINMENT_CORE_SECURITY_FIELD_BETA = 184319, // door opened when Dalliah the Doomsayer dies
|
||||
GO_STASIS_POD_ALPHA = 183961, // pod first boss wave
|
||||
GO_STASIS_POD_BETA = 183963, // pod second boss wave
|
||||
GO_STASIS_POD_DELTA = 183964, // pod third boss wave
|
||||
GO_STASIS_POD_GAMMA = 183962, // pod fourth boss wave
|
||||
GO_STASIS_POD_OMEGA = 183965, // pod fifth boss wave
|
||||
GO_WARDENS_SHIELD = 184802 // shield 'protecting' mellichar
|
||||
};
|
||||
|
||||
enum SpellIds
|
||||
{
|
||||
SPELL_TELEPORT_VISUAL = 35517,
|
||||
SPELL_SOUL_STEAL = 36782
|
||||
};
|
||||
|
||||
#endif // ARCATRAZ_H
|
||||
@@ -1,171 +0,0 @@
|
||||
/*
|
||||
REWRITTEN BY XINEF
|
||||
*/
|
||||
|
||||
#include "ScriptMgr.h"
|
||||
#include "ScriptedCreature.h"
|
||||
#include "arcatraz.h"
|
||||
|
||||
enum Say
|
||||
{
|
||||
// Dalliah the Doomsayer
|
||||
SAY_AGGRO = 1,
|
||||
SAY_SLAY = 2,
|
||||
SAY_WHIRLWIND = 3,
|
||||
SAY_HEAL = 4,
|
||||
SAY_DEATH = 5,
|
||||
SAY_SOCCOTHRATES_DEATH = 7,
|
||||
|
||||
// Wrath-Scryer Soccothrates
|
||||
SAY_AGGRO_DALLIAH_FIRST = 0,
|
||||
SAY_DALLIAH_25_PERCENT = 5
|
||||
};
|
||||
|
||||
enum Spells
|
||||
{
|
||||
SPELL_GIFT_OF_THE_DOOMSAYER = 36173,
|
||||
SPELL_WHIRLWIND = 36142,
|
||||
SPELL_HEAL = 36144,
|
||||
SPELL_SHADOW_WAVE = 39016
|
||||
};
|
||||
|
||||
enum Events
|
||||
{
|
||||
EVENT_GIFT_OF_THE_DOOMSAYER = 1,
|
||||
EVENT_WHIRLWIND = 2,
|
||||
EVENT_HEAL = 3,
|
||||
EVENT_SHADOW_WAVE = 4,
|
||||
EVENT_ME_FIRST = 5,
|
||||
EVENT_SOCCOTHRATES_DEATH = 6,
|
||||
EVENT_CHECK_HEALTH = 7,
|
||||
};
|
||||
|
||||
class boss_dalliah_the_doomsayer : public CreatureScript
|
||||
{
|
||||
public:
|
||||
boss_dalliah_the_doomsayer() : CreatureScript("boss_dalliah_the_doomsayer") { }
|
||||
|
||||
struct boss_dalliah_the_doomsayerAI : public BossAI
|
||||
{
|
||||
boss_dalliah_the_doomsayerAI(Creature* creature) : BossAI(creature, DATA_DALLIAH) { }
|
||||
|
||||
void Reset()
|
||||
{
|
||||
_Reset();
|
||||
events2.Reset();
|
||||
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC|UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
}
|
||||
|
||||
void InitializeAI()
|
||||
{
|
||||
BossAI::InitializeAI();
|
||||
if (instance->GetBossState(DATA_SOCCOTHRATES) != DONE)
|
||||
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC|UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
}
|
||||
|
||||
void JustDied(Unit* /*killer*/)
|
||||
{
|
||||
_JustDied();
|
||||
Talk(SAY_DEATH);
|
||||
|
||||
if (Creature* soccothrates = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_SOCCOTHRATES)))
|
||||
if (soccothrates->IsAlive() && !soccothrates->IsInCombat())
|
||||
soccothrates->AI()->SetData(1, 1);
|
||||
}
|
||||
|
||||
void EnterCombat(Unit* /*who*/)
|
||||
{
|
||||
_EnterCombat();
|
||||
Talk(SAY_AGGRO);
|
||||
|
||||
events.ScheduleEvent(EVENT_GIFT_OF_THE_DOOMSAYER, urand(1000, 4000));
|
||||
events.ScheduleEvent(EVENT_WHIRLWIND, urand(7000, 9000));
|
||||
events.ScheduleEvent(EVENT_ME_FIRST, 6000);
|
||||
events.ScheduleEvent(EVENT_CHECK_HEALTH, 1000);
|
||||
|
||||
if (IsHeroic())
|
||||
events.ScheduleEvent(EVENT_SHADOW_WAVE, urand(11000, 16000));
|
||||
}
|
||||
|
||||
void KilledUnit(Unit* victim)
|
||||
{
|
||||
if (victim->GetTypeId() == TYPEID_PLAYER)
|
||||
Talk(SAY_SLAY);
|
||||
}
|
||||
|
||||
void SetData(uint32 /*type*/, uint32 data)
|
||||
{
|
||||
if (data == 1)
|
||||
events2.ScheduleEvent(EVENT_SOCCOTHRATES_DEATH, 6000);
|
||||
}
|
||||
|
||||
void UpdateAI(uint32 diff)
|
||||
{
|
||||
events2.Update(diff);
|
||||
switch (events2.ExecuteEvent())
|
||||
{
|
||||
case EVENT_SOCCOTHRATES_DEATH:
|
||||
Talk(SAY_SOCCOTHRATES_DEATH);
|
||||
break;
|
||||
}
|
||||
|
||||
if (!UpdateVictim())
|
||||
return;
|
||||
|
||||
events.Update(diff);
|
||||
if (me->HasUnitState(UNIT_STATE_CASTING))
|
||||
return;
|
||||
|
||||
switch (events.ExecuteEvent())
|
||||
{
|
||||
case EVENT_GIFT_OF_THE_DOOMSAYER:
|
||||
me->CastSpell(me->GetVictim(), SPELL_GIFT_OF_THE_DOOMSAYER, false);
|
||||
events.ScheduleEvent(EVENT_GIFT_OF_THE_DOOMSAYER, urand(16000, 21000));
|
||||
break;
|
||||
case EVENT_WHIRLWIND:
|
||||
me->CastSpell(me, SPELL_WHIRLWIND, false);
|
||||
Talk(SAY_WHIRLWIND);
|
||||
events.ScheduleEvent(EVENT_WHIRLWIND, urand(19000, 21000));
|
||||
events.ScheduleEvent(EVENT_HEAL, 6000);
|
||||
break;
|
||||
case EVENT_HEAL:
|
||||
me->CastSpell(me, SPELL_HEAL, false);
|
||||
Talk(SAY_HEAL);
|
||||
break;
|
||||
case EVENT_SHADOW_WAVE:
|
||||
me->CastSpell(me->GetVictim(), SPELL_SHADOW_WAVE, false);
|
||||
events.ScheduleEvent(EVENT_SHADOW_WAVE, urand(11000, 16000));
|
||||
break;
|
||||
case EVENT_ME_FIRST:
|
||||
if (Creature* soccothrates = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_SOCCOTHRATES)))
|
||||
if (soccothrates->IsAlive() && !soccothrates->IsInCombat())
|
||||
soccothrates->AI()->Talk(SAY_AGGRO_DALLIAH_FIRST);
|
||||
break;
|
||||
case EVENT_CHECK_HEALTH:
|
||||
if (HealthBelowPct(25))
|
||||
{
|
||||
if (Creature* soccothrates = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_SOCCOTHRATES)))
|
||||
soccothrates->AI()->Talk(SAY_DALLIAH_25_PERCENT);
|
||||
break;
|
||||
}
|
||||
events.ScheduleEvent(EVENT_CHECK_HEALTH, 1000);
|
||||
break;
|
||||
}
|
||||
|
||||
DoMeleeAttackIfReady();
|
||||
}
|
||||
|
||||
private:
|
||||
EventMap events2;
|
||||
};
|
||||
|
||||
CreatureAI* GetAI(Creature* creature) const
|
||||
{
|
||||
return new boss_dalliah_the_doomsayerAI(creature);
|
||||
}
|
||||
};
|
||||
|
||||
void AddSC_boss_dalliah_the_doomsayer()
|
||||
{
|
||||
new boss_dalliah_the_doomsayer();
|
||||
}
|
||||
@@ -1,174 +0,0 @@
|
||||
/*
|
||||
REWRITTEN BY XINEF
|
||||
*/
|
||||
|
||||
#include "ScriptMgr.h"
|
||||
#include "ScriptedCreature.h"
|
||||
#include "arcatraz.h"
|
||||
|
||||
enum Says
|
||||
{
|
||||
SAY_INTRO = 0,
|
||||
SAY_AGGRO = 1,
|
||||
SAY_KILL = 2,
|
||||
SAY_MIND = 3,
|
||||
SAY_FEAR = 4,
|
||||
SAY_IMAGE = 5,
|
||||
SAY_DEATH = 6
|
||||
};
|
||||
|
||||
enum Spells
|
||||
{
|
||||
SPELL_FEAR = 39415,
|
||||
SPELL_MIND_REND = 36924,
|
||||
SPELL_DOMINATION = 37162,
|
||||
SPELL_MANA_BURN = 39020,
|
||||
SPELL_66_ILLUSION = 36931,
|
||||
SPELL_33_ILLUSION = 36932,
|
||||
|
||||
SPELL_MIND_REND_IMAGE = 36929,
|
||||
H_SPELL_MIND_REND_IMAGE = 39021
|
||||
};
|
||||
|
||||
enum Misc
|
||||
{
|
||||
NPC_HARBINGER_SKYRISS_66 = 21466,
|
||||
|
||||
EVENT_SUMMON_IMAGE1 = 1,
|
||||
EVENT_SUMMON_IMAGE2 = 2,
|
||||
EVENT_SPELL_MIND_REND = 3,
|
||||
EVENT_SPELL_FEAR = 4,
|
||||
EVENT_SPELL_DOMINATION = 5,
|
||||
EVENT_SPELL_MANA_BURN = 6
|
||||
};
|
||||
|
||||
class boss_harbinger_skyriss : public CreatureScript
|
||||
{
|
||||
public:
|
||||
boss_harbinger_skyriss() : CreatureScript("boss_harbinger_skyriss") { }
|
||||
|
||||
struct boss_harbinger_skyrissAI : public ScriptedAI
|
||||
{
|
||||
boss_harbinger_skyrissAI(Creature* creature) : ScriptedAI(creature), summons(me)
|
||||
{
|
||||
instance = creature->GetInstanceScript();
|
||||
}
|
||||
|
||||
InstanceScript* instance;
|
||||
SummonList summons;
|
||||
EventMap events;
|
||||
|
||||
void Reset()
|
||||
{
|
||||
events.Reset();
|
||||
summons.DespawnAll();
|
||||
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC|UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
}
|
||||
|
||||
void EnterCombat(Unit* /*who*/)
|
||||
{
|
||||
Talk(SAY_AGGRO);
|
||||
me->SetInCombatWithZone();
|
||||
|
||||
events.ScheduleEvent(EVENT_SUMMON_IMAGE1, 1000);
|
||||
events.ScheduleEvent(EVENT_SUMMON_IMAGE2, 1000);
|
||||
events.ScheduleEvent(EVENT_SPELL_MIND_REND, 10000);
|
||||
events.ScheduleEvent(EVENT_SPELL_FEAR, 15000);
|
||||
events.ScheduleEvent(EVENT_SPELL_DOMINATION, 30000);
|
||||
if (IsHeroic())
|
||||
events.ScheduleEvent(EVENT_SPELL_MANA_BURN, 25000);
|
||||
}
|
||||
|
||||
void JustDied(Unit* /*killer*/)
|
||||
{
|
||||
Talk(SAY_DEATH);
|
||||
summons.DespawnAll();
|
||||
}
|
||||
|
||||
void JustSummoned(Creature* summon)
|
||||
{
|
||||
summon->SetHealth(summon->CountPctFromMaxHealth(summon->GetEntry() == NPC_HARBINGER_SKYRISS_66 ? 66 : 33));
|
||||
summons.Summon(summon);
|
||||
summon->SetInCombatWithZone();
|
||||
me->UpdatePosition(*summon, true);
|
||||
me->SendMovementFlagUpdate();
|
||||
}
|
||||
|
||||
void KilledUnit(Unit* victim)
|
||||
{
|
||||
if (victim->GetTypeId() == TYPEID_PLAYER)
|
||||
Talk(SAY_KILL);
|
||||
}
|
||||
|
||||
void UpdateAI(uint32 diff)
|
||||
{
|
||||
if (!UpdateVictim())
|
||||
return;
|
||||
|
||||
events.Update(diff);
|
||||
if (me->HasUnitState(UNIT_STATE_CASTING))
|
||||
return;
|
||||
|
||||
switch (events.ExecuteEvent())
|
||||
{
|
||||
case EVENT_SUMMON_IMAGE1:
|
||||
if (HealthBelowPct(67))
|
||||
{
|
||||
Talk(SAY_IMAGE);
|
||||
me->CastSpell(me, SPELL_66_ILLUSION, false);
|
||||
break;
|
||||
}
|
||||
events.ScheduleEvent(EVENT_SUMMON_IMAGE1, 1000);
|
||||
break;
|
||||
case EVENT_SUMMON_IMAGE2:
|
||||
if (HealthBelowPct(34))
|
||||
{
|
||||
Talk(SAY_IMAGE);
|
||||
me->CastSpell(me, SPELL_33_ILLUSION, false);
|
||||
break;
|
||||
}
|
||||
events.ScheduleEvent(EVENT_SUMMON_IMAGE2, 1000);
|
||||
break;
|
||||
case EVENT_SPELL_MIND_REND:
|
||||
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 50.0f))
|
||||
me->CastSpell(target, SPELL_MIND_REND, false);
|
||||
events.ScheduleEvent(EVENT_SPELL_MIND_REND, 10000);
|
||||
break;
|
||||
case EVENT_SPELL_FEAR:
|
||||
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1, 20.0f))
|
||||
{
|
||||
Talk(SAY_FEAR);
|
||||
me->CastSpell(target, SPELL_FEAR, false);
|
||||
}
|
||||
events.ScheduleEvent(EVENT_SPELL_FEAR, 25000);
|
||||
break;
|
||||
case EVENT_SPELL_DOMINATION:
|
||||
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1, 30.0f))
|
||||
{
|
||||
Talk(SAY_MIND);
|
||||
me->CastSpell(target, SPELL_DOMINATION, false);
|
||||
}
|
||||
events.ScheduleEvent(EVENT_SPELL_DOMINATION, 30000);
|
||||
break;
|
||||
case EVENT_SPELL_MANA_BURN:
|
||||
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, PowerUsersSelector(me, POWER_MANA, 40.0f, false)))
|
||||
me->CastSpell(target, SPELL_MANA_BURN, false);
|
||||
events.ScheduleEvent(EVENT_SPELL_MANA_BURN, 30000);
|
||||
break;
|
||||
}
|
||||
|
||||
DoMeleeAttackIfReady();
|
||||
}
|
||||
};
|
||||
|
||||
CreatureAI* GetAI(Creature* creature) const
|
||||
{
|
||||
return new boss_harbinger_skyrissAI(creature);
|
||||
}
|
||||
};
|
||||
|
||||
void AddSC_boss_harbinger_skyriss()
|
||||
{
|
||||
new boss_harbinger_skyriss();
|
||||
}
|
||||
|
||||
@@ -1,252 +0,0 @@
|
||||
/*
|
||||
REWRITTEN BY XINEF
|
||||
*/
|
||||
|
||||
#include "ScriptMgr.h"
|
||||
#include "ScriptedCreature.h"
|
||||
#include "arcatraz.h"
|
||||
|
||||
enum Say
|
||||
{
|
||||
// Wrath-Scryer Soccothrates
|
||||
SAY_AGGRO = 1,
|
||||
SAY_SLAY = 2,
|
||||
SAY_KNOCK_AWAY = 3,
|
||||
SAY_DEATH = 4,
|
||||
SAY_DALLIAH_DEATH = 6,
|
||||
SAY_SOCCOTHRATES_CONVO_1 = 7,
|
||||
SAY_SOCCOTHRATES_CONVO_2 = 8,
|
||||
SAY_SOCCOTHRATES_CONVO_3 = 9,
|
||||
SAY_SOCCOTHRATES_CONVO_4 = 10,
|
||||
|
||||
// Dalliah the Doomsayer
|
||||
SAY_AGGRO_SOCCOTHRATES_FIRST = 0,
|
||||
SAY_SOCCOTHRATES_25_PERCENT = 6,
|
||||
SAY_DALLIAH_CONVO_1 = 8,
|
||||
SAY_DALLIAH_CONVO_2 = 9,
|
||||
SAY_DALLIAH_CONVO_3 = 10
|
||||
};
|
||||
|
||||
enum Spells
|
||||
{
|
||||
SPELL_FEL_IMMOLATION = 36051,
|
||||
SPELL_FELFIRE_SHOCK = 35759,
|
||||
SPELL_KNOCK_AWAY = 36512,
|
||||
SPELL_FELFIRE = 35769,
|
||||
SPELL_CHARGE = 35754
|
||||
};
|
||||
|
||||
enum Events
|
||||
{
|
||||
EVENT_FELFIRE_SHOCK = 1,
|
||||
EVENT_KNOCK_AWAY = 2,
|
||||
|
||||
EVENT_PREFIGHT_1 = 3,
|
||||
EVENT_PREFIGHT_2 = 4,
|
||||
EVENT_PREFIGHT_3 = 5,
|
||||
EVENT_PREFIGHT_4 = 6,
|
||||
EVENT_PREFIGHT_5 = 7,
|
||||
EVENT_PREFIGHT_6 = 8,
|
||||
EVENT_PREFIGHT_7 = 9,
|
||||
EVENT_PREFIGHT_8 = 10,
|
||||
EVENT_PREFIGHT_9 = 11,
|
||||
EVENT_ME_FIRST = 12,
|
||||
EVENT_DALLIAH_DEATH = 13,
|
||||
EVENT_CHECK_HEALTH = 14,
|
||||
EVENT_SPELL_CHARGE = 15,
|
||||
EVENT_FELFIRE = 16,
|
||||
};
|
||||
|
||||
class boss_wrath_scryer_soccothrates : public CreatureScript
|
||||
{
|
||||
public:
|
||||
boss_wrath_scryer_soccothrates() : CreatureScript("boss_wrath_scryer_soccothrates") { }
|
||||
|
||||
struct boss_wrath_scryer_soccothratesAI : public BossAI
|
||||
{
|
||||
boss_wrath_scryer_soccothratesAI(Creature* creature) : BossAI(creature, DATA_SOCCOTHRATES)
|
||||
{
|
||||
preFight = instance->GetBossState(DATA_DALLIAH) == DONE;
|
||||
}
|
||||
|
||||
void Reset()
|
||||
{
|
||||
_Reset();
|
||||
events2.Reset();
|
||||
me->CastSpell(me, SPELL_FEL_IMMOLATION, true);
|
||||
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC|UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
}
|
||||
|
||||
void InitializeAI()
|
||||
{
|
||||
BossAI::InitializeAI();
|
||||
if (!preFight)
|
||||
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC|UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
}
|
||||
|
||||
void JustDied(Unit* /*killer*/)
|
||||
{
|
||||
_JustDied();
|
||||
Talk(SAY_DEATH);
|
||||
|
||||
if (Creature* dalliah = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_DALLIAH)))
|
||||
if (dalliah->IsAlive() && !dalliah->IsInCombat())
|
||||
dalliah->AI()->SetData(1, 1);
|
||||
}
|
||||
|
||||
void EnterCombat(Unit* /*who*/)
|
||||
{
|
||||
_EnterCombat();
|
||||
events2.Reset();
|
||||
events.ScheduleEvent(EVENT_FELFIRE_SHOCK, urand(12000, 14000));
|
||||
events.ScheduleEvent(EVENT_KNOCK_AWAY, urand(11000, 12000));
|
||||
events.ScheduleEvent(EVENT_ME_FIRST, 6000);
|
||||
events.ScheduleEvent(EVENT_CHECK_HEALTH, 1000);
|
||||
Talk(SAY_AGGRO);
|
||||
}
|
||||
|
||||
void KilledUnit(Unit* victim)
|
||||
{
|
||||
if (victim->GetTypeId() == TYPEID_PLAYER)
|
||||
Talk(SAY_SLAY);
|
||||
}
|
||||
|
||||
void MoveInLineOfSight(Unit* who)
|
||||
{
|
||||
if (!preFight && who->GetTypeId() == TYPEID_PLAYER && me->IsWithinDistInMap(who, 70.0f))
|
||||
{
|
||||
Talk(SAY_SOCCOTHRATES_CONVO_1);
|
||||
events2.ScheduleEvent(EVENT_PREFIGHT_1, 2000);
|
||||
preFight = true;
|
||||
}
|
||||
}
|
||||
|
||||
void SetData(uint32 /*type*/, uint32 data)
|
||||
{
|
||||
if (data == 1)
|
||||
events2.RescheduleEvent(EVENT_DALLIAH_DEATH, 6000);
|
||||
}
|
||||
|
||||
void UpdateAI(uint32 diff)
|
||||
{
|
||||
events2.Update(diff);
|
||||
switch (events2.ExecuteEvent())
|
||||
{
|
||||
case EVENT_PREFIGHT_1:
|
||||
if (Creature* dalliah = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_DALLIAH)))
|
||||
dalliah->AI()->Talk(SAY_DALLIAH_CONVO_1);
|
||||
events2.ScheduleEvent(EVENT_PREFIGHT_2, 3000);
|
||||
break;
|
||||
case EVENT_PREFIGHT_2:
|
||||
Talk(SAY_SOCCOTHRATES_CONVO_2);
|
||||
events2.ScheduleEvent(EVENT_PREFIGHT_3, 3000);
|
||||
break;
|
||||
case EVENT_PREFIGHT_3:
|
||||
if (Creature* dalliah = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_DALLIAH)))
|
||||
dalliah->AI()->Talk(SAY_DALLIAH_CONVO_2);
|
||||
events2.ScheduleEvent(EVENT_PREFIGHT_4, 6000);
|
||||
break;
|
||||
case EVENT_PREFIGHT_4:
|
||||
Talk(SAY_SOCCOTHRATES_CONVO_3);
|
||||
events2.ScheduleEvent(EVENT_PREFIGHT_5, 2000);
|
||||
break;
|
||||
case EVENT_PREFIGHT_5:
|
||||
if (Creature* dalliah = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_DALLIAH)))
|
||||
dalliah->AI()->Talk(SAY_DALLIAH_CONVO_3);
|
||||
events2.ScheduleEvent(EVENT_PREFIGHT_6, 3000);
|
||||
break;
|
||||
case EVENT_PREFIGHT_6:
|
||||
Talk(SAY_SOCCOTHRATES_CONVO_4);
|
||||
events2.ScheduleEvent(EVENT_PREFIGHT_7, 2000);
|
||||
break;
|
||||
case EVENT_PREFIGHT_7:
|
||||
if (Creature* dalliah = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_DALLIAH)))
|
||||
dalliah->GetMotionMaster()->MovePoint(0, 118.6048f, 96.84852f, 22.44115f);
|
||||
events2.ScheduleEvent(EVENT_PREFIGHT_8, 4000);
|
||||
break;
|
||||
case EVENT_PREFIGHT_8:
|
||||
me->GetMotionMaster()->MovePoint(0, 122.1035f, 192.7203f, 22.44115f);
|
||||
events2.ScheduleEvent(EVENT_PREFIGHT_9, 4000);
|
||||
break;
|
||||
case EVENT_PREFIGHT_9:
|
||||
if (Creature* dalliah = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_DALLIAH)))
|
||||
{
|
||||
dalliah->SetFacingToObject(me);
|
||||
dalliah->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC|UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
me->SetFacingToObject(dalliah);
|
||||
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC|UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
dalliah->SetHomePosition(dalliah->GetPositionX(), dalliah->GetPositionY(), dalliah->GetPositionZ(), 1.51737f);
|
||||
me->SetHomePosition(me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), 4.725722f);
|
||||
}
|
||||
break;
|
||||
case EVENT_DALLIAH_DEATH:
|
||||
Talk(SAY_DALLIAH_DEATH);
|
||||
break;
|
||||
}
|
||||
|
||||
if (!UpdateVictim())
|
||||
return;
|
||||
|
||||
events.Update(diff);
|
||||
if (me->HasUnitState(UNIT_STATE_CASTING))
|
||||
return;
|
||||
|
||||
switch (events.ExecuteEvent())
|
||||
{
|
||||
case EVENT_FELFIRE_SHOCK:
|
||||
me->CastSpell(me->GetVictim(), SPELL_FELFIRE_SHOCK, false);
|
||||
events.ScheduleEvent(EVENT_FELFIRE_SHOCK, urand(12000, 14000));
|
||||
break;
|
||||
case EVENT_KNOCK_AWAY:
|
||||
me->CastSpell(me, SPELL_KNOCK_AWAY, false);
|
||||
Talk(SAY_KNOCK_AWAY);
|
||||
events.ScheduleEvent(EVENT_KNOCK_AWAY, urand(11000, 12000));
|
||||
events.ScheduleEvent(EVENT_SPELL_CHARGE, 4600);
|
||||
break;
|
||||
case EVENT_SPELL_CHARGE:
|
||||
me->CastSpell(me, SPELL_CHARGE, true);
|
||||
me->CastSpell(me, SPELL_FELFIRE, true);
|
||||
events.ScheduleEvent(EVENT_FELFIRE, 300);
|
||||
events.ScheduleEvent(EVENT_FELFIRE, 600);
|
||||
events.ScheduleEvent(EVENT_FELFIRE, 900);
|
||||
events.ScheduleEvent(EVENT_FELFIRE, 1200);
|
||||
events.ScheduleEvent(EVENT_FELFIRE, 1500);
|
||||
events.ScheduleEvent(EVENT_FELFIRE, 1800);
|
||||
break;
|
||||
case EVENT_FELFIRE:
|
||||
me->CastSpell(me, SPELL_FELFIRE, true);
|
||||
break;
|
||||
case EVENT_ME_FIRST:
|
||||
if (Creature* dalliah = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_DALLIAH)))
|
||||
if (dalliah->IsAlive() && !dalliah->IsInCombat())
|
||||
dalliah->AI()->Talk(SAY_AGGRO_SOCCOTHRATES_FIRST);
|
||||
break;
|
||||
case EVENT_CHECK_HEALTH:
|
||||
if (HealthBelowPct(25))
|
||||
{
|
||||
if (Creature* dalliah = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_DALLIAH)))
|
||||
dalliah->AI()->Talk(SAY_SOCCOTHRATES_25_PERCENT);
|
||||
break;
|
||||
}
|
||||
events.ScheduleEvent(EVENT_CHECK_HEALTH, 1000);
|
||||
break;
|
||||
}
|
||||
|
||||
DoMeleeAttackIfReady();
|
||||
}
|
||||
|
||||
private:
|
||||
bool preFight;
|
||||
EventMap events2;
|
||||
};
|
||||
|
||||
CreatureAI* GetAI(Creature* creature) const
|
||||
{
|
||||
return new boss_wrath_scryer_soccothratesAI(creature);
|
||||
}
|
||||
};
|
||||
|
||||
void AddSC_boss_wrath_scryer_soccothrates()
|
||||
{
|
||||
new boss_wrath_scryer_soccothrates();
|
||||
}
|
||||
@@ -1,104 +0,0 @@
|
||||
/*
|
||||
REWRITTEN BY XINEF
|
||||
*/
|
||||
|
||||
#include "ScriptMgr.h"
|
||||
#include "ScriptedCreature.h"
|
||||
#include "arcatraz.h"
|
||||
|
||||
enum Say
|
||||
{
|
||||
SAY_AGGRO = 0,
|
||||
SAY_SLAY = 1,
|
||||
SAY_SHADOW_NOVA = 2,
|
||||
SAY_DEATH = 3
|
||||
};
|
||||
|
||||
enum Spells
|
||||
{
|
||||
SPELL_VOID_ZONE = 36119,
|
||||
SPELL_SHADOW_NOVA = 36127,
|
||||
SPELL_SEED_OF_CORRUPTION = 36123
|
||||
};
|
||||
|
||||
enum Events
|
||||
{
|
||||
EVENT_VOID_ZONE = 1,
|
||||
EVENT_SHADOW_NOVA = 2,
|
||||
EVENT_SEED_OF_CORRUPTION = 3
|
||||
};
|
||||
|
||||
class boss_zereketh_the_unbound : public CreatureScript
|
||||
{
|
||||
public:
|
||||
boss_zereketh_the_unbound() : CreatureScript("boss_zereketh_the_unbound") { }
|
||||
|
||||
struct boss_zereketh_the_unboundAI : public BossAI
|
||||
{
|
||||
boss_zereketh_the_unboundAI(Creature* creature) : BossAI(creature, DATA_ZEREKETH) { }
|
||||
|
||||
|
||||
void JustDied(Unit* /*killer*/)
|
||||
{
|
||||
_JustDied();
|
||||
Talk(SAY_DEATH);
|
||||
}
|
||||
|
||||
void EnterCombat(Unit* /*who*/)
|
||||
{
|
||||
_EnterCombat();
|
||||
events.ScheduleEvent(EVENT_VOID_ZONE, 6000);
|
||||
events.ScheduleEvent(EVENT_SHADOW_NOVA, 10000);
|
||||
events.ScheduleEvent(EVENT_SEED_OF_CORRUPTION, 16000);
|
||||
Talk(SAY_AGGRO);
|
||||
}
|
||||
|
||||
void KilledUnit(Unit* victim)
|
||||
{
|
||||
if (victim->GetTypeId() == TYPEID_PLAYER)
|
||||
Talk(SAY_SLAY);
|
||||
}
|
||||
|
||||
void UpdateAI(uint32 diff)
|
||||
{
|
||||
if (!UpdateVictim())
|
||||
return;
|
||||
|
||||
events.Update(diff);
|
||||
if (me->HasUnitState(UNIT_STATE_CASTING))
|
||||
return;
|
||||
|
||||
switch (events.ExecuteEvent())
|
||||
{
|
||||
case EVENT_VOID_ZONE:
|
||||
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 60.0f, true))
|
||||
me->CastSpell(target, SPELL_VOID_ZONE, false);
|
||||
events.ScheduleEvent(EVENT_VOID_ZONE, 15000);
|
||||
break;
|
||||
case EVENT_SHADOW_NOVA:
|
||||
me->CastSpell(me, SPELL_SHADOW_NOVA, false);
|
||||
if (roll_chance_i(50))
|
||||
Talk(SAY_SHADOW_NOVA);
|
||||
events.ScheduleEvent(EVENT_SHADOW_NOVA, 12000);
|
||||
break;
|
||||
case EVENT_SEED_OF_CORRUPTION:
|
||||
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 30.0f, true))
|
||||
me->CastSpell(target, SPELL_SEED_OF_CORRUPTION, false);
|
||||
events.ScheduleEvent(EVENT_SEED_OF_CORRUPTION, 16000);
|
||||
break;
|
||||
}
|
||||
|
||||
DoMeleeAttackIfReady();
|
||||
}
|
||||
};
|
||||
|
||||
CreatureAI* GetAI(Creature* creature) const
|
||||
{
|
||||
return new boss_zereketh_the_unboundAI(creature);
|
||||
}
|
||||
};
|
||||
|
||||
void AddSC_boss_zereketh_the_unbound()
|
||||
{
|
||||
new boss_zereketh_the_unbound();
|
||||
}
|
||||
@@ -1,211 +0,0 @@
|
||||
/*
|
||||
REWRITTEN BY XINEF
|
||||
*/
|
||||
|
||||
#include "ScriptMgr.h"
|
||||
#include "InstanceScript.h"
|
||||
#include "arcatraz.h"
|
||||
|
||||
DoorData const doorData[] =
|
||||
{
|
||||
{ GO_CONTAINMENT_CORE_SECURITY_FIELD_ALPHA, DATA_SOCCOTHRATES, DOOR_TYPE_PASSAGE, BOUNDARY_NONE },
|
||||
{ GO_CONTAINMENT_CORE_SECURITY_FIELD_BETA, DATA_DALLIAH, DOOR_TYPE_PASSAGE, BOUNDARY_NONE },
|
||||
{ 0, 0, DOOR_TYPE_ROOM, BOUNDARY_NONE } // END
|
||||
};
|
||||
|
||||
class instance_arcatraz : public InstanceMapScript
|
||||
{
|
||||
public:
|
||||
instance_arcatraz() : InstanceMapScript("instance_arcatraz", 552) { }
|
||||
|
||||
struct instance_arcatraz_InstanceMapScript : public InstanceScript
|
||||
{
|
||||
instance_arcatraz_InstanceMapScript(Map* map) : InstanceScript(map)
|
||||
{
|
||||
SetBossNumber(MAX_ENCOUTER);
|
||||
LoadDoorData(doorData);
|
||||
|
||||
DalliahGUID = 0;
|
||||
SoccothratesGUID = 0;
|
||||
MellicharGUID = 0;
|
||||
WardensShieldGUID = 0;
|
||||
|
||||
memset(StasisPodGUIDs, 0, 5 * sizeof(uint64));
|
||||
}
|
||||
|
||||
void OnCreatureCreate(Creature* creature)
|
||||
{
|
||||
switch (creature->GetEntry())
|
||||
{
|
||||
case NPC_DALLIAH:
|
||||
DalliahGUID = creature->GetGUID();
|
||||
break;
|
||||
case NPC_SOCCOTHRATES:
|
||||
SoccothratesGUID = creature->GetGUID();
|
||||
break;
|
||||
case NPC_MELLICHAR:
|
||||
MellicharGUID = creature->GetGUID();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void OnGameObjectCreate(GameObject* go)
|
||||
{
|
||||
switch (go->GetEntry())
|
||||
{
|
||||
case GO_CONTAINMENT_CORE_SECURITY_FIELD_ALPHA:
|
||||
case GO_CONTAINMENT_CORE_SECURITY_FIELD_BETA:
|
||||
AddDoor(go, true);
|
||||
break;
|
||||
case GO_STASIS_POD_ALPHA:
|
||||
StasisPodGUIDs[0] = go->GetGUID();
|
||||
break;
|
||||
case GO_STASIS_POD_BETA:
|
||||
StasisPodGUIDs[1] = go->GetGUID();
|
||||
break;
|
||||
case GO_STASIS_POD_DELTA:
|
||||
StasisPodGUIDs[2] = go->GetGUID();
|
||||
break;
|
||||
case GO_STASIS_POD_GAMMA:
|
||||
StasisPodGUIDs[3] = go->GetGUID();
|
||||
break;
|
||||
case GO_STASIS_POD_OMEGA:
|
||||
StasisPodGUIDs[4] = go->GetGUID();
|
||||
break;
|
||||
case GO_WARDENS_SHIELD:
|
||||
WardensShieldGUID = go->GetGUID();
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void OnGameObjectRemove(GameObject* go)
|
||||
{
|
||||
switch (go->GetEntry())
|
||||
{
|
||||
case GO_CONTAINMENT_CORE_SECURITY_FIELD_ALPHA:
|
||||
case GO_CONTAINMENT_CORE_SECURITY_FIELD_BETA:
|
||||
AddDoor(go, false);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void SetData(uint32 type, uint32 data)
|
||||
{
|
||||
switch (type)
|
||||
{
|
||||
case DATA_WARDEN_1:
|
||||
case DATA_WARDEN_2:
|
||||
case DATA_WARDEN_3:
|
||||
case DATA_WARDEN_4:
|
||||
case DATA_WARDEN_5:
|
||||
if (data < FAIL)
|
||||
HandleGameObject(StasisPodGUIDs[type - DATA_WARDEN_1], data == IN_PROGRESS);
|
||||
if (Creature* warden = instance->GetCreature(MellicharGUID))
|
||||
warden->AI()->SetData(type, data);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
uint32 GetData(uint32 type) const
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
uint64 GetData64(uint32 data) const
|
||||
{
|
||||
switch (data)
|
||||
{
|
||||
case DATA_DALLIAH:
|
||||
return DalliahGUID;
|
||||
case DATA_SOCCOTHRATES:
|
||||
return SoccothratesGUID;
|
||||
case DATA_WARDENS_SHIELD:
|
||||
return WardensShieldGUID;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool SetBossState(uint32 type, EncounterState state)
|
||||
{
|
||||
if (!InstanceScript::SetBossState(type, state))
|
||||
return false;
|
||||
|
||||
if (type == DATA_WARDEN_MELLICHAR && state == NOT_STARTED)
|
||||
{
|
||||
SetData(DATA_WARDEN_1, NOT_STARTED);
|
||||
SetData(DATA_WARDEN_2, NOT_STARTED);
|
||||
SetData(DATA_WARDEN_3, NOT_STARTED);
|
||||
SetData(DATA_WARDEN_4, NOT_STARTED);
|
||||
SetData(DATA_WARDEN_5, NOT_STARTED);
|
||||
HandleGameObject(WardensShieldGUID, true);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
std::string GetSaveData()
|
||||
{
|
||||
OUT_SAVE_INST_DATA;
|
||||
|
||||
std::ostringstream saveStream;
|
||||
saveStream << "A Z " << GetBossSaveData();
|
||||
|
||||
OUT_SAVE_INST_DATA_COMPLETE;
|
||||
return saveStream.str();
|
||||
}
|
||||
|
||||
void Load(char const* str)
|
||||
{
|
||||
if (!str)
|
||||
{
|
||||
OUT_LOAD_INST_DATA_FAIL;
|
||||
return;
|
||||
}
|
||||
|
||||
OUT_LOAD_INST_DATA(str);
|
||||
|
||||
char dataHead1, dataHead2;
|
||||
|
||||
std::istringstream loadStream(str);
|
||||
loadStream >> dataHead1 >> dataHead2;
|
||||
|
||||
if (dataHead1 == 'A' && dataHead2 == 'Z')
|
||||
{
|
||||
for (uint32 i = 0; i < MAX_ENCOUTER; ++i)
|
||||
{
|
||||
uint32 tmpState;
|
||||
loadStream >> tmpState;
|
||||
if (tmpState == IN_PROGRESS || tmpState > SPECIAL)
|
||||
tmpState = NOT_STARTED;
|
||||
SetBossState(i, EncounterState(tmpState));
|
||||
}
|
||||
}
|
||||
else
|
||||
OUT_LOAD_INST_DATA_FAIL;
|
||||
|
||||
OUT_LOAD_INST_DATA_COMPLETE;
|
||||
}
|
||||
|
||||
protected:
|
||||
uint64 DalliahGUID;
|
||||
uint64 SoccothratesGUID;
|
||||
uint64 StasisPodGUIDs[5];
|
||||
uint64 MellicharGUID;
|
||||
uint64 WardensShieldGUID;
|
||||
};
|
||||
|
||||
InstanceScript* GetInstanceScript(InstanceMap* map) const
|
||||
{
|
||||
return new instance_arcatraz_InstanceMapScript(map);
|
||||
}
|
||||
};
|
||||
|
||||
void AddSC_instance_arcatraz()
|
||||
{
|
||||
new instance_arcatraz();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user