Uso de Action Plugin Compiler

Transcripción

Uso de Action Plugin Compiler
Este manual es para iniciaros en la fabricación de actions plugins, lógicamente basado en el uso de
Action File Editor 1.0.0.6 y Action Plugin Compiler 1.1.0.0 así que son necesarios para poder
aprender, estos dos programas están en ingles y son dos programas de uso gratuito con licencias un
tanto especiales que os recomiendo os miréis.
En este pequeño manual os voy a enseñar los pasos básicos de como hacer un Action Plugin,
tampoco os voy a exponer todas las posibilidades simplemente el uso básico así que no esperéis que
al finalizar este manual sepáis hacer de todo por que no sera así, ademas es muy importante que
para poder hacer Action Plugins es necesario tener una buena base de AMS y si sabes Lua o otros
lenguajes de programación mejor que mejor.
Este manual se divide en 6 partes:
Como empezar
Filtros de errores
Action File Editor
Uso de Action File Editor
Action Plugin Compiler
Uso de Action Plugin Compiler
Como empezar
Bueno para empezar reitero que es necesario tener los programas anteriormente nombrados y unos
buenos conocimientos de AMS.
Para poder crear un Action Plugin es necesario disponer de un archivo LUA y un archivo XML, el
archivo Lua solo contiene los scripts del plugins que queremos crear, y el archivo XML es para
poder crear el archivo de ayuda y también implementa el archivo Lua a la hora compilarlos.
Lo primero es tener una buena idea, en nuestro caso vamos a crear un plugin que gestionara alguno
parámetros de un botón algo simple, pero para que os hagáis una idea de como funciona todo el
mundo de la creación de plugins nos ira bien su simplicidad.
Aremos nuestra pruebas usando AMS “Autoplay Media Studio”, sobretodo en este paso es muy
importante tener las ideas claras, de que queremos que haga nuestro plugin es mi caso quiero que
gestione el color y la fuente de botón, como veréis hacer esto es bastante faena aun que parezca no.
Una vez definido lo que quiero que haga el plugin hay que ponerse manos a la obra, empezare por
la función del Color, en mi caso quiero hacer 4 comandos que serán GetColor, SetColor,
GetAllColor, SetAllColor. Ahora os mostrare las ideas, luego haremos las funciones.
GetColor: (Este ejemplo de GetColor esta basado en el color normal del botón.)
Clr = Button.GetProperties("Button8");
COLORNormal = Clr.ColorNormal;
Dialog.Message("Notice", "El color Normal es: "..COLORNormal, MB_OK);
SetColor: (Este ejemplo de SetColor esta basado en el color normal del botón.)
Clr = {};
Clr.ColorNormal = 16711935;
Button.SetProperties("Button8", Clr);
GetAllColor: (Este ejemplo de GetAllColor esta basado en el todos los colores del botón.)
Tabla = Button.GetProperties("Button8");
Clr = {};
Clr.ClrNormal= Tabla.ColorNormal;
Clr.ClrHighlight = Tabla.ColorHighlight;
Clr.ClrDown = Tabla.ColorDown;
Clr.ClrDisabled = Tabla.ColorDisabled;
Dialog.Message("Notice", "El color Normal es: "..Clr.ClrNormal.."\r\nEl color Highlight es:
"..Clr.ClrHighlight.."\r\nEl color Down es: "..Clr.ClrDown.."\r\nEl color Disable es:
"..Clr.ClrDisabled, MB_OK);
SetAllColor: (Este ejemplo de SetAllColor esta basado en el todos los colores del botón.)
Clr = {};
Clr.ColorNormal = 16711935;
Clr.ColorHighlight = 16764057;
Clr.ColorDown = 13056;
Clr.ColorDisabled = 83868608;
Button.SetProperties("Button8", Clr);
Una vez hemos decidido que es lo que queremos que haga nuestro plugin tenemos que ponernos
manos a la obra para hacer las funciones, sustituir los valores por variables y hacer una serie de test,
yo como ejemplo ahora solo os pondré el GetColor y el SetColor, el resto de funciones y demás las
guardo para el final de este tutorial donde abra un seguido de ejemplos.
GetColor: (Este ejemplo de GetColor esta basado en el color normal del boton.)
function Button.GetColor(ClrButtonName)
TabladePropiedadesCLR = Button.GetProperties(ClrButtonName);
COLORNormal = TabladePropiedadesCLR.ColorNormal;
return COLORNormal;
end
SetColor: (Este ejemplo de SetColor esta basado en el color normal del boton.)
function Button.SetColor(ClrButtonName, ClrItem)
tabladecolores = {};
tabladecolores.ColorNormal = ClrItem;
Button.SetProperties(ClrButtonName, tabladecolores);
end
Como veis en el ejemplo he sustituido los valores por las variables, ahora lo único que me hace falta
es modificar la función para que sea valida para Highlight, Down, Disabled. Seria algo asi:
GetColor:
function Button.GetColor(ClrButtonName, ColoresSLC)
if ColoresSLC == Normal then
TabladePropiedadesCLR = Button.GetProperties(ClrButtonName);
COLORNormal = TabladePropiedadesCLR.ColorNormal;
return COLORNormal;
end
if ColoresSLC == Highlight then
TabladePropiedadesCLR = Button.GetProperties(ClrButtonName);
COLORHighlight = TabladePropiedadesCLR.ColorHighlight;
return COLORHighlight;
end
if ColoresSLC == Down then
TabladePropiedadesCLR = Button.GetProperties(ClrButtonName);
COLORDown = TabladePropiedadesCLR.ColorDown;
return COLORDown;
end
if ColoresSLC == Disable then
TabladePropiedadesCLR = Button.GetProperties(ClrButtonName);
COLORDisable = TabladePropiedadesCLR.ColorDisabled;
return COLORDisable;
end
end
SetColor:
function Button.SetColor(ClrButtonName, nItem, ClrItem)
if nItem == Normal then
tabladecolores = {};
tabladecolores.ColorNormal = ClrItem;
Button.SetProperties(ClrButtonName, tabladecolores);
end
if nItem == Highlight then
tabladecolores = {};
tabladecolores.ColorHighlight = ClrItem;
Button.SetProperties(ClrButtonName, tabladecolores);
end
if nItem == Down then
tabladecolores = {};
tabladecolores.ColorDown = ClrItem;
Button.SetProperties(ClrButtonName, tabladecolores);
end
if nItem == Disable then
tabladecolores = {};
tabladecolores.ColorDisabled = ClrItem;
Button.SetProperties(ClrButtonName, tabladecolores);
end
end
Como veis no tiene mucha dificultad lo que he echo simplemente he añadido otra variable y he ido
repitiendo la función con diferentes valores para Normal, Highlight, Down, Disable. Con un simple
valor y if then. Bueno para acabar esta sección solo quiero enseñaros como funcionarían las
funciones que hemos echo:
Ejemplo SetColor:
Button.SetColor("Button7", Normal, 16711680)
Button.SetColor("Button7", Highlight, 3355443)
Ejemplo GetColor:
result = Button.GetColor("Button3", Normal)
Dialog.Message("Notice", "El color Normal es: "..result, MB_OK);
Filtros de errores
Bueno va a por los filtros de errores, ay muchas maneras de poner filtros de errores usando otras
funciones, usando los comandos “if not then”, usando el comando “error”, usando “assert”... y la
verdad es que ay varios modos yo os voy a enseñar algunos por que la verdad es que yo no se
tampoco mucho lua “por así decirlo el lua puro no es que sea difícil pero yo personalmente no se
mucho” así que os enseño los modos que yo se. En esta sección ay mucha información dispersa que
os sera de gran utilidad, digo dispersa por que considero que es tontería explicar dos veces lo mismo
así que a medida que surjan los comandos y las variaciones las ire explicando.
Imagino que conoceréis bien los comandos “if (si)” y “then (entonces)” sirven para saber si un valor
a sido ejecutado y para miles de cosas la verdad. Para hacer un filtro de errores usando estos
comandos es necesario también usar en muchos casos expresiones o/y operador. Los operadores
pueden ser aritméticos, relacionales y logicos.
(Información sobre operadores extraída de “La Guía de Scripting en LUA” Mas información,
ejemplos y otros extras descargar la guiá o mirar en la ayuda de AMS buscar “Operators”)
Operadores aritméticos
Operadores aritméticos se utilizan para realizar operaciones matemáticas sobre los números. Los
siguientes son los operadores matemáticos soportados:
Operador
Significado
+
Suma
-
Resta
*
Multiplicación
/
División
unario -
negación
Operadores relacionales
Operadores relacionales le permiten comparar cómo se relaciona un valor a otro. Los siguientes
operadores relacionales son compatibles:
Operador
Significado
>
Mayor que.
<
Menor que.
<=
Menor que o igual a.
>=
Mayor o igual a.
~=
Desigual.
==
Igualdad.
Operadores logicos
Operadores lógicos se utilizan para realizar operaciones booleanas sobre los valores booleanos. Los
siguientes operadores lógicos son compatibles:
Operador
Significado
and
devuelve verdadero si ambos valores son verdaderos.
or
devuelve verdadero si 1 de los 2 son verdaderos.
not
devuelve el contrario del valor.
Una vez conocemos todos los operadores y tenemos una ligera idea de como usarlos os mostrare
como hacer filtro de errores usando if then y operadores.
Por ejemplo si queremos que detecte si un plugin esta instalado en la aplicación ( esto es necesario
para algunos plugins que usan otros plugins para desarrollar los scripts y es necesario que algunos
otros plugins estén activos), en este caso vamos a hacer que detecte si el plugin WinApi esta activo
en la aplicación:
Ejemplo:
if not (WinApi) then
Dialog.Message("Información", "Error, WinApi Action Plugin no esta activo.");
end
Es un ejemplo muy simple pero de gran utilidad si vuestro plugin usa otros funciones de otros
plugins y es necesario tenerlos activados.
Si queremos que detecte si un valor no es numero,tabla, string.. simplemente tenéis que hacerlo de
este modo:
Ejemplo:
if (type(valor) ~= "number") then
Dialog.Message("Información", "Error, valor no es un numero.");
end
De este modo usando el comando type y ~= podremos hacer que cree un filtro que cuando el valor
no sea un numero la función no se ejecute. Esto funciona también usando "number", "table" y
"string".
Ejemplo:
function Ejemplo(Nombre, Edad)
if (type(Nombre) ~= "string") then
Dialog.Message("Información", "Error, El nombre no es un string.");
end
if (type(Edad) ~= "number") then
Dialog.Message("Información", "Error, La edad no es un numero.");
end
Dialog.Message("Resultado", "Hola me llamo "..Nombre.." y tengo "..Edad.." años");
end
-- Como veis si cargamos ahora el ejemplo así funcionara perfectamente
Ejemplo("Ceone", 29);
-- En cambio si cargamos el ejemplo de estos otros modos logicamente no funcionaran ninguno
por que el Nombre tiene que ser "string" y la Edad tiene que ser "number".
-- aquí fallaría por que el Nombre no lleva comillas así pues no es string.
Ejemplo(Ceone, 29);
-- aquí fallaría por que el Nombre es un numero en cual caso no es un string.
Ejemplo(29, 29);
-- aquí fallaría por que el Nombre es un booleano en cual caso no es un string.
Ejemplo(true,"Ceone");
También usando la dinámica el anteriormente nombrada podemos añadir el comando return para
que asi nos devuelva un valor y que sea el usuario el que tenga que añadir tablar para los errores,
como muestro en el ejemplo cuando el resultado devuelto es false lanza un mensaje de fallo, esto no
sucede si el usuario no añade esto en sus scripts.
Ejemplo:
function Ejemplo(Nombre, Edad)
if (type(Nombre) ~= "string") then
return false;
end
if (type(Edad) ~= "number") then
return false;
end
-- en esta caso en el return he usado false o true pero puedes usar numero, nil o otras expresiones.
Dialog.Message("Resultado", "Hola me llamo "..Nombre.." y tengo "..Edad.." años");
return true;
end
result = Ejemplo(Ceone, 29);
-- si el usuario no agrega esto al intentar ejecutar el ejemplo no pasara nada puesto que no esta
dispuesto para que suceda nada, simplemente devolverá un false como resultado y ya esta no
lanzara errores ni nada por el estilo, esto se hace para que los usuarios detecten si el valor devuelvo
es uno o otro, en este caso lanzaría un mensaje de error por que el nombre no es un string.
if result == false then
Dialog.Message("Información", "Error, En el nombre o la edad.");
end
Bueno este ejemplo es simple para que veáis las posibilidades la manera que vosotros lo useis es
independiente y tiene muchas salidas.
Ahora vamos hacer el filtro de errores usando el comando error no difiere mucho de los otros
modos, este modo igual que usar Dialog.Message lanza un mensaje, quizás la única diferencia
notoria es que este comando puede devuelve un dialogo diciéndote donde se encuentra el error la
linea y el sitio. Según si usas el nivel 1 o el nivel 2 del comando. El error sera señalado en la
función o en el origen de carga.
Ejemplo:
function Ejemplo(Visibilidad)
if (type(Visibilidad) ~= "boolean") then
error("Error, El Argumento tiene que ser del tipo \"boolean\"", 2);
end
Image.SetVisible("Image1", Visibilidad);
end
-- Esta es la forma correcta de cargar la función para que no de error.
Ejemplo(true);
-- Si escribes la funcion usando como valor algo que no sea un booleano el resultado de la función
-- sera que lance la linea de error. Ejemplo de error seria este:
Ejemplo(15);
-- Lógicamente este comando lanzaría la linea de error por que no es un booleanos es un numero.
Como he comentado antes existen dos niveles “o posibilidades” de uso del comando error, usando
el nivel 1 señalas a la linea donde esta el error dentro de la función, usando el nivel 2 de comando
error señalas la linea de ejecución de la función. Normalmente la mayoría de las personas usan el
nivel 2 por que el nivel 1 es poco practico para desarrollar filtros de errores.
Para cargar el nivel 2 solo hace falta cambiar el numero final del comando error por un dos como
podéis ver aquí debajo.
Ejemplo Nivel 1:
error("Aquí va el texto que quieres que se muestre con el errror.", 1);
Ejemplo Nivel 2:
error("Aquí va el texto que quieres que se muestre con el errror.", 2);
Y ya para acabar la sección de filtros de errores os mostrare otra manera de filtrar errores usando el
comando assert, para aquellos que sepáis muy poco sobre lua, este comando es lo que se podría
llamar un comando de lua puro con lo cual no se suele usar mucho para hacer cosas en AMS pero
no por ello no funciona, todo lo contrario funciona perfectamente y nos ahorra muchas lineas a la
hora de hacer un filtrado. Definición según el manual de Lua 5.1:
assert (v [, mensaje])
Assert: Activa un error cuando el valor de su argumento v es falso (por ejemplo, nil o false); en
otro caso retorna todos sus argumentos. mensaje es un mensaje de error; cuando está ausente se
utiliza por defecto "assertion failed!".
Unos ejemplos os mostraran el funcionamiento del comando assert mejor que mil palabras.
Ejemplo:
function Ejemplo(Visibilidad)
assert(type(Visibilidad) == "boolean", "Error , El Argumento tiene que ser del tipo \"boolean\"");
Image.SetVisible("Image1", Visibilidad);
end
-- Esta es la forma correcta de cargar la función para que no de error.
Ejemplo(true);
-- Si escribes la funcion usando como valor algo que no sea un booleano el resultado de la función
-- sera que lance la linea de error. Ejemplo de error seria este:
Ejemplo(15);
-- Lógicamente este comando lanzaría la linea de error por que no es un booleanos es un numero.
Assert es algo parecido a usar la combinación de comando “If not (loquequieras) then” quizás el
único defecto que al igual que error en nivel 1 señala la linea de la función donde se determino el
fallo no señala al fallo en si, y eso a mi no termina de convencerme pero bueno nunca esta de más
saber diferentes maneras de hacer la misma cosa.
Bueno ya para terminar esta parte del tutorial explicar que existen otras maneras de hacer gestion de
errores claro que es imposible explicarlas todas puesto que seria una tontería por que considero que
las anteriormente nombradas son suficientemente útiles.
También es posible hacer gestión de otras maneras mas avanzadas pero yo tampoco es que sea un
maestro del Lua así pues abra que conformarse con unos if then y demas.
Antes de meternos manos a la obra en Action file editor os mostrare como querarian los ejemplos
que estoy haciendo con el filtro de errores ya puesto y asi tener el lua totalmente acabado.
Este es el archivo Lua con el que vamos a hacer el plugin:
-- Función de Button.SetColor
function Button.SetColor(ClrButtonName, nItem, ClrItem)
if(type(ClrButtonName) ~= "string") then error( "Error, El Argumento 1 tiene que ser del
tipo \"string\"",2);return false;end
if nItem == Normal or nItem == Highlight or nItem == Down or nItem == Disable then
else error( "Error, El Argumento 2 tiene que ser: \"Normal, Highlight, Down o Disable\"",2);return
false;end
if(type(ClrItem) ~= "number") then error( "Error, El Argumento 3 tiene que ser del
tipo \"number\"",2);return false;end
if nItem == Normal then
tabladecolores = {};
tabladecolores.ColorNormal = ClrItem;
Button.SetProperties(ClrButtonName, tabladecolores);
end
if nItem == Highlight then
tabladecolores = {};
tabladecolores.ColorHighlight = ClrItem;
Button.SetProperties(ClrButtonName, tabladecolores);
end
if nItem == Down then
tabladecolores = {};
tabladecolores.ColorDown = ClrItem;
Button.SetProperties(ClrButtonName, tabladecolores);
end
if nItem == Disable then
tabladecolores = {};
tabladecolores.ColorDisabled = ClrItem;
Button.SetProperties(ClrButtonName, tabladecolores);
end
end
-- Función de Button.SetAllColor
function Button.SetAllColor(ClrButtonName, ClrNormal, ClrHighlight, ClrDown, ClrDisabled)
if(type(ClrButtonName) ~= "string") then error( "Error, El Argumento 1 tiene que ser del
tipo \"string\"",2);return false;end
if(type(ClrNormal) ~= "number") then error( "Error, El Argumento 2 tiene que ser del
tipo \"number\"",2);return false;end
if(type(ClrHighlight) ~= "number") then error( "Error, El Argumento 3 tiene que ser del
tipo \"number\"",2);return false;end
if(type(ClrDown) ~= "number") then error( "Error, El Argumento 4 tiene que ser del
tipo \"number\"",2);return false;end
if(type(ClrDisabled) ~= "number") then error( "Error, El Argumento 5 tiene que ser del tipo
\"number\"",2);return false;end
tabladecolores = {};
tabladecolores.ColorNormal = ClrNormal;
tabladecolores.ColorHighlight = ClrHighlight;
tabladecolores.ColorDown = ClrDown;
tabladecolores.ColorDisabled = ClrDisabled;
Button.SetProperties(ClrButtonName, tabladecolores);
end
-- Función de Button.GetColor
function Button.GetColor(ClrButtonName, ColoresSLC)
if(type(ClrButtonName) ~= "string") then error( "Error, El Argumento 1 tiene que ser del
tipo \"string\"",2);return false;end
if ColoresSLC == Normal or ColoresSLC == Highlight or ColoresSLC == Down or
ColoresSLC == Disable then else error( "Error, El Argumento 2 tiene que ser: \"Normal, Highlight,
Down o Disable\"",2);return false;end
if ColoresSLC == Normal then
TabladePropiedadesCLR = Button.GetProperties(ClrButtonName);
COLORNormal = TabladePropiedadesCLR.ColorNormal;
return COLORNormal;
end
if ColoresSLC == Highlight then
TabladePropiedadesCLR = Button.GetProperties(ClrButtonName);
COLORHighlight = TabladePropiedadesCLR.ColorHighlight;
return COLORHighlight;
end
if ColoresSLC == Down then
TabladePropiedadesCLR = Button.GetProperties(ClrButtonName);
COLORDown = TabladePropiedadesCLR.ColorDown;
return COLORDown;
end
if ColoresSLC == Disable then
TabladePropiedadesCLR = Button.GetProperties(ClrButtonName);
COLORDisable = TabladePropiedadesCLR.ColorDisabled;
return COLORDisable;
end
end
-- Función de Button.GetAllColor
function Button.GetAllColor(ClrButtonName)
if(type(ClrButtonName) ~= "string") then error( "Error, El Argumento 1 tiene que ser del
tipo \"string\"",2);return false;end
TabladePropiedadesCLR = Button.GetProperties(ClrButtonName);
COLORALL = {};
COLORALL.ClrNormal= TabladePropiedadesCLR.ColorNormal;
COLORALL.ClrHighlight = TabladePropiedadesCLR.ColorHighlight;
COLORALL.ClrDown = TabladePropiedadesCLR.ColorDown;
COLORALL.ClrDisabled = TabladePropiedadesCLR.ColorDisabled;
return COLORALL;
end
Todo este contenido lo guardo en un archivo de texto con extensión lua que usare como archivo lua
para el plugin que voy a desarrollar como ejemplo para este tutorial.
Action File Editor
Para todos aquellos que no lo sepan Action File Editor es un progama que te permite crear archivos
XML y archivos de ayuda para AMS. El programa tiene 3 secciones claramente diferenciadas en la
ayuda la Ventana de acciones, la Ventana de argumentos y la Ventana de coaciones. Ahora os iré
explicando para que sirven cada cosa.
Ventana de acciones:
1, Action Name: El Nombre de la acción. Asegurate de que el nombre coincide exactamente con el
nombre de la funcion que uso en el archivo Lua.
2, Action Description: La descripción de la acción que aparecerá en la zona de explicaciones
breves de los comandos de AMS.
3, Action Return Type: El tipo de valor de return. Si no tiene valor de vuelta ponga “None”, las
otras opciones son: “string”, “number”, “boolean” y “table”.
4, Note: Esto añade una nota conforme a la descripción en el archivo de ayuda, esto es útil para
destacar una línea de texto para el usuario para prestar la atención a algo en concreto.
5, Return Description: A veces usted tendrá que añadir que una descripción a su resultado de
vuelta como define una estructura de tabla o explica valores de vuelta de número entero.
6, Action Example: Es por si quiere añadir un pequeño código mostrando algún tipo de ejemplo
referente a la acción creada.
7, Add/Edit Action: Este botón añade una nueva acción o corrige la acción seleccionada.
8, Remove Action: Este botón elimina la acción seleccionada.
9, New Action: Este botón limpia todos los campos para una nueva acción.
10, Copy Action: Este botón copia la acción seleccionada para una nueva acción.
11, Add Argument: Este botón añade un argumento a la acción seleccionada, para más información
mirar la sección de Ventana de Argumentos.
12, Remove Argument: Este botón es para eliminar el argumento seleccionado de la la acción.
13, Copy Argument: Este botón copia el argumento seleccionado para un nuevo argumento.
14, Action List: Esta lista muestra las acciones agregadas a nuestro archivo de acciones.
15, Argument List: Esta lista muestra los argumentos agregados a la acción seleccionada.
Ventana de argumentos:
Argument
1, Argument Name: El nombre del argumento. No tiene por que coincidir con el valor establecido
en la funcion de la acción. Este nombre es solo para ayudar a describir el argumento al usuario.
2, Argument Description: La descripción del argumento. Tiene que se una breve explicación en
una sola linea para hacer saber a grandes rasgos la función de este argumento.
3, Argument Type: El tipo de argumento. Tipos validos son: String, Number, Boolean, Table,
Variant (esto puede ser cualquier tipo de argumento.)
4, Argument Default: El valor por defecto del argumento.
5, Argument Note (Optional, solo para el Help): Sección para introducir información extra sobre
el argumento, esta sección no es necesaria rellenarla.
6, Required Argument: Define si el agumento es necesario o opcional.
Easy Mode (Action Editor)
7, Easy Mode Default: El valor por defecto que sera mostrado en el argumento. Esto es
simplemente el valor por defecto que aparecerá cuando el usuario crea una nueva acción en el mago
de acción. Esto debe echarles una mano allí con un valor por defecto.
8, Easy Mode Data Type: El tipo de datos que los usos de argumento. Esto ayudará al redactor de
acción a determinar que la clase de la célula de rejilla usar para el argumento.
8, Easy Mode Constraints: Las coacciones son usadas adelante para modificar qué clase de datos
que la célula de rejilla aceptará, Ver la Ventana de Coacciones para más información.
Nota: No todos los tipos de datos permiten coacciones.
Argument Window Buttons
9, OK: Ciera la ventana de argumentos y añade este argumento a la lista
10, Cancel: Ciera la ventana de argumentos sin guardar los cambios.
11, Edit: Este botón abre la ventana de coacciones para selecionar el tipo.
Nota: No todos los tipos de datos permiten coacciones.
Ventana de coacciones:
Constraint Input Fields (Combo)
1, Constraint Name: Nombre de la coacción.
2, Constraint Value: El Valor de la coacción, esto sera mostrado en el AMS como explicacion, esta
sección no es necesaria rellenarla.
3, Constraint Description: Algún texto para describir como esta coacción se diferencia de
otros,esta sección no es necesaria rellenarla.
Constraint Buttons (Combo)
4, Add/Edit Constraint: Añade una nueva coaccion o edita una seleccionada.
5, Remove Constraint: Elimina la coaccion selecionada de la lista.
6, New Constraint: Limpia todos los campos y crea una nueva entrada.
7, OK: Ciera la ventana de coacciones y añade las coacciones a a la lista
8, Cancel: Ciera la ventana de coacciones sin guardar los cambios.
Uso de Action File Editor
Bueno una vez explicado para que sirve cada campo de Action File Editor vamos hacer las cuatro
acciones que antes hemos creado para el botón: GetColor, SetColor, GetAllColor, SetAllColor.
Con esto consegiremos un archivo XML que después no sera necesario para poder crear el plugin
usando Action Plugin Compiler, el xml también se puede usar para crear el archivo de ayuda
aparte el mismo Action File Editor nos permite crear el llamado archivo de ayuda o “helpfile”.
Empezaremos por GetColor y por crear los argumentos de este comandos
GetColor
Lo primero es abrir el Action File Editor y pulsar en campo de Action Name, y introducir el
nombre de la acción, acto seguido introducimos una pequeña explicación en el campo de Action
Description,Nota Importante: Recuerda que el texto del Action Name, tiene que coincidir con el
nombre otorgado a la acción en el archivo lua o de lo contrario se crearan conflictos. Una vez
rellenados esos dos campos fijaremos el Action Return Type, que en este caso es un numero así
pues definimos el valor como “Number” y en la sección de Return Description,si queréis podemos
agregar algún tipo de comentario. Yo añadiré una pequeña explicación, una vez escrito eso
pulsamos en el botón de Add Action. Seria algo así:
Una vez hemos pulsado el botón de Add Action, la acción aparecerá en la Action List, de este
modo:
Ahora toca agregar los argumentos a la acción en el caso son solo dos argumento, así que es muy
fácil, señalamos la acción a la que queremos agregarle el argumento, una vez tenemos señalada la
acción pulsamos sobre Add Argument se nos abrirá la ventana de argumentos y en esta ventana
tenemos que rellenar los campos siguientes: Argument Name, Argument Description, Argument
Type, Easy Mode Default, Easy Mode Data Type y Edit.
En Argument Name y Argument Description pondremos el nombre y una breve descripción del
argumento. En Argument Type seleccionaremos “string” pues es lo que es el valor. En Easy Mode
Default escribiremos el nombre del que suele ser por defecto lo que queremos que muestre, este
campo cada uno puede rellenar lo que crea conveniente yo creo que poner “Button1” es lo mas
correcto por que es como se suelen llamar los botones. En Easy Mode Data Type seleccionaremos
“Object Name” para que el motor de búsqueda seleccione nombre de objetos como ayuda. Al
seleccionar “Object Name” en Easy Mode Data Type, el campo que ay justo debajo se activara y
pondrá ALL lo que significara que podrás seleccionar cualquier nombre de cualquier objeto y eso
no es lo que nosotros queremos nosotros queremos que solo se puedan seleccionar los nombre de
los botones así pues tenemos que pulsar en Edit y seleccionar “Button”, de este modo solo nos
dejara seleccionar nombres de botones, y no de otro tipo de objetos.
Y bueno todo lo que hemos echo se resumiría en esta imagen:
Ahora nos pondremos con el segundo argumento, el segundo argumento es para seleccionar el color
del texto que deseas, si es Normal, Highlight, Down o Disable.En Argument Name y Argument
Description pondremos el nombre y una breve descripción del argumento. En Argument Type
seleccionaremos “variant” pues es lo que es el valor. En Easy Mode Default escribiremos Normal
por que sera la primera de las cuatro opciones que abran. En Easy Mode Data Type
seleccionaremos “Combo”. Al seleccionar “Combo” en Easy Mode Data Type, el campo que ay
justo debajo se activara y pondrá algo así: “Item1,Item2,Item3” nosotros queremos que nuestras
cuatro opciones salgan hay así pues tenemos que pulsar en Edit y se abrirá la ventana de coacciones
que tenemos que rellenar como sea necesario en este caso seria así:
En Constraint Name “Nombe”, Constraint Value “valor numeral” y en Constraint Descripción
“Descripción de la coacción”, como se ve en la imagen estas coacciones no tienen valor numérico
así que no relleno esos campos. Y la acción quedaría así:
Se que puede parece una tontería pero fijate bien a la hora de hacer un plugin todo coincida
correctamente si es un string o una tabla... o lo que sea por que después por pequeños fallos así el
plugin falla mas que va. Bueno una vez hemos agregado el argumento y todo esta correcto
pulsamos al botón de Edit Action que ara que el argumento se guarde en la acción, y también
recomiendo valláis guardando el archivo cada vez que hagáis pasos importantes por que este
programa no es lo que se puede decir 100% fiable sin animo de ofender al creador.
SetColor
Ahora empezaremos a hacer la segunda acción en esta voy a omitir algunos pasos o por así decirlo
los voy a resumir mucho por que la verdad es que la diferencia entre los pasos a seguir no es mucha.
Seguiremos haciendo los propio con SetColor. Fijamos el nombre en la sección de Action Name, y
fijamos una pequeña explicación en Action Description,Nota Importante: Recuerda que el texto
del Action Name, tiene que coincidir con el nombre otorgado a la acción en el archivo lua o de lo
contrario se crearan conflictos. Esta action no tiene return así que no no modificamos ese campo,
agregamos la acción pulsando en Add Action. Ahora a agregar los argumentos este comando
contiene 3 argumentos así que iremos agregándolos unos a uno, primero el nombre del objeto como
en el ejemplo anterior, después el segundo argumento Texto que también es igual que el
anteriormente descrito, y el tercer argumento es el argumento de color, este argumento es un poco
distinto de los otros aun que tampoco es que difiera en mucho simplemente hay que Argument
Type Number, y en el campo de Easy Mode Data Type Color, y en el Easy Mode Default poner 0
que es el color negro, de este modo podremos usar una herramienta que nos permitirá seleccionar el
color que deseamos. Como se ve en esta imagen:
Y así ya tendríamos echas dos acciones, os pongo una imágen para que veáis como avanza la cosa.
GetAllColor
Ahora empezaremos a hacer la tercera acción. Fijamos el nombre en la sección de Action Name, y
fijamos una pequeña explicación en Action Description,Nota Importante: Recuerda que el texto
del Action Name, tiene que coincidir con el nombre otorgado a la acción en el archivo lua o de lo
contrario se crearan conflictos. Esta acción devuelve una tabla con los resultados de los diferentes
colores del botón asi que en el campo de Return Type seleccionaremos “Table”, es recomendable
que en campo de Return Descripción pongamos una explicación con cada uno de los parámetros
de la tabla por que sino los usuarios no sabrán como funcionara esta tabla en mi caso escribo esto:
Devuelve una tabla con el color del texto del boton.
result.ClrNormal = Para el texto Normal.
result.ClrHighlight = Para el texto Highlight.
result.ClrDown = Para el texto Down.
result.ClrDisabled = Para el texto Disable.
No es ni mucho menos una explicación extensa pero creo que es suficiente como para que la gente
entienda el funcionamiento de esta tabla, una vez agregados todos estos parámetros guardamos los
cambios agregando la acción.
Una vez agregada la acción nos dispondremos a agregar los argumentos,esta acción solo tiene un
argumento que es para identificar el botón del que quieres los colores, así que seguiremos los pasos
de los anteriormente nombrado argumento. De manera que la acción quedaría así:
SetAllColor
Y ya por ultimo nos dispondremos ha hacer la ultima acción que es para fijar todos los colores del
texto de un botón, empezaremos por el nombre en la sección de Action Name, y fijamos una
pequeña explicación en Action Description,Nota Importante: Recuerda que el texto del Action
Name, tiene que coincidir con el nombre otorgado a la acción en el archivo lua o de lo contrario se
crearan conflictos. Esta action no tiene return así que no no modificamos ese campo, agregamos la
acción pulsando en Add Action. Ahora a agregar los argumentos esta acción que son en total 5, 1
para designar el botón que deseas, y los otros 4 son para los colores del texto en sus diferente
formatos “Normal, Highlight, Down, Disable.”Bueno el primer argumento es para designar el botón
y es exactamente igual que en el primer ejemplo asi que no lo explico, después aremos el argumento
para fijar el color del texto en estado normal.
Para esto simplemente ay que seguir los pasos que se hicieron en la acción SetColor pero en esta
caso ay que hacerlo 4 veces para cada uno de los formatos posibles de texto que tiene un botón,
repito que son: “Normal, Highlight, Down, Disable”.
De este modo repito que solo tienes que hacer la operación 4 veces para que gestione los cuatro
textos posibles, unas imágenes:
Action Plugin Compiler
Para todos aquellos que no lo sepan Action Plugin Compiler, es un programa que te permite
compilar plugins para AMS, combinando dos tipos de archivos: XML y LUA. El programa tiene un
entorno muy intuitivo y no dispone de archivo de ayuda así que os pondré una breve explicación de
cada uno de los botones, si tenéis mas dudas os recomiendo visteis la pagina oficial de creador.
1. New: “Nuevo” Botón para borrar todos los campos de APC y crear un nuevo proyecto.
2. Open: “Abrir” Botón para abrir un proyecto de APC guardado anteriormente.
3. Save: “Guardar” Botón para guarda el proyecto actual con un nombre definido anteriormente.
4. Save as: “Guardar como” Botón para guarda el proyecto actual con un nombre por definir.
5. Update: “Actualizar” Muestra la ultima versión del programa.
6. About: “Acerca” Muestra el about del programa, el creador, la paginas webs y la versión.
7. Licence: ”Licencia” Muestra la licencia de APC, en la cual se especifican los términos de uso.
8. Exit: ”Salir” Botón para salir del programa.
9. Output Folder: Muestra la ruta completa donde se copiara el plugin una vez compilado, pulsado
Browse seleccionas la ubicación que deseas usar.
10. XML Source: Muestra la ruta completa de donde se encuentra el archivo XML que usaremos
para compilar el plugin, pulsado Browse seleccionamos la ubicación del archivo que deseamos usar.
11. Lua Source: Muestra la ruta completa de donde se encuentra el archivo lua que usaremos para
compilar el plugin, pulsado Browse seleccionamos la ubicación del archivo que deseamos usar.
12. Plugin Name: Este campo es para escribir el nombre que deseas ponerle al plugin.
13. Plugin Version: Este campo es para escribir la versión del plugin.
14. Author Info: Este campo es para escribir el nombre del creador y una breve explicación o
enlaces referentes a este plugin, la mayoría de los creadores suelen poner el nombre del plugin, la
version, alguna dirección web, y algo de información extra.
15. Resources: Muestra las IDs y Recursos agregados para este plugin.
16. Resources: Muestra la ruta completa de donde se encuentra el archivo de recursos que se usara,
pulsado Browse seleccionamos la ubicación del archivo que deseamos usar.
17. ID, Add Resource: Id, es el numero de gestión del recurso que deseas usar, Add Resoruce es
para agregar el recurso a la lista de recursos “15”, para poder agregar un recurso es necesario
asignarle un numero y tener el campo “16” también rellenado.
18. Progress: Muestra una barra de progreso cuando compilar un plugin.
19. Delete Resource: Es para eliminar un recurso anteriormente agregado.
20. Build Plugin: Pulsado este botón iniciamos la compilación del plugin.
21. Browse Output: Este botón esta desactivado por defecto, solo se activa cuando hemos
compilado un plugin y pulsado lo nos permite explorar la capeta donde se a copiado el plugin.
22. Install Plugin: Este botón esta desactivado por defecto, solo se activa cuando hemos compilado
un plugin y pulsado este botón copia automáticamente el plugin compilado al directorio de acciones
de AMS, para poder usarlo.
Uso de Action Plugin Compiler
Este programa es realmente fácil de usar la verdad es que voy a tratar de ser lo mas breve posible
por que este programa no es que tenga mucho misterio y ademas el plugin que estoy haciendo como
ejemplo tampoco es que tenga muchos secretos como para ponerme hacer cosas raras con el APC.
Para empezar iniciaremos el APC y Pulsaremos y rellenaremos los campos de Output Folder con
la ubicación donde deseamos copiar el plugin una vez compilado, y después completaremos los
campos XML Source y Lua Source poniendo la ubicación de estos dos archivos dentro de nuestro
disco duro. Algo así seria:
Una vez rellenados estos tres campos vamos a introducir la información referente al plugin,el
nombre y la versión en sus diferenciados campos: Plugin Name, Plugin Version y Author Info.
Una vez rellenados estos campos ya podemos compilar el plugin puesto que este plugin no tiene
recursos añadidos ni es necesario hacer nada mas, si queréis podeis guardar el proyecto antes de
compilarlo por si surgen problemas o por si se bloqueara, pero no es algo que suela suceder.
Una vez pulsado el botón Build Plugin solo hay que esperar a que lance un cartel como este:
Que es para hacernos saber que el plugin se a compilado correctamente. Ahora solo tenemos que
instalar el plugin en la capeta de action de AMS y probarlo para ver si funciona correctamente.
Bueno y con esto ya terminamos la sección de Uso de Action Plugin Compiler, como a veis visto
crear y compilar un plugin tampoco es tan difícil. Aun que para hacer un plugin 100% sin fallos es
muy difícil y tienes que fijarte mucho y pasar muchos horas haciendo pruebas. Se que soy un poco
pesado pero es muy importante tener encuentra pequeños detalles y hacer muchas pruebas para que
no se te pase ningún error. Y bueno también tener en cuenta que esta es una de las forma de hacer
plugins pero se pueden hacer de otro modo tanto las funciones como los filtros de errores como el
modo de compilación. Yo ahora personalmente estoy probado otro otra forma de hacer la funciones
y de hacer los filtros de errores, cuando termine de probarlo os lo mostrare en otro manual, como
también están trabajando en hacer otro compilador de plugins aprovechare y are los dos juntos, pero
bueno aun queda mucho para eso.
Espero que os sea de utilidad este manual, y la verdad me gustaría poder explicar mas aspectos de
Action File Editor y también me abría gustado poder explicar mas aspectos del diseño de lua pero la
verdad es que es que es mucho trabajo. Sin mas espero que disfrutéis de este manual y os sea muy
útil.
Este tutorial a sido creador por Ceone para AIO Desings, Darkreloaded, Hackershn entre otras
paginas... si os a gustado y queréis mas tutoriales os recomiendo que visitéis las paginas nombras
anteriormente.

Documentos relacionados