void Reset() { me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); EventPhase = 0; Event_Timer = 1000; MobCount = 0; MobDeath_Timer = 0; for(uint8 i = 0; i < MOB_AMOUNT; i++) RingMobGUID[i] = 0; RingBossGUID = 0; DoGate(DATA_ARENA4,0); CanWalk = false; }
void UpdateAI(const uint32 uiDiff) { if (!m_pInstance) return; if (m_uiMobDeathTimer) { if (m_uiMobDeathTimer <= uiDiff) { m_uiMobDeathTimer = 2500; if (m_uiRingBossGUID) { Creature* pBoss = m_creature->GetMap()->GetCreature(m_uiRingBossGUID); if (pBoss && !pBoss->isAlive() && pBoss->isDead()) { m_uiRingBossGUID = 0; m_uiEventTimer = 5000; m_uiMobDeathTimer = 0; return; } return; } for(uint8 i = 0; i < MAX_MOB_AMOUNT; ++i) { Creature* pMob = m_creature->GetMap()->GetCreature(m_auiRingMobGUID[i]); if (pMob && !pMob->isAlive() && pMob->isDead()) { m_auiRingMobGUID[i] = 0; --m_uiMobCount; //seems all are gone, so set timer to continue and discontinue this if (!m_uiMobCount) { m_uiEventTimer = 5000; m_uiMobDeathTimer = 0; } } } } else m_uiMobDeathTimer -= uiDiff; } if (m_uiEventTimer) { if (m_uiEventTimer <= uiDiff) { switch(m_uiEventPhase) { case 0: // Shortly after spawn, start walking //DoScriptText(-1000000, m_creature); // no more text on spawn DoGate(DATA_ARENA4, GO_STATE_READY); Start(false); m_bCanWalk = true; m_uiEventTimer = 0; break; case 1: // Start walking towards wall m_bCanWalk = true; m_uiEventTimer = 0; break; case 2: m_uiEventTimer = 2000; break; case 3: // Open East Gate DoGate(DATA_ARENA1, GO_STATE_ACTIVE); m_uiEventTimer = 3000; break; case 4: m_bCanWalk = true; m_creature->SetVisibility(VISIBILITY_OFF); SummonRingMob(); m_uiEventTimer = 8000; break; case 5: SummonRingMob(); SummonRingMob(); m_uiEventTimer = 8000; break; case 6: SummonRingMob(); m_uiEventTimer = 0; break; case 7: // Summoned Mobs are dead, continue event m_creature->SetVisibility(VISIBILITY_ON); DoGate(DATA_ARENA1, GO_STATE_READY); //DoScriptText(-1000000, m_creature); // after killed the mobs, no say here m_bCanWalk = true; m_uiEventTimer = 0; break; case 8: // Open North Gate DoGate(DATA_ARENA2, GO_STATE_ACTIVE); m_uiEventTimer = 5000; break; case 9: // Summon Boss m_creature->SetVisibility(VISIBILITY_OFF); SummonRingBoss(); m_uiEventTimer = 0; break; case 10: // Boss dead //if quest, complete DoGate(DATA_ARENA2, GO_STATE_READY); DoGate(DATA_ARENA3, GO_STATE_ACTIVE); DoGate(DATA_ARENA4, GO_STATE_ACTIVE); m_bCanWalk = true; m_uiEventTimer = 0; break; } ++m_uiEventPhase; } else m_uiEventTimer -= uiDiff; } if (m_bCanWalk) npc_escortAI::UpdateAI(uiDiff); }
void UpdateAI(const uint32 diff) { if (!m_pInstance) return; if (MobDeath_Timer) { if (MobDeath_Timer <= diff) { MobDeath_Timer = 2500; if (RingBossGUID) { Creature *boss = (Creature*)Unit::GetUnit(*m_creature,RingBossGUID); if (boss && !boss->isAlive() && boss->isDead()) { RingBossGUID = 0; Event_Timer = 5000; MobDeath_Timer = 0; return; } return; } for(uint8 i = 0; i < MAX_MOB_AMOUNT; ++i) { Creature *mob = (Creature*)Unit::GetUnit(*m_creature,RingMobGUID[i]); if (mob && !mob->isAlive() && mob->isDead()) { RingMobGUID[i] = 0; --MobCount; //seems all are gone, so set timer to continue and discontinue this if (!MobCount) { Event_Timer = 5000; MobDeath_Timer = 0; } } } }else MobDeath_Timer -= diff; } if (Event_Timer) { if (Event_Timer <= diff) { switch(EventPhase) { case 0: DoScriptText(-1000000, m_creature);//1 DoGate(DATA_ARENA4,1); Start(false, false); CanWalk = true; Event_Timer = 0; break; case 1: CanWalk = true; Event_Timer = 0; break; case 2: Event_Timer = 2000; break; case 3: DoGate(DATA_ARENA1,GO_STATE_ACTIVE); Event_Timer = 3000; break; case 4: CanWalk = true; m_creature->SetVisibility(VISIBILITY_OFF); SummonRingMob(); Event_Timer = 8000; break; case 5: SummonRingMob(); SummonRingMob(); Event_Timer = 8000; break; case 6: SummonRingMob(); Event_Timer = 0; break; case 7: m_creature->SetVisibility(VISIBILITY_ON); DoGate(DATA_ARENA1,GO_STATE_READY); DoScriptText(-1000000, m_creature);//4 CanWalk = true; Event_Timer = 0; break; case 8: DoGate(DATA_ARENA2,GO_STATE_ACTIVE); Event_Timer = 5000; break; case 9: m_creature->SetVisibility(VISIBILITY_OFF); SummonRingBoss(); Event_Timer = 0; break; case 10: //if quest, complete DoGate(DATA_ARENA2,GO_STATE_READY); DoGate(DATA_ARENA3,GO_STATE_ACTIVE); DoGate(DATA_ARENA4,GO_STATE_ACTIVE); CanWalk = true; Event_Timer = 0; break; } ++EventPhase; }else Event_Timer -= diff; } if (CanWalk) npc_escortAI::UpdateAI(diff); }
void UpdateAI(const uint32 uiDiff) { if (!m_pInstance) return; if (m_uiMobDeathTimer) { if (m_uiMobDeathTimer <= uiDiff) { m_uiMobDeathTimer = 2500; if (m_uiRingBossGUID) { Creature* pBoss = (Creature*)Unit::GetUnit(*m_creature, m_uiRingBossGUID); if (pBoss && !pBoss->isAlive() && pBoss->isDead()) { m_uiRingBossGUID = 0; m_uiEventTimer = 5000; m_uiMobDeathTimer = 0; return; } return; } for(uint8 i = 0; i < MAX_MOB_AMOUNT; ++i) { Creature* pMob = (Creature*)Unit::GetUnit(*m_creature, m_auiRingMobGUID[i]); if (pMob && !pMob->isAlive() && pMob->isDead()) { m_auiRingMobGUID[i] = 0; --m_uiMobCount; //seems all are gone, so set timer to continue and discontinue this if (!m_uiMobCount) { m_uiEventTimer = 5000; m_uiMobDeathTimer = 0; } } } } else m_uiMobDeathTimer -= uiDiff; } if (m_uiEventTimer) { if (m_uiEventTimer <= uiDiff) { switch(m_uiEventPhase) { case 0: DoScriptText(-1000000, m_creature); DoGate(DATA_ARENA4, GO_STATE_READY); Start(false, false); m_bCanWalk = true; m_uiEventTimer = 0; break; case 1: m_bCanWalk = true; m_uiEventTimer = 0; break; case 2: m_uiEventTimer = 2000; break; case 3: DoGate(DATA_ARENA1,GO_STATE_ACTIVE); m_uiEventTimer = 3000; break; case 4: m_bCanWalk = true; m_creature->SetVisibility(VISIBILITY_OFF); SummonRingMob(); m_uiEventTimer = 8000; break; case 5: SummonRingMob(); SummonRingMob(); m_uiEventTimer = 8000; break; case 6: SummonRingMob(); m_uiEventTimer = 0; break; case 7: m_creature->SetVisibility(VISIBILITY_ON); DoGate(DATA_ARENA1,GO_STATE_READY); DoScriptText(-1000000, m_creature); m_bCanWalk = true; m_uiEventTimer = 0; break; case 8: DoGate(DATA_ARENA2,GO_STATE_ACTIVE); m_uiEventTimer = 5000; break; case 9: m_creature->SetVisibility(VISIBILITY_OFF); SummonRingBoss(); m_uiEventTimer = 0; break; case 10: //if quest, complete DoGate(DATA_ARENA2,GO_STATE_READY); DoGate(DATA_ARENA3,GO_STATE_ACTIVE); DoGate(DATA_ARENA4,GO_STATE_ACTIVE); m_bCanWalk = true; m_uiEventTimer = 0; break; } ++m_uiEventPhase; } else m_uiEventTimer -= uiDiff; } if (m_bCanWalk) npc_escortAI::UpdateAI(uiDiff); }
void UpdateAI(const uint32 uiDiff) { if (!m_pInstance) return; if (m_uiEventTimer) { if (m_uiEventTimer <= uiDiff) { switch(m_uiEventPhase) { case 0: // Shortly after spawn, start walking //DoScriptText(-1000000, m_creature); // no more text on spawn DoGate(GO_ARENA_4, GO_STATE_READY); Start(false); m_bCanWalk = true; m_uiEventTimer = 0; break; case 1: // Start walking towards wall m_bCanWalk = true; m_uiEventTimer = 0; break; case 2: m_uiEventTimer = 2000; break; case 3: // Open East Gate DoGate(GO_ARENA_1, GO_STATE_ACTIVE); m_uiEventTimer = 3000; break; case 4: m_bCanWalk = true; m_creature->SetVisibility(VISIBILITY_OFF); // Summon Ring Mob(s) m_creature->SummonCreature(RingMob[m_uiMobSpawnId], aSpawnPositions[0][0], aSpawnPositions[0][1], aSpawnPositions[0][2], aSpawnPositions[0][3], TEMPSUMMON_DEAD_DESPAWN, 0); m_uiEventTimer = 8000; break; case 5: // Summon Ring Mob(s) m_creature->SummonCreature(RingMob[m_uiMobSpawnId], aSpawnPositions[0][0], aSpawnPositions[0][1], aSpawnPositions[0][2], aSpawnPositions[0][3], TEMPSUMMON_DEAD_DESPAWN, 0); m_creature->SummonCreature(RingMob[m_uiMobSpawnId], aSpawnPositions[0][0], aSpawnPositions[0][1], aSpawnPositions[0][2], aSpawnPositions[0][3], TEMPSUMMON_DEAD_DESPAWN, 0); m_uiEventTimer = 8000; break; case 6: // Summon Ring Mob(s) m_creature->SummonCreature(RingMob[m_uiMobSpawnId], aSpawnPositions[0][0], aSpawnPositions[0][1], aSpawnPositions[0][2], aSpawnPositions[0][3], TEMPSUMMON_DEAD_DESPAWN, 0); m_uiEventTimer = 0; break; case 7: // Summoned Mobs are dead, continue event m_creature->SetVisibility(VISIBILITY_ON); DoGate(GO_ARENA_1, GO_STATE_READY); //DoScriptText(-1000000, m_creature); // after killed the mobs, no say here m_bCanWalk = true; m_uiEventTimer = 0; break; case 8: // Open North Gate DoGate(GO_ARENA_2, GO_STATE_ACTIVE); m_uiEventTimer = 5000; break; case 9: // Summon Boss m_creature->SetVisibility(VISIBILITY_OFF); m_creature->SummonCreature(RingBoss[urand(0, 5)], aSpawnPositions[1][0], aSpawnPositions[1][1], aSpawnPositions[1][2], aSpawnPositions[1][3], TEMPSUMMON_DEAD_DESPAWN, 0); m_uiEventTimer = 0; break; case 10: // Boss dead //if quest, complete DoGate(GO_ARENA_2, GO_STATE_READY); DoGate(GO_ARENA_3, GO_STATE_ACTIVE); DoGate(GO_ARENA_4, GO_STATE_ACTIVE); m_bCanWalk = true; m_uiEventTimer = 0; break; } ++m_uiEventPhase; } else m_uiEventTimer -= uiDiff; } if (m_bCanWalk) npc_escortAI::UpdateAI(uiDiff); }