diff options
Diffstat (limited to 'src')
3 files changed, 79 insertions, 56 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..7809f64f1c9 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,40 @@ struct TRINITY_DLL_DECL instance_violet_hold : public ScriptedInstance } } + void AddWave() + { + DoUpdateWorldState(WORLD_STATE_VH, uiWaveCount); + 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 +439,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) diff --git a/src/bindings/scripts/scripts/northrend/violet_hold/violet_hold.cpp b/src/bindings/scripts/scripts/northrend/violet_hold/violet_hold.cpp index 8cee0095f80..c35368c1622 100644 --- a/src/bindings/scripts/scripts/northrend/violet_hold/violet_hold.cpp +++ b/src/bindings/scripts/scripts/northrend/violet_hold/violet_hold.cpp @@ -2,7 +2,6 @@ #include "violet_hold.h" #define GOSSIP_START_EVENT "[PH]: Start Event" -#define NEXT_WAVE_TIME 90000 #define SPAWN_TIME 15000 enum PortalCreatures @@ -45,14 +44,12 @@ struct TRINITY_DLL_DECL npc_teleportation_portalAI : public ScriptedAI pInstance = c->GetInstanceData(); } - uint32 uiDespawnTimer; uint32 uiSpawnTimer; ScriptedInstance *pInstance; void Reset() { - uiDespawnTimer = NEXT_WAVE_TIME; uiSpawnTimer = 3000; } @@ -81,14 +78,6 @@ struct TRINITY_DLL_DECL npc_teleportation_portalAI : public ScriptedAI m_creature->RemoveCorpse(); return; } - - if (uiDespawnTimer <= diff) - { - m_creature->Kill(m_creature, false); - m_creature->RemoveCorpse(); - } - else - uiDespawnTimer -= diff; } void JustDied(Unit* killer) diff --git a/src/bindings/scripts/scripts/northrend/violet_hold/violet_hold.h b/src/bindings/scripts/scripts/northrend/violet_hold/violet_hold.h index 475cf38e51d..31ca883a1a7 100644 --- a/src/bindings/scripts/scripts/northrend/violet_hold/violet_hold.h +++ b/src/bindings/scripts/scripts/northrend/violet_hold/violet_hold.h @@ -48,4 +48,9 @@ enum Data64 DATA_SINCLARI }; +enum WorldStates +{ + WORLD_STATE_VH = 3816 +}; + #endif |