Conceptos básicos
+
+ Toda pieza de contenido en Amayo se identifica mediante una key
+ única. Estas keys se usan en comandos, relaciones y validaciones. Usa un
+ formato consistente como categoria_nombre (ej:
+ item_iron_sword).
+
Permisos necesarios
+-
+
- Permiso de Discord Administrar Servidor. +
- O bien un rol Staff configurado para los comandos del bot. +
Sistema de pesos
+
+ Al definir tablas de recompensas o aparición de enemigos, usa un campo
+ weight. Cuanto mayor sea el peso, mayor la probabilidad de ser
+ seleccionado.
+
{ "itemKey": "iron_ore", "weight": 10 }
+{ "itemKey": "gold_ore", "weight": 3 }
+ Items (EconomyItem)
+
+ Administra todo el inventario del juego. Usa !item-crear para abrir
+ el editor interactivo y completa cada pestaña antes de guardar.
+
Comandos clave
+-
+
!item-crear <key>— Crear un item nuevo.
+ !item-editar <key>— Editar un item existente.
+ !items-lista [página]— Ver listado paginado.
+ !item-ver <key>— Ver detalles completos.
+ !item-eliminar <key>— Eliminar un item.
+
Campos del modal Base
+-
+
- Nombre: Texto visible para jugadores. +
- Descripción: Lore o efectos. +
- Categoría: Agrupa items (ej.
weapons).
+ - Icon URL: Imagen opcional. +
-
+ Stackable y Máx inventario: Usa
+
true,10,false,1o deja el límite vacío para + infinito. +
+
Props disponibles
+Herramientas (tool)
+ {
+ "tool": { "type": "pickaxe|rod|sword|bow|halberd|net", "tier": 1 }
+}
+
+ Define el tipo de actividad que habilita tu item. El campo
+ tier controla los requisitos mínimos de áreas y minijuegos.
+
Durabilidad (breakable)
+ {
+ "breakable": {
+ "enabled": true,
+ "maxDurability": 100,
+ "durabilityPerUse": 1
+ }
+}
+ + Sólo funciona con items no apilables. Ajusta la pérdida de + durabilidad por uso para balancear actividades. +
+Cofres (chest)
+ {
+ "chest": {
+ "enabled": true,
+ "rewards": [ ... ],
+ "consumeOnOpen": true
+ }
+}
+ + Permite definir loot tables internas, recompensas de monedas, items o roles. +
+Comida y pociones (food)
+ {
+ "food": {
+ "healHp": 50,
+ "healPercent": 25,
+ "cooldownSeconds": 60
+ }
+}
+ Útil para pociones curativas o consumibles con cooldown.
+Bonos de combate
+{
+ "damage": 10,
+ "defense": 5,
+ "maxHpBonus": 20
+}
+ Configura stats extra para armas, armaduras o capas.
+Etiquetas y metadatos
+
+ Usa el modal Tags para añadir etiquetas separadas por coma, como
+ weapon,rare,crafteable. Sirven para filtrar o aplicar reglas.
+
Mobs (Enemigos)
+
+ Los enemigos definen los encuentros durante minijuegos y niveles de área. Se
+ crean con !mob-crear y usan stats y tablas de drop en formato JSON.
+
Campos principales
+-
+
- Base: Nombre y categoría opcional. +
-
+ Stats: Define
attack,hp, +defense,xpReward. +
+ -
+ Drops: Incluye
drawsy una tabla con premios + ponderados. +
+
Ejemplo de configuración
+{
+ "attack": 10,
+ "hp": 100,
+ "defense": 5,
+ "xpReward": 50
+}
+ {
+ "draws": 2,
+ "table": [
+ { "type": "coins", "amount": 50, "weight": 10 },
+ { "type": "item", "itemKey": "leather", "qty": 1, "weight": 5 }
+ ]
+}
+ !mobs-lista para auditar stats rápidamente y
+ !mob-ver <key> para revisar drops antes de activar un área.
+ Áreas de juego (GameArea)
++ Las áreas definen dónde se desarrollan las actividades principales (minar, + pescar, pelear, plantar). Cada área puede tener múltiples niveles configurables. +
+Modal Base
+-
+
- Nombre: Ej. Caverna de Hierro. +
- Tipo:
MINE,LAGOON, +FIGHToFARM.
+
Modal Config (JSON)
+{
+ "cooldownSeconds": 60,
+ "description": "Una mina profunda",
+ "icon": "⛏️"
+}
+ El ícono se mostrará en las tarjetas generadas por DisplayComponents.
+!area-eliminar,
+ revisa niveles asociados para evitar referencias rotas.
+ Niveles de área (GameAreaLevel)
+
+ Cada nivel controla requisitos, mobs, recompensas y vigencia. Gestiona niveles con
+ !area-nivel <areaKey> <level>.
+
Requisitos
+{
+ "tool": {
+ "required": true,
+ "toolType": "pickaxe",
+ "minTier": 2,
+ "allowedKeys": ["iron_pickaxe", "diamond_pickaxe"]
+ }
+}
+ + Sirve para validar herramientas necesarias. Combínalo con los tiers definidos + en los items. +
+Recompensas
+{
+ "draws": 3,
+ "table": [
+ { "type": "coins", "amount": 100, "weight": 10 },
+ { "type": "item", "itemKey": "iron_ore", "qty": 2, "weight": 5 }
+ ]
+}
+ Define múltiples extracciones de la tabla con pesos personalizados.
+Mobs y ventana
+{
+ "mobPool": {
+ "draws": 2,
+ "table": [
+ { "mobKey": "goblin", "weight": 10 },
+ { "mobKey": "troll", "weight": 3 }
+ ]
+ }
+}
+ {
+ "window": {
+ "from": "2025-01-01T00:00:00Z",
+ "to": "2025-01-31T23:59:59Z"
+ }
+}
+ Ofertas de tienda (ShopOffer)
+
+ Usa !offer-crear para lanzar nuevas ofertas con stock limitado,
+ precios compuestos y ventanas temporales.
+
Precio (JSON)
+{
+ "coins": 100,
+ "items": [
+ { "itemKey": "iron_ore", "qty": 5 },
+ { "itemKey": "wood", "qty": 10 }
+ ]
+}
+ Límites y ventana
+-
+
- Límite por usuario: Máximo por jugador. +
- Stock global: Total disponible. +
- Ventana: Fechas ISO de inicio y fin. +
Logros
+
+ Motiva a los jugadores con hitos permanentes. Crea logros con
+ !logro-crear y configúralos usando el editor DisplayComponents.
+
Requisitos comunes
+-
+
collect_items: Recolectar items específicos.
+ complete_missions: Completar misiones listadas.
+ reach_level: Alcanzar cierto nivel o racha.
+ stat_value: Llegar a un valor en estadísticas.
+
Recompensas posibles
+-
+
- Monedas +
- Items entregados automáticamente +
- Roles (usa ID de Discord) +
- Puntos de logro +
!logros-lista para auditar logros y
+ !logro-ver <key> para validar estructura antes de publicarlos.
+ Misiones
+
+ Las misiones permiten objetivos diarios, semanales o repetibles. Adminístralas con
+ !mision-crear y !misiones-lista.
+
Tipos de misión
+-
+
- daily: Reinicia cada día. +
- weekly: Reinicia cada semana. +
- one_time: Se completa una vez. +
- repeatable: Puede repetirse sin límite. +
Requisitos combinables
+-
+
- Consumir items o recursos. +
- Completar minijuegos específicos. +
- Derrotar mobs concretos. +
- Lograr cantidades de monedas. +
Cofres y recompensas
+
+ Configura cofres usando props chest en los items y define tablas de
+ recompensas con pesos. Ideal para loot boxes, recompensas diarias o drops raros.
+
Recompensas soportadas
+-
+
- Monedas (
coins)
+ - Items (usa
itemKeyyqty)
+ - Roles de Discord (
roleId)
+
Consejos
+-
+
- Usa
consumeOnOpenpara cofres desechables.
+ - Combina cofres con logros y eventos para mejores recompensas. +
- Define varias entradas con pesos distintos para crear rarezas. +
Crafteos
+
+ Gestiona recetas desde la base de datos o crea comandos personalizados. El servicio
+ de economía incluye craftByProductKey para validar materiales y
+ entregar productos.
+
-
+
- Define recetas en Prisma con entradas y productos. +
- + Usa misiones o eventos para desbloquear recetas temporales combinando props y + tags. + +
-
+ Considera usar
craftingOnly: trueen items que no se consiguen por + drops. +
+
Mutaciones
+
+ Las mutaciones permiten modificar items existentes con efectos adicionales (ej.
+ reforjar armas). Usa findMutationByKey y
+ applyMutationToInventory desde el servicio de economía.
+
Políticas
+{
+ "mutationPolicy": {
+ "allowedKeys": ["fire_upgrade", "ice_upgrade"],
+ "deniedKeys": ["cursed_upgrade"]
+ }
+}
+ Sugerencias
+-
+
- Crea mutaciones exclusivas por eventos. +
- Combínalas con logros o misiones épicas. +
- Controla conflictos usando
deniedKeys.
+
Pociones y consumibles
+
+ Usa props food para crear pociones curativas, boosters temporales o
+ consumibles con cooldown. Complementa con misiones diarias o drops específicos.
+
Ejemplo de poción
+{
+ "food": {
+ "healHp": 75,
+ "healPercent": 15,
+ "cooldownKey": "healing_potion",
+ "cooldownSeconds": 45
+ }
+}
+ Buenas prácticas
+-
+
- Usa
cooldownKeypara compartir cooldown entre pociones similares.
+ - Balancea
healHpyhealPercentpara distintos niveles de jugador.
+ - Combina con logros para recompensar uso estratégico. +
Herramientas y durabilidad
+
+ La durabilidad se administra a través de la combinación de props tool
+ y breakable. Para que un item pierda durabilidad, debe ser
+ no apilable (stackable=false en el modal Base).
+
-
+
- La función
reduceToolDurabilitydescuenta +durabilityPerUsetras cada minijuego.
+ - Cuando la durabilidad llega a 0, el item se elimina del inventario. +
- Si
breakable.enabledesfalse, la herramienta es indestructible.
+ -
+ Usa tiers para bloquear áreas avanzadas. Ejemplo: Un área puede requerir una
+ herramienta
pickaxecontier >= 2. +
+
Servicios del sistema
+Economy Service
+-
+
findItemByKeyyaddItemByKey
+ consumeItemByKeyygetInventoryEntry
+ craftByProductKeyybuyFromOffer
+ findMutationByKeyyapplyMutationToInventory
+
Minigames Service
+-
+
runMinigamepara ejecutar cualquier actividad.
+ runMiningyrunFishingcomo atajos.
+ - Valida cooldowns, requisitos de herramientas y entrega recompensas. +
- Reduce durabilidad automáticamente cuando corresponde. +
Preguntas frecuentes
+¿Qué pasa si olvido definir stackable?
+ Por defecto los items son apilables. Si tu herramienta pierde durabilidad, asegúrate de marcarla como no apilable en el modal Base.
+¿Cómo pruebo mis configuraciones?
+Usa comandos de prueba en un servidor privado con el bot y confirma con !player, !stats y !inventario.
¿Puedo clonar contenido entre servidores?
+Sí. Los items globales están disponibles en todos los servidores; los locales se limitan a su guild. Usa las herramientas de exportación de Prisma si necesitas migraciones masivas.
+¿Cómo despliego esta documentación?
+Consulta las instrucciones en server/README.md para publicar en Heroku como app independiente.