*added script for Tomb of the Seven event in Blackrock Depths
--HG-- branch : trunk
This commit is contained in:
@@ -24,17 +24,15 @@ EndScriptData */
|
|||||||
#include "precompiled.h"
|
#include "precompiled.h"
|
||||||
#include "def_blackrock_depths.h"
|
#include "def_blackrock_depths.h"
|
||||||
|
|
||||||
#define FACTION_NEUTRAL 734
|
|
||||||
#define FACTION_HOSTILE 754
|
|
||||||
|
|
||||||
#define SPELL_SUNDERARMOR 24317
|
#define SPELL_SUNDERARMOR 24317
|
||||||
#define SPELL_SHIELDBLOCK 12169
|
#define SPELL_SHIELDBLOCK 12169
|
||||||
#define SPELL_STRIKE 15580
|
#define SPELL_STRIKE 15580
|
||||||
|
|
||||||
struct TRINITY_DLL_DECL boss_angerrelAI : public ScriptedAI
|
struct TRINITY_DLL_DECL boss_angerrelAI : public ScriptedAI
|
||||||
{
|
{
|
||||||
boss_angerrelAI(Creature *c) : ScriptedAI(c) {}
|
boss_angerrelAI(Creature *c) : ScriptedAI(c) {pInstance = c->GetInstanceData();}
|
||||||
|
|
||||||
|
ScriptedInstance* pInstance;
|
||||||
uint32 SunderArmor_Timer;
|
uint32 SunderArmor_Timer;
|
||||||
uint32 ShieldBlock_Timer;
|
uint32 ShieldBlock_Timer;
|
||||||
uint32 Strike_Timer;
|
uint32 Strike_Timer;
|
||||||
@@ -50,6 +48,25 @@ struct TRINITY_DLL_DECL boss_angerrelAI : public ScriptedAI
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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)
|
void UpdateAI(const uint32 diff)
|
||||||
{
|
{
|
||||||
if (!UpdateVictim())
|
if (!UpdateVictim())
|
||||||
@@ -91,8 +108,9 @@ CreatureAI* GetAI_boss_angerrel(Creature *_Creature)
|
|||||||
|
|
||||||
struct TRINITY_DLL_DECL boss_doperelAI : public ScriptedAI
|
struct TRINITY_DLL_DECL boss_doperelAI : public ScriptedAI
|
||||||
{
|
{
|
||||||
boss_doperelAI(Creature *c) : ScriptedAI(c) {}
|
boss_doperelAI(Creature *c) : ScriptedAI(c) {pInstance = c->GetInstanceData();}
|
||||||
|
|
||||||
|
ScriptedInstance* pInstance;
|
||||||
uint32 SinisterStrike_Timer;
|
uint32 SinisterStrike_Timer;
|
||||||
uint32 BackStab_Timer;
|
uint32 BackStab_Timer;
|
||||||
uint32 Gouge_Timer;
|
uint32 Gouge_Timer;
|
||||||
@@ -108,6 +126,25 @@ struct TRINITY_DLL_DECL boss_doperelAI : public ScriptedAI
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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)
|
void UpdateAI(const uint32 diff)
|
||||||
{
|
{
|
||||||
if (!UpdateVictim())
|
if (!UpdateVictim())
|
||||||
@@ -149,8 +186,9 @@ CreatureAI* GetAI_boss_doperel(Creature *_Creature)
|
|||||||
|
|
||||||
struct TRINITY_DLL_DECL boss_haterelAI : public ScriptedAI
|
struct TRINITY_DLL_DECL boss_haterelAI : public ScriptedAI
|
||||||
{
|
{
|
||||||
boss_haterelAI(Creature *c) : ScriptedAI(c) {}
|
boss_haterelAI(Creature *c) : ScriptedAI(c) {pInstance = c->GetInstanceData();}
|
||||||
|
|
||||||
|
ScriptedInstance* pInstance;
|
||||||
uint32 ShadowBolt_Timer;
|
uint32 ShadowBolt_Timer;
|
||||||
uint32 ManaBurn_Timer;
|
uint32 ManaBurn_Timer;
|
||||||
uint32 ShadowShield_Timer;
|
uint32 ShadowShield_Timer;
|
||||||
@@ -168,6 +206,25 @@ struct TRINITY_DLL_DECL boss_haterelAI : public ScriptedAI
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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)
|
void UpdateAI(const uint32 diff)
|
||||||
{
|
{
|
||||||
if (!UpdateVictim())
|
if (!UpdateVictim())
|
||||||
@@ -221,8 +278,9 @@ CreatureAI* GetAI_boss_haterel(Creature *_Creature)
|
|||||||
|
|
||||||
struct TRINITY_DLL_DECL boss_vilerelAI : public ScriptedAI
|
struct TRINITY_DLL_DECL boss_vilerelAI : public ScriptedAI
|
||||||
{
|
{
|
||||||
boss_vilerelAI(Creature *c) : ScriptedAI(c) {}
|
boss_vilerelAI(Creature *c) : ScriptedAI(c) {pInstance = c->GetInstanceData();}
|
||||||
|
|
||||||
|
ScriptedInstance* pInstance;
|
||||||
uint32 MindBlast_Timer;
|
uint32 MindBlast_Timer;
|
||||||
uint32 Heal_Timer;
|
uint32 Heal_Timer;
|
||||||
uint32 PrayerOfHealing_Timer;
|
uint32 PrayerOfHealing_Timer;
|
||||||
@@ -240,6 +298,25 @@ struct TRINITY_DLL_DECL boss_vilerelAI : public ScriptedAI
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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)
|
void UpdateAI(const uint32 diff)
|
||||||
{
|
{
|
||||||
if (!UpdateVictim())
|
if (!UpdateVictim())
|
||||||
@@ -290,8 +367,9 @@ CreatureAI* GetAI_boss_vilerel(Creature *_Creature)
|
|||||||
|
|
||||||
struct TRINITY_DLL_DECL boss_seethrelAI : public ScriptedAI
|
struct TRINITY_DLL_DECL boss_seethrelAI : public ScriptedAI
|
||||||
{
|
{
|
||||||
boss_seethrelAI(Creature *c) : ScriptedAI(c) {}
|
boss_seethrelAI(Creature *c) : ScriptedAI(c) {pInstance = c->GetInstanceData();}
|
||||||
|
|
||||||
|
ScriptedInstance* pInstance;
|
||||||
uint32 FrostArmor_Timer;
|
uint32 FrostArmor_Timer;
|
||||||
uint32 Frostbolt_Timer;
|
uint32 Frostbolt_Timer;
|
||||||
uint32 Blizzard_Timer;
|
uint32 Blizzard_Timer;
|
||||||
@@ -313,6 +391,25 @@ struct TRINITY_DLL_DECL boss_seethrelAI : public ScriptedAI
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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)
|
void UpdateAI(const uint32 diff)
|
||||||
{
|
{
|
||||||
if (!UpdateVictim())
|
if (!UpdateVictim())
|
||||||
@@ -370,8 +467,9 @@ CreatureAI* GetAI_boss_seethrel(Creature *_Creature)
|
|||||||
|
|
||||||
struct TRINITY_DLL_DECL boss_gloomrelAI : public ScriptedAI
|
struct TRINITY_DLL_DECL boss_gloomrelAI : public ScriptedAI
|
||||||
{
|
{
|
||||||
boss_gloomrelAI(Creature *c) : ScriptedAI(c) {}
|
boss_gloomrelAI(Creature *c) : ScriptedAI(c) {pInstance = c->GetInstanceData();}
|
||||||
|
|
||||||
|
ScriptedInstance* pInstance;
|
||||||
uint32 Hamstring_Timer;
|
uint32 Hamstring_Timer;
|
||||||
uint32 Cleave_Timer;
|
uint32 Cleave_Timer;
|
||||||
uint32 MortalStrike_Timer;
|
uint32 MortalStrike_Timer;
|
||||||
@@ -382,13 +480,32 @@ struct TRINITY_DLL_DECL boss_gloomrelAI : public ScriptedAI
|
|||||||
Cleave_Timer = 6000;
|
Cleave_Timer = 6000;
|
||||||
MortalStrike_Timer = 10000;
|
MortalStrike_Timer = 10000;
|
||||||
|
|
||||||
m_creature->setFaction(FACTION_NEUTRAL);
|
m_creature->setFaction(FACTION_FRIEND);
|
||||||
}
|
}
|
||||||
|
|
||||||
void EnterCombat(Unit *who)
|
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)
|
void UpdateAI(const uint32 diff)
|
||||||
{
|
{
|
||||||
if (!UpdateVictim() )
|
if (!UpdateVictim() )
|
||||||
@@ -475,8 +592,9 @@ bool GossipSelect_boss_gloomrel(Player *player, Creature *_Creature, uint32 send
|
|||||||
|
|
||||||
struct TRINITY_DLL_DECL boss_doomrelAI : public ScriptedAI
|
struct TRINITY_DLL_DECL boss_doomrelAI : public ScriptedAI
|
||||||
{
|
{
|
||||||
boss_doomrelAI(Creature *c) : ScriptedAI(c) {}
|
boss_doomrelAI(Creature *c) : ScriptedAI(c) {pInstance = c->GetInstanceData();}
|
||||||
|
|
||||||
|
ScriptedInstance* pInstance;
|
||||||
uint32 ShadowVolley_Timer;
|
uint32 ShadowVolley_Timer;
|
||||||
uint32 Immolate_Timer;
|
uint32 Immolate_Timer;
|
||||||
uint32 CurseOfWeakness_Timer;
|
uint32 CurseOfWeakness_Timer;
|
||||||
@@ -495,13 +613,37 @@ struct TRINITY_DLL_DECL boss_doomrelAI : public ScriptedAI
|
|||||||
DemonArmor_Timer = 16000;
|
DemonArmor_Timer = 16000;
|
||||||
Voidwalkers = false;
|
Voidwalkers = false;
|
||||||
|
|
||||||
m_creature->setFaction(FACTION_NEUTRAL);
|
m_creature->setFaction(FACTION_FRIEND);
|
||||||
|
if(pInstance)
|
||||||
|
if(pInstance->GetData(DATA_GHOSTKILL) >= 7)
|
||||||
|
m_creature->SetUInt32Value(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_NONE);
|
||||||
|
else
|
||||||
|
m_creature->SetUInt32Value(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
|
||||||
}
|
}
|
||||||
|
|
||||||
void EnterCombat(Unit *who)
|
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 SummonVoidwalkers(Unit* victim)
|
void SummonVoidwalkers(Unit* victim)
|
||||||
{
|
{
|
||||||
Rand = rand()%5;
|
Rand = rand()%5;
|
||||||
@@ -596,8 +738,13 @@ bool GossipSelect_boss_doomrel(Player *player, Creature *_Creature, uint32 sende
|
|||||||
break;
|
break;
|
||||||
case GOSSIP_ACTION_INFO_DEF+2:
|
case GOSSIP_ACTION_INFO_DEF+2:
|
||||||
player->CLOSE_GOSSIP_MENU();
|
player->CLOSE_GOSSIP_MENU();
|
||||||
//start event here, below code just temporary
|
//start event here
|
||||||
_Creature->setFaction(FACTION_HOSTILE);
|
_Creature->setFaction(FACTION_HOSTILE);
|
||||||
|
_Creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_ATTACKABLE_2);
|
||||||
|
_Creature->AI()->AttackStart(player);
|
||||||
|
ScriptedInstance* pInstance = _Creature->GetInstanceData();
|
||||||
|
if(pInstance)
|
||||||
|
pInstance->SetData64(DATA_EVENSTARTER,player->GetGUID());
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@@ -5,6 +5,10 @@
|
|||||||
#ifndef DEF_BRD_H
|
#ifndef DEF_BRD_H
|
||||||
#define DEF_BRD_H
|
#define DEF_BRD_H
|
||||||
|
|
||||||
|
#define FACTION_NEUTRAL 734
|
||||||
|
#define FACTION_HOSTILE 754
|
||||||
|
#define FACTION_FRIEND 35
|
||||||
|
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
TYPE_RING_OF_LAW = 1,
|
TYPE_RING_OF_LAW = 1,
|
||||||
@@ -25,7 +29,10 @@ enum
|
|||||||
DATA_GO_BAR_KEG = 16,
|
DATA_GO_BAR_KEG = 16,
|
||||||
DATA_GO_BAR_KEG_TRAP = 17,
|
DATA_GO_BAR_KEG_TRAP = 17,
|
||||||
DATA_GO_BAR_DOOR = 18,
|
DATA_GO_BAR_DOOR = 18,
|
||||||
DATA_GO_CHALICE = 19
|
DATA_GO_CHALICE = 19,
|
||||||
|
|
||||||
|
DATA_GHOSTKILL = 20,
|
||||||
|
DATA_EVENSTARTER = 21
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
@@ -32,12 +32,21 @@ 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 TIMER_TOMBOFTHESEVEN 15000
|
||||||
|
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
ENCOUNTERS = 6,
|
ENCOUNTERS = 6,
|
||||||
|
|
||||||
NPC_EMPEROR = 9019,
|
NPC_EMPEROR = 9019,
|
||||||
NPC_PHALANX = 9502,
|
NPC_PHALANX = 9502,
|
||||||
|
NPC_ANGERREL = 9035,
|
||||||
|
NPC_DOPEREL = 9040,
|
||||||
|
NPC_HATEREL = 9034,
|
||||||
|
NPC_VILEREL = 9036,
|
||||||
|
NPC_SEETHREL = 9038,
|
||||||
|
NPC_GLOOMREL = 9037,
|
||||||
|
NPC_DOOMREL = 9039,
|
||||||
|
|
||||||
GO_ARENA1 = 161525,
|
GO_ARENA1 = 161525,
|
||||||
GO_ARENA2 = 161522,
|
GO_ARENA2 = 161522,
|
||||||
@@ -88,8 +97,14 @@ struct TRINITY_DLL_DECL instance_blackrock_depths : public ScriptedInstance
|
|||||||
uint64 GoGolemNGUID;
|
uint64 GoGolemNGUID;
|
||||||
uint64 GoGolemSGUID;
|
uint64 GoGolemSGUID;
|
||||||
uint64 GoThoneGUID;
|
uint64 GoThoneGUID;
|
||||||
|
uint64 GoChestGUID;
|
||||||
|
|
||||||
uint32 BarAleCount;
|
uint32 BarAleCount;
|
||||||
|
uint32 GhostKillCount;
|
||||||
|
uint64 TombBossGUIDs[7];
|
||||||
|
uint64 TombEventStarterGUID;
|
||||||
|
uint32 TombTimer;
|
||||||
|
uint32 TombEventCounter;
|
||||||
|
|
||||||
void Initialize()
|
void Initialize()
|
||||||
{
|
{
|
||||||
@@ -113,11 +128,18 @@ struct TRINITY_DLL_DECL instance_blackrock_depths : public ScriptedInstance
|
|||||||
GoGolemNGUID = 0;
|
GoGolemNGUID = 0;
|
||||||
GoGolemSGUID = 0;
|
GoGolemSGUID = 0;
|
||||||
GoThoneGUID = 0;
|
GoThoneGUID = 0;
|
||||||
|
GoChestGUID = 0;
|
||||||
|
|
||||||
BarAleCount = 0;
|
BarAleCount = 0;
|
||||||
|
GhostKillCount = 0;
|
||||||
|
TombEventStarterGUID = 0;
|
||||||
|
TombTimer = TIMER_TOMBOFTHESEVEN;
|
||||||
|
TombEventCounter = 0;
|
||||||
|
|
||||||
for(uint8 i = 0; i < ENCOUNTERS; i++)
|
for(uint8 i = 0; i < ENCOUNTERS; i++)
|
||||||
Encounter[i] = NOT_STARTED;
|
Encounter[i] = NOT_STARTED;
|
||||||
|
for(uint8 i = 0; i < 7; i++)
|
||||||
|
TombBossGUIDs[i] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void OnCreatureCreate(Creature *creature, bool add)
|
void OnCreatureCreate(Creature *creature, bool add)
|
||||||
@@ -126,6 +148,13 @@ struct TRINITY_DLL_DECL instance_blackrock_depths : public ScriptedInstance
|
|||||||
{
|
{
|
||||||
case NPC_EMPEROR: EmperorGUID = creature->GetGUID(); break;
|
case NPC_EMPEROR: EmperorGUID = creature->GetGUID(); break;
|
||||||
case NPC_PHALANX: PhalanxGUID = creature->GetGUID(); break;
|
case NPC_PHALANX: PhalanxGUID = creature->GetGUID(); break;
|
||||||
|
case NPC_DOOMREL: TombBossGUIDs[0] = creature->GetGUID(); break;
|
||||||
|
case NPC_DOPEREL: TombBossGUIDs[1] = creature->GetGUID(); break;
|
||||||
|
case NPC_HATEREL: TombBossGUIDs[2] = creature->GetGUID(); break;
|
||||||
|
case NPC_VILEREL: TombBossGUIDs[3] = creature->GetGUID(); break;
|
||||||
|
case NPC_SEETHREL: TombBossGUIDs[4] = creature->GetGUID(); break;
|
||||||
|
case NPC_GLOOMREL: TombBossGUIDs[5] = creature->GetGUID(); break;
|
||||||
|
case NPC_ANGERREL: TombBossGUIDs[6] = creature->GetGUID(); break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -145,11 +174,34 @@ struct TRINITY_DLL_DECL instance_blackrock_depths : public ScriptedInstance
|
|||||||
case GO_BAR_KEG_TRAP: GoBarKegTrapGUID = go->GetGUID(); break;
|
case GO_BAR_KEG_TRAP: GoBarKegTrapGUID = go->GetGUID(); break;
|
||||||
case GO_BAR_DOOR: GoBarDoorGUID = go->GetGUID(); break;
|
case GO_BAR_DOOR: GoBarDoorGUID = go->GetGUID(); break;
|
||||||
case GO_TOMB_ENTER: GoTombEnterGUID = go->GetGUID(); break;
|
case GO_TOMB_ENTER: GoTombEnterGUID = go->GetGUID(); break;
|
||||||
case GO_TOMB_EXIT: GoTombExitGUID = go->GetGUID(); break;
|
case GO_TOMB_EXIT:
|
||||||
|
GoTombExitGUID = go->GetGUID();
|
||||||
|
if(GhostKillCount >= 7)
|
||||||
|
HandleGameObject(0, true, go);
|
||||||
|
else
|
||||||
|
HandleGameObject(0, false, go);
|
||||||
|
break;
|
||||||
case GO_LYCEUM: GoLyceumGUID = go->GetGUID(); break;
|
case GO_LYCEUM: GoLyceumGUID = go->GetGUID(); break;
|
||||||
case GO_GOLEM_ROOM_N: GoGolemNGUID = go->GetGUID(); break;
|
case GO_GOLEM_ROOM_N: GoGolemNGUID = go->GetGUID(); break;
|
||||||
case GO_GOLEM_ROOM_S: GoGolemSGUID = go->GetGUID(); break;
|
case GO_GOLEM_ROOM_S: GoGolemSGUID = go->GetGUID(); break;
|
||||||
case GO_THONE_ROOM: GoThoneGUID = go->GetGUID(); break;
|
case GO_THONE_ROOM: GoThoneGUID = go->GetGUID(); break;
|
||||||
|
case GO_CHEST_SEVEN: GoChestGUID = go->GetGUID(); break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void SetData64(uint32 type, uint64 data)
|
||||||
|
{
|
||||||
|
debug_log("TSCR: Instance Blackrock Depths: SetData64 update (Type: %u Data %u)", type, data);
|
||||||
|
|
||||||
|
switch(type)
|
||||||
|
{
|
||||||
|
case DATA_EVENSTARTER:
|
||||||
|
TombEventStarterGUID = data;
|
||||||
|
if(!TombEventStarterGUID)
|
||||||
|
TombOfSevenReset();//reset
|
||||||
|
else
|
||||||
|
TombOfSevenStart();//start
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -180,15 +232,18 @@ struct TRINITY_DLL_DECL instance_blackrock_depths : public ScriptedInstance
|
|||||||
case TYPE_IRON_HALL:
|
case TYPE_IRON_HALL:
|
||||||
Encounter[5] = data;
|
Encounter[5] = data;
|
||||||
break;
|
break;
|
||||||
|
case DATA_GHOSTKILL:
|
||||||
|
GhostKillCount += data;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (data == DONE)
|
if (data == DONE || GhostKillCount >= 7)
|
||||||
{
|
{
|
||||||
OUT_SAVE_INST_DATA;
|
OUT_SAVE_INST_DATA;
|
||||||
|
|
||||||
std::ostringstream saveStream;
|
std::ostringstream saveStream;
|
||||||
saveStream << Encounter[0] << " " << Encounter[1] << " " << Encounter[2] << " "
|
saveStream << Encounter[0] << " " << Encounter[1] << " " << Encounter[2] << " "
|
||||||
<< Encounter[3] << " " << Encounter[4] << " " << Encounter[5];
|
<< Encounter[3] << " " << Encounter[4] << " " << Encounter[5] << " " << GhostKillCount;
|
||||||
|
|
||||||
str_data = saveStream.str();
|
str_data = saveStream.str();
|
||||||
|
|
||||||
@@ -216,6 +271,8 @@ struct TRINITY_DLL_DECL instance_blackrock_depths : public ScriptedInstance
|
|||||||
return Encounter[4];
|
return Encounter[4];
|
||||||
case TYPE_IRON_HALL:
|
case TYPE_IRON_HALL:
|
||||||
return Encounter[5];
|
return Encounter[5];
|
||||||
|
case DATA_GHOSTKILL:
|
||||||
|
return GhostKillCount;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -242,6 +299,8 @@ struct TRINITY_DLL_DECL instance_blackrock_depths : public ScriptedInstance
|
|||||||
return GoBarKegTrapGUID;
|
return GoBarKegTrapGUID;
|
||||||
case DATA_GO_BAR_DOOR:
|
case DATA_GO_BAR_DOOR:
|
||||||
return GoBarDoorGUID;
|
return GoBarDoorGUID;
|
||||||
|
case DATA_EVENSTARTER:
|
||||||
|
return TombEventStarterGUID;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -263,14 +322,90 @@ struct TRINITY_DLL_DECL instance_blackrock_depths : public ScriptedInstance
|
|||||||
|
|
||||||
std::istringstream loadStream(in);
|
std::istringstream loadStream(in);
|
||||||
loadStream >> Encounter[0] >> Encounter[1] >> Encounter[2] >> Encounter[3]
|
loadStream >> Encounter[0] >> Encounter[1] >> Encounter[2] >> Encounter[3]
|
||||||
>> Encounter[4] >> Encounter[5];
|
>> Encounter[4] >> Encounter[5] >> GhostKillCount;
|
||||||
|
|
||||||
for(uint8 i = 0; i < ENCOUNTERS; ++i)
|
for(uint8 i = 0; i < ENCOUNTERS; ++i)
|
||||||
if (Encounter[i] == IN_PROGRESS)
|
if (Encounter[i] == IN_PROGRESS)
|
||||||
Encounter[i] = NOT_STARTED;
|
Encounter[i] = NOT_STARTED;
|
||||||
|
if(GhostKillCount > 0 && GhostKillCount < 7)
|
||||||
|
GhostKillCount = 0;//reset tomb of seven event
|
||||||
|
if(GhostKillCount > 7)
|
||||||
|
GhostKillCount = 7;
|
||||||
|
|
||||||
OUT_LOAD_INST_DATA_COMPLETE;
|
OUT_LOAD_INST_DATA_COMPLETE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void TombOfSevenEvent()
|
||||||
|
{
|
||||||
|
if(GhostKillCount < 7 && TombBossGUIDs[TombEventCounter])
|
||||||
|
{
|
||||||
|
if(Creature* boss = instance->GetCreature(TombBossGUIDs[TombEventCounter]))
|
||||||
|
{
|
||||||
|
boss->setFaction(FACTION_HOSTILE);
|
||||||
|
boss->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_ATTACKABLE_2);
|
||||||
|
if(Unit* target = boss->SelectNearestTarget(500))
|
||||||
|
boss->AI()->AttackStart(target);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void TombOfSevenReset()
|
||||||
|
{
|
||||||
|
HandleGameObject(GoTombExitGUID,false);//event reseted, close exit door
|
||||||
|
HandleGameObject(GoTombEnterGUID,true);//event reseted, open entrance door
|
||||||
|
for(uint8 i = 0; i < 7; i++)
|
||||||
|
{
|
||||||
|
if(Creature* boss = instance->GetCreature(TombBossGUIDs[i]))
|
||||||
|
{
|
||||||
|
if(!boss->isAlive())
|
||||||
|
{//do not call EnterEvadeMode(), it will create infinit loops
|
||||||
|
boss->Respawn();
|
||||||
|
boss->RemoveAllAuras();
|
||||||
|
boss->DeleteThreatList();
|
||||||
|
boss->CombatStop(true);
|
||||||
|
boss->LoadCreaturesAddon();
|
||||||
|
boss->GetMotionMaster()->MoveTargetedHome();
|
||||||
|
boss->SetLootRecipient(NULL);
|
||||||
|
}
|
||||||
|
boss->setFaction(FACTION_FRIEND);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
GhostKillCount = 0;
|
||||||
|
TombEventStarterGUID = 0;
|
||||||
|
TombEventCounter = 0;
|
||||||
|
TombTimer = TIMER_TOMBOFTHESEVEN;
|
||||||
|
SetData(TYPE_TOMB_OF_SEVEN, NOT_STARTED);
|
||||||
|
}
|
||||||
|
|
||||||
|
void TombOfSevenStart()
|
||||||
|
{
|
||||||
|
HandleGameObject(GoTombExitGUID,false);//event started, close exit door
|
||||||
|
HandleGameObject(GoTombEnterGUID,false);//event started, close entrance door
|
||||||
|
SetData(TYPE_TOMB_OF_SEVEN, IN_PROGRESS);
|
||||||
|
}
|
||||||
|
|
||||||
|
void TombOfSevenEnd()
|
||||||
|
{
|
||||||
|
DoRespawnGameObject(GoChestGUID,DAY);
|
||||||
|
HandleGameObject(GoTombExitGUID,true);//event done, open exit door
|
||||||
|
HandleGameObject(GoTombEnterGUID,true);//event done, open entrance door
|
||||||
|
TombEventStarterGUID = 0;
|
||||||
|
SetData(TYPE_TOMB_OF_SEVEN, DONE);
|
||||||
|
}
|
||||||
|
void Update(uint32 diff)
|
||||||
|
{
|
||||||
|
if(TombEventStarterGUID && GhostKillCount < 7)
|
||||||
|
{
|
||||||
|
if(TombTimer <= diff)
|
||||||
|
{
|
||||||
|
TombTimer = TIMER_TOMBOFTHESEVEN;
|
||||||
|
TombEventCounter++;
|
||||||
|
TombOfSevenEvent();
|
||||||
|
}else TombTimer -= diff;
|
||||||
|
}
|
||||||
|
if(GhostKillCount >= 7 && TombEventStarterGUID)
|
||||||
|
TombOfSevenEnd();
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
InstanceData* GetInstanceData_instance_blackrock_depths(Map* map)
|
InstanceData* GetInstanceData_instance_blackrock_depths(Map* map)
|
||||||
|
|||||||
Reference in New Issue
Block a user