====== Diálogos basados en iconos ====== Hola. Debido al gran interés que existe por hacer diálogos basados en iconos en WME, he decidido crear un sencillo objeto universal que puedas usar y adaptar a tus necesaidades. Aquí tienes un ejemplo de cómo implementarlo rápidamente: 1. Crea el archivo scripts\dialogueObject.script con el siguiente contenido: #include "scripts\base.inc" // Define las dimensiones de los iconos de tu diálogo var ICON_WIDTH = 57; var ICON_HEIGHT = 57; // script es el nombre donde manejarás las respuestas del ociono seleccionado por el jugador method initializeDialogue(script) { this.script = script; this.iconCount = 0; this.window = Game.LoadWindow("windows\dialogueWindow.window"); var tmpwin = this.window; tmpwin.Visible = true; tmpwin.AttachScript(script); } // Esto terminará el diálogo y liberará los recursos method endDialogue() { var tmpwindow = this.window; tmpwindow.DetachScript(this.script); tmpwindow.Close(); } // Esto añadirá un icono a la ventana de diálogo method insertIcon(name, sprite, hoversprite) { var tmpwin = this.window; var tmpButton = tmpwin.CreateButton(name); tmpButton.X = this.iconCount * ICON_WIDTH; tmpButton.SetImage(sprite); tmpButton.SetHoverImage(hoversprite); tmpButton.Visible = true; tmpButton.Interactive = true; tmpButton.ParentNotify = true; tmpButton.Disabled = false; tmpButton.PixelPerfect = false; tmpButton.Width = ICON_WIDTH; tmpButton.Height = ICON_HEIGHT; this[this.iconCount] = name; // Guardamos el nombre para borrar rápidamente la referencia más adelante this.iconCount = this.iconCount + 1; } // Esto elimina el icono (normalmente, después de agotar todos los temas) method removeIcon(name) { var tmpwin = this.window; var reorder = -1; // a salvo de llamadas sin sentido for (var a = 0; a 2. Crea un archivo llamado scripts\reactions.script on "first" { Game.Msg("Haz algo después de la primera elección."); } on "second" { Game.Msg("Haz algo después de la segunda elección."); } on "third" { Game.Msg("Haz algo después de la tercera elección."); dlgObject.removeIcon("second"); } 3. Escribe en scripts\base.inc global dlgObject; y en scripts\game.script dlgObject = new Object("scripts\dialogueObject.script"); Entonces, en tu escena de prueba introduce el siguiente código: dlgObject.initializeDialogue("scripts\reactions.script"); dlgObject.insertIcon("first","icon.png","icon.png"); // mete alguna imagen real en lugar de icon.png dlgObject.insertIcon("second","icon.png","icon.png"); // mete alguna imagen real en lugar de icon.png dlgObject.insertIcon("third","icon.png","icon.png"); // mete alguna imagen real en lugar de icon.png El esqueleto básico ha sido completado. Después de que acabe el diálogo, llama a **dlgObject.endDialogue()**; y probablemente tendrás que poner la variable **set Game.Interactive** a True (si anteriormente era False) Espero que te ayude. ¡Los comentarios son bienvenidos!