All actions that are possible with one gamepad button, have also been assigned to a single keyboard key.
For example, it puts the 'Interaction', 'Pick up' and 'Activate/Deactivate'key to one Hotkey, so that you can do all these actions with a single button, as it is when playing with a gamepad.
- Selected hotkeys are automatically created based on the in-game key bindings of the first(!) column.
To do this, the script reads the game key bindings, who are stored in the registry, on start up or when refreshing with F5
To be more precise, I have added a holding threshold (200ms).
So tapping the Interaction key will perform the 'Interaction' key press but holding the 'Interaction' Key will perform the 'Pick up' and 'Activate/Deactivate' key press. Same as with the gamepad.
- Hotkeys are only active in-game.
- Hotkeys that you don't want to use can be deactivated with a checkbox.
- The script saves settings in the registry under the path
"HKEY_CURRENT_USER\Software\IO Interactive\HITMAN3\H3_KBinds"
- When changing keys in-game, press "F5" so that the changes take effect.
Buttons:
Gui-Buttons are only active when the game is not running.
're-map keys (default)' = restores the default key bindings (same as the in-game option)
're-map keys (predefined)' = these are the key assignments i use, hold assignments are swapped out to unused symbol keys
This is the Gui with my predefined Bindings:
But anyway, you can also create your own bindings to your likings. But remember, that the script only uses the keys of the first column.
Code: Select all
#Requires AutoHotkey >=2.0
#Warn
#SingleInstance
SetTitleMatchMode 3
Suspend(True)
GuiName := "H3_KBinds v2.3"
global WinTitle := "ahk_exe HITMAN3.exe"
mDefaultBinding := Map( "notebook_map_1_dev", "4294967295", "notebook_map_1_nr", "4294967295", "notebook_map_0_dev", "1", "notebook_map_0_nr", "50"
, "concealretrieve_1_dev", "4294967295", "concealretrieve_1_nr", "4294967295", "concealretrieve_0_dev", "1", "concealretrieve_0_nr", "21"
, "walkslow_1_dev", "4294967295", "walkslow_1_nr", "4294967295", "walkslow_0_dev", "1", "walkslow_0_nr", "56"
, "previous_ammo_1_dev", "4294967295", "previous_ammo_1_nr", "4294967295", "previous_ammo_0_dev", "1", "previous_ammo_0_nr", "44"
, "next_ammo_1_dev", "4294967295", "next_ammo_1_nr", "4294967295", "next_ammo_0_dev", "1", "next_ammo_0_nr", "45"
, "toggle_placement_1_dev", "4294967295", "toggle_placement_1_nr", "4294967295", "toggle_placement_0_dev", "1", "toggle_placement_0_nr", "58"
, "surrender_1_dev", "4294967295", "surrender_1_nr", "4294967295", "surrender_0_dev", "1", "surrender_0_nr", "45"
, "inventory_1_dev", "4294967295", "inventory_1_nr", "4294967295", "inventory_0_dev", "1", "inventory_0_nr", "23"
, "dropitem_1_dev", "4294967295", "dropitem_1_nr", "4294967295", "dropitem_0_dev", "1", "dropitem_0_nr", "44"
, "zoomout_1_dev", "4294967295", "zoomout_1_nr", "4294967295", "zoomout_0_dev", "0", "zoomout_0_nr", "9"
, "zoomin_1_dev", "4294967295", "zoomin_1_nr", "4294967295", "zoomin_0_dev", "0", "zoomin_0_nr", "8"
, "precisionaim_1_dev", "4294967295", "precisionaim_1_nr", "4294967295", "precisionaim_0_dev", "1", "precisionaim_0_nr", "42"
, "holster_1_dev", "0", "holster_1_nr", "2", "holster_0_dev", "1", "holster_0_nr", "35"
, "sneak_1_dev", "4294967295", "sneak_1_nr", "4294967295", "sneak_0_dev", "1", "sneak_0_nr", "46"
, "camswitch_1_dev", "4294967295", "camswitch_1_nr", "4294967295", "camswitch_0_dev", "1", "camswitch_0_nr", "47"
, "instinct_1_dev", "4294967295", "instinct_1_nr", "4294967295", "instinct_0_dev", "1", "instinct_0_nr", "29"
, "reload_1_dev", "4294967295", "reload_1_nr", "4294967295", "reload_0_dev", "1", "reload_0_nr", "19"
, "shoot_1_dev", "4294967295", "shoot_1_nr", "4294967295", "shoot_0_dev", "0", "shoot_0_nr", "0"
, "aim_1_dev", "4294967295", "aim_1_nr", "4294967295", "aim_0_dev", "0", "aim_0_nr", "1"
, "run_1_dev", "4294967295", "run_1_nr", "4294967295", "run_0_dev", "1", "run_0_nr", "42"
, "takedisguise_1_dev", "4294967295", "takedisguise_1_nr", "4294967295", "takedisguise_0_dev", "1", "takedisguise_0_nr", "20"
, "activateprop_1_dev", "4294967295", "activateprop_1_nr", "4294967295", "activateprop_0_dev", "1", "activateprop_0_nr", "34"
, "melee_1_dev", "4294967295", "melee_1_nr", "4294967295", "melee_0_dev", "1", "melee_0_nr", "16"
, "dragbody_1_dev", "4294967295", "dragbody_1_nr", "4294967295", "dragbody_0_dev", "1", "dragbody_0_nr", "48"
, "cover_1_dev", "4294967295", "cover_1_nr", "4294967295", "cover_0_dev", "1", "cover_0_nr", "57"
, "pickup_1_dev", "4294967295", "pickup_1_nr", "4294967295", "pickup_0_dev", "1", "pickup_0_nr", "33"
, "use2_1_dev", "4294967295", "use2_1_nr", "4294967295", "use2_0_dev", "1", "use2_0_nr", "45"
, "use_1_dev", "4294967295", "use_1_nr", "4294967295", "use_0_dev", "1", "use_0_nr", "18"
, "move_right_1_dev", "4294967295", "move_right_1_nr", "4294967295", "move_right_0_dev", "1", "move_right_0_nr", "32"
, "move_left_1_dev", "4294967295", "move_left_1_nr", "4294967295", "move_left_0_dev", "1", "move_left_0_nr", "30"
, "move_down_1_dev", "4294967295", "move_down_1_nr", "4294967295", "move_down_0_dev", "1", "move_down_0_nr", "31"
, "move_up_1_dev", "4294967295", "move_up_1_nr", "4294967295", "move_up_0_dev", "1", "move_up_0_nr", "17" )
mPresetBinding := Map( "notebook_map_1_dev", "4294967295", "notebook_map_1_nr", "4294967295", "notebook_map_0_dev", "1", "notebook_map_0_nr", "50"
, "concealretrieve_1_dev", "4294967295", "concealretrieve_1_nr", "4294967295", "concealretrieve_0_dev", "1", "concealretrieve_0_nr", "43"
, "walkslow_1_dev", "4294967295", "walkslow_1_nr", "4294967295", "walkslow_0_dev", "1", "walkslow_0_nr", "56"
, "previous_ammo_1_dev", "4294967295", "previous_ammo_1_nr", "4294967295", "previous_ammo_0_dev", "1", "previous_ammo_0_nr", "44"
, "next_ammo_1_dev", "4294967295", "next_ammo_1_nr", "4294967295", "next_ammo_0_dev", "1", "next_ammo_0_nr", "45"
, "toggle_placement_1_dev", "4294967295", "toggle_placement_1_nr", "4294967295", "toggle_placement_0_dev", "1", "toggle_placement_0_nr", "58"
, "surrender_1_dev", "4294967295", "surrender_1_nr", "4294967295", "surrender_0_dev", "1", "surrender_0_nr", "45"
, "inventory_1_dev", "4294967295", "inventory_1_nr", "4294967295", "inventory_0_dev", "1", "inventory_0_nr", "16"
, "dropitem_1_dev", "4294967295", "dropitem_1_nr", "4294967295", "dropitem_0_dev", "1", "dropitem_0_nr", "33"
, "zoomout_1_dev", "4294967295", "zoomout_1_nr", "4294967295", "zoomout_0_dev", "0", "zoomout_0_nr", "9"
, "zoomin_1_dev", "4294967295", "zoomin_1_nr", "4294967295", "zoomin_0_dev", "0", "zoomin_0_nr", "8"
, "precisionaim_1_dev", "4294967295", "precisionaim_1_nr", "4294967295", "precisionaim_0_dev", "1", "precisionaim_0_nr", "42"
, "holster_1_dev", "0", "holster_1_nr", "2", "holster_0_dev", "1", "holster_0_nr", "35"
, "sneak_1_dev", "4294967295", "sneak_1_nr", "4294967295", "sneak_0_dev", "1", "sneak_0_nr", "46"
, "camswitch_1_dev", "4294967295", "camswitch_1_nr", "4294967295", "camswitch_0_dev", "1", "camswitch_0_nr", "47"
, "instinct_1_dev", "0", "instinct_1_nr", "3", "instinct_0_dev", "1", "instinct_0_nr", "29"
, "reload_1_dev", "4294967295", "reload_1_nr", "4294967295", "reload_0_dev", "1", "reload_0_nr", "19"
, "shoot_1_dev", "4294967295", "shoot_1_nr", "4294967295", "shoot_0_dev", "0", "shoot_0_nr", "0"
, "aim_1_dev", "4294967295", "aim_1_nr", "4294967295", "aim_0_dev", "0", "aim_0_nr", "1"
, "run_1_dev", "4294967295", "run_1_nr", "4294967295", "run_0_dev", "1", "run_0_nr", "42"
, "takedisguise_1_dev", "4294967295", "takedisguise_1_nr", "4294967295", "takedisguise_0_dev", "1", "takedisguise_0_nr", "78"
, "activateprop_1_dev", "4294967295", "activateprop_1_nr", "4294967295", "activateprop_0_dev", "1", "activateprop_0_nr", "55"
, "melee_1_dev", "4294967295", "melee_1_nr", "4294967295", "melee_0_dev", "1", "melee_0_nr", "74"
, "dragbody_1_dev", "4294967295", "dragbody_1_nr", "4294967295", "dragbody_0_dev", "1", "dragbody_0_nr", "86"
, "cover_1_dev", "4294967295", "cover_1_nr", "4294967295", "cover_0_dev", "1", "cover_0_nr", "57"
, "pickup_1_dev", "4294967295", "pickup_1_nr", "4294967295", "pickup_0_dev", "1", "pickup_0_nr", "52"
, "use2_1_dev", "4294967295", "use2_1_nr", "4294967295", "use2_0_dev", "1", "use2_0_nr", "45"
, "use_1_dev", "4294967295", "use_1_nr", "4294967295", "use_0_dev", "1", "use_0_nr", "18"
, "move_right_1_dev", "4294967295", "move_right_1_nr", "4294967295", "move_right_0_dev", "1", "move_right_0_nr", "32"
, "move_left_1_dev", "4294967295", "move_left_1_nr", "4294967295", "move_left_0_dev", "1", "move_left_0_nr", "30"
, "move_down_1_dev", "4294967295", "move_down_1_nr", "4294967295", "move_down_0_dev", "1", "move_down_0_nr", "31"
, "move_up_1_dev", "4294967295", "move_up_1_nr", "4294967295", "move_up_0_dev", "1", "move_up_0_nr", "17" )
mRegKey := Map("Game", "HKEY_CURRENT_USER\Software\IO Interactive\HITMAN3\Input"
, "Script", "HKEY_CURRENT_USER\Software\IO Interactive\HITMAN3\H3_KBinds")
aHotkey := [ "use_0_nr"
, "use2_0_nr"
, "dropitem_0_nr"
, "cover_0_nr"
, "shoot_0_nr" ]
aKey := [ "use_0"
, "pickup_0"
, "activateprop_0"
, "use2_0"
, "takedisguise_0"
, "dropitem_0"
, "concealretrieve_0"
, "cover_0"
,"dragbody_0"
, "shoot_0"
, "melee_0"
, "aim_0" ]
mMouseButton := Map( "LButton", 0
,"RButton", 1
, "MButton", 2
, "XButton1", 3
, "XButton2", 4
, "WheelUp", 8
, "WheelDown", 9)
mHK_Status := Map(), mCB_Status := Map(), mT_Status := Map(), mKey := Map()
For Name in aHotkey {
if RegRead(mRegKey.Get("Script"), Name . "_CB", "ERROR") = "ERROR"
RegWrite(1, "REG_DWORD", mRegKey.Get("Script"), Name . "_CB"), mCB_Status.Set(Name, " Checked"), mT_Status.Set(Name, ""), mHK_Status.Set(Name, "On")
else
RegRead(mRegKey.Get("Script"), Name . "_CB") ? (mCB_Status.Set(Name, " Checked"), mT_Status.Set(Name, ""), mHK_Status.Set(Name, "On")) : (mCB_Status.Set(Name, ""), mT_Status.Set(Name, " Disabled"), mHK_Status.Set(Name, "Off"))
}
For Name in aKey {
RegValue := RegRead(mRegKey.Get("Game"), Name . "_nr")
For Button, Value in mMouseButton {
if RegValue = Value && RegRead(mRegKey.Get("Game"), Name . "_dev") = 0{
mKey.Set(Name . "_nr", Button)
continue 2
}
}
mKey.Set(Name . "_nr", GetKeyName("sc" . Format("{:x}", RegValue)))
}
For Name in aHotkey {
Hotkey "*" mKey.Get(Name), _Hotkey.Bind(Name), mHK_Status.Get(Name)
}
DrawLine := "_______________________________________________________________"
gH3_KBinds := Gui(, GuiName), gH3_KBinds.MarginX := 5, gH3_KBinds.MarginY := 5
gH3_KBinds.SetFont("s12")
tDrawLine := gH3_KBinds.AddText("xm ym", DrawLine)
tDrawLine.GetPos(,, &tWidth)
pProgress := gH3_KBinds.AddProgress("xm y+m w" . tWidth " h20 cRed", 100)
bDefaultBinding := gH3_KBinds.AddButton("xm y+m w" . (tWidth - gH3_KBinds.MarginY) / 2 . " Disabled", "re-map keys (default)"), bDefaultBinding.OnEvent("Click", _Binding)
bPresetBinding := gH3_KBinds.AddButton("x+m yp w" . (tWidth - gH3_KBinds.MarginY) / 2 . " Disabled", "re-map keys (predefined)"), bPresetBinding.OnEvent("Click", _Binding)
gH3_KBinds.SetFont("bold"), gH3_KBinds.AddText("xm y+m", "F5"), gH3_KBinds.SetFont("norm"), gH3_KBinds.Add("Text", "x+m yp", "= reload")
gH3_KBinds.SetFont("bold"), gH3_KBinds.AddText("xm y+m", "F8"), gH3_KBinds.SetFont("norm"), gH3_KBinds.Add("Text", "x+m yp", "= close")
gH3_KBinds.SetFont("norm")
gH3_KBinds.AddText("xm y+m", DrawLine)
gH3_KBinds.SetFont("underline")
use_0_nr_CB := gH3_KBinds.AddCheckBox("xm y+m" mCB_Status.Get("use_0_nr"), "Interact Hotkey") .OnEvent("Click", _CheckBox.Bind("use_0_nr"))
gH3_KBinds.SetFont("norm")
gH3_KBinds.SetFont("bold")
tuse_0_nr_1 := gH3_KBinds.AddText("xm y+m" mT_Status.Get("use_0_nr"), StrUpper(mKey.Get("use_0_nr"))), gH3_KBinds.SetFont("norm")
tuse_0_nr_2 := gH3_KBinds.AddText("x+m yp" mT_Status.Get("use_0_nr"), "(tap) ="), gH3_KBinds.SetFont("bold")
tuse_0_nr_3 := gH3_KBinds.AddText("x+m yp" mT_Status.Get("use_0_nr"), "interaction"), gH3_KBinds.SetFont("norm")
tuse_0_nr_4 := gH3_KBinds.AddText("x+m yp" mT_Status.Get("use_0_nr"), ", prompt = [ " . StrUpper(mKey.Get("use_0_nr")) . " ]")
gH3_KBinds.SetFont("bold")
tuse_0_nr_5 := gH3_KBinds.AddText("xm y+m" mT_Status.Get("use_0_nr"), StrUpper(mKey.Get("use_0_nr"))), gH3_KBinds.SetFont("norm")
tuse_0_nr_6 := gH3_KBinds.AddText("x+m yp" mT_Status.Get("use_0_nr"), "(hold) ="), gH3_KBinds.SetFont("bold")
tuse_0_nr_7 := gH3_KBinds.AddText("x+m yp" mT_Status.Get("use_0_nr"), "pick up item"), gH3_KBinds.SetFont("norm")
tuse_0_nr_8 := gH3_KBinds.AddText("x+m yp" mT_Status.Get("use_0_nr"), ", prompt = [ " . StrUpper(mKey.Get("pickup_0_nr")) . " ]")
gH3_KBinds.SetFont("bold")
tuse_0_nr_9 := gH3_KBinds.AddText("xm y+m" mT_Status.Get("use_0_nr"), StrUpper(mKey.Get("use_0_nr"))), gH3_KBinds.SetFont("norm")
tuse_0_nr_10 := gH3_KBinds.AddText("x+m yp" mT_Status.Get("use_0_nr"), "(hold) ="), gH3_KBinds.SetFont("bold")
tuse_0_nr_11 := gH3_KBinds.AddText("x+m yp" mT_Status.Get("use_0_nr"), "activate / deactivate"), gH3_KBinds.SetFont("norm")
tuse_0_nr_12 := gH3_KBinds.AddText("x+m yp" mT_Status.Get("use_0_nr"), ", prompt = [ " . (StrUpper(mKey.Get("activateprop_0_nr")) = "NUMPADMULT" ? "*" : StrUpper(mKey.Get("activateprop_0_nr"))) . " ]")
gH3_KBinds.AddText("xm y+m", DrawLine)
gH3_KBinds.SetFont("underline")
use2_0_nr_CB := gH3_KBinds.AddCheckBox("xm y+m" mCB_Status.Get("use2_0_nr"), "Agility Hotkey") .OnEvent("Click", _CheckBox.Bind("use2_0_nr"))
gH3_KBinds.SetFont("norm")
gH3_KBinds.SetFont("bold")
tuse2_0_nr_1 := gH3_KBinds.AddText("xm y+m" mT_Status.Get("use2_0_nr"), StrUpper(mKey.Get("use2_0_nr"))), gH3_KBinds.SetFont("norm")
tuse2_0_nr_2 := gH3_KBinds.AddText("x+m yp" mT_Status.Get("use2_0_nr"), "(tap) ="), gH3_KBinds.SetFont("bold")
tuse2_0_nr_3 := gH3_KBinds.AddText("x+m yp" mT_Status.Get("use2_0_nr"), "agility action"), gH3_KBinds.SetFont("norm")
tuse2_0_nr_4 := gH3_KBinds.AddText("x+m yp" mT_Status.Get("use2_0_nr"), ", prompt = [ " StrUpper(mKey.Get("use2_0_nr")) " ]")
gH3_KBinds.SetFont("bold")
tuse2_0_nr_5 := gH3_KBinds.AddText("xm y+m" mT_Status.Get("use2_0_nr"), StrUpper(mKey.Get("use2_0_nr"))), gH3_KBinds.SetFont("norm")
tuse2_0_nr_6 := gH3_KBinds.AddText("x+m yp" mT_Status.Get("use2_0_nr"), "(hold) ="), gH3_KBinds.SetFont("bold")
tuse2_0_nr_7 := gH3_KBinds.AddText("x+m yp" mT_Status.Get("use2_0_nr"), "take disguise"), gH3_KBinds.SetFont("norm")
tuse2_0_nr_8 := gH3_KBinds.AddText("x+m yp" mT_Status.Get("use2_0_nr"), ", prompt = [ " (StrUpper(mKey.Get("takedisguise_0_nr")) = "NUMPADADD" ? "+" : StrUpper(mKey.Get("takedisguise_0_nr"))) " ]")
gH3_KBinds.SetFont("bold")
tuse2_0_nr_9 := gH3_KBinds.AddText("xm y+m" mT_Status.Get("use2_0_nr"), StrUpper(mKey.Get("use2_0_nr"))), gH3_KBinds.SetFont("norm")
tuse2_0_nr_10 := gH3_KBinds.AddText("x+m yp" mT_Status.Get("use2_0_nr"), "(tap), (tap) + (hold) ="), gH3_KBinds.SetFont("bold")
tuse2_0_nr_11 := gH3_KBinds.AddText("x+m yp" mT_Status.Get("use2_0_nr"), "get frisked"), gH3_KBinds.SetFont("norm")
tuse2_0_nr_12 := gH3_KBinds.AddText("x+m yp" mT_Status.Get("use2_0_nr"), ", prompt = [ " StrUpper(mKey.Get("use2_0_nr")) " ]")
gH3_KBinds.SetFont("bold")
tuse2_0_nr_13 := gH3_KBinds.AddText("xm y+m" mT_Status.Get("use2_0_nr"), StrUpper(mKey.Get("use2_0_nr"))), gH3_KBinds.SetFont("norm")
tuse2_0_nr_14 := gH3_KBinds.AddText("x+m yp" mT_Status.Get("use2_0_nr"), "(tap), (tap) + (hold) ="), gH3_KBinds.SetFont("bold")
tuse2_0_nr_15 := gH3_KBinds.AddText("x+m yp" mT_Status.Get("use2_0_nr"), "show invitation"), gH3_KBinds.SetFont("norm")
tuse2_0_nr_16 := gH3_KBinds.AddText("x+m yp" mT_Status.Get("use2_0_nr"), ", prompt = [ " StrUpper(mKey.Get("use2_0_nr")) " ]")
gH3_KBinds.AddText("xm y+m", DrawLine)
gH3_KBinds.SetFont("underline")
dropitem_0_nr_CB := gH3_KBinds.AddCheckBox("xm y+m" mCB_Status.Get("dropitem_0_nr"), "Drop Item Hotkey") .OnEvent("Click", _CheckBox.Bind("dropitem_0_nr"))
gH3_KBinds.SetFont("norm")
gH3_KBinds.SetFont("bold")
tdropitem_0_nr_1 := gH3_KBinds.AddText("xm y+m" mT_Status.Get("dropitem_0_nr"), StrUpper(mKey.Get("dropitem_0_nr"))), gH3_KBinds.SetFont("norm")
tdropitem_0_nr_2 := gH3_KBinds.AddText("x+m yp" mT_Status.Get("dropitem_0_nr"), "(tap) ="), gH3_KBinds.SetFont("bold")
tdropitem_0_nr_3 := gH3_KBinds.AddText("x+m yp" mT_Status.Get("dropitem_0_nr"), "drop item")
gH3_KBinds.SetFont("bold")
tdropitem_0_nr_4 := gH3_KBinds.AddText("xm y+m" mT_Status.Get("dropitem_0_nr"), StrUpper(mKey.Get("dropitem_0_nr"))), gH3_KBinds.SetFont("norm")
tdropitem_0_nr_5 := gH3_KBinds.AddText("x+m yp" mT_Status.Get("dropitem_0_nr"), "(hold) ="), gH3_KBinds.SetFont("bold")
tdropitem_0_nr_6 := gH3_KBinds.AddText("x+m yp" mT_Status.Get("dropitem_0_nr"), "conceal / retrieve item"), gH3_KBinds.SetFont("norm")
tdropitem_0_nr_7 := gH3_KBinds.AddText("x+m yp" mT_Status.Get("dropitem_0_nr"), ", prompt = [ " StrUpper(mKey.Get("concealretrieve_0_nr")) " ]")
gH3_KBinds.AddText("xm y+m", DrawLine)
gH3_KBinds.SetFont("underline")
cover_0_nr_CB := gH3_KBinds.AddCheckBox("xm y+m" mCB_Status.Get("cover_0_nr"), "Cover Hotkey") .OnEvent("Click", _CheckBox.Bind("cover_0_nr"))
gH3_KBinds.SetFont("norm")
gH3_KBinds.SetFont("bold")
tcover_0_nr_1 := gH3_KBinds.AddText("xm y+m" mT_Status.Get("cover_0_nr"), StrUpper(mKey.Get("cover_0_nr"))), gH3_KBinds.SetFont("norm")
tcover_0_nr_2 := gH3_KBinds.AddText("x+m yp" mT_Status.Get("cover_0_nr"), "(tap) ="), gH3_KBinds.SetFont("bold")
tcover_0_nr_3 := gH3_KBinds.AddText("x+m yp" mT_Status.Get("cover_0_nr"), "cover")
gH3_KBinds.SetFont("bold")
tcover_0_nr_4 := gH3_KBinds.AddText("xm y+m" mT_Status.Get("cover_0_nr"), StrUpper(mKey.Get("cover_0_nr"))), gH3_KBinds.SetFont("norm")
tcover_0_nr_5 := gH3_KBinds.AddText("x+m yp" mT_Status.Get("cover_0_nr"), "(hold) ="), gH3_KBinds.SetFont("bold")
tcover_0_nr_6 := gH3_KBinds.AddText("x+m yp" mT_Status.Get("cover_0_nr"), "drag body"), gH3_KBinds.SetFont("norm")
tcover_0_nr_7 := gH3_KBinds.AddText("x+m yp" mT_Status.Get("cover_0_nr"), ", prompt = [ " StrUpper(mKey.Get("dragbody_0_nr")) " ]")
gH3_KBinds.SetFont("bold")
tcover_0_nr_8 := gH3_KBinds.AddText("xm y+m" mT_Status.Get("cover_0_nr"), StrUpper(mKey.Get("cover_0_nr"))), gH3_KBinds.SetFont("norm")
tcover_0_nr_9 := gH3_KBinds.AddText("x+m yp" mT_Status.Get("cover_0_nr"), "(tap), (tap) + (hold) ="), gH3_KBinds.SetFont("bold")
tcover_0_nr_10 := gH3_KBinds.AddText("x+m yp" mT_Status.Get("cover_0_nr"), "slide"), gH3_KBinds.SetFont("norm")
tcover_0_nr_11 := gH3_KBinds.AddText("x+m yp" mT_Status.Get("cover_0_nr"), ", prompt = [ " StrUpper(mKey.Get("cover_0_nr")) " ]")
gH3_KBinds.AddText("xm y+m", DrawLine)
gH3_KBinds.SetFont("underline")
shoot_0_nr_CB := gH3_KBinds.AddCheckBox("xm y+m" mCB_Status.Get("shoot_0_nr"), "Attack Hotkey") .OnEvent("Click", _CheckBox.Bind("shoot_0_nr"))
gH3_KBinds.SetFont("norm")
gH3_KBinds.SetFont("bold")
tshoot_0_nr_1 := gH3_KBinds.AddText("xm y+m" mT_Status.Get("shoot_0_nr"), StrUpper(mKey.Get("shoot_0_nr"))), gH3_KBinds.SetFont("norm")
tshoot_0_nr_2 := gH3_KBinds.AddText("x+m yp" mT_Status.Get("shoot_0_nr"), "="), gH3_KBinds.SetFont("bold")
tshoot_0_nr_3 := gH3_KBinds.AddText("x+m yp" mT_Status.Get("shoot_0_nr"), "melee attack"), gH3_KBinds.SetFont("norm")
tshoot_0_nr_4 := gH3_KBinds.AddText("x+m yp" mT_Status.Get("shoot_0_nr"), ", prompt = [ " (StrUpper(mKey.Get("melee_0_nr")) = "NUMPADSUB" ? "-" : StrUpper(mKey.Get("melee_0_nr"))) " ]")
gH3_KBinds.SetFont("bold")
tshoot_0_nr_5 := gH3_KBinds.AddText("xm y+m" mT_Status.Get("shoot_0_nr"), StrUpper(mKey.Get("shoot_0_nr"))), gH3_KBinds.SetFont("norm")
tshoot_0_nr_6 := gH3_KBinds.AddText("x+m yp" mT_Status.Get("shoot_0_nr"), "(while aiming) ="), gH3_KBinds.SetFont("bold")
tshoot_0_nr_7 := gH3_KBinds.AddText("x+m yp" mT_Status.Get("shoot_0_nr"), "shot / throw"), gH3_KBinds.SetFont("norm")
gH3_KBinds.OnEvent("Close", _CloseScript)
_GuiShow("show")
Loop{
Sleep 1000
if ID := WinExist(WinTitle){
MouseGetPos ,, &OutputVarWin
if bDefaultBinding.Enabled = True || bPresetBinding.Enabled = True
bDefaultBinding.Enabled := bPresetBinding.Enabled := False
if OutputVarWin = ID && A_IsSuspended = True {
Suspend(False)
pProgress.Opt("cGreen")
}
else if OutputVarWin != ID && A_IsSuspended = False {
Suspend(True)
pProgress.Opt("cRed")
}
}
else if ID := !WinExist(WinTitle) {
if A_IsSuspended = False {
Suspend(True)
pProgress.Opt("cRed")
}
if bDefaultBinding.Enabled = False || bPresetBinding.Enabled = False
bDefaultBinding.Enabled := bPresetBinding.Enabled := True
}
}
;######################################################## Functions ##########################################################################
_Hotkey(Name, ThisHotkey){
if Name = "use_0_nr"
Key1 := mKey.Get("use_0_nr"), Key2 := mKey.Get("pickup_0_nr"), Key3 := mKey.Get("activateprop_0_nr")
else if Name = "use2_0_nr"
Key1 := mKey.Get("use2_0_nr"), Key2 := mKey.Get("takedisguise_0_nr"), Key3 := ""
else if Name = "dropitem_0_nr"
Key1 := mKey.Get("dropitem_0_nr"), Key2 := mKey.Get("concealretrieve_0_nr"), Key3 := ""
else if Name = "cover_0_nr"
Key1 := mKey.Get("cover_0_nr"), Key2 := mKey.Get("dragbody_0_nr"), Key3 := ""
else if Name = "shoot_0_nr" {
Key1 := mKey.Get("shoot_0_nr"), Key2 := mKey.Get("melee_0_nr"), Key3 := mKey.Get("aim_0_nr")
if !GetKeyState((Key3 = "" ? "End" : Key3), "P"){
SendInput("{" . Key1 . " " . (Key1 = "" ? ("") : " down") . "}"), SendInput("{" . Key2 . " " . (Key2 = "" ? ("") : " down") . "}")
while GetKeyState((Key1 = "" ? "End" : Key1), "P"){
}
SendInput("{" . Key1 . " " . (Key1 = "" ? ("") : " up") . "}"), SendInput("{" . Key2 . " " . (Key2 = "" ? ("") : " up") . "}")
Return
}
else
Return
}
if KeyWait((Key1 = "" ? "End" : Key1), "T0.2"){
SendInput("{" . Key1 . " " . (Key1 = "" ? ("") : " down") . "}"), Sleep(100)
while GetKeyState((Key1 = "" ? "End" : Key1), "P"){
}
SendInput("{" . Key1 . " " . (Key1 = "" ? ("") : " up") . "}")
}
else {
SendInput("{" . Key2 . " " . (Key2 = "" ? ("") : " down") . "}"), SendInput("{" . Key3 . " " . (Key3 = "" ? ("") : " down") . "}"), Sleep(100)
while GetKeyState((Key1 = "" ? "End" : Key1), "P"){
}
SendInput("{" . Key2 . " " . (Key2 = "" ? ("") : " up") . "}"), SendInput("{" . Key3 . " " . (Key3 = "" ? ("") : " up") . "}"), Sleep(50)
}
}
_Binding(GuiCtrlObj, *){
if GuiCtrlObj.Text = "re-map keys (predefined)" {
For RegName, Key in mPresetBinding
RegWrite(Key, "REG_DWORD", mRegKey.Get("Game"), RegName)
_GuiShow("Reload")
Reload
}
else if GuiCtrlObj.Text = "re-map keys (default)" {
For RegName, Key in mDefaultBinding
RegWrite(Key, "REG_DWORD", mRegKey.Get("Game"), RegName)
_GuiShow("Reload")
Reload
}
}
_CheckBox(Name, GuiCtrlObj, Info){
if GuiCtrlObj.Value = True {
Loop {
if !IsSet(t%Name%_%A_Index%)
break
else
t%Name%_%A_Index%.Enabled := True, mCB_Status.Set(Name, " Checked"), mT_Status.Set(Name, ""), mHK_Status.Set(Name, "On")
}
}
else if GuiCtrlObj.Value = False {
Loop {
if !IsSet(t%Name%_%A_Index%)
break
else
t%Name%_%A_Index%.Enabled := False, mCB_Status.Set(Name, ""), mT_Status.Set(Name, " Disabled"), mHK_Status.Set(Name, "Off")
}
}
RegWrite GuiCtrlObj.Value, "REG_DWORD", mRegKey.Get("Script"), Name . "_CB"
Hotkey "*" mKey.Get(Name), _Hotkey.Bind(Name), mHK_Status.Get(Name)
}
_GuiShow(Status){
if Status = "Show" {
RegRead(mRegKey.Get("Script"), "ScriptReload", "ERROR") = "ERROR" ? RegWrite(0, "REG_DWORD", mRegKey.Get("Script"), "ScriptReload") : ("")
RegRead(mRegKey.Get("Script"),"ScriptReload") = True ? (gH3_KBinds.Show("x" . RegRead(mRegKey.Get("Script"),"XPos") " y" . RegRead(mRegKey.Get("Script"),"YPos") "NoActivate"), (WinExist(WinTitle) ? WinActivate(WinTitle) : (""))) : gH3_KBinds.Show()
}
else if Status = "Reload"
WinGetPos(&OutX, &OutY,,, A_IsCompiled ? "ahk_exe " A_ScriptName : GuiName), RegWrite(1, "REG_DWORD", mRegKey.Get("Script"), "ScriptReload"), RegWrite(OutX, "REG_SZ", mRegKey.Get("Script"), "XPos"), RegWrite(OutY, "REG_SZ", mRegKey.Get("Script"), "YPos")
else if Status = "Close"
RegWrite(0, "REG_DWORD", mRegKey.Get("Script"), "ScriptReload"), RegWrite(0, "REG_SZ", mRegKey.Get("Script"), "XPos"), RegWrite(0, "REG_SZ", mRegKey.Get("Script"), "YPos")
}
_CloseScript(GuiObj){
_GuiShow("Close")
ExitApp
}
#SuspendExempt
F5::{
_GuiShow("Reload")
Reload
}
F8:: {
_GuiShow("Close")
ExitApp
}