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);
|
uiEarthShockTimer = urand(2000,8000);
|
||||||
uiLightningBoltTimer = urand(5000,10000);
|
uiLightningBoltTimer = urand(5000,10000);
|
||||||
uiEarthShieldTimer = 20000;
|
uiEarthShieldTimer = 20000;
|
||||||
pGuard1 = NULL;
|
|
||||||
pGuard2 = NULL;
|
|
||||||
if (pInstance)
|
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)
|
if (pInstance->GetData(DATA_WAVE_COUNT) == 6)
|
||||||
pInstance->SetData(DATA_1ST_BOSS_EVENT, NOT_STARTED);
|
pInstance->SetData(DATA_1ST_BOSS_EVENT, NOT_STARTED);
|
||||||
else if (pInstance->GetData(DATA_WAVE_COUNT) == 12)
|
else if (pInstance->GetData(DATA_WAVE_COUNT) == 12)
|
||||||
@@ -115,7 +115,7 @@ struct TRINITY_DLL_DECL boss_erekemAI : public ScriptedAI
|
|||||||
{
|
{
|
||||||
if (Creature *pTarget = GetChainHealTarget())
|
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
|
//If one of the adds is dead spawn heals faster
|
||||||
uiChainHealTimer = ((pGuard1 && !pGuard1->isAlive()) || (pGuard2 && !pGuard2->isAlive()) ? 3000 : 8000) + rand()%3000;
|
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* GetChainHealTarget()
|
||||||
{
|
{
|
||||||
Creature* pTarget = NULL;
|
if (m_creature->GetHealth()*100 / m_creature->GetMaxHealth() <= 85)
|
||||||
return pTarget;
|
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;
|
Phase = BUBBLED;
|
||||||
|
|
||||||
DoCast(m_creature, SPELL_PROTECTIVE_BUBBLE);
|
|
||||||
|
|
||||||
if (pInstance)
|
if (pInstance)
|
||||||
{
|
{
|
||||||
if (pInstance->GetData(DATA_WAVE_COUNT) == 6)
|
if (pInstance->GetData(DATA_WAVE_COUNT) == 6)
|
||||||
@@ -73,6 +71,8 @@ struct TRINITY_DLL_DECL boss_ichoronAI : public ScriptedAI
|
|||||||
void EnterCombat(Unit* who)
|
void EnterCombat(Unit* who)
|
||||||
{
|
{
|
||||||
DoScriptText(SAY_AGGRO, m_creature);
|
DoScriptText(SAY_AGGRO, m_creature);
|
||||||
|
|
||||||
|
DoCast(m_creature, SPELL_PROTECTIVE_BUBBLE);
|
||||||
|
|
||||||
if (pInstance)
|
if (pInstance)
|
||||||
{
|
{
|
||||||
@@ -82,6 +82,8 @@ struct TRINITY_DLL_DECL boss_ichoronAI : public ScriptedAI
|
|||||||
pInstance->SetData(DATA_2ND_BOSS_EVENT, IN_PROGRESS);
|
pInstance->SetData(DATA_2ND_BOSS_EVENT, IN_PROGRESS);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MoveInLineOfSight(Unit* who) {}
|
||||||
|
|
||||||
void UpdateAI(const uint32 diff)
|
void UpdateAI(const uint32 diff)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -13,6 +13,8 @@ enum Data64
|
|||||||
{
|
{
|
||||||
DATA_MORAGG,
|
DATA_MORAGG,
|
||||||
DATA_EREKEM,
|
DATA_EREKEM,
|
||||||
|
DATA_EREKEM_GUARD_1,
|
||||||
|
DATA_EREKEM_GUARD_2,
|
||||||
DATA_ICHORON,
|
DATA_ICHORON,
|
||||||
DATA_LAVANTHOR,
|
DATA_LAVANTHOR,
|
||||||
DATA_XEVOZZ,
|
DATA_XEVOZZ,
|
||||||
@@ -20,8 +22,8 @@ enum Data64
|
|||||||
DATA_CYANIGOSA,
|
DATA_CYANIGOSA,
|
||||||
DATA_MORAGG_CELL,
|
DATA_MORAGG_CELL,
|
||||||
DATA_EREKEM_CELL,
|
DATA_EREKEM_CELL,
|
||||||
DATA_EREKEM_RIGHT_GUARD_CELL,
|
|
||||||
DATA_EREKEM_LEFT_GUARD_CELL,
|
DATA_EREKEM_LEFT_GUARD_CELL,
|
||||||
|
DATA_EREKEM_RIGHT_GUARD_CELL,
|
||||||
DATA_ICHORON_CELL,
|
DATA_ICHORON_CELL,
|
||||||
DATA_LAVANTHOR_CELL,
|
DATA_LAVANTHOR_CELL,
|
||||||
DATA_XEVOZZ_CELL,
|
DATA_XEVOZZ_CELL,
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ enum Creatures
|
|||||||
CREATURE_ICHORON = 29313,
|
CREATURE_ICHORON = 29313,
|
||||||
CREATURE_ZURAMAT = 29314,
|
CREATURE_ZURAMAT = 29314,
|
||||||
CREATURE_EREKEM = 29315,
|
CREATURE_EREKEM = 29315,
|
||||||
|
CREATURE_EREKEM_GUARD = 29395,
|
||||||
CREATURE_MORAGG = 29316,
|
CREATURE_MORAGG = 29316,
|
||||||
CREATURE_CYANIGOSA = 31134,
|
CREATURE_CYANIGOSA = 31134,
|
||||||
CREATURE_SINCLARI = 30658
|
CREATURE_SINCLARI = 30658
|
||||||
@@ -40,7 +41,7 @@ enum GameObjects
|
|||||||
GO_EREKEM_GUARD_2_DOOR = 191562,
|
GO_EREKEM_GUARD_2_DOOR = 191562,
|
||||||
GO_MORAGG_DOOR = 191606,
|
GO_MORAGG_DOOR = 191606,
|
||||||
GO_INTRO_ACTIVATION_CRYSTAL = 193615,
|
GO_INTRO_ACTIVATION_CRYSTAL = 193615,
|
||||||
GO_ACTIVATION_CRYSTAL_1 = 193611
|
GO_ACTIVATION_CRYSTAL = 193611
|
||||||
};
|
};
|
||||||
struct Location
|
struct Location
|
||||||
{
|
{
|
||||||
@@ -58,6 +59,7 @@ struct TRINITY_DLL_DECL instance_violet_hold : public ScriptedInstance
|
|||||||
|
|
||||||
uint64 uiMoragg;
|
uint64 uiMoragg;
|
||||||
uint64 uiErekem;
|
uint64 uiErekem;
|
||||||
|
uint64 uiErekemGuard[2];
|
||||||
uint64 uiIchoron;
|
uint64 uiIchoron;
|
||||||
uint64 uiLavanthor;
|
uint64 uiLavanthor;
|
||||||
uint64 uiXevozz;
|
uint64 uiXevozz;
|
||||||
@@ -67,13 +69,15 @@ struct TRINITY_DLL_DECL instance_violet_hold : public ScriptedInstance
|
|||||||
|
|
||||||
uint64 uiMoraggCell;
|
uint64 uiMoraggCell;
|
||||||
uint64 uiErekemCell;
|
uint64 uiErekemCell;
|
||||||
uint64 uiErekemRightGuardCell;
|
|
||||||
uint64 uiErekemLeftGuardCell;
|
uint64 uiErekemLeftGuardCell;
|
||||||
|
uint64 uiErekemRightGuardCell;
|
||||||
uint64 uiIchoronCell;
|
uint64 uiIchoronCell;
|
||||||
uint64 uiLavanthorCell;
|
uint64 uiLavanthorCell;
|
||||||
uint64 uiXevozzCell;
|
uint64 uiXevozzCell;
|
||||||
uint64 uiZuramatCell;
|
uint64 uiZuramatCell;
|
||||||
uint64 uiMainDoor;
|
uint64 uiMainDoor;
|
||||||
|
|
||||||
|
uint64 uiActivationCrystal[3];
|
||||||
|
|
||||||
uint8 uiWaveCount;
|
uint8 uiWaveCount;
|
||||||
uint8 uiLocation;
|
uint8 uiLocation;
|
||||||
@@ -81,6 +85,8 @@ struct TRINITY_DLL_DECL instance_violet_hold : public ScriptedInstance
|
|||||||
uint8 uiSecondBoss;
|
uint8 uiSecondBoss;
|
||||||
|
|
||||||
uint8 m_auiEncounter[MAX_ENCOUNTER];
|
uint8 m_auiEncounter[MAX_ENCOUNTER];
|
||||||
|
uint8 uiCountErekemGuards;
|
||||||
|
uint8 uiCountActivationCrystals;
|
||||||
|
|
||||||
bool HeroicMode;
|
bool HeroicMode;
|
||||||
|
|
||||||
@@ -99,8 +105,8 @@ struct TRINITY_DLL_DECL instance_violet_hold : public ScriptedInstance
|
|||||||
|
|
||||||
uiMoraggCell = 0;
|
uiMoraggCell = 0;
|
||||||
uiErekemCell = 0;
|
uiErekemCell = 0;
|
||||||
uiErekemRightGuardCell = 0;
|
uiErekemGuard[0] = 0;
|
||||||
uiErekemLeftGuardCell = 0;
|
uiErekemGuard[1] = 0;
|
||||||
uiIchoronCell = 0;
|
uiIchoronCell = 0;
|
||||||
uiLavanthorCell = 0;
|
uiLavanthorCell = 0;
|
||||||
uiXevozzCell = 0;
|
uiXevozzCell = 0;
|
||||||
@@ -111,6 +117,8 @@ struct TRINITY_DLL_DECL instance_violet_hold : public ScriptedInstance
|
|||||||
uiLocation = 0;
|
uiLocation = 0;
|
||||||
uiFirstBoss = 0;
|
uiFirstBoss = 0;
|
||||||
uiSecondBoss = 0;
|
uiSecondBoss = 0;
|
||||||
|
uiCountErekemGuards = 0;
|
||||||
|
uiCountActivationCrystals = 0;
|
||||||
|
|
||||||
memset(&m_auiEncounter, 0, sizeof(m_auiEncounter));
|
memset(&m_auiEncounter, 0, sizeof(m_auiEncounter));
|
||||||
}
|
}
|
||||||
@@ -142,6 +150,10 @@ struct TRINITY_DLL_DECL instance_violet_hold : public ScriptedInstance
|
|||||||
case CREATURE_EREKEM:
|
case CREATURE_EREKEM:
|
||||||
uiErekem = pCreature->GetGUID();
|
uiErekem = pCreature->GetGUID();
|
||||||
break;
|
break;
|
||||||
|
case CREATURE_EREKEM_GUARD:
|
||||||
|
if (uiCountErekemGuards < 2)
|
||||||
|
uiErekemGuard[uiCountErekemGuards++] = pCreature->GetGUID();
|
||||||
|
break;
|
||||||
case CREATURE_MORAGG:
|
case CREATURE_MORAGG:
|
||||||
uiMoragg = pCreature->GetGUID();
|
uiMoragg = pCreature->GetGUID();
|
||||||
break;
|
break;
|
||||||
@@ -185,6 +197,10 @@ struct TRINITY_DLL_DECL instance_violet_hold : public ScriptedInstance
|
|||||||
case GO_MAIN_DOOR:
|
case GO_MAIN_DOOR:
|
||||||
uiMainDoor = pGo->GetGUID();
|
uiMainDoor = pGo->GetGUID();
|
||||||
break;
|
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_OOC_NOT_ATTACKABLE);
|
||||||
pBoss->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_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;
|
break;
|
||||||
case 2: //Ichoron
|
case 2: //Ichoron
|
||||||
HandleGameObject(uiIchoronCell,true);
|
HandleGameObject(uiIchoronCell,true);
|
||||||
@@ -331,6 +357,8 @@ struct TRINITY_DLL_DECL instance_violet_hold : public ScriptedInstance
|
|||||||
{
|
{
|
||||||
case DATA_MORAGG: return uiMoragg;
|
case DATA_MORAGG: return uiMoragg;
|
||||||
case DATA_EREKEM: return uiErekem;
|
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_ICHORON: return uiIchoron;
|
||||||
case DATA_LAVANTHOR: return uiLavanthor;
|
case DATA_LAVANTHOR: return uiLavanthor;
|
||||||
case DATA_XEVOZZ: return uiXevozz;
|
case DATA_XEVOZZ: return uiXevozz;
|
||||||
|
|||||||
Reference in New Issue
Block a user