1387 lines
46 KiB
Markdown
1387 lines
46 KiB
Markdown
# Guía rápida para el staff: crear y ajustar contenido desde Discord
|
||
|
||
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:
|
||
|
||
```
|
||
1. !item-crear iron_ingot → Crear ingrediente 1
|
||
2. !item-crear wood_plank → Crear ingrediente 2
|
||
3. !item-crear iron_sword → Crear producto
|
||
├─ Pulsar "Base" → Nombre, descripción, etc.
|
||
├─ Pulsar "Props" → Agregar {"craftable": {"enabled": true}}
|
||
├─ 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:
|
||
|
||
```json
|
||
{
|
||
"tool": { "type": "pickaxe", "tier": 2 },
|
||
"breakable": { "enabled": true, "maxDurability": 120 },
|
||
"food": { "healHp": 25, "cooldownSeconds": 180 }
|
||
}
|
||
```
|
||
|
||
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.
|
||
|
||
- **Cofres**: añade
|
||
|
||
```json
|
||
"chest": {
|
||
"enabled": true,
|
||
"consumeOnOpen": true,
|
||
"rewards": [
|
||
{ "type": "coins", "amount": 500 },
|
||
{ "type": "item", "itemKey": "token_evento", "qty": 3 }
|
||
]
|
||
}
|
||
```
|
||
|
||
Después abre el cofre con `!abrir <key>`.
|
||
|
||
- **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`).
|
||
|
||
---
|
||
|
||
## Mutaciones y encantamientos
|
||
|
||
Las mutaciones permiten mejorar ítems agregándoles bonificaciones especiales. Son consumibles permanentes que se aplican a un ítem específico.
|
||
|
||
### Crear mutaciones (requiere equipo dev)
|
||
|
||
Las mutaciones se crean directamente en la base de datos. Envía al equipo dev:
|
||
|
||
- **Key**: identificador único (ej. `ruby_core`, `sharpness_enchant`)
|
||
- **Nombre**: nombre visible
|
||
- **Efectos** (JSON):
|
||
```json
|
||
{
|
||
"damageBonus": 15,
|
||
"defenseBonus": 0,
|
||
"maxHpBonus": 0
|
||
}
|
||
```
|
||
|
||
### Configurar políticas de mutación en ítems
|
||
|
||
Decide qué mutaciones puede recibir cada ítem editando sus **Props**:
|
||
|
||
1. Ejecuta `!item-editar` y selecciona el ítem (ej. `iron_sword`).
|
||
2. Abre **Props (JSON)** y agrega o modifica:
|
||
|
||
```json
|
||
"mutationPolicy": {
|
||
"allowedKeys": ["ruby_core", "emerald_core", "sharpness_enchant"],
|
||
"deniedKeys": ["curse_weakness"]
|
||
}
|
||
```
|
||
|
||
- `allowedKeys`: solo estas mutaciones se pueden aplicar (si está vacío o ausente, acepta todas excepto las denegadas).
|
||
- `deniedKeys`: estas mutaciones están prohibidas explícitamente.
|
||
|
||
### Ejemplos de mutaciones por tipo de ítem
|
||
|
||
#### Armas (espadas, arcos, alabardas)
|
||
```json
|
||
"mutationPolicy": {
|
||
"allowedKeys": [
|
||
"sharpness_enchant",
|
||
"fire_aspect",
|
||
"vampire_core",
|
||
"ruby_core"
|
||
],
|
||
"deniedKeys": ["defense_boost", "hp_regen"]
|
||
}
|
||
```
|
||
|
||
#### Armaduras (petos, cascos, botas)
|
||
```json
|
||
"mutationPolicy": {
|
||
"allowedKeys": [
|
||
"defense_boost",
|
||
"hp_regen",
|
||
"emerald_core",
|
||
"thorns_enchant"
|
||
],
|
||
"deniedKeys": ["sharpness_enchant", "fire_aspect"]
|
||
}
|
||
```
|
||
|
||
#### Herramientas (picos, hachas)
|
||
```json
|
||
"mutationPolicy": {
|
||
"allowedKeys": [
|
||
"efficiency_boost",
|
||
"unbreaking_core",
|
||
"fortune_enchant"
|
||
],
|
||
"deniedKeys": ["combat_related"]
|
||
}
|
||
```
|
||
|
||
### Aplicar mutaciones como staff (para pruebas)
|
||
|
||
1. Asegúrate de tener el ítem en tu inventario (`!inventario`).
|
||
2. Ejecuta:
|
||
```
|
||
!encantar iron_sword ruby_core
|
||
```
|
||
3. El bot verificará:
|
||
- Que tienes el ítem.
|
||
- Que la mutación existe.
|
||
- Que la política del ítem lo permite.
|
||
4. Si todo es correcto: "✨ Aplicada mutación `ruby_core` a **Espada de Hierro**."
|
||
|
||
### Verificar mutaciones aplicadas
|
||
|
||
- Usa `!player <@usuario>` o `!stats` para ver bonificaciones de combate.
|
||
- Las mutaciones aparecen sumadas en `damage`, `defense` o `maxHp` según corresponda.
|
||
|
||
### Catálogo de mutaciones sugeridas
|
||
|
||
| Mutación Key | Nombre | Efectos | Tipo de Ítem |
|
||
| --- | --- | --- | --- |
|
||
| `ruby_core` | Núcleo de Rubí | +15 damage | Armas |
|
||
| `emerald_core` | Núcleo de Esmeralda | +10 defense, +20 maxHp | Armaduras |
|
||
| `sapphire_core` | Núcleo de Zafiro | +25 maxHp | Capas/Accesorios |
|
||
| `sharpness_enchant` | Filo Mejorado | +8 damage | Armas cortantes |
|
||
| `fire_aspect` | Aspecto ígneo | +12 damage | Armas de fuego |
|
||
| `defense_boost` | Refuerzo Defensivo | +7 defense | Armaduras |
|
||
| `hp_regen` | Regeneración | +30 maxHp | Armaduras/Capas |
|
||
| `efficiency_boost` | Eficiencia | (lógica custom) | Herramientas |
|
||
| `fortune_enchant` | Fortuna | (lógica custom) | Picos |
|
||
| `unbreaking_core` | Irrompible | +50% durabilidad | Herramientas |
|
||
| `vampire_core` | Vampirismo | +10 damage, lifesteal | Armas |
|
||
| `thorns_enchant` | Espinas | refleja daño | Armaduras |
|
||
|
||
> 💡 **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.
|
||
|
||
---
|
||
|
||
## Mobs: enemigos y NPCs
|
||
|
||
- 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:
|
||
|
||
```json
|
||
{
|
||
"tool": { "type": "pickaxe", "tier": 2 },
|
||
"breakable": { "enabled": true, "maxDurability": 120 },
|
||
"food": { "healHp": 25, "cooldownSeconds": 180 }
|
||
}
|
||
```
|
||
|
||
5. 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.
|
||
|
||
- **Cofres**: añade
|
||
|
||
```json
|
||
"chest": {
|
||
"enabled": true,
|
||
"consumeOnOpen": true,
|
||
"rewards": [
|
||
{ "type": "coins", "amount": 500 },
|
||
{ "type": "item", "itemKey": "token_evento", "qty": 3 }
|
||
]
|
||
}
|
||
```
|
||
|
||
Después abre el cofre con `!abrir <key>`.
|
||
|
||
- **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`).
|
||
|
||
### Crear nuevas recetas de crafteo (¡directo desde Discord!)
|
||
|
||
Ya **NO necesitas al equipo dev** para crear recetas. Ahora puedes configurarlas directamente al crear o editar un ítem.
|
||
|
||
#### Paso 1: Crear todos los ítems involucrados
|
||
|
||
**Ejemplo: Espada de Hierro**
|
||
|
||
1. **Ingredientes**:
|
||
```
|
||
!item-crear iron_ingot
|
||
```
|
||
- Nombre: Lingote de Hierro
|
||
- Stackable: true,999
|
||
- Props: `{"craftingOnly": true}`
|
||
|
||
```
|
||
!item-crear wood_plank
|
||
```
|
||
- Nombre: Tablón de Madera
|
||
- Stackable: true,999
|
||
- Props: `{"craftingOnly": true}`
|
||
|
||
2. **Producto final con receta**:
|
||
```
|
||
!item-crear iron_sword
|
||
```
|
||
- Nombre: Espada de Hierro
|
||
- Descripción: Espada básica de hierro forjado
|
||
- Stackable: false,1
|
||
- Props:
|
||
```json
|
||
{
|
||
"craftable": {"enabled": true},
|
||
"tool": {"type": "sword", "tier": 2},
|
||
"damage": 15,
|
||
"breakable": {"enabled": true, "maxDurability": 200}
|
||
}
|
||
```
|
||
|
||
#### Paso 2: Configurar la receta (¡NUEVO!)
|
||
|
||
Antes de guardar el ítem, pulsa el botón **Receta** en el editor. Aparecerá un modal como este:
|
||
|
||
```
|
||
┌─────────────────────────────────────────┐
|
||
│ 📝 Receta de Crafteo │
|
||
├─────────────────────────────────────────┤
|
||
│ Habilitar receta? (true/false) │
|
||
│ [ true ] │
|
||
├─────────────────────────────────────────┤
|
||
│ Cantidad que produce │
|
||
│ [ 1 ] │
|
||
├─────────────────────────────────────────┤
|
||
│ Ingredientes (itemKey:qty, ...) │
|
||
│ ┌───────────────────────────────────┐ │
|
||
│ │ iron_ingot:3, wood_plank:1 │ │
|
||
│ │ │ │
|
||
│ └───────────────────────────────────┘ │
|
||
│ │
|
||
│ [Enviar] [Cancelar] │
|
||
└─────────────────────────────────────────┘
|
||
```
|
||
|
||
**Campos del modal:**
|
||
|
||
1. **Habilitar receta?**: escribe `true` para activar, `false` para desactivar
|
||
2. **Cantidad que produce**: cuántas unidades del producto se crean (ej. `1` espada, `3` lingotes, `10` flechas)
|
||
3. **Ingredientes**: lista separada por comas en formato `itemKey:cantidad`
|
||
|
||
El formato de ingredientes es: `itemKey:cantidad, itemKey:cantidad, ...`
|
||
|
||
**Ejemplos válidos:**
|
||
- `iron_ingot:3, wood_plank:1` → necesita 3 lingotes y 1 tablón
|
||
- `leather:8, string:2` → necesita 8 cueros y 2 cuerdas
|
||
- `ruby:1, gold_ingot:5, magic_dust:2` → necesita 1 rubí, 5 lingotes de oro y 2 polvos mágicos
|
||
|
||
El bot automáticamente:
|
||
- ✅ Valida que las claves (`itemKey`) existan en tu servidor
|
||
- ✅ Convierte las claves a IDs de base de datos
|
||
- ✅ Guarda la receta junto con el ítem
|
||
- ❌ Rechaza ingredientes que no existen con mensaje de error claro
|
||
|
||
Finalmente pulsa **Guardar** y listo. ¡La receta ya está activa!
|
||
|
||
#### 📋 Ejemplo JSON completo de un ítem con receta
|
||
|
||
Después de guardar, el ítem quedará estructurado así en la base de datos:
|
||
|
||
**EconomyItem (iron_sword)**:
|
||
```json
|
||
{
|
||
"id": "uuid-123",
|
||
"key": "iron_sword",
|
||
"guildId": "guild-456",
|
||
"name": "Espada de Hierro",
|
||
"description": "Espada básica de hierro forjado",
|
||
"stackable": false,
|
||
"maxInventory": 1,
|
||
"props": {
|
||
"craftable": {"enabled": true},
|
||
"tool": {"type": "sword", "tier": 2},
|
||
"damage": 15,
|
||
"breakable": {"enabled": true, "maxDurability": 200}
|
||
},
|
||
"tags": ["weapon", "tier2"],
|
||
"itemRecipe": {
|
||
"id": "recipe-789",
|
||
"productItemId": "uuid-123",
|
||
"productQuantity": 1,
|
||
"ingredients": [
|
||
{
|
||
"id": "ing-001",
|
||
"recipeId": "recipe-789",
|
||
"itemId": "uuid-iron-ingot",
|
||
"quantity": 3
|
||
},
|
||
{
|
||
"id": "ing-002",
|
||
"recipeId": "recipe-789",
|
||
"itemId": "uuid-wood-plank",
|
||
"quantity": 1
|
||
}
|
||
]
|
||
}
|
||
}
|
||
```
|
||
|
||
> 💡 **Nota**: No necesitas escribir este JSON manualmente. El editor lo crea automáticamente cuando pulsas "Receta" y guardas.
|
||
|
||
#### Paso 3: Editar recetas existentes
|
||
|
||
Si ya creaste un ítem y quieres agregar/modificar su receta:
|
||
|
||
```
|
||
!item-editar iron_sword
|
||
```
|
||
|
||
Pulsa **Receta** y edita:
|
||
- Para **agregar** una receta nueva: pon `true` y escribe los ingredientes
|
||
- Para **modificar** ingredientes: cambia el texto (ej. `iron_ingot:5, wood_plank:2`)
|
||
- Para **deshabilitar** la receta: pon `false` en "Habilitar receta?"
|
||
- Para **eliminar** completamente: pon `false` y deja ingredientes vacío
|
||
|
||
Cuando guardas, el bot:
|
||
- 🔄 Actualiza la receta si cambió
|
||
- ➕ Crea la receta si es nueva
|
||
- 🗑️ Elimina la receta si la deshabilitaste
|
||
|
||
#### Paso 4: Probar la receta
|
||
|
||
1. Asegúrate de tener los ingredientes en tu inventario.
|
||
2. Ejecuta:
|
||
```
|
||
!craftear iron_sword
|
||
```
|
||
3. El bot responderá:
|
||
- ✅ Si tienes todo: "✨ Crafteaste **Espada de Hierro** x1"
|
||
- ❌ Si falta algo: "No tienes suficientes ingredientes: necesitas 3 iron_ingot, 1 wood_plank"
|
||
|
||
### 📦 Ejemplos de Props JSON para diferentes tipos de crafteo
|
||
|
||
#### Arma crafteable con durabilidad
|
||
```json
|
||
{
|
||
"craftable": {"enabled": true},
|
||
"tool": {"type": "sword", "tier": 2},
|
||
"damage": 15,
|
||
"breakable": {
|
||
"enabled": true,
|
||
"maxDurability": 200,
|
||
"repairItem": "iron_ingot",
|
||
"repairAmount": 20
|
||
}
|
||
}
|
||
```
|
||
**Receta sugerida**: `iron_ingot:3, wood_plank:1`
|
||
|
||
---
|
||
|
||
#### Armadura crafteable con bonificaciones
|
||
```json
|
||
{
|
||
"craftable": {"enabled": true},
|
||
"wearable": {
|
||
"slot": "chest",
|
||
"visual": "https://example.com/iron_chestplate.png"
|
||
},
|
||
"defense": 12,
|
||
"maxHpBonus": 20,
|
||
"breakable": {
|
||
"enabled": true,
|
||
"maxDurability": 300
|
||
}
|
||
}
|
||
```
|
||
**Receta sugerida**: `iron_ingot:8, leather:2`
|
||
|
||
---
|
||
|
||
#### Consumible crafteable (pociones)
|
||
```json
|
||
{
|
||
"craftable": {"enabled": true},
|
||
"food": {
|
||
"healHp": 50,
|
||
"healPercent": 0,
|
||
"cooldownKey": "potion:health",
|
||
"cooldownSeconds": 60
|
||
},
|
||
"stackable": true,
|
||
"maxInventory": 10
|
||
}
|
||
```
|
||
**Receta sugerida**: `red_herb:2, water_bottle:1, magic_dust:1`
|
||
|
||
---
|
||
|
||
#### Material de crafteo (produce múltiples unidades)
|
||
```json
|
||
{
|
||
"craftable": {"enabled": true},
|
||
"craftingOnly": true,
|
||
"description": "Material refinado usado en crafteo avanzado",
|
||
"stackable": true,
|
||
"maxInventory": 999
|
||
}
|
||
```
|
||
**Receta sugerida**: `iron_ore:2, coal:1` → **Produce 3 unidades** (configurar en "Cantidad que produce": `3`)
|
||
|
||
---
|
||
|
||
#### Herramienta con efectos especiales
|
||
```json
|
||
{
|
||
"craftable": {"enabled": true},
|
||
"tool": {
|
||
"type": "pickaxe",
|
||
"tier": 3,
|
||
"efficiency": 1.5,
|
||
"fortune": true
|
||
},
|
||
"breakable": {
|
||
"enabled": true,
|
||
"maxDurability": 500,
|
||
"unbreaking": 2
|
||
}
|
||
}
|
||
```
|
||
**Receta sugerida**: `steel_ingot:3, diamond:2, enchanted_core:1`
|
||
|
||
---
|
||
|
||
#### Ítem decorativo/coleccionable
|
||
```json
|
||
{
|
||
"craftable": {"enabled": true},
|
||
"collectible": true,
|
||
"rarity": "legendary",
|
||
"tradeable": false,
|
||
"description": "Trofeo único obtenido al craftear materiales legendarios",
|
||
"stackable": false,
|
||
"maxInventory": 1
|
||
}
|
||
```
|
||
**Receta sugerida**: `mythril_ingot:10, dragon_scale:5, phoenix_feather:3`
|
||
|
||
---
|
||
|
||
#### Cofre crafteable con recompensas
|
||
```json
|
||
{
|
||
"craftable": {"enabled": true},
|
||
"chest": {
|
||
"enabled": true,
|
||
"consumeOnOpen": true,
|
||
"rewards": [
|
||
{"type": "coins", "amount": 1000},
|
||
{"type": "item", "itemKey": "rare_gem", "qty": 2}
|
||
]
|
||
}
|
||
}
|
||
```
|
||
**Receta sugerida**: `wood_plank:8, iron_ingot:2, gold_ingot:1`
|
||
|
||
---
|
||
|
||
### Categorías de recetas sugeridas
|
||
|
||
#### 🛠️ Herramientas
|
||
|
||
**Pico de Hierro**
|
||
- Ingredientes: 3 iron_ingot + 2 wood_plank
|
||
- Output: 1 iron_pickaxe (tier 2, 150 durabilidad)
|
||
|
||
**Caña de Pescar Mejorada**
|
||
- Ingredientes: 2 wood_plank + 1 string + 1 iron_ingot
|
||
- Output: 1 advanced_fishing_rod (tier 2, bonus catch rate)
|
||
|
||
**Hacha de Batalla**
|
||
- Ingredientes: 4 steel_ingot + 2 leather + 1 ruby
|
||
- Output: 1 battle_axe (tier 3, 20 damage)
|
||
|
||
#### ⚔️ Armas
|
||
|
||
**Daga de Bronce**
|
||
- Ingredientes: 2 bronze_ingot + 1 leather
|
||
- Output: 1 bronze_dagger (10 damage, tier 1)
|
||
|
||
**Espada de Acero**
|
||
- Ingredientes: 5 steel_ingot + 2 leather + 1 gold_ingot
|
||
- Output: 1 steel_sword (25 damage, tier 3)
|
||
|
||
**Arco Largo**
|
||
- Ingredientes: 3 wood_plank + 2 string + 1 iron_ingot
|
||
- Output: 1 longbow (18 damage, tier 2)
|
||
|
||
#### 🛡️ Armaduras
|
||
|
||
**Peto de Cuero**
|
||
- Ingredientes: 8 leather + 2 string
|
||
- Output: 1 leather_chestplate (5 defense, tier 1)
|
||
|
||
**Casco de Hierro**
|
||
- Ingredientes: 5 iron_ingot + 1 leather
|
||
- Output: 1 iron_helmet (8 defense, tier 2)
|
||
|
||
**Botas de Acero**
|
||
- Ingredientes: 4 steel_ingot + 2 leather
|
||
- Output: 1 steel_boots (10 defense, tier 3)
|
||
|
||
#### 🍖 Consumibles
|
||
|
||
**Poción de Curación Menor**
|
||
- Ingredientes: 1 red_herb + 1 water_bottle
|
||
- Output: 1 minor_healing_potion (cura 25 HP)
|
||
|
||
**Poción de Curación Mayor**
|
||
- Ingredientes: 2 red_herb + 1 magic_dust + 1 glass_bottle
|
||
- Output: 1 major_healing_potion (cura 75 HP)
|
||
|
||
**Pan**
|
||
- Ingredientes: 3 wheat + 1 water
|
||
- Output: 5 bread (cura 15 HP cada uno)
|
||
|
||
#### 🎨 Decorativos y Utilidad
|
||
|
||
**Antorcha**
|
||
- Ingredientes: 1 wood_plank + 1 coal
|
||
- Output: 8 torch
|
||
|
||
**Cofre de Madera**
|
||
- Ingredientes: 8 wood_plank
|
||
- Output: 1 wooden_chest (container)
|
||
|
||
**Llave Maestra**
|
||
- Ingredientes: 3 gold_ingot + 1 ruby + 1 magic_dust
|
||
- Output: 1 master_key (abre cofres especiales)
|
||
|
||
### Árbol de progresión de crafteo
|
||
|
||
```
|
||
Nivel 1 (Principiante)
|
||
├─ Herramientas de Madera (wood_pickaxe, wood_axe)
|
||
├─ Armas Básicas (wooden_sword, stone_dagger)
|
||
└─ Comida Simple (bread, cooked_fish)
|
||
|
||
Nivel 2 (Aprendiz)
|
||
├─ Herramientas de Cobre/Bronce (copper_pickaxe, bronze_axe)
|
||
├─ Armadura de Cuero (leather_armor set)
|
||
├─ Armas de Hierro (iron_sword, iron_bow)
|
||
└─ Pociones Menores (minor_healing_potion)
|
||
|
||
Nivel 3 (Artesano)
|
||
├─ Herramientas de Hierro (iron_pickaxe tier 2)
|
||
├─ Armadura de Hierro (iron_armor set)
|
||
├─ Armas de Acero (steel_sword, steel_halberd)
|
||
└─ Pociones Mayores (major_healing_potion)
|
||
|
||
Nivel 4 (Maestro)
|
||
├─ Herramientas Encantadas (enchanted_pickaxe tier 3)
|
||
├─ Armadura de Acero (steel_armor set)
|
||
├─ Armas Legendarias (legendary_sword, dragon_bow)
|
||
└─ Pociones Épicas (epic_elixir, immortality_potion)
|
||
|
||
Nivel 5 (Legendario)
|
||
├─ Herramientas Míticas (mythril_pickaxe tier 4)
|
||
├─ Armadura Divina (divine_armor set)
|
||
├─ Armas Divinas (godslayer_sword, infinity_bow)
|
||
└─ Elixires Divinos (phoenix_tears, gods_blessing)
|
||
```
|
||
|
||
### Materiales base recomendados
|
||
|
||
| Material | Key | Obtención | Uso Principal |
|
||
| --- | --- | --- | --- |
|
||
| Madera | `wood_plank` | Talar árboles | Herramientas tier 1 |
|
||
| Cuero | `leather` | Mobs, caza | Armaduras tier 1 |
|
||
| Cobre | `copper_ingot` | Fundir copper_ore | Herramientas tier 1-2 |
|
||
| Estaño | `tin_ingot` | Fundir tin_ore | Aleaciones (bronce) |
|
||
| Bronce | `bronze_ingot` | Fundir copper+tin | Herramientas tier 2 |
|
||
| Hierro | `iron_ingot` | Fundir iron_ore | Armas/armor tier 2 |
|
||
| Carbón | `coal` | Minar | Fundición universal |
|
||
| Acero | `steel_ingot` | Fundir hierro+carbón | Armas/armor tier 3 |
|
||
| Oro | `gold_ingot` | Fundir gold_ore | Joyería, ítems raros |
|
||
| Rubí | `ruby` | Mobs raros, cofres | Encantamientos |
|
||
| Esmeralda | `emerald` | Mobs raros, cofres | Encantamientos |
|
||
| Zafiro | `sapphire` | Mobs raros, cofres | Encantamientos |
|
||
| Polvo Mágico | `magic_dust` | Bosses, eventos | Crafteo avanzado |
|
||
| Cristal de Lava | `lava_crystal` | Área volcánica | Crafteo legendario |
|
||
| Mythril | `mythril_ingot` | Fundir mythril_ore | Armas/armor tier 4 |
|
||
|
||
### Verificar y solucionar problemas con recetas
|
||
|
||
#### Ver información de una receta
|
||
|
||
Para verificar si un ítem tiene receta activa, usa:
|
||
|
||
```
|
||
!item-ver iron_sword
|
||
```
|
||
|
||
En el editor aparecerá:
|
||
- **Receta**: `Habilitada (3 ingredientes → 1 unidades)` ← tiene receta activa
|
||
- **Receta**: `Deshabilitada` ← no tiene receta o está desactivada
|
||
|
||
#### Errores comunes y soluciones
|
||
|
||
**Error**: "No se encontró el ítem `xxx_ingot` en este servidor"
|
||
- **Causa**: La clave (`itemKey`) del ingrediente no existe o tiene un typo
|
||
- **Solución**: Verifica con `!items-lista` que todos los ingredientes existan. Crea los que falten con `!item-crear`
|
||
|
||
**Error**: "No tienes suficientes ingredientes"
|
||
- **Causa**: El jugador no tiene todos los materiales en su inventario
|
||
- **Solución**: Usa `!inventario` para verificar qué falta. Añade ítems con `!give @usuario itemKey cantidad`
|
||
|
||
**Problema**: La receta no se guarda
|
||
- **Causa**: El prop `craftable.enabled` está en `false` o falta
|
||
- **Solución**: En Props (JSON) asegúrate de tener: `"craftable": {"enabled": true}`
|
||
|
||
**Problema**: La receta desapareció después de editar el ítem
|
||
- **Causa**: No marcaste "Habilitar receta?" como `true` al editar
|
||
- **Solución**: Vuelve a `!item-editar`, pulsa **Receta**, pon `true` y reingresa los ingredientes
|
||
|
||
#### Workflow de debug para recetas
|
||
|
||
1. **Verificar que el producto existe**:
|
||
```
|
||
!item-ver iron_sword
|
||
```
|
||
Debe aparecer en la lista y tener `craftable.enabled: true` en props.
|
||
|
||
2. **Verificar que todos los ingredientes existen**:
|
||
```
|
||
!items-lista
|
||
```
|
||
Busca `iron_ingot` y `wood_plank` en la lista.
|
||
|
||
3. **Probar con admin**:
|
||
- Añádete los ingredientes: `!give @tuUsuario iron_ingot 10`
|
||
- Intenta craftear: `!craftear iron_sword`
|
||
- Si funciona: la receta está bien configurada
|
||
- Si falla: revisa los errores del bot
|
||
|
||
4. **Verificar la base de datos (solo si todo lo anterior falló)**:
|
||
- Pide al equipo dev que revise la tabla `ItemRecipe`
|
||
- Debe haber un registro con `productItemId` apuntando al ítem correcto
|
||
- Los `RecipeIngredient` deben tener `itemId` y `quantity` correctos
|
||
|
||
### Cadenas de crafteo complejas
|
||
|
||
**Ejemplo: Espada Legendaria**
|
||
|
||
1. **Recolectar materiales base**:
|
||
- Minar 20 iron_ore
|
||
- Minar 15 coal
|
||
- Derrotar boss para obtener 3 magic_dust
|
||
|
||
2. **Fundición (fase 1)**:
|
||
- Fundir iron_ore → iron_ingot (15 unidades)
|
||
- Tiempo total: ~40 minutos
|
||
|
||
3. **Fundición (fase 2)**:
|
||
- Fundir iron_ingot + coal + carbon → steel_ingot (8 unidades)
|
||
- Tiempo total: ~60 minutos
|
||
|
||
4. **Crafteo (fase 1)**:
|
||
- Craftear steel_ingot + leather → steel_sword_base
|
||
|
||
5. **Encantamiento**:
|
||
- Aplicar ruby_core al steel_sword_base (+15 damage)
|
||
|
||
6. **Crafteo final**:
|
||
- Craftear steel_sword_base(enchanted) + magic_dust + dragon_scale → legendary_dragon_slayer
|
||
- Resultado: Arma tier 4 con 45 damage, 300 durabilidad, efectos especiales
|
||
|
||
### Marcado de ítems crafteable-only
|
||
|
||
Para materiales que **solo** sirven para craftear y no tienen uso directo:
|
||
|
||
```json
|
||
{
|
||
"craftingOnly": true,
|
||
"description": "Material usado únicamente para crafteo"
|
||
}
|
||
```
|
||
|
||
Esto ayuda a los jugadores a entender que deben combinarlo con otros ítems para obtener valor.
|
||
|
||
### 💡 Tips y mejores prácticas para recetas
|
||
|
||
#### Organización de recetas
|
||
|
||
- **Nombra consistentemente**: Usa sufijos como `_ingot`, `_ore`, `_plank` para que sean fáciles de identificar
|
||
- **Agrupa por tier**: Crea materiales tier 1, tier 2, tier 3... para facilitar progresión
|
||
- **Documenta ingredientes raros**: Si una receta usa ítems de eventos o bosses, menciónalo en la descripción del producto
|
||
|
||
#### Balance de economía
|
||
|
||
- **Recetas básicas**: 2-3 ingredientes, cantidades bajas (< 5 unidades)
|
||
- **Recetas intermedias**: 3-5 ingredientes, algunas de tier anterior
|
||
- **Recetas avanzadas**: 5+ ingredientes, incluyen materiales raros y crafteos previos
|
||
- **Recetas legendarias**: Cadenas complejas que requieren múltiples pasos de fundición y crafteo
|
||
|
||
#### Productividad del staff
|
||
|
||
- **Crea plantillas**: Guarda en un documento los props JSON comunes para copiar/pegar rápidamente
|
||
- **Batch creation**: Crea todos los ingredientes primero, luego todos los productos
|
||
- **Usa el mismo editor**: No cierres el editor entre ítems similares, solo cambia la key y ajusta valores
|
||
- **Prueba inmediatamente**: Después de crear una receta, añádete los ingredientes y prueba `!craftear` para validar
|
||
|
||
#### Errores a evitar
|
||
|
||
- ❌ **No crear los ingredientes primero**: Si creas el producto con receta pero los ingredientes no existen, la receta fallará
|
||
- ❌ **Typos en itemKeys**: `iron_ingott` vs `iron_ingot` - el bot no encontrará el ítem
|
||
- ❌ **Olvidar craftable.enabled**: Si el prop no está en `true`, la receta no funcionará aunque esté guardada
|
||
- ❌ **Cantidades desbalanceadas**: 100 unidades de un material común no debe producir 1 ítem legendario
|
||
|
||
#### Ejemplos de recetas balanceadas
|
||
|
||
| Tier | Ingredientes Típicos | Output Typical | Ejemplo |
|
||
| --- | --- | --- | --- |
|
||
| 1 (Común) | 2-3 materiales básicos x2-5 | 1-5 unidades | 3 wood + 2 stone → 1 basic_axe |
|
||
| 2 (Poco común) | 3-4 materiales, algunos refinados x3-10 | 1-3 unidades | 5 iron_ingot + 2 leather → 1 iron_sword |
|
||
| 3 (Raro) | 4-5 materiales, crafteos tier 2 x5-15 | 1-2 unidades | 8 steel_ingot + 3 ruby + 1 iron_sword → 1 steel_sword |
|
||
| 4 (Épico) | 5-7 materiales, incluye raros x10-30 | 1 unidad | 10 mythril + 5 magic_dust + 3 dragon_scale → 1 mythril_sword |
|
||
| 5 (Legendario) | 6+ materiales, cadenas complejas x20+ | 1 unidad | 15 divine_ore + 10 phoenix_feather + 1 mythril_sword → 1 godslayer |
|
||
|
||
---
|
||
|
||
## Mutaciones y encantamientos
|
||
|
||
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).
|
||
|
||
4. Reclama el resultado:
|
||
```
|
||
!fundir-reclamar
|
||
```
|
||
|
||
### Ejemplos de recetas de fundición por nivel
|
||
|
||
#### Nivel Básico (5-10 minutos)
|
||
| Entrada | Salida | Tiempo | Uso |
|
||
| --- | --- | --- | --- |
|
||
| 5 copper_ore + 2 coal | 2 copper_ingot | 5 min | Crafteo básico |
|
||
| 5 iron_ore + 3 coal | 2 iron_ingot | 8 min | Armas tier 1 |
|
||
| 3 sand + 1 coal | 2 glass | 3 min | Construcción |
|
||
|
||
#### Nivel Intermedio (15-30 minutos)
|
||
| Entrada | Salida | Tiempo | Uso |
|
||
| --- | --- | --- | --- |
|
||
| 8 iron_ore + 5 coal | 3 steel_ingot | 20 min | Armas tier 2 |
|
||
| 10 gold_ore + 5 coal | 3 gold_ingot | 25 min | Joyería |
|
||
| 5 copper_ingot + 5 tin_ingot | 8 bronze_ingot | 15 min | Aleaciones |
|
||
|
||
#### Nivel Avanzado (1-2 horas)
|
||
| Entrada | Salida | Tiempo | Uso |
|
||
| --- | --- | --- | --- |
|
||
| 15 iron_ingot + 10 coal + 5 carbon | 5 steel_alloy | 60 min | Armas legendarias |
|
||
| 20 mythril_ore + 10 coal + 3 magic_dust | 3 mythril_ingot | 90 min | Equipo épico |
|
||
| 10 diamond_ore + 15 coal + 5 lava_crystal | 2 diamond_refined | 120 min | Crafteo endgame |
|
||
|
||
### Cadenas de producción
|
||
|
||
Puedes crear economías complejas encadenando fundiciones:
|
||
|
||
**Ejemplo: Espada de Acero**
|
||
1. Fundir `copper_ore` → `copper_ingot` (5 min)
|
||
2. Fundir `tin_ore` → `tin_ingot` (5 min)
|
||
3. Fundir `copper_ingot + tin_ingot` → `bronze_ingot` (15 min)
|
||
4. Fundir `iron_ore` → `iron_ingot` (8 min)
|
||
5. Fundir `iron_ingot + coal + carbon` → `steel_ingot` (20 min)
|
||
6. Craftear `steel_ingot + bronze_ingot + wood` → `steel_sword`
|
||
|
||
### Fundición para eventos
|
||
|
||
**Ejemplo: Evento de Halloween**
|
||
```
|
||
!item-crear pumpkin_ore
|
||
```
|
||
- Nombre: Mineral de Calabaza Maldita
|
||
- Props: `{"eventCurrency": {"enabled": true, "eventKey": "halloween2025"}}`
|
||
|
||
**Receta especial (temporal):**
|
||
- Inputs: 10 pumpkin_ore + 5 coal + 1 cursed_essence
|
||
- Output: 1 halloween_legendary_sword
|
||
- Duración: 60 min
|
||
- Ventana: solo durante octubre 2025
|
||
|
||
### Consejos de balance
|
||
|
||
- **Fundiciones rápidas (1-5 min)**: para materiales básicos que se usan constantemente.
|
||
- **Fundiciones medias (10-30 min)**: para recursos intermedios, fomenta planificación.
|
||
- **Fundiciones largas (1-3 horas)**: para ítems raros/épicos, crea anticipación.
|
||
- **Usa carbón/coal**: como costo fijo universal para evitar fundiciones sin límite.
|
||
- **Output menor que input**: ej. 5 mineral → 2 lingotes, crea escasez y valor.
|
||
|
||
---
|
||
|
||
## Logros (Achievements)
|
||
|
||
### Crear un logro — `!logro-crear <key>`
|
||
1. Ejecuta el comando y completa el editor:
|
||
- **Base**: Nombre, descripción, categoría, icono y puntos.
|
||
- **Requisitos**: JSON con `type` y `value`. Ejemplo:
|
||
|
||
```json
|
||
{ "type": "mine_count", "value": 100 }
|
||
```
|
||
|
||
- **Recompensas**: JSON con monedas, ítems o títulos. Ejemplo:
|
||
|
||
```json
|
||
{ "coins": 1000, "items": [{ "key": "pickaxe_mythic", "quantity": 1 }] }
|
||
```
|
||
|
||
2. Pulsa **Guardar**. El bot mostrará “✅ Logro creado”.
|
||
3. Usa `!logro-ver <key>` y `!logros-lista` para revisar lo que quedó configurado.
|
||
|
||
Cuando anuncies el logro, recuerda qué acción lo desbloquea (`mine_count`, `fish_count`, `craft_count`, etc.).
|
||
|
||
---
|
||
|
||
## Misiones (Quests)
|
||
|
||
### Crear una misión — `!mision-crear <key>`
|
||
1. Completa la pestaña **Base** (nombre, descripción, categoría y tipo: `daily`, `weekly`, `permanent` o `event`).
|
||
2. En **Requisitos**, indica el contador que debe alcanzar:
|
||
|
||
```json
|
||
{ "type": "craft_count", "count": 3 }
|
||
```
|
||
|
||
También puedes usar `variety` con varias condiciones.
|
||
|
||
3. En **Recompensas**, define el premio (mismo formato que los logros).
|
||
4. Guarda y revisa con `!mision-ver <key>` o `!misiones-lista`.
|
||
5. Para pruebas, `!misiones` muestra al jugador su progreso y si puede reclamar con `!mision-reclamar <key>`.
|
||
|
||
---
|
||
|
||
## Tienda y economía
|
||
|
||
- **Crear oferta** — `!offer-crear`
|
||
1. En **Base**, especifica `itemKey` y si la oferta está habilitada.
|
||
2. En **Precio (JSON)**, indica monedas y/o ítems de pago:
|
||
|
||
```json
|
||
{ "coins": 1500, "items": [{ "itemKey": "token_evento", "qty": 2 }] }
|
||
```
|
||
|
||
3. En **Ventana**, puedes fijar fechas `YYYY-MM-DD` o dejarlas vacías.
|
||
4. En **Límites**, define cupo por usuario o stock global.
|
||
5. Guarda y revisa la tienda con `!tienda`.
|
||
|
||
- **Monedas y recursos**: usa `!monedas <@usuario>` para revisar balances y `!inventario <@usuario>` para confirmar que recibieron lo esperado.
|
||
|
||
---
|
||
|
||
## Resumen rápido de comandos útiles
|
||
|
||
| Acción | Comando | Notas |
|
||
| --- | --- | --- |
|
||
| Crear/editar ítems | `!item-crear`, `!item-editar`, `!item-eliminar` | Requiere staff. Props en JSON. |
|
||
| Revisar ítems | `!items-lista`, `!item-ver <key>` | Incluye props y tags. |
|
||
| Consumir o probar ítems | `!comer <key>`, `!encantar <itemKey> <mutationKey>` | Útiles para QA. |
|
||
| Ofertas de tienda | `!offer-crear`, `!offer-editar` | Define precios, stock y ventanas. |
|
||
| Logros | `!logro-crear`, `!logro-ver`, `!logros-lista`, `!logro-eliminar` | Requisitos y recompensas en JSON. |
|
||
| Misiones | `!mision-crear`, `!mision-ver`, `!misiones-lista`, `!mision-eliminar` | Tipos: daily/weekly/permanent/event. |
|
||
| 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:
|
||
|
||
```json
|
||
{
|
||
"draws": 2,
|
||
"table": [
|
||
{ "type": "coins", "amount": 25, "weight": 10 },
|
||
{ "type": "item", "itemKey": "slime_gel", "qty": 1, "weight": 7 },
|
||
{ "type": "item", "itemKey": "healing_potion", "qty": 1, "weight": 3 }
|
||
]
|
||
}
|
||
```
|
||
|
||
- `draws`: cuántos premios saca al morir.
|
||
- `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`).
|
||
2. Envía al equipo dev la siguiente información:
|
||
- **Product Key**: ej. `iron_sword`
|
||
- **Product Quantity**: cuánto entrega (normalmente 1).
|
||
- **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. |
|
||
|
||
---
|
||
|
||
## Ejemplos completos de flujos comunes
|
||
|
||
### Ejemplo 1: Crear una zona de combate con mobs
|
||
|
||
1. Crea los mobs:
|
||
```
|
||
!mob-crear goblin_scout
|
||
```
|
||
- Nombre: Goblin Explorador
|
||
- Stats: `{"attack": 10, "hp": 60, "defense": 3, "xpReward": 20}`
|
||
- Drops: `{"draws": 1, "table": [{"type": "coins", "amount": 30, "weight": 10}, {"type": "item", "itemKey": "goblin_ear", "qty": 1, "weight": 5}]}`
|
||
|
||
2. Crea el área:
|
||
```
|
||
!area-crear bosque_oscuro
|
||
```
|
||
- Nombre: Bosque Oscuro
|
||
- Tipo: FIGHT
|
||
|
||
3. Crea el nivel 1:
|
||
```
|
||
!area-nivel bosque_oscuro 1
|
||
```
|
||
- Requisitos: `{"minLevel": 3}`
|
||
- Recompensas: `{"coins": 100, "xp": 30}`
|
||
- Mobs: `{"draws": 1, "table": [{"mobKey": "goblin_scout", "weight": 10}]}`
|
||
|
||
4. Prueba con `!pelear bosque_oscuro` (si el comando acepta áreas) o `!pelear goblin_scout` directamente.
|
||
|
||
### Ejemplo 2: Crear una misión diaria de minería
|
||
|
||
1. Asegúrate de que existe el área de mina (`!areas-lista`).
|
||
2. Crea la misión:
|
||
```
|
||
!mision-crear daily_mine_10
|
||
```
|
||
- Nombre: Minero Diario
|
||
- Descripción: Mina 10 veces hoy
|
||
- Tipo: daily
|
||
- Categoría: mining
|
||
- Requisitos: `{"type": "mine_count", "count": 10}`
|
||
- Recompensas: `{"coins": 500, "items": [{"key": "mining_token", "quantity": 1}]}`
|
||
|
||
3. Los jugadores verán la misión en `!misiones` y podrán reclamarla con `!mision-reclamar daily_mine_10` cuando completen los 10 minados.
|
||
|
||
### Ejemplo 3: Crear un cofre de evento
|
||
|
||
1. Crea el ítem cofre:
|
||
```
|
||
!item-crear event_chest_winter
|
||
```
|
||
- Nombre: Cofre de Invierno
|
||
- Descripción: Un cofre especial lleno de sorpresas invernales
|
||
- Stackable: true,10
|
||
- Props:
|
||
```json
|
||
{
|
||
"chest": {
|
||
"enabled": true,
|
||
"consumeOnOpen": true,
|
||
"rewards": [
|
||
{ "type": "coins", "amount": 1000 },
|
||
{ "type": "item", "itemKey": "snowflake_rare", "qty": 5 },
|
||
{ "type": "item", "itemKey": "ice_sword", "qty": 1 }
|
||
]
|
||
}
|
||
}
|
||
```
|
||
|
||
2. Crea una oferta para venderlo:
|
||
```
|
||
!offer-crear
|
||
```
|
||
- Item Key: event_chest_winter
|
||
- Habilitada: true
|
||
- Precio: `{"coins": 2500}`
|
||
- Ventana: desde `2025-12-01` hasta `2025-12-31`
|
||
- Límite por usuario: 3
|
||
|
||
3. Anuncia el cofre en el servidor y los jugadores podrán comprarlo con `!comprar` y abrirlo con `!abrir event_chest_winter`.
|