Merge branch 'master' of github.com:TrinityCore/TrinityCore into 4.3.4

Conflicts:
	src/server/game/Globals/ObjectMgr.cpp
	src/server/game/Maps/Map.cpp
	src/server/game/Quests/QuestDef.cpp
This commit is contained in:
Vincent-Michael
2014-05-11 23:08:54 +02:00
24 changed files with 3667 additions and 2453 deletions

View File

@@ -25,7 +25,7 @@ enum Texts
SAY_SLAY = 1,
SAY_DEATH = 2,
SAY_IMPENDING_DESPAIR = 3,
SAY_DEFILING_HORROR = 4,
SAY_DEFILING_HORROR = 4
};
enum Spells
@@ -33,8 +33,9 @@ enum Spells
SPELL_QUIVERING_STRIKE = 72422,
SPELL_IMPENDING_DESPAIR = 72426,
SPELL_DEFILING_HORROR = 72435,
SPELL_HOPELESSNESS = 72395,
H_SPELL_HOPELESSNESS = 72390, /// @todo not in dbc. Add in DB.
SPELL_HOPELESSNESS_1 = 72395,
SPELL_HOPELESSNESS_2 = 72396,
SPELL_HOPELESSNESS_3 = 72397
};
enum Events
@@ -42,99 +43,106 @@ enum Events
EVENT_NONE,
EVENT_QUIVERING_STRIKE,
EVENT_IMPENDING_DESPAIR,
EVENT_DEFILING_HORROR,
EVENT_DEFILING_HORROR
};
uint32 const HopelessnessHelper[3] = { SPELL_HOPELESSNESS_1, SPELL_HOPELESSNESS_2, SPELL_HOPELESSNESS_3 };
class boss_falric : public CreatureScript
{
public:
boss_falric() : CreatureScript("boss_falric") { }
public:
boss_falric() : CreatureScript("boss_falric") { }
CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_falricAI>(creature);
}
struct boss_falricAI : public boss_horAI
{
boss_falricAI(Creature* creature) : boss_horAI(creature) { }
uint8 uiHopelessnessCount;
void Reset() override
struct boss_falricAI : public boss_horAI
{
boss_horAI::Reset();
boss_falricAI(Creature* creature) : boss_horAI(creature, DATA_FALRIC) { }
uiHopelessnessCount = 0;
instance->SetBossState(DATA_FALRIC_EVENT, NOT_STARTED);
}
void EnterCombat(Unit* /*who*/) override
{
Talk(SAY_AGGRO);
instance->SetBossState(DATA_FALRIC_EVENT, IN_PROGRESS);
events.ScheduleEvent(EVENT_QUIVERING_STRIKE, 23000);
events.ScheduleEvent(EVENT_IMPENDING_DESPAIR, 9000);
events.ScheduleEvent(EVENT_DEFILING_HORROR, urand(25000, 45000)); /// @todo adjust timer.
}
void JustDied(Unit* /*killer*/) override
{
Talk(SAY_DEATH);
instance->SetBossState(DATA_FALRIC_EVENT, DONE);
}
void KilledUnit(Unit* /*victim*/) override
{
Talk(SAY_SLAY);
}
void UpdateAI(uint32 diff) override
{
// Return since we have no target
if (!UpdateVictim())
return;
events.Update(diff);
if (me->HasUnitState(UNIT_STATE_CASTING))
return;
switch (events.ExecuteEvent())
void Reset() override
{
case EVENT_QUIVERING_STRIKE:
DoCast(SPELL_QUIVERING_STRIKE);
events.ScheduleEvent(EVENT_QUIVERING_STRIKE, 10000);
break;
case EVENT_IMPENDING_DESPAIR:
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM))
{
Talk(SAY_IMPENDING_DESPAIR);
DoCast(target, SPELL_IMPENDING_DESPAIR);
}
events.ScheduleEvent(EVENT_IMPENDING_DESPAIR, 13000);
break;
case EVENT_DEFILING_HORROR:
DoCast(SPELL_DEFILING_HORROR);
events.ScheduleEvent(EVENT_DEFILING_HORROR, urand(25000, 45000)); /// @todo adjust timer.
break;
boss_horAI::Reset();
_hopelessnessCount = 0;
}
if ((uiHopelessnessCount < 1 && HealthBelowPct(66))
|| (uiHopelessnessCount < 2 && HealthBelowPct(33))
|| (uiHopelessnessCount < 3 && HealthBelowPct(10)))
void EnterCombat(Unit* /*who*/) override
{
uiHopelessnessCount++;
DoCast(DUNGEON_MODE(SPELL_HOPELESSNESS, H_SPELL_HOPELESSNESS));
Talk(SAY_AGGRO);
DoZoneInCombat();
instance->SetBossState(DATA_FALRIC, IN_PROGRESS);
events.ScheduleEvent(EVENT_QUIVERING_STRIKE, 23000);
events.ScheduleEvent(EVENT_IMPENDING_DESPAIR, 9000);
events.ScheduleEvent(EVENT_DEFILING_HORROR, urand(21000, 39000));
}
DoMeleeAttackIfReady();
}
};
void DamageTaken(Unit* /*attacker*/, uint32& damage) override
{
if ((_hopelessnessCount < 1 && me->HealthBelowPctDamaged(66, damage))
|| (_hopelessnessCount < 2 && me->HealthBelowPctDamaged(33, damage))
|| (_hopelessnessCount < 3 && me->HealthBelowPctDamaged(10, damage)))
{
if (_hopelessnessCount)
me->RemoveOwnedAura(sSpellMgr->GetSpellIdForDifficulty(HopelessnessHelper[_hopelessnessCount - 1], me));
DoCast(me, HopelessnessHelper[_hopelessnessCount]);
++_hopelessnessCount;
}
}
void JustDied(Unit* /*killer*/) override
{
Talk(SAY_DEATH);
events.Reset();
instance->SetBossState(DATA_FALRIC, DONE);
}
void KilledUnit(Unit* who) override
{
if (who->GetTypeId() == TYPEID_PLAYER)
Talk(SAY_SLAY);
}
void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
events.Update(diff);
if (me->HasUnitState(UNIT_STATE_CASTING))
return;
switch (events.ExecuteEvent())
{
case EVENT_QUIVERING_STRIKE:
DoCastVictim(SPELL_QUIVERING_STRIKE);
events.ScheduleEvent(EVENT_QUIVERING_STRIKE, 10000);
break;
case EVENT_IMPENDING_DESPAIR:
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 45.0f, true))
{
Talk(SAY_IMPENDING_DESPAIR);
DoCast(target, SPELL_IMPENDING_DESPAIR);
}
events.ScheduleEvent(EVENT_IMPENDING_DESPAIR, 13000);
break;
case EVENT_DEFILING_HORROR:
DoCastAOE(SPELL_DEFILING_HORROR);
events.ScheduleEvent(EVENT_DEFILING_HORROR, urand(21000, 39000));
break;
default:
break;
}
DoMeleeAttackIfReady();
}
private:
uint8 _hopelessnessCount;
};
CreatureAI* GetAI(Creature* creature) const override
{
return GetHallsOfReflectionAI<boss_falricAI>(creature);
}
};
void AddSC_boss_falric()

View File

@@ -17,6 +17,8 @@
#include "ScriptMgr.h"
#include "ScriptedCreature.h"
#include "SpellScript.h"
#include "SpellAuraEffects.h"
#include "halls_of_reflection.h"
enum Texts
@@ -33,6 +35,7 @@ enum Spells
SPELL_WELL_OF_CORRUPTION = 72362,
SPELL_CORRUPTED_FLESH = 72363,
SPELL_SHARED_SUFFERING = 72368,
SPELL_SHARED_SUFFERING_DISPEL = 72373
};
enum Events
@@ -41,93 +44,130 @@ enum Events
EVENT_OBLITERATE,
EVENT_WELL_OF_CORRUPTION,
EVENT_CORRUPTED_FLESH,
EVENT_SHARED_SUFFERING,
EVENT_SHARED_SUFFERING
};
class boss_marwyn : public CreatureScript
{
public:
boss_marwyn() : CreatureScript("boss_marwyn") { }
public:
boss_marwyn() : CreatureScript("boss_marwyn") { }
CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_marwynAI>(creature);
}
struct boss_marwynAI : public boss_horAI
{
boss_marwynAI(Creature* creature) : boss_horAI(creature) { }
void Reset() override
struct boss_marwynAI : public boss_horAI
{
boss_horAI::Reset();
boss_marwynAI(Creature* creature) : boss_horAI(creature, DATA_MARWYN) { }
instance->SetBossState(DATA_MARWYN_EVENT, NOT_STARTED);
}
void EnterCombat(Unit* /*who*/) override
{
Talk(SAY_AGGRO);
instance->SetBossState(DATA_MARWYN_EVENT, IN_PROGRESS);
events.ScheduleEvent(EVENT_OBLITERATE, 30000); /// @todo Check timer
events.ScheduleEvent(EVENT_WELL_OF_CORRUPTION, 13000);
events.ScheduleEvent(EVENT_CORRUPTED_FLESH, 20000);
events.ScheduleEvent(EVENT_SHARED_SUFFERING, 20000); /// @todo Check timer
}
void JustDied(Unit* /*killer*/) override
{
Talk(SAY_DEATH);
instance->SetBossState(DATA_MARWYN_EVENT, DONE);
}
void KilledUnit(Unit* /*victim*/) override
{
Talk(SAY_SLAY);
}
void UpdateAI(uint32 diff) override
{
// Return since we have no target
if (!UpdateVictim())
return;
events.Update(diff);
if (me->HasUnitState(UNIT_STATE_CASTING))
return;
switch (events.ExecuteEvent())
void Reset() override
{
case EVENT_OBLITERATE:
DoCast(SPELL_OBLITERATE);
events.ScheduleEvent(EVENT_OBLITERATE, 30000);
break;
case EVENT_WELL_OF_CORRUPTION:
DoCast(SPELL_WELL_OF_CORRUPTION);
events.ScheduleEvent(EVENT_WELL_OF_CORRUPTION, 13000);
break;
case EVENT_CORRUPTED_FLESH:
Talk(SAY_CORRUPTED_FLESH);
DoCast(SPELL_CORRUPTED_FLESH);
events.ScheduleEvent(EVENT_CORRUPTED_FLESH, 20000);
break;
case EVENT_SHARED_SUFFERING:
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM))
DoCast(target, SPELL_SHARED_SUFFERING);
events.ScheduleEvent(EVENT_SHARED_SUFFERING, 20000);
break;
boss_horAI::Reset();
}
DoMeleeAttackIfReady();
}
};
void EnterCombat(Unit* /*who*/) override
{
Talk(SAY_AGGRO);
DoZoneInCombat();
instance->SetBossState(DATA_MARWYN, IN_PROGRESS);
events.ScheduleEvent(EVENT_OBLITERATE, urand(8000, 13000));
events.ScheduleEvent(EVENT_WELL_OF_CORRUPTION, 13000);
events.ScheduleEvent(EVENT_CORRUPTED_FLESH, 20000);
events.ScheduleEvent(EVENT_SHARED_SUFFERING, urand(14000, 15000));
}
void JustDied(Unit* /*killer*/) override
{
Talk(SAY_DEATH);
events.Reset();
instance->SetBossState(DATA_MARWYN, DONE);
}
void KilledUnit(Unit* who) override
{
if (who->GetTypeId() == TYPEID_PLAYER)
Talk(SAY_SLAY);
}
void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
events.Update(diff);
if (me->HasUnitState(UNIT_STATE_CASTING))
return;
switch (events.ExecuteEvent())
{
case EVENT_OBLITERATE:
DoCastVictim(SPELL_OBLITERATE);
events.ScheduleEvent(EVENT_OBLITERATE, urand(8000, 13000));
break;
case EVENT_WELL_OF_CORRUPTION:
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100.0f, true))
DoCast(target, SPELL_WELL_OF_CORRUPTION);
events.ScheduleEvent(EVENT_WELL_OF_CORRUPTION, 13000);
break;
case EVENT_CORRUPTED_FLESH:
Talk(SAY_CORRUPTED_FLESH);
DoCastAOE(SPELL_CORRUPTED_FLESH);
events.ScheduleEvent(EVENT_CORRUPTED_FLESH, 20000);
break;
case EVENT_SHARED_SUFFERING:
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 0.0f, true))
DoCast(target, SPELL_SHARED_SUFFERING);
events.ScheduleEvent(EVENT_SHARED_SUFFERING, urand(14000, 15000));
break;
default:
break;
}
DoMeleeAttackIfReady();
}
};
CreatureAI* GetAI(Creature* creature) const override
{
return GetHallsOfReflectionAI<boss_marwynAI>(creature);
}
};
// 72368, 72369 - Shared Suffering
class spell_marwyn_shared_suffering : public SpellScriptLoader
{
public:
spell_marwyn_shared_suffering() : SpellScriptLoader("spell_marwyn_shared_suffering") { }
class spell_marwyn_shared_suffering_AuraScript : public AuraScript
{
PrepareAuraScript(spell_marwyn_shared_suffering_AuraScript);
void HandleEffectRemove(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/)
{
if (GetTargetApplication()->GetRemoveMode() != AURA_REMOVE_BY_ENEMY_SPELL)
return;
if (Unit* caster = GetCaster())
{
int32 remainingDamage = aurEff->GetAmount() * (aurEff->GetTotalTicks() - aurEff->GetTickNumber());
if (remainingDamage > 0)
caster->CastCustomSpell(SPELL_SHARED_SUFFERING_DISPEL, SPELLVALUE_BASE_POINT1, remainingDamage, GetTarget(), TRIGGERED_FULL_MASK);
}
}
void Register() override
{
AfterEffectRemove += AuraEffectRemoveFn(spell_marwyn_shared_suffering_AuraScript::HandleEffectRemove, EFFECT_0, SPELL_AURA_PERIODIC_DAMAGE, AURA_EFFECT_HANDLE_REAL);
}
};
AuraScript* GetAuraScript() const override
{
return new spell_marwyn_shared_suffering_AuraScript();
}
};
void AddSC_boss_marwyn()
{
new boss_marwyn();
new spell_marwyn_shared_suffering();
}

View File

@@ -15,170 +15,231 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef DEF_HALLS_OF_REFLECTION_H
#define DEF_HALLS_OF_REFLECTION_H
#ifndef HALLS_OF_REFLECTION_H_
#define HALLS_OF_REFLECTION_H_
#define HoRScriptName "instance_halls_of_reflection"
#define MAX_ENCOUNTER 3
uint32 const EncounterCount = 3;
/* Halls of Reflection encounters:
0- Falric
1- Marwyn
2- The Lich King
0 - Falric
1 - Marwyn
2 - The Lich King
*/
enum Data
enum DataTypes
{
DATA_FALRIC_EVENT = 0,
DATA_MARWYN_EVENT = 1,
DATA_LICHKING_EVENT = 2,
DATA_FALRIC = 0,
DATA_MARWYN = 1,
DATA_THE_LICH_KING_ESCAPE = 2,
DATA_INTRO_EVENT = 3,
DATA_FROSWORN_EVENT = 4,
DATA_FROSTSWORN_GENERAL = 4,
DATA_WAVE_COUNT = 5,
DATA_TEAM_IN_INSTANCE = 6,
DATA_FROSTMOURNE = 7,
DATA_FROSTWORN_DOOR = 8,
DATA_ESCAPE_EVENT = 9,
DATA_KORELN_LORALEN = 5,
DATA_WAVE_COUNT = 6,
DATA_TEAM_IN_INSTANCE = 7,
DATA_FROSTMOURNE = 8,
DATA_IMPENETRABLE_DOOR = 9,
DATA_ESCAPE_LEADER = 10,
DATA_SUMMONS = 11,
DATA_ICEWALL = 12,
DATA_CAVE_IN = 13
DATA_ICEWALL = 11,
DATA_ICEWALL_TARGET = 12,
DATA_GUNSHIP = 13
};
enum Creatures
enum CreatureIds
{
NPC_JAINA_PART1 = 37221,
NPC_SYLVANAS_PART1 = 37223,
NPC_UTHER = 37225,
NPC_LICH_KING_PART1 = 37226,
NPC_LORALEN = 37779,
NPC_KORELN = 37582,
NPC_JAINA_INTRO = 37221,
NPC_SYLVANAS_INTRO = 37223,
NPC_UTHER = 37225,
NPC_THE_LICH_KING_INTRO = 37226,
NPC_KORELN = 37582,
NPC_LORALEN = 37779,
NPC_FROSTMOUNRE_ALTAR_BUNNY = 37704,
NPC_FALRIC = 38112,
NPC_MARWYN = 38113,
NPC_WAVE_MERCENARY = 38177,
NPC_WAVE_FOOTMAN = 38173,
NPC_WAVE_RIFLEMAN = 38176,
NPC_WAVE_PRIEST = 38175,
NPC_WAVE_MAGE = 38172,
NPC_FALRIC = 38112,
NPC_MARWYN = 38113,
NPC_WAVE_MERCENARY = 38177,
NPC_WAVE_FOOTMAN = 38173,
NPC_WAVE_RIFLEMAN = 38176,
NPC_WAVE_PRIEST = 38175,
NPC_WAVE_MAGE = 38172,
NPC_FROSTWORN_GENERAL = 36723,
NPC_REFLECTION = 37068, // 37107 for tank only?
NPC_FROSTSWORN_GENERAL = 36723,
NPC_REFLECTION = 37068, // 37107 for tank only?
NPC_JAINA_PART2 = 36955,
NPC_SYLVANAS_PART2 = 37554,
NPC_LICH_KING_PART2 = 36954,
NPC_BARTLETT = 37182, // High Captain Justin Bartlett
NPC_KORM = 37833, // Sky-Reaver Korm Blackscar
NPC_ICE_WALL = 37014, // Ice Wall Target
NPC_JAINA_ESCAPE = 36955,
NPC_SYLVANAS_ESCAPE = 37554,
NPC_THE_LICH_KING_ESCAPE = 36954,
NPC_ICE_WALL_TARGET = 37014,
NPC_RAGING_GNOUL = 36940,
NPC_RISEN_WITCH_DOCTOR = 36941,
NPC_ABON = 37069
NPC_RAGING_GHOUL = 36940,
NPC_RISEN_WITCH_DOCTOR = 36941,
NPC_LUMBERING_ABOMINATION = 37069,
NPC_GUNSHIP_CANNON_HORDE = 37593,
NPC_JUSTIN_BARTLETT = 30344,
NPC_KORM_BLACKSCAR = 30824,
NPC_WORLD_TRIGGER = 22515
};
enum GameObjects
enum GameObjectIds
{
GO_FROSTMOURNE = 202302,
GO_ENTRANCE_DOOR = 201976,
GO_FROSTWORN_DOOR = 197341,
GO_ARTHAS_DOOR = 197342,
//GO_ESCAPE_DOOR = 197343, // always open ?
GO_FROSTMOURNE = 202302,
GO_ENTRANCE_DOOR = 201976,
GO_IMPENETRABLE_DOOR = 197341,
GO_SHADOW_THRONE_DOOR = 197342,
GO_ESCAPE_DOOR = 197343, // always open ?
GO_ICE_WALL = 201385,
GO_CAVE = 201596,
GO_ICE_WALL = 201385,
GO_CAVE_IN = 201596,
GO_STAIRS_SKYBREAKER = 201709,
GO_SKYBREAKER = 201598,
GO_STAIRS_ORGRIM_HAMMER = 202211,
GO_ORGRIM_HAMMER = 201599,
GO_PORTAL = 202079,
GO_THE_SKYBREAKER = 201598,
GO_ORGRIMS_HAMMER = 201599,
GO_THE_SKYBREAKER_STAIRS = 201709,
GO_ORGRIMS_HAMMER_STAIRS = 202211,
GO_PORTAL_TO_DALARAN = 195682,
GO_CAPTAIN_CHEST_HORDE_NORMAL = 202212, //3145
GO_CAPTAIN_CHEST_ALLIANCE_NORMAL = 201710, //30357
GO_CAPTAIN_CHEST_HORDE_HEROIC = 202337, //3246
GO_CAPTAIN_CHEST_ALLIANCE_HEROIC = 202336, //3333
GO_THE_CAPTAIN_CHEST_ALLIANCE_NORMAL = 201710,
GO_THE_CAPTAIN_CHEST_HORDE_NORMAL = 202212,
GO_THE_CAPTAIN_CHEST_ALLIANCE_HEROIC = 202336,
GO_THE_CAPTAIN_CHEST_HORDE_HEROIC = 202337
};
enum HorWorldStates
enum Achievements
{
WORLD_STATE_HOR_WAVES_ENABLED = 4884,
WORLD_STATE_HOR_WAVE_COUNT = 4882,
ACHIEV_NOT_RETREATING_EVENT = 22615,
SPELL_ACHIEV_CHECK = 72830
};
// Common actions from Instance Script to Boss Script
enum Actions
{
ACTION_ENTER_COMBAT,
ACTION_START_ESCAPING,
ACTION_WALL_BROKEN
};
enum TrashGeneralSpells
{
// General spells
SPELL_WELL_OF_SOULS = 72630, // cast when spawn(become visible)
SPELL_SPIRIT_ACTIVATE = 72130, // cast when unit activates
ACTION_ENTER_COMBAT = -668001,
ACTION_START_PREFIGHT = -668002,
ACTION_WALL_BROKEN = -668003,
ACTION_GUNSHIP_ARRIVAL = -668004,
ACTION_GUNSHIP_ARRIVAL_2 = -668005
};
enum InstanceEvents
{
EVENT_SPAWN_WAVES = 1,
EVENT_NEXT_WAVE = 2,
EVENT_DO_WIPE = 3,
EVENT_ADD_WAVE = 4,
EVENT_SPAWN_WAVES = 1,
EVENT_NEXT_WAVE = 2,
EVENT_DO_WIPE = 3,
EVENT_ADD_WAVE = 4,
EVENT_SPAWN_ESCAPE_EVENT = 5
};
enum InstanceEventIds
{
EVENT_GUNSHIP_ARRIVAL = 22709,
EVENT_GUNSHIP_ARRIVAL_2 = 22714,
EVENT_ICE_WALL_SUMMONED = 22795
};
enum InstanceSpells
{
// Trash
SPELL_WELL_OF_SOULS = 72630, // cast when spawn (become visible)
SPELL_SPIRIT_ACTIVATE = 72130, // cast when unit activates
// Start Quests
SPELL_START_HALLS_OF_REFLECTION_QUEST_A = 71351,
SPELL_START_HALLS_OF_REFLECTION_QUEST_H = 71542,
SPELL_START_HALLS_OF_REFLECTION_QUEST_AE = 72900,
// Quest Credits
SPELL_CREDIT_FINDING_SYLVANAS = 71536,
SPELL_CREDIT_FINDING_JAINA = 71538,
SPELL_CREDIT_ESCAPING_ARTHAS = 71352,
// Gunship
SPELL_GUNSHIP_CANNON_FIRE = 70017,
SPELL_GUNSHIP_CANNON_FIRE_MISSILE_ALLIANCE = 70021,
SPELL_GUNSHIP_CANNON_FIRE_MISSILE_HORDE = 70246
};
enum InstanceWorldStates
{
WORLD_STATE_HOR_WAVES_ENABLED = 4884,
WORLD_STATE_HOR_WAVE_COUNT = 4882
};
enum InstanceYells
{
SAY_CAPTAIN_FIRE = 0,
SAY_CAPTAIN_FINAL = 1
};
// Base class for FALRIC and MARWYN
// handled the summonList and the notification events to/from the InstanceScript
struct boss_horAI : ScriptedAI
struct boss_horAI : BossAI
{
boss_horAI(Creature* creature) : ScriptedAI(creature), summons(creature)
{
instance = me->GetInstanceScript();
}
boss_horAI(Creature* creature, uint32 bossId) : BossAI(creature, bossId) { }
InstanceScript* instance;
EventMap events;
SummonList summons;
void Reset()
void Reset() override
{
events.Reset();
_Reset();
me->SetVisible(false);
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
me->SetReactState(REACT_PASSIVE);
if (instance->GetData(DATA_WAVE_COUNT) != NOT_STARTED)
instance->ProcessEvent(0, EVENT_DO_WIPE);
instance->ProcessEvent(NULL, EVENT_DO_WIPE);
}
void DoAction(int32 actionID)
void DoAction(int32 actionId) override
{
switch (actionID)
switch (actionId)
{
case ACTION_ENTER_COMBAT: // called by InstanceScript when boss shall enter in combat.
case ACTION_ENTER_COMBAT: // called by InstanceScript when boss shall enter in combat.
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
me->SetReactState(REACT_AGGRESSIVE);
if (Unit* unit = me->SelectNearestTarget())
AttackStart(unit);
DoZoneInCombat();
DoZoneInCombat(me, 150.0f);
break;
default:
break;
}
}
void JustSummoned(Creature* summoned)
void JustSummoned(Creature* summon) override
{
summons.Summon(summoned);
summons.Summon(summon);
}
};
class GameObjectDeleteDelayEvent : public BasicEvent
{
public:
GameObjectDeleteDelayEvent(Unit* owner, uint64 gameObjectGUID) : _owner(owner), _gameObjectGUID(gameObjectGUID) { }
void DeleteGameObject()
{
if (GameObject* go = ObjectAccessor::GetGameObject(*_owner, _gameObjectGUID))
go->Delete();
}
bool Execute(uint64 /*execTime*/, uint32 /*diff*/) override
{
DeleteGameObject();
return true;
}
void Abort(uint64 /*execTime*/) override
{
DeleteGameObject();
}
private:
Unit* _owner;
uint64 _gameObjectGUID;
};
template<class AI>
AI* GetHallsOfReflectionAI(Creature* creature)
{
return GetInstanceAI<AI>(creature, HoRScriptName);
}
#endif
#endif // HALLS_OF_REFLECTION_H_

View File

@@ -1800,7 +1800,7 @@ class spell_icc_sprit_alarm : public SpellScriptLoader
}
if (GameObject* trap = GetCaster()->FindNearestGameObject(trapId, 5.0f))
trap->SetRespawnTime(trap->GetGOInfo()->trap.autoCloseTime);
trap->SetRespawnTime(trap->GetGOInfo()->GetAutoCloseTime());
std::list<Creature*> wards;
GetCaster()->GetCreatureListWithEntryInGrid(wards, NPC_DEATHBOUND_WARD, 150.0f);