Files
amayo/Mas Ejemplos.md

46 KiB
Raw Blame History

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
  2. Items: creación, edición y revisión
  3. Crafteos y materiales ¡Ahora con editor integrado!
  4. Fundición y refinado
  5. Mutaciones y encantamientos
  6. Mobs: enemigos y NPCs
  7. Áreas y niveles
  8. Misiones (Quests)
  9. Logros (Achievements)
  10. 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 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:
{
  "tool": { "type": "pickaxe", "tier": 2 },
  "breakable": { "enabled": true, "maxDurability": 120 },
  "food": { "healHp": 25, "cooldownSeconds": 180 }
}
  1. Pulsa Receta ( nuevo) si quieres que el ítem sea crafteable. Ver sección de Crafteos para más detalles.
  2. 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

    "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

    "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):
    {
      "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:
"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)

"mutationPolicy": {
  "allowedKeys": [
    "sharpness_enchant",
    "fire_aspect",
    "vampire_core",
    "ruby_core"
  ],
  "deniedKeys": ["defense_boost", "hp_regen"]
}

Armaduras (petos, cascos, botas)

"mutationPolicy": {
  "allowedKeys": [
    "defense_boost",
    "hp_regen",
    "emerald_core",
    "thorns_enchant"
  ],
  "deniedKeys": ["sharpness_enchant", "fire_aspect"]
}

Herramientas (picos, hachas)

"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 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:
{
  "tool": { "type": "pickaxe", "tier": 2 },
  "breakable": { "enabled": true, "maxDurability": 120 },
  "food": { "healHp": 25, "cooldownSeconds": 180 }
}
  1. 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

    "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

    "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:
      {
        "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):

{
  "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

{
  "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

{
  "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)

{
  "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)

{
  "craftable": {"enabled": true},
  "craftingOnly": true,
  "description": "Material refinado usado en crafteo avanzado",
  "stackable": true,
  "maxInventory": 999
}

Receta sugerida: iron_ore:2, coal:1Produce 3 unidades (configurar en "Cantidad que produce": 3)


Herramienta con efectos especiales

{
  "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

{
  "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

{
  "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:

{
  "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:
"mutationPolicy": {
  "allowedKeys": ["ruby_core", "emerald_core"],
  "deniedKeys": ["curse_core"]
}
  1. Entrega al jugador la mutación correspondiente y pídele que use !encantar <itemKey> <mutationKey>.
  2. 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á:

// 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_orecopper_ingot (5 min)
  2. Fundir tin_oretin_ingot (5 min)
  3. Fundir copper_ingot + tin_ingotbronze_ingot (15 min)
  4. Fundir iron_oreiron_ingot (8 min)
  5. Fundir iron_ingot + coal + carbonsteel_ingot (20 min)
  6. Craftear steel_ingot + bronze_ingot + woodsteel_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:

      { "type": "mine_count", "value": 100 }
      
    • Recompensas: JSON con monedas, ítems o títulos. Ejemplo:

      { "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:

    { "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:

      { "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

!area-nivel mina_profunda 1
  1. Requisitos (JSON):
{
  "toolType": "pickaxe",
  "minToolTier": 1,
  "minLevel": 1
}
  1. Recompensas (JSON):
{
  "coins": 50,
  "items": [
    { "key": "copper_ore", "quantity": 3 }
  ],
  "xp": 10
}
  1. Mobs (JSON) — Aquí defines qué mobs aparecen y su peso:
{
  "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í.

  1. 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
  2. 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:
{
  "attack": 8,
  "hp": 50,
  "defense": 2,
  "xpReward": 15
}
  1. Pulsa Drops (JSON) para configurar la tabla de recompensas:
{
  "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).
  1. 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:
      {
        "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.