Files
project-afterlife/docs/game-servers.md
consultoria-as 81e978947e
Some checks failed
Deploy / deploy (push) Has been cancelled
feat: switch Minecraft from FTB Infinity Evolved to FTB Evolution
Minecraft 1.21.1 + NeoForge 21.1.218 with 200+ mods.
Added MAX_TICK_TIME=-1 to prevent watchdog crashes on startup.
Updated CMS entries, README, and all docs to reflect new modpack.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 13:14:55 +00:00

224 lines
7.1 KiB
Markdown

# Servidores de Juegos
Guia de setup, operacion y troubleshooting de cada servidor de juegos.
## OpenFusion (FusionFall)
### Resumen
| Dato | Valor |
|------|-------|
| Emulador | [OpenFusion](https://github.com/OpenFusionProject/OpenFusion) |
| Lenguaje | C++ |
| Puerto | 23000 (login), 23001 (shard) |
| Base de datos | SQLite (embebida) |
| RAM | ~254 MB |
### Archivos
```
servers/openfusion/
├── Dockerfile # Ubuntu 24.04, copia binario + config
├── docker-entrypoint.sh # Genera config.ini desde env vars
├── config.ini # Configuracion del servidor
├── fusion # Binario compilado (no en git)
├── sql/ # Migraciones SQLite
└── tdata/ # Datos del juego (NPCs, mobs, drops)
```
### Configuracion
Variables de entorno en `docker-compose.dev.yml`:
- `OPENFUSION_SHARD_IP`: IP publica del servidor (default: 192.168.10.234)
- `OPENFUSION_MOTD`: Mensaje del dia
### Conexion de cliente
1. Descargar el cliente FusionFall
2. Usar el launcher de OpenFusion apuntando a `192.168.10.234:23000`
### Troubleshooting
- **"Connection refused"**: Verificar que el contenedor esta corriendo y los puertos estan mapeados
- **Datos de juego**: Los archivos `tdata/` contienen los NPCs, mobs y drops. Si faltan, el mundo estara vacio
---
## MapleStory 2
### Resumen
| Dato | Valor |
|------|-------|
| Emulador | [Maple2](https://github.com/MS2Community/Maple2) |
| Lenguaje | C# / .NET 8 |
| Puertos | 20001 (login), 21001 (world), 20002/21002 (game), 4000 (web) |
| Base de datos | MySQL 8.0 (puerto 3307) |
| RAM total | ~1.4 GB (5 contenedores) |
### Arquitectura Multi-Servicio
```
maple2-mysql (3307)
├── maple2-world (21001) ← Coordinador central, gRPC
│ │
│ ├── maple2-login (20001) ← Autenticacion, seleccion de personaje
│ │
│ └── maple2-game-ch0 (20002/21002) ← Canal de juego
└── maple2-web (4000) ← API web auxiliar
```
Los servidores se comunican entre si via **gRPC** (HTTP/2). El World server actua como coordinador central. Los Game servers se conectan al World al iniciar.
### Setup Inicial (Primera Vez)
#### 1. Clonar el repositorio
```bash
cd servers/
git clone --recurse-submodules https://github.com/MS2Community/Maple2.git maple2
```
#### 2. Descargar datos del cliente
Se necesita el cliente de MapleStory 2 (~14 GB). Los archivos se colocan en `servers/maple2/client-data/Data/`.
Fuentes del cliente:
- [adventure-island-online-2 releases](https://github.com/shuabritze/adventure-island-online-2/releases) (6 partes ZIP)
- Extraer todo a `servers/maple2/client-data/`
#### 3. Aplicar XML Patches
Descargar [MapleStory2-XML v1.2.1](https://github.com/MS2Community/MapleStory2-XML/releases/tag/v1.2.1) y copiar los archivos `Server.m2d`, `Server.m2h`, `Xml.m2d`, `Xml.m2h` a `servers/maple2/client-data/Data/` (reemplazar los originales).
#### 4. Configurar .env
```bash
cp servers/maple2/.env.example servers/maple2/.env
# Editar con las IPs correctas:
# GAME_IP=192.168.10.234
# LOGIN_IP=192.168.10.234
```
#### 5. Verificar .dockerignore
El archivo `servers/maple2/.dockerignore` DEBE incluir:
```
client-data
client-download
xml-patches
```
Sin esto, el build de Docker intentara copiar 14 GB de datos al contexto.
#### 6. Ingestar datos del juego
```bash
cd docker/
docker compose -f docker-compose.maple2.yml up -d maple2-mysql
# Esperar a que MySQL este healthy
docker compose -f docker-compose.maple2.yml run --rm maple2-file-ingest \
bash -c "cd /app && dotnet restore && cd Maple2.File.Ingest && dotnet run"
```
Este proceso importa todos los datos del cliente a MySQL. Toma ~10 minutos.
#### 7. Construir y levantar servidores
```bash
docker compose -f docker-compose.maple2.yml build
docker compose -f docker-compose.maple2.yml up -d
```
### Conexion de cliente
1. Tener el cliente de MapleStory 2 instalado
2. El cliente debe apuntar a `192.168.10.234:20001` (Login Server)
3. Las IPs se configuran en `servers/maple2/.env` (`GAME_IP`, `LOGIN_IP`)
### Troubleshooting
- **"No space left on device" al buildear**: Verificar `.dockerignore` incluye `client-data`
- **"Scripting/Scripts not found"**: Ya corregido — se removio la linea COPY del Dockerfile del Game server
- **"project.assets.json not found" en file-ingest**: Ejecutar `dotnet restore` antes de `dotnet run`
- **Servidores no se conectan entre si**: Verificar que `GRPC_WORLD_IP=maple2-world` y `GRPC_GAME_IP=maple2-game-ch0` estan configurados en el compose
### Agregar mas canales de juego
Para agregar un segundo canal, duplicar el servicio `maple2-game-ch0` en el compose cambiando:
- Nombre: `maple2-game-ch1`
- Puertos: `20003:20003` y `21003:21003`
- `GRPC_GAME_IP: maple2-game-ch1`
---
## Minecraft: FTB Evolution
### Resumen
| Dato | Valor |
|------|-------|
| Imagen Docker | itzg/minecraft-server:java21 |
| Modpack | FTB Evolution v1.29.1 |
| Minecraft | 1.21.1 |
| NeoForge | 21.1.218 |
| Puerto | 25565 |
| RAM | ~3.5 GB (6 GB JVM heap, 8 GB limite contenedor) |
| Mods | 200+ |
### Configuracion
El servidor se configura via variables de entorno en `docker-compose.dev.yml`:
```yaml
environment:
EULA: "TRUE"
TYPE: FTBA
FTB_MODPACK_ID: 125
FTB_MODPACK_VERSION_ID: 100181
MEMORY: 6G
MAX_MEMORY: 6G
MOTD: "Project Afterlife - FTB Evolution"
DIFFICULTY: normal
MAX_PLAYERS: 20
VIEW_DISTANCE: 10
ENABLE_COMMAND_BLOCK: "true"
```
### Primer inicio
El primer inicio toma 5-10 minutos porque:
1. Descarga el FTB App installer
2. Descarga los 200+ mods del modpack
3. Instala NeoForge 21.1.218
4. Genera el mundo
### Conexion de cliente
1. Instalar [FTB App](https://www.feed-the-beast.com/app), MultiMC, ATLauncher, o Prism Launcher
2. Instalar modpack **FTB Evolution** version 1.29.1
3. Multiplayer > Add Server: `192.168.10.234:25565`
### Fix: Watchdog crash en primer inicio
Con 200+ mods, el mod Hexerei tarda mas de 60 segundos generando recetas al iniciar, lo que activa el watchdog de Minecraft. Se resuelve con `MAX_TICK_TIME: -1` en las variables de entorno del compose.
### Troubleshooting
- **Server lag**: Reducir `VIEW_DISTANCE` de 10 a 8, o aumentar `MEMORY` si hay RAM disponible
- **NeoForge install fails**: Verificar que la imagen Docker es `java21` (no java8 ni java17)
- **Watchdog crash (single tick took 60s)**: Verificar que `MAX_TICK_TIME: -1` esta configurado
---
## Operaciones Comunes
### Ver logs de un servidor
```bash
docker logs -f minecraft-ftb # Minecraft
docker logs -f maple2-world # MapleStory 2 World
docker logs -f docker-openfusion-1 # OpenFusion
```
### Reiniciar un servidor
```bash
docker restart minecraft-ftb
docker restart maple2-world maple2-login docker-maple2-game-ch0-1
docker restart docker-openfusion-1
```
### Ver uso de recursos
```bash
docker stats --no-stream
```
### Backup de datos
```bash
# PostgreSQL (CMS)
docker exec docker-postgres-1 pg_dump -U afterlife afterlife > backup_cms.sql
# MySQL (MapleStory 2)
docker exec maple2-db mysqldump -u root -pmaplestory --databases maple-data game-server > backup_ms2.sql
# Minecraft (mundo completo)
docker cp minecraft-ftb:/data/world ./backup_minecraft_world/
```