Este documento reúne ejemplos prácticos y flujos de trabajo completos **para el equipo de staff**. Todo lo que ves aquí se realiza directamente con los comandos del bot (prefijo `!`), sin tocar código ni ejecutar scripts. Los comandos viven en `src/commands/messages/admin` y `src/commands/messages/game`, pero no necesitas abrir esos archivos: la idea es que puedas hacerlo todo desde Discord siguiendo estos pasos.
---
## Tabla de contenidos
1. [Antes de empezar](#antes-de-empezar)
2. [Items: creación, edición y revisión](#items-creación-edición-y-revisión)
3. [Crafteos y materiales](#crafteos-y-materiales) ⭐ **¡Ahora con editor integrado!**
4. [Fundición y refinado](#fundición-y-refinado)
5. [Mutaciones y encantamientos](#mutaciones-y-encantamientos)
6. [Mobs: enemigos y NPCs](#mobs-enemigos-y-npcs)
7. [Áreas y niveles](#áreas-y-niveles)
8. [Misiones (Quests)](#misiones-quests)
9. [Logros (Achievements)](#logros-achievements)
10. [Workflows completos de ejemplo](#workflows-completos-de-ejemplo)
---
## 🎯 Flujo rápido: Crear un ítem con receta de crafteo
**Nuevo proceso (2025)** - Todo desde Discord, sin código:
├─ Pulsar "Receta" ⭐ NUEVO → Escribir: iron_ingot:3, wood_plank:1
└─ Pulsar "Guardar" → ¡Listo! Receta activa
4. !craftear iron_sword → Los jugadores pueden craftear
```
**Antes (2024)**: Había que pedirle al equipo dev que ejecutara scripts de Prisma 🚫
---
## Antes de empezar
> ⭐ **¡NUEVO!** Ahora puedes crear y editar recetas de crafteo directamente desde Discord sin necesidad del equipo dev. Usa el botón **Receta** en los comandos `!item-crear` e `!item-editar`. Ver [sección de Crafteos](#crear-nuevas-recetas-de-crafteo-directo-desde-discord) para más detalles.
- Asegúrate de tener el permiso `Manage Guild` o el rol de staff configurado; varios comandos lo revisan con `hasManageGuildOrStaff`.
- Siempre usa claves (`key`) en minúsculas y sin espacios. Son únicas por servidor y no se pueden repetir.
- Todos los editores funcionan con botones + modales. Si cierras la ventana o pasa más de 30 min sin responder, el editor caduca y debes reabrirlo.
- Cuando un modal pida JSON, puedes copiar los ejemplos de esta guía y ajustarlos. Si el JSON no es válido, el bot te avisará y no guardará los cambios.
---
## Items: creación, edición y revisión
### Crear un ítem nuevo — `!item-crear <key>`
1. Escribe `!item-crear piedra_mistica` (usa la key que necesites).
2. Pulsa **Base** y completa:
- **Nombre** y **Descripción**: lo que verán los jugadores.
- **Categoría** (opcional) para agrupar en listados (`weapon`, `material`, `consumible`, etc.).
- **Icon URL** si tienes una imagen.
- **Stackable y Máx inventario** en formato `true,10`. Ejemplos: `true,64`, `false,1`, o deja vacío para infinito.
3. Pulsa **Tags** y agrega etiquetas separadas por coma (`rare, evento`); sirven para filtrar en `!items-lista`.
4. Pulsa **Props (JSON)** y pega solo lo que necesites. Ejemplo rápido para una herramienta que también cura al uso:
5. Pulsa **Receta** (⭐ nuevo) si quieres que el ítem sea crafteable. Ver [sección de Crafteos](#crear-nuevas-recetas-de-crafteo-directo-desde-discord) para más detalles.
6. Cuando todo esté listo, pulsa **Guardar**. El bot confirmará con "✅ Item creado".
### Editar, listar y borrar
-`!item-editar` abre el mismo editor, pero cargando un ítem existente.
-`!item-eliminar <key>` borra la versión local (solicita confirmación).
-`!items-lista` y `!item-ver <key>` sirven para revisar lo que ya existe.
> 💡 Tip: si solo quieres revisar las propiedades de un ítem, usa `!item-ver <key>`; mostrará los `props` formateados en JSON.
### Preparar ítems especiales
- **Consumibles**: en Props agrega
```json
"food": {
"healHp": 40,
"healPercent": 10,
"cooldownKey": "food:pocion_epica",
"cooldownSeconds": 120
}
```
Luego prueba con `!comer pocion_epica` (usa la key real) para ver el mensaje de curación y el cooldown.
- **Armas/armaduras**: usa `damage`, `defense` o `maxHpBonus`. Si quieres limitar mutaciones, agrega `mutationPolicy` (ver sección más abajo).
---
## Crafteos y materiales
El crafteo permite combinar materiales para crear ítems más valiosos. A diferencia de la fundición, el crafteo es instantáneo y no requiere tiempo de espera.
### Cómo funciona el crafteo
1. El jugador ejecuta `!craftear <productKey>`.
2. El bot verifica que tenga todos los ingredientes.
3. Si los tiene, los descuenta del inventario y entrega el producto inmediatamente.
4. Las estadísticas del jugador se actualizan (`itemsCrafted`).
> 💡 **Tip**: las mutaciones con efectos custom (como `fortune_enchant` que aumenta drops) requieren lógica adicional en el código. Consulta con el equipo dev antes de anunciarlas.
- Asegúrate de tener el permiso `Manage Guild` o el rol de staff configurado; varios comandos lo revisan con `hasManageGuildOrStaff`.
- Siempre usa claves (`key`) en minúsculas y sin espacios. Son únicas por servidor y no se pueden repetir.
- Todos los editores funcionan con botones + modales. Si cierras la ventana o pasa más de 30min sin responder, el editor caduca y debes reabrirlo.
- Cuando un modal pida JSON, puedes copiar los ejemplos de esta guía y ajustarlos. Si el JSON no es válido, el bot te avisará y no guardará los cambios.
---
## Items: creación, edición y revisión
### Crear un ítem nuevo — `!item-crear <key>`
1. Escribe `!item-crear piedra_mistica` (usa la key que necesites).
2. Pulsa **Base** y completa:
- **Nombre** y **Descripción**: lo que verán los jugadores.
- **Categoría** (opcional) para agrupar en listados (`weapon`, `material`, `consumible`, etc.).
- **Icon URL** si tienes una imagen.
- **Stackable y Máx inventario** en formato `true,10`. Ejemplos: `true,64`, `false,1`, o deja vacío para infinito.
3. Pulsa **Tags** y agrega etiquetas separadas por coma (`rare, evento`); sirven para filtrar en `!items-lista`.
4. Pulsa **Props (JSON)** y pega solo lo que necesites. Ejemplo rápido para una herramienta que también cura al uso:
- **Armas/armaduras**: usa `damage`, `defense` o `maxHpBonus`. Si quieres limitar mutaciones, agrega `mutationPolicy` (ver sección más abajo).
---
## Crafteos y materiales
El crafteo permite combinar materiales para crear ítems más valiosos. A diferencia de la fundición, el crafteo es instantáneo y no requiere tiempo de espera.
### Cómo funciona el crafteo
1. El jugador ejecuta `!craftear <productKey>`.
2. El bot verifica que tenga todos los ingredientes.
3. Si los tiene, los descuenta del inventario y entrega el producto inmediatamente.
4. Las estadísticas del jugador se actualizan (`itemsCrafted`).
1. Asegúrate de que existe la mutación (pide la `mutationKey` al equipo dev si aún no está en la base).
2. Desde `!item-editar`, abre **Props (JSON)** y agrega:
```json
"mutationPolicy": {
"allowedKeys": ["ruby_core", "emerald_core"],
"deniedKeys": ["curse_core"]
}
```
3. Entrega al jugador la mutación correspondiente y pídele que use `!encantar <itemKey> <mutationKey>`.
4. Para probarlo tú mismo, equipa el ítem y ejecuta `!encantar`. Si la política lo permite, el bot responde con “✨ Aplicada mutación…”.
---
## Fundición y refinado
La fundición es un proceso que transforma materiales crudos en recursos refinados con un tiempo de espera. Es útil para economías más realistas donde los jugadores deben planificar.
### Cómo funciona la fundición
1. El jugador ejecuta `!fundir` especificando inputs y output.
2. El bot verifica que tenga los materiales, los descuenta del inventario y crea un **job** con tiempo de espera.
3. Cuando el tiempo expira, el jugador usa `!fundir-reclamar` para obtener el resultado.
### Crear nuevas recetas de fundición
#### Paso 1: Crear los ítems necesarios
1.**Materiales de entrada** (ej. minerales crudos):
```
!item-crear copper_ore
```
- Nombre: Mineral de Cobre
- Descripción: Mineral sin refinar extraído de las minas
- Stackable: true,999
- Props: `{"craftingOnly": true}`
```
!item-crear coal
```
- Nombre: Carbón
- Descripción: Combustible para fundición
- Stackable: true,999
2.**Material de salida** (ej. lingote refinado):
```
!item-crear copper_ingot
```
- Nombre: Lingote de Cobre
- Descripción: Cobre puro listo para craftear
- Stackable: true,999
#### Paso 2: Coordinar con el equipo dev
Envía la siguiente información al equipo de desarrollo:
**Receta de fundición: Lingote de Cobre**
- **Inputs**:
-`copper_ore`: 5 unidades
-`coal`: 2 unidades
- **Output**:
-`copper_ingot`: 2 unidades
- **Duración**: 300 segundos (5 minutos)
El equipo dev ejecutará:
```typescript
// Ejemplo de lo que hará el dev (tú no necesitas hacerlo)
await createSmeltJob(userId, guildId,
[
{ itemKey: 'copper_ore', qty: 5 },
{ itemKey: 'coal', qty: 2 }
],
'copper_ingot',
2,
300
);
```
#### Paso 3: Probar la receta
1. Asegúrate de tener los materiales:
```
!inventario
```
2. Inicia la fundición:
```
!fundir copper_ore:5,coal:2 copper_ingot:2 300
```
(El comando exacto puede variar, verifica con `!help fundir`)
3. Espera el tiempo configurado o usa un comando de admin para acelerar (si existe).
| Progreso de jugadores | `!stats`, `!player <@usuario>`, `!racha` | Ayuda a validar nuevas recompensas. |
---
## Áreas de juego y niveles
Las áreas son lugares donde los jugadores realizan actividades (minar, pescar, pelear, plantar). Cada área tiene varios niveles, y cada nivel puede tener requisitos, recompensas y mobs específicos.
### Crear un área — `!area-crear <key>`
1. Ejecuta el comando con la key deseada (ej. `!area-crear mina_profunda`).
2. Pulsa **Base** y completa:
- **Nombre**: Lo que verán los jugadores.
- **Tipo**: `MINE`, `LAGOON`, `FIGHT` o `FARM` (en mayúsculas).
3. Pulsa **Config (JSON)** si necesitas configuración técnica adicional (raramente usado, pregunta al equipo dev).
4. Pulsa **Meta (JSON)** para metadatos adicionales (opcional).
5. Guarda. Usa `!areas-lista` para verificar.
### Editar un área — `!area-editar`
Abre un selector con todas las áreas del servidor, elige una y usa el mismo editor que en crear.
### Configurar niveles de área — `!area-nivel <areaKey> <level>`
Cada nivel puede tener:
- **Requisitos**: herramienta mínima, nivel de personaje, etc.
- **Recompensas**: qué se obtiene al completar (monedas, ítems, XP).
- **Mobs**: lista de enemigos que aparecen en ese nivel.
- **Ventana**: fechas ISO para eventos temporales.
#### Ejemplo: crear el nivel 1 de una mina
```bash
!area-nivel mina_profunda 1
```
1.**Requisitos** (JSON):
```json
{
"toolType": "pickaxe",
"minToolTier": 1,
"minLevel": 1
}
```
2.**Recompensas** (JSON):
```json
{
"coins": 50,
"items": [
{ "key": "copper_ore", "quantity": 3 }
],
"xp": 10
}
```
3.**Mobs** (JSON) — Aquí defines qué mobs aparecen y su peso:
```json
{
"draws": 1,
"table": [
{ "mobKey": "slime_verde", "weight": 10 },
{ "mobKey": "murcielago", "weight": 5 }
]
}
```
> 💡 **Importante**: los mobs deben existir previamente. Créalos con `!mob-crear` antes de referenciarlos aquí.
4.**Ventana** (opcional): si quieres que este nivel solo esté disponible durante un evento, agrega fechas ISO:
- Desde: `2025-12-01T00:00:00Z`
- Hasta: `2025-12-31T23:59:59Z`
5. Guarda. Verifica con `!mina mina_profunda` (o el comando correspondiente al tipo de área).
### Borrar áreas y niveles
-`!area-eliminar <key>` borra el área completa (solicita confirmación).
- Para borrar un nivel específico, coordina con el equipo dev o edita manualmente la base de datos (por seguridad no hay comando público).
---
## Mobs (enemigos)
Los mobs son enemigos que aparecen en áreas de tipo `FIGHT` o en niveles de minas/lagunas. También se pueden usar en eventos especiales.
### Crear un mob — `!mob-crear <key>`
1. Ejecuta el comando (ej. `!mob-crear slime_verde`).
2. Pulsa **Base** y completa:
- **Nombre**: Nombre visible del mob.
- **Categoría** (opcional): para agrupar (ej. `slime`, `undead`, `boss`).
3. Pulsa **Stats (JSON)** y define las estadísticas:
```json
{
"attack": 8,
"hp": 50,
"defense": 2,
"xpReward": 15
}
```
4. Pulsa **Drops (JSON)** para configurar la tabla de recompensas:
-`table`: lista de posibles recompensas con su peso (más peso = más probable).
5. Guarda y revisa con `!mobs-lista` o `!mob-ver <key>`.
### Editar y borrar mobs
-`!mob-editar` abre el mismo editor, pero cargando un mob existente.
-`!mob-eliminar <key>` borra el mob (solicita confirmación).
### Probar mobs en combate
- Usa `!pelear <mobKey>` para simular un combate. El bot mostrará el resultado, daño infligido, drops recibidos y XP ganado.
- Ajusta `attack`, `hp` y `defense` según el balance deseado.
---
## Recetas de crafteo y fundición
Aunque el crafteo funciona con `!craftear <productKey>` y la fundición con `!fundir`, las **recetas** (`itemRecipe`) y los **trabajos de fundición** se administran desde backoffice o scripts porque involucran múltiples relaciones.
### ¿Cómo agrego una nueva receta de crafteo?
1. Asegúrate de que el producto final y todos los ingredientes existen (créalos con `!item-crear`).
- **Ingredientes**: lista con `itemKey` y cantidad. Ejemplo:
```
- iron_ingot: 3
- wood_plank: 1
```
3. El equipo dev ejecutará el seed o script correspondiente.
4. Verifica con `!craftear iron_sword` que funcione correctamente.
### ¿Cómo agrego una nueva receta de fundición?
1. Crea los ítems de entrada (ej. `iron_ore`, `coal`) y el de salida (ej. `iron_ingot`).
2. Coordina con el equipo dev para que configuren el `smeltJob` indicando:
- **Inputs**: lista de `itemKey` + cantidad.
- **Output**: `itemKey` + cantidad.
- **Duración**: segundos que tarda el proceso.
3. Prueba con `!fundir` y verifica el tiempo restante con `!fundir-reclamar`.
> 📌 **Nota**: si necesitas muchas recetas, considera crear un archivo JSON con todas y enviarlo al equipo dev para carga masiva.
---
## Checklist para lanzar contenido nuevo
- [ ] El ítem tiene nombre, descripción, tags y props correctos en `!item-ver`.
- [ ] Hay una forma de conseguirlo (oferta, misión, logro, drop o craft).
- [ ] Si es un mob, tiene stats y drops configurados; pruébalo con `!pelear`.
- [ ] Si es un área con niveles, cada nivel tiene requisitos, recompensas y mobs válidos.
- [ ] Probaste el flujo como jugador (`!craftear`, `!fundir`, `!comprar`, `!mina`, `!pelear`, etc.).
- [ ] Los requisitos y recompensas de logros/misiones muestran JSON válido.
- [ ] Comunicaste al equipo cuándo entra y cómo se consigue.
Si algo falla, copia el mensaje de error completo y súbelo al canal de soporte interno; así el equipo de desarrollo puede ayudarte sin reproducir todo desde cero.
---
## Comandos de consulta rápida
Estos comandos te ayudan a revisar lo que ya está configurado sin abrir editores:
| Comando | Descripción |
| --- | --- |
| `!items-lista` | Lista todos los ítems del servidor. |
| `!item-ver <key>` | Muestra detalles completos de un ítem (props, tags, etc.). |
| `!mobs-lista` | Lista todos los mobs del servidor. |
| `!areas-lista` | Lista todas las áreas del servidor. |
| `!logros-lista` | Lista todos los logros disponibles. |
| `!logro-ver <key>` | Muestra requisitos y recompensas de un logro. |
| `!misiones-lista` | Lista todas las misiones del servidor. |
| `!mision-ver <key>` | Muestra detalles de una misión específica. |