Loader.py
Índice
- Descripción General
- Función
Read() - Función
Write() - Manejadores Especializados (Handlers)
- Sistema de Logs
- Ejemplos de Uso
Descripción General
Loader.py es el sistema de persistencia y acceso a datos centralizado del juego. Proporciona una capa de abstracción sobre el sistema de archivos, permitiendo leer y escribir configuraciones complejas en formato JSON y logs en texto plano con validación automática y manejo de errores.
Función Read()
Read(FilePath, Object, Content=None, Values=None)
Busca y extrae información de un archivo JSON. - FilePath: Ruta al archivo. - Object: Clave principal (ej. nombre de una zona o categoría). - Content: Sub-clave opcional para acceder a datos anidados.
Comportamiento Inteligente
La función detecta automáticamente el tipo de archivo por su nombre (ej. datastats.json) y aplica una lógica de extracción específica para navegar por estructuras de listas o diccionarios complejos.
Función Write()
Write(FilePath, Object=None, Content=None, ToWrite=None, isplaintext=False)
Guarda datos en disco.
- JSON: Si isplaintext=False, actualiza el archivo JSON manteniendo la estructura existente (no sobrescribe todo el archivo, solo la sección indicada).
- Plain Text: Si isplaintext=True, añade una línea al final del archivo (útil para logs).
Manejadores Especializados (Handlers)
El sistema incluye lógica interna para tratar archivos con estructuras no convencionales:
_handle_datastats: Maneja zonas que contienen arrays de enemigos y una sección especial deStrings._handle_weapons: Soporta el prefijoTYPE:en las claves de armas._handle_buffs: Diferencia entre las categoríasBUFFSyDEBUFFS._handle_saves: Preserva valores nulos para asegurar que el estado del jugador se guarde correctamente.
Sistema de Logs
Utiliza el módulo logging de Python para escribir en tpprpg.log.
- Registra advertencias cuando una clave no existe.
- Registra errores críticos de sintaxis JSON o archivos no encontrados.
- Muestra mensajes visuales en la consola mediante rich para informar al desarrollador.
Ejemplos de Uso
Leer los enemigos de una zona
from Modules.ModulesUtils.Loader import Read
# Retorna la lista de enemigos en la zona "Forest"
enemigos = Read("./Data/DataStats.json", "Forest")
Guardar el progreso en un slot
from Modules.ModulesUtils.Loader import Write
# Guarda el nivel del jugador en el Slot 1
Write("./Data/SaveSlots.json", "Save1", "Level", 10)
Escribir un log personalizado
Write("./logs/debug.txt", Content="El jugador entró en combate", isplaintext=True)
Notas Técnicas
- Utiliza
os.path.normpathpara asegurar compatibilidad entre Windows y Linux. - Implementa codificación
utf-8en todas las operaciones de E/S. - El sistema de escritura crea automáticamente los directorios padre si no existen.