aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authortartalo <none@none>2009-10-20 01:25:06 +0200
committertartalo <none@none>2009-10-20 01:25:06 +0200
commit7691c5e1c5e93c6f2de48faf825dce90653e4448 (patch)
tree6b27508c126f310b18acc6e0e1348b4b214ecbc8 /src
parent779540ca785600b10064fbbde8b981246923baa5 (diff)
Violet Hold: Complete Erekem boss script
Complete GO handling --HG-- branch : trunk
Diffstat (limited to 'src')
-rw-r--r--src/bindings/scripts/scripts/northrend/violet_hold/boss_erekem.cpp15
-rw-r--r--src/bindings/scripts/scripts/northrend/violet_hold/boss_ichoron.cpp6
-rw-r--r--src/bindings/scripts/scripts/northrend/violet_hold/def_violet_hold.h4
-rw-r--r--src/bindings/scripts/scripts/northrend/violet_hold/instance_violet_hold.cpp36
4 files changed, 49 insertions, 12 deletions
diff --git a/src/bindings/scripts/scripts/northrend/violet_hold/boss_erekem.cpp b/src/bindings/scripts/scripts/northrend/violet_hold/boss_erekem.cpp
index d5cce50d3d1..feb3a721e49 100644
--- a/src/bindings/scripts/scripts/northrend/violet_hold/boss_erekem.cpp
+++ b/src/bindings/scripts/scripts/northrend/violet_hold/boss_erekem.cpp
@@ -63,10 +63,10 @@ struct TRINITY_DLL_DECL boss_erekemAI : public ScriptedAI
uiEarthShockTimer = urand(2000,8000);
uiLightningBoltTimer = urand(5000,10000);
uiEarthShieldTimer = 20000;
- pGuard1 = NULL;
- pGuard2 = NULL;
if (pInstance)
{
+ pGuard1 = pInstance->instance->GetCreature(pInstance->GetData(DATA_EREKEM_GUARD_1));
+ pGuard2 = pInstance->instance->GetCreature(pInstance->GetData(DATA_EREKEM_GUARD_2));
if (pInstance->GetData(DATA_WAVE_COUNT) == 6)
pInstance->SetData(DATA_1ST_BOSS_EVENT, NOT_STARTED);
else if (pInstance->GetData(DATA_WAVE_COUNT) == 12)
@@ -115,7 +115,7 @@ struct TRINITY_DLL_DECL boss_erekemAI : public ScriptedAI
{
if (Creature *pTarget = GetChainHealTarget())
{
- DoCast(pTarget,HeroicMode ? H_SPELL_CHAIN_HEAL : SPELL_CHAIN_HEAL);
+ DoCast(pTarget, HEROIC(SPELL_CHAIN_HEAL,H_SPELL_CHAIN_HEAL));
//If one of the adds is dead spawn heals faster
uiChainHealTimer = ((pGuard1 && !pGuard1->isAlive()) || (pGuard2 && !pGuard2->isAlive()) ? 3000 : 8000) + rand()%3000;
}
@@ -171,8 +171,13 @@ struct TRINITY_DLL_DECL boss_erekemAI : public ScriptedAI
Creature* GetChainHealTarget()
{
- Creature* pTarget = NULL;
- return pTarget;
+ if (m_creature->GetHealth()*100 / m_creature->GetMaxHealth() <= 85)
+ return m_creature;
+ if (pGuard1 && pGuard1->isAlive() && (pGuard1->GetHealth()*100 / pGuard1->GetMaxHealth() <= 75))
+ return pGuard1;
+ if (pGuard2 && pGuard2->isAlive() && (pGuard2->GetHealth()*100 / pGuard2->GetMaxHealth() <= 75))
+ return pGuard2;
+ return NULL;
}
};
diff --git a/src/bindings/scripts/scripts/northrend/violet_hold/boss_ichoron.cpp b/src/bindings/scripts/scripts/northrend/violet_hold/boss_ichoron.cpp
index 3d9f5bc659c..848b43facb8 100644
--- a/src/bindings/scripts/scripts/northrend/violet_hold/boss_ichoron.cpp
+++ b/src/bindings/scripts/scripts/northrend/violet_hold/boss_ichoron.cpp
@@ -60,8 +60,6 @@ struct TRINITY_DLL_DECL boss_ichoronAI : public ScriptedAI
{
Phase = BUBBLED;
- DoCast(m_creature, SPELL_PROTECTIVE_BUBBLE);
-
if (pInstance)
{
if (pInstance->GetData(DATA_WAVE_COUNT) == 6)
@@ -73,6 +71,8 @@ struct TRINITY_DLL_DECL boss_ichoronAI : public ScriptedAI
void EnterCombat(Unit* who)
{
DoScriptText(SAY_AGGRO, m_creature);
+
+ DoCast(m_creature, SPELL_PROTECTIVE_BUBBLE);
if (pInstance)
{
@@ -82,6 +82,8 @@ struct TRINITY_DLL_DECL boss_ichoronAI : public ScriptedAI
pInstance->SetData(DATA_2ND_BOSS_EVENT, IN_PROGRESS);
}
}
+
+ void MoveInLineOfSight(Unit* who) {}
void UpdateAI(const uint32 diff)
{
diff --git a/src/bindings/scripts/scripts/northrend/violet_hold/def_violet_hold.h b/src/bindings/scripts/scripts/northrend/violet_hold/def_violet_hold.h
index 4e989ffb7bb..8737bab2b60 100644
--- a/src/bindings/scripts/scripts/northrend/violet_hold/def_violet_hold.h
+++ b/src/bindings/scripts/scripts/northrend/violet_hold/def_violet_hold.h
@@ -13,6 +13,8 @@ enum Data64
{
DATA_MORAGG,
DATA_EREKEM,
+ DATA_EREKEM_GUARD_1,
+ DATA_EREKEM_GUARD_2,
DATA_ICHORON,
DATA_LAVANTHOR,
DATA_XEVOZZ,
@@ -20,8 +22,8 @@ enum Data64
DATA_CYANIGOSA,
DATA_MORAGG_CELL,
DATA_EREKEM_CELL,
- DATA_EREKEM_RIGHT_GUARD_CELL,
DATA_EREKEM_LEFT_GUARD_CELL,
+ DATA_EREKEM_RIGHT_GUARD_CELL,
DATA_ICHORON_CELL,
DATA_LAVANTHOR_CELL,
DATA_XEVOZZ_CELL,
diff --git a/src/bindings/scripts/scripts/northrend/violet_hold/instance_violet_hold.cpp b/src/bindings/scripts/scripts/northrend/violet_hold/instance_violet_hold.cpp
index 61c9f16e3f7..fe341667f78 100644
--- a/src/bindings/scripts/scripts/northrend/violet_hold/instance_violet_hold.cpp
+++ b/src/bindings/scripts/scripts/northrend/violet_hold/instance_violet_hold.cpp
@@ -24,6 +24,7 @@ enum Creatures
CREATURE_ICHORON = 29313,
CREATURE_ZURAMAT = 29314,
CREATURE_EREKEM = 29315,
+ CREATURE_EREKEM_GUARD = 29395,
CREATURE_MORAGG = 29316,
CREATURE_CYANIGOSA = 31134,
CREATURE_SINCLARI = 30658
@@ -40,7 +41,7 @@ enum GameObjects
GO_EREKEM_GUARD_2_DOOR = 191562,
GO_MORAGG_DOOR = 191606,
GO_INTRO_ACTIVATION_CRYSTAL = 193615,
- GO_ACTIVATION_CRYSTAL_1 = 193611
+ GO_ACTIVATION_CRYSTAL = 193611
};
struct Location
{
@@ -58,6 +59,7 @@ struct TRINITY_DLL_DECL instance_violet_hold : public ScriptedInstance
uint64 uiMoragg;
uint64 uiErekem;
+ uint64 uiErekemGuard[2];
uint64 uiIchoron;
uint64 uiLavanthor;
uint64 uiXevozz;
@@ -67,13 +69,15 @@ struct TRINITY_DLL_DECL instance_violet_hold : public ScriptedInstance
uint64 uiMoraggCell;
uint64 uiErekemCell;
- uint64 uiErekemRightGuardCell;
uint64 uiErekemLeftGuardCell;
+ uint64 uiErekemRightGuardCell;
uint64 uiIchoronCell;
uint64 uiLavanthorCell;
uint64 uiXevozzCell;
uint64 uiZuramatCell;
uint64 uiMainDoor;
+
+ uint64 uiActivationCrystal[3];
uint8 uiWaveCount;
uint8 uiLocation;
@@ -81,6 +85,8 @@ struct TRINITY_DLL_DECL instance_violet_hold : public ScriptedInstance
uint8 uiSecondBoss;
uint8 m_auiEncounter[MAX_ENCOUNTER];
+ uint8 uiCountErekemGuards;
+ uint8 uiCountActivationCrystals;
bool HeroicMode;
@@ -99,8 +105,8 @@ struct TRINITY_DLL_DECL instance_violet_hold : public ScriptedInstance
uiMoraggCell = 0;
uiErekemCell = 0;
- uiErekemRightGuardCell = 0;
- uiErekemLeftGuardCell = 0;
+ uiErekemGuard[0] = 0;
+ uiErekemGuard[1] = 0;
uiIchoronCell = 0;
uiLavanthorCell = 0;
uiXevozzCell = 0;
@@ -111,6 +117,8 @@ struct TRINITY_DLL_DECL instance_violet_hold : public ScriptedInstance
uiLocation = 0;
uiFirstBoss = 0;
uiSecondBoss = 0;
+ uiCountErekemGuards = 0;
+ uiCountActivationCrystals = 0;
memset(&m_auiEncounter, 0, sizeof(m_auiEncounter));
}
@@ -142,6 +150,10 @@ struct TRINITY_DLL_DECL instance_violet_hold : public ScriptedInstance
case CREATURE_EREKEM:
uiErekem = pCreature->GetGUID();
break;
+ case CREATURE_EREKEM_GUARD:
+ if (uiCountErekemGuards < 2)
+ uiErekemGuard[uiCountErekemGuards++] = pCreature->GetGUID();
+ break;
case CREATURE_MORAGG:
uiMoragg = pCreature->GetGUID();
break;
@@ -185,6 +197,10 @@ struct TRINITY_DLL_DECL instance_violet_hold : public ScriptedInstance
case GO_MAIN_DOOR:
uiMainDoor = pGo->GetGUID();
break;
+ case GO_ACTIVATION_CRYSTAL:
+ if (uiCountActivationCrystals < 3)
+ uiActivationCrystal[uiCountActivationCrystals++] = pGo->GetGUID();
+ break;
}
}
@@ -289,6 +305,16 @@ struct TRINITY_DLL_DECL instance_violet_hold : public ScriptedInstance
pBoss->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_OOC_NOT_ATTACKABLE);
pBoss->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
}
+ if (pBoss = instance->GetCreature(uiErekemGuard[0]))
+ {
+ pBoss->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_OOC_NOT_ATTACKABLE);
+ pBoss->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ }
+ if (pBoss = instance->GetCreature(uiErekemGuard[1]))
+ {
+ pBoss->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_OOC_NOT_ATTACKABLE);
+ pBoss->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ }
break;
case 2: //Ichoron
HandleGameObject(uiIchoronCell,true);
@@ -331,6 +357,8 @@ struct TRINITY_DLL_DECL instance_violet_hold : public ScriptedInstance
{
case DATA_MORAGG: return uiMoragg;
case DATA_EREKEM: return uiErekem;
+ case DATA_EREKEM_GUARD_1: return uiErekemGuard[0];
+ case DATA_EREKEM_GUARD_2: return uiErekemGuard[1];
case DATA_ICHORON: return uiIchoron;
case DATA_LAVANTHOR: return uiLavanthor;
case DATA_XEVOZZ: return uiXevozz;