# Dungeons (backlog 34, D33) Ícone de portão sob o botão de sistemas, ao lado do minimapa. Quem abre uma sala convida os jogadores online que ainda podem entrar; 5 jogadores enfrentam ondas de monstros contra o relógio; 5 dificuldades; 2 entradas por personagem por dia (dia de Brasília); bots completam o grupo. ## Peças do OpenMU reaproveitadas (sem mudar o core) - **Instância por grupo**: o mini game genérico (`MiniGameContext`, criado pelo `MiniGameManager` para tipos sem classe própria) dá mapa próprio, janela de entrada, tempo de jogo, saída e retirada para a safe zone. - **Mapas**: os templos do Illusion Temple (45–49), que este OpenMU não usa (não há o evento). Dificuldade N = templo N. Cinco `MiniGameDefinition` (tipo `IllusionTemple`, nível 1–5, entrada/jogo/saída 15 s / 12 min / 20 s, máx. 5) criadas por update (`MuCustom.Items/DungeonDefinitionsUpdatePlugIn.cs`). - **Monstros em tempo de execução**: `Monster` + `MonsterSpawnArea` (`SpawnTrigger.OnceAtEventStart`), como o `/createmonster`. ## Fluxo (`MuCustom.Systems/Dungeons.cs`) Pedidos `C1 FC`: 08 estado · 09 abrir sala (dificuldade) · 0A aceitar convite (nome do líder, 10 bytes) · 0C sair/fechar. Respostas `C2 FC`: 88 estado da janela · 89 convite · 8A painel da partida (onda, monstros restantes, tempo, resultado). 1. **Sala**: o líder abre; o convite (89) vai só a quem tem o nível, não está em evento/sala e ainda tem entrada hoje. 2. **Bots**: passado 1 min sem 5 jogadores, um bot online livre (`Account.IsBot`, nível suficiente, ordem aleatória) entra a cada 3–16 s aleatórios. A sala começa quando enche, quando não há mais bots disponíveis ou aos 150 s. 3. **Partida**: todos saem das parties antigas e entram numa party nova (a instância é da party); os humanos entram pelo `MiniGameContext` e são levados ao portão; os bots recebem a ordem pela fila de ações do próprio bot (propriedade `PendingBotActions`, `internal`, lida por reflexão) e caminham até a arena. A arena é o bloco aberto de 5×5 mais perto do portão (a área do portão é safe zone e não aceita monstros). As ondas nascem a 3–9 casas; o tempo limite corre. Um cliente que demora (ou nunca confirma) a troca de mapa é esperado por até 30 s; se não confirmar, só perde o início. 4. **Resultado**: limpar todas as ondas paga Ruud + um item na Gremory Case a cada humano (bots não recebem); estourar o tempo falha. Depois de 8 s todos vão para a safe zone. A entrada é gasta ao entrar (`mucustom.dungeon_runs`). | Dificuldade | Nível mínimo | Monstros (nível) | Ondas | Tempo | Ruud | Item | |---|---|---|---|---|---|---| | 1 | 50 | 20–50 | 6 · 8 · 10 | 5 min | 150 | Bless | | 2 | 150 | 50–80 | 8 · 10 · 12 | 6 min | 300 | Soul | | 3 | 250 | 80–105 | 10 · 12 · 14 | 7 min | 500 | Life | | 4 | 330 | 100–125 | 12 · 14 · 16 · 8 | 8 min | 800 | Creation | | 5 | 380 | 115–160 | 14 · 16 · 18 · 10 | 9 min | 1200 | Guardian | (Fonte: `Dungeons.Levels`; a última onda das dificuldades 4–5 é de elite.) ## Bots `GAME_BOTS=yes` (padrão em `.env.example`, 6 contas × 2 personagens) liga os bots do OpenMU; sem eles a dungeon só começa com os jogadores que entrarem. Os bots ficam mais humanos com o patch 0003 (D34). O teste de ponta a ponta com o bot de protocolo: dificuldade 1 com 4 bots concluída com folga e recompensas pagas. ## Fora de escopo Ranking das dungeons; chefes próprios por dificuldade (o chefe com fases é o mundial, `docs/boss-fases.md`).