Violet Hold: Add 5 secs intervale between waves

--HG--
branch : trunk
This commit is contained in:
tartalo
2009-12-10 21:06:17 +01:00
parent 3257d30d3b
commit ee7d3d1e48

View File

@@ -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)