diff options
-rw-r--r-- | sql/updates/957_world_scripts.sql | 36 | ||||
-rw-r--r-- | sql/updates/CMakeLists.txt | 1 | ||||
-rw-r--r-- | src/bindings/scripts/CMakeLists.txt | 1 | ||||
-rw-r--r-- | src/bindings/scripts/ScriptMgr.cpp | 2 | ||||
-rw-r--r-- | src/bindings/scripts/VC71/71ScriptDev2.vcproj | 4 | ||||
-rw-r--r-- | src/bindings/scripts/VC80/80ScriptDev2.vcproj | 4 | ||||
-rw-r--r-- | src/bindings/scripts/VC90/90ScriptDev2.vcproj | 4 | ||||
-rw-r--r-- | src/bindings/scripts/scripts/zone/hellfire_citadel/hellfire_ramparts/boss_vazruden_the_herald.cpp | 490 |
8 files changed, 542 insertions, 0 deletions
diff --git a/sql/updates/957_world_scripts.sql b/sql/updates/957_world_scripts.sql new file mode 100644 index 00000000000..8cae6b3fe87 --- /dev/null +++ b/sql/updates/957_world_scripts.sql @@ -0,0 +1,36 @@ +-- Liquid Fire +UPDATE `gameobject_template` SET `data2`='5',`data11`='1' WHERE `entry` IN ('180125','182533'); + +-- Scripts & Stats +UPDATE `creature_template` SET `ScriptName`='boss_vazruden_the_herald' WHERE `entry` = '17307'; +UPDATE `creature_template` SET `ScriptName`='boss_vazruden',`heroic_entry`='18434' WHERE `entry` = '17537'; +UPDATE `creature_template` SET `ScriptName`='boss_nazan' WHERE `entry` = '17536'; +UPDATE `creature_template` SET `ScriptName`='mob_hellfire_sentry' WHERE `entry` = '17517'; +UPDATE `creature_template` SET `equipment_id`='2183',`mechanic_immune_mask`='805306367' WHERE `entry` = '18434'; + +-- Reinforced Fel Iron Chest +DELETE FROM `gameobject` WHERE `id` IN ('185168','185169'); + +-- Script Texts +DELETE FROM `script_texts` WHERE `entry` BETWEEN '-1543025' AND '-1543017'; +INSERT INTO `script_texts` (`entry`,`content_default`,`sound`,`type`,`language`,`comment`) VALUES +('-1543017','You have faced many challenges, pity they were all in vain. Soon your people will kneel to my lord!',10292,1,0,'vazruden SAY_INTRO'), +('-1543018','Is there no one left to test me?',10293,1,0,'vazruden SAY_WIPE'), +('-1543019','Your time is running out!',10294,1,0,'vazruden SAY_AGGRO_1'), +('-1543020','You are nothing, I answer a higher call!',10295,1,0,'vazruden SAY_AGGRO_2'), +('-1543021','The Dark Lord laughs at you!',10296,1,0,'vazruden SAY_AGGRO_3'), +('-1543022','It is over. Finished!',10297,1,0,'vazruden SAY_KILL_1'), +('-1543023','Your days are done!',10298,1,0,'vazruden SAY_KILL_2'), +('-1543024','My lord will be the end you all...',10299,1,0,'vazruden SAY_DIE'), +('-1543025','descends from the sky',0,3,0,'vazruden EMOTE'); + +-- Waypoint Movement +DELETE FROM `waypoint_data` WHERE `id` = '2081'; +INSERT INTO `waypoint_data`(`id`,`point`,`position_x`,`position_y`,`position_z`) VALUES +('2081','1','-1412.2','1784','112'), +('2081','2','-1447.9','1760.9','112'), +('2081','3','-1454.2','1729.3','112'), +('2081','4','-1430','1705','112'), +('2081','5','-1393.5','1705.5','112'), +('2081','6','-1369.8','1724.5','112'), +('2081','7','-1377','1760','112'); diff --git a/sql/updates/CMakeLists.txt b/sql/updates/CMakeLists.txt index 3c28413eb67..05287e091be 100644 --- a/sql/updates/CMakeLists.txt +++ b/sql/updates/CMakeLists.txt @@ -156,4 +156,5 @@ INSTALL(FILES 954_world_scripts.sql 955_world_scripts.sql 956_world_scripts.sql +957_world_scripts.sql DESTINATION share/trinity/sql/updates) diff --git a/src/bindings/scripts/CMakeLists.txt b/src/bindings/scripts/CMakeLists.txt index e9bb6212d5a..5193297610d 100644 --- a/src/bindings/scripts/CMakeLists.txt +++ b/src/bindings/scripts/CMakeLists.txt @@ -161,6 +161,7 @@ SET(trinityscript_LIB_SRCS scripts/zone/hellfire_citadel/blood_furnace/def_blood_furnace.h scripts/zone/hellfire_citadel/hellfire_ramparts/boss_omor_the_unscarred.cpp scripts/zone/hellfire_citadel/hellfire_ramparts/boss_watchkeeper_gargolmar.cpp + scripts/zone/hellfire_citadel/hellfire_ramparts/boss_vazruden_the_herald.cpp scripts/zone/hellfire_citadel/magtheridons_lair/boss_magtheridon.cpp scripts/zone/hellfire_citadel/magtheridons_lair/def_magtheridons_lair.h scripts/zone/hellfire_citadel/magtheridons_lair/instance_magtheridons_lair.cpp diff --git a/src/bindings/scripts/ScriptMgr.cpp b/src/bindings/scripts/ScriptMgr.cpp index c34cb02e4bc..4bca36cbc01 100644 --- a/src/bindings/scripts/ScriptMgr.cpp +++ b/src/bindings/scripts/ScriptMgr.cpp @@ -314,6 +314,7 @@ extern void AddSC_instance_shattered_halls(); //--Ramparts extern void AddSC_boss_watchkeeper_gargolmar(); extern void AddSC_boss_omor_the_unscarred(); +extern void AddSC_boss_vazruden_the_herald(); //Hellfire Peninsula extern void AddSC_boss_doomlordkazzak(); @@ -1519,6 +1520,7 @@ void ScriptsInit() //--Ramparts AddSC_boss_watchkeeper_gargolmar(); AddSC_boss_omor_the_unscarred(); + AddSC_boss_vazruden_the_herald(); //Hellfire Peninsula AddSC_boss_doomlordkazzak(); diff --git a/src/bindings/scripts/VC71/71ScriptDev2.vcproj b/src/bindings/scripts/VC71/71ScriptDev2.vcproj index 1fc365b2ef9..e75de4546bb 100644 --- a/src/bindings/scripts/VC71/71ScriptDev2.vcproj +++ b/src/bindings/scripts/VC71/71ScriptDev2.vcproj @@ -1467,6 +1467,10 @@ RelativePath="..\scripts\zone\hellfire_citadel\hellfire_ramparts\boss_watchkeeper_gargolmar.cpp" > </File> + <File + RelativePath="..\scripts\zone\hellfire_citadel\hellfire_ramparts\boss_vazruden_the_herald.cpp" + > + </File> </Filter> <Filter Name="Shattered Halls" diff --git a/src/bindings/scripts/VC80/80ScriptDev2.vcproj b/src/bindings/scripts/VC80/80ScriptDev2.vcproj index cd14a38e0d7..1c84fabba2c 100644 --- a/src/bindings/scripts/VC80/80ScriptDev2.vcproj +++ b/src/bindings/scripts/VC80/80ScriptDev2.vcproj @@ -1644,6 +1644,10 @@ RelativePath="..\scripts\zone\hellfire_citadel\hellfire_ramparts\boss_watchkeeper_gargolmar.cpp" > </File> + <File + RelativePath="..\scripts\zone\hellfire_citadel\hellfire_ramparts\boss_vazruden_the_herald.cpp" + > + </File> </Filter> <Filter Name="Shattered Halls" diff --git a/src/bindings/scripts/VC90/90ScriptDev2.vcproj b/src/bindings/scripts/VC90/90ScriptDev2.vcproj index e9ee048714e..d903219407e 100644 --- a/src/bindings/scripts/VC90/90ScriptDev2.vcproj +++ b/src/bindings/scripts/VC90/90ScriptDev2.vcproj @@ -1634,6 +1634,10 @@ > </File> <File + RelativePath="..\scripts\zone\hellfire_citadel\hellfire_ramparts\boss_vazruden_the_herald.cpp" + > + </File> + <File RelativePath="..\scripts\zone\hellfire_citadel\hellfire_ramparts\boss_watchkeeper_gargolmar.cpp" > </File> diff --git a/src/bindings/scripts/scripts/zone/hellfire_citadel/hellfire_ramparts/boss_vazruden_the_herald.cpp b/src/bindings/scripts/scripts/zone/hellfire_citadel/hellfire_ramparts/boss_vazruden_the_herald.cpp new file mode 100644 index 00000000000..a62c4e06217 --- /dev/null +++ b/src/bindings/scripts/scripts/zone/hellfire_citadel/hellfire_ramparts/boss_vazruden_the_herald.cpp @@ -0,0 +1,490 @@ +/* Copyright (C) 2006 - 2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/> + * 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 + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +/* ScriptData +Name: Boss_Vazruden_the_Herald +%Complete: 90 +Comment: +Category: Hellfire Citadel, Hellfire Ramparts +EndScriptData */ + +#include "precompiled.h" + +#define SPELL_FIREBALL (HeroicMode?36920:34653) +#define SPELL_CONE_OF_FIRE (HeroicMode?36921:30926) +#define SPELL_SUMMON_LIQUID_FIRE (HeroicMode?30928:23971) +#define SPELL_BELLOWING_ROAR 39427 +#define SPELL_REVENGE (HeroicMode?40392:19130) +#define SPELL_KIDNEY_SHOT 30621 +#define SPELL_FIRE_NOVA_VISUAL 19823 + +#define ENTRY_HELLFIRE_SENTRY 17517 +#define ENTRY_VAZRUDEN_HERALD 17307 +#define ENTRY_VAZRUDEN 17537 +#define ENTRY_NAZAN 17536 +#define ENTRY_LIQUID_FIRE 22515 +#define ENTRY_REINFORCED_FEL_IRON_CHEST (HeroicMode?185169:185168) + +#define SAY_INTRO -1543017 +#define SAY_WIPE -1543018 +#define SAY_AGGRO_1 -1543019 +#define SAY_AGGRO_2 -1543020 +#define SAY_AGGRO_3 -1543021 +#define SAY_KILL_1 -1543022 +#define SAY_KILL_2 -1543023 +#define SAY_DIE -1543024 +#define EMOTE -1543025 + +#define PATH_ENTRY 2081 + +const float VazrudenMiddle[3] = {-1406.5, 1746.5, 81.2}; +const float VazrudenRing[2][3] = +{ + {-1430, 1705, 112}, + {-1377, 1760, 112} +}; + +struct TRINITY_DLL_DECL boss_nazanAI : public ScriptedAI +{ + boss_nazanAI(Creature *c) : ScriptedAI(c) + { + HeroicMode = m_creature->GetMap()->IsHeroic(); + VazrudenGUID = 0; + flight = true; + Reset(); + } + + uint32 Fireball_Timer; + uint32 ConeOfFire_Timer; + uint32 BellowingRoar_Timer; + uint32 Fly_Timer; + uint32 Turn_Timer; + uint32 UnsummonCheck; + bool flight; + uint64 VazrudenGUID; + bool HeroicMode; + SpellEntry *liquid_fire; + + void Reset() + { + Fireball_Timer = 4000; + Fly_Timer = 45000; + Turn_Timer = 0; + UnsummonCheck = 5000; + } + + void Aggro(Unit* who) {} + + void JustSummoned(Creature *summoned) + { + if(summoned && summoned->GetEntry() == ENTRY_LIQUID_FIRE) + { + summoned->SetLevel(m_creature->getLevel()); + summoned->setFaction(m_creature->getFaction()); + summoned->CastSpell(summoned,SPELL_SUMMON_LIQUID_FIRE,true); + summoned->CastSpell(summoned,SPELL_FIRE_NOVA_VISUAL,true); + } + } + + void SpellHitTarget(Unit* target, const SpellEntry* entry) + { + if(target && entry->Id == SPELL_FIREBALL) + m_creature->SummonCreature(ENTRY_LIQUID_FIRE,target->GetPositionX(),target->GetPositionY(),target->GetPositionZ(),target->GetOrientation(),TEMPSUMMON_TIMED_DESPAWN,30000); + } + + void UpdateAI(const uint32 diff) + { + if (!m_creature->SelectHostilTarget() || !m_creature->getVictim()) + { + if(UnsummonCheck < diff && m_creature->isAlive()) + { + m_creature->SetLootRecipient(NULL); + m_creature->SetVisibility(VISIBILITY_OFF); + m_creature->DealDamage(m_creature, m_creature->GetMaxHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false); + m_creature->RemoveCorpse(); + }else UnsummonCheck -= diff; + return; + } + + if(Fireball_Timer < diff) + { + if(Unit *victim = SelectUnit(SELECT_TARGET_RANDOM,0)) + DoCast(victim, SPELL_FIREBALL,true); + Fireball_Timer = 4000+rand()%3000; + }else Fireball_Timer -= diff; + + if(flight) // phase 1 - the flight + { + Creature *Vazruden = (Creature*)Unit::GetUnit(*m_creature,VazrudenGUID); + if(Fly_Timer < diff || !(Vazruden && Vazruden->isAlive() && (Vazruden->GetHealth()*5 > Vazruden->GetMaxHealth()))) + { + flight = false; + BellowingRoar_Timer = 6000; + ConeOfFire_Timer = 12000; + m_creature->RemoveUnitMovementFlag(MOVEMENTFLAG_ONTRANSPORT + MOVEMENTFLAG_LEVITATING); + m_creature->AddUnitMovementFlag(MOVEMENTFLAG_WALK_MODE); + m_creature->GetMotionMaster()->Clear(); + if(Unit *victim = SelectUnit(SELECT_TARGET_NEAREST,0)) + m_creature->AI()->AttackStart(victim); + DoStartMovement(m_creature->getVictim()); + DoScriptText(EMOTE, m_creature); + return; + }else Fly_Timer -= diff; + + if(Turn_Timer < diff) + { + uint32 waypoint = (Fly_Timer/10000)%2; + if(m_creature->GetDistance(VazrudenRing[waypoint][0],VazrudenRing[waypoint][1],VazrudenRing[waypoint][2]) > 5) + m_creature->GetMotionMaster()->MovePoint(0,VazrudenRing[waypoint][0],VazrudenRing[waypoint][1],VazrudenRing[waypoint][2]); + Turn_Timer = 10000; + }else Turn_Timer -= diff; + } + else // phase 2 - land fight + { + if(ConeOfFire_Timer < diff) + { + DoCast(m_creature, SPELL_CONE_OF_FIRE); + ConeOfFire_Timer = 12000; + Fireball_Timer = 4000; + }else ConeOfFire_Timer -= diff; + + if(HeroicMode && BellowingRoar_Timer < diff) + { + DoCast(m_creature, SPELL_BELLOWING_ROAR); + BellowingRoar_Timer = 45000; + }else BellowingRoar_Timer -= diff; + + DoMeleeAttackIfReady(); + } + } +}; + +struct TRINITY_DLL_DECL boss_vazrudenAI : public ScriptedAI +{ + boss_vazrudenAI(Creature *c) : ScriptedAI(c) + { + HeroicMode = m_creature->GetMap()->IsHeroic(); + Reset(); + } + + uint32 Revenge_Timer; + bool HeroicMode; + bool WipeSaid; + uint32 UnsummonCheck; + + void Reset() + { + Revenge_Timer = 4000; + UnsummonCheck = 2000; + WipeSaid = false; + } + + void Aggro(Unit *who) + { + switch(rand()%3) + { + case 0: DoScriptText(SAY_AGGRO_1, m_creature); break; + case 1: DoScriptText(SAY_AGGRO_2, m_creature); break; + default: DoScriptText(SAY_AGGRO_3, m_creature); break; + } + } + + void KilledUnit(Unit* who) + { + if(who && who->GetEntry()!=ENTRY_VAZRUDEN) + switch(rand()%2) + { + case 0: DoScriptText(SAY_KILL_1, m_creature); break; + default: DoScriptText(SAY_KILL_2, m_creature); break; + } + } + + void JustDied(Unit* who) + { + if(who && who != m_creature) + DoScriptText(SAY_DIE, m_creature); + } + + void UpdateAI(const uint32 diff) + { + if (!m_creature->SelectHostilTarget() || !m_creature->getVictim()) + { + if(UnsummonCheck < diff && m_creature->isAlive()) + { + if(!WipeSaid) + { + DoScriptText(SAY_WIPE, m_creature); + WipeSaid = true; + } + m_creature->SetLootRecipient(NULL); + m_creature->SetVisibility(VISIBILITY_OFF); + m_creature->DealDamage(m_creature, m_creature->GetMaxHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false); + m_creature->RemoveCorpse(); + }else UnsummonCheck -= diff; + return; + } + + if(Revenge_Timer < diff) + { + if(Unit *victim = m_creature->getVictim()) + DoCast(victim, SPELL_REVENGE); + Revenge_Timer = 5000; + }else Revenge_Timer -= diff; + + DoMeleeAttackIfReady(); + } +}; + +struct TRINITY_DLL_DECL boss_vazruden_the_heraldAI : public ScriptedAI +{ + boss_vazruden_the_heraldAI(Creature *c) : ScriptedAI(c) + { + summoned = false; + sentryDown = false; + NazanGUID = 0; + VazrudenGUID = 0; + HeroicMode = m_creature->GetMap()->IsHeroic(); + Reset(); + } + + uint32 phase; + uint32 waypoint; + uint32 check; + bool sentryDown; + uint64 NazanGUID; + uint64 VazrudenGUID; + bool summoned; + bool HeroicMode; + + void Reset() + { + phase = 0; + waypoint = 0; + check = 0; + UnsummonAdds(); + m_creature->GetMotionMaster()->MovePath(PATH_ENTRY, true); + } + + void UnsummonAdds() + { + if(summoned) + { + Creature *Nazan = (Creature*)Unit::GetUnit(*m_creature, NazanGUID); + Creature *Vazruden = (Creature*)Unit::GetUnit(*m_creature, VazrudenGUID); + if(Nazan || (Nazan = (Creature *)FindCreature(ENTRY_NAZAN, 5000))) + { + Nazan->SetLootRecipient(NULL); + Nazan->SetVisibility(VISIBILITY_OFF); + Nazan->DealDamage(Nazan, Nazan->GetMaxHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false); + Nazan->RemoveCorpse(); + NazanGUID = 0; + } + if(Vazruden || (Vazruden = (Creature *)FindCreature(ENTRY_VAZRUDEN, 5000))) + { + Vazruden->SetLootRecipient(NULL); + Vazruden->SetVisibility(VISIBILITY_OFF); + Vazruden->DealDamage(Vazruden, Vazruden->GetMaxHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false); + Vazruden->RemoveCorpse(); + VazrudenGUID = 0; + } + summoned = false; + m_creature->clearUnitState(UNIT_STAT_ROOT); + m_creature->SetVisibility(VISIBILITY_ON); + } + } + + void SummonAdds() + { + if(!summoned) + { + Creature* Vazruden = m_creature->SummonCreature(ENTRY_VAZRUDEN,VazrudenMiddle[0],VazrudenMiddle[1],VazrudenMiddle[2],0,TEMPSUMMON_CORPSE_TIMED_DESPAWN,6000000); + VazrudenGUID = Vazruden->GetGUID(); + Creature* Nazan = m_creature->SummonCreature(ENTRY_NAZAN,VazrudenMiddle[0],VazrudenMiddle[1],VazrudenMiddle[2],0,TEMPSUMMON_CORPSE_TIMED_DESPAWN,6000000); + NazanGUID = Nazan->GetGUID(); + summoned = true; + m_creature->SetVisibility(VISIBILITY_OFF); + m_creature->addUnitState(UNIT_STAT_ROOT); + } + } + + void Aggro(Unit *who) + { + if(phase==0) + { + phase = 1; + check = 0; + DoScriptText(SAY_INTRO, m_creature); + } + } + + void JustSummoned(Creature *summoned) + { + if(!summoned) return; + Unit *victim = m_creature->getVictim(); + if(summoned->GetEntry() == ENTRY_NAZAN) + { + ((boss_nazanAI *)summoned->AI())->VazrudenGUID = VazrudenGUID; + summoned->AddUnitMovementFlag(MOVEMENTFLAG_ONTRANSPORT + MOVEMENTFLAG_LEVITATING); + summoned->SetSpeed(MOVE_FLIGHT, 2.5); + if(victim) + ((ScriptedAI*)summoned->AI())->AttackStart(victim,false); + } + else if(victim) + summoned->AI()->AttackStart(victim); + } + + void SentryDownBy(Unit* killer) + { + if(sentryDown) + { + AttackStart(killer, false); + sentryDown = false; + } + else + sentryDown = true; + } + + void UpdateAI(const uint32 diff) + { + switch(phase) + { + case 0: // circle around the platform + return; + break; + case 1: // go to the middle and begin the fight + if(check < diff) + { + if(m_creature->GetDistance(VazrudenMiddle[0],VazrudenMiddle[1],VazrudenMiddle[2])>5) + { + m_creature->GetMotionMaster()->Clear(); + m_creature->GetMotionMaster()->MovePoint(0,VazrudenMiddle[0],VazrudenMiddle[1],VazrudenMiddle[2]); + check = 1000; + } + else + { + SummonAdds(); + phase = 2; + return; + } + }else check -= diff; + break; + default: // adds do the job now + if(check < diff) + { + Creature *Nazan = (Creature*)Unit::GetUnit(*m_creature, NazanGUID); + Creature *Vazruden = (Creature*)Unit::GetUnit(*m_creature, VazrudenGUID); + if(Nazan && Nazan->isAlive() || Vazruden && Vazruden->isAlive()) + { + if(Nazan && Nazan->getVictim() || Vazruden && Vazruden->getVictim()) + return; + else + { + UnsummonAdds(); + EnterEvadeMode(); + } + }else + { + m_creature->SummonGameObject(ENTRY_REINFORCED_FEL_IRON_CHEST,VazrudenMiddle[0],VazrudenMiddle[1],VazrudenMiddle[2],0,0,0,0,0,0); + m_creature->SetLootRecipient(NULL); + m_creature->DealDamage(m_creature, m_creature->GetMaxHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false); + } + check = 2000; + }else check -= diff; + break; + } + } +}; + +struct TRINITY_DLL_DECL mob_hellfire_sentryAI : public ScriptedAI +{ + mob_hellfire_sentryAI(Creature *c) : ScriptedAI(c) + { Reset();} + + uint32 KidneyShot_Timer; + + void Reset() + { + KidneyShot_Timer = 3000+rand()%4000; + } + + void Aggro(Unit* who) {} + + void JustDied(Unit* who) + { + if(Creature *herald = (Creature *)FindCreature(ENTRY_VAZRUDEN_HERALD,150)) + ((boss_vazruden_the_heraldAI *)herald->AI())->SentryDownBy(who); + } + + void UpdateAI(const uint32 diff) + { + if (!m_creature->SelectHostilTarget() || !m_creature->getVictim()) + return; + + if(KidneyShot_Timer < diff) + { + if(Unit *victim = m_creature->getVictim()) + DoCast(victim, SPELL_KIDNEY_SHOT); + KidneyShot_Timer = 20000; + }else KidneyShot_Timer -= diff; + + DoMeleeAttackIfReady(); + } +}; + +CreatureAI* GetAI_boss_vazruden_the_herald(Creature *_Creature) +{ + return new boss_vazruden_the_heraldAI (_Creature); +} + +CreatureAI* GetAI_boss_vazruden(Creature *_Creature) +{ + return new boss_vazrudenAI (_Creature); +} + + +CreatureAI* GetAI_boss_nazan(Creature *_Creature) +{ + return new boss_nazanAI (_Creature); +} + +CreatureAI* GetAI_mob_hellfire_sentry(Creature *_Creature) +{ + return new mob_hellfire_sentryAI (_Creature); +} + +void AddSC_boss_vazruden_the_herald() +{ + Script *newscript; + newscript = new Script; + newscript->Name="boss_vazruden_the_herald"; + newscript->GetAI = &GetAI_boss_vazruden_the_herald; + newscript->RegisterSelf(); + + newscript = new Script; + newscript->Name="boss_vazruden"; + newscript->GetAI = &GetAI_boss_vazruden; + newscript->RegisterSelf(); + + newscript = new Script; + newscript->Name="boss_nazan"; + newscript->GetAI = &GetAI_boss_nazan; + newscript->RegisterSelf(); + + newscript = new Script; + newscript->Name="mob_hellfire_sentry"; + newscript->GetAI = &GetAI_mob_hellfire_sentry; + newscript->RegisterSelf(); +}
\ No newline at end of file |