CraftingSystem.py
Índice
- Descripción General
- Clase
CraftingSystem - Lógica de Recetas
- Interfaz: Mesa de Crafteo
- Controles
- ModLoader e Inyecciones
- Ejemplos de Uso
Descripción General
CraftingSystem.py permite al jugador crear nuevos objetos combinando materiales de su inventario. El sistema es totalmente dinámico, cargando recetas desde DataRecipes.json y permitiendo a los mods inyectar sus propias fórmulas.
Clase CraftingSystem
Coordina la carga de recetas y el acceso al inventario del jugador.
_load_recipes(): Lee las recetas base y consulta alModLoaderpor recetas adicionales.recipes: Almacena la lista de recetas normalizadas (ID, resultado, materiales, coste en oro).
Lógica de Recetas
Cada receta define:
- Resultado: ID del ítem generado y cantidad.
- Ingredientes: Diccionario de {item_id: cantidad_requerida}.
- Coste de Oro: (Opcional) Precio adicional por el trabajo de forja.
Cuando el jugador craftea un objeto, el sistema:
1. Verifica si posee todos los materiales (y oro).
2. Los consume del inventario.
3. Utiliza el ItemManager para crear el nuevo objeto.
4. Registra el objeto en player.discovered_items.
Interfaz: Mesa de Crafteo
open_crafting_menu(player, inventory)
Interfaz dividida en dos paneles:
1. Panel Izquierdo (Recetas): Muestra la lista de fórmulas conocidas. Indica visualmente si están "LISTO" (tienes materiales) o "FALTAN".
2. Panel Derecho (Detalle): Desglose exacto de materiales (ej. Hierro: 5/10).
Controles
| Tecla | Acción |
|---|---|
| Enter | Craftear una unidad del ítem seleccionado. |
| Q | Crafteo múltiple (abre un buffer para introducir cantidad numérica). |
| S | Buscar recetas por nombre. |
| F | Marcar receta como favorita (aparecen al inicio de la lista). |
| ESC | Salir del menú. |
ModLoader e Inyecciones
El sistema de crafteo es compatible con mods mediante get_mod_api().recipe_injections. Esto permite añadir nuevas recetas de armas o consumibles sin modificar los archivos base del juego.
Ejemplos de Uso
Abrir la mesa de crafteo desde la ciudad
from Modules.ModulesFunctions.CraftingSystem import open_crafting_menu
# Llamado al interactuar con un yunque o mesa de trabajo
open_crafting_menu(player, inventory)
Consultar materiales disponibles para una receta
# Lógica interna usada por el menú
def _has_materials(recipe, multiplier=1):
for mat_id, req_qty in recipe["materials"].items():
if inventory.get_item_quantity(mat_id) < (req_qty * multiplier):
return False
return True