mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-02-02 15:17:27 +01:00
Scripts/Stratholme: Added missing dungeon encounter ids
(cherry picked from commit 4370f2fe29)
This commit is contained in:
@@ -16,7 +16,6 @@
|
||||
*/
|
||||
|
||||
#include "ScriptMgr.h"
|
||||
#include "InstanceScript.h"
|
||||
#include "ScriptedCreature.h"
|
||||
#include "SpellInfo.h"
|
||||
#include "stratholme.h"
|
||||
@@ -62,23 +61,10 @@ uint32 const RaiseDeadSpells[6] =
|
||||
struct boss_baron_rivendare : public BossAI
|
||||
{
|
||||
public:
|
||||
boss_baron_rivendare(Creature* creature) : BossAI(creature, TYPE_BARON), RaiseDead(false) { }
|
||||
|
||||
void Reset() override
|
||||
{
|
||||
// needed until re-write of instance scripts is done
|
||||
if (instance->GetData(TYPE_RAMSTEIN) == DONE)
|
||||
instance->SetData(TYPE_BARON, NOT_STARTED);
|
||||
|
||||
BossAI::Reset();
|
||||
}
|
||||
boss_baron_rivendare(Creature* creature) : BossAI(creature, BOSS_RIVENDARE), RaiseDead(false) { }
|
||||
|
||||
void JustEngagedWith(Unit* who) override
|
||||
{
|
||||
// needed until re-write of instance scripts is done
|
||||
if (instance->GetData(TYPE_BARON) == NOT_STARTED)
|
||||
instance->SetData(TYPE_BARON, IN_PROGRESS);
|
||||
|
||||
events.ScheduleEvent(EVENT_SHADOWBOLT, 5s);
|
||||
events.ScheduleEvent(EVENT_CLEAVE, 8s);
|
||||
events.ScheduleEvent(EVENT_MORTALSTRIKE, 12s);
|
||||
@@ -87,14 +73,6 @@ public:
|
||||
BossAI::JustEngagedWith(who);
|
||||
}
|
||||
|
||||
void JustDied(Unit* killer) override
|
||||
{
|
||||
// needed until re-write of instance scripts is done
|
||||
instance->SetData(TYPE_BARON, DONE);
|
||||
|
||||
BossAI::JustDied(killer);
|
||||
}
|
||||
|
||||
void UpdateAI(uint32 diff) override
|
||||
{
|
||||
if (!UpdateVictim())
|
||||
|
||||
@@ -43,12 +43,14 @@ enum BaronessAnastariEvents
|
||||
|
||||
struct boss_baroness_anastari : public BossAI
|
||||
{
|
||||
boss_baroness_anastari(Creature* creature) : BossAI(creature, TYPE_BARONESS) { }
|
||||
boss_baroness_anastari(Creature* creature) : BossAI(creature, BOSS_BARONESS_ANASTARI) { }
|
||||
|
||||
ObjectGuid _possessedTargetGuid;
|
||||
|
||||
void Reset() override
|
||||
{
|
||||
_Reset();
|
||||
|
||||
_possessedTargetGuid.Clear();
|
||||
|
||||
instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_POSSESS);
|
||||
@@ -66,13 +68,6 @@ struct boss_baroness_anastari : public BossAI
|
||||
events.ScheduleEvent(EVENT_SPELL_POSSESS, 20s, 30s);
|
||||
}
|
||||
|
||||
void JustDied(Unit* /*killer*/) override
|
||||
{
|
||||
// needed until crystals implemented,
|
||||
// see line 305 instance_stratholme.cpp
|
||||
instance->SetData(TYPE_BARONESS, IN_PROGRESS);
|
||||
}
|
||||
|
||||
void UpdateAI(uint32 diff) override
|
||||
{
|
||||
if (!UpdateVictim())
|
||||
|
||||
@@ -41,21 +41,18 @@ enum WilleyEvents
|
||||
};
|
||||
|
||||
// 10997 - Cannon Master Willey
|
||||
struct boss_cannon_master_willey : public ScriptedAI
|
||||
struct boss_cannon_master_willey : public BossAI
|
||||
{
|
||||
boss_cannon_master_willey(Creature* creature) : ScriptedAI(creature) { }
|
||||
boss_cannon_master_willey(Creature* creature) : BossAI(creature, BOSS_CANNON_MASTER_WILLEY) { }
|
||||
|
||||
void Reset() override
|
||||
void JustEngagedWith(Unit* who) override
|
||||
{
|
||||
_events.Reset();
|
||||
}
|
||||
BossAI::JustEngagedWith(who);
|
||||
|
||||
void JustEngagedWith(Unit* /*who*/) override
|
||||
{
|
||||
_events.ScheduleEvent(EVENT_SHOOT, 0s);
|
||||
_events.ScheduleEvent(EVENT_KNOCK_AWAY, 10s, 20s);
|
||||
_events.ScheduleEvent(EVENT_PUMMEL, 10s, 15s);
|
||||
_events.ScheduleEvent(EVENT_SUMMON_RIFLEMAN, 5s, 10s);
|
||||
events.ScheduleEvent(EVENT_SHOOT, 0s);
|
||||
events.ScheduleEvent(EVENT_KNOCK_AWAY, 10s, 20s);
|
||||
events.ScheduleEvent(EVENT_PUMMEL, 10s, 15s);
|
||||
events.ScheduleEvent(EVENT_SUMMON_RIFLEMAN, 5s, 10s);
|
||||
}
|
||||
|
||||
void AttackStart(Unit* who) override
|
||||
@@ -68,30 +65,30 @@ struct boss_cannon_master_willey : public ScriptedAI
|
||||
if (!UpdateVictim())
|
||||
return;
|
||||
|
||||
_events.Update(diff);
|
||||
events.Update(diff);
|
||||
|
||||
if (me->HasUnitState(UNIT_STATE_CASTING))
|
||||
return;
|
||||
|
||||
while (uint32 eventId = _events.ExecuteEvent())
|
||||
while (uint32 eventId = events.ExecuteEvent())
|
||||
{
|
||||
switch (eventId)
|
||||
{
|
||||
case EVENT_SHOOT:
|
||||
DoCastVictim(SPELL_SHOOT);
|
||||
_events.Repeat(2s, 4s);
|
||||
events.Repeat(2s, 4s);
|
||||
break;
|
||||
case EVENT_KNOCK_AWAY:
|
||||
DoCastVictim(SPELL_KNOCK_AWAY);
|
||||
_events.Repeat(15s, 25s);
|
||||
events.Repeat(15s, 25s);
|
||||
break;
|
||||
case EVENT_PUMMEL:
|
||||
DoCastVictim(SPELL_PUMMEL);
|
||||
_events.Repeat(10s, 15s);
|
||||
events.Repeat(10s, 15s);
|
||||
break;
|
||||
case EVENT_SUMMON_RIFLEMAN:
|
||||
DoCastSelf(SPELL_SUMMON_RIFLEMAN);
|
||||
_events.Repeat(15s, 25s);
|
||||
events.Repeat(15s, 25s);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
@@ -103,9 +100,6 @@ struct boss_cannon_master_willey : public ScriptedAI
|
||||
|
||||
DoMeleeAttackIfReady();
|
||||
}
|
||||
|
||||
private:
|
||||
EventMap _events;
|
||||
};
|
||||
|
||||
void AddSC_boss_cannon_master_willey()
|
||||
|
||||
@@ -74,13 +74,14 @@ enum DathrohanMisc
|
||||
};
|
||||
|
||||
// 10812 - Grand Crusader Dathrohan
|
||||
struct boss_dathrohan_balnazzar : public ScriptedAI
|
||||
struct boss_dathrohan_balnazzar : public BossAI
|
||||
{
|
||||
boss_dathrohan_balnazzar(Creature* creature) : ScriptedAI(creature), _transformed(false) { }
|
||||
boss_dathrohan_balnazzar(Creature* creature) : BossAI(creature, BOSS_BALNAZZAR), _transformed(false) { }
|
||||
|
||||
void Reset() override
|
||||
{
|
||||
_events.Reset();
|
||||
BossAI::Reset();
|
||||
|
||||
_transformed = false;
|
||||
|
||||
if (me->GetEntry() == NPC_BALNAZZAR)
|
||||
@@ -89,14 +90,16 @@ struct boss_dathrohan_balnazzar : public ScriptedAI
|
||||
SetEquipmentSlots(true);
|
||||
}
|
||||
|
||||
void JustEngagedWith(Unit* /*who*/) override
|
||||
void JustEngagedWith(Unit* who) override
|
||||
{
|
||||
BossAI::JustEngagedWith(who);
|
||||
|
||||
Talk(SAY_AGGRO);
|
||||
|
||||
_events.ScheduleEvent(EVENT_CRUSADERS_HAMMER, 15s, 25s);
|
||||
_events.ScheduleEvent(EVENT_CRUSADER_STRIKE, 5s, 10s);
|
||||
_events.ScheduleEvent(EVENT_HOLY_STRIKE, 10s, 20s);
|
||||
_events.ScheduleEvent(EVENT_MIND_BLAST, 5s, 15s);
|
||||
events.ScheduleEvent(EVENT_CRUSADERS_HAMMER, 15s, 25s);
|
||||
events.ScheduleEvent(EVENT_CRUSADER_STRIKE, 5s, 10s);
|
||||
events.ScheduleEvent(EVENT_HOLY_STRIKE, 10s, 20s);
|
||||
events.ScheduleEvent(EVENT_MIND_BLAST, 5s, 15s);
|
||||
}
|
||||
|
||||
void DamageTaken(Unit* /*attacker*/, uint32& damage, DamageEffectType /*damageType*/, SpellInfo const* /*spellInfo = nullptr*/) override
|
||||
@@ -104,12 +107,14 @@ struct boss_dathrohan_balnazzar : public ScriptedAI
|
||||
if (!_transformed && me->HealthBelowPctDamaged(40, damage))
|
||||
{
|
||||
_transformed = true;
|
||||
_events.ScheduleEvent(EVENT_TRANSFORM_1, 0s);
|
||||
events.ScheduleEvent(EVENT_TRANSFORM_1, 0s);
|
||||
}
|
||||
}
|
||||
|
||||
void JustDied(Unit* /*killer*/) override
|
||||
void JustDied(Unit* killer) override
|
||||
{
|
||||
BossAI::JustDied(killer);
|
||||
|
||||
Talk(SAY_DEATH);
|
||||
me->SummonCreatureGroup(SUMMON_GROUP_DEATH);
|
||||
}
|
||||
@@ -119,78 +124,78 @@ struct boss_dathrohan_balnazzar : public ScriptedAI
|
||||
if (!UpdateVictim())
|
||||
return;
|
||||
|
||||
_events.Update(diff);
|
||||
events.Update(diff);
|
||||
|
||||
if (me->HasUnitState(UNIT_STATE_CASTING))
|
||||
return;
|
||||
|
||||
while (uint32 eventId = _events.ExecuteEvent())
|
||||
while (uint32 eventId = events.ExecuteEvent())
|
||||
{
|
||||
switch (eventId)
|
||||
{
|
||||
case EVENT_CRUSADERS_HAMMER:
|
||||
DoCastSelf(SPELL_CRUSADERS_HAMMER);
|
||||
_events.Repeat(20s, 30s);
|
||||
events.Repeat(20s, 30s);
|
||||
break;
|
||||
case EVENT_CRUSADER_STRIKE:
|
||||
DoCastVictim(SPELL_CRUSADER_STRIKE);
|
||||
_events.Repeat(10s, 20s);
|
||||
events.Repeat(10s, 20s);
|
||||
break;
|
||||
case EVENT_HOLY_STRIKE:
|
||||
DoCastVictim(SPELL_HOLY_STRIKE);
|
||||
_events.Repeat(10s, 15s);
|
||||
events.Repeat(10s, 15s);
|
||||
break;
|
||||
|
||||
case EVENT_MIND_BLAST:
|
||||
DoCastVictim(SPELL_MIND_BLAST);
|
||||
_events.Repeat(10s, 15s);
|
||||
events.Repeat(10s, 15s);
|
||||
break;
|
||||
|
||||
case EVENT_SHADOW_SHOCK:
|
||||
DoCastSelf(SPELL_SHADOW_SHOCK);
|
||||
_events.Repeat(10s, 15s);
|
||||
events.Repeat(10s, 15s);
|
||||
break;
|
||||
case EVENT_PSYCHIC_SCREAM:
|
||||
DoCastSelf(SPELL_PSYCHIC_SCREAM);
|
||||
_events.Repeat(20s, 30s);
|
||||
events.Repeat(20s, 30s);
|
||||
break;
|
||||
case EVENT_SLEEP:
|
||||
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0))
|
||||
DoCast(target, SPELL_SLEEP);
|
||||
_events.Repeat(15s, 20s);
|
||||
events.Repeat(15s, 20s);
|
||||
break;
|
||||
case EVENT_DOMINATION:
|
||||
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 1))
|
||||
DoCast(target, SPELL_DOMINATION);
|
||||
_events.Repeat(20s, 25s);
|
||||
events.Repeat(20s, 25s);
|
||||
break;
|
||||
|
||||
case EVENT_TRANSFORM_1:
|
||||
_events.CancelEvent(EVENT_CRUSADERS_HAMMER);
|
||||
_events.CancelEvent(EVENT_CRUSADER_STRIKE);
|
||||
_events.CancelEvent(EVENT_HOLY_STRIKE);
|
||||
_events.CancelEvent(EVENT_MIND_BLAST);
|
||||
events.CancelEvent(EVENT_CRUSADERS_HAMMER);
|
||||
events.CancelEvent(EVENT_CRUSADER_STRIKE);
|
||||
events.CancelEvent(EVENT_HOLY_STRIKE);
|
||||
events.CancelEvent(EVENT_MIND_BLAST);
|
||||
DoCastSelf(SPELL_BALNAZZAR_TRANSFORM);
|
||||
me->SetReactState(REACT_PASSIVE);
|
||||
_events.ScheduleEvent(EVENT_TRANSFORM_2, 2s);
|
||||
events.ScheduleEvent(EVENT_TRANSFORM_2, 2s);
|
||||
break;
|
||||
case EVENT_TRANSFORM_2:
|
||||
me->UpdateEntry(NPC_BALNAZZAR);
|
||||
me->SetReactState(REACT_PASSIVE);
|
||||
SetEquipmentSlots(false, EQUIP_UNEQUIP);
|
||||
_events.ScheduleEvent(EVENT_TRANSFORM_3, 2s);
|
||||
events.ScheduleEvent(EVENT_TRANSFORM_3, 2s);
|
||||
break;
|
||||
case EVENT_TRANSFORM_3:
|
||||
Talk(SAY_TRANSFORM);
|
||||
_events.ScheduleEvent(EVENT_TRANSFORM_4, 4s);
|
||||
events.ScheduleEvent(EVENT_TRANSFORM_4, 4s);
|
||||
break;
|
||||
case EVENT_TRANSFORM_4:
|
||||
me->SetReactState(REACT_AGGRESSIVE);
|
||||
_events.ScheduleEvent(EVENT_MIND_BLAST, 5s, 15s);
|
||||
_events.ScheduleEvent(EVENT_SHADOW_SHOCK, 10s, 15s);
|
||||
_events.ScheduleEvent(EVENT_PSYCHIC_SCREAM, 15s, 25s);
|
||||
_events.ScheduleEvent(EVENT_SLEEP, 5s, 15s);
|
||||
_events.ScheduleEvent(EVENT_DOMINATION, 15s, 25s);
|
||||
events.ScheduleEvent(EVENT_MIND_BLAST, 5s, 15s);
|
||||
events.ScheduleEvent(EVENT_SHADOW_SHOCK, 10s, 15s);
|
||||
events.ScheduleEvent(EVENT_PSYCHIC_SCREAM, 15s, 25s);
|
||||
events.ScheduleEvent(EVENT_SLEEP, 5s, 15s);
|
||||
events.ScheduleEvent(EVENT_DOMINATION, 15s, 25s);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
@@ -205,7 +210,6 @@ struct boss_dathrohan_balnazzar : public ScriptedAI
|
||||
|
||||
private:
|
||||
bool _transformed;
|
||||
EventMap _events;
|
||||
};
|
||||
|
||||
void AddSC_boss_dathrohan_balnazzar()
|
||||
|
||||
@@ -42,25 +42,24 @@ enum BarthilasEvents
|
||||
};
|
||||
|
||||
// 10435 - Magistrate Barthilas
|
||||
struct boss_magistrate_barthilas : public ScriptedAI
|
||||
struct boss_magistrate_barthilas : public BossAI
|
||||
{
|
||||
boss_magistrate_barthilas(Creature* creature) : ScriptedAI(creature) { }
|
||||
boss_magistrate_barthilas(Creature* creature) : BossAI(creature, BOSS_MAGISTRATE_BARTHILAS) { }
|
||||
|
||||
void Reset() override
|
||||
void JustEngagedWith(Unit* who) override
|
||||
{
|
||||
_events.Reset();
|
||||
BossAI::JustEngagedWith(who);
|
||||
|
||||
events.ScheduleEvent(EVENT_FURIOUS_ANGER, 0s, 4s);
|
||||
events.ScheduleEvent(EVENT_DRAINING_BLOW, 0s, 5s);
|
||||
events.ScheduleEvent(EVENT_CROWD_PUMMEL, 15s, 20s);
|
||||
events.ScheduleEvent(EVENT_MIGHTY_BLOW, 15s, 25s);
|
||||
}
|
||||
|
||||
void JustEngagedWith(Unit* /*who*/) override
|
||||
void JustDied(Unit* killer) override
|
||||
{
|
||||
_events.ScheduleEvent(EVENT_FURIOUS_ANGER, 0s, 4s);
|
||||
_events.ScheduleEvent(EVENT_DRAINING_BLOW, 0s, 5s);
|
||||
_events.ScheduleEvent(EVENT_CROWD_PUMMEL, 15s, 20s);
|
||||
_events.ScheduleEvent(EVENT_MIGHTY_BLOW, 15s, 25s);
|
||||
}
|
||||
BossAI::JustDied(killer);
|
||||
|
||||
void JustDied(Unit* /*killer*/) override
|
||||
{
|
||||
DoCastSelf(SPELL_TRANSFORMATION, true);
|
||||
}
|
||||
|
||||
@@ -69,30 +68,30 @@ struct boss_magistrate_barthilas : public ScriptedAI
|
||||
if (!UpdateVictim())
|
||||
return;
|
||||
|
||||
_events.Update(diff);
|
||||
events.Update(diff);
|
||||
|
||||
if (me->HasUnitState(UNIT_STATE_CASTING))
|
||||
return;
|
||||
|
||||
while (uint32 eventId = _events.ExecuteEvent())
|
||||
while (uint32 eventId = events.ExecuteEvent())
|
||||
{
|
||||
switch (eventId)
|
||||
{
|
||||
case EVENT_FURIOUS_ANGER:
|
||||
DoCastSelf(SPELL_FURIOUS_ANGER);
|
||||
_events.Repeat(4s);
|
||||
events.Repeat(4s);
|
||||
break;
|
||||
case EVENT_DRAINING_BLOW:
|
||||
DoCastVictim(SPELL_DRAINING_BLOW);
|
||||
_events.Repeat(2s, 14s);
|
||||
events.Repeat(2s, 14s);
|
||||
break;
|
||||
case EVENT_CROWD_PUMMEL:
|
||||
DoCastSelf(SPELL_CROWD_PUMMEL);
|
||||
_events.Repeat(25s, 30s);
|
||||
events.Repeat(25s, 30s);
|
||||
break;
|
||||
case EVENT_MIGHTY_BLOW:
|
||||
DoCastVictim(SPELL_MIGHTY_BLOW);
|
||||
_events.Repeat(10s, 15s);
|
||||
events.Repeat(10s, 15s);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
@@ -104,9 +103,6 @@ struct boss_magistrate_barthilas : public ScriptedAI
|
||||
|
||||
DoMeleeAttackIfReady();
|
||||
}
|
||||
|
||||
private:
|
||||
EventMap _events;
|
||||
};
|
||||
|
||||
void AddSC_boss_magistrate_barthilas()
|
||||
|
||||
@@ -42,27 +42,25 @@ enum MalekiEvents
|
||||
};
|
||||
|
||||
// 10438 - Maleki the Pallid
|
||||
struct boss_maleki_the_pallid : public ScriptedAI
|
||||
struct boss_maleki_the_pallid : public BossAI
|
||||
{
|
||||
boss_maleki_the_pallid(Creature* creature) : ScriptedAI(creature), _instance(creature->GetInstanceScript()) { }
|
||||
boss_maleki_the_pallid(Creature* creature) : BossAI(creature, BOSS_MALEKI_THE_PALLID) { }
|
||||
|
||||
void Reset() override
|
||||
{
|
||||
_events.Reset();
|
||||
BossAI::Reset();
|
||||
|
||||
DoCastSelf(SPELL_FROST_ARMOR);
|
||||
}
|
||||
|
||||
void JustEngagedWith(Unit* /*who*/) override
|
||||
void JustEngagedWith(Unit* who) override
|
||||
{
|
||||
_events.ScheduleEvent(EVENT_FROSTBOLT, 0s, 8s);
|
||||
_events.ScheduleEvent(EVENT_DRAIN_LIFE, 20s, 25s);
|
||||
_events.ScheduleEvent(EVENT_DRAIN_MANA, 15s, 25s);
|
||||
_events.ScheduleEvent(EVENT_ICE_TOMB, 10s, 20s);
|
||||
}
|
||||
BossAI::JustEngagedWith(who);
|
||||
|
||||
void JustDied(Unit* /*killer*/) override
|
||||
{
|
||||
_instance->SetData(TYPE_PALLID, IN_PROGRESS);
|
||||
events.ScheduleEvent(EVENT_FROSTBOLT, 0s, 8s);
|
||||
events.ScheduleEvent(EVENT_DRAIN_LIFE, 20s, 25s);
|
||||
events.ScheduleEvent(EVENT_DRAIN_MANA, 15s, 25s);
|
||||
events.ScheduleEvent(EVENT_ICE_TOMB, 10s, 20s);
|
||||
}
|
||||
|
||||
void UpdateAI(uint32 diff) override
|
||||
@@ -70,34 +68,34 @@ struct boss_maleki_the_pallid : public ScriptedAI
|
||||
if (!UpdateVictim())
|
||||
return;
|
||||
|
||||
_events.Update(diff);
|
||||
events.Update(diff);
|
||||
|
||||
if (me->HasUnitState(UNIT_STATE_CASTING))
|
||||
return;
|
||||
|
||||
while (uint32 eventId = _events.ExecuteEvent())
|
||||
while (uint32 eventId = events.ExecuteEvent())
|
||||
{
|
||||
switch (eventId)
|
||||
{
|
||||
case EVENT_FROSTBOLT:
|
||||
DoCastVictim(SPELL_FROSTBOLT);
|
||||
_events.Repeat(2s, 8s);
|
||||
events.Repeat(2s, 8s);
|
||||
break;
|
||||
case EVENT_DRAIN_LIFE:
|
||||
DoCastVictim(SPELL_DRAIN_LIFE);
|
||||
_events.Repeat(20s, 30s);
|
||||
events.Repeat(20s, 30s);
|
||||
break;
|
||||
case EVENT_DRAIN_MANA:
|
||||
{
|
||||
Unit* target = me->GetVictim();
|
||||
if (target && target->GetPowerType() == POWER_MANA)
|
||||
DoCast(target, SPELL_DRAIN_MANA);
|
||||
_events.Repeat(15s, 20s);
|
||||
events.Repeat(15s, 20s);
|
||||
break;
|
||||
}
|
||||
case EVENT_ICE_TOMB:
|
||||
DoCastVictim(SPELL_ICE_TOMB);
|
||||
_events.Repeat(15s, 25s);
|
||||
events.Repeat(15s, 25s);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
@@ -106,10 +104,6 @@ struct boss_maleki_the_pallid : public ScriptedAI
|
||||
|
||||
DoMeleeAttackIfReady();
|
||||
}
|
||||
|
||||
private:
|
||||
EventMap _events;
|
||||
InstanceScript* _instance;
|
||||
};
|
||||
|
||||
void AddSC_boss_maleki_the_pallid()
|
||||
|
||||
@@ -20,7 +20,6 @@
|
||||
*/
|
||||
|
||||
#include "ScriptMgr.h"
|
||||
#include "InstanceScript.h"
|
||||
#include "ScriptedCreature.h"
|
||||
#include "stratholme.h"
|
||||
|
||||
@@ -41,26 +40,18 @@ enum NerubenkanEvents
|
||||
};
|
||||
|
||||
// 10437 - Nerub'enkan
|
||||
struct boss_nerubenkan : public ScriptedAI
|
||||
struct boss_nerubenkan : public BossAI
|
||||
{
|
||||
boss_nerubenkan(Creature* creature) : ScriptedAI(creature), _instance(creature->GetInstanceScript()) { }
|
||||
boss_nerubenkan(Creature* creature) : BossAI(creature, BOSS_NERUB_ENKAN) { }
|
||||
|
||||
void Reset() override
|
||||
void JustEngagedWith(Unit* who) override
|
||||
{
|
||||
_events.Reset();
|
||||
}
|
||||
BossAI::JustEngagedWith(who);
|
||||
|
||||
void JustEngagedWith(Unit* /*who*/) override
|
||||
{
|
||||
_events.ScheduleEvent(EVENT_CRYPT_SCARABS, 0s);
|
||||
_events.ScheduleEvent(EVENT_ENCASING_WEBS, 5s, 10s);
|
||||
_events.ScheduleEvent(EVENT_PIERCE_ARMOR, 5s, 20s);
|
||||
_events.ScheduleEvent(EVENT_RAISE_SCARAB, 6s, 12s);
|
||||
}
|
||||
|
||||
void JustDied(Unit* /*killer*/) override
|
||||
{
|
||||
_instance->SetData(TYPE_NERUB, IN_PROGRESS);
|
||||
events.ScheduleEvent(EVENT_CRYPT_SCARABS, 0s);
|
||||
events.ScheduleEvent(EVENT_ENCASING_WEBS, 5s, 10s);
|
||||
events.ScheduleEvent(EVENT_PIERCE_ARMOR, 5s, 20s);
|
||||
events.ScheduleEvent(EVENT_RAISE_SCARAB, 6s, 12s);
|
||||
}
|
||||
|
||||
void UpdateAI(uint32 diff) override
|
||||
@@ -68,30 +59,30 @@ struct boss_nerubenkan : public ScriptedAI
|
||||
if (!UpdateVictim())
|
||||
return;
|
||||
|
||||
_events.Update(diff);
|
||||
events.Update(diff);
|
||||
|
||||
if (me->HasUnitState(UNIT_STATE_CASTING))
|
||||
return;
|
||||
|
||||
while (uint32 eventId = _events.ExecuteEvent())
|
||||
while (uint32 eventId = events.ExecuteEvent())
|
||||
{
|
||||
switch (eventId)
|
||||
{
|
||||
case EVENT_CRYPT_SCARABS:
|
||||
DoCastVictim(SPELL_CRYPT_SCARABS);
|
||||
_events.Repeat(2s, 10s);
|
||||
events.Repeat(2s, 10s);
|
||||
break;
|
||||
case EVENT_ENCASING_WEBS:
|
||||
DoCastVictim(SPELL_ENCASING_WEBS);
|
||||
_events.Repeat(6s, 10s);
|
||||
events.Repeat(6s, 10s);
|
||||
break;
|
||||
case EVENT_PIERCE_ARMOR:
|
||||
DoCastVictim(SPELL_PIERCE_ARMOR);
|
||||
_events.Repeat(10s, 20s);
|
||||
events.Repeat(10s, 20s);
|
||||
break;
|
||||
case EVENT_RAISE_SCARAB:
|
||||
DoCastSelf(SPELL_RAISE_SCARAB);
|
||||
_events.Repeat(25s, 30s);
|
||||
events.Repeat(25s, 30s);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
@@ -100,10 +91,6 @@ struct boss_nerubenkan : public ScriptedAI
|
||||
|
||||
DoMeleeAttackIfReady();
|
||||
}
|
||||
|
||||
private:
|
||||
EventMap _events;
|
||||
InstanceScript* _instance;
|
||||
};
|
||||
|
||||
void AddSC_boss_nerubenkan()
|
||||
|
||||
@@ -49,7 +49,7 @@ enum MalownEvents
|
||||
// 11143 - Postmaster Malown
|
||||
struct boss_postmaster_malown : public BossAI
|
||||
{
|
||||
boss_postmaster_malown(Creature* creature) : BossAI(creature, TYPE_MALOWN) { }
|
||||
boss_postmaster_malown(Creature* creature) : BossAI(creature, BOSS_POSTMASTER_MALOWN) { }
|
||||
|
||||
void Reset() override
|
||||
{
|
||||
|
||||
@@ -21,7 +21,6 @@
|
||||
*/
|
||||
|
||||
#include "ScriptMgr.h"
|
||||
#include "InstanceScript.h"
|
||||
#include "ScriptedCreature.h"
|
||||
#include "stratholme.h"
|
||||
|
||||
@@ -45,28 +44,31 @@ enum RamsteinMisc
|
||||
};
|
||||
|
||||
// 10439 - Ramstein the Gorger
|
||||
struct boss_ramstein_the_gorger : public ScriptedAI
|
||||
struct boss_ramstein_the_gorger : public BossAI
|
||||
{
|
||||
boss_ramstein_the_gorger(Creature* creature) : ScriptedAI(creature), _instance(creature->GetInstanceScript()) { }
|
||||
boss_ramstein_the_gorger(Creature* creature) : BossAI(creature, BOSS_RAMSTEIN_THE_GORGER) { }
|
||||
|
||||
void Reset() override
|
||||
{
|
||||
_events.Reset();
|
||||
BossAI::Reset();
|
||||
|
||||
DoCastSelf(SPELL_FLURRY);
|
||||
}
|
||||
|
||||
void JustEngagedWith(Unit* /*who*/) override
|
||||
void JustEngagedWith(Unit* who) override
|
||||
{
|
||||
_events.ScheduleEvent(EVENT_TRAMPLE, 10s, 15s);
|
||||
_events.ScheduleEvent(EVENT_KNOCKOUT, 10s, 20s);
|
||||
BossAI::JustEngagedWith(who);
|
||||
|
||||
events.ScheduleEvent(EVENT_TRAMPLE, 10s, 15s);
|
||||
events.ScheduleEvent(EVENT_KNOCKOUT, 10s, 20s);
|
||||
}
|
||||
|
||||
void JustDied(Unit* /*killer*/) override
|
||||
void JustDied(Unit* killer) override
|
||||
{
|
||||
BossAI::JustDied(killer);
|
||||
|
||||
me->SummonCreatureGroup(SUMMON_GROUP_SENTRY);
|
||||
me->SummonCreatureGroup(SUMMON_GROUP_UNDEAD);
|
||||
|
||||
_instance->SetData(TYPE_RAMSTEIN, DONE);
|
||||
}
|
||||
|
||||
void UpdateAI(uint32 diff) override
|
||||
@@ -74,22 +76,22 @@ struct boss_ramstein_the_gorger : public ScriptedAI
|
||||
if (!UpdateVictim())
|
||||
return;
|
||||
|
||||
_events.Update(diff);
|
||||
events.Update(diff);
|
||||
|
||||
if (me->HasUnitState(UNIT_STATE_CASTING))
|
||||
return;
|
||||
|
||||
while (uint32 eventId = _events.ExecuteEvent())
|
||||
while (uint32 eventId = events.ExecuteEvent())
|
||||
{
|
||||
switch (eventId)
|
||||
{
|
||||
case EVENT_TRAMPLE:
|
||||
DoCastSelf(SPELL_TRAMPLE);
|
||||
_events.Repeat(10s, 25s);
|
||||
events.Repeat(10s, 25s);
|
||||
break;
|
||||
case EVENT_KNOCKOUT:
|
||||
DoCastVictim(SPELL_KNOCKOUT);
|
||||
_events.Repeat(15s, 20s);
|
||||
events.Repeat(15s, 20s);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
@@ -101,10 +103,6 @@ struct boss_ramstein_the_gorger : public ScriptedAI
|
||||
|
||||
DoMeleeAttackIfReady();
|
||||
}
|
||||
|
||||
private:
|
||||
EventMap _events;
|
||||
InstanceScript* _instance;
|
||||
};
|
||||
|
||||
void AddSC_boss_ramstein_the_gorger()
|
||||
|
||||
@@ -40,21 +40,24 @@ enum TimmyEvents
|
||||
};
|
||||
|
||||
// 10808 - Timmy the Cruel
|
||||
struct boss_timmy_the_cruel : public ScriptedAI
|
||||
struct boss_timmy_the_cruel : public BossAI
|
||||
{
|
||||
boss_timmy_the_cruel(Creature* creature) : ScriptedAI(creature) { }
|
||||
boss_timmy_the_cruel(Creature* creature) : BossAI(creature, BOSS_TIMMY_THE_CRUEL) { }
|
||||
|
||||
void Reset() override
|
||||
{
|
||||
_events.Reset();
|
||||
BossAI::Reset();
|
||||
|
||||
DoCastSelf(SPELL_THRASH);
|
||||
}
|
||||
|
||||
void JustEngagedWith(Unit* /*who*/) override
|
||||
void JustEngagedWith(Unit* who) override
|
||||
{
|
||||
BossAI::JustEngagedWith(who);
|
||||
|
||||
Talk(SAY_AGGRO);
|
||||
|
||||
_events.ScheduleEvent(EVENT_RAVENOUS_CLAW, 10s, 15s);
|
||||
events.ScheduleEvent(EVENT_RAVENOUS_CLAW, 10s, 15s);
|
||||
}
|
||||
|
||||
void UpdateAI(uint32 diff) override
|
||||
@@ -62,18 +65,18 @@ struct boss_timmy_the_cruel : public ScriptedAI
|
||||
if (!UpdateVictim())
|
||||
return;
|
||||
|
||||
_events.Update(diff);
|
||||
events.Update(diff);
|
||||
|
||||
if (me->HasUnitState(UNIT_STATE_CASTING))
|
||||
return;
|
||||
|
||||
while (uint32 eventId = _events.ExecuteEvent())
|
||||
while (uint32 eventId = events.ExecuteEvent())
|
||||
{
|
||||
switch (eventId)
|
||||
{
|
||||
case EVENT_RAVENOUS_CLAW:
|
||||
DoCastVictim(SPELL_RAVENOUS_CLAW);
|
||||
_events.Repeat(10s, 15s);
|
||||
events.Repeat(10s, 15s);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
@@ -85,9 +88,6 @@ struct boss_timmy_the_cruel : public ScriptedAI
|
||||
|
||||
DoMeleeAttackIfReady();
|
||||
}
|
||||
|
||||
private:
|
||||
EventMap _events;
|
||||
};
|
||||
|
||||
void AddSC_boss_timmy_the_cruel()
|
||||
|
||||
@@ -84,21 +84,22 @@ class instance_stratholme : public InstanceMapScript
|
||||
instance_stratholme_InstanceMapScript(InstanceMap* map) : InstanceScript(map)
|
||||
{
|
||||
SetHeaders(DataHeader);
|
||||
|
||||
for (uint8 i = 0; i < MAX_ENCOUNTER; ++i)
|
||||
EncounterState[i] = NOT_STARTED;
|
||||
SetBossNumber(MAX_ENCOUNTER);
|
||||
|
||||
for (uint8 i = 0; i < 5; ++i)
|
||||
IsSilverHandDead[i] = false;
|
||||
|
||||
timmySpawned = false;
|
||||
scarletsKilled = 0;
|
||||
brokenCrystals = 0;
|
||||
baronRunState = NOT_STARTED;
|
||||
|
||||
events.ScheduleEvent(EVENT_RAT_TRAP_CLOSE, 15s);
|
||||
}
|
||||
|
||||
uint32 EncounterState[MAX_ENCOUNTER];
|
||||
uint8 scarletsKilled;
|
||||
int32 brokenCrystals;
|
||||
EncounterState baronRunState;
|
||||
|
||||
bool IsSilverHandDead[5];
|
||||
bool timmySpawned;
|
||||
@@ -148,6 +149,20 @@ class instance_stratholme : public InstanceMapScript
|
||||
}
|
||||
break;
|
||||
}
|
||||
case NPC_HEARTHSINGER_FORRESTEN:
|
||||
SetBossState(BOSS_HEARTHSINGER_FORRESTEN, DONE);
|
||||
break;
|
||||
case NPC_COMMANDER_MALOR:
|
||||
SetBossState(BOSS_COMMANDER_MALOR, DONE);
|
||||
break;
|
||||
case NPC_INSTRUCTOR_GALFORD:
|
||||
SetBossState(BOSS_INSTRUCTOR_GALFORD, DONE);
|
||||
break;
|
||||
case NPC_THE_UNFORGIVEN:
|
||||
SetBossState(BOSS_THE_UNFORGIVEN, DONE);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
case NPC_PLAGUED_RAT:
|
||||
{
|
||||
for (GateTrapData& trapGate : TrapGates)
|
||||
@@ -167,8 +182,7 @@ class instance_stratholme : public InstanceMapScript
|
||||
|
||||
bool StartSlaugtherSquare()
|
||||
{
|
||||
//change to DONE when crystals implemented
|
||||
if (EncounterState[1] == IN_PROGRESS && EncounterState[2] == IN_PROGRESS && EncounterState[3] == IN_PROGRESS)
|
||||
if (brokenCrystals >= 3)
|
||||
{
|
||||
HandleGameObject(portGauntletGUID, true);
|
||||
HandleGameObject(portSlaugtherGUID, true);
|
||||
@@ -264,37 +278,37 @@ class instance_stratholme : public InstanceMapScript
|
||||
break;
|
||||
case GO_ZIGGURAT1:
|
||||
ziggurat1GUID = go->GetGUID();
|
||||
if (GetData(TYPE_BARONESS) == IN_PROGRESS)
|
||||
if (GetBossState(BOSS_BARONESS_ANASTARI) == DONE)
|
||||
HandleGameObject(ObjectGuid::Empty, true, go);
|
||||
break;
|
||||
case GO_ZIGGURAT2:
|
||||
ziggurat2GUID = go->GetGUID();
|
||||
if (GetData(TYPE_NERUB) == IN_PROGRESS)
|
||||
if (GetBossState(BOSS_NERUB_ENKAN) == DONE)
|
||||
HandleGameObject(ObjectGuid::Empty, true, go);
|
||||
break;
|
||||
case GO_ZIGGURAT3:
|
||||
ziggurat3GUID = go->GetGUID();
|
||||
if (GetData(TYPE_PALLID) == IN_PROGRESS)
|
||||
if (GetBossState(BOSS_MALEKI_THE_PALLID) == DONE)
|
||||
HandleGameObject(ObjectGuid::Empty, true, go);
|
||||
break;
|
||||
case GO_ZIGGURAT4:
|
||||
ziggurat4GUID = go->GetGUID();
|
||||
if (GetData(TYPE_BARON) == DONE || GetData(TYPE_RAMSTEIN) == DONE)
|
||||
if (GetBossState(BOSS_RIVENDARE) == DONE || GetBossState(BOSS_RAMSTEIN_THE_GORGER) == DONE)
|
||||
HandleGameObject(ObjectGuid::Empty, true, go);
|
||||
break;
|
||||
case GO_ZIGGURAT5:
|
||||
ziggurat5GUID = go->GetGUID();
|
||||
if (GetData(TYPE_BARON) == DONE || GetData(TYPE_RAMSTEIN) == DONE)
|
||||
if (GetBossState(BOSS_RIVENDARE) == DONE || GetBossState(BOSS_RAMSTEIN_THE_GORGER) == DONE)
|
||||
HandleGameObject(ObjectGuid::Empty, true, go);
|
||||
break;
|
||||
case GO_PORT_GAUNTLET:
|
||||
portGauntletGUID = go->GetGUID();
|
||||
if (GetData(TYPE_BARONESS) == IN_PROGRESS && GetData(TYPE_NERUB) == IN_PROGRESS && GetData(TYPE_PALLID) == IN_PROGRESS)
|
||||
if (brokenCrystals >= 3)
|
||||
HandleGameObject(ObjectGuid::Empty, true, go);
|
||||
break;
|
||||
case GO_PORT_SLAUGTHER:
|
||||
portSlaugtherGUID = go->GetGUID();
|
||||
if (GetData(TYPE_BARONESS) == IN_PROGRESS && GetData(TYPE_NERUB) == IN_PROGRESS && GetData(TYPE_PALLID) == IN_PROGRESS)
|
||||
if (brokenCrystals >= 3)
|
||||
HandleGameObject(ObjectGuid::Empty, true, go);
|
||||
break;
|
||||
case GO_PORT_ELDERS:
|
||||
@@ -318,6 +332,72 @@ class instance_stratholme : public InstanceMapScript
|
||||
}
|
||||
}
|
||||
|
||||
bool SetBossState(uint32 id, EncounterState state) override
|
||||
{
|
||||
if (!InstanceScript::SetBossState(id, state))
|
||||
return false;
|
||||
|
||||
switch (id)
|
||||
{
|
||||
case BOSS_BARONESS_ANASTARI:
|
||||
if (state == DONE)
|
||||
{
|
||||
HandleGameObject(ziggurat1GUID, true);
|
||||
|
||||
//remove when crystals implemented
|
||||
++brokenCrystals;
|
||||
StartSlaugtherSquare();
|
||||
}
|
||||
break;
|
||||
case BOSS_NERUB_ENKAN:
|
||||
if (state == DONE)
|
||||
{
|
||||
HandleGameObject(ziggurat2GUID, true);
|
||||
|
||||
//remove when crystals implemented
|
||||
++brokenCrystals;
|
||||
StartSlaugtherSquare();
|
||||
}
|
||||
break;
|
||||
case BOSS_MALEKI_THE_PALLID:
|
||||
if (state == DONE)
|
||||
{
|
||||
HandleGameObject(ziggurat3GUID, true);
|
||||
|
||||
//remove when crystals implemented
|
||||
++brokenCrystals;
|
||||
StartSlaugtherSquare();
|
||||
}
|
||||
break;
|
||||
case BOSS_RAMSTEIN_THE_GORGER:
|
||||
if (state == NOT_STARTED)
|
||||
HandleGameObject(portGauntletGUID, true);
|
||||
|
||||
if (state == DONE)
|
||||
{
|
||||
events.ScheduleEvent(EVENT_SLAUGHTER_SQUARE, 1min);
|
||||
TC_LOG_DEBUG("scripts", "Instance Stratholme: Slaugther event will continue in 1 minute.");
|
||||
}
|
||||
break;
|
||||
case BOSS_RIVENDARE:
|
||||
HandleGameObject(ziggurat4GUID, GetBossState(BOSS_RAMSTEIN_THE_GORGER) == DONE && state != IN_PROGRESS);
|
||||
HandleGameObject(ziggurat5GUID, GetBossState(BOSS_RAMSTEIN_THE_GORGER) == DONE && state != IN_PROGRESS);
|
||||
if (state == DONE)
|
||||
{
|
||||
HandleGameObject(portGauntletGUID, true);
|
||||
if (GetData(TYPE_BARON_RUN) == IN_PROGRESS)
|
||||
DoRemoveAurasDueToSpellOnPlayers(SPELL_BARON_ULTIMATUM);
|
||||
|
||||
SetData(TYPE_BARON_RUN, DONE);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void SetData(uint32 type, uint32 data) override
|
||||
{
|
||||
switch (type)
|
||||
@@ -326,9 +406,9 @@ class instance_stratholme : public InstanceMapScript
|
||||
switch (data)
|
||||
{
|
||||
case IN_PROGRESS:
|
||||
if (EncounterState[0] == IN_PROGRESS || EncounterState[0] == FAIL)
|
||||
if (baronRunState == IN_PROGRESS || baronRunState == FAIL)
|
||||
break;
|
||||
EncounterState[0] = data;
|
||||
baronRunState = IN_PROGRESS;
|
||||
events.ScheduleEvent(EVENT_BARON_RUN, 45min);
|
||||
TC_LOG_DEBUG("scripts", "Instance Stratholme: Baron run in progress.");
|
||||
break;
|
||||
@@ -336,10 +416,10 @@ class instance_stratholme : public InstanceMapScript
|
||||
DoRemoveAurasDueToSpellOnPlayers(SPELL_BARON_ULTIMATUM);
|
||||
if (Creature* ysida = instance->GetCreature(ysidaGUID))
|
||||
ysida->CastSpell(ysida, SPELL_PERM_FEIGN_DEATH, true);
|
||||
EncounterState[0] = data;
|
||||
baronRunState = FAIL;
|
||||
break;
|
||||
case DONE:
|
||||
EncounterState[0] = data;
|
||||
baronRunState = DONE;
|
||||
|
||||
if (Creature* ysida = instance->GetCreature(ysidaGUID))
|
||||
{
|
||||
@@ -374,33 +454,6 @@ class instance_stratholme : public InstanceMapScript
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case TYPE_BARONESS:
|
||||
EncounterState[1] = data;
|
||||
if (data == IN_PROGRESS)
|
||||
{
|
||||
HandleGameObject(ziggurat1GUID, true);
|
||||
//change to DONE when crystals implemented
|
||||
StartSlaugtherSquare();
|
||||
}
|
||||
break;
|
||||
case TYPE_NERUB:
|
||||
EncounterState[2] = data;
|
||||
if (data == IN_PROGRESS)
|
||||
{
|
||||
HandleGameObject(ziggurat2GUID, true);
|
||||
//change to DONE when crystals implemented
|
||||
StartSlaugtherSquare();
|
||||
}
|
||||
break;
|
||||
case TYPE_PALLID:
|
||||
EncounterState[3] = data;
|
||||
if (data == IN_PROGRESS)
|
||||
{
|
||||
HandleGameObject(ziggurat3GUID, true);
|
||||
//change to DONE when crystals implemented
|
||||
StartSlaugtherSquare();
|
||||
}
|
||||
break;
|
||||
case TYPE_RAMSTEIN:
|
||||
if (data == IN_PROGRESS)
|
||||
{
|
||||
@@ -425,37 +478,6 @@ class instance_stratholme : public InstanceMapScript
|
||||
else
|
||||
TC_LOG_DEBUG("scripts", "Instance Stratholme: {} Abomnation left to kill.", count);
|
||||
}
|
||||
|
||||
if (data == NOT_STARTED)
|
||||
HandleGameObject(portGauntletGUID, true);
|
||||
|
||||
if (data == DONE)
|
||||
{
|
||||
events.ScheduleEvent(EVENT_SLAUGHTER_SQUARE, 1min);
|
||||
TC_LOG_DEBUG("scripts", "Instance Stratholme: Slaugther event will continue in 1 minute.");
|
||||
}
|
||||
EncounterState[4] = data;
|
||||
break;
|
||||
case TYPE_BARON:
|
||||
if (data == IN_PROGRESS)
|
||||
{
|
||||
HandleGameObject(ziggurat4GUID, false);
|
||||
HandleGameObject(ziggurat5GUID, false);
|
||||
}
|
||||
if (data == DONE || data == NOT_STARTED)
|
||||
{
|
||||
HandleGameObject(ziggurat4GUID, true);
|
||||
HandleGameObject(ziggurat5GUID, true);
|
||||
}
|
||||
if (data == DONE)
|
||||
{
|
||||
HandleGameObject(portGauntletGUID, true);
|
||||
if (GetData(TYPE_BARON_RUN) == IN_PROGRESS)
|
||||
DoRemoveAurasDueToSpellOnPlayers(SPELL_BARON_ULTIMATUM);
|
||||
|
||||
SetData(TYPE_BARON_RUN, DONE);
|
||||
}
|
||||
EncounterState[5] = data;
|
||||
break;
|
||||
case TYPE_SH_AELMAR:
|
||||
IsSilverHandDead[0] = (data) ? true : false;
|
||||
@@ -472,47 +494,9 @@ class instance_stratholme : public InstanceMapScript
|
||||
case TYPE_SH_VICAR:
|
||||
IsSilverHandDead[4] = (data) ? true : false;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if (data == DONE)
|
||||
SaveToDB();
|
||||
}
|
||||
|
||||
std::string GetSaveData() override
|
||||
{
|
||||
OUT_SAVE_INST_DATA;
|
||||
|
||||
std::ostringstream saveStream;
|
||||
saveStream << EncounterState[0] << ' ' << EncounterState[1] << ' ' << EncounterState[2] << ' '
|
||||
<< EncounterState[3] << ' ' << EncounterState[4] << ' ' << EncounterState[5];
|
||||
|
||||
OUT_SAVE_INST_DATA_COMPLETE;
|
||||
return saveStream.str();
|
||||
}
|
||||
|
||||
void Load(char const* in) override
|
||||
{
|
||||
if (!in)
|
||||
{
|
||||
OUT_LOAD_INST_DATA_FAIL;
|
||||
return;
|
||||
}
|
||||
|
||||
OUT_LOAD_INST_DATA(in);
|
||||
|
||||
std::istringstream loadStream(in);
|
||||
loadStream >> EncounterState[0] >> EncounterState[1] >> EncounterState[2] >> EncounterState[3]
|
||||
>> EncounterState[4] >> EncounterState[5];
|
||||
|
||||
// Do not reset 1, 2 and 3. they are not set to done, yet .
|
||||
if (EncounterState[0] == IN_PROGRESS)
|
||||
EncounterState[0] = NOT_STARTED;
|
||||
if (EncounterState[4] == IN_PROGRESS)
|
||||
EncounterState[4] = NOT_STARTED;
|
||||
if (EncounterState[5] == IN_PROGRESS)
|
||||
EncounterState[5] = NOT_STARTED;
|
||||
|
||||
OUT_LOAD_INST_DATA_COMPLETE;
|
||||
}
|
||||
|
||||
uint32 GetData(uint32 type) const override
|
||||
@@ -524,17 +508,19 @@ class instance_stratholme : public InstanceMapScript
|
||||
return 1;
|
||||
return 0;
|
||||
case TYPE_BARON_RUN:
|
||||
return EncounterState[0];
|
||||
return baronRunState;
|
||||
case TYPE_BARONESS:
|
||||
return EncounterState[1];
|
||||
return GetBossState(BOSS_BARONESS_ANASTARI);
|
||||
case TYPE_NERUB:
|
||||
return EncounterState[2];
|
||||
return GetBossState(BOSS_NERUB_ENKAN);
|
||||
case TYPE_PALLID:
|
||||
return EncounterState[3];
|
||||
return GetBossState(BOSS_MALEKI_THE_PALLID);
|
||||
case TYPE_RAMSTEIN:
|
||||
return EncounterState[4];
|
||||
return GetBossState(BOSS_RAMSTEIN_THE_GORGER);
|
||||
case TYPE_BARON:
|
||||
return EncounterState[5];
|
||||
return GetBossState(BOSS_RIVENDARE);
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@@ -549,6 +535,8 @@ class instance_stratholme : public InstanceMapScript
|
||||
return ysidaTriggerGUID;
|
||||
case NPC_YSIDA:
|
||||
return ysidaGUID;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return ObjectGuid::Empty;
|
||||
}
|
||||
@@ -611,6 +599,18 @@ class instance_stratholme : public InstanceMapScript
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void ReadSaveDataMore(std::istringstream& /*data*/) override
|
||||
{
|
||||
if (GetBossState(BOSS_BARONESS_ANASTARI) == DONE)
|
||||
++brokenCrystals;
|
||||
if (GetBossState(BOSS_NERUB_ENKAN) == DONE)
|
||||
++brokenCrystals;
|
||||
if (GetBossState(BOSS_MALEKI_THE_PALLID) == DONE)
|
||||
++brokenCrystals;
|
||||
|
||||
baronRunState = FAIL;
|
||||
}
|
||||
};
|
||||
|
||||
InstanceScript* GetInstanceScript(InstanceMap* map) const override
|
||||
|
||||
@@ -23,6 +23,26 @@
|
||||
#define StratholmeScriptName "instance_stratholme"
|
||||
#define DataHeader "STR"
|
||||
|
||||
enum STRBossIds
|
||||
{
|
||||
BOSS_HEARTHSINGER_FORRESTEN = 0,
|
||||
BOSS_TIMMY_THE_CRUEL = 1,
|
||||
BOSS_COMMANDER_MALOR = 2,
|
||||
BOSS_CANNON_MASTER_WILLEY = 3,
|
||||
BOSS_INSTRUCTOR_GALFORD = 4,
|
||||
BOSS_BALNAZZAR = 5,
|
||||
BOSS_THE_UNFORGIVEN = 6,
|
||||
BOSS_BARONESS_ANASTARI = 7,
|
||||
BOSS_NERUB_ENKAN = 8,
|
||||
BOSS_MALEKI_THE_PALLID = 9,
|
||||
BOSS_MAGISTRATE_BARTHILAS = 10,
|
||||
BOSS_RAMSTEIN_THE_GORGER = 11,
|
||||
BOSS_RIVENDARE = 12,
|
||||
BOSS_POSTMASTER_MALOWN = 13,
|
||||
|
||||
MAX_ENCOUNTER
|
||||
};
|
||||
|
||||
enum STRDataTypes
|
||||
{
|
||||
TYPE_BARON_RUN = 1,
|
||||
@@ -32,8 +52,6 @@ enum STRDataTypes
|
||||
TYPE_RAMSTEIN = 5,
|
||||
TYPE_BARON = 6,
|
||||
|
||||
TYPE_MALOWN = 7,
|
||||
|
||||
DATA_BARON = 10,
|
||||
DATA_YSIDA_TRIGGER = 11,
|
||||
|
||||
@@ -47,6 +65,11 @@ enum STRDataTypes
|
||||
|
||||
enum STRCreatureIds
|
||||
{
|
||||
NPC_HEARTHSINGER_FORRESTEN = 10558,
|
||||
NPC_COMMANDER_MALOR = 11032,
|
||||
NPC_INSTRUCTOR_GALFORD = 10811,
|
||||
NPC_THE_UNFORGIVEN = 10516,
|
||||
|
||||
NPC_CRYSTAL = 10415, // ziggurat crystal
|
||||
NPC_BARON = 10440, // ziggurat crystal
|
||||
NPC_YSIDA_TRIGGER = 16100, // ziggurat crystal
|
||||
@@ -106,7 +129,6 @@ enum STRMisc
|
||||
{
|
||||
//! amount of crusade monsters required to be killed in order for timmy the cruel to spawn
|
||||
TIMMY_THE_CRUEL_CRUSADERS_REQUIRED = 15,
|
||||
MAX_ENCOUNTER = 6
|
||||
};
|
||||
|
||||
template <class AI, class T>
|
||||
|
||||
Reference in New Issue
Block a user