ABC para Novatos 4: BUEN TUTORIAL EXTERNO

Consejos y trucos de programación en AutoHotkey

Moderator: Flipeador

Guill
Posts: 139
Joined: 09 Jun 2016, 22:00

ABC para Novatos 4: BUEN TUTORIAL EXTERNO

23 Oct 2016, 23:57

A CONTINUACIÓN SE COPIA LO QUE FIGURA EN LA WEB SIGUIENTE, YA QUE CONSIDERO UNA DESCRIPCIÓN MUY ÚTIL Y QUE NO SERÍA BUENO PERDER, EN CASO DE QUE DEJARA DE ESTAR DISPONIBLE EN SU LUGAR ORIGINAL.
LOS EJEMPLOS SON PENSADOS PARA APLICAR AHK A JUEGOS, PERO SIRVEN PARA CUALQUIER USO.

ESTA ES LA PÁGINA DE ORIGEN - INGRESEN PRIMERAMENTE ALLÍ - CASO DE NO PODER ACCEDER, LÉANLO DE AQUÍ.

http://ciudadmaniarp.forosactivos.net/t ... cion-y-uso

______________________________________________________________________________________________________

Pues he decidido hacer éste tutorial básico e intermedio pero MUY completo (me tomó casi 4 horas hacerlo) acerca del AutoHotkey, un programa diseñado para asignar macros a teclas o palabras clave. Hay varios programas que también hacen ésto como el HKB y el AKB pero en mi opinión el AHK, aunque pueda resultar un poco más complicado, es superior a dichos programas, pero bueno: que cada quién use el de su preferencia.

Éste tutorial va dirigido tanto para los que son nuevos en el mundo del roleplay y/o no saben acerca de los macros, o inclusive para los que usan otro programa de macros, ya que AHK ofrece una gran cantidad de opciones para su configuración.

En este tutorial mostraré la instalación, creación y uso de macros con AutoHotkey, y daré un script base con varios tipos de macros para que se vayan ubicando en el tema de la creación de scripts de AutoHotkey.

Voy a dividir el tutorial en 4 partes.

1. Definición de macro.

2. Descarga e instalación del programa.
____2.1 Descarga.
____2.2 Instalación.

3. Uso del programa y creación de scripts.
____3.1 Abriendo el programa.
____3.2 Preparando nuestro script.
____3.3 Configurando los macros.
________3.3.1 Macros con una tecla (hotkey).
________3.3.2 Macros y temporizadores.
________3.3.3 Macros y alternaciones.
________3.3.4 Macros con cadenas de texto (Hotstrings).

4. Variables y macros que usan variables.
____4.1 Variables, editar variables con InputBox y macros que usan variables.

5. Script base.
______________________________________________________________________________________________________

1. ¿Qué es un macro?

Un macro es una cadena de texto o palabra definida por el usuario la cuál se envía al presionar una tecla, botón o teclear una cadena de texto.

Ejemplo: Al presionar la tecla "1" del teclado numérico, el programa mandará un /ad (anuncio publicitario) vendiendo un Sultan, el cuál sería "/ad Vendo Sultan tuneado o lo cambio por otro coche."

2. Descarga e instalación de AutoHotkey

2.1 Descarga: Primero, descargamos el programa de la página oficial: (Busquen en Google "AutoHotkey" y entran a la primer página, y arriba aparece un cuadro naranja que dice "Download", de ahí lo bajan).

2.2 Instalación: Una vez descargado el instalador, lo abrimos y nos mostrará 2 opciones: "Express Installation" y "Custom Installation". Dan click en "Express Installation" y el programa se instalará automáticamente en "C:\Archivos de programa\AutoHotkey". Ya con ésto queda el programa instalado.

3. Uso del programa y creación de scripts.

3.1 Abriendo el programa.

Primero abrimos el programa, el cuál lo podemos encontrar en "Inicio>Todos los programas>AutoHotkey". Una vez lo abramos, aparecerá el icono de una "H" en el área de notificaciones de la barra de tareas (esquina de abajo a la derecha), le damos click derecho al ícono>Edit This Script y se abrirá un archivo de bloc de notas, borramos todo lo que haya escrito allí.

Ahora escribiremos allí nuestro script.

3.2 Preparando nuestro script

Primero, es recomendable agregar unas instrucciones al script, así que podemos empezar por agregar ésto al archivo de bloc de notas, entonces pondremos allí:

CÓDIGO:
Process, Priority,, High
F12:: reload
;Procesos
GroupAdd, GTA, GTA:SA:MP
GroupAdd, GTA, Sin título: Bloc de notas
#IfWinActive ahk_group GTA
SetKeyDelay -1

Quizás no entiendan de que va el código, pero pues haré una pequeña explicación (si quieren se la pueden saltar, no la lean):
La primera línea dice "Process, Priority,, High"

La instrucción "Process" lo usamos cuando queremos que AHK altere o haga algo con un proceso que se esté ejecutando, "Priority" significa que queremos cambiar la prirodidad del proceso, ",," es el proceso al que le queremos cambiar la prioridad, y ya que son 2 comas seguidas, el programa entiende que al proceso al que le queremos cambiar la prioridad es al propio script que se está ejecutando, "High" es la prioridad que le queremos poner, en éste caso, Alta.

Lo de "F12:: reload" lo pueden agregar opcional. Es que a medida que vayan agregando macros al script, hay que "recargarlo" o actualizarlo, para que los nuevos macros sirvan, así que con ésto harán que la tecla F12 puedan recargar el script sin tener que ir a la barra, buscar el icono>click derecho>Reload This Script.

Como pueden ver, también hay algo llamado ";Procesos", el ";" indica que es un comentario, algo que el programa no debe leer como script, simplemente es algo que agregamos para guiarnos y saber qué contiene ésa parte del script, en éste caso, bajo ";Procesos" hay 2 instrucciones, las cuáles son "GroupAdd", las cuáles indican que quiero que el programa asigne ciertos procesos a un grupo, con los cuáles interactuar, en éste caso el GTA y un Bloc de notas vacío.

Explicación de GroupAdd: "GroupAdd" se usa para agregar un proceso o ventana a un grupo, "GTA" es el nombre que le voy a poner al grupo, y "GTA:SA:MP" es el nombre de la ventana que quiero agregar al grupo. Así que sería:

CÓDIGO:
GroupAdd, "Nombre del grupo", "Nombre de la ventana para asignar al grupo"

Luego está la instrucción "#IfWinActive" (si la ventana está activa), la cuál la usaremos para que nuestros macros no funcionen a menos que no estemos en la ventana que le indiquemos.

Entonces "#IfWinActive ahk_group GTA" indica que los macros solo funcionará en las ventanas que agregamos al grupo "GTA", así que para probar los macros pueden usar una ventana sin título del bloc de notas o bien, el mismo GTA.

Luego está "SetKeyDelay -1" el cuál simplemente le indica al programa el retraso con el que debe enviar cada macro, y ya que es "-1", lo hará inmediatamente (sin retraso).

Cada vez que vayamos agregando macros recuerden que toca guardar el archivo (Ctrl+G) y usar la tecla F12 para recargar el script, así se ahorran tiempo y el programa les notifica instantáneamente si algún macro no sirve.

Ahora sí podemos empezar a agregar nuestros macros.

3.3 Configurando los macros:

Para asignar el macro a una tecla, primero ponemos la tecla que vamos a usar, así que para ello indicamos la tecla que vamos a usar.

Hay caracteres o teclas especiales como Ctrl, Shift, Enter, !, Inicio, Fin, etc... las cuáles no va a leer el AutoHotkey a menos que las pongamos en medio de un par de {}
Por ejemplo, para que presione la tecla Enter sería {enter}.
! = {!}
Fin/End = {End}
Inicio/Home = {Home)
Shift derecha/izquierda = {RShift} {LShift}

*NOTA: La lista con todas las teclas la pueden encontrar aquí: (Buscan en Google: "AutoHotkey Key List", y entran en la primer página).

La instrucción "SendInput" significa que queremos que el programa mande el macro y que nuestro computador lo detecte como si hubiera sido tecleado directamente, también está "Send" que es para que envíe texto y ya, pero éso no lo vamos a usar.

3.3.1 Macros con una tecla (hotkey).

Ejemplo para enviar el rol de un arma al presionar la tecla "1" del teclado numérido.

CÓDIGO:
NumPad1:: SendInput t/me descuelga su arma de la espalda rápidamente y la carga{enter}

Rol de un robo con la tecla "2" del teclado numérico:
CÓDIGO:
NumPad2:: SendInput t/g {¡}Las manos arriba hijo de puta ((/rendirse)) o le lleno el culo de plomo{!}

O pueden hacer que una sola tecla mande 2 acciones a la vez:

CÓDIGO:
NumPad1:: SendInput t/me descuelga su arma de la espalda, le quita el seguro y la carga{enter}t/do *CLICK-CLACK* Arma cargada{enter}

3.3.2 Macros y temporizadores:

Como ven en el ejemplo de arriba, con la tecla 1 del teclado numérico se mandan 2 cadenas de texto en una sola tecla, aunque podemos agregar un "temporizador" entre cada cadena de texto, para éso vamos a usar la función "Sleep", aunque el script se cambiará un poco.

CÓDIGO:
NumPad1::
{
SendInput t/me descuelga su arma de la espalda, le quita el seguro y la carga{enter}
Sleep, 1500
SendInput t/do *CLICK-CLACK* Arma cargada{enter}
}
return

El "1500" después del "Sleep" significa que queremos que el macro se pause durante 1500 milisegundos (segundo y medio) y que luego envíe el resto del macro, "return" indica que ahí termina el script del macro, y que no quiero que quizás por error, envíe algo de otro macro.

3.3.3 Macros y alternaciones

Ahora pasaremos a algo aún más complicado, los scripts de alternación.

Por ejemplo, queremos que al presionar la tecla 4 del teclado numérico el programa envíe 2 cosas diferentes, que cuando se presione la tecla por primera vez envíe cierto macro y a la segunda vez que se presione la tecla envíe otro macro, por ejemplo, abrir y cerrar el maletero del auto.

CÓDIGO:
numpad7::
Maletero := (! Maletero)
{
If ( Maletero )
SendInput t/v maletero{enter}t/me abre el maletero de su automóvil{enter}
Else
SendInput t/v maletero{enter}t/me cierra el maletero de su automóvil{enter}
}
return

Ahora, explico:

"Maletero := (! Maletero)" significa que quiero que el programa cree una variable que cambia cada vez que se use, en éste caso quiero que la variable sea "Maletero".
"If" significa "en caso de" y "( Maletero )" es la variable que va a buscar, así que sería: "En caso de que la variable sea ( Maletero ), enviar el macro para abrir el maletero".
"Else" significa "en caso contrario", así que "en caso de que la variable no sea "Maletero"" envíe el macro para cerrar el maletero.

Si por ejemplo usamos ésto con un arma para que con una sola tecla saque y guarde el arma sería:

CÓDIGO:
NumPad1::
Arma := (! Arma)
{
If ( Arma )
{
SendInput t/me descuelga su arma de la espalda, le quita el seguro y la carga{enter}
Sleep, 1500
SendInput t/do *CLICK-CLACK* Arma cargada{enter}
Sleep, 500
}
Else
{
SendInput t/me le pone el seguro a su arma y se la cuelga en la espalda{enter}
Sleep, 500
}
}
return

Incluso agregué un par de pausas (Sleep) al final de cada macro para que si por error presiono la tecla 2 veces, no salgan ambos macros.

Intenten modificar lo que vean que entienden del macro, agregar más línea de rol por una sola tecla, cambiar el tiempo del Sleep, que ensayando es que se aprende.

3.3.4 Macros con cadenas de texto (Hotstrings).

Ahora, aparte de usar teclas para macros podemos usar texto para macros, lo cuál es muy útil más que todo para los que usan equipos portátiles y les faltan teclas. Un ejemplo de Hotstring: si quiero hacer el rol del maletero del vehículo, en lugar de presionar la tecla 4 del teclado numérico, puedo dejarlo para que salga al teclear "male{", o para el arma puedo usar "arma{" e incluso, puedo crear un macro aparte para cada arma, por ejemplo, para sacar la M4 que sea al teclear "m4{", La AK-47 al teclear "ak{", la Desert Eagle al teclear "de{".

Para éso, agregamos preferiblemente al final de nuestro script la función "#Hotstrings", la cuál debe ir del siguiente modo:
CÓDIGO:
#Hotstrings EndChars {

"#Hotstrings EndChars {" significa que las palabras claves que vamos a usar para los macros, después de ser escrita, debe ser tecleado un "EndChar" (caracter final) el cuál confirmará que queremos que se envíe el macro. Como ven, en la función dice "EndChars {". Pues el "{" viene siendo la tecla que se presiona para que salga el macro (pueden cambiar el EndChar por lo que quieran, pueden poner -,.}{)( lo que quieran, si quieren un guión pues usen "EndChars -" o si quieren un punto pues "EndChars ."), pero, ¿cómo se crea un hotstring?

Si para hacer un macro con una tecla usamos por ejemplo "NumPad1::" o "a::", para los hotstrings se hace parecido pero de éste modo:

Ejemplo con rol de arma:

CÓDIGO:
::arma::
{
SendInput t/me descuegla su arma de la espalda y la carga{enter}
}
return

Los hotstrings o "palabras claves" deben ser encerrados entre un par de "::" y se debe usar un EndChar. En el ejemplo de "Arma" pues se teclea lo que está en medio de los "::" y luego el EndChar, así que vendría siendo "arma{"; y sí, también se pueden usar Sleeps, alternaciones y demás, lo único que cambia entre el macro con hotstrings y hotkeys (los de presionar una tecla) es que se agregan "::" al principio y en lugar de una tecla se usa la palabra, de resto pueden usar el mismo tipo de script para el macro.

Por ejemplo, aquí hay un par de hotstrings que tengo para AK y M4, los cuales usan alternaciones y sleeps, y se activan al teclear "m4{" y "ak{"

CÓDIGO:
::m4::
M4 := (! M4)
{
If ( M4 )
{
SendInput t/me descuelga la M4 de su espalda, le quita el seguro y la carga{enter}
Sleep, 1500
SendInput t/do *CLICK-CLACK* Arma lista para disparar{enter}
Sleep, 500
}
Else
{
SendInput t/me le pone el seguro a su M4 y se la cuelga en la espalda{enter}
Sleep, 500
}
}
return

CÓDIGO:
::ak::
AK := (! AK)
{
If ( AK )
{
SendInput t/me descuelga la AK-47 de su espalda, le quita el seguro y la carga{enter}
Sleep, 1500
SendInput t/do *CLICK-CLACK* Arma lista para disparar{enter}
}
Else
SendInput t/me le pone el seguro a su AK-47 y se la cuelga en la espalda{enter}
}
return

3.3.5 Hotstrings con EndChar diferente o sin EndChar.

Pues sí, si quieren usar otro EndChar que no sea el que se estableció en "#Hotstrings EndChars" pues simplemente hacen ésto.

Por ejemplo, el hotstring de la tecla del macro de la M4 es "::m4::", y si en lugar del "{" que usamos como EndChar quieren usar un guión o cualquier otro EndChar solo para ése macro, pues ponen un * entre el primer par de "::" (con ésto anulan el #Hotstrings EndChar) y luego ponemos el caracter que quieran como EndChar después de la palabra clave, Así que vendría saliendo así: ":*:m4-::". Entonces el script completo del macro quedaría así:

CÓDIGO:
:*:m4-::
M4 := (! M4)
{
If ( M4 )
{
SendInput t/me descuelga la M4 de su espalda, le quita el seguro y la carga{enter}
Sleep, 1500
SendInput t/do *CLICK-CLACK* Arma lista para disparar{enter}
Sleep, 500
}
Else
{
SendInput t/me le pone el seguro a su M4 y se la cuelga en la espalda{enter}
Sleep, 500
}
}
return

4. Variables.

Las variables son campos de "memoria" que crea el AHK para en ellos poder guardar cierta información la cual podremos modificar en cualquier momento a través de otro script, comando o usando una "InputBox", y luego podremos usar las variables en macros como al secuestrar a alguien o al momento de un hitman hacer una muerte con cuchillo o sniper. En fin, puede resultar muy útil ahorrándonos tiempo a la hora de rolear.

Así que para empezar, vamos a crear las variables, para éso vamos a agregar al principio de nuestro script, debajo del "GroupAdd", las siguientes instrucciones, que indicarán que quiero crear memorias variables:

CÓDIGO:
;Variables
MyVar1 = %Victima%

Como saben, lo que está marcado con un ";" es simplemente un comentario, el cuál nos ayudará a separar el script y que quede un poco más organizado, para que a la hora de editarlo encontremos lo que buscamos de forma más fácil.

Las memoria que creamos es "MyVar1", la cual es una memoria que voy a usar en el siguiente rol, y como ven, luego de las memorias hay un "=" y un texto entre un par de "%". Ése texto va a ser el contenido de la memoria, y los "%" es para indicar que es un texto variable que vamos a editar y leer en cualquier momento. Pueden agregar cualquier cantidad de memorias variables que necesiten (MyVar1, MyVar2, MyVar3, etc...).

Pues bueno, el principio de nuestro script debería quedar más o menos así:

CÓDIGO:
Process, Priority,, High
;Procesos
GroupAdd, GTA, GTA:SA:MP
GroupAdd, GTA, Sin título: Bloc de notas
;Variables
MyVar1 = %Victima%
F12:: reload
#IfWinActive ahk_group GTA
SetKeyDelay -1

Ahora pasemos a usar dichas variables.

4.1 Variables, editar variables con InputBox y macros que usan variables.

Primero vamos a empezar por editar las variables, para ello lo voy a hacer con un hotstring para el rol de cuchillo de sicario, el cual va a tener un par de funciones, las cuáles serán: Minimizar el juego, luego mostrar un cuadro en el cual introduciremos el nombre de nuestra vícitima, y una vez introducido el nombre, nos mostrará un cuadro indicando el nombre de la víctima que hemos asignado y volverá automáticamente al juego. En caso de que no pongamos nada en el cuadro o lo cerremos, se borrará cualquier otro nombre que hayamos introducido anteriormente y volveremos al juego automáticamente.

El comando viene siendo más o menos así:

CÓDIGO:
::ncuc::
{
WinMinimize, GTA:SA:MP
Sleep, 1000
InputBox, Victima, Objetivo cuchillo., , , 200, 100,
If MyVar1 = %Victima%
{
WinRestore, GTA:SA:MP
Sleep, 500
return
}
Else
{
MsgBox, Se ha asignado a %Victima% como objetivo a cuchillo.
WinRestore, GTA:SA:MP
Sleep, 500
}
}
return

Algo complicado, ¿eh?.

La instrucción "WinMinimize" es la que minimizará el juego.
La instrucción "InputBox" es la que crea el cuadro en el que introduciremos el nombre de la vícitma, como ven, tiene varias comas y textos (InputBox, Victima, Objetivo cuchillo., , , 200, 100,) las cuales vendrían siendo: Donde dice "Víctima" es la parte de la memoria donde la "InputBox" va a escribir, así que "InputBox" editará la variable que contenga "%Victima%". "Objetivo cuchillo." es el nombre que va a tener la ventana. La siguiente coma es para poner lo que quiero que diga en la ventana, pero como es una ventana muy pequeña, apenas para introducir el texto, no lo vamos a usar. Después hay otra coma que también está vacía, y pues ésta es para la fuente que queremos que tenga el texto en la ventana, pero eso aún no ha sido implementado en el AHK y tampoco lo vamos a usar. "200," es el tamaño en píxeles en dirección horizontal, y "100," es el tamaño en píxeles vertical.
La instrucción "If MyVar1 = %Victima%" lo que va a hacer es verificar si metimos algún nombre en la InputBox, en caso de que no lo hayamos hecho, simplemente restaurará el juego y en caso de que sí hayamos metido un texto en la InputBox, mostrará qué objetivo asignamos y tras eso nos enviará al juego.
El "WinRestore" pues es lo que restaurará la ventana del GTA, enviándonos de vuelta al juego (sería lo opuesto a "WinMinimize".
La instrucción "MsgBox" es la que se encargará de mostrar el nombre de la víctima que hemos asignado para matarlo con cuchillo, y mostrará en el díalogo "Se ha asignado a %Victima% como objetivo a cuchillo."

Y pues, a la hora de usar el rol de hitman sería algo más o menos así.

*Hitman mete su mano derecha en su chaleco y saca rápidamente un cuchillo, sujetándolo firmemente.*
*Hitman levanta su brazo derecho e intenta clavarle el cuchillo en el cuello a Víctima*
(Aquí el script sólo continúa al volver a presionar la tecla)
*Acierta con el cuchillo, Víctima está desangrándose (( Hitman ))*

Pues como ven, en el rol dice "Víctima", que viene siendo la variable que va a cambiar automáticamente por el nombre que le hayamos asignado con el macro anterior. Aquí lo que sería el script para el macro (que se usa con el slash del teclado numérico, o mejor dicho: la tecla de divisón) y el rol se confirma también con la tecla de división. El macro incluye If, variables, alternaciones y sleeps.

CÓDIGO:
numpaddiv::
If MyVar1 = %Victima%
return
Else
Cuchillo := (! Cuchillo)
{
If ( Cuchillo )
{
SendInput t/me mete su mano derecha en su chaleco y saca rápidamente un cuchillo, sujetándolo firmemente{enter}
Sleep, 1000
SendInput t/me levanta su brazo derecho e intenta clavarle el cuchillo en el cuello a %Victima%{enter}
}
Else
SendInput t/do Acierta con el cuchillo. %Victima% está desangrándose{enter}
}
return

Como ven, en la parte de "SendInput", la cuál contiene lo que se envía en el macro, dice %Victima%, lo cual le indica que el programa donde dice %Victima% debe ir ésa variable (el objetivo que haya sido asignado con el macro anterior). Aparte de éso, el primer "If" del script verifica que se haya escrito algo en la variable, y en caso de que la variable esté vacía, no funcionará el macro.

5. Script base (Agregado script de variable de cuchillo).

Aquí pongo un script con un par de macros de hotkeys y hotrstrings, el cuál viene configurado para que solo sirva en un documento en blanco de bloc de notas (Sin título) o en el GTA. Incluye el rol para varias armas con el uso de hotstrings.

CÓDIGO:
Process, Priority,, High
;Procesos
GroupAdd, GTA, GTA:SA:MP
GroupAdd, GTA, Sin título: Bloc de notas
F12:: reload
#IfWinActive ahk_group GTA
SetKeyDelay -1
::ncuc::
{
WinMinimize, GTA:SA:MP
Sleep, 1000
InputBox, Victima, Objetivo cuchillo., , , 200, 100,
If MyVar1 = %Victima%
{
WinRestore, GTA:SA:MP
Sleep, 500
return
}
Else
{
MsgBox, Se ha asignado a %Victima% como objetivo a cuchillo.
WinRestore, GTA:SA:MP
Sleep, 500
}
}
return
numpaddiv::
If MyVar1 = %Victima%
return
Else
Cuchillo := (! Cuchillo)
{
If ( Cuchillo )
{
SendInput t/me mete su mano derecha en su chaleco y saca rápidamente un cuchillo, sujetándolo firmemente{enter}
Sleep, 1000
SendInput t/me levanta su brazo derecho e intenta clavarle el cuchillo en el cuello a %Victima%{enter}
}
Else
SendInput t/do Acierta con el cuchillo. %Victima% está desangrándose{enter}
}
return
numpad1:: SendInput t/g {¡}Gritando{!}{enter}
numpad4::
Luces := (! Luces)
{
If ( Luces )
SendInput t/me enciende las luces de su vehículo{enter}t/v luces{enter}
Else
SendInput t/me apaga las luces de su vehículo{enter}t/v luces{enter}
}
return
numpad5::
Abierto := (! Abierto)
{
If ( Abierto )
SendInput t/v capo{enter}t/me abre el capó de su automóvil{enter}
Else
SendInput t/v capo{enter}t/me cierra el capó de su vehículo{enter}
}
return
numpad7::
Maletero := (! Maletero)
{
If ( Maletero )
SendInput t/v maletero{enter}t/me abre el maletero de su automóvil{enter}
Else
SendInput t/v maletero{enter}t/me cierra el maletero de su automóvil{enter}
}
return
numpad0:: SendInput t/v motor{enter}
insert:: SendInput t/cinturon{enter}
;========================ARMAS========================
#IfWinActive ahk_group GTA
#Hotstring EndChars {
::m4::
M4 := (! M4)
{
If ( M4 )
{
SendInput t/me descuelga la M4 de su espalda, le quita el seguro y la carga{enter}
Sleep, 1500
SendInput t/do *CLICK-CLACK* Arma lista para disparar{enter}
Sleep, 500
}
Else
{
SendInput t/me le pone el seguro a su M4 y se la cuelga en la espalda{enter}
Sleep, 500
}
}
return
::ak::
AK := (! AK)
{
If ( AK )
{
SendInput t/me descuelga la AK-47 de su espalda, le quita el seguro y la carga{enter}
Sleep, 1500
SendInput t/do *CLICK-CLACK* Arma lista para disparar{enter}
}
Else
SendInput t/me le pone el seguro a su AK-47 y se la cuelga en la espalda{enter}
}
return
::sn::
Sniper := (! Sniper)
{
If ( Sniper )
{
SendInput t/me abre la puerta de pasajero de su helicóptero{enter}
Sleep, 2500
SendInput t/do Se puede ver un rifle francotirador detrás del asiento del copiloto{enter}
Sleep, 1500
SendInput t/me se inclina sobre el asiento de pasajero y coge firmemente el rifle{enter}
Sleep, 2000
SendInput t/me le quita el seguro al rifle, le quita el protector a la mira y carga un cartucho{enter}
Sleep, 2500
SendInput t/do *CLICK-CLACK* Arma cargada{enter}
}
Else
{
SendInput t/me rápidamente le pone el seguro al rifle y le cubre la mira{enter}
Sleep, 1500
SendInput t/me se inclina sobre el asiento de pasajero, pone el rifle detrás del asiento del copiloto y cierra la puerta{enter}
}
}
return
::fo::
SendInput t/me fija a como su objetivo{left 17}
return
::de::
DEagle := (! DEagle)
{
If ( DEagle )
{
SendInput t/me acerca la mano a su cadera, desenfunda su Desert Eagle, le quita el seguro y la carga{enter}
Sleep, 1500
SendInput t/do *CLICK-CLACK* Arma lista para disparar{enter}
}
Else
SendInput t/me le pone el seguro a su Desert Eagle y la guarda en la funda junto a su cinturón{enter}
}
return
::mp5::
MP5 := (! MP5)
{
If ( MP5 )
{
SendInput t/me descuelga su MP5 de su hombro, le quita el seguro y la carga{enter}
Sleep, 1500
SendInput t/do *CLICK-CLACK* Arma lista para disparar{enter}
}
Else
SendInput t/me le pone el seguro a su MP5 y se la cuelga en el hombro{enter}
}
return
::sg::
Shotgun := (! Shotgun)
{
If ( Shotgun )
{
SendInput t/me descuelga la escopeta de su espalda, le quita el seguro y la carga{enter}
Sleep, 1500
SendInput t/do *CLICK-CLACK* Arma lista para disparar{enter}
}
Else
SendInput t/me le pone el seguro a su escopeta y se la cuelga en la espalda{enter}
}
return


Última edición por Juan Quevedo el Dom Mar 03, 2013 7:34 am, editado 10 veces

Juan Quevedo
Líder de Facción y Administrador.
Líder de Facción y Administrador.

Mensajes : 14
Puntos : 26
Reputación : 0
Fecha de inscripción : 01/03/2013
Edad : 21

Volver arriba Ir abajo
Re: [Guía]Macros con AutoHotkey (AHK) - Instalación y uso.
Mensaje por Michael Leon el Sáb Mar 02, 2013 10:50 am

Muy bueno, el tutorial amigo..
Espero qué otras personas, que no entiendan se puedan ayudar de acá.

Michael Leon
Administrador Dueño/a
Administrador Dueño/a

Mensajes : 21
Puntos : 65
Reputación : 0
Fecha de inscripción : 28/02/2013

Volver arriba Ir abajo
Re: [Guía]Macros con AutoHotkey (AHK) - Instalación y uso.
Mensaje por Ivanova Anton el Dom Mar 03, 2013 2:42 am

Excelente tutorial!!!

Gracias por el aporte (Y)

_________________
Puedes vivir 5 años sin creer en ningun dios y sin leer la biblia.

Intenta vivir 1 año sin sol...




La Vida es musica. La musica es Vida.

Rock & Roll


Invitado Bienvenido a CiudadaMania RolePlay

¿Quieres pertenecer a SAMD? ¡Postulate aqui!

Ivanova Anton
Administrador Dueño/a
Administrador Dueño/a

Mensajes : 13
Puntos : 44
Reputación : 0
Fecha de inscripción : 28/02/2013
Localización : La Tierra

http://ciudadmaniarp.forosactivos.net
Volver arriba Ir abajo
Re: [Guía]Macros con AutoHotkey (AHK) - Instalación y uso.
Mensaje por Diego Nule el Lun Mar 04, 2013 1:22 pm

Quisiera compartir con ustedes el siguiente Macro, para el trabajo de camionero... la Acción es Carga de camión... Se presiona el botón y esperan a que cargue el camión; es macro bastante sencillo, apenas uso el SLEEP.

(El Numpadadd es el signo más del teclado numérico, pero ustedes lo pueden cambiar por el que quieran)

CÓDIGO:
Numpadadd::
{
SendInput t/do El empleado hace la solicitud de carga de mercancía al camión{enter}
Sleep, 2000
SendInput t/do Solicitud aprobada{enter}t/cargarcamion{enter}
Sleep, 1000
SendInput {enter}
Sleep, 1000
SendInput {enter}
Sleep, 3000
SendInput t/do Cargando camión [1/3]{enter}
Sleep, 3000
SendInput t/do Cargando camión [2/3]{enter}
Sleep, 3200
SendInput t/do Cargando camión [3/3]{enter}
Sleep, 2000
SendInput t/do El empleado emprende la ruta hacia la entrega de mercancía{enter}
}
return

PD: Tienen que estar justo en el punto de checkpoint exacto donde se carga el camión... sino, sería un fail xD.



Última edición por Diego Nule el Mar Mar 05, 2013 7:56 am, editado 1 vez

Diego Nule
Administrador/a
Administrador/a

Mensajes : 4
Puntos : 4
Reputación : 0
Fecha de inscripción : 03/03/2013
Edad : 24
Localización : Colombia

Volver arriba Ir abajo
Re: [Guía]Macros con AutoHotkey (AHK) - Instalación y uso.
Mensaje por Juan Quevedo el Lun Mar 04, 2013 2:41 pm

lol, yo también tengo uno para camion pero con toggle y activación con "cca{" y see, también toca estar en la zona de carga para usarlo.

CÓDIGO:
::cca::
Camion := (! Camion)
If ( Camion )
{
SendInput t/me pone su camión en la zona de carga y entrega la solicitud de un cargamento a un empleado{enter}
SendInput t/cargarcamion{enter}
}
Else
{
SendInput t/do El empleado verifica la solicitud y la aprueba - empiezan a llenar el camión con varias cajas{enter}
Sleep, 1950
SendInput t/do *Cargando camión [1/4]*{enter}
Sleep, 1950
SendInput t/do *Cargando camión [2/4]*{enter}
Sleep, 1950
SendInput t/do *Cargando camión [3/4]*{enter}
Sleep, 1950
SendInput t/do *El camión fue cargado [4/4] y está listo para llevar la mercancía*{enter}
}
return

Y aquí pongo un par de scripts de ejemplo para encender un auto, y está para que muestre el nombre del vehículo (Sultan):

Encender:
CÓDIGO:
::esu::
{
SendInput t/me saca una llave de su bolsillo y la introduce en el contacto de su Sultan{enter}
Sleep, 1000
SendInput t/v motor{enter}
Sleep, 1200
SendInput t/me gira la llave y enciende el auto{enter}
}
return

Apagar:
CÓDIGO:
::asu::
{
SendInput t/v motor{enter}
SendInput t/me gira la llave y apaga su Sultan{enter}
Sleep, 1300
SendInput t/me saca la llave del contacto y la guarda en su bolsillo{enter}
}
return

Cualquier duda o si necesitan algún macro pregunten en éste post.

Juan Quevedo
Líder de Facción y Administrador.
Líder de Facción y Administrador.

Mensajes : 14
Puntos : 26
Reputación : 0
Fecha de inscripción : 01/03/2013
Edad : 21

Volver arriba Ir abajo
Re: [Guía]Macros con AutoHotkey (AHK) - Instalación y uso.
Mensaje por Diego Nule el Mar Mar 05, 2013 7:39 am

Neh Juan baby, yo tengo un macro de encender y apagar el vehículo, mucho muy funcional... es decir, mejor que el suyo y lo mejor, está en un sólo macro, Se obtiene en este Macro que voy a poner: Encender, prender luces, abrocharse el cinturon... y Apagar. apagar las luces y por supuesto al salirse del auto se desabrocha el cinturón, además le puse un macro de Rol... activando la alarma:

Aquí va Wink

CÓDIGO:
numpad0::
Motor := (! Motor)
If ( Motor )
{
SendInput t/v motor{enter}t/me gira la llave 90 grados hacia la derecha y enciende el vehículo{enter}t/me enciende las luces del vehículo{enter}t/v luces{enter}
Sleep, 2500
SendInput t/cinturon{enter}t/do Vehículo Encendido{enter}t/do Mete el primer cambio y arranca el vehículo{enter}
}
Else
{
SendInput t/v motor{enter}t/me gira la llave 90 grados hacia la izquierda y apaga el vehículo{enter}t/me apaga las luces del vehículo{enter}t/v luces{enter}
Sleep, 4000
SendInput t/me Activa la alarma del vehículo{enter}t/do [BIP-BIP] / Alarma activada{enter}
}
return

el Numpad0, por supuesto es el 0 del teclado numérico.

Sin embargo, les explicaré la falencia de este Macro, que una vez ustedes hacen el encendido, van a tener que rolear la apagada... a menos que pongan el siguiente mini-macro, el cual lo que hará será recargar el AutoHotkey y con sigo reiniciar los macros... es decir... Si yo ejecuto el Encender vehículo que está dentro del IF y luego recargo el autohotkey a la próxima que ejecute el macro de encender y apagar, se va a ejecutar de nuevo el IF de encender vehículo.

CÓDIGO:
F5:: reload

Sugiero agregar este "mini-macro" de recargar de AutoHotkey Smile para dar una mejor utilización de cualquier macro.

Diego Nule
Administrador/a
Administrador/a

Mensajes : 4
Puntos : 4
Reputación : 0
Fecha de inscripción : 03/03/2013
Edad : 24
Localización : Colombia

Volver arriba Ir abajo
Re: [Guía]Macros con AutoHotkey (AHK) - Instalación y uso.
Mensaje por Juan Quevedo el Mar Mar 05, 2013 9:20 am

Diego, por eso es que yo dejo el encendido y apagado en diferentes macros, para evitar la recarga porque eso puede desincronizar otros macros. ¿Que tal por recargar el macro del carro termine cagando un rol? Como sacar un arma 2 veces, o encender las luces del auto 2 veces, etc... Igual usted puede hacer un macro para recargar ciertos macros, se usa la instrucción return. Si algo en estos días pongo un tutorial para éso.

Juan Quevedo
Líder de Facción y Administrador.
Líder de Facción y Administrador.

Mensajes : 14
Puntos : 26
Reputación : 0
Fecha de inscripción : 01/03/2013
Edad : 21

Volver arriba Ir abajo
Re: [Guía]Macros con AutoHotkey (AHK) - Instalación y uso.
Mensaje por Diego Nule el Mar Mar 05, 2013 9:30 am

Tiene razón en ese sentido... el caso es que mi macro lo que tiene adicional al suyo, es el cinturón y las luces... :3

Pues tal y como lo tengo yo... me ha servido... pues porque muchas veces soy muy cuidadoso al ejecutar los macros.

Diego Nule
Administrador/a
Administrador/a

Mensajes : 4
Puntos : 4
Reputación : 0
Fecha de inscripción : 03/03/2013
Edad : 24
Localización : Colombia

Volver arriba Ir abajo
Re: [Guía]Macros con AutoHotkey (AHK) - Instalación y uso.
Mensaje por Diego Nule el Mar Mar 05, 2013 10:31 am

Bueno utilizando el método de Juan y mezclándolo con el mio...

El resultado es el siguiente:

Para encender el vehículo:

CÓDIGO:
::pmo::
{
SendInput t/v motor{enter}t/me gira la llave 90 grados hacia la derecha y enciende el vehículo{enter}t/me enciende las luces del vehículo{enter}t/v luces{enter}
Sleep, 2500
SendInput t/cinturon{enter}t/do Vehículo Encendido{enter}t/do Mete el primer cambio y arranca el vehículo{enter}
}
return

Para apagar el vehículo:

CÓDIGO:
::amo::
{
SendInput t/v motor{enter}t/me gira la llave 90 grados hacia la izquierda y apaga el vehículo{enter}t/me apaga las luces del vehículo{enter}t/v luces{enter}
Sleep, 4000
SendInput t/me Activa la alarma del vehículo{enter}t/do [BIP-BIP] / Alarma activada{enter}
}
return

Y al final del documento ponen lo siguiente:

CÓDIGO:
#Hotstring EndChars -

PD: Para activar estos macros se debe escribir lo siguiente: pmo seguido de un guión, el guión ejecuta el macro entonces sería así: pmo-

Inténtenlo, es bastante útil... Estos Hotstrings sirven en la cuestión de que se pueden hacer muchísimos macros, y se ahorra muchos botones, y para que hayan tantos fails por macros lanzados sin querer.

Diego Nule
Administrador/a
Administrador/a

Mensajes : 4
Puntos : 4
Reputación : 0
Fecha de inscripción : 03/03/2013
Edad : 24
Localización : Colombia

Volver arriba Ir abajo
Ayuda
Mensaje por gallo1979 el Dom Nov 23, 2014 5:47 am

Juan Quevedo escribió:
*NOTA: Para poder publicar links externos el foro requiere que todo usuario tenga más de 7 días de antigüedad, así que pondré instrucciones de como encontrar el programa en Google.
______________________________________________________________________________________________________

Pues he decidido hacer éste tutorial básico e intermedio pero MUY completo (me tomó casi 4 horas hacerlo) acerca del AutoHotkey, un programa diseñado para asignar macros a teclas o palabras clave. Hay varios programas que también hacen ésto como el HKB y el AKB pero en mi opinión el AHK, aunque pueda resultar un poco más complicado, es superior a dichos programas, pero bueno: que cada quién use el de su preferencia.

Éste tutorial va dirigido tanto para los que son nuevos en el mundo del roleplay y/o no saben acerca de los macros, o inclusive para los que usan otro programa de macros, ya que AHK ofrece una gran cantidad de opciones para su configuración.

En este tutorial mostraré la instalación, creación y uso de macros con AutoHotkey, y daré un script base con varios tipos de macros para que se vayan ubicando en el tema de la creación de scripts de AutoHotkey.

Voy a dividir el tutorial en 4 partes.

1. Definición de macro.

2. Descarga e instalación del programa.
____2.1 Descarga.
____2.2 Instalación.

3. Uso del programa y creación de scripts.
____3.1 Abriendo el programa.
____3.2 Preparando nuestro script.
____3.3 Configurando los macros.
________3.3.1 Macros con una tecla (hotkey).
________3.3.2 Macros y temporizadores.
________3.3.3 Macros y alternaciones.
________3.3.4 Macros con cadenas de texto (Hotstrings).

4. Variables y macros que usan variables.
____4.1 Variables, editar variables con InputBox y macros que usan variables.

5. Script base.
______________________________________________________________________________________________________

1. ¿Qué es un macro?

Un macro es una cadena de texto o palabra definida por el usuario la cuál se envía al presionar una tecla, botón o teclear una cadena de texto.

Ejemplo: Al presionar la tecla "1" del teclado numérico, el programa mandará un /ad (anuncio publicitario) vendiendo un Sultan, el cuál sería "/ad Vendo Sultan tuneado o lo cambio por otro coche."

2. Descarga e instalación de AutoHotkey

2.1 Descarga: Primero, descargamos el programa de la página oficial: (Busquen en Google "AutoHotkey" y entran a la primer página, y arriba aparece un cuadro naranja que dice "Download", de ahí lo bajan).

2.2 Instalación: Una vez descargado el instalador, lo abrimos y nos mostrará 2 opciones: "Express Installation" y "Custom Installation". Dan click en "Express Installation" y el programa se instalará automáticamente en "C:\Archivos de programa\AutoHotkey". Ya con ésto queda el programa instalado.

3. Uso del programa y creación de scripts.

3.1 Abriendo el programa.

Primero abrimos el programa, el cuál lo podemos encontrar en "Inicio>Todos los programas>AutoHotkey". Una vez lo abramos, aparecerá el icono de una "H" en el área de notificaciones de la barra de tareas (esquina de abajo a la derecha), le damos click derecho al ícono>Edit This Script y se abrirá un archivo de bloc de notas, borramos todo lo que haya escrito allí.

Ahora escribiremos allí nuestro script.

3.2 Preparando nuestro script

Primero, es recomendable agregar unas instrucciones al script, así que podemos empezar por agregar ésto al archivo de bloc de notas, entonces pondremos allí:


CÓDIGO:
Process, Priority,, High
F12:: reload
;Procesos
GroupAdd, GTA, GTA:SA:MP
GroupAdd, GTA, Sin título: Bloc de notas
#IfWinActive ahk_group GTA
SetKeyDelay -1


Quizás no entiendan de que va el código, pero pues haré una pequeña explicación (si quieren se la pueden saltar, no la lean):
La primera línea dice "Process, Priority,, High"

La instrucción "Process" lo usamos cuando queremos que AHK altere o haga algo con un proceso que se esté ejecutando, "Priority" significa que queremos cambiar la prirodidad del proceso, ",," es el proceso al que le queremos cambiar la prioridad, y ya que son 2 comas seguidas, el programa entiende que al proceso al que le queremos cambiar la prioridad es al propio script que se está ejecutando, "High" es la prioridad que le queremos poner, en éste caso, Alta.

Lo de "F12:: reload" lo pueden agregar opcional. Es que a medida que vayan agregando macros al script, hay que "recargarlo" o actualizarlo, para que los nuevos macros sirvan, así que con ésto harán que la tecla F12 puedan recargar el script sin tener que ir a la barra, buscar el icono>click derecho>Reload This Script.

Como pueden ver, también hay algo llamado ";Procesos", el ";" indica que es un comentario, algo que el programa no debe leer como script, simplemente es algo que agregamos para guiarnos y saber qué contiene ésa parte del script, en éste caso, bajo ";Procesos" hay 2 instrucciones, las cuáles son "GroupAdd", las cuáles indican que quiero que el programa asigne ciertos procesos a un grupo, con los cuáles interactuar, en éste caso el GTA y un Bloc de notas vacío.

Explicación de GroupAdd: "GroupAdd" se usa para agregar un proceso o ventana a un grupo, "GTA" es el nombre que le voy a poner al grupo, y "GTA:SA:MP" es el nombre de la ventana que quiero agregar al grupo. Así que sería:


CÓDIGO:
GroupAdd, "Nombre del grupo", "Nombre de la ventana para asignar al grupo"


Luego está la instrucción "#IfWinActive" (si la ventana está activa), la cuál la usaremos para que nuestros macros no funcionen a menos que no estemos en la ventana que le indiquemos.

Entonces "#IfWinActive ahk_group GTA" indica que los macros solo funcionará en las ventanas que agregamos al grupo "GTA", así que para probar los macros pueden usar una ventana sin título del bloc de notas o bien, el mismo GTA.

Luego está "SetKeyDelay -1" el cuál simplemente le indica al programa el retraso con el que debe enviar cada macro, y ya que es "-1", lo hará inmediatamente (sin retraso).

Cada vez que vayamos agregando macros recuerden que toca guardar el archivo (Ctrl+G) y usar la tecla F12 para recargar el script, así se ahorran tiempo y el programa les notifica instantáneamente si algún macro no sirve.

Ahora sí podemos empezar a agregar nuestros macros.

3.3 Configurando los macros:

Para asignar el macro a una tecla, primero ponemos la tecla que vamos a usar, así que para ello indicamos la tecla que vamos a usar.

Hay caracteres o teclas especiales como Ctrl, Shift, Enter, !, Inicio, Fin, etc... las cuáles no va a leer el AutoHotkey a menos que las pongamos en medio de un par de {}
Por ejemplo, para que presione la tecla Enter sería {enter}.
! = {!}
Fin/End = {End}
Inicio/Home = {Home)
Shift derecha/izquierda = {RShift} {LShift}

*NOTA: La lista con todas las teclas la pueden encontrar aquí: (Buscan en Google: "AutoHotkey Key List", y entran en la primer página).

La instrucción "SendInput" significa que queremos que el programa mande el macro y que nuestro computador lo detecte como si hubiera sido tecleado directamente, también está "Send" que es para que envíe texto y ya, pero éso no lo vamos a usar.

3.3.1 Macros con una tecla (hotkey).

Ejemplo para enviar el rol de un arma al presionar la tecla "1" del teclado numérido.


CÓDIGO:
NumPad1:: SendInput t/me descuelga su arma de la espalda rápidamente y la carga{enter}


Rol de un robo con la tecla "2" del teclado numérico:

CÓDIGO:
NumPad2:: SendInput t/g {¡}Las manos arriba hijo de puta ((/rendirse)) o le lleno el culo de plomo{!}


O pueden hacer que una sola tecla mande 2 acciones a la vez:


CÓDIGO:
NumPad1:: SendInput t/me descuelga su arma de la espalda, le quita el seguro y la carga{enter}t/do *CLICK-CLACK* Arma cargada{enter}


3.3.2 Macros y temporizadores:

Como ven en el ejemplo de arriba, con la tecla 1 del teclado numérico se mandan 2 cadenas de texto en una sola tecla, aunque podemos agregar un "temporizador" entre cada cadena de texto, para éso vamos a usar la función "Sleep", aunque el script se cambiará un poco.


CÓDIGO:
NumPad1::
{
SendInput t/me descuelga su arma de la espalda, le quita el seguro y la carga{enter}
Sleep, 1500
SendInput t/do *CLICK-CLACK* Arma cargada{enter}
}
return


El "1500" después del "Sleep" significa que queremos que el macro se pause durante 1500 milisegundos (segundo y medio) y que luego envíe el resto del macro, "return" indica que ahí termina el script del macro, y que no quiero que quizás por error, envíe algo de otro macro.

3.3.3 Macros y alternaciones

Ahora pasaremos a algo aún más complicado, los scripts de alternación.

Por ejemplo, queremos que al presionar la tecla 4 del teclado numérico el programa envíe 2 cosas diferentes, que cuando se presione la tecla por primera vez envíe cierto macro y a la segunda vez que se presione la tecla envíe otro macro, por ejemplo, abrir y cerrar el maletero del auto.


CÓDIGO:
numpad7::
Maletero := (! Maletero)
{
If ( Maletero )
SendInput t/v maletero{enter}t/me abre el maletero de su automóvil{enter}
Else
SendInput t/v maletero{enter}t/me cierra el maletero de su automóvil{enter}
}
return


Ahora, explico:

"Maletero := (! Maletero)" significa que quiero que el programa cree una variable que cambia cada vez que se use, en éste caso quiero que la variable sea "Maletero".
"If" significa "en caso de" y "( Maletero )" es la variable que va a buscar, así que sería: "En caso de que la variable sea ( Maletero ), enviar el macro para abrir el maletero".
"Else" significa "en caso contrario", así que "en caso de que la variable no sea "Maletero"" envíe el macro para cerrar el maletero.

Si por ejemplo usamos ésto con un arma para que con una sola tecla saque y guarde el arma sería:


CÓDIGO:
NumPad1::
Arma := (! Arma)
{
If ( Arma )
{
SendInput t/me descuelga su arma de la espalda, le quita el seguro y la carga{enter}
Sleep, 1500
SendInput t/do *CLICK-CLACK* Arma cargada{enter}
Sleep, 500
}
Else
{
SendInput t/me le pone el seguro a su arma y se la cuelga en la espalda{enter}
Sleep, 500
}
}
return


Incluso agregué un par de pausas (Sleep) al final de cada macro para que si por error presiono la tecla 2 veces, no salgan ambos macros.

Intenten modificar lo que vean que entienden del macro, agregar más línea de rol por una sola tecla, cambiar el tiempo del Sleep, que ensayando es que se aprende.

3.3.4 Macros con cadenas de texto (Hotstrings).

Ahora, aparte de usar teclas para macros podemos usar texto para macros, lo cuál es muy útil más que todo para los que usan equipos portátiles y les faltan teclas. Un ejemplo de Hotstring: si quiero hacer el rol del maletero del vehículo, en lugar de presionar la tecla 4 del teclado numérico, puedo dejarlo para que salga al teclear "male{", o para el arma puedo usar "arma{" e incluso, puedo crear un macro aparte para cada arma, por ejemplo, para sacar la M4 que sea al teclear "m4{", La AK-47 al teclear "ak{", la Desert Eagle al teclear "de{".

Para éso, agregamos preferiblemente al final de nuestro script la función "#Hotstrings", la cuál debe ir del siguiente modo:

CÓDIGO:
#Hotstrings EndChars {


"#Hotstrings EndChars {" significa que las palabras claves que vamos a usar para los macros, después de ser escrita, debe ser tecleado un "EndChar" (caracter final) el cuál confirmará que queremos que se envíe el macro. Como ven, en la función dice "EndChars {". Pues el "{" viene siendo la tecla que se presiona para que salga el macro (pueden cambiar el EndChar por lo que quieran, pueden poner -,.}{)( lo que quieran, si quieren un guión pues usen "EndChars -" o si quieren un punto pues "EndChars ."), pero, ¿cómo se crea un hotstring?

Si para hacer un macro con una tecla usamos por ejemplo "NumPad1::" o "a::", para los hotstrings se hace parecido pero de éste modo:

Ejemplo con rol de arma:


CÓDIGO:
::arma::
{
SendInput t/me descuegla su arma de la espalda y la carga{enter}
}
return


Los hotstrings o "palabras claves" deben ser encerrados entre un par de "::" y se debe usar un EndChar. En el ejemplo de "Arma" pues se teclea lo que está en medio de los "::" y luego el EndChar, así que vendría siendo "arma{"; y sí, también se pueden usar Sleeps, alternaciones y demás, lo único que cambia entre el macro con hotstrings y hotkeys (los de presionar una tecla) es que se agregan "::" al principio y en lugar de una tecla se usa la palabra, de resto pueden usar el mismo tipo de script para el macro.

Por ejemplo, aquí hay un par de hotstrings que tengo para AK y M4, los cuales usan alternaciones y sleeps, y se activan al teclear "m4{" y "ak{"


CÓDIGO:
::m4::
M4 := (! M4)
{
If ( M4 )
{
SendInput t/me descuelga la M4 de su espalda, le quita el seguro y la carga{enter}
Sleep, 1500
SendInput t/do *CLICK-CLACK* Arma lista para disparar{enter}
Sleep, 500
}
Else
{
SendInput t/me le pone el seguro a su M4 y se la cuelga en la espalda{enter}
Sleep, 500
}
}
return


CÓDIGO:
::ak::
AK := (! AK)
{
If ( AK )
{
SendInput t/me descuelga la AK-47 de su espalda, le quita el seguro y la carga{enter}
Sleep, 1500
SendInput t/do *CLICK-CLACK* Arma lista para disparar{enter}
}
Else
SendInput t/me le pone el seguro a su AK-47 y se la cuelga en la espalda{enter}
}
return


3.3.5 Hotstrings con EndChar diferente o sin EndChar.

Pues sí, si quieren usar otro EndChar que no sea el que se estableció en "#Hotstrings EndChars" pues simplemente hacen ésto.

Por ejemplo, el hotstring de la tecla del macro de la M4 es "::m4::", y si en lugar del "{" que usamos como EndChar quieren usar un guión o cualquier otro EndChar solo para ése macro, pues ponen un * entre el primer par de "::" (con ésto anulan el #Hotstrings EndChar) y luego ponemos el caracter que quieran como EndChar después de la palabra clave, Así que vendría saliendo así: ":*:m4-::". Entonces el script completo del macro quedaría así:


CÓDIGO:
:*:m4-::
M4 := (! M4)
{
If ( M4 )
{
SendInput t/me descuelga la M4 de su espalda, le quita el seguro y la carga{enter}
Sleep, 1500
SendInput t/do *CLICK-CLACK* Arma lista para disparar{enter}
Sleep, 500
}
Else
{
SendInput t/me le pone el seguro a su M4 y se la cuelga en la espalda{enter}
Sleep, 500
}
}
return


4. Variables.

Las variables son campos de "memoria" que crea el AHK para en ellos poder guardar cierta información la cual podremos modificar en cualquier momento a través de otro script, comando o usando una "InputBox", y luego podremos usar las variables en macros como al secuestrar a alguien o al momento de un hitman hacer una muerte con cuchillo o sniper. En fin, puede resultar muy útil ahorrándonos tiempo a la hora de rolear.

Así que para empezar, vamos a crear las variables, para éso vamos a agregar al principio de nuestro script, debajo del "GroupAdd", las siguientes instrucciones, que indicarán que quiero crear memorias variables:


CÓDIGO:
;Variables
MyVar1 = %Victima%


Como saben, lo que está marcado con un ";" es simplemente un comentario, el cuál nos ayudará a separar el script y que quede un poco más organizado, para que a la hora de editarlo encontremos lo que buscamos de forma más fácil.

Las memoria que creamos es "MyVar1", la cual es una memoria que voy a usar en el siguiente rol, y como ven, luego de las memorias hay un "=" y un texto entre un par de "%". Ése texto va a ser el contenido de la memoria, y los "%" es para indicar que es un texto variable que vamos a editar y leer en cualquier momento. Pueden agregar cualquier cantidad de memorias variables que necesiten (MyVar1, MyVar2, MyVar3, etc...).

Pues bueno, el principio de nuestro script debería quedar más o menos así:


CÓDIGO:
Process, Priority,, High
;Procesos
GroupAdd, GTA, GTA:SA:MP
GroupAdd, GTA, Sin título: Bloc de notas
;Variables
MyVar1 = %Victima%
F12:: reload
#IfWinActive ahk_group GTA
SetKeyDelay -1


Ahora pasemos a usar dichas variables.

4.1 Variables, editar variables con InputBox y macros que usan variables.

Primero vamos a empezar por editar las variables, para ello lo voy a hacer con un hotstring para el rol de cuchillo de sicario, el cual va a tener un par de funciones, las cuáles serán: Minimizar el juego, luego mostrar un cuadro en el cual introduciremos el nombre de nuestra vícitima, y una vez introducido el nombre, nos mostrará un cuadro indicando el nombre de la víctima que hemos asignado y volverá automáticamente al juego. En caso de que no pongamos nada en el cuadro o lo cerremos, se borrará cualquier otro nombre que hayamos introducido anteriormente y volveremos al juego automáticamente.

El comando viene siendo más o menos así:


CÓDIGO:
::ncuc::
{
WinMinimize, GTA:SA:MP
Sleep, 1000
InputBox, Victima, Objetivo cuchillo., , , 200, 100,
If MyVar1 = %Victima%
{
WinRestore, GTA:SA:MP
Sleep, 500
return
}
Else
{
MsgBox, Se ha asignado a %Victima% como objetivo a cuchillo.
WinRestore, GTA:SA:MP
Sleep, 500
}
}
return


Algo complicado, ¿eh?.

La instrucción "WinMinimize" es la que minimizará el juego.
La instrucción "InputBox" es la que crea el cuadro en el que introduciremos el nombre de la vícitma, como ven, tiene varias comas y textos (InputBox, Victima, Objetivo cuchillo., , , 200, 100,) las cuales vendrían siendo: Donde dice "Víctima" es la parte de la memoria donde la "InputBox" va a escribir, así que "InputBox" editará la variable que contenga "%Victima%". "Objetivo cuchillo." es el nombre que va a tener la ventana. La siguiente coma es para poner lo que quiero que diga en la ventana, pero como es una ventana muy pequeña, apenas para introducir el texto, no lo vamos a usar. Después hay otra coma que también está vacía, y pues ésta es para la fuente que queremos que tenga el texto en la ventana, pero eso aún no ha sido implementado en el AHK y tampoco lo vamos a usar. "200," es el tamaño en píxeles en dirección horizontal, y "100," es el tamaño en píxeles vertical.
La instrucción "If MyVar1 = %Victima%" lo que va a hacer es verificar si metimos algún nombre en la InputBox, en caso de que no lo hayamos hecho, simplemente restaurará el juego y en caso de que sí hayamos metido un texto en la InputBox, mostrará qué objetivo asignamos y tras eso nos enviará al juego.
El "WinRestore" pues es lo que restaurará la ventana del GTA, enviándonos de vuelta al juego (sería lo opuesto a "WinMinimize".
La instrucción "MsgBox" es la que se encargará de mostrar el nombre de la víctima que hemos asignado para matarlo con cuchillo, y mostrará en el díalogo "Se ha asignado a %Victima% como objetivo a cuchillo."

Y pues, a la hora de usar el rol de hitman sería algo más o menos así.

*Hitman mete su mano derecha en su chaleco y saca rápidamente un cuchillo, sujetándolo firmemente.*
*Hitman levanta su brazo derecho e intenta clavarle el cuchillo en el cuello a Víctima*
(Aquí el script sólo continúa al volver a presionar la tecla)
*Acierta con el cuchillo, Víctima está desangrándose (( Hitman ))*

Pues como ven, en el rol dice "Víctima", que viene siendo la variable que va a cambiar automáticamente por el nombre que le hayamos asignado con el macro anterior. Aquí lo que sería el script para el macro (que se usa con el slash del teclado numérico, o mejor dicho: la tecla de divisón) y el rol se confirma también con la tecla de división. El macro incluye If, variables, alternaciones y sleeps.


CÓDIGO:
numpaddiv::
If MyVar1 = %Victima%
return
Else
Cuchillo := (! Cuchillo)
{
If ( Cuchillo )
{
SendInput t/me mete su mano derecha en su chaleco y saca rápidamente un cuchillo, sujetándolo firmemente{enter}
Sleep, 1000
SendInput t/me levanta su brazo derecho e intenta clavarle el cuchillo en el cuello a %Victima%{enter}
}
Else
SendInput t/do Acierta con el cuchillo. %Victima% está desangrándose{enter}
}
return


Como ven, en la parte de "SendInput", la cuál contiene lo que se envía en el macro, dice %Victima%, lo cual le indica que el programa donde dice %Victima% debe ir ésa variable (el objetivo que haya sido asignado con el macro anterior). Aparte de éso, el primer "If" del script verifica que se haya escrito algo en la variable, y en caso de que la variable esté vacía, no funcionará el macro.

5. Script base (Agregado script de variable de cuchillo).

Aquí pongo un script con un par de macros de hotkeys y hotrstrings, el cuál viene configurado para que solo sirva en un documento en blanco de bloc de notas (Sin título) o en el GTA. Incluye el rol para varias armas con el uso de hotstrings.


CÓDIGO:
Process, Priority,, High
;Procesos
GroupAdd, GTA, GTA:SA:MP
GroupAdd, GTA, Sin título: Bloc de notas
F12:: reload
#IfWinActive ahk_group GTA
SetKeyDelay -1
::ncuc::
{
WinMinimize, GTA:SA:MP
Sleep, 1000
InputBox, Victima, Objetivo cuchillo., , , 200, 100,
If MyVar1 = %Victima%
{
WinRestore, GTA:SA:MP
Sleep, 500
return
}
Else
{
MsgBox, Se ha asignado a %Victima% como objetivo a cuchillo.
WinRestore, GTA:SA:MP
Sleep, 500
}
}
return
numpaddiv::
If MyVar1 = %Victima%
return
Else
Cuchillo := (! Cuchillo)
{
If ( Cuchillo )
{
SendInput t/me mete su mano derecha en su chaleco y saca rápidamente un cuchillo, sujetándolo firmemente{enter}
Sleep, 1000
SendInput t/me levanta su brazo derecho e intenta clavarle el cuchillo en el cuello a %Victima%{enter}
}
Else
SendInput t/do Acierta con el cuchillo. %Victima% está desangrándose{enter}
}
return
numpad1:: SendInput t/g {¡}Gritando{!}{enter}
numpad4::
Luces := (! Luces)
{
If ( Luces )
SendInput t/me enciende las luces de su vehículo{enter}t/v luces{enter}
Else
SendInput t/me apaga las luces de su vehículo{enter}t/v luces{enter}
}
return
numpad5::
Abierto := (! Abierto)
{
If ( Abierto )
SendInput t/v capo{enter}t/me abre el capó de su automóvil{enter}
Else
SendInput t/v capo{enter}t/me cierra el capó de su vehículo{enter}
}
return
numpad7::
Maletero := (! Maletero)
{
If ( Maletero )
SendInput t/v maletero{enter}t/me abre el maletero de su automóvil{enter}
Else
SendInput t/v maletero{enter}t/me cierra el maletero de su automóvil{enter}
}
return
numpad0:: SendInput t/v motor{enter}
insert:: SendInput t/cinturon{enter}
;========================ARMAS========================
#IfWinActive ahk_group GTA
#Hotstring EndChars {
::m4::
M4 := (! M4)
{
If ( M4 )
{
SendInput t/me descuelga la M4 de su espalda, le quita el seguro y la carga{enter}
Sleep, 1500
SendInput t/do *CLICK-CLACK* Arma lista para disparar{enter}
Sleep, 500
}
Else
{
SendInput t/me le pone el seguro a su M4 y se la cuelga en la espalda{enter}
Sleep, 500
}
}
return
::ak::
AK := (! AK)
{
If ( AK )
{
SendInput t/me descuelga la AK-47 de su espalda, le quita el seguro y la carga{enter}
Sleep, 1500
SendInput t/do *CLICK-CLACK* Arma lista para disparar{enter}
}
Else
SendInput t/me le pone el seguro a su AK-47 y se la cuelga en la espalda{enter}
}
return
::sn::
Sniper := (! Sniper)
{
If ( Sniper )
{
SendInput t/me abre la puerta de pasajero de su helicóptero{enter}
Sleep, 2500
SendInput t/do Se puede ver un rifle francotirador detrás del asiento del copiloto{enter}
Sleep, 1500
SendInput t/me se inclina sobre el asiento de pasajero y coge firmemente el rifle{enter}
Sleep, 2000
SendInput t/me le quita el seguro al rifle, le quita el protector a la mira y carga un cartucho{enter}
Sleep, 2500
SendInput t/do *CLICK-CLACK* Arma cargada{enter}
}
Else
{
SendInput t/me rápidamente le pone el seguro al rifle y le cubre la mira{enter}
Sleep, 1500
SendInput t/me se inclina sobre el asiento de pasajero, pone el rifle detrás del asiento del copiloto y cierra la puerta{enter}
}
}
return
::fo::
SendInput t/me fija a como su objetivo{left 17}
return
::de::
DEagle := (! DEagle)
{
If ( DEagle )
{
SendInput t/me acerca la mano a su cadera, desenfunda su Desert Eagle, le quita el seguro y la carga{enter}
Sleep, 1500
SendInput t/do *CLICK-CLACK* Arma lista para disparar{enter}
}
Else
SendInput t/me le pone el seguro a su Desert Eagle y la guarda en la funda junto a su cinturón{enter}
}
return
::mp5::
MP5 := (! MP5)
{
If ( MP5 )
{
SendInput t/me descuelga su MP5 de su hombro, le quita el seguro y la carga{enter}
Sleep, 1500
SendInput t/do *CLICK-CLACK* Arma lista para disparar{enter}
}
Else
SendInput t/me le pone el seguro a su MP5 y se la cuelga en el hombro{enter}
}
return
::sg::
Shotgun := (! Shotgun)
{
If ( Shotgun )
{
SendInput t/me descuelga la escopeta de su espalda, le quita el seguro y la carga{enter}
Sleep, 1500
SendInput t/do *CLICK-CLACK* Arma lista para disparar{enter}
}
Else
SendInput t/me le pone el seguro a su escopeta y se la cuelga en la espalda{enter}
}
return

hola queria saber si me podrian ayudar, cree un scribd con autohotkey para que se ponga toda la pantalla negra y lo activo como un exe dos clic y se activa hasta ahi bien ahora lo que yo quiero es que para desactivar o cerrar ese scribd solo tenga que pulsar la tecla Esc
las lineas son las siguentes que tendria que hacer para cerrarlo con esc

; PONEMOS TODA LA PANTALLA EN NEGRO
Gui, +toolwindow
Gui, -Caption
Gui, Color, black
Gui, show, +toolwindow Maximize

Return to “Tutoriales”

Who is online

Users browsing this forum: No registered users and 10 guests