Jump to content
  • Sign Up

Another dumb question about autohotkey (an attempt to make a substitute for ICM / action camera from gum and strings)


Nomore.7861

Recommended Posts

Action camera sucks. Immersive combat mode for some reason cannot to run on my system.

Only one advantage from ingame action camera - faster speed run with strafes (and backwards), which not work in combat (character still turning back even u cast instant skills). And all. U can't cast aoe under your feets. U should have target directly in front of face. U can't autoattack wih one-click lmb (should be hold) - this is really dumb, and undevelompeted, cause certain skills (single-target with target requierement) launch autoattacks..... which interrupted if u press lmb one more time.

After googling and seeking on reddit i found partial solutions from different sources. Trying compose all this and little improve. Here is what i got - AHK settings under spoiler.

Spoiler

#SingleInstance force
#MaxThreadsBuffer On
#NoEnv
#InstallKeybdHook
#InstallMouseHook
#IfWinActive ahk_class ArenaNet_Gr_Window_Class

CountTabs := ""
WinWidth:=960
WinHeight:=520
FuncToggleOFF()

~*CapsLock::
    setcapslockstate, AlwaysOff
    ToggleMouseLook()
        if (MouseLook)
        {
        CountTabs := ""
        }
if !WinActive("ahk_class ahk_class ArenaNet_Gr_Window_Class")
setcapslockstate, AlwaysOff
return

~Lalt::
    ToggleMouseLook()
    KeyWait, Lalt
    sleep 50
    ToggleMouseLook()
return

*Lbutton::
    KeyWait, Lbutton, T0.25
    If ErrorLevel
    {
    send {End down}
    KeyWait, Lbutton
    send {End up}
    }
        else
        {
        send {VK31}
        }
return

*Rbutton::
    KeyWait, Rbutton, T0.25
    If ErrorLevel
    {
    send {Lbutton down}
    KeyWait, Rbutton
    send {Lbutton up}
    }
        else
        {
        BlockInput, Mousemove
        send {blind}{Rbutton up}
        sleep -1
        Click, 960 520
        sleep -1
        send {blind}{Rbutton down}
        BlockInput, MousemoveOFF
        }
return

^Numpad3::
    send ^{Numpad3 down}
    sleep 150
    KeyWait, Ctrl, T0.15
    KeyWait, Numpad3, T0.15
    if ErrorLevel
    {
    ToggleMouseLook()
        KeyWait, Rbutton, D, T30
        if !ErrorLevel
        {
            KeyWait, Rbutton
            ToggleMouseLook()
        }
        else return
    }
KeyWait, Ctrl
KeyWait, Numpad3
send ^{Numpad3 up}
return

^Numpad4::                    ;Mounts with radialmount
    KeyWait, Ctrl, T0.15
    KeyWait, Numpad4, T0.15
    if ErrorLevel
    {
        if (MouseLook)
        {
        ToggleMouseLook()
        send ^{Numpad9 down}    ;radialmount keybind
        KeyWait, Ctrl
        KeyWait, Numpad4
        send ^{Numpad9 up}        ;radialmount keybind
        ToggleMouseLook()
        }
            else
            {
            send ^{Numpad9 down}    ;radialmount keybind
            KeyWait, Ctrl
            KeyWait, Numpad4
            send ^{Numpad9 up}        ;radialmount keybind        
            }
    }
    else
    {
    send ^{Numpad4 down}
    KeyWait, Ctrl
    KeyWait, Numpad4
    send ^{Numpad4 up}
    return
    }
return

/*-----------------------------------
    ~E::
    ~Q::
    ~2::
    ~3::
    ~4::
    ~5::
    ~Z::
    ~X::
    ~R::
    ~F::send {Rbutton up}
    return
    
        ~E up::
        ~Q up::
        ~2 up::
        ~3 up::
        ~4 up::
        ~5 up::
        ~Z up::
        ~X up::
        ~R up::
        ~F up::
            CursorMoveToCenter()
            send {Rbutton down}
        return
*/-----------------------------------

~o::FuncCountTabs("o")
;;;;;;;;;;~p::FuncCountTabs("p")
~i::FuncCountTabs("i")
~m::FuncCountTabs("m")
~f12::FuncCountTabs("]")
~f11::FuncCountTabs("[")
~f10::FuncCountTabs("}")
~f9::FuncCountTabs("{")
~f8::FuncCountTabs("\")
~f7::FuncCountTabs("'")
~f6::FuncCountTabs("|")
~f5::FuncCountTabs("i")
~esc::FuncCountTabsWhenEscape()
return

CursorMoveToCenter()
{
    global WinWidth, WinHeight
    MouseMove, WinWidth, WinHeight
}
return

ToggleMouseLook()
{
global MouseLook
    if (MouseLook)
    {
    FuncToggleOFF()
    send {Rbutton up}
    MouseLook := false
    }
        else
        {
        BlockInput, Mousemove
        CursorMoveToCenter()
        send {Rbutton down}
        FuncToggleON()
        MouseLook := true
        BlockInput, MouseMoveOff
        }
}
return

FuncToggleOFF()
{
    HotKey, *Lbutton, off
    HotKey, *Rbutton, off
    HotKey, ^Numpad3, off
/*-----------------------------------
        HotKey, E, off
        HotKey, Q, off
        HotKey, 2, off
        HotKey, 3, off
        Hotkey, 4, off
        Hotkey, 5, off
        HotKey, Z, off
        HotKey, X, off
        HotKey, R, off
        HotKey, F, off
            HotKey, E up, off
            HotKey, Q up, off
            HotKey, 2 up, off
            HotKey, 3 up, off
            Hotkey, 4 up, off
            Hotkey, 5 up, off
            HotKey, Z up, off
            HotKey, X up, off
            HotKey, R up, off
            HotKey, F up, off
*/-----------------------------------
}
return

FuncToggleON()
{
    HotKey, *Lbutton, on
    HotKey, *Rbutton, on
    HotKey, ^Numpad3, on
/*-----------------------------------
        HotKey, E, on
        HotKey, Q, on
        HotKey, 2, on
        HotKey, 3, on
        Hotkey, 4, on
        Hotkey, 5, on
        HotKey, Z, on
        HotKey, X, on
        HotKey, R, on
        HotKey, F, on
            HotKey, E up, on
            HotKey, Q up, on
            HotKey, 2 up, on
            HotKey, 3 up, on
            Hotkey, 4 up, on
            Hotkey, 5 up, on
            HotKey, Z up, on
            HotKey, X up, on
            HotKey, R up, on
            HotKey, F up, on
*/-----------------------------------
}
return

FuncCountTabs(OpenTab:="")
{
global CountTabs, MouseLook
    StringReplace, CountTabs, CountTabs, %OpenTab%, %OpenTab%, UseErrorLevel
    if ErrorLevel>0
    {
    CountTabs := StrReplace(CountTabs, OpenTab, "")
    }
        else
        {
        CountTabs := CountTabs . OpenTab
        }
    if (MouseLook)
    {
        if (CountTabs = "")
        {
        sleep 200
        CursorMoveToCenter()
        send {Rbutton down}
        FuncToggleON()        
        }
            else
            {
            FuncToggleOFF()
            send {Rbutton up}
            }
    }
OpenTab:=""
}                
return

FuncCountTabsWhenEscape()
{
global CountTabs, MouseLook
if (CountTabs = "")
{
FuncCountTabs(":")
return
}
    NumOpenTabs := StrLen(CountTabs)-1
    CountTabs := SubStr(CountTabs, 1, (NumOpenTabs))
    if (MouseLook)
    {
        if (NumOpenTabs = 0)
        {
        sleep 200
        CursorMoveToCenter()
        send {Rbutton down}
        FuncToggleON()        
        }

    }
NumOpenTabs :=""
}                
return

^Esc::
suspend
    if (MouseLook)
    {
    FuncToggleOFF()
    send {Rbutton up}
    MouseLook := false
    ;CountTabs := ""
    }
return

What is it does:

Key (CapsLock) for toggle "action mode without crosshair"** (pushed RMB) **{read these with troll inner voice}

LMB with "1" - now it run autoattack

Click RMB - nearest target. Hold RMB - free camera
Hold LeftAlt - for cursor ( temporarily on/off )

All weapon skills + utilities give me cursor until ability key released. (Cause different builds and weapons have different keys with aoe abilities. Use this with fast cast after release buttons). After cast (release) cursor going to center, and hide.

Prevent CAPSLOCK TEXT IN CHAT after pressing Enter. (but lmb=1 and rmb=c if mode is toggled. To complicated, and haven't importance)
All interface tabs (inventory/mail/tp) and ESC buttons toggle mode off.

And before i can think up working method of counting how many and which interface menus open / closed via their buttons or ESC button, I fall in misgiving.
How i can understand it's Legal, and i don't find direct contradiction with policy about "macro and macro use" https://help.guildwars2.com/hc/en-us/articles/360013762153-Policy-Macros-and-Macro-Use

But who knows? May be difference action with click / push mouse button (which implemented in game, by the way) or center mouse after cast can be interpreted as "provide the user with an unfair advantage over other players".....
Any advice and discussion is welcome.


It's a pity, you can't just send your wishes in support, so that they can do everything for you there XD (joke)

 

------------------------------------

UPD. 17.12 Rework alt. now it's not just show cursor, but allow use mousebuttons for dialogues or same. But now sometimes it's buggy, if Left_Alt pushed too long or clicking too fast. IDK why, and how it's can be cured.

No more need to toggle *mode* atleast once (or double) straightaway after launch ahk file for disable remapping mousebuttons with movable cursor on the screen.

Little laggy after alt+TAB (can use Ralt+TAB).

Looks like Frankenshtein monstrum, cause it is frankenshtein hindustan zombie. Which having unnecessary lines that could be shortened. mb by someone who is not me, an ordinary guy who just slightly understands simple logic (*not always) (**social understandings is not included) (***It was an attempt at a joke) (****lots of footnotes - joke too, just for relax a small number of people who will read)

...For ppl from future, which found this in fathomless webgarbage: Use Right_Alt for inventory stacks or something similliar. Hope i found some simple and working method for count interface ingame tabs in some other night when insomnia decide to visit me again. ¯\_("-)_/¯

***Also for ppl from future: Yeah, i know that i'm a bit of a pervert with this e,q for 2-3 weaponskills. But imo, this skills have slightly higher frequency than any utilities.

 

UPD. 24.12 New version. No, I'm not writing about changes. Too lazy, not interesting to anyone.

 

30.12 Get second mount, so - tweak for radialmount from blishHud

Edited by Nomore.7861
edit ahk file
  • Confused 1
Link to comment
Share on other sites

  • Nomore.7861 changed the title to Another dumb question about autohotkey (an attempt to make a substitute for ICM / action camera from gum and strings)

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...