diff options
author | tartalo <none@none> | 2009-10-20 01:25:06 +0200 |
---|---|---|
committer | tartalo <none@none> | 2009-10-20 01:25:06 +0200 |
commit | 7691c5e1c5e93c6f2de48faf825dce90653e4448 (patch) | |
tree | 6b27508c126f310b18acc6e0e1348b4b214ecbc8 /src | |
parent | 779540ca785600b10064fbbde8b981246923baa5 (diff) |
Violet Hold: Complete Erekem boss script
Complete GO handling
--HG--
branch : trunk
Diffstat (limited to 'src')
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; |