La gestión dinámica de cuentas de acceso a licencias de juegos, es de propósito general, no está enfocada a un único “management client” (ejemplo: Steam client), sino que está pensado para todos los “Management clients”, los actuales (UPLAY, ORIGIN y BATTLENET) y los que vengan en el futuro, aún sin inventar). Es por ello que la plataforma Master Control soporta Scripting manualmente, para que no tenga que modificarse los EXEs por cualquier cambio en mgmt-clients actuales o futuros.
Normalmente quien les habla, sube las scripts a la comunidad, y al común de los dueños de salones de ESports solo tiene que presionar el botón IMPORTAR DESDE LA COMUNIDAD.
Pero, nunca está de más saber como programar o modificar las scripts tú solito para ajustarlas a tus necesidades.
Invocación de la configuración
IMPORTANTE: La configuración de una plataforma de distribución (ejemplo: plataforma Steam) se invoca cuando en la configuración de un juego a iniciar están presentes ambas variables especiales, las definidas como la del USUARIO y la del PASSWORD, sin importar si fueran realmente funcionales o no, también se invoca si en el juego a iniciar se indica que pertenece a una plataforma de distribución. El campo plataforma también sirve para cuando la identificación de USUARIO Y PASSWORD no se introduce por línea de comando (Ejemplo: EpicGames), sino que se tiene que tipear visualmente en el cuadro de login mediante mecanismos de automatización robótica.
Ejemplo: La configuración típica de un juego que usa la plataforma Steam, se tipifica por ejecutar el cliente steam:
………Steam.exe -login %%STEAMUSER%% %%STEAMPASS%% -applaunch ###
En ese caso, las variables especiales inventadas son funcionales.
Pero en Origin, que no acepta logueo por línea de comandos, entonces se especifica en los juegos de Origin que se usará la plataforma ORIGIN, para que invoque la script de origin.
Plataforma: Origin
Se invocan las scripts para la plataforma Origin.
Aunque se pueda introducir las variables USUARIO Y PASSWORD por línea de comando, igual es importante especificar que el juego pertenece a tal plataforma en el campo PLATAFORMA. Esto último será usado luego, para poder importar todos los juegos en el listado de licencias de juegos con 1 solo click.
Diferentes scripts según evento/necesidad/situación
- Script CHANGE se ejecuta solo cuando el servidor necesita solamente cambiar el juego sin cambiar la cuenta de acceso de la plataforma, esto es muy común porque el servidor tratará siempre de preferir la cuenta previamente en uso en cada PC a la hora de buscar ejecutar el juego pedido.
Si CHANGE está presente ya no se enviará el comando shell tradicional para ejecutar el juego. Deberá ser la script quien lo ordene.- Script SHUTDOWN se ejecuta primero cuando el servidor necesita cambiar el juego y también cambiar la cuenta de acceso de la plataforma, esto es porque el juego deseado se encuentra accesible solamente desde otra cuenta.
- Script FIRST se ejecuta luego de shutdown cuando se cambia una cuenta de acceso de la plataforma, y también se ejecuta cuando es la primera vez que se pide un juego.
Si la script FIRST está presente ya no se enviará el comando shell tradicional para ejecutar el juego. Deberá ser la script quien lo ordene.
En resumen:
First <—- Primera ejecución de juego y plataforma.
Change <—– Cambia solo el juego, pero no la cuenta de la plataforma.
Shutdown + First <—— Cambia primero cuenta de acceso a la plataforma y luego juego.
Manejo de errores
Si cualquiera de las scripts devuelve un error, toda la cadena de comandos es desechada y el juego no se ejecuta.
Hay comandos que devuelven un error a propósito si su testeo falla. Ejemplo: Si el hash de un archivo no es válido, devuelve error y detiene toda la script, impidiendo que el USER/PASS sea transmitido hacia el lugar incorrecto.
Manejo de variables especiales
Todas las variables deben estar encerradas entre doble porcentaje, de apertura y cierre.
- %%TARGETDRIVE%% = letra de unidad y el carácter dos puntintos (formato Windows).
- %%TARGETPATH%% = letra de unidad + ruta de acceso, incluye carácter \ final.
- %%TARGETPATHEXE%% = letra de unidad + ruta de acceso + nombre de archivo, todo encerrado entre comillas.
- %%TARGETPATHEXEPARAMS%% = letra de unidad + ruta de acceso + nombre de archivo, todo encerrado entre comillas. Y luego los parámetros de ejecución.
- %%TARGETPARAMS%% = Únicamente los parámetros de ejecución.
- %%<variable de plataforma USER>%% = La variable que definió en la configuración como nombre de usuario.
- %%<variable de plataforma PASS>%% = La variable que definió en la configuración como password.
- %%<variables estáticas de dispositivo>%% = Todas las variables de dispositivos definidas en el modo estático de manejo de cuentas.
- %%<variables estáticas globales%% = Todas las variables globales definidas en el modo estático de manejo de cuentas.
Separación de comandos
Se escribe 1 comando completo por cada línea. Y el nombre del comando debe terminar con un símbolo de dos puntos.
Ejemplo:
com: parámetros
com2: parámetros
Y así…
Lista de comandos
EXPIRE
expire:hh:mm:ss,Label
Indica el tiempo máximo de validez de toda la script. Si la script tarda más que dicho tiempo, se cancela toda la script, excepto que se indique una etiqueta.
Si se especifica una etiqueta, al expirar saltará a dicha etiqueta. Se recomienda volver a poner un comando expire antes de ejecutar la siguiente parte del código de la script.
Si no se especifica ningún parámetro expire, por defecto solo se tendrá 3 segundos para ejecutar toda la script, lo cual puede ser válido solo para lanzar un comando shell o shelu.
El parámetro está expresado en horas, minutos, segundos desde el comienzo de ejecución de la script.
WAIT
wait:hh:mm:ss
Ordena esperar cierto tiempo, expresado en horas, minutos, segundos.
LABEL
Label:Nombre
Es un marcador que puede ser usado para que otros comandos hagan referencia de continuar la ejecución a partir de dicho marcador. Es insensible a las minúsculas y mayúsculas.
NOTA: Es importante de que no haya espacios en toda la línea, o la etiqueta no será reconocida como marcador.
GOTO
Goto: <Nombre de etiqueta>
Continua la ejecución de la script por el marcador Label indicado.
PROCISPRESENT
ProcIsPresent:ProccessName
Ordena esperar hasta tanto el proceso esté presente.
PROCISABSENT
ProcIsAbsent:ProccessName
Ordena esperar hasta tanto el proceso esté ausente.
IFACTIVEWINDOW
IfActiveWindow:name
Ordena esperar hasta tanto la ventana indicada sea la ventana activa.
IFNOTACTIVEWINDOW
IfNotActiveWindow:name
Ordena esperar hasta tanto la ventana indicada NO sea la ventana activa.
IFACTIVEWINDOWCLASS
IfActiveWindowClass:name
Ordena esperar hasta tanto la clase de ventana indicada sea la ventana activa.
IFNOTACTIVEWINDOWCLASS
IfNotActiveWindowClass:name
Ordena esperar hasta tanto la clase de ventana indicada NO sea la ventana activa.
KILLPROC
KillProc:ProccessName
Ordena eliminar un proceso, o todos los procesos con dicho nombre. El comando devuelve ok sin importar si pudo o no pudo eliminar el proceso, o si el proceso en realidad no existía.
TYPE
Type:text
Ordena tipear el siguiente texto. Pero no soporta todos los caracteres ASCII. Por razones de idioma y región, el teclado objetivo puede variar, y por eso no se soportan caracteres símbolos salvo los símbolos listados.
Además se soportan las siguientes palabras claves para invocar a las teclas aludidas.
‘BackSpace’ ‘Tab’ ‘Return’ ‘Esc’ ‘Home’ ‘End’ ‘Insert’ ‘Delete’ ‘Up’ ‘Left’ ‘Right’ ‘Down’ ‘F1’ ‘F2’ ‘F3’ ‘F4’ ‘F5’ ‘F6’ ‘F7’ ‘F8’ ‘F9’ ‘F10’ ‘F11’ ‘F12’ ‘PageDown’ ‘PageUp’ ‘Print’
Y se soporta el tipeado de los símolos: * + , – . / y la barra espaciadora.
Los dígitos del 0 a 9, y las letras A a la Z tanto en mayúsculas como en minúsculas así como la letra “Ñ” y “ñ”.
Como este comando es usado para enviar el usuario y password, es recomendable que los mismos no tengan caracteres que no sean soportados aquí.
IFSIGN
IfSign:DrivePathFileName,hash,hash,hash…
Ordena chequear si un archivo tiene el hash o uno de los hashes correctos.
Si tiene un hash correcto continua, caso contrario devuelve un error interrumpiendo la ejecución de la script, evitando el envío de passwords hacia archivos ejecutables sospechosos.
Esto es usado para validar lo que se ejecutará.
Se utilizará un hash de cáculo rápido, no estandarizado, para evitar laguear la ejecución y la script.
El uso más común es:
IfSign:%%TARGETPATHEXE%%,hash,hash,hash…
BLOCK
Block:Enable
Si Enable <> 0 , bloquea teclado y mouse físico / real.
GRABWINDOW
GrabWindow:ClassName,Caption,Caption…
Intenta agarrar y poner en foco a la ventana indicada, identificada por un ClassName y uno o varios Captions (soporte multilenguaje). No espera, si falla igual continúa ejecutando la script, es decir, por políticas de anti-popups de Windows, no hay garantía de que funcione.
GRABWINDOWORHOLD
GrabWindowOrHold:ClassName,Caption,Caption…
Intenta agarrar y poner en foco a la ventana indicada, identificada por un ClassName y uno o varios Captions (soporte multilenguaje). Si confirma que logró ponerla en foco y primer plano continúa ejecutando la script, pero si falla por las políticas de anti-popups / anti-spam de Windows sigue esperando hasta lograrlo, al mismo tiempo intenta poner la ventana como activa en primer plano, suplantando al usuario humano usando ciertas técnicas de control.
SETWINDOWSIZE
SetWindowSize:ow,oh
Establece el tamaño de la ventana actual. Esto puede ser de gran ayuda si luego vas a hacer comprobaciones visuales de protección.
PD: Asegúrate de que la ventana actual sí o sí sea la que realmente necesitas explorar antes de ejecutar este comando.
IFVISUAL
IfVisual:ox,oy,sign1,sign2,…..
Si reconoce cualquiera de las firmas visuales en la posición X e Y relativas al interior de la ventana activa permitirá continuar con la script, caso contrario espera.
Coordenadas relativo a la esquina superior izquierda.
Use la app Visual Signer para obtener la firma visual de lo que quieres que reconozca.
IFVISUALNOHOLD
IfVisualNoHold:ox,oy,label,sign1,sign2,…..
Si reconoce cualquiera de las firmas visuales en la posición X e Y relativas al interior de la ventana activa saltará a la etiqueta indicada, caso contrario continua con la ejecución normal de la script.
Coordenadas relativas a la esquina superior izquierda.
Use la app Visual Signer para obtener la firma visual de lo que quieres que reconozca.
IFVISUALDUAL
IfVisualDual:ox1,oy1,LabelName,sign1,ox,oy,sign2,sign3…..
Si reconoce la primer firma visual salta a la etiqueta del marcador indicado.
Si reconoce el resto de las firmas visuales continua con la ejecución de la script.
Si no reconoce ninguna firma visual, espera.
Coordenadas relativas a la esquina superior izquierda.
Use la app Visual Signer para obtener la firma visual de lo que quieres que reconozca.
IFVISUALANDSIZE
IfVisualAndSize:ox,oy,ow,oh,sign1,sign2,…..
Si reconoce cualquiera de las firmas visuales en la posición X e Y relativas al interior de la ventana activa permitirá continuar con la script, caso contrario espera.
También controla que el tamaño de la ventana (su superficie interna llamada ClientArea) también sea del tamaño indicado en ow y oh (siendo width y height).
Coordenadas relativo a la esquina superior izquierda de la ventana.
Use la app Visual Signer para obtener la firma visual de lo que quieres que reconozca.
IFNOTVISUAL
IfNotVisual:ox,oy,sign1,sign2,…..
Si no reconoce ninguna de las firmas visuales en la posición X e Y relativas al interior de la ventana activa permitirá continuar con la script, caso contrario espera.
Coordenadas relativo a la esquina superior izquierda.
Use la app Visual Signer para obtener la firma visual de lo que quieres que no reconozca.
IFNOTVISUALINCLASS
IfNotVisualInClass:ox,oy,className,sign1,sign2,…..
Si no reconoce ninguna de las firmas visuales en la posición X e Y relativas al interior de la ventana activa permitirá continuar con la script, caso contrario espera. Pero solamente si la clase de ventana es la deseada inspeccionar, si no es la deseada sigue esperando.
Coordenadas relativo a la esquina superior izquierda.
Use la app Visual Signer para obtener la firma visual de lo que quieres que no reconozca.
IFNOTVISUALINCAPTION
IfNotVisualInCaption:ox,oy,caption,sign1,sign2,…..
Si no reconoce ninguna de las firmas visuales en la posición X e Y relativas al interior de la ventana activa permitirá continuar con la script, caso contrario espera. Pero solamente si el caption de la ventana es la deseada inspeccionar, si no es la deseada sigue esperando.
Coordenadas relativo a la esquina superior izquierda.
Use la app Visual Signer para obtener la firma visual de lo que quieres que no reconozca.
LOOP / NEXT
Loop:
…
Next:
…
Next:
Marca el inicio de un Loop y Next lo cierra. El loop repetirá infinitamente lo que hay dentro, el comando Loop resume la ejecución del script de forma rápida, pero Next hace una pausa de 100ms antes de volver a ejecutar de nuevo el contenido del loop.
Un siclo Loop/Next puede ser escapado por el comando expire, o que uno de los comandos dentro del loop salte a una etiqueta fuera del loop, el tiempo de expiración puede ser reiniciado en todo momento por el contenido del loop o antes de iniciar el loop. También puede ser escapado por un comando End que finaliza la script. Un Loop puede tener múltiples Next, en el caso de que el contenido del loop se ramifique, el comando Next siempre saltará al último comando Loop observado.
CLICK
Click:ox,oy
Ordena un click primario (el izquierdo), en la posición X e Y relativa al interior de la ventana activa (relativo a la esquina superior izquierda).
SHELL
shell:DrivePath,CommandLine
Ordena alguna ejecución. DrivePath define el contexto “directorio de trabajo” (directorio actual) bajo el cual se ejecutará la línea de comandos.
El uso más común, es hacer que la script ejecute lo que dice en la configuración del juego de forma directa, incluyendo los parámetros de ejecución:
shell:%%TARGETPATH%%,%%TARGETPATHEXEPARAMS%%
SHELU
shell:DrivePath,CommandLine
Ordena alguna ejecución. DrivePath define el contexto “directorio de trabajo” (directorio actual) bajo el cual se ejecutará la línea de comandos.
El uso más común, es hacer que la script ejecute lo que dice en la configuración del juego de forma directa, incluyendo los parámetros de ejecución:
shelu:%%TARGETPATH%%,%%TARGETPATHEXEPARAMS%%
La diferencia entre SHELL y SHELU es que este último ejecuta el comando con las credenciales normales del usuario de Windows, mientras que SHELL lo ejecuta elevado como administrador.
END
END
Finaliza la script.