*Merge.
--HG-- branch : trunk
This commit is contained in:
@@ -6,6 +6,7 @@ INSERT INTO `spell_linked_spell` (`spell_trigger`, `spell_effect`, `type`, `comm
|
|||||||
(-28169, 28240, 0, 'Mutating Injection - Poison Cloud');
|
(-28169, 28240, 0, 'Mutating Injection - Poison Cloud');
|
||||||
|
|
||||||
UPDATE creature_template SET scriptname = 'boss_grobbulus' WHERE entry = 15931;
|
UPDATE creature_template SET scriptname = 'boss_grobbulus' WHERE entry = 15931;
|
||||||
|
update creature_template set scriptname='mob_gothik_minion' where entry in (16124,16125,16126,16127,16148,16149,16150);
|
||||||
|
|
||||||
INSERT INTO creature_template (entry, spell1, flags_extra, scriptname) VALUES
|
INSERT INTO creature_template (entry, spell1, flags_extra, scriptname) VALUES
|
||||||
(16363, 28158, 128, ''), # Grobbulus Cloud
|
(16363, 28158, 128, ''), # Grobbulus Cloud
|
||||||
|
|||||||
@@ -645,6 +645,7 @@ UPDATE `creature_template` SET `ScriptName`='boss_heigan' WHERE `entry`=15936;
|
|||||||
UPDATE `creature_template` SET `ScriptName`='boss_loatheb' WHERE `entry`=16011;
|
UPDATE `creature_template` SET `ScriptName`='boss_loatheb' WHERE `entry`=16011;
|
||||||
UPDATE `creature_template` SET `ScriptName`='boss_razuvious' WHERE `entry`=16061;
|
UPDATE `creature_template` SET `ScriptName`='boss_razuvious' WHERE `entry`=16061;
|
||||||
UPDATE `creature_template` SET `ScriptName`='boss_gothik' WHERE `entry`=16060;
|
UPDATE `creature_template` SET `ScriptName`='boss_gothik' WHERE `entry`=16060;
|
||||||
|
UPDATE `creature_template` SET `ScriptName`='mob_gothik_minion' where `entry` IN (16124,16125,16126,16127,16148,16149,16150);
|
||||||
UPDATE `creature_template` SET `ScriptName`='boss_thane_korthazz' WHERE `entry`=16064;
|
UPDATE `creature_template` SET `ScriptName`='boss_thane_korthazz' WHERE `entry`=16064;
|
||||||
UPDATE `creature_template` SET `ScriptName`='boss_sir_zeliek' WHERE `entry`=16063;
|
UPDATE `creature_template` SET `ScriptName`='boss_sir_zeliek' WHERE `entry`=16063;
|
||||||
UPDATE `creature_template` SET `ScriptName`='boss_lady_blaumeux' WHERE `entry`=16065;
|
UPDATE `creature_template` SET `ScriptName`='boss_lady_blaumeux' WHERE `entry`=16065;
|
||||||
|
|||||||
@@ -389,6 +389,7 @@ extern void AddSC_boss_sapphiron();
|
|||||||
extern void AddSC_boss_four_horsemen();
|
extern void AddSC_boss_four_horsemen();
|
||||||
extern void AddSC_boss_faerlina();
|
extern void AddSC_boss_faerlina();
|
||||||
extern void AddSC_boss_heigan();
|
extern void AddSC_boss_heigan();
|
||||||
|
extern void AddSC_boss_gothik();
|
||||||
extern void AddSC_instance_naxxramas();
|
extern void AddSC_instance_naxxramas();
|
||||||
|
|
||||||
//Netherstorm
|
//Netherstorm
|
||||||
@@ -1327,6 +1328,7 @@ void ScriptsInit(char const* cfg_file = "trinitycore.conf")
|
|||||||
AddSC_boss_sapphiron();
|
AddSC_boss_sapphiron();
|
||||||
AddSC_boss_four_horsemen();
|
AddSC_boss_four_horsemen();
|
||||||
AddSC_boss_heigan();
|
AddSC_boss_heigan();
|
||||||
|
AddSC_boss_gothik();
|
||||||
AddSC_instance_naxxramas();
|
AddSC_instance_naxxramas();
|
||||||
|
|
||||||
//Netherstorm
|
//Netherstorm
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2006 - 2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
|
/* Copyright (C) 2008 - 2009 Trinity <http://www.trinitycore.org/>
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
* the Free Software Foundation; either version 2 of the License, or
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
@@ -14,14 +14,8 @@
|
|||||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* ScriptData
|
|
||||||
SDName: Boss_Gothik
|
|
||||||
SD%Complete: 0
|
|
||||||
SDComment: Placeholder
|
|
||||||
SDCategory: Naxxramas
|
|
||||||
EndScriptData */
|
|
||||||
|
|
||||||
#include "precompiled.h"
|
#include "precompiled.h"
|
||||||
|
#include "def_naxxramas.h"
|
||||||
|
|
||||||
#define SAY_SPEECH -1533040
|
#define SAY_SPEECH -1533040
|
||||||
#define SAY_KILL -1533041
|
#define SAY_KILL -1533041
|
||||||
@@ -29,37 +23,336 @@ EndScriptData */
|
|||||||
#define SAY_TELEPORT -1533043
|
#define SAY_TELEPORT -1533043
|
||||||
|
|
||||||
//Gothik
|
//Gothik
|
||||||
#define SPELL_HARVESTSOUL 28679
|
#define SPELL_HARVEST_SOUL 28679
|
||||||
#define SPELL_SHADOWBOLT HEROIC(29317,56405)
|
#define SPELL_SHADOW_BOLT HEROIC(29317,56405)
|
||||||
#define SPELL_SOUL_SIPHON 43591 // cannot find the correct spell
|
|
||||||
|
|
||||||
//Unrelenting Trainee
|
#define SPELL_INFORM_LIVE_TRAINEE 27892
|
||||||
#define SPELL_EAGLECLAW 30285
|
#define SPELL_INFORM_LIVE_KNIGHT 27928
|
||||||
#define SPELL_KNOCKDOWN_PASSIVE 6961
|
#define SPELL_INFORM_LIVE_RIDER 27935
|
||||||
|
#define SPELL_INFORM_DEAD_TRAINEE 27915
|
||||||
|
#define SPELL_INFORM_DEAD_KNIGHT 27931
|
||||||
|
#define SPELL_INFORM_DEAD_RIDER 27937
|
||||||
|
|
||||||
//Unrelenting Deathknight
|
#define MOB_LIVE_TRAINEE 16124
|
||||||
#define SPELL_CHARGE 22120
|
#define MOB_LIVE_KNIGHT 16125
|
||||||
#define SPELL_SHADOW_MARK 27825
|
#define MOB_LIVE_RIDER 16126
|
||||||
|
#define MOB_DEAD_TRAINEE 16127
|
||||||
|
#define MOB_DEAD_KNIGHT 16148
|
||||||
|
#define MOB_DEAD_RIDER 16150
|
||||||
|
#define MOB_DEAD_HORSE 16149
|
||||||
|
|
||||||
//Unrelenting Rider
|
const struct Waves { uint32 entry, number, time; }
|
||||||
#define SPELL_UNHOLY_AURA 55606
|
waves[] =
|
||||||
#define H_SPELL_UNHOLY_AURA 55608
|
{
|
||||||
#define SPELL_SHADOWBOLT_VOLLEY 27831 //Search thru targets and find those who have the SHADOW_MARK to cast this on
|
{MOB_LIVE_TRAINEE, 2, 20000},
|
||||||
#define H_SPELL_SHADOWBOLT_VOLLEY 55638
|
{MOB_LIVE_TRAINEE, 2, 20000},
|
||||||
|
{MOB_LIVE_TRAINEE, 2, 10000},
|
||||||
|
{MOB_LIVE_KNIGHT, 1, 10000},
|
||||||
|
{MOB_LIVE_TRAINEE, 2, 15000},
|
||||||
|
{MOB_LIVE_KNIGHT, 1, 10000},
|
||||||
|
{MOB_LIVE_TRAINEE, 2, 15000},
|
||||||
|
{MOB_LIVE_TRAINEE, 2, 0},
|
||||||
|
{MOB_LIVE_KNIGHT, 1, 10000},
|
||||||
|
{MOB_LIVE_RIDER, 1, 10000},
|
||||||
|
{MOB_LIVE_TRAINEE, 2, 5000},
|
||||||
|
{MOB_LIVE_KNIGHT, 1, 15000},
|
||||||
|
{MOB_LIVE_TRAINEE, 2, 0},
|
||||||
|
{MOB_LIVE_RIDER, 1, 10000},
|
||||||
|
{MOB_LIVE_KNIGHT, 2, 10000},
|
||||||
|
{MOB_LIVE_TRAINEE, 2, 10000},
|
||||||
|
{MOB_LIVE_RIDER, 1, 5000},
|
||||||
|
{MOB_LIVE_KNIGHT, 1, 5000},
|
||||||
|
{MOB_LIVE_TRAINEE, 2, 20000},
|
||||||
|
{MOB_LIVE_TRAINEE, 2, 0},
|
||||||
|
{MOB_LIVE_KNIGHT, 1, 0},
|
||||||
|
{MOB_LIVE_RIDER, 1, 15000},
|
||||||
|
{MOB_LIVE_TRAINEE, 2, 29000},
|
||||||
|
{0, 0, 0},
|
||||||
|
};
|
||||||
|
|
||||||
//Spectral Trainee
|
#define POS_Y_GATE -3360.78f
|
||||||
#define SPELL_ARCANE_EXPLOSION 27989
|
|
||||||
|
|
||||||
//Spectral Deathknight
|
enum Events
|
||||||
#define SPELL_WHIRLWIND 28334
|
{
|
||||||
#define SPELL_SUNDER_ARMOR 25051 //cannot find sunder that reduces armor by 2950
|
EVENT_SUMMON = 1,
|
||||||
#define SPELL_CLEAVE 20677
|
EVENT_HARVEST,
|
||||||
#define SPELL_MANA_BURN 17631
|
EVENT_BOLT,
|
||||||
|
};
|
||||||
|
|
||||||
//Spectral Rider
|
#define POS_LIVE 3
|
||||||
#define SPELL_LIFEDRAIN 24300
|
#define POS_DEAD 5
|
||||||
//USES SAME UNHOLY AURA AS UNRELENTING RIDER
|
|
||||||
|
|
||||||
//Spectral Horse
|
const float PosSummonLive[POS_LIVE][4] =
|
||||||
#define SPELL_STOMP 27993
|
{
|
||||||
|
{2669.7, -3430.9, 268.56, 1.6},
|
||||||
|
{2692.0, -3430.9, 268.56, 1.6},
|
||||||
|
{2714.1, -3430.9, 268.56, 1.6},
|
||||||
|
};
|
||||||
|
|
||||||
|
const float PosSummonDead[POS_DEAD][4] =
|
||||||
|
{
|
||||||
|
{2725.1, -3310.0, 268.85, 3.4},
|
||||||
|
{2699.3, -3322.8, 268.60, 3.3},
|
||||||
|
{2733.1, -3348.5, 268.84, 3.1},
|
||||||
|
{2682.8, -3304.2, 268.85, 3.9},
|
||||||
|
{2664.8, -3340.7, 268.23, 3.7},
|
||||||
|
};
|
||||||
|
|
||||||
|
const float PosGround[4] = {2691.2, -3362.7, 267.68, 1.7};
|
||||||
|
const float PosPlatform[4] = {2640.5, -3360.6, 285.26, 0};
|
||||||
|
|
||||||
|
struct TRINITY_DLL_DECL boss_gothikAI : public BossAI
|
||||||
|
{
|
||||||
|
boss_gothikAI(Creature *c) : BossAI(c, BOSS_GOTHIK) {}
|
||||||
|
|
||||||
|
uint32 waveCount;
|
||||||
|
std::vector<Creature*> liveTrigger;
|
||||||
|
std::vector<Creature*> deadTrigger;
|
||||||
|
|
||||||
|
void Reset()
|
||||||
|
{
|
||||||
|
liveTrigger.clear();
|
||||||
|
deadTrigger.clear();
|
||||||
|
me->setActive(false);
|
||||||
|
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_ATTACKABLE_2);
|
||||||
|
me->SetReactState(REACT_PASSIVE);
|
||||||
|
_Reset();
|
||||||
|
}
|
||||||
|
|
||||||
|
void EnterCombat(Unit *who)
|
||||||
|
{
|
||||||
|
for(uint32 i = 0; i < POS_LIVE; ++i)
|
||||||
|
if(Creature *trigger = DoSummon(WORLD_TRIGGER, PosSummonLive[i]))
|
||||||
|
liveTrigger.push_back(trigger);
|
||||||
|
for(uint32 i = 0; i < POS_DEAD; ++i)
|
||||||
|
if(Creature *trigger = DoSummon(WORLD_TRIGGER, PosSummonDead[i]))
|
||||||
|
deadTrigger.push_back(trigger);
|
||||||
|
|
||||||
|
if(liveTrigger.size() < POS_LIVE || deadTrigger.size() < POS_DEAD)
|
||||||
|
{
|
||||||
|
error_log("Script Gothik: cannot summon triggers!");
|
||||||
|
EnterEvadeMode();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
_EnterCombat();
|
||||||
|
me->setActive(true);
|
||||||
|
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_ATTACKABLE_2);
|
||||||
|
waveCount = 0;
|
||||||
|
events.ScheduleEvent(EVENT_SUMMON, 30000);
|
||||||
|
DoTeleportTo(PosPlatform);
|
||||||
|
DoScriptText(SAY_SPEECH, me);
|
||||||
|
if(instance)
|
||||||
|
instance->SetData(DATA_GOTHIK_GATE, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
void JustSummoned(Creature *summon)
|
||||||
|
{
|
||||||
|
if(summon->GetEntry() == WORLD_TRIGGER)
|
||||||
|
summon->setActive(true);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
summon->AI()->DoAction(me->HasReactState(REACT_PASSIVE) ? 1 : 0);
|
||||||
|
summon->AI()->EnterEvadeMode();
|
||||||
|
}
|
||||||
|
summons.Summon(summon);
|
||||||
|
}
|
||||||
|
|
||||||
|
void KilledUnit(Unit* victim)
|
||||||
|
{
|
||||||
|
if(!(rand()%5))
|
||||||
|
DoScriptText(SAY_KILL, me);
|
||||||
|
}
|
||||||
|
|
||||||
|
void JustDied(Unit* Killer)
|
||||||
|
{
|
||||||
|
_JustDied();
|
||||||
|
DoScriptText(SAY_DEATH, me);
|
||||||
|
}
|
||||||
|
|
||||||
|
void SpellHit(Unit *caster, const SpellEntry *spell)
|
||||||
|
{
|
||||||
|
uint32 spellId = 0;
|
||||||
|
switch(spell->Id)
|
||||||
|
{
|
||||||
|
case SPELL_INFORM_LIVE_TRAINEE: spellId = SPELL_INFORM_DEAD_TRAINEE; break;
|
||||||
|
case SPELL_INFORM_LIVE_KNIGHT: spellId = SPELL_INFORM_DEAD_KNIGHT; break;
|
||||||
|
case SPELL_INFORM_LIVE_RIDER: spellId = SPELL_INFORM_DEAD_RIDER; break;
|
||||||
|
}
|
||||||
|
if(spellId && me->isInCombat())
|
||||||
|
{
|
||||||
|
me->HandleEmoteCommand(EMOTE_ONESHOT_SPELLCAST);
|
||||||
|
me->CastSpell(deadTrigger[rand()%POS_DEAD], spellId, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void SpellHitTarget(Unit *target, const SpellEntry *spell)
|
||||||
|
{
|
||||||
|
if(!me->isInCombat())
|
||||||
|
return;
|
||||||
|
|
||||||
|
switch(spell->Id)
|
||||||
|
{
|
||||||
|
case SPELL_INFORM_DEAD_TRAINEE: DoSummon(MOB_DEAD_TRAINEE, target, 0); break;
|
||||||
|
case SPELL_INFORM_DEAD_KNIGHT: DoSummon(MOB_DEAD_KNIGHT, target, 0); break;
|
||||||
|
case SPELL_INFORM_DEAD_RIDER: DoSummon(MOB_DEAD_RIDER, target, 1.0f);
|
||||||
|
DoSummon(MOB_DEAD_HORSE, target, 1.0f); break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void UpdateAI(const uint32 diff)
|
||||||
|
{
|
||||||
|
if(!me->isInCombat())
|
||||||
|
return;
|
||||||
|
|
||||||
|
if(me->getThreatManager().isThreatListEmpty())
|
||||||
|
{
|
||||||
|
EnterEvadeMode();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(me->HasReactState(REACT_AGGRESSIVE) && !UpdateVictim())
|
||||||
|
return;
|
||||||
|
|
||||||
|
events.Update(diff);
|
||||||
|
|
||||||
|
if(me->hasUnitState(UNIT_STAT_CASTING))
|
||||||
|
return;
|
||||||
|
|
||||||
|
while(uint32 eventId = events.ExecuteEvent())
|
||||||
|
{
|
||||||
|
switch(eventId)
|
||||||
|
{
|
||||||
|
case EVENT_SUMMON:
|
||||||
|
if(waves[waveCount].entry)
|
||||||
|
{
|
||||||
|
for(uint32 i = 0; i < waves[waveCount].number; ++i)
|
||||||
|
DoSummon(waves[waveCount].entry, liveTrigger[rand()%POS_LIVE], 1.0f);
|
||||||
|
events.ScheduleEvent(EVENT_SUMMON, waves[waveCount].time);
|
||||||
|
++waveCount;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
DoScriptText(SAY_TELEPORT, me);
|
||||||
|
DoTeleportTo(PosGround);
|
||||||
|
me->SetReactState(REACT_AGGRESSIVE);
|
||||||
|
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_ATTACKABLE_2);
|
||||||
|
if(instance)
|
||||||
|
instance->SetData(DATA_GOTHIK_GATE, 0);
|
||||||
|
summons.DoAction(0, 0);
|
||||||
|
summons.DoZoneInCombat();
|
||||||
|
events.ScheduleEvent(EVENT_BOLT, 1000);
|
||||||
|
events.ScheduleEvent(EVENT_HARVEST, 15000);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case EVENT_BOLT:
|
||||||
|
DoCast(me->getVictim(), SPELL_SHADOW_BOLT);
|
||||||
|
events.ScheduleEvent(EVENT_BOLT, 1000);
|
||||||
|
return;
|
||||||
|
case EVENT_HARVEST:
|
||||||
|
DoCast(me->getVictim(), SPELL_HARVEST_SOUL);
|
||||||
|
events.ScheduleEvent(EVENT_HARVEST, 15000);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
DoMeleeAttackIfReady();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
struct TRINITY_DLL_DECL mob_gothik_minionAI : public SpellAI
|
||||||
|
{
|
||||||
|
mob_gothik_minionAI(Creature *c) : SpellAI(c)
|
||||||
|
{
|
||||||
|
liveSide = me->GetPositionY() < POS_Y_GATE;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool liveSide;
|
||||||
|
bool gateClose;
|
||||||
|
|
||||||
|
#define SIDE_CHECK(who) (liveSide == (who->GetPositionY() < POS_Y_GATE))
|
||||||
|
|
||||||
|
void DoAction(const int32 param)
|
||||||
|
{
|
||||||
|
gateClose = param;
|
||||||
|
}
|
||||||
|
|
||||||
|
void DamageTaken(Unit *attacker, uint32 &damage)
|
||||||
|
{
|
||||||
|
if(gateClose && !SIDE_CHECK(attacker))
|
||||||
|
damage = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void JustDied(Unit *killer)
|
||||||
|
{
|
||||||
|
if(me->isSummon())
|
||||||
|
{
|
||||||
|
if(Unit *owner = ((TempSummon*)me)->GetSummoner())
|
||||||
|
SpellAI::JustDied(owner);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void EnterEvadeMode()
|
||||||
|
{
|
||||||
|
if(!gateClose)
|
||||||
|
{
|
||||||
|
SpellAI::EnterEvadeMode();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!_EnterEvadeMode())
|
||||||
|
return;
|
||||||
|
|
||||||
|
Map *map = me->GetMap();
|
||||||
|
if(map->IsDungeon())
|
||||||
|
{
|
||||||
|
Map::PlayerList const &PlayerList = map->GetPlayers();
|
||||||
|
for(Map::PlayerList::const_iterator i = PlayerList.begin(); i != PlayerList.end(); ++i)
|
||||||
|
{
|
||||||
|
if(i->getSource()->isAlive() && SIDE_CHECK(i->getSource()))
|
||||||
|
{
|
||||||
|
AttackStart(i->getSource());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
me->GetMotionMaster()->MoveIdle();
|
||||||
|
Reset();
|
||||||
|
}
|
||||||
|
|
||||||
|
void UpdateAI(const uint32 diff)
|
||||||
|
{
|
||||||
|
if(gateClose && (!SIDE_CHECK(me) || me->getVictim() && !SIDE_CHECK(me->getVictim())))
|
||||||
|
{
|
||||||
|
EnterEvadeMode();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
SpellAI::UpdateAI(diff);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
CreatureAI* GetAI_boss_gothik(Creature *_Creature)
|
||||||
|
{
|
||||||
|
return new boss_gothikAI (_Creature);
|
||||||
|
}
|
||||||
|
|
||||||
|
CreatureAI* GetAI_mob_gothik_minion(Creature *_Creature)
|
||||||
|
{
|
||||||
|
return new mob_gothik_minionAI (_Creature);
|
||||||
|
}
|
||||||
|
|
||||||
|
void AddSC_boss_gothik()
|
||||||
|
{
|
||||||
|
Script *newscript;
|
||||||
|
newscript = new Script;
|
||||||
|
newscript->Name="boss_gothik";
|
||||||
|
newscript->GetAI = &GetAI_boss_gothik;
|
||||||
|
newscript->RegisterSelf();
|
||||||
|
|
||||||
|
newscript = new Script;
|
||||||
|
newscript->Name="mob_gothik_minion";
|
||||||
|
newscript->GetAI = &GetAI_mob_gothik_minion;
|
||||||
|
newscript->RegisterSelf();
|
||||||
|
}
|
||||||
|
|||||||
@@ -86,9 +86,10 @@ struct TRINITY_DLL_DECL instance_naxxramas : public InstanceData
|
|||||||
LoadDoorData(doorData);
|
LoadDoorData(doorData);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::set<GameObject*> HeiganEruption[4];
|
|
||||||
Creature *Sapphiron;
|
|
||||||
std::set<Creature*> Worshipper;
|
std::set<Creature*> Worshipper;
|
||||||
|
std::set<GameObject*> HeiganEruption[4];
|
||||||
|
GameObject *GothikGate;
|
||||||
|
Creature *Sapphiron;
|
||||||
|
|
||||||
void OnCreatureCreate(Creature *creature, bool add)
|
void OnCreatureCreate(Creature *creature, bool add)
|
||||||
{
|
{
|
||||||
@@ -114,6 +115,7 @@ struct TRINITY_DLL_DECL instance_naxxramas : public InstanceData
|
|||||||
switch(go->GetEntry())
|
switch(go->GetEntry())
|
||||||
{
|
{
|
||||||
case GO_BIRTH: if(!add && Sapphiron) Sapphiron->AI()->DoAction(DATA_SAPPHIRON_BIRTH); return;
|
case GO_BIRTH: if(!add && Sapphiron) Sapphiron->AI()->DoAction(DATA_SAPPHIRON_BIRTH); return;
|
||||||
|
case GO_GOTHIK_GATE: GothikGate = add ? go : NULL; break;
|
||||||
}
|
}
|
||||||
|
|
||||||
AddDoor(go, add);
|
AddDoor(go, add);
|
||||||
@@ -140,6 +142,10 @@ struct TRINITY_DLL_DECL instance_naxxramas : public InstanceData
|
|||||||
case DATA_HEIGAN_ERUPT:
|
case DATA_HEIGAN_ERUPT:
|
||||||
HeiganErupt(value);
|
HeiganErupt(value);
|
||||||
break;
|
break;
|
||||||
|
case DATA_GOTHIK_GATE:
|
||||||
|
if(GothikGate)
|
||||||
|
GothikGate->SetGoState(GOState(value));
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user