ShopManager.py
Índice
- Descripción General
- Gestor:
ShopManager - Estructura del JSON (
DataShops.json) - Interfaz: Menú de Tienda
- Proceso de Compra
- Gestión de Inventario de Tiendas
- Ejemplos de Uso
Descripción General
ShopManager.py gestiona los establecimientos comerciales del juego. Permite definir múltiples tiendas (Armerías, Boticas, Tiendas Generales) con inventarios independientes cargados desde archivos JSON, y maneja la lógica de transacción con el jugador.
Gestor: ShopManager
Carga la configuración de las tiendas y proporciona métodos para consultar qué ítems vende cada una.
Funciones Principales
load_shops(): Inicializa el catálogo de tiendas.get_shop_items(shop_name): Retorna la lista de IDs de ítems que vende una tienda específica.save_shops(): Persiste cambios en la configuración de las tiendas.
Estructura del JSON (DataShops.json)
El archivo organiza las tiendas por nombre, cada una conteniendo un array de IDs de ítems (vinculados a los IDs del ItemManager).
{
"GeneralStore": [{ "IDs": [1, 10, 20] }],
"WeaponShop": [{ "IDs": [1, 2, 3] }]
}
Interfaz: Menú de Tienda
display_shop(shop_name, player, item_manager)
Muestra una interfaz interactiva donde el jugador puede:
1. Ver la lista de ítems a la venta con sus precios.
2. Identificar visualmente si puede permitirse el objeto (✓ o ✗).
3. Ver el oro actual disponible.
4. Consultar detalles técnicos de un ítem (Daño, Defensa, Descripción) antes de comprar.
Proceso de Compra
Cuando el jugador selecciona un ítem para comprar:
1. Validación: Se comprueba si el jugador tiene suficiente oro.
2. Confirmación: Se pide una última confirmación al jugador.
3. Creación: El ItemManager instancia el objeto real a partir del ID.
4. Transacción: Se descuenta el oro y se añade el objeto al inventario global vInventory.
Gestión de Inventario de Tiendas
El sistema permite añadir o quitar ítems de las tiendas de forma dinámica (ej. después de completar una misión o desbloquear un nuevo nivel de gremio):
- add_item_to_shop(shop_name, item_id)
- remove_item_from_shop(shop_name, item_id)
Ejemplos de Uso
Abrir la Armería de la ciudad
from Modules.ModulesManager.ShopManager import display_shop
from Modules.ModulesManager.ItemManager import get_item_manager
im = get_item_manager()
# Abre el menú visual de la tienda "WeaponShop"
display_shop("WeaponShop", player, im)
Añadir un nuevo ítem a la venta tras un evento
from Modules.ModulesManager.ShopManager import get_shop_manager
sm = get_shop_manager()
# Ahora la tienda mágica vende el ítem con ID 500
sm.add_item_to_shop("MagicShop", 500)
Notas Técnicas
- Los precios de venta se obtienen directamente del campo
Gold_Costdefinido enDataItems.json. - El sistema utiliza
interactive_menu_selectpara una navegación fluida en consola.