mouse to wasd(portugues)

Tire suas dúvidas sobre programação em AutoHotkey

Moderator: Gio

Douglas Renato
Posts: 7
Joined: 29 Nov 2021, 01:02

mouse to wasd(portugues)

Post by Douglas Renato » 30 Nov 2021, 20:25

boa noite pessoal, tava tentando no forum gringo(por isso coloquei "portugues" pq ja tinha aberto um la) um script para andar de WASD com o mouse, baseado nas coordenatas.
eu seguraria um dos botoes laterais do mouse e ele andaria emulando o wasd, eu usaria esse script pra jogar MIR4 com uma mão só(o jogo é um port mequetrefe do mobile e nao da pra bindar nada no mouse nas configs do jogo).
seria extremamente conveniente, até achei um script quase perfeito aqui:

Code: Select all

 ; using-mouse-position-as-hotkey.ahk
; ver1.1 ... added 8-directions support.

; get current mouse area and send correspond key
; press F1 and move mouse

CoordMode, Mouse, Screen
CoordMode, ToolTip, Screen

; for debug
SetTimer, tm_get_area, 100

; center position define(memo: my machine is 1920/1080)
pixx := 1600
pixy := 900
basex := pixx/2
basey := pixy/2
return

tm_get_area:
    get_area()
return

get_area() {
    Global basex, basey

    MouseGetPos, cx, cy
    cur_degree := Atan((basey-cy)/(basex-cx)) * 180 / 3.141592653589793
    if (cx >= basex) {
        cur_degree360 := cur_degree + 90
    } else {
        cur_degree360 := cur_degree + 270
    }
   ;ToolTip, degree: %cur_degree360%, basex, basey+20, 1

    dx := (basex-cx)
    dy := (basey-cy)
    cur_area := get_area_id(cur_degree360)
    ToolTip, Area: %cur_area%, basex, basey, 2
    return cur_area
}

; area  area degree total degree
;-------------------------------
;  1      50          50
; 12      20          70
;  2      40          110
; 23      20          130
;  3      100         230
; 34      20          250
;  4      40          290
; 41      20          310
;  1      50          360
get_area_id(degree) {
    return degree < 50 ? 1
        : degree < 70 ?  12
        : degree < 110 ? 2
        : degree < 130 ? 23
        : degree < 230 ? 3
        : degree < 250 ? 34
        : degree < 290 ? 4
        : degree < 310 ? 41
        : 1 ; 310 to 360 degree
}

F1::
    area := get_area()
    if (area=1) {
        key1=w
        key2=
    }
    if (area=2) {
        key1=d
        key2=
    }
    if (area=3) {
        key1=s
        key2=
    }
    if (area=4) {
        key1=a
        key2=
    }
    if (area=12) {
        key1=w
        ; Second key is d
        key2=d
    }
    if (area=23) {
        key1=d
        ; Second key is s
        key2=s
    }
    if (area=34) {
        key1=s
        ; Second key is a
        key2=a
    }
    if (area=41) {
        key1=a
        ; Second key is w
        key2=w
    }

    ; other changes??? ... need to proceed 2nd key.

    ; Release keys that were previous pressed
    if (prevkey1 != key1) {
        if (prevkey1) {
            Send, {%prevkey1% Up}
        }
        prevkey1 := key1
    }
    if (prevkey2 != key2) {
        if (prevkey2) {
            Send, {%prevkey2% Up}
        }
        prevkey2 := key2
    }

    Send, {%key1% Down}
    if (key2) {
        Send, {%key2% Down}
    }
return  ; replece to Keywait, F1 if you need

F1 Up::
    Send, {%prevkey1% Up}
    if (prevkey2) {
        Send, {%prevkey2% Up}
    }
return
eu so precisaria que esse script não funcione baseado no centro da tela, mas sim que reset as coordenatas toda vez que eu segurar o botao novamente e inves de ter de segurar o F1, ser o botao lateral do mouse(botão avançar ou botão back).
se puderem me ajudar ficarei muito grato.

User avatar
Encrypton
Posts: 19
Joined: 10 Feb 2022, 15:21

Re: mouse to wasd(portugues)

Post by Encrypton » 10 Feb 2022, 15:48

É até relativamente fácil de resolver isso

Primeiramente precisamos descobrir qual o nome da tecla lateral que você quer pressionar para o devido fim;
Para isso rode o seguinte Script:

Code: Select all

#Persistent
#InstallKeybdHook
#InstallMouseHook
KeyHistory
Com o script aberto, basta você apertar o botão latgeral e em seguida o tecla F5 para vizualiza-lo
Tendo consciencia do nome do botão, basta criar um hotkey simples, assim:

Code: Select all

NOME_DO_BOTAO1_AQUI::
     send, {W}
return

NOME_DO_BOTAO2_AQUI::
     send, {A}
return

NOME_DO_BOTAO3_AQUI::
     send, {S}
return

NOME_DO_BOTAO4_AQUI::
     send, {D}
return

F1::
     ExitApp
return

Post Reply

Return to “Ajuda e Suporte Geral”