*Merge SD2.

*r988: Remove obsolete code for first boss in BT. - Just use enums.
*r989: Added summons for misc ethereum gameobjects
*r990: Added gossip options to learn engineering "teleport trinket" schematics (misc npc's)
*r991: Correcting a few waypoints, added more texts and visuals to shadowfang prisoners - Skip: Its already merged.
*r992: Added GO summons related to quest 10990, 10991 and 10992

*Register 2 missing scripts.

--HG--
branch : trunk
This commit is contained in:
Anubisss
2009-05-31 22:49:30 +02:00
parent 9e4c011ae5
commit df4db669d5
8 changed files with 340 additions and 70 deletions

View File

@@ -0,0 +1,6 @@
UPDATE `gameobject_template` SET `ScriptName` = 'go_ethereum_prison' WHERE `entry` BETWEEN 184418 AND 184431;
UPDATE `gameobject_template` SET `ScriptName` = 'go_ethereum_stasis' WHERE `entry` BETWEEN 185465 AND 185467;
UPDATE `gameobject_template` SET `ScriptName` = 'go_ethereum_stasis' WHERE `entry` = 184595;
UPDATE `gameobject_template` SET `ScriptName` = 'go_ethereum_stasis' WHERE `entry` BETWEEN 185461 AND 185464;
UPDATE `creature_template` SET `ScriptName` = 'npc_engineering_tele_trinket' WHERE `entry` IN (14742, 14743, 21493, 21494);

View File

@@ -25,7 +25,10 @@ UPDATE `gameobject_template` SET `ScriptName`='go_mausoleum_door' WHERE `entry`=
UPDATE `gameobject_template` SET `ScriptName`='go_crystal_prison' WHERE `entry`=185126;
UPDATE `gameobject_template` SET `ScriptName`='go_legion_obelisk' WHERE `entry` IN (185193,185195,185196,185197,185198);
UPDATE `gameobject_template` SET `ScriptName`='go_jump_a_tron' WHERE `entry`=183146;
UPDATE `gameobject_template` SET `ScriptName`='go_ethereum_prison' WHERE `entry` IN (184418,184419,184420,184421,184422,184423,184424,184425,184426,184427,184428,184429,184430,184431);
UPDATE `gameobject_template` SET `ScriptName`='go_ethereum_prison' WHERE `entry` BETWEEN 184418 AND 184431;
UPDATE `gameobject_template` SET `ScriptName`='go_ethereum_stasis' WHERE `entry` BETWEEN 185465 AND 185467;
UPDATE `gameobject_template` SET `ScriptName`='go_ethereum_stasis' WHERE `entry` = 184595;
UPDATE `gameobject_template` SET `ScriptName`='go_ethereum_stasis' WHERE `entry` BETWEEN 185461 AND 185464;
UPDATE `gameobject_template` SET `ScriptName`='go_sacred_fire_of_life' WHERE `entry`=175944;
UPDATE `gameobject_template` SET `ScriptName`='go_skull_pile' WHERE `entry`=185913;
UPDATE `gameobject_template` SET `ScriptName`='go_tele_to_dalaran_crystal' WHERE `entry`=191230;
@@ -89,6 +92,7 @@ UPDATE `creature_template` SET `ScriptName`='npc_doctor' WHERE `entry` IN (12939
UPDATE `creature_template` SET `ScriptName`='npc_injured_patient' WHERE `entry` IN (12936,12937,12938,12923,12924,12925);
UPDATE `creature_template` SET `ScriptName`='npc_prof_alchemy' WHERE `entry` IN (17909,19052,22427);
UPDATE `creature_template` SET `ScriptName`='npc_prof_blacksmith' WHERE `entry` IN (5164,11145,11146,11176,11177,11178,11191,11192,11193);
UPDATE `creature_template` SET `ScriptName`='npc_engineering_tele_trinket' WHERE `entry` IN (14742, 14743, 21493, 21494);
UPDATE `creature_template` SET `ScriptName`='npc_prof_leather' WHERE `entry` IN (7866,7867,7868,7869,7870,7871);
UPDATE `creature_template` SET `ScriptName`='npc_prof_tailor' WHERE `entry` IN (22208,22212,22213);
UPDATE `creature_template` SET `ScriptName`='npc_rogue_trainer' WHERE `entry` IN (918,4163,3328,4583,5165,5167,13283,16684);

View File

@@ -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
{
{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)
SPELL_REP_LC = 39456,
SPELL_REP_SHAT = 39457,
SPELL_REP_CE = 39460,
SPELL_REP_CON = 39474,
SPELL_REP_KT = 39475,
SPELL_REP_SPOR = 39476
};
bool GOHello_go_ethereum_prison(Player *player, GameObject* _GO)
const uint32 NpcPrisonEntry[] =
{
_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;
22810, 22811, 22812, 22813, 22814, 22815, //good guys
20783, 20784, 20785, 20786, 20788, 20789, 20790 //bad guys
};
bool GOHello_go_ethereum_prison(Player* pPlayer, GameObject* pGo)
{
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;
}
/*######
@@ -233,6 +288,46 @@ bool GOHello_go_sacred_fire_of_life(Player* pPlayer, GameObject* pGO)
return true;
}
/*######
## 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
######*/
@@ -308,6 +403,11 @@ void AddSC_go_scripts()
newscript->pGOHello = &GOHello_go_orb_of_command;
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;
@@ -328,10 +428,24 @@ void AddSC_go_scripts()
newscript->pGOHello = &GOHello_go_ethereum_prison;
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();
}

View File

@@ -811,6 +811,138 @@ bool GossipSelect_npc_prof_blacksmith(Player *player, Creature *_Creature, uint3
return true;
}*/
/*###
# 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
###*/
@@ -1183,6 +1315,12 @@ void AddSC_npc_professions()
newscript->pGossipSelect = &GossipSelect_npc_prof_blacksmith;
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;

View File

@@ -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
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
#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
//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,
#define GOBJECT_SPINE 185584
GOBJECT_SPINE = 185584,
#define EVENT_BERSERK 1
#define EVENT_YELL 2
#define EVENT_NEEDLE 3
#define EVENT_SPINE 4
#define EVENT_SHIELD 5
EVENT_BERSERK = 1,
EVENT_YELL = 2,
EVENT_NEEDLE = 3,
EVENT_SPINE = 4,
EVENT_SHIELD = 5,
#define GCD_CAST 1
#define GCD_YELL 2
GCD_CAST = 1,
GCD_YELL = 2
};
struct TRINITY_DLL_DECL boss_najentusAI : public ScriptedAI
{

View File

@@ -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

View File

@@ -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

View File

@@ -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();};