Reajuste de diálogos

Hace dos días me enfrenté a la tarea de agregar una misión a un diálogo. Francamente lo dejé después de un rato. Así que volví a pensar cómo lograr un sistema más sencillo, pero sin perder la potencia del actual. El sistema permite hacer cualquier cosa, ya que es un script que tiene acceso a toda la información del jugador y su interlocutor. Y por eso mismo se puede volver una pesadilla arreglar algo que ya está hecho.
Luego de un rato valorando un formato basado en XML con Lua incrustado, me enfoqué en otra idea: dividir los nodos en funciones, en vez de meterlos en un if-then enorme. Hice una prueba rápida y funcionó. La cosa es sencilla: se crea una tabla (en Lua, una tabla es como un arreglo) donde cada elemento es una función. Al ejecutarse el script, se recibe el índice de toda la vida indicando dónde estamos, pero esta vez se usa para invocar la función correcta. Y la cosa queda más o menos así:

Dialog = {}

Dialog["1"] = function(player, npc)

end
*
*
-- El parametro q es el indice a ejecutar
Dialog[q](ent_jugador, ent_npc)

Eso, a grandes rasgos. La mejora no es enorme, pero los diálogos son más legibles y se evita el excesivo anidamiento de condiciones. Este es el método que se utiliza en los ejemplos del libro de Buckland para la máquina de estados finitos.

Comentarios