Violet Hold: Complete Erekem boss script
Complete GO handling --HG-- branch : trunk
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user