Estado de LumiMUD

0 comentarios

Actualmente LumiMUD tiene implementados en su código:

Servidor de Telnet: acepta múltiples conexiones simultáneas, colores, y caracteres españoles como la ñ y las tildes (incluso los signos ¿ e ¡, casi nunca usados antes en MUDs, creo).

Módulo de gestión de conexiones: fusionado con el anterior módulo recepcionista, inicia el registro o la recepción de los clientes, atiende los comandos entrantes y expulsa a los jugadores inactivos.

Base de datos: al final después de probar varias, me he quedado con SQLite por razones prácticas. He usado una base de datos en vez de almacenamiento directo porque, aunque es mas lento, facilita tareas como la de exponer datos en la web y actualizar en tiempo real las entidades del MUD (rooms, jugadores, movs...todo lo que no es código, vamos)

Módulo adaptador para la base de datos: Gestiona el almacenamiento en la base de datos y hace de intermediario para las consultas SQL que sean necesarias desde el código (no era obligatorio, pero necesario para simplificar al máximo los futuros cambios).

Módulo reload: Permite recargar el código de manera automática y sin tener que desconectar a nadie (hasta la fecha sin problemas).

Módulo logger: en vez de imprimir por terminal las advertencias y errores, este módulo registra el nivel (debug, información, advertencia, error o error crítico) y el módulo donde se produce y lo imprime por pantalla. Además si es un error, añade a un archivo log con la fecha actual y los últimos mensajes para poder seguir el rastro a los posibles bugs que sucedan en el futuro.

Módulo comandos: con submódulos para cada categoría de comandos (generales, salidas, ayuda, de administrador...) y un analizador que recibe un string y extrapola el comando y los argumentos e intenta ejecutar el apropiado.

Novedades LumiMUD

0 comentarios

Un nuevo cambio, he añadido un módulo logger que se encarga de llevar cuenta de los avisos según niveles.

En vez de imprimir por terminal las advertencias y errores, este módulo registra el nivel (debug, informacion, advertencia,error o error crítico) y el módulo donde se produce y lo imprime por pantalla. además si es un error, añade a un archivo log con la fecha actual y los últimos mensajes para poder seguir el rastro a los posibles bugs que sucedan en el futuro.

Así puedes configurar que nivel de advertencias se muestran por pantalla al arrancar el MUD (los print siempre aparecían) con cambiar una simple variable. Poner el modo debug para tener toda la información rastreando un error, poner el modo info para tener solo notificaciones o errores, o incluso poner el modo en errores con lo que no se imprime nada por pantalla que no sea un error.

Mucho mejor que llenar el código con prints, y el volcado de un buffer en un archivo vendrá de perlas en el futuro.

Novedades LumiMUD

0 comentarios

Lo prometido es deuda, aquí tenéis la primera entrada sobre los avances en el LumiMUD.

He rehecho la mitad del código, pero por motivos prácticos. La parte mala de tener tanta creatividad aparece cuando has programado bastante y, de repente, se te ocurre una manera mejor. Sé que la norma es "no optimices el código hasta que lo hayas terminado, a veces, ni siquiera entonces", pero en un MUD creo que los cambios y añadidos son parte de la vida útil del código y cualquier cosa que los simplifique en un futuro debe estar en las bases del código.

El código sigue basándose en entidades, pero ahora se gestionan con clases. Lo que hace mucho mas sencillo su uso en otras partes del código como en los comandos.
El acceso a la base de datos ahora es mixto, lo que me permite cambiar varios parámetros en una sola instrucción y consulta.

En vez de establecer la fuerza y la destreza de un personaje a 10 (pongamos a zaroos como ejemplo) con:

Personaje('zaroos').fuerza = 10
Personaje('zaroos').destreza = 10

Ahora se puede hacer:

Personaje('zaroos'). Establecer({fuerza : 10, destreza : 10})
o
Personaje('zaroos'). Establecer(todos_los_nuevos_valores_que_quieras)

Esto que parece una trivialidad, permite cargar diccionarios enteros de modificaciones en una sola línea de código, o utilizar un diccionario de un solo elemento para hacer lo mismo que con los comandos anteriores.

Ademas, ahora el código carga los cambios de la base de datos al arrancar el MUD, así que si el día de mañana se añade o cambia una habilidad o atributo a la base de datos, el MUD la carga sin cambiar código y puedes usarla directamente en los comandos sin problema.

Con esto doy por finalizado por el momento los módulos de la Base de datos y del servidor de Telnet.

Actualización

0 comentarios

Comencé este blog como alternativa mas accesible que el foro anterior. Nunca he sido blogger, y no he actualizado este tanto como debería.

Intentaré escribir más a menudo para aquellos interesados, aunque no seáis muchos.

Cambiando de tema...he vuelto a CallandorMUD, como muchos de vosotros ya habréis notado. Esta vez soy un bardo, por motivos prácticos -para mapear- aunque, según mis amigos, es la clase que mas me pega en la vida real. Intentaré actualizar el mapa y a Lumi proximamente.

En cuanto al LumiMUD, entre el trabajo, los estudios, la novia y los amigos... no me queda mucho tiempo para programar. Pero sigo dedicándole alguna hora suelta de vez en cuando.

Escribiré entradas sobre el progreso del LumiMUD etiquetadas y con titulo Novedades LumiMUD, para quien pueda interesar.