aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/bindings/scripts/CMakeLists.txt1
-rw-r--r--src/bindings/scripts/ScriptMgr.cpp4
-rw-r--r--src/bindings/scripts/VC80/80ScriptDev2.vcproj4
-rw-r--r--src/bindings/scripts/VC90/90ScriptDev2.vcproj4
-rw-r--r--src/bindings/scripts/scripts/examples/example_creature.cpp238
-rw-r--r--src/bindings/scripts/scripts/examples/example_escort.cpp263
-rw-r--r--src/bindings/scripts/scripts/examples/example_gossip_codebox.cpp33
-rw-r--r--src/bindings/scripts/scripts/examples/example_misc.cpp15
-rw-r--r--src/bindings/scripts/scripts/zone/blackrock_depths/blackrock_depths.cpp47
-rw-r--r--src/bindings/scripts/scripts/zone/blackrock_depths/boss_tomb_of_seven.cpp584
-rw-r--r--src/bindings/scripts/scripts/zone/hinterlands/hinterlands.cpp234
-rw-r--r--src/bindings/scripts/scripts/zone/terokkar_forest/terokkar_forest.cpp4
12 files changed, 588 insertions, 843 deletions
diff --git a/src/bindings/scripts/CMakeLists.txt b/src/bindings/scripts/CMakeLists.txt
index ff2195eb91a..abb674d0650 100644
--- a/src/bindings/scripts/CMakeLists.txt
+++ b/src/bindings/scripts/CMakeLists.txt
@@ -186,6 +186,7 @@ SET(trinityscript_LIB_SRCS
scripts/zone/hellfire_citadel/shattered_halls/boss_warchief_kargath_bladefist.cpp
scripts/zone/hellfire_peninsula/boss_doomlord_kazzak.cpp
scripts/zone/hellfire_peninsula/hellfire_peninsula.cpp
+ scripts/zone/hinterlands/hinterlands.cpp
scripts/zone/ironforge/ironforge.cpp
scripts/zone/isle_of_queldanas/isle_of_queldanas.cpp
scripts/zone/karazhan/boss_curator.cpp
diff --git a/src/bindings/scripts/ScriptMgr.cpp b/src/bindings/scripts/ScriptMgr.cpp
index bff3043ac31..9c6ca874357 100644
--- a/src/bindings/scripts/ScriptMgr.cpp
+++ b/src/bindings/scripts/ScriptMgr.cpp
@@ -326,6 +326,8 @@ extern void AddSC_hellfire_peninsula();
//Hillsbrad Foothills
//Hinterlands
+extern void AddSC_hinterlands();
+
//Ironforge
extern void AddSC_ironforge();
@@ -1252,6 +1254,8 @@ void ScriptsInit(char const* cfg_file = "trinitycore.conf")
//Hillsbrad Foothills
//Hinterlands
+ AddSC_hinterlands();
+
//Ironforge
AddSC_ironforge();
diff --git a/src/bindings/scripts/VC80/80ScriptDev2.vcproj b/src/bindings/scripts/VC80/80ScriptDev2.vcproj
index 9917fb31336..55241f0486d 100644
--- a/src/bindings/scripts/VC80/80ScriptDev2.vcproj
+++ b/src/bindings/scripts/VC80/80ScriptDev2.vcproj
@@ -1191,6 +1191,10 @@
<Filter
Name="Hinterlands"
>
+ <File
+ RelativePath="..\scripts\zone\hinterlands\hinterlands.cpp"
+ >
+ </File>
</Filter>
<Filter
Name="Iron Forge"
diff --git a/src/bindings/scripts/VC90/90ScriptDev2.vcproj b/src/bindings/scripts/VC90/90ScriptDev2.vcproj
index 24af6671570..ba9ec93bb3f 100644
--- a/src/bindings/scripts/VC90/90ScriptDev2.vcproj
+++ b/src/bindings/scripts/VC90/90ScriptDev2.vcproj
@@ -1191,6 +1191,10 @@
<Filter
Name="Hinterlands"
>
+ <File
+ RelativePath="..\scripts\zone\hinterlands\hinterlands.cpp"
+ >
+ </File>
</Filter>
<Filter
Name="Iron Forge"
diff --git a/src/bindings/scripts/scripts/examples/example_creature.cpp b/src/bindings/scripts/scripts/examples/example_creature.cpp
index 724eb3478cc..49a8d6a607c 100644
--- a/src/bindings/scripts/scripts/examples/example_creature.cpp
+++ b/src/bindings/scripts/scripts/examples/example_creature.cpp
@@ -35,32 +35,37 @@ EndScriptData */
// Functions with Handled Function marked above them are functions that are called automatically by the core
// Functions that are marked Custom Function are functions I've created to simplify code
-//List of text id's. The text is stored in database, also in a localized version
-//(if translation not exist for the textId, default english text will be used)
-//Not required to define in this way, but simplify if changes are needed.
-#define SAY_AGGRO -1999900
-#define SAY_RANDOM_0 -1999901
-#define SAY_RANDOM_1 -1999902
-#define SAY_RANDOM_2 -1999903
-#define SAY_RANDOM_3 -1999904
-#define SAY_RANDOM_4 -1999905
-#define SAY_BESERK -1999906
-#define SAY_PHASE -1999907
-#define SAY_DANCE -1999908
-#define SAY_SALUTE -1999909
+enum
+{
+ //List of text id's. The text is stored in database, also in a localized version
+ //(if translation not exist for the textId, default english text will be used)
+ //Not required to define in this way, but simplify if changes are needed.
+ SAY_AGGRO = -1999900,
+ SAY_RANDOM_0 = -1999901,
+ SAY_RANDOM_1 = -1999902,
+ SAY_RANDOM_2 = -1999903,
+ SAY_RANDOM_3 = -1999904,
+ SAY_RANDOM_4 = -1999905,
+ SAY_BESERK = -1999906,
+ SAY_PHASE = -1999907,
+ SAY_DANCE = -1999908,
+ SAY_SALUTE = -1999909,
+
+ //List of spells. Not required to define them in this way, but will make it easier to maintain in case spellId change
+ SPELL_BUFF = 25661,
+ SPELL_ONE = 12555,
+ SPELL_ONE_ALT = 24099,
+ SPELL_TWO = 10017,
+ SPELL_THREE = 26027,
+ SPELL_ENRAGE = 23537,
+ SPELL_BESERK = 32309,
+
+ FACTION_WORGEN = 24
+};
//List of gossip item texts. Items will appear in the gossip window.
#define GOSSIP_ITEM "I'm looking for a fight"
-//List of spells. Not required to define them in this way, but will make it easier to maintain in case spellId change
-#define SPELL_BUFF 25661
-#define SPELL_ONE 12555
-#define SPELL_ONE_ALT 24099
-#define SPELL_TWO 10017
-#define SPELL_THREE 26027
-#define SPELL_ENRAGE 23537
-#define SPELL_BESERK 32309
-
struct TRINITY_DLL_DECL example_creatureAI : public ScriptedAI
{
//*** HANDLED FUNCTION ***
@@ -71,44 +76,60 @@ struct TRINITY_DLL_DECL example_creatureAI : public ScriptedAI
//These variables are for use only by this individual script.
//Nothing else will ever call them but us.
- uint32 Say_Timer; //Timer for random chat
- uint32 Rebuff_Timer; //Timer for rebuffing
- uint32 Spell_1_Timer; //Timer for spell 1 when in combat
- uint32 Spell_2_Timer; //Timer for spell 1 when in combat
- uint32 Spell_3_Timer; //Timer for spell 1 when in combat
- uint32 Beserk_Timer; //Timer until we go into Beserk (enraged) mode
- uint32 Phase; //The current battle phase we are in
- uint32 Phase_Timer; //Timer until phase transition
+ uint32 m_uiSay_Timer; //Timer for random chat
+ uint32 m_uiRebuff_Timer; //Timer for rebuffing
+ uint32 m_uiSpell_1_Timer; //Timer for spell 1 when in combat
+ uint32 m_uiSpell_2_Timer; //Timer for spell 1 when in combat
+ uint32 m_uiSpell_3_Timer; //Timer for spell 1 when in combat
+ uint32 m_uiBeserk_Timer; //Timer until we go into Beserk (enraged) mode
+ uint32 m_uiPhase; //The current battle phase we are in
+ uint32 m_uiPhase_Timer; //Timer until phase transition
//*** HANDLED FUNCTION ***
//This is called whenever the core decides we need to evade
void Reset()
{
- Phase = 1; //Start in phase 1
- Phase_Timer = 60000; //60 seconds
- Spell_1_Timer = 5000; //5 seconds
- Spell_2_Timer = 37000; //37 seconds
- Spell_3_Timer = 19000; //19 seconds
- Beserk_Timer = 120000; //2 minutes
+ m_uiPhase = 1; //Start in phase 1
+ m_uiPhase_Timer = 60000; //60 seconds
+ m_uiSpell_1_Timer = 5000; //5 seconds
+ m_uiSpell_2_Timer = 37000; //37 seconds
+ m_uiSpell_3_Timer = 19000; //19 seconds
+ m_uiBeserk_Timer = 120000; //2 minutes
}
//*** HANDLED FUNCTION ***
//Attack Start is called whenever someone hits us.
- void EnterCombat(Unit *who)
+ void EnterCombat(Unit* pWho)
{
//Say some stuff
- DoScriptText(SAY_AGGRO, m_creature, who);
+ DoScriptText(SAY_AGGRO, m_creature, pWho);
}
+ //Our Recive emote function
+ void ReceiveEmote(Player* pPlayer, uint32 uiTextEmote)
+ {
+ m_creature->HandleEmoteCommand(uiTextEmote);
+
+ switch(uiTextEmote)
+ {
+ case TEXTEMOTE_DANCE:
+ DoScriptText(SAY_DANCE, m_creature);
+ break;
+ case TEXTEMOTE_SALUTE:
+ DoScriptText(SAY_SALUTE, m_creature);
+ break;
+ }
+ }
+
//*** HANDLED FUNCTION ***
//Update AI is called Every single map update (roughly once every 100ms if a player is within the grid)
- void UpdateAI(const uint32 diff)
+ void UpdateAI(const uint32 uiDiff)
{
//Out of combat timers
if (!m_creature->getVictim())
{
//Random Say timer
- if (Say_Timer < diff)
+ if (m_uiSay_Timer < uiDiff)
{
//Random switch between 5 outcomes
switch (rand()%5)
@@ -120,15 +141,19 @@ struct TRINITY_DLL_DECL example_creatureAI : public ScriptedAI
case 4: DoScriptText(SAY_RANDOM_4, m_creature); break;
}
- Say_Timer = 45000; //Say something agian in 45 seconds
- }else Say_Timer -= diff;
+ m_uiSay_Timer = 45000; //Say something agian in 45 seconds
+ }
+ else
+ m_uiSay_Timer -= uiDiff;
//Rebuff timer
- if (Rebuff_Timer < diff)
+ if (m_uiRebuff_Timer < uiDiff)
{
- DoCast(m_creature,SPELL_BUFF);
- Rebuff_Timer = 900000; //Rebuff agian in 15 minutes
- }else Rebuff_Timer -= diff;
+ DoCast(m_creature, SPELL_BUFF);
+ m_uiRebuff_Timer = 900000; //Rebuff agian in 15 minutes
+ }
+ else
+ m_uiRebuff_Timer -= uiDiff;
}
//Return since we have no target
@@ -136,72 +161,70 @@ struct TRINITY_DLL_DECL example_creatureAI : public ScriptedAI
return;
//Spell 1 timer
- if (Spell_1_Timer < diff)
+ if (m_uiSpell_1_Timer < uiDiff)
{
//Cast spell one on our current target.
if (rand()%50 > 10)
- DoCast(m_creature->getVictim(),SPELL_ONE_ALT);
- else if (m_creature->IsWithinDist(m_creature->getVictim(), 25))
- DoCast(m_creature->getVictim(),SPELL_ONE);
+ DoCast(m_creature->getVictim(), SPELL_ONE_ALT);
+ else if (m_creature->IsWithinDist(m_creature->getVictim(), 25.0f))
+ DoCast(m_creature->getVictim(), SPELL_ONE);
- Spell_1_Timer = 5000;
- }else Spell_1_Timer -= diff;
+ m_uiSpell_1_Timer = 5000;
+ }
+ else
+ m_uiSpell_1_Timer -= uiDiff;
//Spell 2 timer
- if (Spell_2_Timer < diff)
- {
- //Cast spell one on our current target.
- DoCast(m_creature->getVictim(),SPELL_TWO);
-
- Spell_2_Timer = 37000;
- }else Spell_2_Timer -= diff;
-
- //Spell 3 timer
- if (Phase > 1)
- if (Spell_3_Timer < diff)
+ if (m_uiSpell_2_Timer < uiDiff)
{
//Cast spell one on our current target.
- DoCast(m_creature->getVictim(),SPELL_THREE);
-
- Spell_3_Timer = 19000;
- }else Spell_3_Timer -= diff;
+ DoCast(m_creature->getVictim(), SPELL_TWO);
+ m_uiSpell_2_Timer = 37000;
+ }
+ else
+ m_uiSpell_2_Timer -= uiDiff;
//Beserk timer
- if (Phase > 1)
- if (Beserk_Timer < diff)
+ if (m_uiPhase > 1)
{
- //Say our line then cast uber death spell
- DoScriptText(SAY_BESERK, m_creature, m_creature->getVictim());
- DoCast(m_creature->getVictim(),SPELL_BESERK);
+ //Spell 3 timer
+ if (m_uiSpell_3_Timer < uiDiff)
+ {
+ //Cast spell one on our current target.
+ DoCast(m_creature->getVictim(), SPELL_THREE);
- //Cast our beserk spell agian in 12 seconds if we didn't kill everyone
- Beserk_Timer = 12000;
- }else Beserk_Timer -= diff;
+ m_uiSpell_3_Timer = 19000;
+ }
+ else
+ m_uiSpell_3_Timer -= uiDiff;
- //Phase timer
- if (Phase == 1)
- if (Phase_Timer < diff)
+ if (m_uiBeserk_Timer < uiDiff)
+ {
+ //Say our line then cast uber death spell
+ DoScriptText(SAY_BESERK, m_creature, m_creature->getVictim());
+ DoCast(m_creature->getVictim(), SPELL_BESERK);
+
+ //Cast our beserk spell agian in 12 seconds if we didn't kill everyone
+ m_uiBeserk_Timer = 12000;
+ }
+ else
+ m_uiBeserk_Timer -= uiDiff;
+ }
+ else if (m_uiPhase == 1) //Phase timer
{
- //Go to next phase
- Phase++;
- DoScriptText(SAY_PHASE, m_creature);
- DoCast(m_creature,SPELL_ENRAGE);
- }else Phase_Timer -= diff;
+ if (m_uiPhase_Timer < uiDiff)
+ {
+ //Go to next phase
+ ++m_uiPhase;
+ DoScriptText(SAY_PHASE, m_creature);
+ DoCast(m_creature, SPELL_ENRAGE);
+ }
+ else
+ m_uiPhase_Timer -= uiDiff;
+ }
DoMeleeAttackIfReady();
}
-
- //Our Recive emote function
- void ReceiveEmote(Player* pPlayer, uint32 emote)
- {
- m_creature->HandleEmoteCommand(emote);
-
- if (emote == TEXTEMOTE_DANCE)
- DoScriptText(SAY_DANCE, m_creature);
-
- if (emote == TEXTEMOTE_SALUTE)
- DoScriptText(SAY_SALUTE, m_creature);
- }
};
//This is the GetAI method used by all scripts that involve AI
@@ -212,22 +235,15 @@ CreatureAI* GetAI_example_creature(Creature* pCreature)
}
//This function is called when the player clicks an option on the gossip menu
-void SendDefaultMenu_example_creature(Player* pPlayer, Creature* pCreature, uint32 action)
+bool GossipSelect_example_creature(Player* pPlayer, Creature* pCreature, uint32 uiSender, uint32 uiAction)
{
- if (action == GOSSIP_ACTION_INFO_DEF + 1) //Fight time
+ if (uiAction == GOSSIP_ACTION_INFO_DEF+1)
{
+ pPlayer->CLOSE_GOSSIP_MENU();
//Set our faction to hostile twoards all
- pCreature->setFaction(24);
- pCreature->Attack(pPlayer, true);
- pPlayer->PlayerTalkClass->CloseGossip();
+ pCreature->setFaction(FACTION_WORGEN);
+ pCreature->AI()->AttackStart(pPlayer);
}
-}
-
-//This function is called when the player clicks an option on the gossip menu
-bool GossipSelect_example_creature(Player* pPlayer, Creature* pCreature, uint32 sender, uint32 action)
-{
- if (sender == GOSSIP_SENDER_MAIN)
- SendDefaultMenu_example_creature(pPlayer, pCreature, action);
return true;
}
@@ -235,19 +251,17 @@ bool GossipSelect_example_creature(Player* pPlayer, Creature* pCreature, uint32
//This function is called when the player opens the gossip menu
bool GossipHello_example_creature(Player* pPlayer, Creature* pCreature)
{
- pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1);
- pPlayer->PlayerTalkClass->SendGossipMenu(907, pCreature->GetGUID());
+ pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1);
+ pPlayer->SEND_GOSSIP_MENU(907, pCreature->GetGUID());
return true;
}
//This is the actual function called only once durring InitScripts()
//It must define all handled functions that are to be run in this script
-//For example if you want this Script to handle Emotes you must include
-//newscript->ReciveEmote = My_Emote_Function;
void AddSC_example_creature()
{
- Script *newscript;
+ Script* newscript;
newscript = new Script;
newscript->Name = "example_creature";
diff --git a/src/bindings/scripts/scripts/examples/example_escort.cpp b/src/bindings/scripts/scripts/examples/example_escort.cpp
index bef0f7a2781..5d897a8183d 100644
--- a/src/bindings/scripts/scripts/examples/example_escort.cpp
+++ b/src/bindings/scripts/scripts/examples/example_escort.cpp
@@ -24,18 +24,27 @@ EndScriptData */
#include "precompiled.h"
#include "../npc/npc_escortAI.h"
-#define SAY_AGGRO1 -1999910
-#define SAY_AGGRO2 -1999911
-#define SAY_WP_1 -1999912
-#define SAY_WP_2 -1999913
-#define SAY_WP_3 -1999914
-#define SAY_WP_4 -1999915
-#define SAY_DEATH_1 -1999916
-#define SAY_DEATH_2 -1999917
-#define SAY_DEATH_3 -1999918
-#define SAY_SPELL -1999919
-#define SAY_RAND_1 -1999920
-#define SAY_RAND_2 -1999921
+enum
+{
+ NPC_FELBOAR = 21878,
+
+ SPELL_DEATH_COIL = 33130,
+ SPELL_ELIXIR_OF_FORTITUDE = 3593,
+ SPELL_BLUE_FIREWORK = 11540,
+
+ SAY_AGGRO1 = -1999910,
+ SAY_AGGRO2 = -1999911,
+ SAY_WP_1 = -1999912,
+ SAY_WP_2 = -1999913,
+ SAY_WP_3 = -1999914,
+ SAY_WP_4 = -1999915,
+ SAY_DEATH_1 = -1999916,
+ SAY_DEATH_2 = -1999917,
+ SAY_DEATH_3 = -1999918,
+ SAY_SPELL = -1999919,
+ SAY_RAND_1 = -1999920,
+ SAY_RAND_2 = -1999921
+};
#define GOSSIP_ITEM_1 "Click to Test Escort(Attack, Run)"
#define GOSSIP_ITEM_2 "Click to Test Escort(NoAttack, Walk)"
@@ -43,178 +52,180 @@ EndScriptData */
struct TRINITY_DLL_DECL example_escortAI : public npc_escortAI
{
- public:
+ // CreatureAI functions
+ example_escortAI(Creature* pCreature) : npc_escortAI(pCreature) { }
- // CreatureAI functions
- example_escortAI(Creature *c) : npc_escortAI(c) {Reset();}
+ uint32 m_uiDeathCoilTimer;
+ uint32 m_uiChatTimer;
- uint32 DeathCoilTimer;
- uint32 ChatTimer;
+ void JustSummoned(Creature* pSummoned)
+ {
+ pSummoned->AI()->AttackStart(m_creature);
+ }
- // Pure Virtual Functions
- void WaypointReached(uint32 i)
+ // Pure Virtual Functions (Have to be implemented)
+ void WaypointReached(uint32 uiWP)
+ {
+ switch (uiWP)
{
- switch (i)
- {
- case 1:
- DoScriptText(SAY_WP_1, m_creature);
- break;
-
- case 3:
- {
- DoScriptText(SAY_WP_2, m_creature);
- Creature* temp = m_creature->SummonCreature(21878, m_creature->GetPositionX()+5, m_creature->GetPositionY()+7, m_creature->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 3000);
- if (temp)
- temp->AI()->AttackStart(m_creature);
- }
+ case 1:
+ DoScriptText(SAY_WP_1, m_creature);
break;
-
- case 4:
+ case 3:
+ DoScriptText(SAY_WP_2, m_creature);
+ m_creature->SummonCreature(NPC_FELBOAR, m_creature->GetPositionX()+5.0f, m_creature->GetPositionY()+7.0f, m_creature->GetPositionZ(), 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 3000);
+ break;
+ case 4:
+ if (Unit* pTmpPlayer = Unit::GetUnit(*m_creature, PlayerGUID))
{
- Unit* temp = Unit::GetUnit(*m_creature, PlayerGUID);
- if (temp)
- {
- //temp is the target of the text
- DoScriptText(SAY_WP_3, m_creature, temp);
- //temp is the source of the text
- DoScriptText(SAY_WP_4, temp);
- }
+ //pTmpPlayer is the target of the text
+ DoScriptText(SAY_WP_3, m_creature, pTmpPlayer);
+ //pTmpPlayer is the source of the text
+ DoScriptText(SAY_WP_4, pTmpPlayer);
}
break;
- }
}
+ }
- void EnterCombat(Unit* who)
+ void EnterCombat(Unit* pWho)
+ {
+ if (IsBeingEscorted)
{
- if (IsBeingEscorted)
- {
- if (Unit* temp = Unit::GetUnit(*m_creature, PlayerGUID))
- DoScriptText(SAY_AGGRO1, m_creature, temp);
- }
- else DoScriptText(SAY_AGGRO2, m_creature);
+ if (Unit* pTemp = Unit::GetUnit(*m_creature, PlayerGUID))
+ DoScriptText(SAY_AGGRO1, m_creature, pTemp);
}
+ else
+ DoScriptText(SAY_AGGRO2, m_creature);
+ }
- void Reset()
- {
- DeathCoilTimer = 4000;
- ChatTimer = 4000;
- }
+ void Reset()
+ {
+ m_uiDeathCoilTimer = 4000;
+ m_uiChatTimer = 4000;
+ }
- void JustDied(Unit* killer)
+ void JustDied(Unit* pKiller)
+ {
+ if (IsBeingEscorted)
{
- if (IsBeingEscorted)
+ if (Unit *pTemp = Unit::GetUnit(*m_creature,PlayerGUID))
{
- Unit *pTemp = Unit::GetUnit(*m_creature,PlayerGUID);
- //killer = m_creature when player got to far from creature
- if (killer == m_creature)
+ // not a likely case, code here for the sake of example
+ if (pKiller == m_creature)
{
- //This is actually a whisper. You control the text type in database
- if (pTemp)
- DoScriptText(SAY_DEATH_1, m_creature, pTemp);
+ DoScriptText(SAY_DEATH_1, m_creature, pTemp);
}
- else if (pTemp) DoScriptText(SAY_DEATH_2, m_creature, pTemp);
+ else
+ DoScriptText(SAY_DEATH_2, m_creature, pTemp);
}
- else DoScriptText(SAY_DEATH_3, m_creature);
}
+ else
+ DoScriptText(SAY_DEATH_3, m_creature);
+ }
- void UpdateAI(const uint32 diff)
- {
- //Must update npc_escortAI
- npc_escortAI::UpdateAI(diff);
+ void UpdateAI(const uint32 uiDiff)
+ {
+ //Must update npc_escortAI
+ npc_escortAI::UpdateAI(uiDiff);
- //Combat check
- if (m_creature->getVictim())
+ //Combat check
+ if (m_creature->getVictim())
+ {
+ if (m_uiDeathCoilTimer < uiDiff)
{
- if (DeathCoilTimer < diff)
- {
- DoScriptText(SAY_SPELL, m_creature);
- m_creature->CastSpell(m_creature->getVictim(), 33130, false);
-
- DeathCoilTimer = 4000;
- }else DeathCoilTimer -= diff;
+ DoScriptText(SAY_SPELL, m_creature);
+ m_creature->CastSpell(m_creature->getVictim(), SPELL_DEATH_COIL, false);
+ m_uiDeathCoilTimer = 4000;
}
- else if (!m_creature->isInCombat())
+ else
+ m_uiDeathCoilTimer -= uiDiff;
+ }
+ else
+ {
+ //Out of combat but being escorted
+ if (IsBeingEscorted)
{
- //Out of combat but being escorted
- if (IsBeingEscorted)
- if (ChatTimer < diff)
+ if (m_uiChatTimer < uiDiff)
{
- if (m_creature->HasAura(3593))
+ if (m_creature->HasAura(SPELL_ELIXIR_OF_FORTITUDE, 0))
{
DoScriptText(SAY_RAND_1, m_creature);
- m_creature->CastSpell(m_creature, 11540, false);
- }else
+ m_creature->CastSpell(m_creature, SPELL_BLUE_FIREWORK, false);
+ }
+ else
{
DoScriptText(SAY_RAND_2, m_creature);
- m_creature->CastSpell(m_creature, 3593, false);
+ m_creature->CastSpell(m_creature, SPELL_ELIXIR_OF_FORTITUDE, false);
}
- ChatTimer = 12000;
- }else ChatTimer -= diff;
+ m_uiChatTimer = 12000;
+ }
+ else
+ m_uiChatTimer -= uiDiff;
}
}
+ }
};
CreatureAI* GetAI_example_escort(Creature* pCreature)
{
- example_escortAI* testAI = new example_escortAI(pCreature);
-
- testAI->AddWaypoint(0, 1231, -4419, 23);
- testAI->AddWaypoint(1, 1198, -4440, 23, 0);
- testAI->AddWaypoint(2, 1208, -4392, 23);
- testAI->AddWaypoint(3, 1231, -4419, 23, 5000);
- testAI->AddWaypoint(4, 1208, -4392, 23, 5000);
-
- return testAI;
+ example_escortAI* pTestAI = new example_escortAI(pCreature);
+
+ // this should be done over the db table scriptdev2.script_waypoint
+ // when using the db, you have to call this line instead of the ->AddWaypoint():
+ // pTestAI->FillPointMovementListForCreature();
+ pTestAI->AddWaypoint(0, 1231.0f, -4419.0f, 23.0f);
+ pTestAI->AddWaypoint(1, 1198.0f, -4440.0f, 23.0f);
+ pTestAI->AddWaypoint(2, 1208.0f, -4392.0f, 23.0f);
+ pTestAI->AddWaypoint(3, 1231.0f, -4419.0f, 23.0f, 5000);
+ pTestAI->AddWaypoint(4, 1208.0f, -4392.0f, 23.0f, 5000);
+
+ return pTestAI;
}
bool GossipHello_example_escort(Player* pPlayer, Creature* pCreature)
{
pPlayer->TalkedToCreature(pCreature->GetEntry(), pCreature->GetGUID());
- pCreature->prepareGossipMenu(pPlayer,0);
+ pCreature->prepareGossipMenu(pPlayer, 0);
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM_1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM_2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+2);
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM_3, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+3);
pCreature->sendPreparedGossip(pPlayer);
+
return true;
}
-bool GossipSelect_example_escort(Player* pPlayer, Creature* pCreature, uint32 sender, uint32 action)
+bool GossipSelect_example_escort(Player* pPlayer, Creature* pCreature, uint32 sender, uint32 uiAction)
{
npc_escortAI* pEscortAI = CAST_AI(example_escortAI, pCreature->AI());
- if (action == GOSSIP_ACTION_INFO_DEF+1)
- {
- pPlayer->CLOSE_GOSSIP_MENU();
-
- if (pEscortAI)
- pEscortAI->Start(true, true, pPlayer->GetGUID());
-
- return true; // prevent mangos core handling
- }
-
- if (action == GOSSIP_ACTION_INFO_DEF+2)
+ switch(uiAction)
{
- pPlayer->CLOSE_GOSSIP_MENU();
-
- if (pEscortAI)
- pEscortAI->Start(false, false, pPlayer->GetGUID());
-
- return true; // prevent mangos core handling
+ case GOSSIP_ACTION_INFO_DEF+1:
+ pPlayer->CLOSE_GOSSIP_MENU();
+
+ if (pEscortAI)
+ pEscortAI->Start(true, true, pPlayer->GetGUID());
+ break;
+ case GOSSIP_ACTION_INFO_DEF+2:
+ pPlayer->CLOSE_GOSSIP_MENU();
+
+ if (pEscortAI)
+ pEscortAI->Start(false, false, pPlayer->GetGUID());
+ break;
+ case GOSSIP_ACTION_INFO_DEF+3:
+ pPlayer->CLOSE_GOSSIP_MENU();
+
+ if (pEscortAI)
+ pEscortAI->Start(false, true, pPlayer->GetGUID());
+ break;
+ default:
+ return false; // nothing defined -> trinity core handling
}
- if (action == GOSSIP_ACTION_INFO_DEF+3)
- {
- pPlayer->CLOSE_GOSSIP_MENU();
-
- if (pEscortAI)
- pEscortAI->Start(false, true, pPlayer->GetGUID());
-
- return true; // prevent mangos core handling
- }
- return false;
+ return true; // no default handling -> prevent trinity core handling
}
void AddSC_example_escort()
diff --git a/src/bindings/scripts/scripts/examples/example_gossip_codebox.cpp b/src/bindings/scripts/scripts/examples/example_gossip_codebox.cpp
index 105a3c9527e..50ddf9d3202 100644
--- a/src/bindings/scripts/scripts/examples/example_gossip_codebox.cpp
+++ b/src/bindings/scripts/scripts/examples/example_gossip_codebox.cpp
@@ -24,9 +24,15 @@ EndScriptData */
#include "precompiled.h"
#include <cstring>
-#define SAY_NOT_INTERESTED -1999922
-#define SAY_WRONG -1999923
-#define SAY_CORRECT -1999924
+enum
+{
+ SPELL_POLYMORPH = 12826,
+ SPELL_MARK_OF_THE_WILD = 26990,
+
+ SAY_NOT_INTERESTED = -1999922,
+ SAY_WRONG = -1999923,
+ SAY_CORRECT = -1999924
+};
#define GOSSIP_ITEM_1 "A quiz: what's your name?"
#define GOSSIP_ITEM_2 "I'm not interested"
@@ -38,46 +44,51 @@ bool GossipHello_example_gossip_codebox(Player* pPlayer, Creature* pCreature)
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM_2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+2);
pPlayer->PlayerTalkClass->SendGossipMenu(907, pCreature->GetGUID());
+
return true;
}
//This function is called when the player clicks an option on the gossip menubool
-bool GossipSelect_example_gossip_codebox(Player* pPlayer, Creature* pCreature, uint32 sender, uint32 action)
+bool GossipSelect_example_gossip_codebox(Player* pPlayer, Creature* pCreature, uint32 uiSender, uint32 uiAction)
{
- if (action == GOSSIP_ACTION_INFO_DEF+2)
+ if (uiAction == GOSSIP_ACTION_INFO_DEF+2)
{
DoScriptText(SAY_NOT_INTERESTED, pCreature);
pPlayer->CLOSE_GOSSIP_MENU();
}
+
return true;
}
-bool GossipSelectWithCode_example_gossip_codebox(Player* pPlayer, Creature* pCreature, uint32 sender, uint32 action, const char* sCode)
+bool GossipSelectWithCode_example_gossip_codebox(Player* pPlayer, Creature* pCreature, uint32 uiSender, uint32 uiAction, const char* sCode)
{
- if (sender == GOSSIP_SENDER_MAIN)
+ if (uiSender == GOSSIP_SENDER_MAIN)
{
- if (action == GOSSIP_ACTION_INFO_DEF+1)
+ switch (uiAction)
{
+ case GOSSIP_ACTION_INFO_DEF+1:
if (std::strcmp(sCode, pPlayer->GetName())!=0)
{
DoScriptText(SAY_WRONG, pCreature);
- pCreature->CastSpell(pPlayer, 12826, true);
+ pCreature->CastSpell(pPlayer, SPELL_POLYMORPH, true);
}
else
{
DoScriptText(SAY_CORRECT, pCreature);
- pCreature->CastSpell(pPlayer, 26990, true);
+ pCreature->CastSpell(pPlayer, SPELL_MARK_OF_THE_WILD, true);
}
pPlayer->CLOSE_GOSSIP_MENU();
+
return true;
}
}
+
return false;
}
void AddSC_example_gossip_codebox()
{
- Script *newscript;
+ Script* newscript;
newscript = new Script;
newscript->Name = "example_gossip_codebox";
diff --git a/src/bindings/scripts/scripts/examples/example_misc.cpp b/src/bindings/scripts/scripts/examples/example_misc.cpp
index da2933a133c..1bb1a7a0b9a 100644
--- a/src/bindings/scripts/scripts/examples/example_misc.cpp
+++ b/src/bindings/scripts/scripts/examples/example_misc.cpp
@@ -23,30 +23,33 @@ EndScriptData */
#include "precompiled.h"
-#define SAY_HI -1999925
+enum
+{
+ SAY_HI = -1999925
+};
-bool AT_example_areatrigger(Player* pPlayer, AreaTriggerEntry *at)
+bool AT_example_areatrigger(Player* pPlayer, AreaTriggerEntry *pAt)
{
DoScriptText(SAY_HI, pPlayer);
return true;
}
extern void LoadDatabase();
-bool ItemUse_example_item(Player* pPlayer, Item* _Item, SpellCastTargets const& targets)
+bool ItemUse_example_item(Player* pPlayer, Item* pItem, SpellCastTargets const& scTargets)
{
LoadDatabase();
return true;
}
-bool GOHello_example_go_teleporter(Player* pPlayer, GameObject* _GO)
+bool GOHello_example_go_teleporter(Player* pPlayer, GameObject* pGo)
{
- pPlayer->TeleportTo(0, 1807.07f,336.105f,70.3975f,0.0f);
+ pPlayer->TeleportTo(0, 1807.07f, 336.105f, 70.3975f, 0.0f);
return false;
}
void AddSC_example_misc()
{
- Script *newscript;
+ Script* newscript;
newscript = new Script;
newscript->Name = "example_areatrigger";
diff --git a/src/bindings/scripts/scripts/zone/blackrock_depths/blackrock_depths.cpp b/src/bindings/scripts/scripts/zone/blackrock_depths/blackrock_depths.cpp
index d4acbcccbc6..1825c8825b8 100644
--- a/src/bindings/scripts/scripts/zone/blackrock_depths/blackrock_depths.cpp
+++ b/src/bindings/scripts/scripts/zone/blackrock_depths/blackrock_depths.cpp
@@ -23,6 +23,7 @@ SDCategory: Blackrock Depths
EndScriptData */
/* ContentData
+go_shadowforge_brazier
at_ring_of_law
npc_grimstone
mob_phalanx
@@ -39,11 +40,34 @@ EndContentData */
#include "../../npc/npc_escortAI.h"
#include "def_blackrock_depths.h"
-#define C_GRIMSTONE 10096
-#define C_THELDREN 16059
+/*######
++## go_shadowforge_brazier
++######*/
+
+bool GOHello_go_shadowforge_brazier(Player* pPlayer, GameObject* pGo)
+{
+ if (ScriptedInstance* pInstance = (ScriptedInstance*)pGo->GetInstanceData())
+ {
+ if (pInstance->GetData(TYPE_LYCEUM) == IN_PROGRESS)
+ pInstance->SetData(TYPE_LYCEUM, DONE);
+ else
+ pInstance->SetData(TYPE_LYCEUM, IN_PROGRESS);
+ }
+ return false;
+}
+
+/*######
+## npc_grimstone
+######*/
-//4 or 6 in total? 1+2+1 / 2+2+2 / 3+3. Depending on this, code should be changed.
-#define MOB_AMOUNT 4
+enum
+{
+ NPC_GRIMSTONE = 10096,
+ NPC_THELDREN = 16059,
+
+ //4 or 6 in total? 1+2+1 / 2+2+2 / 3+3. Depending on this, code should be changed.
+ MAX_MOB_AMOUNT = 4
+};
uint32 RingMob[]=
{
@@ -69,13 +93,13 @@ bool AreaTrigger_at_ring_of_law(Player* pPlayer, AreaTriggerEntry *at)
{
ScriptedInstance* pInstance = (pPlayer->GetInstanceData());
- if (pInstance)
+ if (ScriptedInstance* pInstance = pPlayer->GetInstanceData())
{
if (pInstance->GetData(TYPE_RING_OF_LAW) == IN_PROGRESS || pInstance->GetData(TYPE_RING_OF_LAW) == DONE)
return false;
pInstance->SetData(TYPE_RING_OF_LAW,IN_PROGRESS);
- pPlayer->SummonCreature(C_GRIMSTONE,625.559,-205.618,-52.735,2.609,TEMPSUMMON_DEAD_DESPAWN,0);
+ pPlayer->SummonCreature(NPC_GRIMSTONE,625.559,-205.618,-52.735,2.609,TEMPSUMMON_DEAD_DESPAWN,0);
return false;
}
@@ -119,7 +143,7 @@ struct TRINITY_DLL_DECL npc_grimstoneAI : public npc_escortAI
MobCount = 0;
MobDeath_Timer = 0;
- for(uint8 i = 0; i < MOB_AMOUNT; ++i)
+ for(uint8 i = 0; i < MAX_MOB_AMOUNT; ++i)
RingMobGUID[i] = 0;
RingBossGUID = 0;
@@ -135,7 +159,7 @@ struct TRINITY_DLL_DECL npc_grimstoneAI : public npc_escortAI
++MobCount;
- if (MobCount == MOB_AMOUNT)
+ if (MobCount == MAX_MOB_AMOUNT)
MobDeath_Timer = 2500;
}
@@ -212,7 +236,7 @@ struct TRINITY_DLL_DECL npc_grimstoneAI : public npc_escortAI
return;
}
- for(uint8 i = 0; i < MOB_AMOUNT; ++i)
+ for(uint8 i = 0; i < MAX_MOB_AMOUNT; ++i)
{
Creature *mob = Unit::GetCreature(*m_creature,RingMobGUID[i]);
if (mob && !mob->isAlive() && mob->isDead())
@@ -1213,6 +1237,11 @@ void AddSC_blackrock_depths()
Script *newscript;
newscript = new Script;
+ newscript->Name = "go_shadowforge_brazier";
+ newscript->pGOHello = &GOHello_go_shadowforge_brazier;
+ newscript->RegisterSelf();
+
+ newscript = new Script;
newscript->Name = "at_ring_of_law";
newscript->pAreaTrigger = &AreaTrigger_at_ring_of_law;
newscript->RegisterSelf();
diff --git a/src/bindings/scripts/scripts/zone/blackrock_depths/boss_tomb_of_seven.cpp b/src/bindings/scripts/scripts/zone/blackrock_depths/boss_tomb_of_seven.cpp
index a9c3d1d9ebd..bec4e4a3ec7 100644
--- a/src/bindings/scripts/scripts/zone/blackrock_depths/boss_tomb_of_seven.cpp
+++ b/src/bindings/scripts/scripts/zone/blackrock_depths/boss_tomb_of_seven.cpp
@@ -26,566 +26,22 @@ EndScriptData */
enum
{
- SPELL_SUNDERARMOR = 11971,
- SPELL_SHIELDBLOCK = 12169,
- SPELL_STRIKE = 15580
+ SPELL_SMELT_DARK_IRON = 14891,
+ SPELL_LEARN_SMELT = 14894,
+ QUEST_SPECTRAL_CHALICE = 4083,
+ SKILLPOINT_MIN = 230
};
-struct TRINITY_DLL_DECL boss_angerrelAI : public ScriptedAI
-{
- boss_angerrelAI(Creature *c) : ScriptedAI(c)
- {
- pInstance = c->GetInstanceData();
- }
-
- ScriptedInstance* pInstance;
- uint32 SunderArmor_Timer;
- uint32 ShieldBlock_Timer;
- uint32 Strike_Timer;
-
- void Reset()
- {
- SunderArmor_Timer = 8000;
- ShieldBlock_Timer = 15000;
- Strike_Timer = 12000;
- }
-
- void EnterCombat(Unit *who)
- {
- }
-
- void EnterEvadeMode()
- {
- m_creature->RemoveAllAuras();
- m_creature->DeleteThreatList();
- m_creature->CombatStop(true);
- m_creature->LoadCreaturesAddon();
- if (m_creature->isAlive())
- m_creature->GetMotionMaster()->MoveTargetedHome();
- m_creature->SetLootRecipient(NULL);
- if (pInstance)
- pInstance->SetData64(DATA_EVENSTARTER, 0);
- }
-
- void JustDied(Unit *who)
- {
- if (pInstance)
- pInstance->SetData(DATA_GHOSTKILL, 1);
- }
-
- void UpdateAI(const uint32 diff)
- {
- if (!UpdateVictim())
- return;
-
- //SunderArmor_Timer
- if (SunderArmor_Timer < diff)
- {
- DoCast(m_creature->getVictim(),SPELL_SUNDERARMOR);
- SunderArmor_Timer = 28000;
- }else SunderArmor_Timer -= diff;
-
- //ShieldBlock_Timer
- if (ShieldBlock_Timer < diff)
- {
- DoCast(m_creature,SPELL_SHIELDBLOCK);
- ShieldBlock_Timer = 25000;
- }else ShieldBlock_Timer -= diff;
-
- //Strike_Timer
- if (Strike_Timer < diff)
- {
- DoCast(m_creature->getVictim(),SPELL_STRIKE);
- Strike_Timer = 10000;
- }else Strike_Timer -= diff;
-
- DoMeleeAttackIfReady();
- }
-};
-
-CreatureAI* GetAI_boss_angerrel(Creature* pCreature)
-{
- return new boss_angerrelAI (pCreature);
-}
-
-enum
-{
- SPELL_SINISTERSTRIKE = 15581,
- SPELL_BACKSTAB = 15582,
- SPELL_GOUGE = 12540
-};
-
-struct TRINITY_DLL_DECL boss_doperelAI : public ScriptedAI
-{
- boss_doperelAI(Creature *c) : ScriptedAI(c)
- {
- pInstance = c->GetInstanceData();
- }
-
- ScriptedInstance* pInstance;
- uint32 SinisterStrike_Timer;
- uint32 BackStab_Timer;
- uint32 Gouge_Timer;
-
- void Reset()
- {
- SinisterStrike_Timer = 8000;
- BackStab_Timer = 12000;
- Gouge_Timer = 6000;
- }
-
- void EnterCombat(Unit *who)
- {
- }
-
- void EnterEvadeMode()
- {
- m_creature->RemoveAllAuras();
- m_creature->DeleteThreatList();
- m_creature->CombatStop(true);
- m_creature->LoadCreaturesAddon();
- if (m_creature->isAlive())
- m_creature->GetMotionMaster()->MoveTargetedHome();
- m_creature->SetLootRecipient(NULL);
- if (pInstance)
- pInstance->SetData64(DATA_EVENSTARTER, 0);
- }
-
- void JustDied(Unit *who)
- {
- if (pInstance)
- pInstance->SetData(DATA_GHOSTKILL, 1);
- }
-
- void UpdateAI(const uint32 diff)
- {
- if (!UpdateVictim())
- return;
-
- //SinisterStrike_Timer
- if (SinisterStrike_Timer < diff)
- {
- DoCast(m_creature->getVictim(),SPELL_SINISTERSTRIKE);
- SinisterStrike_Timer = 7000;
- }else SinisterStrike_Timer -= diff;
-
- //BackStab_Timer
- if (BackStab_Timer < diff)
- {
- DoCast(m_creature->getVictim(),SPELL_BACKSTAB);
- BackStab_Timer = 6000;
- }else BackStab_Timer -= diff;
-
- //Gouge_Timer
- if (Gouge_Timer < diff)
- {
- DoCast(m_creature->getVictim(),SPELL_GOUGE);
- Gouge_Timer = 8000;
- }else Gouge_Timer -= diff;
-
- DoMeleeAttackIfReady();
- }
-};
-
-CreatureAI* GetAI_boss_doperel(Creature* pCreature)
-{
- return new boss_doperelAI (pCreature);
-}
-
-enum
-{
- SPELL_SHADOWBOLT = 15232,
- SPELL_MANABURN = 14033,
- SPELL_SHADOWSHIELD = 12040
-};
-
-struct TRINITY_DLL_DECL boss_haterelAI : public ScriptedAI
-{
- boss_haterelAI(Creature *c) : ScriptedAI(c)
- {
- pInstance = c->GetInstanceData();
- }
-
- ScriptedInstance* pInstance;
- uint32 ShadowBolt_Timer;
- uint32 ManaBurn_Timer;
- uint32 ShadowShield_Timer;
- uint32 Strike_Timer;
-
- void Reset()
- {
- ShadowBolt_Timer = 15000;
- ManaBurn_Timer = 3000;
- ShadowShield_Timer = 8000;
- Strike_Timer = 12000;
- }
-
- void EnterCombat(Unit *who)
- {
- }
-
- void EnterEvadeMode()
- {
- m_creature->RemoveAllAuras();
- m_creature->DeleteThreatList();
- m_creature->CombatStop(true);
- m_creature->LoadCreaturesAddon();
- if (m_creature->isAlive())
- m_creature->GetMotionMaster()->MoveTargetedHome();
- m_creature->SetLootRecipient(NULL);
- if (pInstance)
- pInstance->SetData64(DATA_EVENSTARTER, 0);
- }
-
- void JustDied(Unit *who)
- {
- if (pInstance)
- pInstance->SetData(DATA_GHOSTKILL, 1);
- }
-
- void UpdateAI(const uint32 diff)
- {
- if (!UpdateVictim())
- return;
-
- //ShadowBolt_Timer
- if (ShadowBolt_Timer < diff)
- {
- if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM,0))
- DoCast(target,SPELL_SHADOWBOLT);
- ShadowBolt_Timer = 7000;
- }else ShadowBolt_Timer -= diff;
-
- //ManaBurn_Timer
- if (ManaBurn_Timer < diff)
- {
- if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM,0))
- DoCast(target,SPELL_MANABURN);
-
- ManaBurn_Timer = 13000;
- }else ManaBurn_Timer -= diff;
-
- //ShadowShield_Timer
- if (ShadowShield_Timer < diff)
- {
- DoCast(m_creature,SPELL_SHADOWSHIELD);
- ShadowShield_Timer = 25000;
- }else ShadowShield_Timer -= diff;
-
- //Strike_Timer
- if (Strike_Timer < diff)
- {
- DoCast(m_creature->getVictim(),SPELL_STRIKE);
- Strike_Timer = 10000;
- }else Strike_Timer -= diff;
-
- DoMeleeAttackIfReady();
- }
-};
-
-CreatureAI* GetAI_boss_haterel(Creature* pCreature)
-{
- return new boss_haterelAI (pCreature);
-}
-
-enum
-{
- SPELL_MINDBLAST = 15587,
- SPELL_HEAL = 15586,
- SPELL_PRAYEROFHEALING = 15585,
- SPELL_SHIELD = 11974
-};
-
-struct TRINITY_DLL_DECL boss_vilerelAI : public ScriptedAI
-{
- boss_vilerelAI(Creature *c) : ScriptedAI(c)
- {
- pInstance = c->GetInstanceData();
- }
-
- ScriptedInstance* pInstance;
- uint32 MindBlast_Timer;
- uint32 Heal_Timer;
- uint32 PrayerOfHealing_Timer;
- uint32 Shield_Timer;
-
- void Reset()
- {
- MindBlast_Timer = 10000;
- Heal_Timer = 35000;
- PrayerOfHealing_Timer = 25000;
- Shield_Timer = 3000;
- }
-
- void EnterCombat(Unit *who)
- {
- }
-
- void EnterEvadeMode()
- {
- m_creature->RemoveAllAuras();
- m_creature->DeleteThreatList();
- m_creature->CombatStop(true);
- m_creature->LoadCreaturesAddon();
- if (m_creature->isAlive())
- m_creature->GetMotionMaster()->MoveTargetedHome();
- m_creature->SetLootRecipient(NULL);
- if (pInstance)
- pInstance->SetData64(DATA_EVENSTARTER, 0);
- }
-
- void JustDied(Unit *who)
- {
- if (pInstance)
- pInstance->SetData(DATA_GHOSTKILL, 1);
- }
-
- void UpdateAI(const uint32 diff)
- {
- if (!UpdateVictim())
- return;
-
- //MindBlast_Timer
- if (MindBlast_Timer < diff)
- {
- DoCast(m_creature->getVictim(),SPELL_MINDBLAST);
- MindBlast_Timer = 7000;
- }else MindBlast_Timer -= diff;
-
- //Heal_Timer
- if (Heal_Timer < diff)
- {
- DoCast(m_creature,SPELL_HEAL);
- Heal_Timer = 20000;
- }else Heal_Timer -= diff;
-
- //PrayerOfHealing_Timer
- if (PrayerOfHealing_Timer < diff)
- {
- DoCast(m_creature,SPELL_PRAYEROFHEALING);
- PrayerOfHealing_Timer = 30000;
- }else PrayerOfHealing_Timer -= diff;
-
- //Shield_Timer
- if (Shield_Timer < diff)
- {
- DoCast(m_creature,SPELL_SHIELD);
- Shield_Timer = 30000;
- }else Shield_Timer -= diff;
-
- DoMeleeAttackIfReady();
- }
-};
-
-CreatureAI* GetAI_boss_vilerel(Creature* pCreature)
-{
- return new boss_vilerelAI (pCreature);
-}
-
-enum
-{
- SPELL_FROSTBOLT = 12675,
- SPELL_FROSTARMOR = 12544, //This is actually a buff he gives himself
- SPELL_CONEOFCOLD = 15244,
- SPELL_FROSTNOVA = 12674,
- SPELL_FROSTWARD = 15044
-};
-
-struct TRINITY_DLL_DECL boss_seethrelAI : public ScriptedAI
-{
- boss_seethrelAI(Creature *c) : ScriptedAI(c)
- {
- pInstance = c->GetInstanceData();
- }
-
- ScriptedInstance* pInstance;
- uint32 FrostArmor_Timer;
- uint32 Frostbolt_Timer;
- uint32 ConeofCold_Timer;
- uint32 FrostNova_Timer;
- uint32 FrostWard_Timer;
-
- void Reset()
- {
- FrostArmor_Timer = 2000;
- Frostbolt_Timer = 6000;
- ConeofCold_Timer = 18000;
- FrostNova_Timer = 12000;
- FrostWard_Timer = 25000;
-
- m_creature->CastSpell(m_creature,SPELL_FROSTARMOR,true);
- }
-
- void EnterCombat(Unit *who)
- {
- }
-
- void EnterEvadeMode()
- {
- m_creature->RemoveAllAuras();
- m_creature->DeleteThreatList();
- m_creature->CombatStop(true);
- m_creature->LoadCreaturesAddon();
- if (m_creature->isAlive())
- m_creature->GetMotionMaster()->MoveTargetedHome();
- m_creature->SetLootRecipient(NULL);
- if (pInstance)
- pInstance->SetData64(DATA_EVENSTARTER, 0);
- }
-
- void JustDied(Unit *who)
- {
- if (pInstance)
- pInstance->SetData(DATA_GHOSTKILL, 1);
- }
-
- void UpdateAI(const uint32 diff)
- {
- if (!UpdateVictim())
- return;
-
- //FrostArmor_Timer
- if (FrostArmor_Timer < diff)
- {
- DoCast(m_creature, SPELL_FROSTARMOR);
- FrostArmor_Timer = 180000;
- }else FrostArmor_Timer -= diff;
-
- //Frostbolt_Timer
- if (Frostbolt_Timer < diff)
- {
- DoCast(m_creature->getVictim(),SPELL_FROSTBOLT);
- Frostbolt_Timer = 15000;
- }else Frostbolt_Timer -= diff;
-
- //ConeofCold_Timer
- if (ConeofCold_Timer < diff)
- {
- if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM,0))
- DoCast(target,SPELL_CONEOFCOLD);
-
- ConeofCold_Timer = 22000;
- }else ConeofCold_Timer -= diff;
-
- //FrostNova_Timer
- if (FrostNova_Timer < diff)
- {
- DoCast(m_creature->getVictim(),SPELL_FROSTNOVA);
- FrostNova_Timer = 14000;
- }else FrostNova_Timer -= diff;
-
- //FrostWard_Timer
- if (FrostWard_Timer < diff)
- {
- DoCast(m_creature,SPELL_FROSTWARD);
- FrostWard_Timer = 68000;
- }else FrostWard_Timer -= diff;
-
- DoMeleeAttackIfReady();
- }
-};
-
-CreatureAI* GetAI_boss_seethrel(Creature* pCreature)
-{
- return new boss_seethrelAI (pCreature);
-}
-
-enum
-{
- SPELL_HAMSTRING = 9080,
- SPELL_CLEAVE = 40504,
- SPELL_MORTALSTRIKE = 13737
-};
-
-struct TRINITY_DLL_DECL boss_gloomrelAI : public ScriptedAI
-{
- boss_gloomrelAI(Creature *c) : ScriptedAI(c)
- {
- pInstance = c->GetInstanceData();
- }
-
- ScriptedInstance* pInstance;
- uint32 Hamstring_Timer;
- uint32 Cleave_Timer;
- uint32 MortalStrike_Timer;
-
- void Reset()
- {
- Hamstring_Timer = 19000;
- Cleave_Timer = 6000;
- MortalStrike_Timer = 10000;
-
- m_creature->setFaction(FACTION_FRIEND);
- }
-
- void EnterCombat(Unit *who)
- {
- }
-
- void EnterEvadeMode()
- {
- m_creature->RemoveAllAuras();
- m_creature->DeleteThreatList();
- m_creature->CombatStop(true);
- m_creature->LoadCreaturesAddon();
- if (m_creature->isAlive())
- m_creature->GetMotionMaster()->MoveTargetedHome();
- m_creature->SetLootRecipient(NULL);
- if (pInstance)
- pInstance->SetData64(DATA_EVENSTARTER, 0);
- }
-
- void JustDied(Unit *who)
- {
- if (pInstance)
- pInstance->SetData(DATA_GHOSTKILL, 1);
- }
-
- void UpdateAI(const uint32 diff)
- {
- if (!UpdateVictim())
- return;
-
- //Hamstring_Timer
- if (Hamstring_Timer < diff)
- {
- DoCast(m_creature->getVictim(),SPELL_HAMSTRING);
- Hamstring_Timer = 14000;
- }else Hamstring_Timer -= diff;
-
- //Cleave_Timer
- if (Cleave_Timer < diff)
- {
- DoCast(m_creature->getVictim(),SPELL_CLEAVE);
- Cleave_Timer = 8000;
- }else Cleave_Timer -= diff;
-
- //MortalStrike_Timer
- if (MortalStrike_Timer < diff)
- {
- DoCast(m_creature->getVictim(),SPELL_MORTALSTRIKE);
- MortalStrike_Timer = 12000;
- }else MortalStrike_Timer -= diff;
-
- DoMeleeAttackIfReady();
- }
-};
-
-CreatureAI* GetAI_boss_gloomrel(Creature* pCreature)
-{
- return new boss_gloomrelAI (pCreature);
-}
-
#define GOSSIP_ITEM_TEACH_1 "Teach me the art of smelting dark iron"
#define GOSSIP_ITEM_TEACH_2 "Continue..."
#define GOSSIP_ITEM_TRIBUTE "I want to pay tribute"
bool GossipHello_boss_gloomrel(Player* pPlayer, Creature* pCreature)
{
- if (pPlayer->GetQuestRewardStatus(4083) == 1 && pPlayer->GetSkillValue(SKILL_MINING) >= 230 && !pPlayer->HasSpell(14891))
+ if (pPlayer->GetQuestRewardStatus(QUEST_SPECTRAL_CHALICE) == 1 && pPlayer->GetSkillValue(SKILL_MINING) >= SKILLPOINT_MIN && !pPlayer->HasSpell(SPELL_SMELT_DARK_IRON))
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM_TEACH_1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1);
- if (pPlayer->GetQuestRewardStatus(4083) == 0 && pPlayer->GetSkillValue(SKILL_MINING) >= 230)
+ if (pPlayer->GetQuestRewardStatus(QUEST_SPECTRAL_CHALICE) == 0 && pPlayer->GetSkillValue(SKILL_MINING) >= SKILLPOINT_MIN)
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM_TRIBUTE, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2);
pPlayer->SEND_GOSSIP_MENU(pCreature->GetNpcTextId(), pCreature->GetGUID());
@@ -602,7 +58,7 @@ bool GossipSelect_boss_gloomrel(Player* pPlayer, Creature* pCreature, uint32 sen
break;
case GOSSIP_ACTION_INFO_DEF+11:
pPlayer->CLOSE_GOSSIP_MENU();
- pCreature->CastSpell(pPlayer, 14894, false);
+ pCreature->CastSpell(pPlayer, SPELL_LEARN_SMELT, false);
break;
case GOSSIP_ACTION_INFO_DEF+2:
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "[PH] Continue...", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 22);
@@ -778,33 +234,7 @@ void AddSC_boss_tomb_of_seven()
Script *newscript;
newscript = new Script;
- newscript->Name = "boss_angerrel";
- newscript->GetAI = &GetAI_boss_angerrel;
- newscript->RegisterSelf();
-
- newscript = new Script;
- newscript->Name = "boss_doperel";
- newscript->GetAI = &GetAI_boss_doperel;
- newscript->RegisterSelf();
-
- newscript = new Script;
- newscript->Name = "boss_haterel";
- newscript->GetAI = &GetAI_boss_haterel;
- newscript->RegisterSelf();
-
- newscript = new Script;
- newscript->Name = "boss_vilerel";
- newscript->GetAI = &GetAI_boss_vilerel;
- newscript->RegisterSelf();
-
- newscript = new Script;
- newscript->Name = "boss_seethrel";
- newscript->GetAI = &GetAI_boss_seethrel;
- newscript->RegisterSelf();
-
- newscript = new Script;
newscript->Name = "boss_gloomrel";
- newscript->GetAI = &GetAI_boss_gloomrel;
newscript->pGossipHello = &GossipHello_boss_gloomrel;
newscript->pGossipSelect = &GossipSelect_boss_gloomrel;
newscript->RegisterSelf();
diff --git a/src/bindings/scripts/scripts/zone/hinterlands/hinterlands.cpp b/src/bindings/scripts/scripts/zone/hinterlands/hinterlands.cpp
new file mode 100644
index 00000000000..f5014844809
--- /dev/null
+++ b/src/bindings/scripts/scripts/zone/hinterlands/hinterlands.cpp
@@ -0,0 +1,234 @@
+/* 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
+SDName: Hinterlands
+SD%Complete: 100
+SDComment: Quest support: 2742
+SDCategory: The Hinterlands
+EndScriptData */
+
+/* ContentData
+npc_rinji
+EndContentData */
+
+#include "precompiled.h"
+#include "../../npc/npc_escortAI.h"
+
+/*######
+## npc_rinji
+######*/
+
+enum
+{
+ SAY_RIN_FREE = -1000403,
+ SAY_RIN_BY_OUTRUNNER = -1000404,
+ SAY_RIN_HELP_1 = -1000405,
+ SAY_RIN_HELP_2 = -1000406,
+ SAY_RIN_COMPLETE = -1000407,
+ SAY_RIN_PROGRESS_1 = -1000408,
+ SAY_RIN_PROGRESS_2 = -1000409,
+
+ QUEST_RINJI_TRAPPED = 2742,
+ NPC_RANGER = 2694,
+ NPC_OUTRUNNER = 2691,
+ GO_RINJI_CAGE = 142036
+};
+
+struct Location
+{
+ float m_fX, m_fY, m_fZ;
+};
+
+Location m_afAmbushSpawn[] =
+{
+ {191.296204, -2839.329346, 107.388},
+ {70.972466, -2848.674805, 109.459}
+};
+
+Location m_afAmbushMoveTo[] =
+{
+ {166.630386, -2824.780273, 108.153},
+ {70.886589, -2874.335449, 116.675}
+};
+
+struct TRINITY_DLL_DECL npc_rinjiAI : public npc_escortAI
+{
+ npc_rinjiAI(Creature* pCreature) : npc_escortAI(pCreature)
+ {
+ m_bIsByOutrunner = false;
+ m_iSpawnId = 0;
+ }
+
+ bool m_bIsByOutrunner;
+ uint32 m_uiPostEventCount;
+ uint32 m_uiPostEventTimer;
+ int m_iSpawnId;
+
+ void Reset()
+ {
+ m_uiPostEventCount = 0;
+ m_uiPostEventTimer = 3000;
+ }
+
+ void JustRespawned()
+ {
+ m_bIsByOutrunner = false;
+ m_iSpawnId = 0;
+
+ npc_escortAI::JustRespawned();
+ }
+
+ void EnterCombat(Unit* pWho)
+ {
+ if (IsBeingEscorted)
+ {
+ if (pWho->GetEntry() == NPC_OUTRUNNER && !m_bIsByOutrunner)
+ {
+ DoScriptText(SAY_RIN_BY_OUTRUNNER, pWho);
+ m_bIsByOutrunner = true;
+ }
+
+ if (rand()%4)
+ return;
+
+ //only if attacked and escorter is not in combat?
+ switch(rand()%2)
+ {
+ case 0: DoScriptText(SAY_RIN_HELP_1, m_creature); break;
+ case 1: DoScriptText(SAY_RIN_HELP_2, m_creature); break;
+ }
+ }
+ }
+
+ void DoSpawnAmbush(bool bFirst)
+ {
+ if (!bFirst)
+ m_iSpawnId = 1;
+
+ m_creature->SummonCreature(NPC_RANGER,
+ m_afAmbushSpawn[m_iSpawnId].m_fX, m_afAmbushSpawn[m_iSpawnId].m_fY, m_afAmbushSpawn[m_iSpawnId].m_fZ, 0.0f,
+ TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 60000);
+
+ for(int i = 0; i < 2; ++i)
+ {
+ m_creature->SummonCreature(NPC_OUTRUNNER,
+ m_afAmbushSpawn[m_iSpawnId].m_fX, m_afAmbushSpawn[m_iSpawnId].m_fY, m_afAmbushSpawn[m_iSpawnId].m_fZ, 0.0f,
+ TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 60000);
+ }
+ }
+
+ void JustSummoned(Creature* pSummoned)
+ {
+ pSummoned->RemoveUnitMovementFlag(MOVEMENTFLAG_WALK_MODE);
+ pSummoned->GetMotionMaster()->MovePoint(0, m_afAmbushMoveTo[m_iSpawnId].m_fX, m_afAmbushMoveTo[m_iSpawnId].m_fY, m_afAmbushMoveTo[m_iSpawnId].m_fZ);
+ }
+
+ void WaypointReached(uint32 uiPointId)
+ {
+ Player* pPlayer = (Player*)Unit::GetUnit(*m_creature, PlayerGUID);
+
+ if (!pPlayer)
+ return;
+
+ switch(uiPointId)
+ {
+ case 1:
+ DoScriptText(SAY_RIN_FREE, m_creature, pPlayer);
+ break;
+ case 7:
+ DoSpawnAmbush(true);
+ break;
+ case 13:
+ DoSpawnAmbush(false);
+ break;
+ case 17:
+ DoScriptText(SAY_RIN_COMPLETE, m_creature, pPlayer);
+ pPlayer->GroupEventHappens(QUEST_RINJI_TRAPPED, m_creature);
+ SetRun();
+ m_uiPostEventCount = 1;
+ break;
+ }
+ }
+
+ void UpdateAI(const uint32 uiDiff)
+ {
+ npc_escortAI::UpdateAI(uiDiff);
+
+ if (IsBeingEscorted && m_uiPostEventCount && !m_creature->getVictim())
+ {
+ if (m_uiPostEventTimer < uiDiff)
+ {
+ m_uiPostEventTimer = 3000;
+
+ if (Unit* pPlayer = Unit::GetUnit(*m_creature, PlayerGUID))
+ {
+ switch(m_uiPostEventCount)
+ {
+ case 1:
+ DoScriptText(SAY_RIN_PROGRESS_1, m_creature, pPlayer);
+ ++m_uiPostEventCount;
+ break;
+ case 2:
+ DoScriptText(SAY_RIN_PROGRESS_2, m_creature, pPlayer);
+ m_uiPostEventCount = 0;
+ break;
+ }
+ }
+ else
+ {
+ m_creature->ForcedDespawn();
+ return;
+ }
+ }
+ else
+ m_uiPostEventTimer -= uiDiff;
+ }
+ }
+};
+
+bool QuestAccept_npc_rinji(Player* pPlayer, Creature* pCreature, const Quest* pQuest)
+{
+ if (pQuest->GetQuestId() == QUEST_RINJI_TRAPPED)
+ {
+ if (GameObject* pGo = pCreature->FindNearestGameObject(GO_RINJI_CAGE, INTERACTION_DISTANCE))
+ pGo->UseDoorOrButton();
+
+ if (npc_rinjiAI* pEscortAI = CAST_AI(npc_rinjiAI, pCreature->AI()))
+ pEscortAI->Start(false, false, pPlayer->GetGUID(), pQuest);
+ }
+ return true;
+}
+
+CreatureAI* GetAI_npc_rinji(Creature* pCreature)
+{
+ npc_rinjiAI* pTempAI = new npc_rinjiAI(pCreature);
+
+ pTempAI->FillPointMovementListForCreature();
+
+ return (CreatureAI*)pTempAI;
+}
+
+void AddSC_hinterlands()
+{
+ Script* newscript;
+
+ newscript = new Script;
+ newscript->Name = "npc_rinji";
+ newscript->GetAI = &GetAI_npc_rinji;
+ newscript->pQuestAccept = &QuestAccept_npc_rinji;
+ newscript->RegisterSelf();
+}
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 38e4f274513..2cf024a66b7 100644
--- a/src/bindings/scripts/scripts/zone/terokkar_forest/terokkar_forest.cpp
+++ b/src/bindings/scripts/scripts/zone/terokkar_forest/terokkar_forest.cpp
@@ -663,12 +663,12 @@ struct TRINITY_DLL_DECL npc_akunoAI : public npc_escortAI
}
};
-bool QuestAccept_npc_akuno(Player* player, Creature* pCreature, Quest const* pQuest)
+bool QuestAccept_npc_akuno(Player* pPlayer, Creature* pCreature, Quest const* pQuest)
{
if(pQuest->GetQuestId() == QUEST_NPC_AKUNO)
{
if (npc_akunoAI* pEscortAI = CAST_AI(npc_akunoAI, pCreature->AI()))
- pEscortAI->Start(false,true,player->GetGUID());
+ pEscortAI->Start(false, true, pPlayer->GetGUID());
}
return true;
}