Merge [SD2]

r1041 Add support to respawn GO 164869. In addition, add placeholders to respawn 169243, 185168, 185169, 179703, 181366 and 193426
r1042 Remove limited/obsolete grid search for ancient gem in hyjal, replace with instance wide respawn of go (stored in instance script list)
r1043 Code cleanup in instance script for Kara
r1044 Added placeholder scripts for boss nazan/vazruden - Skip, we already have scripted that boss
r1045 Initialize variables in boss omrogg. Use different summon type for heads and fix possible crash. Some code cleanup and sd2 style applied.

--HG--
branch : trunk
This commit is contained in:
Kudlaty
2009-06-18 14:04:36 +02:00
parent dd7dc8b869
commit 8662fbb007
11 changed files with 434 additions and 388 deletions

View File

@@ -457,7 +457,11 @@ bool GossipSelect_boss_gloomrel(Player *player, Creature *_Creature, uint32 send
break;
case GOSSIP_ACTION_INFO_DEF+22:
player->CLOSE_GOSSIP_MENU();
//re-spawn object here
if (ScriptedInstance* pInstance = (ScriptedInstance*)_Creature->GetInstanceData())
{
//are 5 minutes expected? go template may have data to despawn when used at quest
pInstance->DoRespawnGameObject(pInstance->GetData64(DATA_GO_CHALICE),MINUTE*5);
}
break;
}
return true;

View File

@@ -5,23 +5,27 @@
#ifndef DEF_BRD_H
#define DEF_BRD_H
#define TYPE_RING_OF_LAW 1
#define TYPE_VAULT 2
#define TYPE_BAR 3
#define TYPE_TOMB_OF_SEVEN 4
#define TYPE_LYCEUM 5
#define TYPE_IRON_HALL 6
enum
{
TYPE_RING_OF_LAW = 1,
TYPE_VAULT = 2,
TYPE_BAR = 3,
TYPE_TOMB_OF_SEVEN = 4,
TYPE_LYCEUM = 5,
TYPE_IRON_HALL = 6,
DATA_EMPEROR = 10,
DATA_PHALANX = 11,
#define DATA_EMPEROR 10
#define DATA_PHALANX 11
DATA_ARENA1 = 12,
DATA_ARENA2 = 13,
DATA_ARENA3 = 14,
DATA_ARENA4 = 15,
#define DATA_ARENA1 12
#define DATA_ARENA2 13
#define DATA_ARENA3 14
#define DATA_ARENA4 15
#define DATA_GO_BAR_KEG 16
#define DATA_GO_BAR_KEG_TRAP 17
#define DATA_GO_BAR_DOOR 18
DATA_GO_BAR_KEG = 16,
DATA_GO_BAR_KEG_TRAP = 17,
DATA_GO_BAR_DOOR = 18,
DATA_GO_CHALICE = 19
};
#endif

View File

@@ -32,28 +32,34 @@ update `instance_template` set `script`='instance_blackrock_depths' where `map`=
#include "precompiled.h"
#include "def_blackrock_depths.h"
#define ENCOUNTERS 6
enum
{
ENCOUNTERS = 6,
#define C_EMPEROR 9019
#define C_PHALANX 9502
#define GO_ARENA1 161525
#define GO_ARENA2 161522
#define GO_ARENA3 161524
#define GO_ARENA4 161523
#define GO_SHADOW_LOCK 161460
#define GO_SHADOW_MECHANISM 161461
#define GO_SHADOW_GIANT_DOOR 157923
#define GO_SHADOW_DUMMY 161516
#define GO_BAR_KEG_SHOT 170607
#define GO_BAR_KEG_TRAP 171941
#define GO_BAR_DOOR 170571
#define GO_TOMB_ENTER 170576
#define GO_TOMB_EXIT 170577
#define GO_LYCEUM 170558
#define GO_GOLEM_ROOM_N 170573
#define GO_GOLEM_ROOM_S 170574
#define GO_THONE_ROOM 170575
NPC_EMPEROR = 9019,
NPC_PHALANX = 9502,
GO_ARENA1 = 161525,
GO_ARENA2 = 161522,
GO_ARENA3 = 161524,
GO_ARENA4 = 161523,
GO_SHADOW_LOCK = 161460,
GO_SHADOW_MECHANISM = 161461,
GO_SHADOW_GIANT_DOOR = 157923,
GO_SHADOW_DUMMY = 161516,
GO_BAR_KEG_SHOT = 170607,
GO_BAR_KEG_TRAP = 171941,
GO_BAR_DOOR = 170571,
GO_TOMB_ENTER = 170576,
GO_TOMB_EXIT = 170577,
GO_LYCEUM = 170558,
GO_GOLEM_ROOM_N = 170573,
GO_GOLEM_ROOM_S = 170574,
GO_THONE_ROOM = 170575,
GO_SPECTRAL_CHALICE = 164869,
GO_CHEST_SEVEN = 169243
};
struct TRINITY_DLL_DECL instance_blackrock_depths : public ScriptedInstance
{
@@ -118,8 +124,8 @@ struct TRINITY_DLL_DECL instance_blackrock_depths : public ScriptedInstance
{
switch(creature->GetEntry())
{
case C_EMPEROR: EmperorGUID = creature->GetGUID(); break;
case C_PHALANX: PhalanxGUID = creature->GetGUID(); break;
case NPC_EMPEROR: EmperorGUID = creature->GetGUID(); break;
case NPC_PHALANX: PhalanxGUID = creature->GetGUID(); break;
}
}

View File

@@ -5,30 +5,34 @@
#ifndef DEF_HYJAL_H
#define DEF_HYJAL_H
#define WORLD_STATE_WAVES 2842
#define WORLD_STATE_ENEMY 2453
#define WORLD_STATE_ENEMYCOUNT 2454
#define DATA_ANETHERON 1
#define DATA_ANETHERONEVENT 2
#define DATA_ARCHIMONDE 3
#define DATA_ARCHIMONDEEVENT 4
#define DATA_AZGALOR 5
#define DATA_AZGALOREVENT 6
#define DATA_JAINAPROUDMOORE 7
#define DATA_KAZROGAL 8
#define DATA_KAZROGALEVENT 9
#define DATA_RAGEWINTERCHILL 10
#define DATA_RAGEWINTERCHILLEVENT 11
#define DATA_THRALL 12
#define DATA_TYRANDEWHISPERWIND 13
#define DATA_TRASH 14
#define DATA_RESET_TRASH_COUNT 15
#define DATA_ALLIANCE_RETREAT 16
#define DATA_HORDE_RETREAT 17
#define DATA_RAIDDAMAGE 18
#define DATA_RESET_RAIDDAMAGE 19
#define ERROR_INST_DATA "TSCR: Instance data not set properly for Mount Hyjal. Encounters will be buggy"
enum
{
WORLD_STATE_WAVES = 2842,
WORLD_STATE_ENEMY = 2453,
WORLD_STATE_ENEMYCOUNT = 2454,
DATA_ANETHERON = 1,
DATA_ANETHERONEVENT = 2,
DATA_ARCHIMONDE = 3,
DATA_ARCHIMONDEEVENT = 4,
DATA_AZGALOR = 5,
DATA_AZGALOREVENT = 6,
DATA_JAINAPROUDMOORE = 7,
DATA_KAZROGAL = 8,
DATA_KAZROGALEVENT = 9,
DATA_RAGEWINTERCHILL = 10,
DATA_RAGEWINTERCHILLEVENT = 11,
DATA_THRALL = 12,
DATA_TYRANDEWHISPERWIND = 13,
DATA_TRASH = 14,
DATA_RESET_TRASH_COUNT = 15,
DATA_ALLIANCE_RETREAT = 16,
DATA_HORDE_RETREAT = 17,
DATA_RAIDDAMAGE = 18,
DATA_RESET_RAIDDAMAGE = 19,
TYPE_RETREAT = 20
};
#endif

View File

@@ -662,6 +662,8 @@ void hyjalAI::Retreat()
{
if(pInstance)
{
pInstance->SetData(TYPE_RETREAT,SPECIAL);
if(Faction == 0)
{
pInstance->SetData(DATA_ALLIANCE_RETREAT, 1);

View File

@@ -25,8 +25,12 @@ EndScriptData */
#include "def_hyjal.h"
#include "hyjal_trash.h"
#define ENCOUNTERS 5
enum
{
ENCOUNTERS = 5,
GO_ANCIENT_GEM = 185557
};
/* Battle of Mount Hyjal encounters:
0 - Rage Winterchill event
1 - Anetheron event
@@ -42,6 +46,8 @@ struct TRINITY_DLL_DECL instance_mount_hyjal : public ScriptedInstance
uint32 Encounters[ENCOUNTERS];
std::string str_data;
std::list<uint64> m_uiAncientGemGUID;
uint64 RageWinterchill;
uint64 Anetheron;
uint64 Kazrogal;
@@ -64,6 +70,8 @@ struct TRINITY_DLL_DECL instance_mount_hyjal : public ScriptedInstance
void Initialize()
{
m_uiAncientGemGUID.clear();
RageWinterchill = 0;
Anetheron = 0;
Kazrogal = 0;
@@ -83,7 +91,6 @@ struct TRINITY_DLL_DECL instance_mount_hyjal : public ScriptedInstance
hordeRetreat = 0;
allianceRetreat = 0;
}
bool IsEncounterInProgress() const
@@ -112,6 +119,9 @@ struct TRINITY_DLL_DECL instance_mount_hyjal : public ScriptedInstance
else
go->SetGoState(GO_STATE_READY);
break;
case GO_ANCIENT_GEM:
m_uiAncientGemGUID.push_back(go->GetGUID());
break;
}
}
@@ -208,6 +218,19 @@ struct TRINITY_DLL_DECL instance_mount_hyjal : public ScriptedInstance
else Trash--;
UpdateWorldState(WORLD_STATE_ENEMYCOUNT, Trash);
break;
case TYPE_RETREAT:
if (data == SPECIAL)
{
if (!m_uiAncientGemGUID.empty())
{
for(std::list<uint64>::iterator itr = m_uiAncientGemGUID.begin(); itr != m_uiAncientGemGUID.end(); ++itr)
{
//don't know how long it expected
DoRespawnGameObject(*itr,DAY);
}
}
}
break;
case DATA_ALLIANCE_RETREAT:
allianceRetreat = data;
OpenDoor(HordeGate,true);

View File

@@ -51,24 +51,6 @@ struct TRINITY_DLL_DECL instance_ramparts : public ScriptedInstance
}
}
void DoRespawnChest()
{
uint64 uiChest;
if (instance->IsHeroic())
uiChest = m_uiChestHGUID;
else
uiChest = m_uiChestNGUID;
if (GameObject* pGo = instance->GetGameObject(uiChest))
{
if (pGo->isSpawned())
return;
pGo->SetRespawnTime(HOUR*IN_MILISECONDS);
}
}
void SetData(uint32 uiType, uint32 uiData)
{
debug_log("TSCR: Instance Ramparts: SetData received for type %u with data %u",uiType,uiData);
@@ -77,12 +59,12 @@ struct TRINITY_DLL_DECL instance_ramparts : public ScriptedInstance
{
case TYPE_VAZRUDEN:
if (uiData == DONE && m_uiEncounter[1] == DONE)
DoRespawnChest();
DoRespawnGameObject(instance->IsHeroic() ? m_uiChestHGUID : m_uiChestNGUID, HOUR*IN_MILISECONDS);
m_uiEncounter[0] = uiData;
break;
case TYPE_NAZAN:
if (uiData == DONE && m_uiEncounter[0] == DONE)
DoRespawnChest();
DoRespawnGameObject(instance->IsHeroic() ? m_uiChestHGUID : m_uiChestNGUID, HOUR*IN_MILISECONDS);
m_uiEncounter[1] = uiData;
break;
}

View File

@@ -29,8 +29,22 @@ EndContentData */
#include "precompiled.h"
#include "def_shattered_halls.h"
#define ENTRY_LEFT_HEAD 19523
#define ENTRY_RIGHT_HEAD 19524
enum
{
YELL_DIE_L = -1540039,
YELL_DIE_R = -1540040,
EMOTE_ENRAGE = -1540041,
SPELL_BLAST_WAVE = 30600,
SPELL_FEAR = 30584,
SPELL_THUNDERCLAP = 30633,
SPELL_BURNING_MAUL = 30598,
H_SPELL_BURNING_MAUL = 36056,
NPC_LEFT_HEAD = 19523,
NPC_RIGHT_HEAD = 19524
};
struct Yell
{
@@ -40,61 +54,50 @@ struct Yell
static Yell GoCombat[]=
{
{-1540018, ENTRY_LEFT_HEAD},
{-1540019, ENTRY_LEFT_HEAD},
{-1540020, ENTRY_LEFT_HEAD},
{-1540018, NPC_LEFT_HEAD},
{-1540019, NPC_LEFT_HEAD},
{-1540020, NPC_LEFT_HEAD},
};
static Yell GoCombatDelay[]=
{
{-1540021, ENTRY_RIGHT_HEAD},
{-1540022, ENTRY_RIGHT_HEAD},
{-1540023, ENTRY_RIGHT_HEAD},
{-1540021, NPC_RIGHT_HEAD},
{-1540022, NPC_RIGHT_HEAD},
{-1540023, NPC_RIGHT_HEAD},
};
static Yell Threat[]=
{
{-1540024, ENTRY_LEFT_HEAD},
{-1540025, ENTRY_RIGHT_HEAD},
{-1540026, ENTRY_LEFT_HEAD},
{-1540027, ENTRY_LEFT_HEAD},
{-1540024, NPC_LEFT_HEAD},
{-1540025, NPC_RIGHT_HEAD},
{-1540026, NPC_LEFT_HEAD},
{-1540027, NPC_LEFT_HEAD},
};
static Yell ThreatDelay1[]=
{
{-1540028, ENTRY_RIGHT_HEAD},
{-1540029, ENTRY_LEFT_HEAD},
{-1540030, ENTRY_RIGHT_HEAD},
{-1540031, ENTRY_RIGHT_HEAD},
{-1540028, NPC_RIGHT_HEAD},
{-1540029, NPC_LEFT_HEAD},
{-1540030, NPC_RIGHT_HEAD},
{-1540031, NPC_RIGHT_HEAD},
};
static Yell ThreatDelay2[]=
{
{-1540032, ENTRY_LEFT_HEAD},
{-1540033, ENTRY_RIGHT_HEAD},
{-1540034, ENTRY_LEFT_HEAD},
{-1540035, ENTRY_LEFT_HEAD},
{-1540032, NPC_LEFT_HEAD},
{-1540033, NPC_RIGHT_HEAD},
{-1540034, NPC_LEFT_HEAD},
{-1540035, NPC_LEFT_HEAD},
};
static Yell Killing[]=
{
{-1540036, ENTRY_LEFT_HEAD},
{-1540037, ENTRY_RIGHT_HEAD},
{-1540036, NPC_LEFT_HEAD},
{-1540037, NPC_RIGHT_HEAD},
};
static Yell KillingDelay[]=
{
{-1540038, ENTRY_RIGHT_HEAD},
{-1000000, ENTRY_LEFT_HEAD},
{-1540038, NPC_RIGHT_HEAD},
{-1000000, NPC_LEFT_HEAD},
};
#define YELL_DIE_L -1540039
#define YELL_DIE_R -1540040
#define EMOTE_ENRAGE -1540041
#define SPELL_BLAST_WAVE 30600
#define SPELL_FEAR 30584
#define SPELL_THUNDERCLAP 30633
#define SPELL_BURNING_MAUL 30598
#define H_SPELL_BURNING_MAUL 36056
struct TRINITY_DLL_DECL mob_omrogg_headsAI : public ScriptedAI
{
mob_omrogg_headsAI(Creature *c) : ScriptedAI(c) {}
@@ -102,12 +105,15 @@ struct TRINITY_DLL_DECL mob_omrogg_headsAI : public ScriptedAI
bool DeathYell;
uint32 Death_Timer;
void Reset() {}
void Reset()
{
Death_Timer = 4000;
DeathYell = false;
}
void EnterCombat(Unit* who) { }
void DoDeathYell()
{
Death_Timer = 4000;
DeathYell = true;
}
@@ -119,7 +125,8 @@ struct TRINITY_DLL_DECL mob_omrogg_headsAI : public ScriptedAI
if (Death_Timer < diff)
{
DoScriptText(YELL_DIE_R, m_creature);
DeathYell = false;
Death_Timer = false;
m_creature->setDeathState(JUST_DIED);
}else Death_Timer -= diff;
}
};
@@ -128,6 +135,8 @@ struct TRINITY_DLL_DECL boss_warbringer_omroggAI : public ScriptedAI
{
boss_warbringer_omroggAI(Creature *c) : ScriptedAI(c)
{
LeftHeadGUID = 0;
RightHeadGUID = 0;
pInstance = c->GetInstanceData();
HeroicMode = m_creature->GetMap()->IsHeroic();
}
@@ -135,8 +144,8 @@ struct TRINITY_DLL_DECL boss_warbringer_omroggAI : public ScriptedAI
ScriptedInstance* pInstance;
bool HeroicMode;
uint64 LeftHead;
uint64 RightHead;
uint64 LeftHeadGUID;
uint64 RightHeadGUID;
int iaggro;
int ithreat;
int ikilling;
@@ -156,9 +165,18 @@ struct TRINITY_DLL_DECL boss_warbringer_omroggAI : public ScriptedAI
void Reset()
{
if (Unit* pLeftHead = Unit::GetUnit(*m_creature,LeftHeadGUID))
{
pLeftHead->setDeathState(JUST_DIED);
LeftHeadGUID = 0;
}
if (Unit* pRightHead = Unit::GetUnit(*m_creature,RightHeadGUID))
{
pRightHead->setDeathState(JUST_DIED);
RightHeadGUID = 0;
}
LeftHead = 0;
RightHead = 0;
AggroYell = false;
ThreatYell = false;
@@ -182,35 +200,32 @@ struct TRINITY_DLL_DECL boss_warbringer_omroggAI : public ScriptedAI
void DoYellForThreat()
{
if (LeftHead && RightHead)
{
Unit *Left = Unit::GetUnit(*m_creature,LeftHead);
Unit *Right = Unit::GetUnit(*m_creature,RightHead);
Unit *pLeftHead = Unit::GetUnit(*m_creature,LeftHeadGUID);
Unit *pRightHead = Unit::GetUnit(*m_creature,RightHeadGUID);
if (!Left || !Right)
return;
if (!pLeftHead || !pRightHead)
return;
ithreat = rand()%4;
ithreat = rand()%4;
Unit *source = (Left->GetEntry() == Threat[ithreat].creature ? Left : Right);
Unit *source = (pLeftHead->GetEntry() == Threat[ithreat].creature ? pLeftHead : pRightHead);
DoScriptText(Threat[ithreat].id, source);
DoScriptText(Threat[ithreat].id, source);
Delay_Timer = 3500;
ThreatYell = true;
}
Delay_Timer = 3500;
ThreatYell = true;
}
void EnterCombat(Unit *who)
{
DoSpawnCreature(ENTRY_LEFT_HEAD,0,0,0,0,TEMPSUMMON_TIMED_DESPAWN,90000);
DoSpawnCreature(ENTRY_RIGHT_HEAD,0,0,0,0,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,90000);
DoSpawnCreature(NPC_LEFT_HEAD,0,0,0,0,TEMPSUMMON_TIMED_DESPAWN,90000);
DoSpawnCreature(NPC_RIGHT_HEAD,0,0,0,0,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,90000);
if (Unit *Left = Unit::GetUnit(*m_creature,LeftHead))
if (Unit *pLeftHead = Unit::GetUnit(*m_creature,LeftHeadGUID))
{
iaggro = rand()%3;
DoScriptText(GoCombat[iaggro].id, Left);
DoScriptText(GoCombat[iaggro].id, pLeftHead);
Delay_Timer = 3500;
AggroYell = true;
@@ -222,11 +237,11 @@ struct TRINITY_DLL_DECL boss_warbringer_omroggAI : public ScriptedAI
void JustSummoned(Creature *summoned)
{
if (summoned->GetEntry() == ENTRY_LEFT_HEAD)
LeftHead = summoned->GetGUID();
if (summoned->GetEntry() == NPC_LEFT_HEAD)
LeftHeadGUID = summoned->GetGUID();
if (summoned->GetEntry() == ENTRY_RIGHT_HEAD)
RightHead = summoned->GetGUID();
if (summoned->GetEntry() == NPC_RIGHT_HEAD)
RightHeadGUID = summoned->GetGUID();
//summoned->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
//summoned->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
@@ -235,47 +250,42 @@ struct TRINITY_DLL_DECL boss_warbringer_omroggAI : public ScriptedAI
void KilledUnit(Unit* victim)
{
if (LeftHead && RightHead)
Unit* pLeftHead = Unit::GetUnit(*m_creature,LeftHeadGUID);
Unit* pRightHead = Unit::GetUnit(*m_creature,RightHeadGUID);
if (!pLeftHead || !pRightHead)
return;
ikilling = rand()%2;
Unit *source = (pLeftHead->GetEntry() == Killing[ikilling].creature ? pLeftHead : pRightHead);
switch(ikilling)
{
Unit *Left = Unit::GetUnit(*m_creature,LeftHead);
Unit *Right = Unit::GetUnit(*m_creature,RightHead);
if (!Left || !Right)
return;
ikilling = rand()%2;
Unit *source = (Left->GetEntry() == Killing[ikilling].creature ? Left : Right);
switch(ikilling)
{
case 0:
DoScriptText(Killing[ikilling].id, source);
Delay_Timer = 3500;
KillingYell = true;
break;
case 1:
DoScriptText(Killing[ikilling].id, source);
KillingYell = false;
break;
}
case 0:
DoScriptText(Killing[ikilling].id, source);
Delay_Timer = 3500;
KillingYell = true;
break;
case 1:
DoScriptText(Killing[ikilling].id, source);
KillingYell = false;
break;
}
}
void JustDied(Unit* Killer)
{
if (LeftHead && RightHead)
{
Unit *Left = Unit::GetUnit(*m_creature,LeftHead);
Unit *Right = Unit::GetUnit(*m_creature,RightHead);
Unit* pLeftHead = Unit::GetUnit(*m_creature,LeftHeadGUID);
Unit* pRightHead = Unit::GetUnit(*m_creature,RightHeadGUID);
if (!Left || !Right)
return;
if (!pLeftHead || !pRightHead)
return;
DoScriptText(YELL_DIE_L, Left);
DoScriptText(YELL_DIE_L, pLeftHead);
CAST_AI(mob_omrogg_headsAI, CAST_CRE(Right)->AI())->DoDeathYell();
}
CAST_AI(mob_omrogg_headsAI, CAST_CRE(pRightHead)->AI())->DoDeathYell();
if (pInstance)
pInstance->SetData(TYPE_OMROGG, DONE);
@@ -287,24 +297,21 @@ struct TRINITY_DLL_DECL boss_warbringer_omroggAI : public ScriptedAI
{
Delay_Timer = 3500;
if (!LeftHead || !RightHead)
return;
Unit* pLeftHead = Unit::GetUnit(*m_creature,LeftHeadGUID);
Unit* pRightHead = Unit::GetUnit(*m_creature,RightHeadGUID);
Unit *Left = Unit::GetUnit(*m_creature,LeftHead);
Unit *Right = Unit::GetUnit(*m_creature,RightHead);
if (!Left || !Right)
if (!pLeftHead || !pRightHead)
return;
if (AggroYell)
{
DoScriptText(GoCombatDelay[iaggro].id, Right);
DoScriptText(GoCombatDelay[iaggro].id, pRightHead);
AggroYell = false;
}
if (ThreatYell2)
{
Unit *source = (Left->GetEntry() == ThreatDelay2[ithreat].creature ? Left : Right);
Unit *source = (pLeftHead->GetEntry() == ThreatDelay2[ithreat].creature ? pLeftHead : pRightHead);
DoScriptText(ThreatDelay2[ithreat].id, source);
ThreatYell2 = false;
@@ -312,7 +319,7 @@ struct TRINITY_DLL_DECL boss_warbringer_omroggAI : public ScriptedAI
if (ThreatYell)
{
Unit *source = (Left->GetEntry() == ThreatDelay1[ithreat].creature ? Left : Right);
Unit *source = (pLeftHead->GetEntry() == ThreatDelay1[ithreat].creature ? pLeftHead : pRightHead);
DoScriptText(ThreatDelay1[ithreat].id, source);
ThreatYell = false;
@@ -321,7 +328,7 @@ struct TRINITY_DLL_DECL boss_warbringer_omroggAI : public ScriptedAI
if (KillingYell)
{
Unit *source = (Left->GetEntry() == KillingDelay[ikilling].creature ? Left : Right);
Unit *source = (pLeftHead->GetEntry() == KillingDelay[ikilling].creature ? pLeftHead : pRightHead);
DoScriptText(KillingDelay[ikilling].id, source);
KillingYell = false;

View File

@@ -65,6 +65,7 @@ struct TRINITY_DLL_DECL instance_karazhan : public ScriptedInstance
uint64 NetherspaceDoor; // Door at Malchezaar
uint64 MastersTerraceDoor[2];
uint64 ImageGUID;
uint64 DustCoveredChest;
void Initialize()
{
@@ -91,6 +92,7 @@ struct TRINITY_DLL_DECL instance_karazhan : public ScriptedInstance
MastersTerraceDoor[0]= 0;
MastersTerraceDoor[1]= 0;
ImageGUID = 0;
DustCoveredChest = 0;
}
bool IsEncounterInProgress() const
@@ -176,7 +178,11 @@ struct TRINITY_DLL_DECL instance_karazhan : public ScriptedInstance
case DATA_SHADEOFARAN_EVENT: Encounters[6] = data; break;
case DATA_TERESTIAN_EVENT: Encounters[7] = data; break;
case DATA_NETHERSPITE_EVENT: Encounters[8] = data; break;
case DATA_CHESS_EVENT: Encounters[9] = data; break;
case DATA_CHESS_EVENT:
if (data == DONE)
DoRespawnGameObject(DustCoveredChest,DAY);
Encounters[9] = data;
break;
case DATA_MALCHEZZAR_EVENT: Encounters[10] = data; break;
case DATA_NIGHTBANE_EVENT:
if (Encounters[11] == DONE)
@@ -231,6 +237,7 @@ struct TRINITY_DLL_DECL instance_karazhan : public ScriptedInstance
else
go->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_LOCKED);
break;
case 185119: DustCoveredChest = go->GetGUID(); break;
}
switch(OperaEvent)

View File

@@ -40,214 +40,217 @@ EndScriptData */
struct TRINITY_DLL_DECL instance_molten_core : public ScriptedInstance
{
instance_molten_core(Map *map) : ScriptedInstance(map) {Initialize();};
instance_molten_core(Map *map) : ScriptedInstance(map) {Initialize();};
uint64 Lucifron, Magmadar, Gehennas, Garr, Geddon, Shazzrah, Sulfuron, Golemagg, Domo, Ragnaros, FlamewakerPriest;
uint64 RuneKoro, RuneZeth, RuneMazj, RuneTheri, RuneBlaz, RuneKress, RuneMohn;
uint64 Lucifron, Magmadar, Gehennas, Garr, Geddon, Shazzrah, Sulfuron, Golemagg, Domo, Ragnaros, FlamewakerPriest;
uint64 RuneKoro, RuneZeth, RuneMazj, RuneTheri, RuneBlaz, RuneKress, RuneMohn, m_uiFirelordCacheGUID;;
//If all Bosses are dead.
bool IsBossDied[9];
//If all Bosses are dead.
bool IsBossDied[9];
uint32 Encounter[ENCOUNTERS];
uint32 Encounter[ENCOUNTERS];
void Initialize()
void Initialize()
{
Lucifron = 0;
Magmadar = 0;
Gehennas = 0;
Garr = 0;
Geddon = 0;
Shazzrah = 0;
Sulfuron = 0;
Golemagg = 0;
Domo = 0;
Ragnaros = 0;
FlamewakerPriest = 0;
RuneKoro = 0;
RuneZeth = 0;
RuneMazj = 0;
RuneTheri = 0;
RuneBlaz = 0;
RuneKress = 0;
RuneMohn = 0;
m_uiFirelordCacheGUID = 0;
IsBossDied[0] = false;
IsBossDied[1] = false;
IsBossDied[2] = false;
IsBossDied[3] = false;
IsBossDied[4] = false;
IsBossDied[5] = false;
IsBossDied[6] = false;
IsBossDied[7] = false;
IsBossDied[8] = false;
for(uint8 i = 0; i < ENCOUNTERS; i++)
Encounter[i] = NOT_STARTED;
}
bool IsEncounterInProgress() const
{
return false;
};
void OnGameObjectCreate(GameObject *go, bool add)
{
switch(go->GetEntry())
{
Lucifron = 0;
Magmadar = 0;
Gehennas = 0;
Garr = 0;
Geddon = 0;
Shazzrah = 0;
Sulfuron = 0;
Golemagg = 0;
Domo = 0;
Ragnaros = 0;
FlamewakerPriest = 0;
RuneKoro = 0;
RuneZeth = 0;
RuneMazj = 0;
RuneTheri = 0;
RuneBlaz = 0;
RuneKress = 0;
RuneMohn = 0;
IsBossDied[0] = false;
IsBossDied[1] = false;
IsBossDied[2] = false;
IsBossDied[3] = false;
IsBossDied[4] = false;
IsBossDied[5] = false;
IsBossDied[6] = false;
IsBossDied[7] = false;
IsBossDied[8] = false;
for(uint8 i = 0; i < ENCOUNTERS; i++)
Encounter[i] = NOT_STARTED;
case 176951: //Sulfuron
RuneKoro = go->GetGUID();
break;
case 176952: //Geddon
RuneZeth = go->GetGUID();
break;
case 176953: //Shazzrah
RuneMazj = go->GetGUID();
break;
case 176954: //Golemagg
RuneTheri = go->GetGUID();
break;
case 176955: //Garr
RuneBlaz = go->GetGUID();
break;
case 176956: //Magmadar
RuneKress = go->GetGUID();
break;
case 176957: //Gehennas
RuneMohn = go->GetGUID();
break;
case 179703:
m_uiFirelordCacheGUID = go->GetGUID(); //when majordomo event == DONE DoRespawnGameObject(m_uiFirelordCacheGUID,);
break;
}
}
void OnCreatureCreate(Creature *creature, bool add)
{
switch (creature->GetEntry())
{
case ID_LUCIFRON:
Lucifron = creature->GetGUID();
break;
case ID_MAGMADAR:
Magmadar = creature->GetGUID();
break;
case ID_GEHENNAS:
Gehennas = creature->GetGUID();
break;
case ID_GARR:
Garr = creature->GetGUID();
break;
case ID_GEDDON:
Geddon = creature->GetGUID();
break;
case ID_SHAZZRAH:
Shazzrah = creature->GetGUID();
break;
case ID_SULFURON:
Sulfuron = creature->GetGUID();
break;
case ID_GOLEMAGG:
Golemagg = creature->GetGUID();
break;
case ID_DOMO:
Domo = creature->GetGUID();
break;
case ID_RAGNAROS:
Ragnaros = creature->GetGUID();
break;
case ID_FLAMEWAKERPRIEST:
FlamewakerPriest = creature->GetGUID();
break;
}
}
uint64 GetData64 (uint32 identifier)
{
switch(identifier)
{
case DATA_SULFURON:
return Sulfuron;
case DATA_GOLEMAGG:
return Sulfuron;
case DATA_FLAMEWAKERPRIEST:
return FlamewakerPriest;
}
bool IsEncounterInProgress() const
{
return false;
};
return 0;
}
void OnGameObjectCreate(GameObject *go, bool add)
uint32 GetData(uint32 type)
{
switch(type)
{
switch(go->GetEntry())
{
case 176951: //Sulfuron
RuneKoro = go->GetGUID();
break;
case 176952: //Geddon
RuneZeth = go->GetGUID();
break;
case 176953: //Shazzrah
RuneMazj = go->GetGUID();
break;
case 176954: //Golemagg
RuneTheri = go->GetGUID();
break;
case 176955: //Garr
RuneBlaz = go->GetGUID();
break;
case 176956: //Magmadar
RuneKress = go->GetGUID();
break;
case 176957: //Gehennas
RuneMohn = go->GetGUID();
break;
}
case DATA_LUCIFRONISDEAD:
if(IsBossDied[0])
return 1;
break;
case DATA_MAGMADARISDEAD:
if(IsBossDied[1])
return 1;
break;
case DATA_GEHENNASISDEAD:
if(IsBossDied[2])
return 1;
break;
case DATA_GARRISDEAD:
if(IsBossDied[3])
return 1;
break;
case DATA_GEDDONISDEAD:
if(IsBossDied[4])
return 1;
break;
case DATA_SHAZZRAHISDEAD:
if(IsBossDied[5])
return 1;
break;
case DATA_SULFURONISDEAD:
if(IsBossDied[6])
return 1;
break;
case DATA_GOLEMAGGISDEAD:
if(IsBossDied[7])
return 1;
break;
case DATA_MAJORDOMOISDEAD:
if(IsBossDied[8])
return 1;
break;
}
return 0;
}
void OnCreatureCreate(Creature *creature, bool add)
{
switch (creature->GetEntry())
{
case ID_LUCIFRON:
Lucifron = creature->GetGUID();
break;
case ID_MAGMADAR:
Magmadar = creature->GetGUID();
break;
case ID_GEHENNAS:
Gehennas = creature->GetGUID();
break;
case ID_GARR:
Garr = creature->GetGUID();
break;
case ID_GEDDON:
Geddon = creature->GetGUID();
break;
case ID_SHAZZRAH:
Shazzrah = creature->GetGUID();
break;
case ID_SULFURON:
Sulfuron = creature->GetGUID();
break;
case ID_GOLEMAGG:
Golemagg = creature->GetGUID();
break;
case ID_DOMO:
Domo = creature->GetGUID();
break;
case ID_RAGNAROS:
Ragnaros = creature->GetGUID();
break;
case ID_FLAMEWAKERPRIEST:
FlamewakerPriest = creature->GetGUID();
break;
}
}
uint64 GetData64 (uint32 identifier)
{
switch(identifier)
{
case DATA_SULFURON:
return Sulfuron;
case DATA_GOLEMAGG:
return Sulfuron;
case DATA_FLAMEWAKERPRIEST:
return FlamewakerPriest;
}
return 0;
}
uint32 GetData(uint32 type)
{
switch(type)
{
case DATA_LUCIFRONISDEAD:
if(IsBossDied[0])
return 1;
break;
case DATA_MAGMADARISDEAD:
if(IsBossDied[1])
return 1;
break;
case DATA_GEHENNASISDEAD:
if(IsBossDied[2])
return 1;
break;
case DATA_GARRISDEAD:
if(IsBossDied[3])
return 1;
break;
case DATA_GEDDONISDEAD:
if(IsBossDied[4])
return 1;
break;
case DATA_SHAZZRAHISDEAD:
if(IsBossDied[5])
return 1;
break;
case DATA_SULFURONISDEAD:
if(IsBossDied[6])
return 1;
break;
case DATA_GOLEMAGGISDEAD:
if(IsBossDied[7])
return 1;
break;
case DATA_MAJORDOMOISDEAD:
if(IsBossDied[8])
return 1;
break;
}
return 0;
}
void SetData(uint32 type, uint32 data)
{
if (type == DATA_GOLEMAGG_DEATH)
IsBossDied[7] = true;
}
void SetData(uint32 type, uint32 data)
{
if (type == DATA_GOLEMAGG_DEATH)
IsBossDied[7] = true;
}
};
InstanceData* GetInstance_instance_molten_core(Map *map)

View File

@@ -57,10 +57,14 @@ const MinionData minionData[] =
{0, 0,}
};
#define GO_GOTHIK_GATE 181170
#define GO_HORSEMEN_CHEST 181366
enum
{
GO_HORSEMEN_CHEST_HERO = 193426,
GO_HORSEMEN_CHEST = 181366, //four horsemen event, DoRespawnGameObject() when event == DONE
GO_GOTHIK_GATE = 181170,
#define SPELL_ERUPTION 29371
SPELL_ERUPTION = 29371
};
const float HeiganPos[2] = {2796, -3707};
const float HeiganEruptionSlope[3] =