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
@@ -457,7 +457,11 @@ bool GossipSelect_boss_gloomrel(Player *player, Creature *_Creature, uint32 send
break; break;
case GOSSIP_ACTION_INFO_DEF+22: case GOSSIP_ACTION_INFO_DEF+22:
player->CLOSE_GOSSIP_MENU(); 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; break;
} }
return true; return true;
@@ -5,23 +5,27 @@
#ifndef DEF_BRD_H #ifndef DEF_BRD_H
#define DEF_BRD_H #define DEF_BRD_H
#define TYPE_RING_OF_LAW 1 enum
#define TYPE_VAULT 2 {
#define TYPE_BAR 3 TYPE_RING_OF_LAW = 1,
#define TYPE_TOMB_OF_SEVEN 4 TYPE_VAULT = 2,
#define TYPE_LYCEUM 5 TYPE_BAR = 3,
#define TYPE_IRON_HALL 6 TYPE_TOMB_OF_SEVEN = 4,
TYPE_LYCEUM = 5,
TYPE_IRON_HALL = 6,
#define DATA_EMPEROR 10 DATA_EMPEROR = 10,
#define DATA_PHALANX 11 DATA_PHALANX = 11,
#define DATA_ARENA1 12 DATA_ARENA1 = 12,
#define DATA_ARENA2 13 DATA_ARENA2 = 13,
#define DATA_ARENA3 14 DATA_ARENA3 = 14,
#define DATA_ARENA4 15 DATA_ARENA4 = 15,
#define DATA_GO_BAR_KEG 16 DATA_GO_BAR_KEG = 16,
#define DATA_GO_BAR_KEG_TRAP 17 DATA_GO_BAR_KEG_TRAP = 17,
#define DATA_GO_BAR_DOOR 18 DATA_GO_BAR_DOOR = 18,
DATA_GO_CHALICE = 19
};
#endif #endif
@@ -32,28 +32,34 @@ update `instance_template` set `script`='instance_blackrock_depths' where `map`=
#include "precompiled.h" #include "precompiled.h"
#include "def_blackrock_depths.h" #include "def_blackrock_depths.h"
#define ENCOUNTERS 6 enum
{
ENCOUNTERS = 6,
#define C_EMPEROR 9019 NPC_EMPEROR = 9019,
#define C_PHALANX 9502 NPC_PHALANX = 9502,
#define GO_ARENA1 161525 GO_ARENA1 = 161525,
#define GO_ARENA2 161522 GO_ARENA2 = 161522,
#define GO_ARENA3 161524 GO_ARENA3 = 161524,
#define GO_ARENA4 161523 GO_ARENA4 = 161523,
#define GO_SHADOW_LOCK 161460 GO_SHADOW_LOCK = 161460,
#define GO_SHADOW_MECHANISM 161461 GO_SHADOW_MECHANISM = 161461,
#define GO_SHADOW_GIANT_DOOR 157923 GO_SHADOW_GIANT_DOOR = 157923,
#define GO_SHADOW_DUMMY 161516 GO_SHADOW_DUMMY = 161516,
#define GO_BAR_KEG_SHOT 170607 GO_BAR_KEG_SHOT = 170607,
#define GO_BAR_KEG_TRAP 171941 GO_BAR_KEG_TRAP = 171941,
#define GO_BAR_DOOR 170571 GO_BAR_DOOR = 170571,
#define GO_TOMB_ENTER 170576 GO_TOMB_ENTER = 170576,
#define GO_TOMB_EXIT 170577 GO_TOMB_EXIT = 170577,
#define GO_LYCEUM 170558 GO_LYCEUM = 170558,
#define GO_GOLEM_ROOM_N 170573 GO_GOLEM_ROOM_N = 170573,
#define GO_GOLEM_ROOM_S 170574 GO_GOLEM_ROOM_S = 170574,
#define GO_THONE_ROOM 170575 GO_THONE_ROOM = 170575,
GO_SPECTRAL_CHALICE = 164869,
GO_CHEST_SEVEN = 169243
};
struct TRINITY_DLL_DECL instance_blackrock_depths : public ScriptedInstance 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()) switch(creature->GetEntry())
{ {
case C_EMPEROR: EmperorGUID = creature->GetGUID(); break; case NPC_EMPEROR: EmperorGUID = creature->GetGUID(); break;
case C_PHALANX: PhalanxGUID = creature->GetGUID(); break; case NPC_PHALANX: PhalanxGUID = creature->GetGUID(); break;
} }
} }
@@ -5,30 +5,34 @@
#ifndef DEF_HYJAL_H #ifndef DEF_HYJAL_H
#define 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" #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 #endif
@@ -662,6 +662,8 @@ void hyjalAI::Retreat()
{ {
if(pInstance) if(pInstance)
{ {
pInstance->SetData(TYPE_RETREAT,SPECIAL);
if(Faction == 0) if(Faction == 0)
{ {
pInstance->SetData(DATA_ALLIANCE_RETREAT, 1); pInstance->SetData(DATA_ALLIANCE_RETREAT, 1);
@@ -25,8 +25,12 @@ EndScriptData */
#include "def_hyjal.h" #include "def_hyjal.h"
#include "hyjal_trash.h" #include "hyjal_trash.h"
#define ENCOUNTERS 5 enum
{
ENCOUNTERS = 5,
GO_ANCIENT_GEM = 185557
};
/* Battle of Mount Hyjal encounters: /* Battle of Mount Hyjal encounters:
0 - Rage Winterchill event 0 - Rage Winterchill event
1 - Anetheron event 1 - Anetheron event
@@ -42,6 +46,8 @@ struct TRINITY_DLL_DECL instance_mount_hyjal : public ScriptedInstance
uint32 Encounters[ENCOUNTERS]; uint32 Encounters[ENCOUNTERS];
std::string str_data; std::string str_data;
std::list<uint64> m_uiAncientGemGUID;
uint64 RageWinterchill; uint64 RageWinterchill;
uint64 Anetheron; uint64 Anetheron;
uint64 Kazrogal; uint64 Kazrogal;
@@ -64,6 +70,8 @@ struct TRINITY_DLL_DECL instance_mount_hyjal : public ScriptedInstance
void Initialize() void Initialize()
{ {
m_uiAncientGemGUID.clear();
RageWinterchill = 0; RageWinterchill = 0;
Anetheron = 0; Anetheron = 0;
Kazrogal = 0; Kazrogal = 0;
@@ -83,7 +91,6 @@ struct TRINITY_DLL_DECL instance_mount_hyjal : public ScriptedInstance
hordeRetreat = 0; hordeRetreat = 0;
allianceRetreat = 0; allianceRetreat = 0;
} }
bool IsEncounterInProgress() const bool IsEncounterInProgress() const
@@ -112,6 +119,9 @@ struct TRINITY_DLL_DECL instance_mount_hyjal : public ScriptedInstance
else else
go->SetGoState(GO_STATE_READY); go->SetGoState(GO_STATE_READY);
break; 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--; else Trash--;
UpdateWorldState(WORLD_STATE_ENEMYCOUNT, Trash); UpdateWorldState(WORLD_STATE_ENEMYCOUNT, Trash);
break; 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: case DATA_ALLIANCE_RETREAT:
allianceRetreat = data; allianceRetreat = data;
OpenDoor(HordeGate,true); OpenDoor(HordeGate,true);
@@ -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) void SetData(uint32 uiType, uint32 uiData)
{ {
debug_log("TSCR: Instance Ramparts: SetData received for type %u with data %u",uiType,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: case TYPE_VAZRUDEN:
if (uiData == DONE && m_uiEncounter[1] == DONE) if (uiData == DONE && m_uiEncounter[1] == DONE)
DoRespawnChest(); DoRespawnGameObject(instance->IsHeroic() ? m_uiChestHGUID : m_uiChestNGUID, HOUR*IN_MILISECONDS);
m_uiEncounter[0] = uiData; m_uiEncounter[0] = uiData;
break; break;
case TYPE_NAZAN: case TYPE_NAZAN:
if (uiData == DONE && m_uiEncounter[0] == DONE) if (uiData == DONE && m_uiEncounter[0] == DONE)
DoRespawnChest(); DoRespawnGameObject(instance->IsHeroic() ? m_uiChestHGUID : m_uiChestNGUID, HOUR*IN_MILISECONDS);
m_uiEncounter[1] = uiData; m_uiEncounter[1] = uiData;
break; break;
} }
@@ -29,8 +29,22 @@ EndContentData */
#include "precompiled.h" #include "precompiled.h"
#include "def_shattered_halls.h" #include "def_shattered_halls.h"
#define ENTRY_LEFT_HEAD 19523 enum
#define ENTRY_RIGHT_HEAD 19524 {
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 struct Yell
{ {
@@ -40,61 +54,50 @@ struct Yell
static Yell GoCombat[]= static Yell GoCombat[]=
{ {
{-1540018, ENTRY_LEFT_HEAD}, {-1540018, NPC_LEFT_HEAD},
{-1540019, ENTRY_LEFT_HEAD}, {-1540019, NPC_LEFT_HEAD},
{-1540020, ENTRY_LEFT_HEAD}, {-1540020, NPC_LEFT_HEAD},
}; };
static Yell GoCombatDelay[]= static Yell GoCombatDelay[]=
{ {
{-1540021, ENTRY_RIGHT_HEAD}, {-1540021, NPC_RIGHT_HEAD},
{-1540022, ENTRY_RIGHT_HEAD}, {-1540022, NPC_RIGHT_HEAD},
{-1540023, ENTRY_RIGHT_HEAD}, {-1540023, NPC_RIGHT_HEAD},
}; };
static Yell Threat[]= static Yell Threat[]=
{ {
{-1540024, ENTRY_LEFT_HEAD}, {-1540024, NPC_LEFT_HEAD},
{-1540025, ENTRY_RIGHT_HEAD}, {-1540025, NPC_RIGHT_HEAD},
{-1540026, ENTRY_LEFT_HEAD}, {-1540026, NPC_LEFT_HEAD},
{-1540027, ENTRY_LEFT_HEAD}, {-1540027, NPC_LEFT_HEAD},
}; };
static Yell ThreatDelay1[]= static Yell ThreatDelay1[]=
{ {
{-1540028, ENTRY_RIGHT_HEAD}, {-1540028, NPC_RIGHT_HEAD},
{-1540029, ENTRY_LEFT_HEAD}, {-1540029, NPC_LEFT_HEAD},
{-1540030, ENTRY_RIGHT_HEAD}, {-1540030, NPC_RIGHT_HEAD},
{-1540031, ENTRY_RIGHT_HEAD}, {-1540031, NPC_RIGHT_HEAD},
}; };
static Yell ThreatDelay2[]= static Yell ThreatDelay2[]=
{ {
{-1540032, ENTRY_LEFT_HEAD}, {-1540032, NPC_LEFT_HEAD},
{-1540033, ENTRY_RIGHT_HEAD}, {-1540033, NPC_RIGHT_HEAD},
{-1540034, ENTRY_LEFT_HEAD}, {-1540034, NPC_LEFT_HEAD},
{-1540035, ENTRY_LEFT_HEAD}, {-1540035, NPC_LEFT_HEAD},
}; };
static Yell Killing[]= static Yell Killing[]=
{ {
{-1540036, ENTRY_LEFT_HEAD}, {-1540036, NPC_LEFT_HEAD},
{-1540037, ENTRY_RIGHT_HEAD}, {-1540037, NPC_RIGHT_HEAD},
}; };
static Yell KillingDelay[]= static Yell KillingDelay[]=
{ {
{-1540038, ENTRY_RIGHT_HEAD}, {-1540038, NPC_RIGHT_HEAD},
{-1000000, ENTRY_LEFT_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 struct TRINITY_DLL_DECL mob_omrogg_headsAI : public ScriptedAI
{ {
mob_omrogg_headsAI(Creature *c) : ScriptedAI(c) {} mob_omrogg_headsAI(Creature *c) : ScriptedAI(c) {}
@@ -102,12 +105,15 @@ struct TRINITY_DLL_DECL mob_omrogg_headsAI : public ScriptedAI
bool DeathYell; bool DeathYell;
uint32 Death_Timer; uint32 Death_Timer;
void Reset() {} void Reset()
{
Death_Timer = 4000;
DeathYell = false;
}
void EnterCombat(Unit* who) { } void EnterCombat(Unit* who) { }
void DoDeathYell() void DoDeathYell()
{ {
Death_Timer = 4000;
DeathYell = true; DeathYell = true;
} }
@@ -119,7 +125,8 @@ struct TRINITY_DLL_DECL mob_omrogg_headsAI : public ScriptedAI
if (Death_Timer < diff) if (Death_Timer < diff)
{ {
DoScriptText(YELL_DIE_R, m_creature); DoScriptText(YELL_DIE_R, m_creature);
DeathYell = false; Death_Timer = false;
m_creature->setDeathState(JUST_DIED);
}else Death_Timer -= diff; }else Death_Timer -= diff;
} }
}; };
@@ -128,6 +135,8 @@ struct TRINITY_DLL_DECL boss_warbringer_omroggAI : public ScriptedAI
{ {
boss_warbringer_omroggAI(Creature *c) : ScriptedAI(c) boss_warbringer_omroggAI(Creature *c) : ScriptedAI(c)
{ {
LeftHeadGUID = 0;
RightHeadGUID = 0;
pInstance = c->GetInstanceData(); pInstance = c->GetInstanceData();
HeroicMode = m_creature->GetMap()->IsHeroic(); HeroicMode = m_creature->GetMap()->IsHeroic();
} }
@@ -135,8 +144,8 @@ struct TRINITY_DLL_DECL boss_warbringer_omroggAI : public ScriptedAI
ScriptedInstance* pInstance; ScriptedInstance* pInstance;
bool HeroicMode; bool HeroicMode;
uint64 LeftHead; uint64 LeftHeadGUID;
uint64 RightHead; uint64 RightHeadGUID;
int iaggro; int iaggro;
int ithreat; int ithreat;
int ikilling; int ikilling;
@@ -156,9 +165,18 @@ struct TRINITY_DLL_DECL boss_warbringer_omroggAI : public ScriptedAI
void Reset() 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; AggroYell = false;
ThreatYell = false; ThreatYell = false;
@@ -182,35 +200,32 @@ struct TRINITY_DLL_DECL boss_warbringer_omroggAI : public ScriptedAI
void DoYellForThreat() void DoYellForThreat()
{ {
if (LeftHead && RightHead) 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; 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; Delay_Timer = 3500;
ThreatYell = true; ThreatYell = true;
} }
}
void EnterCombat(Unit *who) void EnterCombat(Unit *who)
{ {
DoSpawnCreature(ENTRY_LEFT_HEAD,0,0,0,0,TEMPSUMMON_TIMED_DESPAWN,90000); DoSpawnCreature(NPC_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_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; iaggro = rand()%3;
DoScriptText(GoCombat[iaggro].id, Left); DoScriptText(GoCombat[iaggro].id, pLeftHead);
Delay_Timer = 3500; Delay_Timer = 3500;
AggroYell = true; AggroYell = true;
@@ -222,11 +237,11 @@ struct TRINITY_DLL_DECL boss_warbringer_omroggAI : public ScriptedAI
void JustSummoned(Creature *summoned) void JustSummoned(Creature *summoned)
{ {
if (summoned->GetEntry() == ENTRY_LEFT_HEAD) if (summoned->GetEntry() == NPC_LEFT_HEAD)
LeftHead = summoned->GetGUID(); LeftHeadGUID = summoned->GetGUID();
if (summoned->GetEntry() == ENTRY_RIGHT_HEAD) if (summoned->GetEntry() == NPC_RIGHT_HEAD)
RightHead = summoned->GetGUID(); RightHeadGUID = summoned->GetGUID();
//summoned->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); //summoned->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
//summoned->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); //summoned->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
@@ -235,17 +250,16 @@ struct TRINITY_DLL_DECL boss_warbringer_omroggAI : public ScriptedAI
void KilledUnit(Unit* victim) void KilledUnit(Unit* victim)
{ {
if (LeftHead && RightHead) 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; return;
ikilling = rand()%2; ikilling = rand()%2;
Unit *source = (Left->GetEntry() == Killing[ikilling].creature ? Left : Right); Unit *source = (pLeftHead->GetEntry() == Killing[ikilling].creature ? pLeftHead : pRightHead);
switch(ikilling) switch(ikilling)
{ {
@@ -260,22 +274,18 @@ struct TRINITY_DLL_DECL boss_warbringer_omroggAI : public ScriptedAI
break; break;
} }
} }
}
void JustDied(Unit* Killer) void JustDied(Unit* Killer)
{ {
if (LeftHead && RightHead) 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; 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) if (pInstance)
pInstance->SetData(TYPE_OMROGG, DONE); pInstance->SetData(TYPE_OMROGG, DONE);
@@ -287,24 +297,21 @@ struct TRINITY_DLL_DECL boss_warbringer_omroggAI : public ScriptedAI
{ {
Delay_Timer = 3500; Delay_Timer = 3500;
if (!LeftHead || !RightHead) Unit* pLeftHead = Unit::GetUnit(*m_creature,LeftHeadGUID);
return; Unit* pRightHead = Unit::GetUnit(*m_creature,RightHeadGUID);
Unit *Left = Unit::GetUnit(*m_creature,LeftHead); if (!pLeftHead || !pRightHead)
Unit *Right = Unit::GetUnit(*m_creature,RightHead);
if (!Left || !Right)
return; return;
if (AggroYell) if (AggroYell)
{ {
DoScriptText(GoCombatDelay[iaggro].id, Right); DoScriptText(GoCombatDelay[iaggro].id, pRightHead);
AggroYell = false; AggroYell = false;
} }
if (ThreatYell2) 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); DoScriptText(ThreatDelay2[ithreat].id, source);
ThreatYell2 = false; ThreatYell2 = false;
@@ -312,7 +319,7 @@ struct TRINITY_DLL_DECL boss_warbringer_omroggAI : public ScriptedAI
if (ThreatYell) 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); DoScriptText(ThreatDelay1[ithreat].id, source);
ThreatYell = false; ThreatYell = false;
@@ -321,7 +328,7 @@ struct TRINITY_DLL_DECL boss_warbringer_omroggAI : public ScriptedAI
if (KillingYell) 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); DoScriptText(KillingDelay[ikilling].id, source);
KillingYell = false; KillingYell = false;
@@ -65,6 +65,7 @@ struct TRINITY_DLL_DECL instance_karazhan : public ScriptedInstance
uint64 NetherspaceDoor; // Door at Malchezaar uint64 NetherspaceDoor; // Door at Malchezaar
uint64 MastersTerraceDoor[2]; uint64 MastersTerraceDoor[2];
uint64 ImageGUID; uint64 ImageGUID;
uint64 DustCoveredChest;
void Initialize() void Initialize()
{ {
@@ -91,6 +92,7 @@ struct TRINITY_DLL_DECL instance_karazhan : public ScriptedInstance
MastersTerraceDoor[0]= 0; MastersTerraceDoor[0]= 0;
MastersTerraceDoor[1]= 0; MastersTerraceDoor[1]= 0;
ImageGUID = 0; ImageGUID = 0;
DustCoveredChest = 0;
} }
bool IsEncounterInProgress() const 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_SHADEOFARAN_EVENT: Encounters[6] = data; break;
case DATA_TERESTIAN_EVENT: Encounters[7] = data; break; case DATA_TERESTIAN_EVENT: Encounters[7] = data; break;
case DATA_NETHERSPITE_EVENT: Encounters[8] = 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_MALCHEZZAR_EVENT: Encounters[10] = data; break;
case DATA_NIGHTBANE_EVENT: case DATA_NIGHTBANE_EVENT:
if (Encounters[11] == DONE) if (Encounters[11] == DONE)
@@ -231,6 +237,7 @@ struct TRINITY_DLL_DECL instance_karazhan : public ScriptedInstance
else else
go->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_LOCKED); go->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_LOCKED);
break; break;
case 185119: DustCoveredChest = go->GetGUID(); break;
} }
switch(OperaEvent) switch(OperaEvent)
@@ -43,7 +43,7 @@ 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 Lucifron, Magmadar, Gehennas, Garr, Geddon, Shazzrah, Sulfuron, Golemagg, Domo, Ragnaros, FlamewakerPriest;
uint64 RuneKoro, RuneZeth, RuneMazj, RuneTheri, RuneBlaz, RuneKress, RuneMohn; uint64 RuneKoro, RuneZeth, RuneMazj, RuneTheri, RuneBlaz, RuneKress, RuneMohn, m_uiFirelordCacheGUID;;
//If all Bosses are dead. //If all Bosses are dead.
bool IsBossDied[9]; bool IsBossDied[9];
@@ -72,6 +72,8 @@ struct TRINITY_DLL_DECL instance_molten_core : public ScriptedInstance
RuneKress = 0; RuneKress = 0;
RuneMohn = 0; RuneMohn = 0;
m_uiFirelordCacheGUID = 0;
IsBossDied[0] = false; IsBossDied[0] = false;
IsBossDied[1] = false; IsBossDied[1] = false;
IsBossDied[2] = false; IsBossDied[2] = false;
@@ -85,8 +87,6 @@ struct TRINITY_DLL_DECL instance_molten_core : public ScriptedInstance
for(uint8 i = 0; i < ENCOUNTERS; i++) for(uint8 i = 0; i < ENCOUNTERS; i++)
Encounter[i] = NOT_STARTED; Encounter[i] = NOT_STARTED;
} }
bool IsEncounterInProgress() const bool IsEncounterInProgress() const
@@ -120,6 +120,9 @@ struct TRINITY_DLL_DECL instance_molten_core : public ScriptedInstance
case 176957: //Gehennas case 176957: //Gehennas
RuneMohn = go->GetGUID(); RuneMohn = go->GetGUID();
break; break;
case 179703:
m_uiFirelordCacheGUID = go->GetGUID(); //when majordomo event == DONE DoRespawnGameObject(m_uiFirelordCacheGUID,);
break;
} }
} }
@@ -57,10 +57,14 @@ const MinionData minionData[] =
{0, 0,} {0, 0,}
}; };
#define GO_GOTHIK_GATE 181170 enum
#define GO_HORSEMEN_CHEST 181366 {
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 HeiganPos[2] = {2796, -3707};
const float HeiganEruptionSlope[3] = const float HeiganEruptionSlope[3] =