aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorBlaymoira <none@none>2008-12-15 18:54:16 +0100
committerBlaymoira <none@none>2008-12-15 18:54:16 +0100
commit9b1357a332c249a4fdcf03a802180cc47fa6015a (patch)
tree64056f74a523a8ff79e4d553aa24829d3787d53f /src
parent8a0ca6b6a1fbb5690a81c8158039a2800c50e1c8 (diff)
*Merged Scriptdev2 800
*Moved Scalding Water under function not used yet. --HG-- branch : trunk
Diffstat (limited to 'src')
-rw-r--r--src/bindings/scripts/Makefile.am3
-rw-r--r--src/bindings/scripts/ScriptMgr.cpp16
-rw-r--r--src/bindings/scripts/VC71/71ScriptDev2.vcproj12
-rw-r--r--src/bindings/scripts/VC80/80ScriptDev2.vcproj12
-rw-r--r--src/bindings/scripts/VC90/90ScriptDev2.vcproj12
-rw-r--r--src/bindings/scripts/scripts/zone/aunchindoun/shadow_labyrinth/boss_ambassador_hellmaw.cpp11
-rw-r--r--src/bindings/scripts/scripts/zone/caverns_of_time/dark_portal/boss_aeonus.cpp38
-rw-r--r--src/bindings/scripts/scripts/zone/caverns_of_time/dark_portal/boss_chrono_lord_deja.cpp29
-rw-r--r--src/bindings/scripts/scripts/zone/caverns_of_time/dark_portal/boss_temporus.cpp26
-rw-r--r--src/bindings/scripts/scripts/zone/caverns_of_time/dark_portal/dark_portal.cpp405
-rw-r--r--src/bindings/scripts/scripts/zone/caverns_of_time/dark_portal/def_dark_portal.h35
-rw-r--r--src/bindings/scripts/scripts/zone/caverns_of_time/dark_portal/instance_dark_portal.cpp376
-rw-r--r--src/bindings/scripts/scripts/zone/caverns_of_time/hyjal/hyjal.cpp2
-rw-r--r--src/bindings/scripts/scripts/zone/caverns_of_time/old_hillsbrad/instance_old_hillsbrad.cpp10
-rw-r--r--src/bindings/scripts/scripts/zone/caverns_of_time/old_hillsbrad/old_hillsbrad.cpp13
-rw-r--r--src/bindings/scripts/scripts/zone/coilfang_resevoir/serpent_shrine/boss_lurker_below.cpp17
-rw-r--r--src/bindings/scripts/scripts/zone/karazhan/boss_shade_of_aran.cpp5
-rw-r--r--src/bindings/scripts/scripts/zone/karazhan/bosses_opera.cpp2
-rw-r--r--src/bindings/scripts/scripts/zone/tempest_keep/the_eye/boss_astromancer.cpp21
-rw-r--r--src/bindings/scripts/scripts/zone/terokkar_forest/terokkar_forest.cpp4
20 files changed, 987 insertions, 62 deletions
diff --git a/src/bindings/scripts/Makefile.am b/src/bindings/scripts/Makefile.am
index 716eaae72d8..991a575704a 100644
--- a/src/bindings/scripts/Makefile.am
+++ b/src/bindings/scripts/Makefile.am
@@ -146,6 +146,9 @@ scripts/zone/burning_steppes/burning_steppes.cpp \
scripts/zone/caverns_of_time/dark_portal/boss_aeonus.cpp \
scripts/zone/caverns_of_time/dark_portal/boss_chrono_lord_deja.cpp \
scripts/zone/caverns_of_time/dark_portal/boss_temporus.cpp \
+scripts/zone/caverns_of_time/dark_portal/dark_portal.cpp \
+scripts/zone/caverns_of_time/dark_portal/def_dark_portal.h \
+scripts/zone/caverns_of_time/dark_portal/instance_dark_portal.cpp \
scripts/zone/caverns_of_time/hyjal/boss_archimonde.cpp \
scripts/zone/caverns_of_time/hyjal/def_hyjal.h \
scripts/zone/caverns_of_time/hyjal/hyjal.cpp \
diff --git a/src/bindings/scripts/ScriptMgr.cpp b/src/bindings/scripts/ScriptMgr.cpp
index 414793c3898..76ad10fe6b3 100644
--- a/src/bindings/scripts/ScriptMgr.cpp
+++ b/src/bindings/scripts/ScriptMgr.cpp
@@ -17,7 +17,6 @@
#endif _TRINITY_SCRIPT_CONFIG
//*** Global data ***
-int num_db_scripts;
int num_sc_scripts;
Script *m_scripts[MAX_SCRIPTS];
@@ -230,6 +229,8 @@ extern void AddSC_old_hillsbrad();
extern void AddSC_boss_aeonus();
extern void AddSC_boss_chrono_lord_deja();
extern void AddSC_boss_temporus();
+extern void AddSC_dark_portal();
+extern void AddSC_instance_dark_portal();
//Coilfang Resevoir
//--Serpent Shrine Cavern
@@ -570,6 +571,8 @@ extern void AddSC_winterspring();
extern void AddSC_zangarmarsh();
//Zul'Farrak
+extern void AddSC_zulfarrak();
+
//Zul'Gurub
extern void AddSC_boss_jeklik();
extern void AddSC_boss_venoxis();
@@ -1193,10 +1196,9 @@ void ScriptsFree()
delete []SpellSummary;
// Free resources before library unload
- for(int i=0;i<num_db_scripts;i++)
+ for(int i=0;i<num_sc_scripts;i++)
delete m_scripts[i];
- num_db_scripts = 0;
num_sc_scripts = 0;
}
@@ -1248,8 +1250,6 @@ void ScriptsInit()
if (CanLoadDB)
LoadDatabase();
- num_db_scripts = GetScriptNames().size();
-
outstring_log("TSCR: Loading C++ scripts");
barGoLink bar(1);
bar.step();
@@ -1426,6 +1426,8 @@ void ScriptsInit()
AddSC_boss_aeonus();
AddSC_boss_chrono_lord_deja();
AddSC_boss_temporus();
+ AddSC_dark_portal();
+ AddSC_instance_dark_portal();
//Coilfang Resevoir
//--Serpent Shrine Cavern
@@ -1765,6 +1767,8 @@ void ScriptsInit()
AddSC_zangarmarsh();
//Zul'Farrak
+ AddSC_zulfarrak();
+
//Zul'Gurub
AddSC_boss_jeklik();
AddSC_boss_venoxis();
@@ -1793,7 +1797,7 @@ void ScriptsInit()
// -------------------
- outstring_log(">> Loaded %i C++ Scripts (of %i ScriptNames defined in Mangos database)", num_sc_scripts, num_db_scripts);
+ outstring_log(">> Loaded %i C++ Scripts.", num_sc_scripts);
}
//*********************************
diff --git a/src/bindings/scripts/VC71/71ScriptDev2.vcproj b/src/bindings/scripts/VC71/71ScriptDev2.vcproj
index 374f3127711..91606be6e0e 100644
--- a/src/bindings/scripts/VC71/71ScriptDev2.vcproj
+++ b/src/bindings/scripts/VC71/71ScriptDev2.vcproj
@@ -1847,6 +1847,18 @@
RelativePath="..\scripts\zone\caverns_of_time\dark_portal\boss_temporus.cpp"
>
</File>
+ <File
+ RelativePath="..\scripts\zone\caverns_of_time\dark_portal\dark_portal.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\scripts\zone\caverns_of_time\dark_portal\def_dark_portal.h"
+ >
+ </File>
+ <File
+ RelativePath="..\scripts\zone\caverns_of_time\dark_portal\instance_dark_portal.cpp"
+ >
+ </File>
</Filter>
<Filter
Name="Battle for Mt. Hyjal"
diff --git a/src/bindings/scripts/VC80/80ScriptDev2.vcproj b/src/bindings/scripts/VC80/80ScriptDev2.vcproj
index 20fd76033fc..c6f4bea7154 100644
--- a/src/bindings/scripts/VC80/80ScriptDev2.vcproj
+++ b/src/bindings/scripts/VC80/80ScriptDev2.vcproj
@@ -2024,6 +2024,18 @@
RelativePath="..\scripts\zone\caverns_of_time\dark_portal\boss_temporus.cpp"
>
</File>
+ <File
+ RelativePath="..\scripts\zone\caverns_of_time\dark_portal\dark_portal.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\scripts\zone\caverns_of_time\dark_portal\def_dark_portal.h"
+ >
+ </File>
+ <File
+ RelativePath="..\scripts\zone\caverns_of_time\dark_portal\instance_dark_portal.cpp"
+ >
+ </File>
</Filter>
<Filter
Name="Battle for Mt. Hyjal"
diff --git a/src/bindings/scripts/VC90/90ScriptDev2.vcproj b/src/bindings/scripts/VC90/90ScriptDev2.vcproj
index 84c23853909..101f967c012 100644
--- a/src/bindings/scripts/VC90/90ScriptDev2.vcproj
+++ b/src/bindings/scripts/VC90/90ScriptDev2.vcproj
@@ -2017,6 +2017,18 @@
RelativePath="..\scripts\zone\caverns_of_time\dark_portal\boss_temporus.cpp"
>
</File>
+ <File
+ RelativePath="..\scripts\zone\caverns_of_time\dark_portal\dark_portal.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\scripts\zone\caverns_of_time\dark_portal\def_dark_portal.h"
+ >
+ </File>
+ <File
+ RelativePath="..\scripts\zone\caverns_of_time\dark_portal\instance_dark_portal.cpp"
+ >
+ </File>
</Filter>
<Filter
Name="Battle for Mt. Hyjal"
diff --git a/src/bindings/scripts/scripts/zone/aunchindoun/shadow_labyrinth/boss_ambassador_hellmaw.cpp b/src/bindings/scripts/scripts/zone/aunchindoun/shadow_labyrinth/boss_ambassador_hellmaw.cpp
index 20bf7c2d95e..5840a7928a8 100644
--- a/src/bindings/scripts/scripts/zone/aunchindoun/shadow_labyrinth/boss_ambassador_hellmaw.cpp
+++ b/src/bindings/scripts/scripts/zone/aunchindoun/shadow_labyrinth/boss_ambassador_hellmaw.cpp
@@ -47,6 +47,7 @@ struct TRINITY_DLL_DECL boss_ambassador_hellmawAI : public ScriptedAI
boss_ambassador_hellmawAI(Creature *c) : ScriptedAI(c)
{
pInstance = ((ScriptedInstance*)c->GetInstanceData());
+ HeroicMode = m_creature->GetMap()->IsHeroic();
Reset();
}
@@ -62,8 +63,6 @@ struct TRINITY_DLL_DECL boss_ambassador_hellmawAI : public ScriptedAI
void Reset()
{
- HeroicMode = m_creature->GetMap()->IsHeroic();
-
EventCheck_Timer = 5000;
CorrosiveAcid_Timer = 25000;
Fear_Timer = 40000;
@@ -89,6 +88,14 @@ struct TRINITY_DLL_DECL boss_ambassador_hellmawAI : public ScriptedAI
}
}
+ void MoveInLineOfSight(Unit *who)
+ {
+ if (m_creature->HasAura(SPELL_BANISH,0))
+ return;
+
+ ScriptedAI::MoveInLineOfSight(who);
+ }
+
void MovementInform(uint32 type, uint32 id)
{
if (type != POINT_MOTION_TYPE)
diff --git a/src/bindings/scripts/scripts/zone/caverns_of_time/dark_portal/boss_aeonus.cpp b/src/bindings/scripts/scripts/zone/caverns_of_time/dark_portal/boss_aeonus.cpp
index db167ff5ab9..8fc36eeeb0b 100644
--- a/src/bindings/scripts/scripts/zone/caverns_of_time/dark_portal/boss_aeonus.cpp
+++ b/src/bindings/scripts/scripts/zone/caverns_of_time/dark_portal/boss_aeonus.cpp
@@ -22,6 +22,7 @@ SDCategory: Caverns of Time, The Dark Portal
EndScriptData */
#include "precompiled.h"
+#include "def_dark_portal.h"
#define SAY_ENTER -1269012
#define SAY_AGGRO -1269013
@@ -29,6 +30,7 @@ EndScriptData */
#define SAY_SLAY1 -1269015
#define SAY_SLAY2 -1269016
#define SAY_DEATH -1269017
+#define EMOTE_FRENZY -1269018
#define SPELL_CLEAVE 40504
#define SPELL_TIME_STOP 31422
@@ -38,7 +40,15 @@ EndScriptData */
struct TRINITY_DLL_DECL boss_aeonusAI : public ScriptedAI
{
- boss_aeonusAI(Creature *c) : ScriptedAI(c) {Reset();}
+ boss_aeonusAI(Creature *c) : ScriptedAI(c)
+ {
+ pInstance = ((ScriptedInstance*)c->GetInstanceData());
+ HeroicMode = m_creature->GetMap()->IsHeroic();
+ Reset();
+ }
+
+ ScriptedInstance *pInstance;
+ bool HeroicMode;
uint32 SandBreath_Timer;
uint32 TimeStop_Timer;
@@ -56,9 +66,27 @@ struct TRINITY_DLL_DECL boss_aeonusAI : public ScriptedAI
DoScriptText(SAY_AGGRO, m_creature);
}
+ void MoveInLineOfSight(Unit *who)
+ {
+ //Despawn Time Keeper
+ if (who->GetTypeId() == TYPEID_UNIT && who->GetEntry() == C_TIME_KEEPER)
+ {
+ if (m_creature->IsWithinDistInMap(who,20.0f))
+ {
+ DoScriptText(SAY_BANISH, m_creature);
+ m_creature->DealDamage(who, who->GetHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false);
+ }
+ }
+
+ ScriptedAI::MoveInLineOfSight(who);
+ }
+
void JustDied(Unit *victim)
{
DoScriptText(SAY_DEATH, m_creature);
+
+ if (pInstance)
+ pInstance->SetData(TYPE_RIFT,DONE);
}
void KilledUnit(Unit *victim)
@@ -79,18 +107,13 @@ struct TRINITY_DLL_DECL boss_aeonusAI : public ScriptedAI
//Sand Breath
if (SandBreath_Timer < diff)
{
- Unit* target = NULL;
- target = m_creature->getVictim();
- if (target)
- DoCast(target, SPELL_SAND_BREATH);
+ DoCast(m_creature->getVictim(), SPELL_SAND_BREATH);
SandBreath_Timer = 30000;
}else SandBreath_Timer -= diff;
//Time Stop
if (TimeStop_Timer < diff)
{
- DoScriptText(SAY_BANISH, m_creature);
-
DoCast(m_creature->getVictim(), SPELL_TIME_STOP);
TimeStop_Timer = 40000;
}else TimeStop_Timer -= diff;
@@ -98,6 +121,7 @@ struct TRINITY_DLL_DECL boss_aeonusAI : public ScriptedAI
//Frenzy
if (Frenzy_Timer < diff)
{
+ DoScriptText(EMOTE_FRENZY, m_creature);
DoCast(m_creature, SPELL_ENRAGE);
Frenzy_Timer = 120000;
}else Frenzy_Timer -= diff;
diff --git a/src/bindings/scripts/scripts/zone/caverns_of_time/dark_portal/boss_chrono_lord_deja.cpp b/src/bindings/scripts/scripts/zone/caverns_of_time/dark_portal/boss_chrono_lord_deja.cpp
index fcaade46067..caa40858be6 100644
--- a/src/bindings/scripts/scripts/zone/caverns_of_time/dark_portal/boss_chrono_lord_deja.cpp
+++ b/src/bindings/scripts/scripts/zone/caverns_of_time/dark_portal/boss_chrono_lord_deja.cpp
@@ -22,6 +22,7 @@ SDCategory: Caverns of Time, The Dark Portal
EndScriptData */
#include "precompiled.h"
+#include "def_dark_portal.h"
#define SAY_ENTER -1269006
#define SAY_AGGRO -1269007
@@ -39,7 +40,15 @@ EndScriptData */
struct TRINITY_DLL_DECL boss_chrono_lord_dejaAI : public ScriptedAI
{
- boss_chrono_lord_dejaAI(Creature *c) : ScriptedAI(c) {Reset();}
+ boss_chrono_lord_dejaAI(Creature *c) : ScriptedAI(c)
+ {
+ pInstance = ((ScriptedInstance*)c->GetInstanceData());
+ HeroicMode = m_creature->GetMap()->IsHeroic();
+ Reset();
+ }
+
+ ScriptedInstance *pInstance;
+ bool HeroicMode;
uint32 ArcaneBlast_Timer;
uint32 TimeLapse_Timer;
@@ -55,6 +64,21 @@ struct TRINITY_DLL_DECL boss_chrono_lord_dejaAI : public ScriptedAI
DoScriptText(SAY_AGGRO, m_creature);
}
+ void MoveInLineOfSight(Unit *who)
+ {
+ //Despawn Time Keeper
+ if (who->GetTypeId() == TYPEID_UNIT && who->GetEntry() == C_TIME_KEEPER)
+ {
+ if (m_creature->IsWithinDistInMap(who,20.0f))
+ {
+ DoScriptText(SAY_BANISH, m_creature);
+ m_creature->DealDamage(who, who->GetHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false);
+ }
+ }
+
+ ScriptedAI::MoveInLineOfSight(who);
+ }
+
void KilledUnit(Unit *victim)
{
switch(rand()%2)
@@ -67,6 +91,9 @@ struct TRINITY_DLL_DECL boss_chrono_lord_dejaAI : public ScriptedAI
void JustDied(Unit *victim)
{
DoScriptText(SAY_DEATH, m_creature);
+
+ if (pInstance)
+ pInstance->SetData(TYPE_RIFT,SPECIAL);
}
void UpdateAI(const uint32 diff)
diff --git a/src/bindings/scripts/scripts/zone/caverns_of_time/dark_portal/boss_temporus.cpp b/src/bindings/scripts/scripts/zone/caverns_of_time/dark_portal/boss_temporus.cpp
index b6f77f31c88..b9dca167e20 100644
--- a/src/bindings/scripts/scripts/zone/caverns_of_time/dark_portal/boss_temporus.cpp
+++ b/src/bindings/scripts/scripts/zone/caverns_of_time/dark_portal/boss_temporus.cpp
@@ -22,6 +22,7 @@ SDCategory: Caverns of Time, The Dark Portal
EndScriptData */
#include "precompiled.h"
+#include "def_dark_portal.h"
#define SAY_ENTER -1269000
#define SAY_AGGRO -1269001
@@ -38,7 +39,15 @@ EndScriptData */
struct TRINITY_DLL_DECL boss_temporusAI : public ScriptedAI
{
- boss_temporusAI(Creature *c) : ScriptedAI(c) {Reset();}
+ boss_temporusAI(Creature *c) : ScriptedAI(c)
+ {
+ pInstance = ((ScriptedInstance*)c->GetInstanceData());
+ HeroicMode = m_creature->GetMap()->IsHeroic();
+ Reset();
+ }
+
+ ScriptedInstance *pInstance;
+ bool HeroicMode;
uint32 Haste_Timer;
uint32 SpellReflection_Timer;
@@ -69,20 +78,19 @@ struct TRINITY_DLL_DECL boss_temporusAI : public ScriptedAI
void JustDied(Unit *victim)
{
DoScriptText(SAY_DEATH, m_creature);
+
+ if (pInstance)
+ pInstance->SetData(TYPE_RIFT,SPECIAL);
}
void MoveInLineOfSight(Unit *who)
{
- if (!who || m_creature->getVictim())
- return;
-
//Despawn Time Keeper
- if (who->GetTypeId() == TYPEID_UNIT)
+ if (who->GetTypeId() == TYPEID_UNIT && who->GetEntry() == C_TIME_KEEPER)
{
- if(((Creature*)who)->GetEntry() == 17918 && m_creature->IsWithinDistInMap(who,20))
+ if (m_creature->IsWithinDistInMap(who,20.0f))
{
- //This is the wrong yell & sound for despawning time keepers!
- DoScriptText(SAY_ENTER, m_creature);
+ DoScriptText(SAY_BANISH, m_creature);
m_creature->DealDamage(who, who->GetHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false);
}
@@ -107,8 +115,6 @@ struct TRINITY_DLL_DECL boss_temporusAI : public ScriptedAI
//Spell Reflection
if (SpellReflection_Timer < diff)
{
- DoScriptText(SAY_BANISH, m_creature);
-
DoCast(m_creature, SPELL_REFLECT);
SpellReflection_Timer = 40000+rand()%10000;
}else SpellReflection_Timer -= diff;
diff --git a/src/bindings/scripts/scripts/zone/caverns_of_time/dark_portal/dark_portal.cpp b/src/bindings/scripts/scripts/zone/caverns_of_time/dark_portal/dark_portal.cpp
new file mode 100644
index 00000000000..858d57cc0e4
--- /dev/null
+++ b/src/bindings/scripts/scripts/zone/caverns_of_time/dark_portal/dark_portal.cpp
@@ -0,0 +1,405 @@
+/* Copyright (C) 2006 - 2008 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
+SDName: Dark_Portal
+SD%Complete: 30
+SDComment: Misc NPC's and mobs for instance. Most here far from complete.
+SDCategory: Caverns of Time, The Dark Portal
+EndScriptData */
+
+/* ContentData
+npc_medivh_bm
+npc_time_rift
+npc_saat
+EndContentData */
+
+#include "precompiled.h"
+#include "def_dark_portal.h"
+
+#define SAY_ENTER -1269020 //where does this belong?
+#define SAY_INTRO -1269021
+#define SAY_WEAK75 -1269022
+#define SAY_WEAK50 -1269023
+#define SAY_WEAK25 -1269024
+#define SAY_DEATH -1269025
+#define SAY_WIN -1269026
+#define SAY_ORCS_ENTER -1269027
+#define SAY_ORCS_ANSWER -1269028
+
+#define SPELL_CHANNEL 31556
+#define SPELL_PORTAL_RUNE 32570 //aura(portal on ground effect)
+
+#define SPELL_BLACK_CRYSTAL 32563 //aura
+#define SPELL_PORTAL_CRYSTAL 32564 //summon
+
+#define SPELL_BANISH_PURPLE 32566 //aura
+#define SPELL_BANISH_GREEN 32567 //aura
+
+#define SPELL_CORRUPT 31326
+#define SPELL_CORRUPT_AEONUS 37853
+
+#define C_COUNCIL_ENFORCER 17023
+
+struct TRINITY_DLL_DECL npc_medivh_bmAI : public ScriptedAI
+{
+ npc_medivh_bmAI(Creature *c) : ScriptedAI(c)
+ {
+ pInstance = ((ScriptedInstance*)c->GetInstanceData());
+ Reset();
+ }
+
+ ScriptedInstance *pInstance;
+
+ uint32 SpellCorrupt_Timer;
+ uint32 Check_Timer;
+
+ bool Life75;
+ bool Life50;
+ bool Life25;
+
+ void Reset()
+ {
+ SpellCorrupt_Timer = 0;
+
+ if (!pInstance)
+ return;
+
+ if (pInstance->GetData(TYPE_MEDIVH) == IN_PROGRESS)
+ m_creature->CastSpell(m_creature,SPELL_CHANNEL,true);
+ else if (m_creature->HasAura(SPELL_CHANNEL,0))
+ m_creature->RemoveAura(SPELL_CHANNEL,0);
+
+ m_creature->CastSpell(m_creature,SPELL_PORTAL_RUNE,true);
+ }
+
+ void MoveInLineOfSight(Unit *who)
+ {
+ if (!pInstance)
+ return;
+
+ if (who->GetTypeId() == TYPEID_PLAYER && m_creature->IsWithinDistInMap(who, 10.0f))
+ {
+ if (pInstance->GetData(TYPE_MEDIVH) == IN_PROGRESS)
+ return;
+
+ DoScriptText(SAY_INTRO, m_creature);
+ pInstance->SetData(TYPE_MEDIVH,IN_PROGRESS);
+ m_creature->CastSpell(m_creature,SPELL_CHANNEL,false);
+ Check_Timer = 5000;
+ }
+ else if (who->GetTypeId() == TYPEID_UNIT && m_creature->IsWithinDistInMap(who, 15.0f))
+ {
+ if (pInstance->GetData(TYPE_MEDIVH) != IN_PROGRESS)
+ return;
+
+ uint32 entry = who->GetEntry();
+ if (entry == C_ASSAS || entry == C_WHELP || entry == C_CHRON || entry == C_EXECU || entry == C_VANQU)
+ {
+ who->StopMoving();
+ who->CastSpell(m_creature,SPELL_CORRUPT,false);
+ }
+ else if (entry == C_AEONUS)
+ {
+ who->StopMoving();
+ who->CastSpell(m_creature,SPELL_CORRUPT_AEONUS,false);
+ }
+ }
+ }
+
+ void AttackStart(Unit *who)
+ {
+ //if (pInstance && pInstance->GetData(TYPE_MEDIVH) == IN_PROGRESS)
+ //return;
+
+ //ScriptedAI::AttackStart(who);
+ }
+
+ void Aggro(Unit *who) {}
+
+ void SpellHit(Unit* caster, const SpellEntry* spell)
+ {
+ if (SpellCorrupt_Timer)
+ return;
+
+ if (spell->Id == SPELL_CORRUPT_AEONUS)
+ SpellCorrupt_Timer = 1000;
+
+ if (spell->Id == SPELL_CORRUPT)
+ SpellCorrupt_Timer = 3000;
+ }
+
+ void JustDied(Unit* Killer)
+ {
+ if (Killer->GetEntry() == m_creature->GetEntry())
+ return;
+
+ DoScriptText(SAY_DEATH, m_creature);
+ }
+
+ void UpdateAI(const uint32 diff)
+ {
+ if (!pInstance)
+ return;
+
+ if (SpellCorrupt_Timer)
+ {
+ if (SpellCorrupt_Timer < diff)
+ {
+ pInstance->SetData(TYPE_MEDIVH,SPECIAL);
+
+ if (m_creature->HasAura(SPELL_CORRUPT_AEONUS,0))
+ SpellCorrupt_Timer = 1000;
+ else if (m_creature->HasAura(SPELL_CORRUPT,0))
+ SpellCorrupt_Timer = 3000;
+ else
+ SpellCorrupt_Timer = 0;
+ }else SpellCorrupt_Timer -= diff;
+ }
+
+ if (Check_Timer)
+ {
+ if (Check_Timer < diff)
+ {
+ uint32 pct = pInstance->GetData(DATA_SHIELD);
+
+ Check_Timer = 5000;
+
+ if (Life25 && pct <= 25)
+ {
+ DoScriptText(SAY_WEAK25, m_creature);
+ Life25 = false;
+ Check_Timer = 0;
+ }
+ else if (Life50 && pct <= 50)
+ {
+ DoScriptText(SAY_WEAK50, m_creature);
+ Life50 = false;
+ }
+ else if (Life75 && pct <= 75)
+ {
+ DoScriptText(SAY_WEAK75, m_creature);
+ Life75 = false;
+ }
+
+ //if we reach this it means event was running but at some point reset.
+ if (pInstance->GetData(TYPE_MEDIVH) == NOT_STARTED)
+ {
+ m_creature->DealDamage(m_creature, m_creature->GetHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false);
+ m_creature->RemoveCorpse();
+ m_creature->Respawn();
+ return;
+ }
+
+ if (pInstance->GetData(TYPE_MEDIVH) == DONE)
+ {
+ DoScriptText(SAY_WIN, m_creature);
+ Check_Timer = 0;
+ //TODO: start the post-event here
+ }
+ }else Check_Timer -= diff;
+ }
+
+ //if (!m_creature->SelectHostilTarget() || !m_creature->getVictim())
+ //return;
+
+ //DoMeleeAttackIfReady();
+ }
+};
+
+CreatureAI* GetAI_npc_medivh_bm(Creature *_Creature)
+{
+ return new npc_medivh_bmAI (_Creature);
+}
+
+struct Wave
+{
+ uint32 PortalMob[4]; //spawns for portal waves (in order)
+};
+
+static Wave PortalWaves[]=
+{
+ {C_ASSAS, C_WHELP, C_CHRON, 0},
+ {C_EXECU, C_CHRON, C_WHELP, C_ASSAS},
+ {C_EXECU, C_VANQU, C_CHRON, C_ASSAS}
+};
+
+struct TRINITY_DLL_DECL npc_time_riftAI : public ScriptedAI
+{
+ npc_time_riftAI(Creature *c) : ScriptedAI(c)
+ {
+ pInstance = ((ScriptedInstance*)c->GetInstanceData());
+ Reset();
+ }
+
+ ScriptedInstance *pInstance;
+
+ uint32 TimeRiftWave_Timer;
+ uint8 mRiftWaveCount;
+ uint8 mPortalCount;
+ uint8 mWaveId;
+
+ void Reset()
+ {
+
+ TimeRiftWave_Timer = 15000;
+ mRiftWaveCount = 0;
+
+ if (!pInstance)
+ return;
+
+ mPortalCount = pInstance->GetData(DATA_PORTAL_COUNT);
+
+ if (mPortalCount < 6)
+ mWaveId = 0;
+ else if (mPortalCount > 12)
+ mWaveId = 2;
+ else mWaveId = 1;
+
+ }
+ void Aggro(Unit *who) {}
+
+ void DoSummonAtRift(uint32 creature_entry)
+ {
+ if (!creature_entry)
+ return;
+
+ if (pInstance->GetData(TYPE_MEDIVH) != IN_PROGRESS)
+ {
+ m_creature->InterruptNonMeleeSpells(true);
+ m_creature->RemoveAllAuras();
+ return;
+ }
+
+ float x,y,z;
+ m_creature->GetRandomPoint(m_creature->GetPositionX(),m_creature->GetPositionY(),m_creature->GetPositionZ(),10.0f,x,y,z);
+
+ //normalize Z-level if we can, if rift is not at ground level.
+ z = std::max(m_creature->GetMap()->GetHeight(x, y, MAX_HEIGHT), m_creature->GetMap()->GetWaterLevel(x, y));
+
+ Unit *Summon = m_creature->SummonCreature(creature_entry,x,y,z,m_creature->GetOrientation(),
+ TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,30000);
+
+ if (Summon)
+ {
+ if (Unit *temp = Unit::GetUnit(*m_creature,pInstance->GetData64(DATA_MEDIVH)))
+ Summon->AddThreat(temp,0.0f);
+ }
+ }
+
+ void DoSelectSummon()
+ {
+ uint32 entry = 0;
+
+ if ((mRiftWaveCount > 2 && mWaveId < 1) || mRiftWaveCount > 3)
+ mRiftWaveCount = 0;
+
+ entry = PortalWaves[mWaveId].PortalMob[mRiftWaveCount];
+ debug_log("SD2: npc_time_rift: summoning wave creature (Wave %u, Entry %u).",mRiftWaveCount,entry);
+
+ ++mRiftWaveCount;
+
+ if (entry == C_WHELP)
+ {
+ for(uint8 i = 0; i < 3; i++)
+ DoSummonAtRift(entry);
+ }else DoSummonAtRift(entry);
+ }
+
+ void UpdateAI(const uint32 diff)
+ {
+ if (!pInstance)
+ return;
+
+ if (TimeRiftWave_Timer < diff)
+ {
+ DoSelectSummon();
+ TimeRiftWave_Timer = 15000;
+ }else TimeRiftWave_Timer -= diff;
+
+ if (m_creature->IsNonMeleeSpellCasted(false))
+ return;
+
+ debug_log("SD2: npc_time_rift: not casting anylonger, i need to die.");
+ m_creature->setDeathState(JUST_DIED);
+
+ pInstance->SetData(TYPE_RIFT,SPECIAL);
+ }
+};
+
+CreatureAI* GetAI_npc_time_rift(Creature *_Creature)
+{
+ return new npc_time_riftAI (_Creature);
+}
+
+#define SAY_SAAT_WELCOME -1269019
+
+#define GOSSIP_ITEM_OBTAIN "[PH] Obtain Chrono-Beacon"
+#define SPELL_CHRONO_BEACON 34975
+#define ITEM_CHRONO_BEACON 24289
+
+bool GossipHello_npc_saat(Player *player, Creature *_Creature)
+{
+ if (_Creature->isQuestGiver())
+ player->PrepareQuestMenu(_Creature->GetGUID());
+
+ if (player->GetQuestStatus(QUEST_OPENING_PORTAL) == QUEST_STATUS_INCOMPLETE && !player->HasItemCount(ITEM_CHRONO_BEACON,1))
+ {
+ player->ADD_GOSSIP_ITEM(0,GOSSIP_ITEM_OBTAIN,GOSSIP_SENDER_MAIN,GOSSIP_ACTION_INFO_DEF+1);
+ player->SEND_GOSSIP_MENU(10000,_Creature->GetGUID());
+ return true;
+ }
+ else if (player->GetQuestRewardStatus(QUEST_OPENING_PORTAL) && !player->HasItemCount(ITEM_CHRONO_BEACON,1))
+ {
+ player->ADD_GOSSIP_ITEM(0,GOSSIP_ITEM_OBTAIN,GOSSIP_SENDER_MAIN,GOSSIP_ACTION_INFO_DEF+1);
+ player->SEND_GOSSIP_MENU(10001,_Creature->GetGUID());
+ return true;
+ }
+
+ player->SEND_GOSSIP_MENU(10002,_Creature->GetGUID());
+ return true;
+}
+
+bool GossipSelect_npc_saat(Player *player, Creature *_Creature, uint32 sender, uint32 action)
+{
+ if (action == GOSSIP_ACTION_INFO_DEF+1)
+ {
+ player->CLOSE_GOSSIP_MENU();
+ _Creature->CastSpell(player,SPELL_CHRONO_BEACON,false);
+ }
+ return true;
+}
+
+void AddSC_dark_portal()
+{
+ Script *newscript;
+
+ newscript = new Script;
+ newscript->Name = "npc_medivh_bm";
+ newscript->GetAI = &GetAI_npc_medivh_bm;
+ newscript->RegisterSelf();
+
+ newscript = new Script;
+ newscript->Name = "npc_time_rift";
+ newscript->GetAI = &GetAI_npc_time_rift;
+ newscript->RegisterSelf();
+
+ newscript = new Script;
+ newscript->Name = "npc_saat";
+ newscript->pGossipHello = &GossipHello_npc_saat;
+ newscript->pGossipSelect = &GossipSelect_npc_saat;
+ newscript->RegisterSelf();
+} \ No newline at end of file
diff --git a/src/bindings/scripts/scripts/zone/caverns_of_time/dark_portal/def_dark_portal.h b/src/bindings/scripts/scripts/zone/caverns_of_time/dark_portal/def_dark_portal.h
new file mode 100644
index 00000000000..efe8ec194c5
--- /dev/null
+++ b/src/bindings/scripts/scripts/zone/caverns_of_time/dark_portal/def_dark_portal.h
@@ -0,0 +1,35 @@
+/* Copyright (C) 2006 - 2008 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
+* This program is free software licensed under GPL version 2
+* Please see the included DOCS/LICENSE.TXT for more information */
+
+#ifndef DEF_DARKPORTAL_H
+#define DEF_DARKPORTAL_H
+
+#define TYPE_MEDIVH 1
+#define TYPE_RIFT 2
+
+#define DATA_MEDIVH 10
+#define DATA_PORTAL_COUNT 11
+#define DATA_SHIELD 12
+
+#define WORLD_STATE_BM 2541
+#define WORLD_STATE_BM_SHIELD 2540
+#define WORLD_STATE_BM_RIFT 2784
+
+#define QUEST_OPENING_PORTAL 10297
+#define QUEST_MASTER_TOUCH 9836
+
+#define C_TIME_KEEPER 17918
+#define C_RKEEP 21104
+#define C_RLORD 17839
+#define RIFT_BOSS urand(0,1) ? C_RKEEP : C_RLORD
+#define C_DEJA 17879
+#define C_TEMPO 17880
+#define C_AEONUS 17881
+#define C_ASSAS 17835
+#define C_WHELP 21818
+#define C_CHRON 17892
+#define C_EXECU 18994
+#define C_VANQU 18995
+
+#endif \ No newline at end of file
diff --git a/src/bindings/scripts/scripts/zone/caverns_of_time/dark_portal/instance_dark_portal.cpp b/src/bindings/scripts/scripts/zone/caverns_of_time/dark_portal/instance_dark_portal.cpp
new file mode 100644
index 00000000000..6f0d497dd40
--- /dev/null
+++ b/src/bindings/scripts/scripts/zone/caverns_of_time/dark_portal/instance_dark_portal.cpp
@@ -0,0 +1,376 @@
+/* Copyright (C) 2006 - 2008 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
+SDName: Instance_Dark_Portal
+SD%Complete: 50
+SDComment: Quest support: 9836, 10297. Currently in progress.
+SDCategory: Caverns of Time, The Dark Portal
+EndScriptData */
+
+#include "precompiled.h"
+#include "def_dark_portal.h"
+
+#define ENCOUNTERS 2
+
+#define C_MEDIVH 15608
+#define C_TIME_RIFT 17838
+
+#define SPELL_RIFT_CHANNEL 31387
+
+float PortalLocation[4][4]=
+{
+ {-2041.06, 7042.08, 29.99, 1.30},
+ {-1968.18, 7042.11, 21.93, 2.12},
+ {-1885.82, 7107.36, 22.32, 3.07},
+ {-1928.11, 7175.95, 22.11, 3.44}
+};
+
+struct Wave
+{
+ uint32 PortalBoss; //protector of current portal
+ uint32 NextPortalTime; //time to next portal, or 0 if portal boss need to be killed
+};
+
+static Wave RiftWaves[]=
+{
+ {RIFT_BOSS, 0},
+ {C_DEJA, 0},
+ {RIFT_BOSS, 120000},
+ {C_TEMPO, 140000},
+ {RIFT_BOSS, 120000},
+ {C_AEONUS, 0}
+};
+
+struct TRINITY_DLL_DECL instance_dark_portal : public ScriptedInstance
+{
+ instance_dark_portal(Map *map) : ScriptedInstance(map) {Initialize();};
+
+ uint32 Encounter[ENCOUNTERS];
+
+ uint32 mRiftPortalCount;
+ uint32 mShieldPercent;
+ uint8 mRiftWaveCount;
+ uint8 mRiftWaveId;
+
+ uint32 NextPortal_Timer;
+
+ uint64 MedivhGUID;
+ uint8 CurrentRiftId;
+
+ void Initialize()
+ {
+ MedivhGUID = 0;
+ Clear();
+ }
+
+ void Clear()
+ {
+ for(uint8 i = 0; i < ENCOUNTERS; i++)
+ Encounter[i] = NOT_STARTED;
+
+ mRiftPortalCount = 0;
+ mShieldPercent = 100;
+ mRiftWaveCount = 0;
+ mRiftWaveId = 0;
+
+ CurrentRiftId = 0;
+
+ NextPortal_Timer = 0;
+ }
+
+ Player* GetPlayerInMap()
+ {
+ Map::PlayerList const& players = instance->GetPlayers();
+
+ if (!players.isEmpty())
+ {
+ for(Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr)
+ {
+ if (Player* plr = itr->getSource())
+ return plr;
+ }
+ }
+
+ debug_log("SD2: Instance Black Portal: GetPlayerInMap, but PlayerList is empty!");
+ return NULL;
+ }
+
+ void UpdateBMWorldState(uint32 id, uint32 state)
+ {
+ Map::PlayerList const& players = instance->GetPlayers();
+
+ if (!players.isEmpty())
+ {
+ for(Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr)
+ {
+ if (Player* player = itr->getSource())
+ player->SendUpdateWorldState(id,state);
+ }
+ }else debug_log("SD2: Instance Black Portal: UpdateBMWorldState, but PlayerList is empty!");
+ }
+
+ void InitWorldState(bool Enable = true)
+ {
+ UpdateBMWorldState(WORLD_STATE_BM,Enable ? 1 : 0);
+ UpdateBMWorldState(WORLD_STATE_BM_SHIELD,100);
+ UpdateBMWorldState(WORLD_STATE_BM_RIFT,0);
+ }
+
+ bool IsEncounterInProgress()
+ {
+ if (GetData(TYPE_MEDIVH) == IN_PROGRESS)
+ return true;
+
+ return false;
+ }
+
+ void OnPlayerEnter(Player *player)
+ {
+ if (GetData(TYPE_MEDIVH) == IN_PROGRESS)
+ return;
+
+ player->SendUpdateWorldState(WORLD_STATE_BM,0);
+ }
+
+ void OnCreatureCreate(Creature *creature, uint32 creature_entry)
+ {
+ if (creature->GetEntry() == C_MEDIVH)
+ MedivhGUID = creature->GetGUID();
+ }
+
+ //what other conditions to check?
+ bool CanProgressEvent()
+ {
+ if (!GetPlayerInMap())
+ return false;
+
+ return true;
+ }
+
+ uint8 GetRiftWaveId()
+ {
+ switch(mRiftPortalCount)
+ {
+ case 6:
+ mRiftWaveId = 2;
+ return 1;
+ case 12:
+ mRiftWaveId = 4;
+ return 3;
+ case 18:
+ return 5;
+ default:
+ return mRiftWaveId;
+ }
+ }
+
+ void SetData(uint32 type, uint32 data)
+ {
+ Player *player = GetPlayerInMap();
+
+ if (!player)
+ {
+ debug_log("SD2: Instance Black Portal: SetData (Type: %u Data %u) cannot find any player.", type, data);
+ return;
+ }
+
+ switch(type)
+ {
+ case TYPE_MEDIVH:
+ if (data == SPECIAL && Encounter[0] == IN_PROGRESS)
+ {
+ --mShieldPercent;
+ UpdateBMWorldState(WORLD_STATE_BM_SHIELD,mShieldPercent);
+
+ if (!mShieldPercent)
+ {
+ if (Unit *medivh = Unit::GetUnit(*player,MedivhGUID))
+ {
+ if (medivh->isAlive())
+ {
+ medivh->DealDamage(medivh, medivh->GetHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false);
+ Encounter[0] = FAIL;
+ Encounter[1] = NOT_STARTED;
+ }
+ }
+ }
+ }
+ else
+ {
+ if (data == IN_PROGRESS)
+ {
+ debug_log("SD2: Instance Dark Portal: Starting event.");
+ InitWorldState();
+ Encounter[1] = IN_PROGRESS;
+ NextPortal_Timer = 15000;
+ }
+
+ if (data == DONE)
+ {
+ //this may be completed further out in the post-event
+ if (Unit *medivh = Unit::GetUnit(*player,MedivhGUID))
+ {
+ player->GroupEventHappens(QUEST_OPENING_PORTAL,medivh);
+ player->GroupEventHappens(QUEST_MASTER_TOUCH,medivh);
+ }
+ }
+
+ Encounter[0] = data;
+ }
+ break;
+ case TYPE_RIFT:
+ if (data == SPECIAL)
+ {
+ if (mRiftPortalCount < 7)
+ NextPortal_Timer = 5000;
+ }
+ else
+ Encounter[1] = data;
+ break;
+ }
+ }
+
+ uint32 GetData(uint32 type)
+ {
+ switch(type)
+ {
+ case TYPE_MEDIVH:
+ return Encounter[0];
+ case TYPE_RIFT:
+ return Encounter[1];
+ case DATA_PORTAL_COUNT:
+ return mRiftPortalCount;
+ case DATA_SHIELD:
+ return mShieldPercent;
+ }
+ return 0;
+ }
+
+ uint64 GetData64(uint32 data)
+ {
+ if (data == DATA_MEDIVH)
+ return MedivhGUID;
+
+ return 0;
+ }
+
+ Unit* SummonedPortalBoss(Unit* source)
+ {
+ uint32 entry = RiftWaves[GetRiftWaveId()].PortalBoss;
+ float x,y,z;
+ source->GetRandomPoint(source->GetPositionX(),source->GetPositionY(),source->GetPositionZ(),10.0f,x,y,z);
+ //normalize Z-level if we can, if rift is not at ground level.
+ z = std::max(instance->GetHeight(x, y, MAX_HEIGHT), instance->GetWaterLevel(x, y));
+
+ debug_log("SD2: Instance Dark Portal: Summoning rift boss entry %u.",entry);
+
+ Unit *Summon = source->SummonCreature(entry,x,y,z,source->GetOrientation(),
+ TEMPSUMMON_TIMED_OR_DEAD_DESPAWN,600000);
+
+ if (Summon)
+ return Summon;
+
+ debug_log("SD2: Instance Dark Portal: what just happened there? No boss, no loot, no fun...");
+ return NULL;
+ }
+
+ void DoSpawnPortal()
+ {
+ Player *player = GetPlayerInMap();
+ if (!player)
+ return;
+
+ if (Unit *medivh = Unit::GetUnit(*player,MedivhGUID))
+ {
+ for(uint8 i = 0; i < 4; i++)
+ {
+ int tmp = rand()%4;
+ if (tmp != CurrentRiftId)
+ {
+ debug_log("SD2: Instance Dark Portal: Creating Time Rift at locationId %i (old locationId was %u).",tmp,CurrentRiftId);
+
+ CurrentRiftId = tmp;
+
+ Unit *temp = medivh->SummonCreature(C_TIME_RIFT,
+ PortalLocation[tmp][0],PortalLocation[tmp][1],PortalLocation[tmp][2],PortalLocation[tmp][3],
+ TEMPSUMMON_CORPSE_DESPAWN,0);
+ if (temp)
+ {
+
+ temp->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ temp->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+
+
+ if (Unit* boss = SummonedPortalBoss(temp))
+ {
+ if (boss->GetEntry() == C_AEONUS)
+ {
+ boss->AddThreat(medivh,0.0f);
+ }
+ else
+ {
+ boss->AddThreat(temp,0.0f);
+ temp->CastSpell(boss,SPELL_RIFT_CHANNEL,false);
+ }
+ }
+ }
+ break;
+ }
+ }
+ }
+ }
+
+ void Update(uint32 diff)
+ {
+ if (Encounter[1] != IN_PROGRESS)
+ return;
+
+ //add delay timer?
+ if (!CanProgressEvent())
+ {
+ Clear();
+ return;
+ }
+
+ if (NextPortal_Timer)
+ {
+ if (NextPortal_Timer < diff)
+ {
+ ++mRiftPortalCount;
+ UpdateBMWorldState(WORLD_STATE_BM_RIFT,mRiftPortalCount);
+
+ DoSpawnPortal();
+ NextPortal_Timer = RiftWaves[GetRiftWaveId()].NextPortalTime;
+ }else NextPortal_Timer -= diff;
+ }
+ }
+};
+
+InstanceData* GetInstanceData_instance_dark_portal(Map* map)
+{
+ return new instance_dark_portal(map);
+}
+
+void AddSC_instance_dark_portal()
+{
+ Script *newscript;
+
+ newscript = new Script;
+ newscript->Name = "instance_dark_portal";
+ newscript->GetInstanceData = &GetInstanceData_instance_dark_portal;
+ newscript->RegisterSelf();
+} \ No newline at end of file
diff --git a/src/bindings/scripts/scripts/zone/caverns_of_time/hyjal/hyjal.cpp b/src/bindings/scripts/scripts/zone/caverns_of_time/hyjal/hyjal.cpp
index 1b122df21f8..231d66bdede 100644
--- a/src/bindings/scripts/scripts/zone/caverns_of_time/hyjal/hyjal.cpp
+++ b/src/bindings/scripts/scripts/zone/caverns_of_time/hyjal/hyjal.cpp
@@ -77,7 +77,7 @@ bool GossipHello_npc_jaina_proudmoore(Player *player, Creature *_Creature)
else if(RageEncounter == DONE && AnetheronEncounter == NOT_STARTED)
player->ADD_GOSSIP_ITEM( 0, GOSSIP_ITEM_ANETHERON, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2);
else if(RageEncounter == DONE && AnetheronEncounter == DONE)
- player->ADD_GOSSIP_ITEM( 0, GOSSIP_ITEM_RETREAT, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2);
+ player->ADD_GOSSIP_ITEM( 0, GOSSIP_ITEM_RETREAT, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3);
if(player->isGameMaster())
player->ADD_GOSSIP_ITEM(2, "[GM] Toggle Debug Timers", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF);
diff --git a/src/bindings/scripts/scripts/zone/caverns_of_time/old_hillsbrad/instance_old_hillsbrad.cpp b/src/bindings/scripts/scripts/zone/caverns_of_time/old_hillsbrad/instance_old_hillsbrad.cpp
index f4b77074e95..c9ea9972895 100644
--- a/src/bindings/scripts/scripts/zone/caverns_of_time/old_hillsbrad/instance_old_hillsbrad.cpp
+++ b/src/bindings/scripts/scripts/zone/caverns_of_time/old_hillsbrad/instance_old_hillsbrad.cpp
@@ -130,14 +130,14 @@ struct TRINITY_DLL_DECL instance_old_hillsbrad : public ScriptedInstance
debug_log("SD2: Instance Old Hillsbrad: go_barrel_old_hillsbrad count %u",mBarrelCount);
+ Encounter[0] = IN_PROGRESS;
+
if (mBarrelCount == 5)
- SetData(TYPE_BARREL_DIVERSION,DONE);
- }
- if (data == DONE)
- {
+ {
player->SummonCreature(DRAKE_ENTRY,2128.43,71.01,64.42,1.74,TEMPSUMMON_TIMED_OR_DEAD_DESPAWN,1800000);
+ Encounter[0] = DONE;
+ }
}
- Encounter[0] = data;
break;
}
case TYPE_THRALL_EVENT:
diff --git a/src/bindings/scripts/scripts/zone/caverns_of_time/old_hillsbrad/old_hillsbrad.cpp b/src/bindings/scripts/scripts/zone/caverns_of_time/old_hillsbrad/old_hillsbrad.cpp
index 8e48eaa3ca5..ea071123def 100644
--- a/src/bindings/scripts/scripts/zone/caverns_of_time/old_hillsbrad/old_hillsbrad.cpp
+++ b/src/bindings/scripts/scripts/zone/caverns_of_time/old_hillsbrad/old_hillsbrad.cpp
@@ -477,6 +477,9 @@ struct TRINITY_DLL_DECL npc_thrall_old_hillsbradAI : public npc_escortAI
}
void JustDied(Unit *slayer)
{
+ if (pInstance)
+ pInstance->SetData(TYPE_THRALL_EVENT,FAIL);
+
// Don't do a yell if he kills self (if player goes too far or at the end).
if(slayer == m_creature)
return;
@@ -486,9 +489,8 @@ struct TRINITY_DLL_DECL npc_thrall_old_hillsbradAI : public npc_escortAI
case 0: DoScriptText(SAY_TH_RANDOM_DIE1, m_creature); break;
case 1: DoScriptText(SAY_TH_RANDOM_DIE2, m_creature); break;
}
- if( pInstance )
- pInstance->SetData(TYPE_THRALL_EVENT,FAIL);
}
+
void UpdateAI(const uint32 diff)
{
npc_escortAI::UpdateAI(diff);
@@ -668,12 +670,15 @@ CreatureAI* GetAI_npc_thrall_old_hillsbrad(Creature *_Creature)
bool GossipHello_npc_thrall_old_hillsbrad(Player *player, Creature *_Creature)
{
if( _Creature->isQuestGiver() )
- player->PrepareQuestMenu( _Creature->GetGUID() );
+ {
+ player->PrepareQuestMenu( _Creature->GetGUID() );
+ player->SendPreparedQuest(_Creature->GetGUID());
+ }
ScriptedInstance* pInstance = ((ScriptedInstance*)_Creature->GetInstanceData());
if( pInstance )
{
- if( pInstance->GetData(TYPE_BARREL_DIVERSION) == DONE && pInstance->GetData(TYPE_THRALL_EVENT) == NOT_STARTED )
+ if (pInstance->GetData(TYPE_BARREL_DIVERSION) == DONE && !pInstance->GetData(TYPE_THRALL_EVENT))
{
player->ADD_GOSSIP_ITEM( 0, "[PH] Start walking.", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
player->SEND_GOSSIP_MENU(GOSSIP_ID_START, _Creature->GetGUID());
diff --git a/src/bindings/scripts/scripts/zone/coilfang_resevoir/serpent_shrine/boss_lurker_below.cpp b/src/bindings/scripts/scripts/zone/coilfang_resevoir/serpent_shrine/boss_lurker_below.cpp
index a4bd3b99a2a..2db6e09bdda 100644
--- a/src/bindings/scripts/scripts/zone/coilfang_resevoir/serpent_shrine/boss_lurker_below.cpp
+++ b/src/bindings/scripts/scripts/zone/coilfang_resevoir/serpent_shrine/boss_lurker_below.cpp
@@ -16,8 +16,8 @@
/* ScriptData
SDName: boss_the_lurker_below
-SD%Complete: 80
-SDComment: Other things.
+SD%Complete: 75
+SDComment: Pack summoning when it's does when it's appear how check this and check for coilfang frenzy if water is boiling they get deadstate
SDCategory: The Lurker Below
EndScriptData */
@@ -232,12 +232,8 @@ struct TRINITY_DLL_DECL boss_the_lurker_belowAI : public Scripted_NoMovementAI
//DoCast(m_creature,SPELL_SPOUT_BREATH);//take breath anim
}
- void UpdateAI(const uint32 diff)
+ void BoilingWater(bool active)
{
- //Return since we have no target
- if (!m_creature->SelectHostilTarget() /*|| !m_creature->getVictim()*/ )//rotate resets target
- return;
-
//Check if players in water and if in water cast spell
Map *map = m_creature->GetMap();
if (map->IsDungeon() && pInstance->GetData(DATA_THELURKERBELOWEVENT) == IN_PROGRESS)
@@ -255,6 +251,13 @@ struct TRINITY_DLL_DECL boss_the_lurker_belowAI : public Scripted_NoMovementAI
i->getSource()->RemoveAurasDueToSpell(SPELL_SCALDINGWATER);
}
}
+ }
+
+ void UpdateAI(const uint32 diff)
+ {
+ //Return since we have no target
+ if (!m_creature->SelectHostilTarget() /*|| !m_creature->getVictim()*/ )//rotate resets target
+ return;
Rotate(diff);//always check rotate things
if(!Submerged)
diff --git a/src/bindings/scripts/scripts/zone/karazhan/boss_shade_of_aran.cpp b/src/bindings/scripts/scripts/zone/karazhan/boss_shade_of_aran.cpp
index 29a3ffc78ef..aeefc84dbc7 100644
--- a/src/bindings/scripts/scripts/zone/karazhan/boss_shade_of_aran.cpp
+++ b/src/bindings/scripts/scripts/zone/karazhan/boss_shade_of_aran.cpp
@@ -594,9 +594,4 @@ void AddSC_boss_shade_of_aran()
newscript->Name="mob_aran_elemental";
newscript->GetAI = GetAI_water_elemental;
newscript->RegisterSelf();
-
- //newscript = new Script;
- //newscript->Name="mob_aran_blizzard";
- //newscript->GetAI = GetAI_boss_aran;
- //newscript->RegisterSelf();
}
diff --git a/src/bindings/scripts/scripts/zone/karazhan/bosses_opera.cpp b/src/bindings/scripts/scripts/zone/karazhan/bosses_opera.cpp
index a9c559c60f3..7b5f7749999 100644
--- a/src/bindings/scripts/scripts/zone/karazhan/bosses_opera.cpp
+++ b/src/bindings/scripts/scripts/zone/karazhan/bosses_opera.cpp
@@ -827,7 +827,7 @@ struct TRINITY_DLL_DECL boss_bigbadwolfAI : public ScriptedAI
if(FearTimer < diff)
{
DoCast(m_creature->getVictim(), SPELL_TERRIFYING_HOWL);
- FearTimer = 25000 + rand()%35000;
+ FearTimer = 25000 + rand()%10000;
}else FearTimer -= diff;
if(SwipeTimer < diff)
diff --git a/src/bindings/scripts/scripts/zone/tempest_keep/the_eye/boss_astromancer.cpp b/src/bindings/scripts/scripts/zone/tempest_keep/the_eye/boss_astromancer.cpp
index 94b8651d897..7390b4de96b 100644
--- a/src/bindings/scripts/scripts/zone/tempest_keep/the_eye/boss_astromancer.cpp
+++ b/src/bindings/scripts/scripts/zone/tempest_keep/the_eye/boss_astromancer.cpp
@@ -16,7 +16,7 @@
/* ScriptData
SDName: Boss_Astromancer
-SD%Complete: 75
+SD%Complete: 80
SDComment:
SDCategory: Tempest Keep, The Eye
EndScriptData */
@@ -171,7 +171,9 @@ struct TRINITY_DLL_DECL boss_high_astromancer_solarianAI : public ScriptedAI
float Portal_X(float radius)
{
- if ((rand()%2)==1) radius = -radius;
+ if ((rand()%2)==1)
+ radius = -radius;
+
return (radius * (float)(rand()%100)/100.0f + CENTER_X);
}
@@ -204,8 +206,6 @@ struct TRINITY_DLL_DECL boss_high_astromancer_solarianAI : public ScriptedAI
m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
m_creature->SetVisibility(VISIBILITY_OFF);
}
- if (Phase == 3)
- Phase = 1;
AppearDelay_Timer = 2000;
}else AppearDelay_Timer -= diff;
@@ -306,15 +306,15 @@ struct TRINITY_DLL_DECL boss_high_astromancer_solarianAI : public ScriptedAI
Portals[i][0] = Portal_X(SMALL_PORTAL_RADIUS);
Portals[i][1] = Portal_Y(Portals[i][0], SMALL_PORTAL_RADIUS);
Portals[i][2] = CENTER_Z;
- }else
+ }
+ else
{
Portals[i][0] = Portal_X(LARGE_PORTAL_RADIUS);
Portals[i][1] = Portal_Y(Portals[i][0], LARGE_PORTAL_RADIUS);
Portals[i][2] = PORTAL_Z;
}
}
- if((abs(Portals[2][0] - Portals[1][0]) < 7)
- && (abs(Portals[2][1] - Portals[1][1]) < 7))
+ if((abs(Portals[2][0] - Portals[1][0]) < 7) && (abs(Portals[2][1] - Portals[1][1]) < 7))
{
int i=1;
if(abs(CENTER_X + 26.0f - Portals[2][0]) < 7)
@@ -352,12 +352,15 @@ struct TRINITY_DLL_DECL boss_high_astromancer_solarianAI : public ScriptedAI
}
else if(Phase == 3)
{
+ m_creature->AttackStop();
+ m_creature->StopMoving();
+
//Check Phase3_Timer
if(Phase3_Timer < diff)
{
+ Phase = 1;
+
//15 seconds later Solarian reappears out of one of the 3 portals. Simultaneously, 2 healers appear in the two other portals.
- m_creature->AttackStop();
- m_creature->StopMoving();
int i = rand()%3;
m_creature->GetMotionMaster()->Clear();
m_creature->Relocate(Portals[i][0], Portals[i][1], Portals[i][2], CENTER_O);
diff --git a/src/bindings/scripts/scripts/zone/terokkar_forest/terokkar_forest.cpp b/src/bindings/scripts/scripts/zone/terokkar_forest/terokkar_forest.cpp
index d84c3c58133..25b8b93d7e5 100644
--- a/src/bindings/scripts/scripts/zone/terokkar_forest/terokkar_forest.cpp
+++ b/src/bindings/scripts/scripts/zone/terokkar_forest/terokkar_forest.cpp
@@ -36,10 +36,6 @@ EndContentData */
## mob_unkor_the_ruthless
######*/
-/*
-UPDATE `creature_template` SET `ScriptName`='mob_unkor_the_ruthless' WHERE `entry`=18262;
-*/
-
#define SAY_SUBMIT "I give up! Please don't kill me!"
#define FACTION_HOSTILE 45