Violet Hold: Complete Erekem boss script

Complete GO handling

--HG--
branch : trunk
This commit is contained in:
tartalo
2009-10-20 01:25:06 +02:00
parent 779540ca78
commit 7691c5e1c5
4 changed files with 49 additions and 12 deletions
@@ -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;
}
};
@@ -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)
@@ -74,6 +72,8 @@ struct TRINITY_DLL_DECL boss_ichoronAI : public ScriptedAI
{
DoScriptText(SAY_AGGRO, m_creature);
DoCast(m_creature, SPELL_PROTECTIVE_BUBBLE);
if (pInstance)
{
if (pInstance->GetData(DATA_WAVE_COUNT) == 6)
@@ -83,6 +83,8 @@ struct TRINITY_DLL_DECL boss_ichoronAI : public ScriptedAI
}
}
void MoveInLineOfSight(Unit* who) {}
void UpdateAI(const uint32 diff)
{
//Return since we have no target
@@ -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,
@@ -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,20 +69,24 @@ 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;
uint8 uiFirstBoss;
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;