{"id":1324,"date":"2016-10-27T09:45:51","date_gmt":"2016-10-27T12:45:51","guid":{"rendered":"https:\/\/www.flulpycrea.com.ar\/wp\/?page_id=1324"},"modified":"2026-03-25T22:47:10","modified_gmt":"2026-03-26T01:47:10","slug":"gestion-dinamica-de-cuentas-de-gestion-de-licencias-de-juegos-scripting","status":"publish","type":"page","link":"https:\/\/www.flulpycrea.com.ar\/wp\/documentacion\/manual-del-usuario\/gestion-dinamica-de-cuentas-de-gestion-de-licencias-de-juegos-scripting\/","title":{"rendered":"Gesti\u00f3n din\u00e1mica de cuentas de gesti\u00f3n de licencias de juegos: Scripting"},"content":{"rendered":"<blockquote><p>La gesti\u00f3n din\u00e1mica de cuentas de acceso a licencias de juegos, es de prop\u00f3sito general, no est\u00e1 enfocada a un \u00fanico &#8220;management client&#8221; (ejemplo: Steam client), sino que est\u00e1 pensado para todos los &#8220;Management clients&#8221;, los actuales (UPLAY, ORIGIN y BATTLENET) y los que vengan en el futuro, a\u00fan 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.<\/p>\n<p>Normalmente quien les habla, sube las scripts a la comunidad, y al com\u00fan de los due\u00f1os de salones de ESports solo tiene que presionar el bot\u00f3n IMPORTAR DESDE LA COMUNIDAD.<\/p>\n<p>Pero, nunca est\u00e1 de m\u00e1s saber como programar o modificar las scripts t\u00fa solito para ajustarlas a tus necesidades.<\/p><\/blockquote>\n<h3>Invocaci\u00f3n de la configuraci\u00f3n<\/h3>\n<blockquote><p><strong>IMPORTANTE:<\/strong> La configuraci\u00f3n de una plataforma de distribuci\u00f3n (ejemplo: plataforma Steam) se invoca cuando en la configuraci\u00f3n de un juego a iniciar est\u00e1n presentes ambas variables especiales, las definidas como la del USUARIO y la del PASSWORD, sin importar si fueran realmente funcionales o no, tambi\u00e9n se invoca si en el juego a iniciar se indica que pertenece a una plataforma de distribuci\u00f3n. El campo plataforma tambi\u00e9n sirve para cuando la identificaci\u00f3n de USUARIO Y PASSWORD no se introduce por l\u00ednea de comando (Ejemplo: EpicGames), sino que se tiene que tipear visualmente en el cuadro de login mediante mecanismos de automatizaci\u00f3n rob\u00f3tica.<\/p>\n<p>Ejemplo: La configuraci\u00f3n t\u00edpica de un juego que usa la plataforma Steam, se tipifica por ejecutar el cliente steam:<\/p>\n<p>&#8230;&#8230;&#8230;Steam.exe -login %%STEAMUSER%% %%STEAMPASS%% -applaunch ###<\/p>\n<p>En ese caso, las variables especiales inventadas son funcionales.<\/p>\n<p>Pero en Origin, que no acepta logueo por l\u00ednea de comandos, entonces se especifica en los juegos de Origin que se usar\u00e1 la plataforma ORIGIN, para que invoque la script de origin.<\/p>\n<p>Plataforma: Origin<\/p>\n<p>Se invocan las scripts para la plataforma Origin.<\/p>\n<p><strong>Aunque se pueda introducir las variables USUARIO Y PASSWORD por l\u00ednea de comando, igual es importante especificar que el juego pertenece a tal plataforma en el campo PLATAFORMA. Esto \u00faltimo ser\u00e1 usado luego, para poder importar todos los juegos en el listado de licencias de juegos con 1 solo click.<\/strong><\/p><\/blockquote>\n<h3>Diferentes scripts seg\u00fan evento\/necesidad\/situaci\u00f3n<\/h3>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-3300 size-full\" src=\"https:\/\/www.flulpycrea.com.ar\/wp\/wp-content\/uploads\/2021\/03\/examplescript.png\" alt=\"\" width=\"960\" height=\"668\" srcset=\"https:\/\/www.flulpycrea.com.ar\/wp\/wp-content\/uploads\/2021\/03\/examplescript.png 960w, https:\/\/www.flulpycrea.com.ar\/wp\/wp-content\/uploads\/2021\/03\/examplescript-300x209.png 300w\" sizes=\"auto, (max-width: 960px) 100vw, 960px\" \/><\/p>\n<blockquote>\n<ul>\n<li>Script <strong>CHANGE<\/strong> se ejecuta solo cuando el servidor necesita solamente cambiar el juego <strong>sin cambiar la cuenta de acceso de la plataforma<\/strong>, esto es muy com\u00fan porque el servidor tratar\u00e1 siempre de preferir la cuenta previamente en uso en cada PC a la hora de buscar ejecutar el juego pedido.<br \/>\n<strong>Si CHANGE est\u00e1 presente<\/strong> ya no se enviar\u00e1 el comando shell tradicional para ejecutar el juego. Deber\u00e1 ser la script quien lo ordene.<\/li>\n<li>Script <strong>SHUTDOWN<\/strong> se ejecuta primero cuando el servidor necesita cambiar el juego y tambi\u00e9n cambiar la cuenta de acceso de la plataforma, esto es porque el juego deseado se encuentra accesible solamente desde otra cuenta.<\/li>\n<li>Script <strong>FIRST <\/strong>se ejecuta luego de shutdown cuando se cambia una cuenta de acceso de la plataforma, y tambi\u00e9n se ejecuta cuando es la primera vez que se pide un juego.<strong><br \/>\nSi la script FIRST est\u00e1 presente <\/strong>ya no se enviar\u00e1 el comando shell tradicional para ejecutar el juego. Deber\u00e1 ser la script quien lo ordene.<\/li>\n<\/ul>\n<\/blockquote>\n<p>En resumen:<\/p>\n<blockquote><p>First &lt;&#8212;- Primera ejecuci\u00f3n de juego y plataforma.<\/p><\/blockquote>\n<blockquote><p>Change &lt;&#8212;&#8211; Cambia solo el juego, pero no la cuenta de la plataforma.<\/p><\/blockquote>\n<blockquote><p>Shutdown + First &lt;&#8212;&#8212; Cambia primero cuenta de acceso a la plataforma y luego juego.<\/p><\/blockquote>\n<h3>Manejo de errores<\/h3>\n<p>Si cualquiera de las scripts devuelve un error, toda la cadena de comandos es desechada y el juego no se ejecuta.<\/p>\n<p>Hay comandos que devuelven un error a prop\u00f3sito si su testeo falla. Ejemplo: Si el hash de un archivo no es v\u00e1lido, devuelve error y detiene toda la script, impidiendo que el USER\/PASS sea transmitido hacia el lugar incorrecto.<\/p>\n<h3>Manejo de variables especiales<\/h3>\n<p>Todas las variables deben estar encerradas entre doble porcentaje, de apertura y cierre.<\/p>\n<ul>\n<li>%%TARGETDRIVE%% = letra de unidad y el car\u00e1cter dos puntintos (formato Windows).<\/li>\n<li>%%TARGETPATH%% = letra de unidad + ruta de acceso, incluye car\u00e1cter \\ final.<\/li>\n<li>%%TARGETPATHEXE%% = letra de unidad + ruta de acceso + nombre de archivo,<strong> todo encerrado entre comillas<\/strong>.<\/li>\n<li>%%TARGETPATHEXEPARAMS%% = letra de unidad + ruta de acceso + nombre de archivo, todo encerrado entre comillas. Y luego los par\u00e1metros de ejecuci\u00f3n.<\/li>\n<li>%%TARGETPARAMS%% = \u00danicamente los par\u00e1metros de ejecuci\u00f3n.<\/li>\n<li>%%&lt;variable de plataforma USER&gt;%% = La variable que defini\u00f3 en la configuraci\u00f3n como nombre de usuario.<\/li>\n<li>%%&lt;variable de plataforma PASS&gt;%% = La variable que defini\u00f3 en la configuraci\u00f3n como password.<\/li>\n<li>%%&lt;variables est\u00e1ticas de dispositivo&gt;%% = Todas las variables de dispositivos definidas en el modo est\u00e1tico de manejo de cuentas.<\/li>\n<li>%%&lt;variables est\u00e1ticas globales%% = Todas las variables globales definidas en el modo est\u00e1tico de manejo de cuentas.<\/li>\n<\/ul>\n<h3>Separaci\u00f3n de comandos<\/h3>\n<p>Se escribe 1 comando completo por cada l\u00ednea. Y el nombre del comando debe terminar con un s\u00edmbolo de dos puntos.<\/p>\n<p><strong>Ejemplo:<\/strong><\/p>\n<p>com: par\u00e1metros<\/p>\n<p>com2: par\u00e1metros<\/p>\n<p>Y as\u00ed&#8230;<\/p>\n<h3>Lista de comandos<\/h3>\n<p>DEBUG<\/p>\n<blockquote><p>Activa ayudas para el desarrollador de scripts, visibiliza la ventana del bot, y aparte genera un volcado de actividad en C:\\debugLog.txt<\/p><\/blockquote>\n<p>&nbsp;<\/p>\n<p>EXPIRE<\/p>\n<blockquote><p>expire:hh:mm:ss,Label<\/p>\n<p>Indica el tiempo m\u00e1ximo de validez de toda la script. Si la script tarda m\u00e1s que dicho tiempo, se cancela toda la script, excepto que se indique una etiqueta.<\/p>\n<p>Si se especifica una etiqueta, al expirar saltar\u00e1 a dicha etiqueta. Se recomienda volver a poner un comando <strong>expire<\/strong> antes de ejecutar la siguiente parte del c\u00f3digo de la script.<\/p>\n<p>Si no se especifica ning\u00fan par\u00e1metro expire, por defecto solo se tendr\u00e1 3 segundos para ejecutar toda la script, lo cual puede ser v\u00e1lido solo para lanzar un comando shell o shelu.<\/p>\n<p>El par\u00e1metro est\u00e1 expresado en horas, minutos, segundos desde el comienzo de ejecuci\u00f3n de la script.<\/p><\/blockquote>\n<p>WAIT<\/p>\n<blockquote><p>wait:<strong>hh:mm:ss<\/strong><\/p>\n<p>Ordena esperar cierto tiempo, expresado en horas, minutos, segundos.<\/p><\/blockquote>\n<p>LABEL<\/p>\n<blockquote><p>Label:<strong>Nombre<\/strong><\/p>\n<p>Es un marcador que puede ser usado para que otros comandos hagan referencia de continuar la ejecuci\u00f3n a partir de dicho marcador. Es insensible a las min\u00fasculas y may\u00fasculas.<\/p>\n<p>NOTA: Es importante de que no haya espacios en toda la l\u00ednea, o la etiqueta no ser\u00e1 reconocida como marcador.<\/p><\/blockquote>\n<p>GOTO<\/p>\n<blockquote><p>Goto: &lt;Nombre de etiqueta&gt;<\/p>\n<p>Continua la ejecuci\u00f3n de la script por el marcador Label indicado.<\/p><\/blockquote>\n<p>PROCISPRESENT<\/p>\n<blockquote><p>ProcIsPresent:<strong>ProccessName<\/strong><\/p>\n<p>Ordena esperar hasta tanto el proceso est\u00e9 presente.<\/p><\/blockquote>\n<p>PROCISABSENT<\/p>\n<blockquote><p>ProcIsAbsent:<strong>ProccessName<\/strong><\/p>\n<p>Ordena esperar hasta tanto el proceso est\u00e9 ausente.<\/p><\/blockquote>\n<p>IFACTIVEWINDOW<\/p>\n<blockquote><p>IfActiveWindow:<strong>name<\/strong><\/p>\n<p>Ordena esperar hasta tanto la ventana indicada sea la ventana activa.<\/p><\/blockquote>\n<p>IFNOTACTIVEWINDOW<\/p>\n<blockquote><p>IfNotActiveWindow:<strong>name<\/strong><\/p>\n<p>Ordena esperar hasta tanto la ventana indicada NO sea la ventana activa.<\/p><\/blockquote>\n<p>IFACTIVEWINDOWCLASS<\/p>\n<blockquote><p>IfActiveWindowClass:<strong>name<\/strong><\/p>\n<p>Ordena esperar hasta tanto la clase de ventana indicada sea la ventana activa.<\/p><\/blockquote>\n<p>IFNOTACTIVEWINDOWCLASS<\/p>\n<blockquote><p>IfNotActiveWindowClass:<strong>name<\/strong><\/p>\n<p>Ordena esperar hasta tanto la clase de ventana indicada NO sea la ventana activa.<\/p><\/blockquote>\n<p>KILLPROC<\/p>\n<blockquote><p>KillProc:<strong>ProccessName<\/strong><\/p>\n<p>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\u00eda.<\/p><\/blockquote>\n<p>TYPE<\/p>\n<blockquote><p>Type:<strong>text<\/strong><\/p>\n<p>Ordena tipear el siguiente texto. <strong>Pero no soporta todos los caracteres ASCII. Por razones de idioma y regi\u00f3n, el teclado objetivo\u00a0puede variar,<\/strong> y por eso no se soportan caracteres s\u00edmbolos salvo los s\u00edmbolos listados.<\/p>\n<p>Adem\u00e1s se soportan las siguientes palabras claves para invocar a las teclas aludidas.<\/p>\n<p>&#8216;BackSpace&#8217; &#8216;Tab&#8217; &#8216;Return&#8217; &#8216;Esc&#8217; &#8216;Home&#8217; &#8216;End&#8217;\u00a0&#8216;Insert&#8217;\u00a0&#8216;Delete&#8217;\u00a0&#8216;Up&#8217;\u00a0&#8216;Left&#8217;\u00a0&#8216;Right&#8217;\u00a0&#8216;Down&#8217;\u00a0&#8216;F1&#8217;\u00a0&#8216;F2&#8217;\u00a0&#8216;F3&#8217;\u00a0&#8216;F4&#8217;\u00a0&#8216;F5&#8217;\u00a0&#8216;F6&#8217;\u00a0&#8216;F7&#8217;\u00a0&#8216;F8&#8217;\u00a0&#8216;F9&#8217;\u00a0&#8216;F10&#8217;\u00a0&#8216;F11&#8217;\u00a0&#8216;F12&#8217;\u00a0&#8216;PageDown&#8217;\u00a0&#8216;PageUp&#8217; &#8216;Print&#8217;<\/p>\n<p>Y se soporta el tipeado de los s\u00edmolos: * + , &#8211; . \/ y la barra espaciadora.<\/p>\n<p>Los d\u00edgitos del 0 a 9, y las letras A a la Z tanto en may\u00fasculas como en min\u00fasculas as\u00ed como la letra &#8220;\u00d1&#8221; y &#8220;\u00f1&#8221;.<\/p>\n<p><strong>Como este comando es usado para enviar el usuario y password, es recomendable que los mismos no tengan caracteres que no sean soportados aqu\u00ed.<\/strong><\/p><\/blockquote>\n<p>IFSIGN<\/p>\n<blockquote><p>IfSign:<strong>DrivePathFileName<\/strong>,<strong>hash<\/strong>,<strong>hash<\/strong>,<strong>hash<\/strong>&#8230;<\/p>\n<p>Ordena chequear\u00a0si un archivo tiene el hash o uno de los hashes correctos.<\/p>\n<p>Si tiene un hash correcto continua, caso contrario devuelve un error interrumpiendo la ejecuci\u00f3n de la script, evitando el env\u00edo de passwords hacia archivos ejecutables sospechosos.<\/p>\n<p>Esto es usado para validar lo que se ejecutar\u00e1.<\/p>\n<p>Se utilizar\u00e1 un hash de c\u00e1culo r\u00e1pido, no estandarizado, para evitar laguear la ejecuci\u00f3n y la script.<\/p>\n<p>El uso m\u00e1s com\u00fan es:<\/p>\n<p>IfSign:%%TARGETPATHEXE%%,hash,hash,hash&#8230;<\/p><\/blockquote>\n<p>BLOCK<\/p>\n<blockquote><p>Block:Enable<\/p>\n<p>Si Enable &lt;&gt; 0 , bloquea teclado y mouse f\u00edsico \/ real.<\/p><\/blockquote>\n<p>GRABWINDOW<\/p>\n<blockquote><p>GrabWindow:<strong>ClassName,Caption,Caption&#8230;<\/strong><\/p>\n<p>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\u00faa ejecutando la script, es decir, por pol\u00edticas de anti-popups de Windows, no hay garant\u00eda de que funcione.<\/p><\/blockquote>\n<p>GRABWINDOWORHOLD<\/p>\n<blockquote><p>GrabWindowOrHold:<strong>ClassName,Caption,Caption&#8230;<\/strong><\/p>\n<p>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\u00f3 ponerla en foco y primer plano contin\u00faa ejecutando la script, pero si falla por las pol\u00edticas 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\u00e9cnicas de control.<\/p><\/blockquote>\n<p><span style=\"font-size: inherit; color: var(--text-color); font-family: var(--text-font);\">SETWINDOWSIZE<\/span><\/p>\n<blockquote><p>SetWindowSize:<strong>ow<\/strong>,<strong>oh<\/strong><\/p>\n<p><span style=\"font-size: inherit; color: var(--text-color); font-family: var(--text-font);\">Establece el tama\u00f1o de la ventana actual. Esto puede ser de gran ayuda si luego vas a hacer comprobaciones visuales de protecci\u00f3n.<\/span><\/p>\n<p>PD: Aseg\u00farate de que la ventana actual s\u00ed o s\u00ed sea la que realmente necesitas explorar antes de ejecutar este comando.<\/p><\/blockquote>\n<p>TESTBORDERSCOUNT<\/p>\n<blockquote><p>TestBordersCount: <strong>Col%<\/strong>,<strong>countToMatch<\/strong>, <strong>CalBorderMaxWidth<\/strong>, <strong>CalChangeThreshold<\/strong><\/p>\n<p>Cuenta cuantos bordes encuentra, visualizando solo la columna de pixels indicada por Col%, por ej.: 50 = columna posicionada horizontalmente en el 50% del ancho de la ventana.<\/p>\n<p>Si la cantidad de bordes es igual a countToMatch, continua la ejecuci\u00f3n de la script, caso contrario espera.<\/p>\n<p>El detector de bordes cuenta con dos calibraciones opcionales.<\/p>\n<p><strong>CalBorderMaxWidth<\/strong> indica que tan anchos en pixels son los bordes que se esperan encontrar, por defecto si no se especifica 8 pixels de ancho de borde, esto evita que se confunda con bordes 3D, y otros estilos gruesos, etc, y crea que son varios bordes cuando en realidad es uno solo. Siempre indique 2 pixels m\u00e1s ancho de lo que realmente son.<\/p>\n<p><strong>CalChangeThreshold<\/strong> indica que cantidad de variaci\u00f3n del color RGB debe verse para entender que es un cambio y posiblemente un borde, si no se especifica por defecto es 64 tonos. El rango de cambio necesario para que el detector de bordes act\u00fae va de 1 a 765. Por ej.: si el cambio entre el color de fondo del formulario, y el color de fondo de un cuadro de texto es muy tenue, apenas perceptible, tal vez quiera especificar un valor menor a 64, o si hay muchos gr\u00e1ficos, pero el cuadro de texto es borde blanco con fondo negro, tal vez quieras poner el valor de sensibilidad por arriba de los 500 para filtrar el ruido visual de los gr\u00e1ficos.<\/p><\/blockquote>\n<p>CLICKAFTERBORDER<\/p>\n<blockquote><p>ClickAfterBorder: <strong>Col%<\/strong>, <strong>BorderStart<\/strong>, <strong>CalBorderMaxWidth, CalChangeThreshold<\/strong><\/p>\n<p>Clickea en un formulario, despu\u00e9s del borde n\u00famero ordinal <strong>BorderStart<\/strong> (=1 luego del primer borde), para que entienda el esquema del formulario que ve, visualiza solo la columna de pixels indicada por <strong>Col%<\/strong>, por ej.: 50 = columna de pixels posicionada horizontalmente en el 50% (a la mitad) del ancho de la ventana.<\/p>\n<p>Si no encuentra el borde que se indica, espera. Si lo encuentra, clickea.<\/p>\n<p>Debe apuntar al borde superior del cuadro de texto o bot\u00f3n a clickear. El click se har\u00e1 pasando yendo hacia abajo desde ese borde.<\/p>\n<p>El detector de bordes cuenta con dos calibraciones opcionales.<\/p>\n<p><strong>CalBorderMaxWidth<\/strong> indica que tan anchos en pixels son los bordes que se esperan encontrar, por defecto si no se especifica 8 pixels de ancho de borde, esto evita que se confunda con bordes 3D, y otros estilos de bordes gruesos, etc, y crea que son varios bordes cuando en realidad es uno solo. Siempre indica 2 pixels m\u00e1s de ancho de los que realmente son.<\/p>\n<p><strong>CalChangeThreshold<\/strong> indica que cantidad de variaci\u00f3n del color RGB debe verse para entender que es un cambio y posiblemente un borde, si no se especifica por defecto es 64 tonos. El rango de cambio necesario para que el detector de bordes act\u00fae va de 1 a 765. Por ej.: si el cambio entre el color de fondo del formulario, y el color de fondo de un cuadro de texto es muy tenue, apenas perceptible, tal vez quiera especificar un valor menor a 64, o si hay muchos gr\u00e1ficos, pero el cuadro de texto es borde blanco con fondo negro, tal vez quieras poner el valor de sensibilidad por arriba de los 500 para filtrar el ruido visual de los gr\u00e1ficos.<\/p><\/blockquote>\n<p>CLICKAFTERBORDERREVERSE<\/p>\n<blockquote><p>ClickAfterBorderReverse: <strong>Col%<\/strong>, <strong>BorderStart<\/strong>, <strong>CalBorderMaxWidth, CalChangeThreshold<\/strong><\/p>\n<p>Clickea en un formulario, despu\u00e9s del borde n\u00famero ordinal <strong>BorderStart<\/strong> (=1 luego del primer borde), pero comenzando a contar comenzando por abajo hacia arriba, para que entienda el esquema del formulario que ve, visualiza solo la columna de pixels indicada por <strong>Col%<\/strong>, por ej.: 50 = columna de pixels posicionada horizontalmente en el 50% (a la mitad) del ancho de la ventana.<\/p>\n<p>Si no encuentra el borde que se indica, espera. Si lo encuentra, clickea.<\/p>\n<p>Debe apuntar al borde inferior de un cuadro de texto, o bot\u00f3n, ya que trabaja en reversa, el click se har\u00e1 pasando caminando hacia arriba de ese borde indicado.<\/p>\n<p>El detector de bordes cuenta con dos calibraciones opcionales.<\/p>\n<p><strong>CalBorderMaxWidth<\/strong> indica que tan anchos en pixels son los bordes que se esperan encontrar, por defecto si no se especifica 8 pixels de ancho de borde, esto evita que se confunda con bordes 3D, y otros estilos de bordes gruesos, etc, y crea que son varios bordes cuando en realidad es uno solo. Siempre indica 2 pixels m\u00e1s de ancho de los que realmente son.<\/p>\n<p><strong>CalChangeThreshold<\/strong> indica que cantidad de variaci\u00f3n del color RGB debe verse para entender que es un cambio y posiblemente un borde, si no se especifica por defecto es 64 tonos. El rango de cambio necesario para que el detector de bordes act\u00fae va de 1 a 765. Por ej.: si el cambio entre el color de fondo del formulario, y el color de fondo de un cuadro de texto es muy tenue, apenas perceptible, tal vez quiera especificar un valor menor a 64, o si hay muchos gr\u00e1ficos, pero el cuadro de texto es borde blanco con fondo negro, tal vez quieras poner el valor de sensibilidad por arriba de los 500 para filtrar el ruido visual de los gr\u00e1ficos.<\/p><\/blockquote>\n<p>IFVISUAL<\/p>\n<blockquote><p>IfVisual:<strong>ox<\/strong>,<strong>oy<\/strong>,<strong>sign1<\/strong>,<strong>sign2<\/strong>,&#8230;..<\/p>\n<p>Si reconoce cualquiera de las firmas visuales en la posici\u00f3n X e Y relativas al interior de la ventana activa permitir\u00e1 continuar con la script, caso contrario espera.<\/p>\n<p>Coordenadas relativo a la esquina superior izquierda.<\/p>\n<p>Use la app Visual Signer para obtener la firma visual de lo que quieres que reconozca.<\/p><\/blockquote>\n<p>IFVISUALNOHOLD<\/p>\n<blockquote><p>IfVisualNoHold:<strong>ox<\/strong>,<strong>oy<\/strong>,<strong>label<\/strong>,<strong>sign1<\/strong>,<strong>sign2<\/strong>,&#8230;..<\/p>\n<p>Si reconoce cualquiera de las firmas visuales en la posici\u00f3n X e Y relativas al interior de la ventana activa saltar\u00e1 a la etiqueta indicada, caso contrario continua con la ejecuci\u00f3n normal de la script.<\/p>\n<p>Coordenadas relativas a la esquina superior izquierda.<\/p>\n<p>Use la app Visual Signer para obtener la firma visual de lo que quieres que reconozca.<\/p><\/blockquote>\n<p>IFVISUALDUAL<\/p>\n<blockquote><p>IfVisualDual:<strong>ox1<\/strong>,<strong>oy1,LabelName,sign1<\/strong>,<strong>ox<\/strong>,<strong>oy,<\/strong><strong>sign2,sign3<\/strong>&#8230;..<\/p>\n<p>Si reconoce la primer firma visual salta a la etiqueta del marcador indicado.<\/p>\n<p>Si reconoce el resto de las firmas visuales continua con la ejecuci\u00f3n de la script.<\/p>\n<p>Si no reconoce ninguna firma visual, espera.<\/p>\n<p>Coordenadas relativas a la esquina superior izquierda.<\/p>\n<p>Use la app Visual Signer para obtener la firma visual de lo que quieres que reconozca.<\/p><\/blockquote>\n<p>IFVISUALANDSIZE<\/p>\n<blockquote><p>IfVisualAndSize:<strong>ox<\/strong>,<strong>oy,ow,oh,sign1<\/strong>,<strong>sign2<\/strong>,&#8230;..<\/p>\n<p>Si reconoce cualquiera de las firmas visuales en la posici\u00f3n X e Y relativas al interior de la ventana activa permitir\u00e1 continuar con la script, caso contrario espera.<\/p>\n<p>Tambi\u00e9n controla que el tama\u00f1o de la ventana (su superficie interna llamada ClientArea) tambi\u00e9n sea del tama\u00f1o indicado en ow y oh (siendo width y height).<\/p>\n<p>Coordenadas relativo a la esquina superior izquierda de la ventana.<\/p>\n<p>Use la app Visual Signer para obtener la firma visual de lo que quieres que reconozca.<\/p><\/blockquote>\n<p>IFNOTVISUAL<\/p>\n<blockquote><p>IfNotVisual:<strong>ox<\/strong>,<strong>oy<\/strong>,<strong>sign1<\/strong>,<strong>sign2<\/strong>,&#8230;..<\/p>\n<p>Si no reconoce ninguna de las firmas visuales en la posici\u00f3n X e Y relativas al interior de la ventana activa permitir\u00e1 continuar con la script, caso contrario espera.<\/p>\n<p>Coordenadas relativo a la esquina superior izquierda.<\/p>\n<p>Use la app Visual Signer para obtener la firma visual de lo que quieres que no reconozca.<\/p><\/blockquote>\n<p>IFNOTVISUALINCLASS<\/p>\n<blockquote><p>IfNotVisualInClass:<strong>ox,oy,className,sign1,sign2,&#8230;..<\/strong><\/p>\n<p>Si no reconoce ninguna de las firmas visuales en la posici\u00f3n X e Y relativas al interior de la ventana activa permitir\u00e1 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.<\/p>\n<p>Coordenadas relativo a la esquina superior izquierda.<\/p>\n<p>Use la app Visual Signer para obtener la firma visual de lo que quieres que no reconozca.<\/p><\/blockquote>\n<p>IFNOTVISUALINCAPTION<\/p>\n<blockquote><p>IfNotVisualInCaption:<strong>ox,oy,caption,sign1,sign2,&#8230;..<\/strong><\/p>\n<p>Si no reconoce ninguna de las firmas visuales en la posici\u00f3n X e Y relativas al interior de la ventana activa permitir\u00e1 continuar con la script, caso contrario espera. Pero solamente si el caption de la ventana es la deseada inspeccionar,\u00a0si no es la deseada sigue esperando.<\/p>\n<p>Coordenadas relativo a la esquina superior izquierda.<\/p>\n<p>Use la app Visual Signer para obtener la firma visual de lo que quieres que no reconozca.<\/p><\/blockquote>\n<p>LOOP \/ NEXT<\/p>\n<blockquote><p>Loop:<\/p>\n<p>&#8230;<\/p>\n<p>Next:<\/p>\n<p>&#8230;<\/p>\n<p>Next:<\/p>\n<p>Marca el inicio de un Loop y Next lo cierra. El loop repetir\u00e1 infinitamente lo que hay dentro, el comando Loop resume la ejecuci\u00f3n del script de forma r\u00e1pida, pero Next hace una pausa de 100ms antes de volver a ejecutar de nuevo el contenido del loop.<\/p>\n<p>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\u00f3n puede ser reiniciado en todo momento por el contenido del loop o antes de iniciar el loop. Tambi\u00e9n puede ser escapado por un comando End que finaliza la script. Un Loop puede tener m\u00faltiples Next, en el caso de que el contenido del loop se ramifique, el comando Next siempre saltar\u00e1 al \u00faltimo comando Loop observado.<\/p><\/blockquote>\n<p>CLICK<\/p>\n<blockquote><p>Click:<strong>ox<\/strong>,<strong>oy<\/strong><\/p>\n<p>Ordena un click primario (el izquierdo), en la posici\u00f3n X e Y relativa al interior de la ventana activa (relativo a la esquina superior izquierda).<\/p>\n<p>Si X es negativo, se partir\u00e1 desde el borde derecho y hacia la izquierda.<br \/>\nSi Y es negativo, se partir\u00e1 desde el borde inferior y hacia arriba.<br \/>\nUsar valores negativos es ideal para clickear en scrollbars sin mayores c\u00e1lculos.<\/p><\/blockquote>\n<p>SHELL<\/p>\n<blockquote><p>shell:<strong>DrivePath<\/strong>,<strong>CommandLine<\/strong><\/p>\n<p>Ordena alguna ejecuci\u00f3n. DrivePath define el contexto &#8220;directorio de trabajo&#8221; (directorio actual) bajo el cual se ejecutar\u00e1 la l\u00ednea de comandos.<\/p>\n<p>El uso m\u00e1s com\u00fan, es hacer que la script ejecute lo que dice en la configuraci\u00f3n del juego de forma directa, incluyendo los par\u00e1metros de ejecuci\u00f3n:<\/p>\n<p>shell:%%TARGETPATH%%,%%TARGETPATHEXEPARAMS%%<\/p><\/blockquote>\n<p>SHELU<\/p>\n<blockquote><p>shell:<strong>DrivePath<\/strong>,<strong>CommandLine<\/strong><\/p>\n<p>Ordena alguna ejecuci\u00f3n. DrivePath define el contexto &#8220;directorio de trabajo&#8221; (directorio actual) bajo el cual se ejecutar\u00e1 la l\u00ednea de comandos.<\/p>\n<p>El uso m\u00e1s com\u00fan, es hacer que la script ejecute lo que dice en la configuraci\u00f3n del juego de forma directa, incluyendo los par\u00e1metros de ejecuci\u00f3n:<\/p>\n<p>shelu:%%TARGETPATH%%,%%TARGETPATHEXEPARAMS%%<\/p>\n<p>La diferencia entre SHELL y SHELU es que este \u00faltimo ejecuta el comando con las credenciales normales del usuario de Windows, mientras que SHELL lo ejecuta elevado como administrador.<\/p><\/blockquote>\n<p>END<\/p>\n<blockquote><p>END<\/p>\n<p>Finaliza la script.<\/p><\/blockquote>\n<h3>Herramientas necesarias<\/h3>\n<p><a href=\"https:\/\/www.flulpycrea.com.ar\/FlulpyDownloads\/TitleCapturer.exe\">Title capturer app<\/a><\/p>\n<p><a href=\"https:\/\/www.flulpycrea.com.ar\/FlulpyDownloads\/FileSigner.exe\">File Signer<\/a><\/p>\n<p><a href=\"https:\/\/www.flulpycrea.com.ar\/FlulpyDownloads\/ClassViewer.exe\">Class Viewer app<\/a><\/p>\n<p><a href=\"https:\/\/www.flulpycrea.com.ar\/FlulpyDownloads\/VisualSigner.exe\">Visual Signer<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>La gesti\u00f3n din\u00e1mica de cuentas de acceso a licencias de juegos, es de prop\u00f3sito general, no est\u00e1 enfocada a un<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":118,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-1324","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.flulpycrea.com.ar\/wp\/wp-json\/wp\/v2\/pages\/1324","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.flulpycrea.com.ar\/wp\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.flulpycrea.com.ar\/wp\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.flulpycrea.com.ar\/wp\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.flulpycrea.com.ar\/wp\/wp-json\/wp\/v2\/comments?post=1324"}],"version-history":[{"count":59,"href":"https:\/\/www.flulpycrea.com.ar\/wp\/wp-json\/wp\/v2\/pages\/1324\/revisions"}],"predecessor-version":[{"id":5177,"href":"https:\/\/www.flulpycrea.com.ar\/wp\/wp-json\/wp\/v2\/pages\/1324\/revisions\/5177"}],"up":[{"embeddable":true,"href":"https:\/\/www.flulpycrea.com.ar\/wp\/wp-json\/wp\/v2\/pages\/118"}],"wp:attachment":[{"href":"https:\/\/www.flulpycrea.com.ar\/wp\/wp-json\/wp\/v2\/media?parent=1324"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}