Files
HD2stratagems/stratagems.ahk
T

203 lines
8.7 KiB
AutoHotkey

#singleInstance force
SendMode "Event"
SetKeyDelay 100, 50
; Stratagem sequence definition
{
stratagems := Map()
stratagems.Default := ""
stratagems["Reinforce"] := "wsdaw"
stratagems["SOSBeacon"] := "wsdw"
stratagems["Resupply"] := "sswd"
stratagems["EagleRearm"] := "wwawd"
stratagems["Hellbomb"] := "swaswdsw"
stratagems["SSSDDelivery"] := "sssww"
stratagems["UploadData"] := "adwww"
stratagems["OrbitalIlluminationFlare"] := "ddaa"
stratagems["MachineGun"] := "saswd"
stratagems["AntiMaterielRifle"] := "sadws"
stratagems["Stalwart"] := ""
stratagems["ExpendableAntiTank"] := "ssawd"
stratagems["RecoillessRifle"] := "sadda"
stratagems["Flamethrower"] := ""
stratagems["Autocannon"] := "saswwd"
stratagems["RailGun"] := "sdswad"
stratagems["Spear"] := ""
stratagems["GrenadeLauncher"] := ""
stratagems["LaserCannon"] := ""
stratagems["ArcThrower"] := ""
stratagems["JumpPack"] := "swwsw"
stratagems["SupplyPack"] := ""
stratagems["GuardDog"] := "swawds"
stratagems["GuardDogRover"] := ""
stratagems["BallisticShieldBackpack"] := ""
stratagems["ShieldGeneratorPack"] := "swadad"
stratagems["OrbitalGatlingBarrage"] := "dsaww"
stratagems["OrbitalAirburstStrike"] := "ddd"
stratagems["Orbital120MMHEBarrage"] := "ddsads"
stratagems["Orbital380MMHEBarrage"] := "dswwass"
stratagems["OrbitalWalkingBarrage"] := ""
stratagems["OrbitalLaser"] := "dswds"
stratagems["OrbitalRailcannonStrike"] := ""
stratagems["OrbitalPrecisionStrike"] := "ddw"
stratagems["OrbitalGasStrike"] := ""
stratagems["OrbitalEMSStrike"] := ""
stratagems["OrbitalSmokeStrike"] := ""
stratagems["EagleStrafingRun"] := "wdd"
stratagems["EagleAirstrike"] := "wdsd"
stratagems["EagleClusterBomb"] := "wdssd"
stratagems["EagleNapalmAirstrike"] := ""
stratagems["EagleSmokeStrike"] := ""
stratagems["Eagle110MMRocketPods"] := "wdwa"
stratagems["Eagle500KgBomb"] := "wdsss"
stratagems["AntiPersonnelMinefield"] := "sawd"
stratagems["IncendiaryMines"] := ""
stratagems["HMGEmplacement"] := "swadda"
stratagems["ShieldGeneratorRelay"] := ""
stratagems["TeslaTower"] := ""
stratagems["MachineGunSentry"] := "swddw"
stratagems["GatlingSentry"] := "swda"
stratagems["MortarSentry"] := "swdds"
stratagems["AutocannonSentry"] := ""
stratagems["RocketSentry"] := "swdda"
stratagems["EMSMortarSentry"] := ""
}
sendStratagem(keyname) {
BlockInput "On"
Send "{LControl down}" . stratagems[getValue("HOTKEYS", keyname)] . "{LControl up}"
; Send stratagems[getValue("HOTKEYS", keyname)]
BlockInput "Off"
}
; Config handling
{
; Enable numlock, revert previous state on exit
orgNumlockState := GetKeyState("NumLock", "T")
SetNumLockState "AlwaysOn"
; Config path
configPath := A_ScriptDir . "\config.ini"
; Config file init
if ( not FileExist(configPath)) {
FileAppend("", configPath)
; load defaults
initValue("HOTKEYS", "NumpadDiv")
initValue("HOTKEYS", "NumpadMult")
initValue("HOTKEYS", "NumpadSub")
initValue("HOTKEYS", "Numpad7")
initValue("HOTKEYS", "Numpad8")
initValue("HOTKEYS", "Numpad9")
initValue("HOTKEYS", "NumpadAdd")
initValue("HOTKEYS", "Numpad4")
initValue("HOTKEYS", "Numpad5")
initValue("HOTKEYS", "Numpad6")
initValue("HOTKEYS", "Numpad1")
initValue("HOTKEYS", "Numpad2")
initValue("HOTKEYS", "Numpad3")
initValue("HOTKEYS", "NumpadEnter")
initValue("HOTKEYS", "Numpad0")
initValue("HOTKEYS", "NumpadDot")
FileAppend("`n", configPath)
for key, value in stratagems {
setValue("STRATAGEMS", key, value)
}
FileAppend("`n", configPath)
initValue("WINDOW", "X", 0)
initValue("WINDOW", "Y", 0)
initValue("WINDOW", "AlwaysOnTop", "+")
}
; Update stratagems sequences
for key, value in stratagems {
setValue("STRATAGEMS", key, value)
}
; Config functions
getValue(section, key, default := "") {
return IniRead(configPath, section, key, default)
}
setValue(section, key, value) {
IniWrite(value, configPath, section, key)
return value
}
initValue(section, key, default := "Blank") {
return setValue(section, key, getValue(section, key, default))
}
}
; Load hotkeys
loop parse, IniRead(configPath, "HOTKEYS"), "`n" {
hotkeyPair := StrSplit(A_LoopField, "=")
HotIfWinactive("HELLDIVERS™ 2")
Hotkey(hotkeyPair[1], sendStratagem)
}
; GUI
{
MyGui := Gui("-Resize " . getValue("WINDOW", "AlwaysOnTop") . "AlwaysOnTop", "HD2 Stratagems")
MyGui.BackColor := "292929"
MyGui.OnEvent("Close", MyGui_Close)
OnExit(MyGui_Close)
MyGui_Close(*) {
SetNumLockState(orgNumlockState = 0 ? "Off" : "On")
MyGui.GetPos(&guiX, &guiY)
setValue("WINDOW", "X", guiX)
setValue("WINDOW", "Y", guiY)
ExitApp(0)
}
MyGui.Add("Picture", "VAlwaysOnTop X0 Y0 W64 H64", A_ScriptDir . "\Icons\" . "AlwaysOnTop" . ".png").OnEvent("Click", (*) => MyGui.Opt(setValue("WINDOW", "AlwaysOnTop", getValue("WINDOW", "AlwaysOnTop") = "-" ? "+" : "-") . "AlwaysOnTop")) ; AlwaysOnTop
MyGui.Add("Picture", "VNumpadDiv X64 Y0 W64 H64", A_ScriptDir . "\Icons\" . getValue("HOTKEYS", "NumpadDiv") . ".png").OnEvent("Click", buttonClick) ; NumpadDiv
MyGui.Add("Picture", "VNumpadMult X128 Y0 W64 H64", A_ScriptDir . "\Icons\" . getValue("HOTKEYS", "NumpadMult") . ".png").OnEvent("Click", buttonClick) ; NumpadMult
MyGui.Add("Picture", "VNumpadSub X192 Y0 W64 H64", A_ScriptDir . "\Icons\" . getValue("HOTKEYS", "NumpadSub") . ".png").OnEvent("Click", buttonClick) ; NumpadSub
MyGui.Add("Picture", "VNumpad7 X0 Y64 W64 H64", A_ScriptDir . "\Icons\" . getValue("HOTKEYS", "Numpad7") . ".png").OnEvent("Click", buttonClick) ; Numpad7
MyGui.Add("Picture", "VNumpad8 X64 Y64 W64 H64", A_ScriptDir . "\Icons\" . getValue("HOTKEYS", "Numpad8") . ".png").OnEvent("Click", buttonClick) ; Numpad8
MyGui.Add("Picture", "VNumpad9 X128 Y64 W64 H64", A_ScriptDir . "\Icons\" . getValue("HOTKEYS", "Numpad9") . ".png").OnEvent("Click", buttonClick) ; Numpad9
; MyGui.Add("Picture", "X192 Y64 W64 H128", A_ScriptDir . "\Icons\Blank.png") ; NumpadAdd background
MyGui.Add("Picture", "VNumpadAdd X192 Y96 W64 H64", A_ScriptDir . "\Icons\" . getValue("HOTKEYS", "NumpadAdd") . ".png").OnEvent("Click", buttonClick) ; NumpadAdd
MyGui.Add("Picture", "VNumpad4 X0 Y128 W64 H64", A_ScriptDir . "\Icons\" . getValue("HOTKEYS", "Numpad4") . ".png").OnEvent("Click", buttonClick) ; Numpad4
MyGui.Add("Picture", "VNumpad5 X64 Y128 W64 H64", A_ScriptDir . "\Icons\" . getValue("HOTKEYS", "Numpad5") . ".png").OnEvent("Click", buttonClick) ; Numpad5
MyGui.Add("Picture", "VNumpad6 X128 Y128 W64 H64", A_ScriptDir . "\Icons\" . getValue("HOTKEYS", "Numpad6") . ".png").OnEvent("Click", buttonClick) ; Numpad6
MyGui.Add("Picture", "VNumpad1 X0 Y192 W64 H64", A_ScriptDir . "\Icons\" . getValue("HOTKEYS", "Numpad1") . ".png").OnEvent("Click", buttonClick) ; Numpad1
MyGui.Add("Picture", "VNumpad2 X64 Y192 W64 H64", A_ScriptDir . "\Icons\" . getValue("HOTKEYS", "Numpad2") . ".png").OnEvent("Click", buttonClick) ; Numpad2
MyGui.Add("Picture", "VNumpad3 X128 Y192 W64 H64", A_ScriptDir . "\Icons\" . getValue("HOTKEYS", "Numpad3") . ".png").OnEvent("Click", buttonClick) ; Numpad3
; MyGui.Add("Picture", "X192 Y192 W64 H128", A_ScriptDir . "\Icons\Blank.png") ; NumpadEnter background
MyGui.Add("Picture", "VNumpadEnter X192 Y224 W64 H64", A_ScriptDir . "\Icons\" . getValue("HOTKEYS", "NumpadEnter") . ".png").OnEvent("Click", buttonClick) ; NumpadEnter
; MyGui.Add("Picture", "X0 Y256 W128 H64", A_ScriptDir . "\Icons\Blank.png") ; Numpad0 background
MyGui.Add("Picture", "VNumpad0 X32 Y256 W64 H64", A_ScriptDir . "\Icons\" . getValue("HOTKEYS", "Numpad0") . ".png").OnEvent("Click", buttonClick) ; Numpad0
MyGui.Add("Picture", "VNumpadDot X128 Y256 W64 H64", A_ScriptDir . "\Icons\" . getValue("HOTKEYS", "NumpadDot") . ".png").OnEvent("Click", buttonClick) ; NumpadDot
buttonClick(GuiCtrlObj, Info) {
stratagemPath := FileSelect(3, A_ScriptDir . "\Icons", "Select stratagem", "Stratagem (*.png)")
if ( not stratagemPath = "") {
stratagem := StrSplit(stratagemPath, "\")
stratagem := StrSplit(stratagem[stratagem.Length], ".")[1]
setValue("HOTKEYS", GuiCtrlObj.Name, stratagem)
GuiCtrlObj.Value := stratagemPath
GuiCtrlObj.Redraw()
}
}
MyGui.Show("X" . getValue("WINDOW", "X") . " Y" . getValue("WINDOW", "Y") . " W256 H320")
}