aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authormegamage <none@none>2009-05-31 16:38:16 -0500
committermegamage <none@none>2009-05-31 16:38:16 -0500
commit1c5d306fbdf362d589c1b74d9a359c491d9c3228 (patch)
tree2b396728c13bf57f1391e7cb28d0d7ead3650bd8 /src
parent0d95e70e7b0e3be037b3faa4fc2e51ee70a455bb (diff)
parentdf4db669d56337eba0e640e13d6cca26cbd4900f (diff)
*Merge.
--HG-- branch : trunk
Diffstat (limited to 'src')
-rw-r--r--src/bindings/scripts/scripts/go/go_scripts.cpp142
-rw-r--r--src/bindings/scripts/scripts/npc/npc_professions.cpp138
-rw-r--r--src/bindings/scripts/scripts/zone/black_temple/boss_warlord_najentus.cpp63
-rw-r--r--src/bindings/scripts/scripts/zone/black_temple/def_black_temple.h56
-rw-r--r--src/bindings/scripts/scripts/zone/black_temple/instance_black_temple.cpp2
-rw-r--r--src/bindings/scripts/scripts/zone/shadowfang_keep/instance_shadowfang_keep.cpp5
6 files changed, 333 insertions, 73 deletions
diff --git a/src/bindings/scripts/scripts/go/go_scripts.cpp b/src/bindings/scripts/scripts/go/go_scripts.cpp
index 4a58a0d4010..bd0e621c3c4 100644
--- a/src/bindings/scripts/scripts/go/go_scripts.cpp
+++ b/src/bindings/scripts/scripts/go/go_scripts.cpp
@@ -17,7 +17,7 @@
/* ScriptData
SDName: GO_Scripts
SD%Complete: 100
-SDComment: Quest support: 4285,4287,4288(crystal pylons), 4296. Field_Repair_Bot->Teaches spell 22704. Barov_journal->Teaches spell 26089
+SDComment: Quest support: 4285,4287,4288(crystal pylons), 4296, 10990, 10991, 10992, Field_Repair_Bot->Teaches spell 22704. Barov_journal->Teaches spell 26089
SDCategory: Game Objects
EndScriptData */
@@ -27,10 +27,16 @@ go_northern_crystal_pylon
go_eastern_crystal_pylon
go_western_crystal_pylon
go_barov_journal
+go_ethereum_prison
+go_ethereum_stasis
+go_sacred_fire_of_life
+go_shrine_of_the_birds
go_field_repair_bot_74A
go_orb_of_command
go_tablet_of_madness
go_tablet_of_the_seven
+go_tele_to_dalaran_crystal
+go_tele_to_violet_stand
EndContentData */
#include "precompiled.h"
@@ -199,24 +205,73 @@ bool GOHello_go_jump_a_tron(Player *player, GameObject* _GO)
## go_ethereum_prison
######*/
-float ethereum_NPC[2][7] =
+enum
+{
+ SPELL_REP_LC = 39456,
+ SPELL_REP_SHAT = 39457,
+ SPELL_REP_CE = 39460,
+ SPELL_REP_CON = 39474,
+ SPELL_REP_KT = 39475,
+ SPELL_REP_SPOR = 39476
+};
+
+const uint32 NpcPrisonEntry[] =
{
- {20785,20790,20789,20784,20786,20783,20788}, // hostile npc
- {22810,22811,22812,22813,22814,22815,0} // fiendly npc (need script in acid ? only to cast spell reputation reward)
+ 22810, 22811, 22812, 22813, 22814, 22815, //good guys
+ 20783, 20784, 20785, 20786, 20788, 20789, 20790 //bad guys
};
-bool GOHello_go_ethereum_prison(Player *player, GameObject* _GO)
+bool GOHello_go_ethereum_prison(Player* pPlayer, GameObject* pGo)
{
- _GO->SetGoState(GO_STATE_ACTIVE);
- switch(rand()%2){
- case 0:
- _GO->SummonCreature(ethereum_NPC[0][rand()%6],_GO->GetPositionX(),_GO->GetPositionY(),_GO->GetPositionZ()+0.3, 0,TEMPSUMMON_CORPSE_TIMED_DESPAWN,10000);
- break;
- case 1:
- _GO->SummonCreature(ethereum_NPC[1][rand()%5],_GO->GetPositionX(),_GO->GetPositionY(),_GO->GetPositionZ()+0.3, 0,TEMPSUMMON_TIMED_DESPAWN,10000);
- break;
+ int Random = rand() % (sizeof(NpcPrisonEntry) / sizeof(uint32));
+
+ if(Creature* pCreature = pPlayer->SummonCreature(NpcPrisonEntry[Random],
+ pGo->GetPositionX(), pGo->GetPositionY(), pGo->GetPositionZ(), pGo->GetAngle(pPlayer),
+ TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000))
+ {
+ if(!pCreature->IsHostileTo(pPlayer))
+ {
+ uint32 Spell = 0;
+ FactionTemplateEntry const* pFaction = pCreature->getFactionTemplateEntry();
+
+ switch(pFaction->faction)
+ {
+ case 1011: Spell = SPELL_REP_LC; break;
+ case 935: Spell = SPELL_REP_SHAT; break;
+ case 942: Spell = SPELL_REP_CE; break;
+ case 933: Spell = SPELL_REP_CON; break;
+ case 989: Spell = SPELL_REP_KT; break;
+ case 970: Spell = SPELL_REP_SPOR; break;
+ }
+
+ if(Spell)
+ pCreature->CastSpell(pPlayer, Spell, false);
+ else
+ error_log("TSCR: go_ethereum_prison summoned creature (entry %u) but faction (%u) are not expected by script.", pCreature->GetEntry(), pCreature->getFaction());
+ }
+ }
+
+ return false;
}
-return true;
+
+/*######
+## go_ethereum_stasis
+######*/
+
+const uint32 NpcStasisEntry[] =
+{
+ 22825, 20888, 22827, 22826, 22828
+};
+
+bool GOHello_go_ethereum_stasis(Player* pPlayer, GameObject* pGo)
+{
+ int Random = rand() % (sizeof(NpcStasisEntry) / sizeof(uint32));
+
+ pPlayer->SummonCreature(NpcStasisEntry[Random],
+ pGo->GetPositionX(), pGo->GetPositionY(), pGo->GetPositionZ(), pGo->GetAngle(pPlayer),
+ TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000);
+
+ return false;
}
/*######
@@ -234,6 +289,46 @@ bool GOHello_go_sacred_fire_of_life(Player* pPlayer, GameObject* pGO)
}
/*######
+## go_shrine_of_the_birds
+######*/
+
+enum
+{
+ NPC_HAWK_GUARD = 22992,
+ NPC_EAGLE_GUARD = 22993,
+ NPC_FALCON_GUARD = 22994,
+ GO_SHRINE_HAWK = 185551,
+ GO_SHRINE_EAGLE = 185547,
+ GO_SHRINE_FALCON = 185553
+};
+
+bool GOHello_go_shrine_of_the_birds(Player* pPlayer, GameObject* pGo)
+{
+ uint32 BirdEntry = 0;
+
+ float fX, fY, fZ;
+ pGo->GetClosePoint(fX, fY, fZ, pGo->GetObjectSize(), INTERACTION_DISTANCE);
+
+ switch(pGo->GetEntry())
+ {
+ case GO_SHRINE_HAWK:
+ BirdEntry = NPC_HAWK_GUARD;
+ break;
+ case GO_SHRINE_EAGLE:
+ BirdEntry = NPC_EAGLE_GUARD;
+ break;
+ case GO_SHRINE_FALCON:
+ BirdEntry = NPC_FALCON_GUARD;
+ break;
+ }
+
+ if(BirdEntry)
+ pPlayer->SummonCreature(BirdEntry, fX, fY, fZ, pGo->GetOrientation(), TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 60000);
+
+ return false;
+}
+
+/*######
## go_tele_to_dalaran_crystal
######*/
@@ -309,6 +404,11 @@ void AddSC_go_scripts()
newscript->RegisterSelf();
newscript = new Script;
+ newscript->Name = "go_shrine_of_the_birds";
+ newscript->pGOHello = &GOHello_go_shrine_of_the_birds;
+ newscript->RegisterSelf();
+
+ newscript = new Script;
newscript->Name="go_tablet_of_madness";
newscript->pGOHello = &GOHello_go_tablet_of_madness;
newscript->RegisterSelf();
@@ -329,9 +429,23 @@ void AddSC_go_scripts()
newscript->RegisterSelf();
newscript = new Script;
+ newscript->Name = "go_ethereum_stasis";
+ newscript->pGOHello = &GOHello_go_ethereum_stasis;
+ newscript->RegisterSelf();
+
+ newscript = new Script;
newscript->Name = "go_sacred_fire_of_life";
newscript->pGOHello = &GOHello_go_sacred_fire_of_life;
newscript->RegisterSelf();
+ newscript = new Script;
+ newscript->Name = "go_tele_to_dalaran_crystal";
+ newscript->pGOHello = &GOHello_go_tele_to_dalaran_crystal;
+ newscript->RegisterSelf();
+
+ newscript = new Script;
+ newscript->Name = "go_tele_to_violet_stand";
+ newscript->pGOHello = &GOHello_go_tele_to_violet_stand;
+ newscript->RegisterSelf();
}
diff --git a/src/bindings/scripts/scripts/npc/npc_professions.cpp b/src/bindings/scripts/scripts/npc/npc_professions.cpp
index b391798eae5..195e6f4b369 100644
--- a/src/bindings/scripts/scripts/npc/npc_professions.cpp
+++ b/src/bindings/scripts/scripts/npc/npc_professions.cpp
@@ -812,6 +812,138 @@ bool GossipSelect_npc_prof_blacksmith(Player *player, Creature *_Creature, uint3
}*/
/*###
+# engineering trinkets
+###*/
+
+enum
+{
+ NPC_ZAP = 14742,
+ NPC_JHORDY = 14743,
+ NPC_KABLAM = 21493,
+ NPC_SMILES = 21494,
+
+ SPELL_LEARN_TO_EVERLOOK = 23490,
+ SPELL_LEARN_TO_GADGET = 23491,
+ SPELL_LEARN_TO_AREA52 = 36956,
+ SPELL_LEARN_TO_TOSHLEY = 36957,
+
+ SPELL_TO_EVERLOOK = 23486,
+ SPELL_TO_GADGET = 23489,
+ SPELL_TO_AREA52 = 36954,
+ SPELL_TO_TOSHLEY = 36955,
+
+ ITEM_GNOMISH_CARD = 10790,
+ ITEM_GOBLIN_CARD = 10791
+};
+
+#define GOSSIP_ITEM_ZAP "[PH] Unknown"
+#define GOSSIP_ITEM_JHORDY "I must build a beacon for this marvelous device!"
+#define GOSSIP_ITEM_KABLAM "[PH] Unknown"
+#define GOSSIP_ITEM_SMILES "[PH] Unknown"
+
+bool GossipHello_npc_engineering_tele_trinket(Player* pPlayer, Creature* pCreature)
+{
+ uint32 NpcTextId = 0;
+ std::string GossipItem;
+ bool CanLearn = false;
+
+ if(pPlayer->HasSkill(SKILL_ENGINERING))
+ {
+ switch(pCreature->GetEntry())
+ {
+ case NPC_ZAP:
+ NpcTextId = 7249;
+ if(pPlayer->GetBaseSkillValue(SKILL_ENGINERING) >= 260 && pPlayer->HasSpell(S_GOBLIN))
+ {
+ if(!pPlayer->HasSpell(SPELL_TO_EVERLOOK))
+ {
+ CanLearn = true;
+ GossipItem = GOSSIP_ITEM_ZAP;
+ }
+ else if(pPlayer->HasSpell(SPELL_TO_EVERLOOK))
+ NpcTextId = 0;
+ }
+ break;
+ case NPC_JHORDY:
+ NpcTextId = 7251;
+ if(pPlayer->GetBaseSkillValue(SKILL_ENGINERING) >= 260 && pPlayer->HasSpell(S_GNOMISH))
+ {
+ if(!pPlayer->HasSpell(SPELL_TO_GADGET))
+ {
+ CanLearn = true;
+ GossipItem = GOSSIP_ITEM_JHORDY;
+ }
+ else if(pPlayer->HasSpell(SPELL_TO_GADGET))
+ NpcTextId = 7252;
+ }
+ break;
+ case NPC_KABLAM:
+ NpcTextId = 10365;
+ if(pPlayer->GetBaseSkillValue(SKILL_ENGINERING) >= 350 && pPlayer->HasSpell(S_GOBLIN))
+ {
+ if(!pPlayer->HasSpell(SPELL_TO_AREA52))
+ {
+ CanLearn = true;
+ GossipItem = GOSSIP_ITEM_KABLAM;
+ }
+ else if(pPlayer->HasSpell(SPELL_TO_AREA52))
+ NpcTextId = 0;
+ }
+ break;
+ case NPC_SMILES:
+ NpcTextId = 10363;
+ if(pPlayer->GetBaseSkillValue(SKILL_ENGINERING) >= 350 && pPlayer->HasSpell(S_GNOMISH))
+ {
+ if(!pPlayer->HasSpell(SPELL_TO_TOSHLEY))
+ {
+ CanLearn = true;
+ GossipItem = GOSSIP_ITEM_SMILES;
+ }
+ else if(pPlayer->HasSpell(SPELL_TO_TOSHLEY))
+ NpcTextId = 0;
+ }
+ break;
+ }
+ }
+
+ if(CanLearn)
+ {
+ if(pPlayer->HasItemCount(ITEM_GOBLIN_CARD,1) || pPlayer->HasItemCount(ITEM_GNOMISH_CARD,1))
+ pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GossipItem, pCreature->GetEntry(), GOSSIP_ACTION_INFO_DEF+1);
+ }
+
+ pPlayer->SEND_GOSSIP_MENU(NpcTextId ? NpcTextId : pCreature->GetNpcTextId(), pCreature->GetGUID());
+ return true;
+}
+
+bool GossipSelect_npc_engineering_tele_trinket(Player* pPlayer, Creature* pCreature, uint32 Sender, uint32 Action)
+{
+ if(Action == GOSSIP_ACTION_INFO_DEF+1)
+ pPlayer->CLOSE_GOSSIP_MENU();
+
+ if(Sender != pCreature->GetEntry())
+ return true;
+
+ switch(Sender)
+ {
+ case NPC_ZAP:
+ pPlayer->CastSpell(pPlayer, SPELL_LEARN_TO_EVERLOOK, false);
+ break;
+ case NPC_JHORDY:
+ pPlayer->CastSpell(pPlayer, SPELL_LEARN_TO_GADGET, false);
+ break;
+ case NPC_KABLAM:
+ pPlayer->CastSpell(pPlayer, SPELL_LEARN_TO_AREA52, false);
+ break;
+ case NPC_SMILES:
+ pPlayer->CastSpell(pPlayer, SPELL_LEARN_TO_TOSHLEY, false);
+ break;
+ }
+
+ return true;
+}
+
+/*###
# start menues leatherworking
###*/
@@ -1184,6 +1316,12 @@ void AddSC_npc_professions()
newscript->RegisterSelf();
newscript = new Script;
+ newscript->Name = "npc_engineering_tele_trinket";
+ newscript->pGossipHello = &GossipHello_npc_engineering_tele_trinket;
+ newscript->pGossipSelect = &GossipSelect_npc_engineering_tele_trinket;
+ newscript->RegisterSelf();
+
+ newscript = new Script;
newscript->Name="npc_prof_leather";
newscript->pGossipHello = &GossipHello_npc_prof_leather;
newscript->pGossipSelect = &GossipSelect_npc_prof_leather;
diff --git a/src/bindings/scripts/scripts/zone/black_temple/boss_warlord_najentus.cpp b/src/bindings/scripts/scripts/zone/black_temple/boss_warlord_najentus.cpp
index 80d9a116712..ee3cc90661a 100644
--- a/src/bindings/scripts/scripts/zone/black_temple/boss_warlord_najentus.cpp
+++ b/src/bindings/scripts/scripts/zone/black_temple/boss_warlord_najentus.cpp
@@ -24,36 +24,39 @@ EndScriptData */
#include "precompiled.h"
#include "def_black_temple.h"
-#define SAY_AGGRO -1564000
-#define SAY_NEEDLE1 -1564001
-#define SAY_NEEDLE2 -1564002
-#define SAY_SLAY1 -1564003
-#define SAY_SLAY2 -1564004
-#define SAY_SPECIAL1 -1564005
-#define SAY_SPECIAL2 -1564006
-#define SAY_ENRAGE1 -1564007 //is this text actually in use?
-#define SAY_ENRAGE2 -1564008
-#define SAY_DEATH -1564009
-
-//Spells
-#define SPELL_NEEDLE_SPINE 39992
-#define SPELL_TIDAL_BURST 39878
-#define SPELL_TIDAL_SHIELD 39872
-#define SPELL_IMPALING_SPINE 39837
-#define SPELL_CREATE_NAJENTUS_SPINE 39956
-#define SPELL_HURL_SPINE 39948
-#define SPELL_BERSERK 45078
-
-#define GOBJECT_SPINE 185584
-
-#define EVENT_BERSERK 1
-#define EVENT_YELL 2
-#define EVENT_NEEDLE 3
-#define EVENT_SPINE 4
-#define EVENT_SHIELD 5
-
-#define GCD_CAST 1
-#define GCD_YELL 2
+enum
+{
+ SAY_AGGRO = -1564000,
+ SAY_NEEDLE1 = -1564001,
+ SAY_NEEDLE2 = -1564002,
+ SAY_SLAY1 = -1564003,
+ SAY_SLAY2 = -1564004,
+ SAY_SPECIAL1 = -1564005,
+ SAY_SPECIAL2 = -1564006,
+ SAY_ENRAGE1 = -1564007, //is this text actually in use?
+ SAY_ENRAGE2 = -1564008,
+ SAY_DEATH = -1564009,
+
+ //Spells
+ SPELL_NEEDLE_SPINE = 39992,
+ SPELL_TIDAL_BURST = 39878,
+ SPELL_TIDAL_SHIELD = 39872,
+ SPELL_IMPALING_SPINE = 39837,
+ SPELL_CREATE_NAJENTUS_SPINE = 39956,
+ SPELL_HURL_SPINE = 39948,
+ SPELL_BERSERK = 45078,
+
+ GOBJECT_SPINE = 185584,
+
+ EVENT_BERSERK = 1,
+ EVENT_YELL = 2,
+ EVENT_NEEDLE = 3,
+ EVENT_SPINE = 4,
+ EVENT_SHIELD = 5,
+
+ GCD_CAST = 1,
+ GCD_YELL = 2
+};
struct TRINITY_DLL_DECL boss_najentusAI : public ScriptedAI
{
diff --git a/src/bindings/scripts/scripts/zone/black_temple/def_black_temple.h b/src/bindings/scripts/scripts/zone/black_temple/def_black_temple.h
index 4779f92fa4d..c98c0b1c363 100644
--- a/src/bindings/scripts/scripts/zone/black_temple/def_black_temple.h
+++ b/src/bindings/scripts/scripts/zone/black_temple/def_black_temple.h
@@ -5,31 +5,35 @@
#ifndef DEF_BLACK_TEMPLE_H
#define DEF_BLACK_TEMPLE_H
-#define DATA_AKAMA 1
-#define DATA_AKAMA_SHADE 2
-#define DATA_GURTOGGBLOODBOILEVENT 3
-#define DATA_HIGHWARLORDNAJENTUS 4
-#define DATA_HIGHWARLORDNAJENTUSEVENT 5
-#define DATA_ILLIDANSTORMRAGE 6
-#define DATA_ILLIDANSTORMRAGEEVENT 7
-#define DATA_ILLIDARICOUNCILEVENT 8
-#define DATA_ILLIDARICOUNCIL 9
-#define DATA_LADYMALANDE 10
-#define DATA_HIGHNETHERMANCERZEREVOR 11
-#define DATA_GATHIOSTHESHATTERER 12
-#define DATA_VERASDARKSHADOW 13
-#define DATA_MOTHERSHAHRAZEVENT 14
-#define DATA_RELIQUARYOFSOULSEVENT 15
-#define DATA_SHADEOFAKAMA 16
-#define DATA_SHADEOFAKAMAEVENT 17
-#define DATA_SUPREMUS 18
-#define DATA_SUPREMUSEVENT 19
-#define DATA_TERONGOREFIENDEVENT 20
-#define DATA_GAMEOBJECT_NAJENTUS_GATE 21
-#define DATA_GAMEOBJECT_ILLIDAN_GATE 22
-#define DATA_GAMEOBJECT_ILLIDAN_DOOR_R 23
-#define DATA_GAMEOBJECT_ILLIDAN_DOOR_L 24
-#define DATA_GAMEOBJECT_SUPREMUS_DOORS 25
-#define DATA_BLOOD_ELF_COUNCIL_VOICE 26
+enum
+{
+ DATA_AKAMA = 1,
+ DATA_AKAMA_SHADE = 2,
+ DATA_GURTOGGBLOODBOILEVENT = 3,
+ DATA_HIGHWARLORDNAJENTUS = 4,
+ DATA_HIGHWARLORDNAJENTUSEVENT = 5,
+ DATA_ILLIDANSTORMRAGE = 6,
+ DATA_ILLIDANSTORMRAGEEVENT = 7,
+ DATA_ILLIDARICOUNCILEVENT = 8,
+ DATA_ILLIDARICOUNCIL = 9,
+ DATA_LADYMALANDE = 10,
+ DATA_HIGHNETHERMANCERZEREVOR = 11,
+ DATA_GATHIOSTHESHATTERER = 12,
+ DATA_VERASDARKSHADOW = 13,
+ DATA_MOTHERSHAHRAZEVENT = 14,
+ DATA_RELIQUARYOFSOULSEVENT = 15,
+ DATA_SHADEOFAKAMA = 16,
+ DATA_SHADEOFAKAMAEVENT = 17,
+ DATA_SUPREMUS = 18,
+ DATA_SUPREMUSEVENT = 19,
+ DATA_TERONGOREFIENDEVENT = 20,
+ DATA_GAMEOBJECT_NAJENTUS_GATE = 21,
+ DATA_GAMEOBJECT_ILLIDAN_GATE = 22,
+ DATA_GAMEOBJECT_ILLIDAN_DOOR_R = 23,
+ DATA_GAMEOBJECT_ILLIDAN_DOOR_L = 24,
+ DATA_GAMEOBJECT_SUPREMUS_DOORS = 25,
+ DATA_BLOOD_ELF_COUNCIL_VOICE = 26
+};
+
#endif
diff --git a/src/bindings/scripts/scripts/zone/black_temple/instance_black_temple.cpp b/src/bindings/scripts/scripts/zone/black_temple/instance_black_temple.cpp
index bf5d62a7b86..3f71e2070ab 100644
--- a/src/bindings/scripts/scripts/zone/black_temple/instance_black_temple.cpp
+++ b/src/bindings/scripts/scripts/zone/black_temple/instance_black_temple.cpp
@@ -24,7 +24,7 @@ EndScriptData */
#include "precompiled.h"
#include "def_black_temple.h"
-#define ENCOUNTERS 9
+#define ENCOUNTERS 9
/* Black Temple encounters:
0 - High Warlord Naj'entus event
diff --git a/src/bindings/scripts/scripts/zone/shadowfang_keep/instance_shadowfang_keep.cpp b/src/bindings/scripts/scripts/zone/shadowfang_keep/instance_shadowfang_keep.cpp
index 30f843badb0..fc8970c6f8a 100644
--- a/src/bindings/scripts/scripts/zone/shadowfang_keep/instance_shadowfang_keep.cpp
+++ b/src/bindings/scripts/scripts/zone/shadowfang_keep/instance_shadowfang_keep.cpp
@@ -16,8 +16,8 @@
/* ScriptData
SDName: Instance_Shadowfang_Keep
-SD%Complete: 75
-SDComment: TODO: check what other parts would require additional code (ex: make sure door are in open state if boss dead)
+SD%Complete: 90
+SDComment:
SDCategory: Shadowfang Keep
EndScriptData */
@@ -38,6 +38,7 @@ enum
GO_SORCERER_DOOR = 18972, //door to open when Fenrus the Devourer
GO_ARUGAL_DOOR = 18971 //door to open when Wolf Master Nandos
};
+
struct TRINITY_DLL_DECL instance_shadowfang_keep : public ScriptedInstance
{
instance_shadowfang_keep(Map *map) : ScriptedInstance(map) {Initialize();};