Allods Online Addons (9/10): Code Tips

Juan Mellado, 8 Octubre, 2010 - 16:40

Para ir acabando con esta serie dedicada a los addon de Allods voy a poner un par de bloques de código que he encontrado útiles. Cosas sencillas que suelen ser necesarias hacerlas de vez en cuando.

Ocultar la Interface
Allods tiene la típica opción para grabar a disco un screenshot ("pantallazo"), a modo de instantánea del juego. Y es bastante habitual que antes de hacerlo los jugadores prefieran quitar la interface gráfica del juego, para que se vea la mayor parte del mundo virtual posible, en vez de los marcos, ventanas o barras de acciones. Por ello, si implementamos un addon que muestre algún tipo de ventana o control gráfico, tenemos que hacer que se oculte automáticamente como hace el resto de addons del juego.

Cuando el usuario solicita que se oculte o restaure la interface del juego (combinación ALT+Z por defecto), Allods lanza el evento "SCRIPT_TOGGLE_UI" con un parámetro de tipo boolean que indica si la interface se está ocultando (false) o restaurando (true). En consecuencia, resulta muy sencillo ocultar o mostrar las ventanas de nuestros addons, consiguiendo un acabado más profesional de los mismos.

Como siempre, lo primero es registrar un manejador para el evento:

common.RegisterEventHandler(OnToggleUI, "SCRIPT_TOGGLE_UI")

Y en la función del manejador ocultar o mostrar nuestra interface:

function OnToggleUI(params)
  formulario:Show(params.visible)
end

Evidentemente, en el código del ejemplo se supone que en el addon hay declarada una variable global "formulario" que contiene una referencia a la ventana principal del addon. Si hubiera varias ventanas independientes habría que realizar la misma operación con todas ellas de forma individual.

Guardar Información
Una necesidad bastante habitual de algunos addons es guardar información, como por ejemplo los parámetros de configuración seleccionados por el jugador, para que se recuerden entre partida y partida. Algunos juegos de este tipo guardan las opciones del jugador en el servidor, e incluso permiten que los addons guarden las suyas propias, de forma que da igual la máquina desde la que un jugador ejecuta el juego, siempre lo ve con su configuración personalizada. Pero en Allods la configuración se guarda en local, en la máquina donde se juega.

Lógicamente, por temas de seguridad, Allods no permite que el código de un addon acceda libremente al disco duro de la máquina donde se ejecuta el juego. La máquina virtual de Lua que se utiliza está "capada" en ese sentido. Pero si deja la posibilidad de que se escriba y lea del fichero de configuración de opciones globales del juego. Dicho fichero tiene por nombre "user.cfg", y se encuentra en la carpeta "Personal" del directorio donde se encuentra instalado el juego. Es un fichero de texto ordinario, por lo que se puede abrir y examinar con cualquier editor.

Para escribir y leer del fichero hay que utilizar las funciones "SetGlobalConfigSection(section, table)" y "GetGlobalConfigSection(section)" respectivamente. Siendo "section" el nombre de la etiqueta bajo la cual queremos grabar los valores contenidos en "table", que ha de ser una variable de tipo table de Lua.

El siguiente código de ejemplo crea una tabla con un valor y la graba:

local tabla = {}
tabla["variable1"] = "prueba"
common.SetGlobalConfigSection("TABLA", tabla)

El resultado de la ejecución del código anterior es la actualización del fichero "user.cfg", al que se le añaden las siguientes líneas dentro de la sección "global":

...
table_begin global

table_begin ScriptLocal_TABLA

  table_begin data
   variable1 = l"prueba"
  table_end data

  remote_version = -1
table_end ScriptLocal_TABLA
...

El proceso contrario, para leer del fichero, es bien sencillo:

tabla = common.GetGlobalConfigSection("TABLA") or {}

El viejo truco de añadir "or {}" al final sirve para que si en el fichero no se encuentra la tabla pedida entonces se devuelva una tabla vacía, en vez de un valor nulo.

Aunque útil, esta forma de proceder tiene el incoveniente de que el fichero puede llegar a tener un tamaño bastante grande si todos los addons se dedican a escribir en él de forma indiscriminada. Y de igual forma, con el paso del tiempo, puede llegar a contener mucha información inútil, ya que no se depura cuando se desinstalan los addons.

¿No encontró lo que buscaba?

Utilice el buscador para encontrar más páginas en esta web o en toda Internet.
 
Web www.inmensia.com