Scripts/Forge of Souls: Cleaned up code style

Scripts/Forge of Souls: Fixed a possible crash

Closes issue #4660.

--HG--
branch : trunk
This commit is contained in:
Shauren
2010-11-20 21:27:10 +01:00
parent 417b29af24
commit 6d244e8f13
5 changed files with 359 additions and 342 deletions
@@ -65,11 +65,16 @@ class boss_bronjahm : public CreatureScript
struct boss_bronjahmAI : public BossAI struct boss_bronjahmAI : public BossAI
{ {
boss_bronjahmAI(Creature* pCreature) : BossAI(pCreature, DATA_BRONJAHM) boss_bronjahmAI(Creature* creature) : BossAI(creature, DATA_BRONJAHM)
{ {
// disable AI outside of instance }
if (!instance)
void InitializeAI()
{
if (!instance || static_cast<InstanceMap*>(me->GetMap())->GetScriptId() != GetScriptId(FoSScriptName))
me->IsAIEnabled = false; me->IsAIEnabled = false;
else if (!me->isDead())
Reset();
} }
void Reset() void Reset()
@@ -176,20 +181,20 @@ class boss_bronjahm : public CreatureScript
} }
}; };
CreatureAI *GetAI(Creature* pCreature) const CreatureAI *GetAI(Creature* creature) const
{ {
return new boss_bronjahmAI(pCreature); return new boss_bronjahmAI(creature);
} }
}; };
class mob_corrupted_soul_fragment : public CreatureScript class mob_corrupted_soul_fragment : public CreatureScript
{ {
public: public:
mob_corrupted_soul_fragment() : CreatureScript("mob_corrupted_soul_fragment") { } mob_corrupted_soul_fragment() : CreatureScript("mob_corrupted_soul_fragment") { }
struct mob_corrupted_soul_fragmentAI : public ScriptedAI struct mob_corrupted_soul_fragmentAI : public ScriptedAI
{ {
mob_corrupted_soul_fragmentAI(Creature* pCreature) : ScriptedAI(pCreature) mob_corrupted_soul_fragmentAI(Creature* creature) : ScriptedAI(creature)
{ {
instance = me->GetInstanceScript(); instance = me->GetInstanceScript();
} }
@@ -221,9 +226,9 @@ public:
InstanceScript* instance; InstanceScript* instance;
}; };
CreatureAI *GetAI(Creature* pCreature) const CreatureAI *GetAI(Creature* creature) const
{ {
return new mob_corrupted_soul_fragmentAI(pCreature); return new mob_corrupted_soul_fragmentAI(creature);
} }
}; };
@@ -67,14 +67,13 @@ enum Spells
enum Events enum Events
{ {
EVENT_NONE, EVENT_PHANTOM_BLAST = 1,
EVENT_PHANTOM_BLAST, EVENT_MIRRORED_SOUL = 2,
EVENT_MIRRORED_SOUL, EVENT_WELL_OF_SOULS = 3,
EVENT_WELL_OF_SOULS, EVENT_UNLEASHED_SOULS = 4,
EVENT_UNLEASHED_SOULS, EVENT_WAILING_SOULS = 5,
EVENT_WAILING_SOULS, EVENT_WAILING_SOULS_TICK = 6,
EVENT_WAILING_SOULS_TICK, EVENT_FACE_ANGER = 7,
EVENT_FACE_ANGER,
}; };
enum eEnum enum eEnum
@@ -119,26 +118,22 @@ struct outroPosition
class boss_devourer_of_souls : public CreatureScript class boss_devourer_of_souls : public CreatureScript
{ {
public: public:
boss_devourer_of_souls() : CreatureScript("boss_devourer_of_souls") { } boss_devourer_of_souls() : CreatureScript("boss_devourer_of_souls") { }
struct boss_devourer_of_soulsAI : public BossAI struct boss_devourer_of_soulsAI : public BossAI
{ {
boss_devourer_of_soulsAI(Creature *c) : BossAI(c, DATA_DEVOURER_EVENT) boss_devourer_of_soulsAI(Creature *creature) : BossAI(creature, DATA_DEVOURER_EVENT)
{ {
pInstance = c->GetInstanceScript();
} }
bool bThreeFaceAchievement; void InitializeAI()
{
InstanceScript* pInstance; if (!instance || static_cast<InstanceMap*>(me->GetMap())->GetScriptId() != GetScriptId(FoSScriptName))
me->IsAIEnabled = false;
// wailing soul event else if (!me->isDead())
float beamAngle; Reset();
float beamAngleDiff; }
int8 wailingSoulTick;
uint64 uiMirroredSoulTarget;
void Reset() void Reset()
{ {
@@ -148,89 +143,101 @@ public:
events.Reset(); events.Reset();
bThreeFaceAchievement = true; threeFaceAchievement = true;
uiMirroredSoulTarget = 0; mirroredSoulTarget = 0;
if (pInstance) instance->SetData(DATA_DEVOURER_EVENT, NOT_STARTED);
pInstance->SetData(DATA_DEVOURER_EVENT, NOT_STARTED);
} }
void EnterCombat(Unit* /*who*/) void EnterCombat(Unit* /*who*/)
{ {
if (pInstance) DoScriptText(RAND(SAY_FACE_ANGER_AGGRO, SAY_FACE_DESIRE_AGGRO), me);
pInstance->SetData(DATA_DEVOURER_EVENT, IN_PROGRESS);
DoScriptText(RAND(SAY_FACE_ANGER_AGGRO,SAY_FACE_DESIRE_AGGRO), me);
events.ScheduleEvent(EVENT_PHANTOM_BLAST, 5000); events.ScheduleEvent(EVENT_PHANTOM_BLAST, 5000);
events.ScheduleEvent(EVENT_MIRRORED_SOUL, 8000); events.ScheduleEvent(EVENT_MIRRORED_SOUL, 8000);
events.ScheduleEvent(EVENT_WELL_OF_SOULS, 30000); events.ScheduleEvent(EVENT_WELL_OF_SOULS, 30000);
events.ScheduleEvent(EVENT_UNLEASHED_SOULS, 20000); events.ScheduleEvent(EVENT_UNLEASHED_SOULS, 20000);
events.ScheduleEvent(EVENT_WAILING_SOULS, urand(60000,70000)); events.ScheduleEvent(EVENT_WAILING_SOULS, urand(60000, 70000));
instance->SetData(DATA_DEVOURER_EVENT, IN_PROGRESS);
} }
void DamageTaken(Unit * /*pDoneBy*/, uint32 &uiDamage) void DamageTaken(Unit * /*pDoneBy*/, uint32 &uiDamage)
{ {
if (uiMirroredSoulTarget && me->HasAura(SPELL_MIRRORED_SOUL)) if (mirroredSoulTarget && me->HasAura(SPELL_MIRRORED_SOUL))
{ {
if (Player *pPlayer = Unit::GetPlayer(*me, uiMirroredSoulTarget)) if (Player *player = Unit::GetPlayer(*me, mirroredSoulTarget))
{ {
if (pPlayer->GetAura(SPELL_MIRRORED_SOUL)) if (player->GetAura(SPELL_MIRRORED_SOUL))
{ {
int32 mirrorDamage = (uiDamage * 45)/100; int32 mirrorDamage = (uiDamage * 45)/100;
me->CastCustomSpell(pPlayer, 69034, &mirrorDamage, 0, 0, true); me->CastCustomSpell(player, 69034, &mirrorDamage, 0, 0, true);
// me->DealDamage(pPlayer, (uiDamage * 45)/100, 0, SPELL_DIRECT_DAMAGE, SPELL_SCHOOL_MASK_SHADOW);
} }
else else
uiMirroredSoulTarget = 0; mirroredSoulTarget = 0;
} }
} }
} }
void KilledUnit(Unit * /*victim*/) void KilledUnit(Unit* victim)
{ {
DoScriptText(RAND(SAY_FACE_ANGER_SLAY_1,SAY_FACE_SORROW_SLAY_1,SAY_FACE_DESIRE_SLAY_1, if (victim->GetTypeId() != TYPEID_PLAYER)
SAY_FACE_ANGER_SLAY_2,SAY_FACE_SORROW_SLAY_2,SAY_FACE_DESIRE_SLAY_2), me); return;
int32 textId = 0;
switch (me->GetDisplayId())
{
case DISPLAY_ANGER:
textId = RAND(SAY_FACE_ANGER_SLAY_1, SAY_FACE_ANGER_SLAY_2);
break;
case DISPLAY_SORROW:
textId = RAND(SAY_FACE_SORROW_SLAY_1, SAY_FACE_SORROW_SLAY_2);
break;
case DISPLAY_DESIRE:
textId = RAND(SAY_FACE_DESIRE_SLAY_1, SAY_FACE_DESIRE_SLAY_2);
break;
default:
break;
}
if (textId)
DoScriptText(textId, me);
} }
void JustDied(Unit* /*killer*/) void JustDied(Unit* /*killer*/)
{ {
Position spawnPoint = { 5618.139f, 2451.873f, 705.854f, 0 }; Position spawnPoint = {5618.139f, 2451.873f, 705.854f, 0};
DoScriptText(RAND(SAY_FACE_SORROW_DEATH,SAY_FACE_DESIRE_DEATH), me); DoScriptText(RAND(SAY_FACE_SORROW_DEATH, SAY_FACE_DESIRE_DEATH), me);
if (pInstance) instance->SetData(DATA_DEVOURER_EVENT, DONE);
{
pInstance->SetData(DATA_DEVOURER_EVENT, DONE);
if (bThreeFaceAchievement && IsHeroic()) if (threeFaceAchievement && IsHeroic())
pInstance->DoCompleteAchievement(ACHIEV_THREE_FACED); instance->DoCompleteAchievement(ACHIEV_THREE_FACED);
int32 entryIndex; int32 entryIndex;
if (pInstance->GetData(DATA_TEAM_IN_INSTANCE) == TEAM_ALLIANCE) if (instance->GetData(DATA_TEAM_IN_INSTANCE) == TEAM_ALLIANCE)
entryIndex = 0; entryIndex = 0;
else else
entryIndex = 1; entryIndex = 1;
for (int8 i = 0; outroPositions[i].entry[entryIndex] != 0; ++i) for (int8 i = 0; outroPositions[i].entry[entryIndex] != 0; ++i)
{ {
if (Creature *pSummon = me->SummonCreature(outroPositions[i].entry[entryIndex], spawnPoint, TEMPSUMMON_DEAD_DESPAWN)) if (Creature *summon = me->SummonCreature(outroPositions[i].entry[entryIndex], spawnPoint, TEMPSUMMON_DEAD_DESPAWN))
{ {
pSummon->GetMotionMaster()->MovePoint(0, outroPositions[i].movePosition); summon->GetMotionMaster()->MovePoint(0, outroPositions[i].movePosition);
if (summon->GetEntry() == NPC_JAINA_PART2)
if (pSummon->GetEntry() == NPC_JAINA_PART2) DoScriptText(SAY_JAINA_OUTRO, summon);
DoScriptText(SAY_JAINA_OUTRO, pSummon); else if (summon->GetEntry() == NPC_SYLVANAS_PART2)
else if (pSummon->GetEntry() == NPC_SYLVANAS_PART2) DoScriptText(SAY_SYLVANAS_OUTRO, summon);
DoScriptText(SAY_SYLVANAS_OUTRO, pSummon);
}
} }
} }
} }
void SpellHitTarget(Unit* /*pTarget*/, const SpellEntry *pSpell) void SpellHitTarget(Unit* /*target*/, const SpellEntry *spell)
{ {
if (pSpell->Id == H_SPELL_PHANTOM_BLAST) if (spell->Id == H_SPELL_PHANTOM_BLAST)
bThreeFaceAchievement = false; threeFaceAchievement = false;
} }
void UpdateAI(const uint32 diff) void UpdateAI(const uint32 diff)
@@ -249,29 +256,28 @@ public:
switch(eventId) switch(eventId)
{ {
case EVENT_PHANTOM_BLAST: case EVENT_PHANTOM_BLAST:
if (Unit *pTarget = SelectUnit(SELECT_TARGET_TOPAGGRO, 0)) DoCastVictim(SPELL_PHANTOM_BLAST);
DoCast(pTarget, SPELL_PHANTOM_BLAST);
events.ScheduleEvent(EVENT_PHANTOM_BLAST, 5000); events.ScheduleEvent(EVENT_PHANTOM_BLAST, 5000);
break; break;
case EVENT_MIRRORED_SOUL: case EVENT_MIRRORED_SOUL:
if (Unit *pTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 0, true)) if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 0, true))
{ {
uiMirroredSoulTarget = pTarget->GetGUID(); mirroredSoulTarget = target->GetGUID();
DoCast(pTarget, SPELL_MIRRORED_SOUL); DoCast(target, SPELL_MIRRORED_SOUL);
DoScriptText(EMOTE_MIRRORED_SOUL, me); DoScriptText(EMOTE_MIRRORED_SOUL, me);
} }
events.ScheduleEvent(EVENT_MIRRORED_SOUL, urand(15000,30000)); events.ScheduleEvent(EVENT_MIRRORED_SOUL, urand(15000, 30000));
break; break;
case EVENT_WELL_OF_SOULS: case EVENT_WELL_OF_SOULS:
if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0)) if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM, 0))
DoCast(pTarget, SPELL_WELL_OF_SOULS); DoCast(target, SPELL_WELL_OF_SOULS);
events.ScheduleEvent(EVENT_WELL_OF_SOULS, 20000); events.ScheduleEvent(EVENT_WELL_OF_SOULS, 20000);
break; break;
case EVENT_UNLEASHED_SOULS: case EVENT_UNLEASHED_SOULS:
if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0)) if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM, 0))
DoCast(pTarget, SPELL_UNLEASHED_SOULS); DoCast(target, SPELL_UNLEASHED_SOULS);
me->SetDisplayId(DISPLAY_SORROW); me->SetDisplayId(DISPLAY_SORROW);
DoScriptText(RAND(SAY_FACE_ANGER_UNLEASH_SOUL,SAY_FACE_SORROW_UNLEASH_SOUL,SAY_FACE_DESIRE_UNLEASH_SOUL), me); DoScriptText(RAND(SAY_FACE_ANGER_UNLEASH_SOUL, SAY_FACE_SORROW_UNLEASH_SOUL, SAY_FACE_DESIRE_UNLEASH_SOUL), me);
DoScriptText(EMOTE_UNLEASH_SOUL, me); DoScriptText(EMOTE_UNLEASH_SOUL, me);
events.ScheduleEvent(EVENT_UNLEASHED_SOULS, 30000); events.ScheduleEvent(EVENT_UNLEASHED_SOULS, 30000);
events.ScheduleEvent(EVENT_FACE_ANGER, 5000); events.ScheduleEvent(EVENT_FACE_ANGER, 5000);
@@ -285,17 +291,16 @@ public:
DoScriptText(RAND(SAY_FACE_ANGER_WAILING_SOUL,SAY_FACE_DESIRE_WAILING_SOUL), me); DoScriptText(RAND(SAY_FACE_ANGER_WAILING_SOUL,SAY_FACE_DESIRE_WAILING_SOUL), me);
DoScriptText(EMOTE_WAILING_SOUL, me); DoScriptText(EMOTE_WAILING_SOUL, me);
DoCast(me, SPELL_WAILING_SOULS_STARTING); DoCast(me, SPELL_WAILING_SOULS_STARTING);
if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM, 0))
if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0))
{ {
me->SetOrientation(me->GetAngle(pTarget)); me->SetOrientation(me->GetAngle(target));
DoCast(me, SPELL_WAILING_SOULS_BEAM); DoCast(me, SPELL_WAILING_SOULS_BEAM);
} }
beamAngle = me->GetOrientation(); beamAngle = me->GetOrientation();
beamAngleDiff = M_PI/30.0f; // PI/2 in 15 sec = PI/30 per tick beamAngleDiff = M_PI/30.0f; // PI/2 in 15 sec = PI/30 per tick
if (RAND(true,false)) if (RAND(true, false))
beamAngleDiff = -beamAngleDiff; beamAngleDiff = -beamAngleDiff;
me->InterruptNonMeleeSpells(false); me->InterruptNonMeleeSpells(false);
@@ -335,9 +340,19 @@ public:
DoMeleeAttackIfReady(); DoMeleeAttackIfReady();
} }
private:
bool threeFaceAchievement;
// wailing soul event
float beamAngle;
float beamAngleDiff;
int8 wailingSoulTick;
uint64 mirroredSoulTarget;
}; };
CreatureAI *GetAI(Creature *creature) const CreatureAI *GetAI(Creature* creature) const
{ {
return new boss_devourer_of_soulsAI(creature); return new boss_devourer_of_soulsAI(creature);
} }
@@ -345,5 +360,5 @@ public:
void AddSC_boss_devourer_of_souls() void AddSC_boss_devourer_of_souls()
{ {
new boss_devourer_of_souls; new boss_devourer_of_souls();
} }
@@ -154,7 +154,7 @@ public:
struct npc_sylvanas_fosAI : public ScriptedAI struct npc_sylvanas_fosAI : public ScriptedAI
{ {
npc_sylvanas_fosAI(Creature *c) : ScriptedAI(c) npc_sylvanas_fosAI(Creature* creature) : ScriptedAI(creature)
{ {
pInstance = me->GetInstanceScript(); pInstance = me->GetInstanceScript();
me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
@@ -237,37 +237,37 @@ public:
} }
}; };
bool OnGossipHello(Player* pPlayer, Creature* pCreature) bool OnGossipHello(Player* player, Creature* creature)
{ {
if (pCreature->isQuestGiver()) if (creature->isQuestGiver())
pPlayer->PrepareQuestMenu(pCreature->GetGUID()); player->PrepareQuestMenu(creature->GetGUID());
if (pCreature->GetEntry() == NPC_JAINA_PART1) if (creature->GetEntry() == NPC_JAINA_PART1)
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_JAINA_ITEM, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1); player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_JAINA_ITEM, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
else else
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_SYLVANAS_ITEM, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1); player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_SYLVANAS_ITEM, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
pPlayer->SEND_GOSSIP_MENU(DEFAULT_GOSSIP_MESSAGE, pCreature->GetGUID()); player->SEND_GOSSIP_MENU(DEFAULT_GOSSIP_MESSAGE, creature->GetGUID());
return true; return true;
} }
bool OnGossipSelect(Player* pPlayer, Creature* pCreature, uint32 /*uiSender*/, uint32 uiAction) bool OnGossipSelect(Player* player, Creature* creature, uint32 /*uiSender*/, uint32 uiAction)
{ {
pPlayer->PlayerTalkClass->ClearMenus(); player->PlayerTalkClass->ClearMenus();
switch(uiAction) switch(uiAction)
{ {
case GOSSIP_ACTION_INFO_DEF+1: case GOSSIP_ACTION_INFO_DEF+1:
pPlayer->CLOSE_GOSSIP_MENU(); player->CLOSE_GOSSIP_MENU();
if (pCreature->AI()) if (creature->AI())
pCreature->AI()->DoAction(ACTION_INTRO); creature->AI()->DoAction(ACTION_INTRO);
break; break;
} }
return true; return true;
} }
CreatureAI *GetAI(Creature *creature) const CreatureAI *GetAI(Creature* creature) const
{ {
return new npc_sylvanas_fosAI(creature); return new npc_sylvanas_fosAI(creature);
} }
@@ -280,7 +280,7 @@ public:
struct npc_jaina_fosAI: public ScriptedAI struct npc_jaina_fosAI: public ScriptedAI
{ {
npc_jaina_fosAI(Creature *c) : ScriptedAI(c) npc_jaina_fosAI(Creature* creature) : ScriptedAI(creature)
{ {
pInstance = me->GetInstanceScript(); pInstance = me->GetInstanceScript();
me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
@@ -374,37 +374,37 @@ public:
} }
}; };
bool OnGossipHello(Player* pPlayer, Creature* pCreature) bool OnGossipHello(Player* player, Creature* creature)
{ {
if (pCreature->isQuestGiver()) if (creature->isQuestGiver())
pPlayer->PrepareQuestMenu(pCreature->GetGUID()); player->PrepareQuestMenu(creature->GetGUID());
if (pCreature->GetEntry() == NPC_JAINA_PART1) if (creature->GetEntry() == NPC_JAINA_PART1)
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_JAINA_ITEM, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1); player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_JAINA_ITEM, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
else else
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_SYLVANAS_ITEM, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1); player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_SYLVANAS_ITEM, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
pPlayer->SEND_GOSSIP_MENU(DEFAULT_GOSSIP_MESSAGE, pCreature->GetGUID()); player->SEND_GOSSIP_MENU(DEFAULT_GOSSIP_MESSAGE, creature->GetGUID());
return true; return true;
} }
bool OnGossipSelect(Player* pPlayer, Creature* pCreature, uint32 /*uiSender*/, uint32 uiAction) bool OnGossipSelect(Player* player, Creature* creature, uint32 /*uiSender*/, uint32 uiAction)
{ {
pPlayer->PlayerTalkClass->ClearMenus(); player->PlayerTalkClass->ClearMenus();
switch(uiAction) switch(uiAction)
{ {
case GOSSIP_ACTION_INFO_DEF+1: case GOSSIP_ACTION_INFO_DEF+1:
pPlayer->CLOSE_GOSSIP_MENU(); player->CLOSE_GOSSIP_MENU();
if (pCreature->AI()) if (creature->AI())
pCreature->AI()->DoAction(ACTION_INTRO); creature->AI()->DoAction(ACTION_INTRO);
break; break;
} }
return true; return true;
} }
CreatureAI *GetAI(Creature *creature) const CreatureAI *GetAI(Creature* creature) const
{ {
return new npc_jaina_fosAI(creature); return new npc_jaina_fosAI(creature);
} }
@@ -417,7 +417,7 @@ public:
struct mob_spiteful_apparitionAI: public ScriptedAI struct mob_spiteful_apparitionAI: public ScriptedAI
{ {
mob_spiteful_apparitionAI(Creature *c) : ScriptedAI(c) mob_spiteful_apparitionAI(Creature* creature) : ScriptedAI(creature)
{ {
} }
@@ -449,7 +449,7 @@ public:
switch(eventId) switch(eventId)
{ {
case EVENT_SPITE: case EVENT_SPITE:
DoCast(me->getVictim(), SPELL_SPITE); DoCastVictim(SPELL_SPITE);
events.RescheduleEvent(EVENT_SPITE, 8000); events.RescheduleEvent(EVENT_SPITE, 8000);
return; return;
} }
@@ -459,7 +459,7 @@ public:
} }
}; };
CreatureAI *GetAI(Creature *creature) const CreatureAI *GetAI(Creature* creature) const
{ {
return new mob_spiteful_apparitionAI(creature); return new mob_spiteful_apparitionAI(creature);
} }
@@ -472,7 +472,7 @@ public:
struct mob_spectral_wardenAI: public ScriptedAI struct mob_spectral_wardenAI: public ScriptedAI
{ {
mob_spectral_wardenAI(Creature *c) : ScriptedAI(c) mob_spectral_wardenAI(Creature* creature) : ScriptedAI(creature)
{ {
} }
@@ -505,12 +505,12 @@ public:
switch(eventId) switch(eventId)
{ {
case EVENT_VEIL_OF_SHADOWS: case EVENT_VEIL_OF_SHADOWS:
DoCast(me->getVictim(), SPELL_VEIL_OF_SHADOWS); DoCastVictim(SPELL_VEIL_OF_SHADOWS);
events.RescheduleEvent(EVENT_VEIL_OF_SHADOWS, 10000); events.RescheduleEvent(EVENT_VEIL_OF_SHADOWS, 10000);
return; return;
case EVENT_WAIL_OF_SOULS: case EVENT_WAIL_OF_SOULS:
if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0)) if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM, 0))
DoCast(pTarget, SPELL_WAIL_OF_SOULS); DoCast(target, SPELL_WAIL_OF_SOULS);
events.RescheduleEvent(EVENT_WAIL_OF_SOULS, 5000); events.RescheduleEvent(EVENT_WAIL_OF_SOULS, 5000);
return; return;
} }
@@ -519,7 +519,7 @@ public:
} }
}; };
CreatureAI *GetAI(Creature *creature) const CreatureAI *GetAI(Creature* creature) const
{ {
return new mob_spectral_wardenAI(creature); return new mob_spectral_wardenAI(creature);
} }
@@ -532,7 +532,7 @@ public:
struct mob_soulguard_watchmanAI: public ScriptedAI struct mob_soulguard_watchmanAI: public ScriptedAI
{ {
mob_soulguard_watchmanAI(Creature *c) : ScriptedAI(c) { } mob_soulguard_watchmanAI(Creature* creature) : ScriptedAI(creature) { }
EventMap events; EventMap events;
@@ -576,7 +576,7 @@ public:
} }
}; };
CreatureAI *GetAI(Creature *creature) const CreatureAI *GetAI(Creature* creature) const
{ {
return new mob_soulguard_watchmanAI(creature); return new mob_soulguard_watchmanAI(creature);
} }
@@ -589,7 +589,7 @@ public:
struct mob_soulguard_reaperAI: public ScriptedAI struct mob_soulguard_reaperAI: public ScriptedAI
{ {
mob_soulguard_reaperAI(Creature *c) : ScriptedAI(c) { } mob_soulguard_reaperAI(Creature* creature) : ScriptedAI(creature) { }
EventMap events; EventMap events;
@@ -624,8 +624,8 @@ public:
events.RescheduleEvent(EVENT_FROST_NOVA, 9600); events.RescheduleEvent(EVENT_FROST_NOVA, 9600);
return; return;
case EVENT_SHADOW_LANCE: case EVENT_SHADOW_LANCE:
if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0)) if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM, 0))
DoCast(pTarget, SPELL_SHADOW_LANCE); DoCast(target, SPELL_SHADOW_LANCE);
events.RescheduleEvent(EVENT_SHADOW_LANCE, 8000); events.RescheduleEvent(EVENT_SHADOW_LANCE, 8000);
return; return;
} }
@@ -635,7 +635,7 @@ public:
} }
}; };
CreatureAI *GetAI(Creature *creature) const CreatureAI *GetAI(Creature* creature) const
{ {
return new mob_soulguard_reaperAI(creature); return new mob_soulguard_reaperAI(creature);
} }
@@ -648,7 +648,7 @@ public:
struct mob_soulguard_bonecasterAI: public ScriptedAI struct mob_soulguard_bonecasterAI: public ScriptedAI
{ {
mob_soulguard_bonecasterAI(Creature *c) : ScriptedAI(c) { } mob_soulguard_bonecasterAI(Creature* creature) : ScriptedAI(creature) { }
EventMap events; EventMap events;
@@ -698,7 +698,7 @@ public:
} }
}; };
CreatureAI *GetAI(Creature *creature) const CreatureAI *GetAI(Creature* creature) const
{ {
return new mob_soulguard_bonecasterAI(creature); return new mob_soulguard_bonecasterAI(creature);
} }
@@ -711,7 +711,7 @@ public:
struct mob_soulguard_animatorAI : public ScriptedAI struct mob_soulguard_animatorAI : public ScriptedAI
{ {
mob_soulguard_animatorAI(Creature *c) : ScriptedAI(c) mob_soulguard_animatorAI(Creature* creature) : ScriptedAI(creature)
{ {
} }
@@ -750,18 +750,18 @@ public:
events.RescheduleEvent(EVENT_RAISE_DEAD, 25000); events.RescheduleEvent(EVENT_RAISE_DEAD, 25000);
return; return;
case EVENT_SHADOW_BOLT: case EVENT_SHADOW_BOLT:
if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0)) if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM, 0))
DoCast(pTarget, SPELL_SHADOW_BOLT); DoCast(target, SPELL_SHADOW_BOLT);
events.RescheduleEvent(EVENT_SHADOW_BOLT, 5000); events.RescheduleEvent(EVENT_SHADOW_BOLT, 5000);
return; return;
case EVENT_SOUL_SICKNESS: case EVENT_SOUL_SICKNESS:
if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0)) if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM, 0))
DoCast(pTarget, SPELL_SOUL_SICKNESS); DoCast(target, SPELL_SOUL_SICKNESS);
events.RescheduleEvent(EVENT_SOUL_SICKNESS, 10000); events.RescheduleEvent(EVENT_SOUL_SICKNESS, 10000);
return; return;
case EVENT_SOUL_SIPHON: case EVENT_SOUL_SIPHON:
if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0)) if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM, 0))
DoCast(pTarget, SPELL_SOUL_SIPHON); DoCast(target, SPELL_SOUL_SIPHON);
events.RescheduleEvent(EVENT_SOUL_SIPHON, 8000); events.RescheduleEvent(EVENT_SOUL_SIPHON, 8000);
return; return;
} }
@@ -771,7 +771,7 @@ public:
} }
}; };
CreatureAI *GetAI(Creature *creature) const CreatureAI *GetAI(Creature* creature) const
{ {
return new mob_soulguard_animatorAI(creature); return new mob_soulguard_animatorAI(creature);
} }
@@ -784,7 +784,7 @@ public:
struct mob_soulguard_adeptAI: public ScriptedAI struct mob_soulguard_adeptAI: public ScriptedAI
{ {
mob_soulguard_adeptAI(Creature *c) : ScriptedAI(c) mob_soulguard_adeptAI(Creature* creature) : ScriptedAI(creature)
{ {
} }
@@ -823,13 +823,13 @@ public:
events.RescheduleEvent(EVENT_RAISE_DEAD, 25000); events.RescheduleEvent(EVENT_RAISE_DEAD, 25000);
return; return;
case EVENT_SHADOW_BOLT: case EVENT_SHADOW_BOLT:
if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0)) if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM, 0))
DoCast(pTarget, SPELL_SHADOW_BOLT); DoCast(target, SPELL_SHADOW_BOLT);
events.RescheduleEvent(EVENT_SHADOW_BOLT, 4000); events.RescheduleEvent(EVENT_SHADOW_BOLT, 4000);
return; return;
case EVENT_DRAIN_LIFE: case EVENT_DRAIN_LIFE:
if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0)) if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM, 0))
DoCast(pTarget, SPELL_DRAIN_LIFE); DoCast(target, SPELL_DRAIN_LIFE);
events.RescheduleEvent(EVENT_DRAIN_LIFE, 9000); events.RescheduleEvent(EVENT_DRAIN_LIFE, 9000);
return; return;
case EVENT_SHADOW_MEND: case EVENT_SHADOW_MEND:
@@ -843,7 +843,7 @@ public:
} }
}; };
CreatureAI *GetAI(Creature *creature) const CreatureAI *GetAI(Creature* creature) const
{ {
return new mob_soulguard_adeptAI(creature); return new mob_soulguard_adeptAI(creature);
} }
@@ -856,7 +856,7 @@ public:
struct mob_soul_horrorAI : public ScriptedAI struct mob_soul_horrorAI : public ScriptedAI
{ {
mob_soul_horrorAI(Creature *c) : ScriptedAI(c) { } mob_soul_horrorAI(Creature* creature) : ScriptedAI(creature) { }
EventMap events; EventMap events;
@@ -896,7 +896,7 @@ public:
} }
}; };
CreatureAI *GetAI(Creature *creature) const CreatureAI *GetAI(Creature* creature) const
{ {
return new mob_soul_horrorAI(creature); return new mob_soul_horrorAI(creature);
} }
@@ -904,14 +904,14 @@ public:
void AddSC_forge_of_souls() void AddSC_forge_of_souls()
{ {
new npc_sylvanas_fos; new npc_sylvanas_fos();
new npc_jaina_fos; new npc_jaina_fos();
new mob_spiteful_apparition; new mob_spiteful_apparition();
new mob_spectral_warden; new mob_spectral_warden();
new mob_soulguard_watchman; new mob_soulguard_watchman();
new mob_soulguard_reaper; new mob_soulguard_reaper();
new mob_soulguard_bonecaster; new mob_soulguard_bonecaster();
new mob_soulguard_animator; new mob_soulguard_animator();
new mob_soulguard_adept; new mob_soulguard_adept();
new mob_soul_horror; new mob_soul_horror();
} }
@@ -18,16 +18,14 @@
#ifndef DEF_FORGE_OF_SOULS_H #ifndef DEF_FORGE_OF_SOULS_H
#define DEF_FORGE_OF_SOULS_H #define DEF_FORGE_OF_SOULS_H
#define FoSScriptName "instance_forge_of_souls"
enum Data enum Data
{ {
DATA_DEVOURER_EVENT = 1, DATA_BRONJAHM = 0,
DATA_TEAM_IN_INSTANCE = 2, DATA_DEVOURER = 1,
}; DATA_DEVOURER_EVENT = 2,
DATA_TEAM_IN_INSTANCE = 3,
enum Data64
{
DATA_BRONJAHM,
DATA_DEVOURER,
}; };
enum Creatures enum Creatures
@@ -28,34 +28,33 @@
class instance_forge_of_souls : public InstanceMapScript class instance_forge_of_souls : public InstanceMapScript
{ {
public: public:
instance_forge_of_souls() : InstanceMapScript("instance_forge_of_souls", 632) { } instance_forge_of_souls() : InstanceMapScript(FoSScriptName, 632) { }
struct instance_forge_of_souls_InstanceScript : public InstanceScript struct instance_forge_of_souls_InstanceScript : public InstanceScript
{ {
instance_forge_of_souls_InstanceScript(Map* pMap) : InstanceScript(pMap) instance_forge_of_souls_InstanceScript(Map* map) : InstanceScript(map)
{ {
SetBossNumber(MAX_ENCOUNTER); SetBossNumber(MAX_ENCOUNTER);
uiBronjahm = 0; bronjahm = 0;
uiDevourer = 0; devourerOfSouls = 0;
uiTeamInInstance = 0; teamInInstance = 0;
} }
void OnCreatureCreate(Creature* pCreature, bool /*add*/) void OnCreatureCreate(Creature* creature, bool /*add*/)
{ {
Map::PlayerList const &players = instance->GetPlayers(); Map::PlayerList const &players = instance->GetPlayers();
if (!players.isEmpty()) if (!players.isEmpty())
if (Player* pPlayer = players.begin()->getSource()) if (Player* player = players.begin()->getSource())
uiTeamInInstance = pPlayer->GetTeamId(); teamInInstance = player->GetTeamId();
switch (pCreature->GetEntry()) switch (creature->GetEntry())
{ {
case CREATURE_BRONJAHM: case CREATURE_BRONJAHM:
uiBronjahm = pCreature->GetGUID(); bronjahm = creature->GetGUID();
break; break;
case CREATURE_DEVOURER: case CREATURE_DEVOURER:
uiDevourer = pCreature->GetGUID(); devourerOfSouls = creature->GetGUID();
break; break;
} }
} }
@@ -65,7 +64,7 @@ class instance_forge_of_souls : public InstanceMapScript
switch (type) switch (type)
{ {
case DATA_TEAM_IN_INSTANCE: case DATA_TEAM_IN_INSTANCE:
return uiTeamInInstance; return teamInInstance;
default: default:
break; break;
} }
@@ -73,14 +72,14 @@ class instance_forge_of_souls : public InstanceMapScript
return 0; return 0;
} }
uint64 GetData64(uint32 identifier) uint64 GetData64(uint32 type)
{ {
switch (identifier) switch (type)
{ {
case DATA_BRONJAHM: case DATA_BRONJAHM:
return uiBronjahm; return bronjahm;
case DATA_DEVOURER: case DATA_DEVOURER:
return uiDevourer; return devourerOfSouls;
default: default:
break; break;
} }
@@ -130,10 +129,10 @@ class instance_forge_of_souls : public InstanceMapScript
} }
private: private:
uint64 uiBronjahm; uint64 bronjahm;
uint64 uiDevourer; uint64 devourerOfSouls;
uint32 uiTeamInInstance; uint32 teamInInstance;
}; };
InstanceScript* GetInstanceScript(InstanceMap *map) const InstanceScript* GetInstanceScript(InstanceMap *map) const