aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/bindings/scripts/scripts/northrend/violet_hold/instance_violet_hold.cpp118
1 files changed, 73 insertions, 45 deletions
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 6f1124accf7..76ac0e14f13 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
@@ -70,6 +70,8 @@ struct TRINITY_DLL_DECL instance_violet_hold : public ScriptedInstance
uint64 uiActivationCrystal[3];
+ uint32 uiActivationTimer;
+
uint8 uiWaveCount;
uint8 uiLocation;
uint8 uiFirstBoss;
@@ -79,7 +81,7 @@ struct TRINITY_DLL_DECL instance_violet_hold : public ScriptedInstance
uint8 uiCountErekemGuards;
uint8 uiCountActivationCrystals;
- bool HeroicMode;
+ bool bActive;
std::string str_data;
@@ -111,6 +113,10 @@ struct TRINITY_DLL_DECL instance_violet_hold : public ScriptedInstance
uiCountErekemGuards = 0;
uiCountActivationCrystals = 0;
+ uiActivationTimer = 5000;
+
+ bActive = false;
+
memset(&m_auiEncounter, 0, sizeof(m_auiEncounter));
}
@@ -220,50 +226,7 @@ struct TRINITY_DLL_DECL instance_violet_hold : public ScriptedInstance
break;
case DATA_WAVE_COUNT:
uiWaveCount = data;
- switch(data)
- {
- case 6:
- uiFirstBoss = rand()%6;
- StartBossEncounter(uiFirstBoss);
- break;
- case 12:
- uiSecondBoss = rand()%6;
- while (uiSecondBoss == uiFirstBoss)
- uiSecondBoss = rand()%6;
- StartBossEncounter(uiSecondBoss);
- break;
- case 18:
- {
- Creature *pSinclari = instance->GetCreature(uiSinclari);
- if (pSinclari)
- pSinclari->SummonCreature(CREATURE_CYANIGOSA,PortalLocation[0].x,PortalLocation[0].y,
- PortalLocation[0].z,PortalLocation[0].orientation,TEMPSUMMON_DEAD_DESPAWN,0);
- break;
- }
- case 1:
- {
- if (GameObject* pMainDoor = instance->GetGameObject(uiMainDoor))
- pMainDoor->SetGoState(GO_STATE_READY);
- }
- default:
- {
- Creature *pSinclari = instance->GetCreature(uiSinclari);
- if (pSinclari)
- {
- if (Creature *pPortal = pSinclari->SummonCreature(CREATURE_TELEPORTATION_PORTAL,PortalLocation[uiLocation].x,PortalLocation[uiLocation].y,
- PortalLocation[uiLocation].z,PortalLocation[uiLocation].orientation,
- TEMPSUMMON_CORPSE_DESPAWN,900000))
- {
- uint32 entry = urand(0, 1) ? CREATURE_PORTAL_GUARDIAN : CREATURE_PORTAL_KEEPER;
- if (Creature *pPortalKeeper = pPortal->SummonCreature(entry,PortalLocation[uiLocation].x, PortalLocation[uiLocation].y,
- PortalLocation[uiLocation].z, PortalLocation[uiLocation].orientation,
- TEMPSUMMON_DEAD_DESPAWN,900000))
- pPortal->CastSpell(pPortalKeeper, SPELL_PORTAL_CHANNEL,false);
- uiLocation = (++uiLocation)%3;
- }
- }
- }
- }
+ bActive = true;
break;
}
}
@@ -281,6 +244,25 @@ struct TRINITY_DLL_DECL instance_violet_hold : public ScriptedInstance
return 0;
}
+ void SpawnPortal()
+ {
+ Creature *pSinclari = instance->GetCreature(uiSinclari);
+ if (pSinclari)
+ {
+ if (Creature *pPortal = pSinclari->SummonCreature(CREATURE_TELEPORTATION_PORTAL,PortalLocation[uiLocation].x,PortalLocation[uiLocation].y,
+ PortalLocation[uiLocation].z,PortalLocation[uiLocation].orientation,
+ TEMPSUMMON_CORPSE_DESPAWN,900000))
+ {
+ uint32 entry = urand(0, 1) ? CREATURE_PORTAL_GUARDIAN : CREATURE_PORTAL_KEEPER;
+ if (Creature *pPortalKeeper = pPortal->SummonCreature(entry,PortalLocation[uiLocation].x, PortalLocation[uiLocation].y,
+ PortalLocation[uiLocation].z, PortalLocation[uiLocation].orientation,
+ TEMPSUMMON_DEAD_DESPAWN,900000))
+ pPortal->CastSpell(pPortalKeeper, SPELL_PORTAL_CHANNEL,false);
+ uiLocation = (++uiLocation)%3;
+ }
+ }
+ }
+
void StartBossEncounter(uint8 uiBoss)
{
Creature* pBoss = NULL;
@@ -349,6 +331,39 @@ struct TRINITY_DLL_DECL instance_violet_hold : public ScriptedInstance
}
}
+ void AddWave()
+ {
+ switch(uiWaveCount)
+ {
+ case 6:
+ uiFirstBoss = rand()%6;
+ StartBossEncounter(uiFirstBoss);
+ break;
+ case 12:
+ uiSecondBoss = rand()%6;
+ while (uiSecondBoss == uiFirstBoss)
+ uiSecondBoss = rand()%6;
+ StartBossEncounter(uiSecondBoss);
+ break;
+ case 18:
+ {
+ Creature *pSinclari = instance->GetCreature(uiSinclari);
+ if (pSinclari)
+ pSinclari->SummonCreature(CREATURE_CYANIGOSA,PortalLocation[0].x,PortalLocation[0].y,
+ PortalLocation[0].z,PortalLocation[0].orientation,TEMPSUMMON_DEAD_DESPAWN,0);
+ break;
+ }
+ case 1:
+ {
+ if (GameObject* pMainDoor = instance->GetGameObject(uiMainDoor))
+ pMainDoor->SetGoState(GO_STATE_READY);
+ }
+ default:
+ SpawnPortal();
+ }
+ bActive = true;
+ }
+
uint64 GetData64(uint32 identifier)
{
switch(identifier)
@@ -423,6 +438,19 @@ struct TRINITY_DLL_DECL instance_violet_hold : public ScriptedInstance
OUT_LOAD_INST_DATA_COMPLETE;
}
+
+ void Update(uint32 diff)
+ {
+ if (bActive)
+ {
+ if (uiActivationTimer < diff)
+ {
+ AddWave();
+ bActive = false;
+ uiActivationTimer = 5000;
+ } else uiActivationTimer -= diff;
+ }
+ }
};
InstanceData* GetInstanceData_instance_violet_hold(Map* pMap)