Page 1 of 14 12311 ... LastLast
Results 1 to 15 of 207
  1. #1
    fatdoobie's Avatar
    Join Date
    Jul 2018
    Gender
    male
    Posts
    159
    Reputation
    10
    Thanks
    511

    Post FAT Aim Assist 2.0

    FAT AIM ASSIST 2.0

    - Aim assist on L click / R click / Custom key
    - Basic triggerbot
    - Anti-shake, anti-recoil
    - much more

    Advanced imagesearch:
    - Dynamic bar sizes, adjusts itself as enemy loses HP
    - "tunnel vision" scan area to reduce jitter / false aim

    KNOWN PROBLEMS:
    - Red / bright orange environments still cause performance drops
    - Will occasionally aim at false targets, especially in PvE
    - Triggerbot needs work
    - No specific support for automatic guns

    NOTE: if you use any kind of windows DPI scaling, please turn it off.

    Also, you can all share your main / img profiles with each other. Just press Ctrl+Alt+F12 once you load it


    Enjoy

    -----
    EDIT: Updated post 2.0 small bugfixes
    The .zip file does NOT contain this latest updated source!


    Code:
    #NoEnv
    #Persistent
    #SingleInstance, Force
    #KeyHistory, 0
    #InstallKeybdHook
    #InstallMouseHook
    #UseHook
    #HotKeyInterval 1 
    #MaxHotkeysPerInterval 127
    SetBatchLines,-1
    SetKeyDelay,-1, 8
    SetControlDelay, -1
    SetMouseDelay, 0
    SetWinDelay,0
    ListLines, Off
    Coordmode, mouse, screen
    SetWorkingDir, %A_Scriptdir%\res
    
    ; INI Files / GUI setup
    INI_Init("settings.ini")
    GoSub, trimImg
    GoSub, trimMain
    GoSub, LoadGUI
    GoSub, ShowGUI
    GoSub, UpdateMainGuiText
    
    ; STATIC Globals. All auto-adjust is based off 1920x1080.
    g_W := A_Screenwidth
    g_H := A_Screenheight
    g_rw1 := Floor(g_W * 140 / 1920) ; max red W
    g_rh1 := Floor(g_H * 6 / 1080) ; min red H
    g_rw2 := Floor(g_W * 80 / 1920) ; mid red W
    g_rh2 := Floor(g_H * 8 / 1080) ; mid red H
    g_rw3 := Floor(g_W * 35 / 1920) ; min red W
    g_rh3 := Floor(g_H * 9 / 1080) ; max red H
    do_recoil := 0
    GoSub, g_scan
    GoSub, img_statics
    
    ; HOTKEY setup
    Gui Hotkeys:Default
    loop, %hotkeys_keys% {
    	if (hotkeys_%A_Index% != "" && hotkeys_%A_Index% != "Not set") {
    		Hotkey, % hotkeys_%A_Index%, func_hotkeys%A_Index%
    	} else {
    		GuiControl, +cRed, hotkeys_%A_Index%
    		GuiControl,, hotkeys_%A_Index%, Not set
    	}
    }
    
    ; First launch
    if (etc_showonce = 1) {
    	etc_showonce := 0
    	INI_Save("settings.ini","etc")
    	Msgbox, 0, Welcome!, First launch detected! Running auto-adjust.`n`nYou can run auto-adjust any time by pressing Ctrl+Alt+F12
    	GoSub, AutoAdjust
    	Msgbox, 4, Set Hotkeys?, Would you like to set your toggle keys?`n`nYou can change them any time by pressing the 'hotkeys' button on the menu bar.
    	IfMsgBox, Yes
    		GoSub, ToggleHotkeyGui
    }
    
    ; -------------------- End auto-execute --------------------
    
    ^!F12::
    AutoAdjust:
    Msgbox, 0, Auto-Adjusting!, Running auto adjust!
    main_shake := Floor(g_W * 15 / 1920)
    main_aimX := Floor(g_W * 67 / 1920)
    main_aimY := Floor(g_H * 43 / 1080)
    img_WhiteH := Floor(g_H * 5 / 1080)
    img_WhiteW := 1
    img_GreyH := Floor(g_H * 5 / 1080)
    img_GreyW := 1
    trg_tX1 := Floor(g_W * 20 / 1920) 
    trg_tX2 := Floor(g_W * 20 / 1920)
    trg_tY1 := Floor(g_H * 10 / 1080)
    trg_tY2 := Floor(g_H * 30 / 1080)
    loop, %sections% {
    	sec := % s%A_Index%
    	INI_Save("settings.ini",sec)
    	INI_Load("settings.ini",sec)
    }
    file := "imgprofile\" . img_profile . ".ini"
    INI_Save(file,"img")
    file := "mainprofile\" . main_profile . ".ini"
    INI_Save(file,"main")
    return
    
    ; Hotkey funcs
    
    func_hotkeys1: ; master on / off
    Keywait, %hotkeys_1%, U
    lockOn := ""
    lock2 := ""
    b := 1
    Gui Main:Default
    Gui, submit, nohide
    GoSub, UpdateMainGuiText
    if (main_mute = 0) {
    	loop, 2 {
    		Soundbeep, 900, 100
    	}
    }
    loop, {	
    	if ((GetKeyState("LButton","P")) && (main_anti = 1)) {
    		GoSub, mouseXY
    	}
    	if ((GetKeyState("RButton", "P")) && (main_aimR = 1)) 
    	|| ((GetKeyState("LButton", "P")) && (main_aimL = 1)) 
    	|| ((GetKeyState(main_customkey, "P")) && (main_aimC = 1))
    	{
    		if (lockOn = "") {
    			GoSub, findTarget
    		} else {
    			GoSub, lockTarget
    		}
    		gosub, check_recoil
    		continue
    	}
    	gosub, check_recoil
    	if (ai = 1) {
    		gosub, g_scan
    	}
    	if (GetKeyState(hotkeys_1, "P")) {
    		Keywait, %hotkeys_1%, U
    		break
    	}
    	Sleep, 1
    }
    b := 0
    Gosub, UpdateMainGuiText
    if (main_mute = 0) {
    	Soundbeep, 900, 100
    }
    return
    
    func_hotkeys2: ; Y MODE, 0 = free, 1 = lock
    Keywait, %hotkeys_2%, Up
    main_yMode := !main_yMode
    IniWrite,%main_yMode%,settings.ini,main,yMode
    file := "mainprofile\" . main_profile . ".ini"
    Iniwrite,%main_yMode%,%file%,main,yMode
    Gosub, UpdateMainGuiText
    if (main_mute = 0) {
    	if (main_yMode = 1) {
    		loop, 2
    			Soundbeep, 700, 100
    	} else {
    		Soundbeep, 700, 100
    	}
    }
    return
    
    func_hotkeys3: ; 2nd Check, 1 = PVP, 2 = PVE, 3 = Both, 4 = None
    Keywait, %hotkeys_3%, Up
    if (main_PVMode < 4) {
    	main_PVMode ++
    	if (main_mute = 0) {
    		bf := 600 - (main_PVMode * 33)
    		Soundbeep, %bf%, 100
    	}
    } else {
    	main_PVMode := 1	
    	if (main_mute = 0) {
    		Soundbeep, 600, 100
    	}
    }
    Iniwrite,%main_PVMode%,settings.ini,main,PVMode
    file := "mainprofile\" . main_profile . ".ini"
    Iniwrite,%main_PVMode%,%file%,main,PVMode
    GoSub, UpdateMainGuiText
    return
    
    func_hotkeys4: ; Triggerbot on / off
    Keywait, %hotkeys_4%, Up
    main_trgMode := !main_trgMode
    iniwrite,%main_trgMode%,settings.ini,main,trgMode
    file := "mainprofile\" . main_profile . ".ini"
    Iniwrite,%main_trgMode%,%file%,main,trgMode
    GoSub, UpdateMainGuiText
    if (main_mute = 0) {
    	if (main_trgMode = 1) {
    		loop, 2 {
    			Soundbeep, 420, 100
    		}
    	} else {
    		Soundbeep, 420, 100
    	}
    }
    return
    
    func_hotkeys5: ; Anti-recoil on / off
    Keywait, %hotkeys_5%, Up
    main_anti := !main_anti
    iniwrite,%main_anti%,settings.ini,main,anti
    file := "mainprofile\" . main_profile . ".ini"
    Iniwrite,%main_anti%,%file%,main,anti
    GoSub, UpdateMainGuiText
    if (main_mute = 0) {
    	if (main_anti = 1) {
    		loop, 2 {
    			Soundbeep, 370, 100
    		}
    	} else {
    		Soundbeep, 370, 100
    	}
    }
    return
    
    ; ******************************************************************
    ; Main bot functions:
    
    g_scan: ; set normal scan area
    ai := 0
    X1 := 0 + (g_W * (main_scanX / 10))
    Y1 := 0 + (g_H * (main_scanY / 10))
    X2 := g_W - (g_W * (main_scanX / 10))
    Y2 := g_H - (g_H * (main_scanY / 10))
    return
    
    img_statics: ; only needs to be called on save/load
    t := 0 + img_timeout * 1000
    g_minv := Floor(g_W * (img_abs / 100) * 150 / 1920)
    return
    
    ai_scan: ; set "ai" scan area (tunnel vision)
    ai := 1
    X1 := aX - (g_W * 150 / 1920)
    X2 := aX + g_rw1 + (g_W * 100 / 1920)
    Y1 := aY - (g_H * 90 / 1080)
    Y2 := aY + g_rh2 + (g_H * 90 / 1080)
    return
    
    ai_timeout: ; force unlock
    lockOn := ""
    return
    
    findTarget: ; first scan for red bars
    loop, 3 {
    	i := A_Index
    	v1 := "img_Red" . i . "t",v1:=%v1%
    	v2 := "g_rw" . i,v2:=%v2%
    	v3 := "g_rh" . i,v3:=%v3%
    	imagesearch, aX, aY, %X1%, %Y1%, %X2%, %Y2%, *%v1% *w%v2% *h%v3% bmp\1.bmp
    	if (ErrorLevel = 0 && main_PVMode != 4) {
    		GoSub, scan2
    		if (ErrorLevel = 0) {
    			lockOn := i
    			retry := 0
    			GoSub, ai_scan
    			GoSub, mouse1	
    			return
    		}
    	} else if (ErrorLevel = 0 && main_PVMode = 4) {
    		lockOn := i
    		GoSub, mouse1
    		return
    	}
    }
    return
    
    lockTarget: ; lock on scan
    imagesearch, aX, aY, %X1%, %Y1%, %X2%, %Y2%, *%v1% *w%v2% *h%v3% bmp\1.bmp
    if (ErrorLevel = 0 && main_PVMode != 4) {
    	GoSub, scan2
    	if (ErrorLevel = 0) {
    		SetTimer, ai_timeout, -%t%
    		GoSub, ai_scan
    		GoSub, mouse1
    		retry := 0
    		return
    	}
    } else if (ErrorLevel = 0 && main_PVMode = 4) {
    	lockOn := i
    	GoSub, mouse1
    	return
    }
    if (lockOn = "1") {
    	if (v2 > g_minv) {
    		v2 := Abs(v2 * (100 - (img_reduc / 2)) / 100) ; less aggressive width reduc for shielded bars
    	}
    	if (v2 <= g_rw3) { ; force unshielded search if we reach low hp
    		v3 := g_rh3
    		retry++ ; add one less retry for good measure... ;)
    	}
    } else {
    	if (v2 > g_minv) {
    		v2 := Abs(v2 * (100 - img_reduc) / 100) 
    	}
    }
    if (retry < img_loops) {
    	retry ++
    	if (lockOn = "1" && retry > Floor(img_loops / 2)) { ; less aggressive retry for shielded bars
    		retry := 0
    		lockOn := ""
    	}
    } else {
    	retry := 0
    	lockOn := ""
    }
    return
    
    scan2:
    if (main_PVMode = 1) { ; pvp mode
    	GoSub, scanB1
    	return
    } else if (main_PVMode = 2) { ; pve mode
    	GoSub, scanB2
    	return
    }
    loop, 2 { ; both mode
    	i2 := A_Index
    	if (lock2 = "" || lock2 = i2) {
    		Gosub, ScanB%i2%			
    		if (newX != "" && newY != "") {
    			lock2 := i2
    			return
    		}
    	}
    }
    lock2 := ""
    return
    
    scanB1: ; white search in level-text area
    newX1 := aX - Ceil(g_W * 37 / 1920) - 5
    newX2 := aX - Ceil(g_W * 8 / 1920) + 5
    newY1 := aY - Ceil(g_H * 19 / 1080) - 4
    newY2 := aY + Ceil(g_H * 10 / 1080) + 4
    imagesearch, newX, newY, %newX1%, %newY1%, %newX2%, %newY2%, *%img_WhiteT% *w%img_WhiteW% *h%img_WhiteH% bmp\2.bmp
    return
    
    scanB2: ; grey search in name area (eg "legionary")
    newX1 := aX - Ceil(g_W * 3 / 1920)
    newX2 := aX + Ceil(g_W * 60 / 1920)
    newY1 := aY - Ceil(g_H * 20 / 1080) - 5
    newY2 := aY - Ceil(g_H * 3 / 1080)
    imagesearch, newX, newY, %newX1%, %newY1%, %newX2%, %newY2%, *%img_GreyT% *w%img_GreyW% *h%img_GreyH% bmp\3.bmp
    return
    
    mouse1: ; actual aim function
    AimX := aX - (g_W / 2 ) + main_aimX ; set search result locations to fixed offsets relative to centre of screen
    AimY := aY - (g_H / 2 ) + main_aimY
    if (main_trgMode = 1 && doingClick != 1) {
    	if (AimX > -trg_tX1 && AimX < trg_tX2 && AimY > -trg_tY1 && AimY < trg_tY2) { ; triggerbot zone check
    		doingClick := 1
    		SetTimer, mouse2, -25 ; 0.025 second delay on trigger call
    	}
    }
    if (AimX > main_shake) { ; if target is outside shake zone to the left...
    	DirX := main_sen / 10
    } else if (AimX > 0) { ; inside shake zone...
    	DirX := main_sen / 15
    } else if (AimX < -main_shake) { ; outside to the right...
    	DirX := (-main_sen) / 10
    } else if (AimX < 0) { ; inside
    	DirX := (-main_sen) / 15
    }
    if (AimY > 0) { ; target Y is below
    	DirY := main_sen / 12
    } else if (AimY < 0) { ; above
    	DirY := (-main_sen) / 12
    }
    MoveX := Ceil(( AimX * DirX ** ( 1 ))) * DirX ; relative speed based on distance. DirX/Y is called twice to retain +/- direction.
    MoveY := Ceil(( AimY * DirY ** ( 1 ))) * DirY * main_yMode
    DllCall("mouse_event", uint, 1, int, MoveX, int, MoveY, uint, 0, int, 0) ; mouse move
    return
    
    mouse2:
    DllCall("mouse_event", uint, 2, int, x, int, y, uint, 0, int, 0) ; L button down
    if (main_anti = 1) {
    	GoSub, mouseXY
    }
    Random, r, 1, 1.2 ; 1 to 1.2 randomizer (never below hold time)
    d := trg_tFreq * r
    SetTimer, mouse3, -%d%
    return
    
    mouse3:
    DllCall("mouse_event", uint, 4, int, x, int, y, uint, 0, int, 0) ; L button up
    doingClick := 0
    return
    
    mouseXY: ; anti-recoil. Credits: Digi7aL.
    if (do_recoil = 0) {
    	do_recoil := 1
    	SetTimer, dorecoil, -25
    }
    return
    
    dorecoil:
    DllCall("mouse_event", uint, 1, int, main_antiX, int, main_antiY, uint, 0, int, 0)
    return
    
    check_recoil:
    if (do_recoil = 1) {
    	if !(GetKeyState("LButton","P")) {
    		do_recoil := 0	
    	}		
    }
    return
    
    
    
    ; **********************************************************************************************
    ; The rest of the script is just GUI and INI functions.
    
    
    ; ------ INI FUNCTIONS ------
    ; CREDITS: engunneer, edited by myself somewhat. 
    
    ; globals: sections, sNumber, section_keys, section_kNumber, section_key
    
    ; By default, these values should be:
    ; sections = 4
    ; s1 = main, etc
    ; main_keys = 14, etc
    ; main_k1 = sen, etc
    ; main_sen = 6, etc
    
    INI_Init(inifile) {
    	local key
    	sections := 0
    	loop, read, %inifile%
    	{
    		if (regexmatch(A_Loopreadline,"\[(\w+)]")) { ; line is a section name
    			sections+= 1
    			s%sections%:=regexreplace(A_loopreadline,"(\[)(\w+)(])","$2")
    			sec := s%sections%
    			%sec%_keys := 0
    			
    		} else if (regexmatch(A_LoopReadLine,"(\w+)=(.*)")) { ; line is a key=value pair
    			%sec%_keys+= 1
    			key:=%sec%_keys
    			%sec%_k%key%:=regexreplace(A_LoopReadLine,"(\w+)=(.*)","$1")
    			var:=sec "_" %sec%_k%key%
    			iniread,%var%,%inifile%,%sec%,% %sec%_k%key%
    		}
    	}
    }
    
    INI_Load(inifile,sec) { ; requires file location and section name
    	Gui %sec%:default
    	loop,% %sec%_keys
    	{
    		var := sec "_" %sec%_k%A_index%
    		iniread,temp,%inifile%,%sec%,% %sec%_k%A_index%
    		if (temp != "ERROR") {
    			%var% := temp
    			GuiControl,, %var%, % %var%
    		} else {
    			msgbox, Error loading settings value "%var%". Please select a new file:
    			GoSub, imgprofileLoad
    			break
    		}
    	}		
    }
    
    INI_Save(inifile,sec) { ; requires file location and section name
    	loop,% %sec%_keys
    	{
    		var:= sec "_" %sec%_k%A_index%,var2:=%var%
    		iniwrite,%var2%,%inifile%,%sec%,% %sec%_k%A_index%
    	}
    }
    return
    
    
    ; ------ GUI ELEMENT FUNCTIONS ------
    
    SetHotKey:
    ID := A_Guicontrol
    SetCustomKey(temp,temperror)
    if (temperror = 0) {
    	loop, 4 {
    		v := hotkeys_%A_Index%
    		if (temp == v) {
    			msgbox, 16, Already in use, %v% is already in use. Please unbind it first.
    			return
    		}
    	}	
    	Gui Hotkeys:Default
    	if (hotkeys_%ID% != "" && hotkeys_%ID% != "Not set") {
    		Hotkey, % hotkeys_%ID%, off
    	}
    	hotkeys_%ID% := temp
    	INI_Save("settings.ini","hotkeys")
    	GuiControl, +cLime, hotkeys_%ID%
    	GuiControl,, hotkeys_%ID%, % hotkeys_%ID%
    	Hotkey, % hotkeys_%ID%, func_hotkeys%ID%, on
    }
    GoSub, UpdateMainGuiText
    return
    
    SetAimKey:
    SetCustomKey(temp,temperror)
    if (temperror = 0) {
    	main_customkey := temp
    	INI_Save("settings.ini","main")
    	Gui Main:Default
    	GuiControl,, main_customkey, %main_customkey%
    }
    return
    
    SetCustomKey(ByRef temp, ByRef temperror) {
    	global b
    	temperror := 0
    	if (b = 1) {
    		temperror := 1
    		msgbox, Please turn off the bot before changing custom key.
    		return
    	}
    	Mousegetpos, xpos, ypos
    	xpos += -50
    	prompt :=
    	(
    	"Please type the name of the key you wish to bind.`n
        A-Z, 0-9, F1-F99, Numpad0-Numpad9
        For other keys, type the literal key name (eg. CapsLock, PgDn, LCtrl, RAlt, etc)
        Mouse: MButton (middle), XButton1 (back), XButton2 (foward)`n"
    	)
    	InputBox, temp, Custom key, %prompt%, , 545, 225, %xpos%, %ypos%, , , 
    	if (ErrorLevel || temp = "") {
    		temperror := 1
    		return
    	}
    	Static ManualList := "CapsLock,Shift,LCtrl,RCtrl,LAlt,RAlt,Tab,Space,MButton,XButton1,XBUtton2,PgUp,PgDn,Ins,Home,Del,End,``,Enter,Up,Down,Left,Right,"
    	if temp not in %ManualList%
    	{
    		if !(StrLen(temp) = 1 && RegExMatch(temp,"[[:alnum:]]+",match))
    		&& !(StrLen(temp) < 4 && RegExMatch(temp,"i)F[[:digit:]]+",match))
    		&& !(StrLen(temp) = 7 && RegExMatch(temp,"i)Numpad[[:digit:]]",match)) 
    		{
    			temperror := 1
    			MsgBox, 16, Error!, "%temp%" may not be a valid key name.`nIt must be a single key name only.`nYou can attempt to enter the key name manually in the 'res\settings.ini' file if you want.
    			return
    		}
    	}
    	StringUpper, temp, temp, T
    }
    
    SaveMain:
    Gui Main:Default
    Gui submit, nohide
    INI_Save("settings.ini","main")
    GuiControl,, MainSaveText, Saved!
    SetTimer, RevertText, -1000
    if (drawing = 1) {
    	GoSub, UpdateOSD
    }
    return
    
    SaveImg:
    Gui Img:Default
    Gui submit, nohide
    INI_Save("settings.ini","img")
    file := "imgprofile\" . img_profile . ".ini"
    INI_Save(file,"img")
    GoSub, UpdateImg
    GuiControl,, ImgSaveText, Saved!
    SetTimer, RevertText, -1000
    GoSub, img_statics
    return
    
    SaveTrg:
    Gui Trg:Default
    Gui submit, nohide
    INI_Save("settings.ini","trg")
    GuiControl,, TrgSaveText, Saved!
    SetTimer, RevertText, -1000
    return
    
    imgprofileLoad:
    Thread, NoTimers
    FileSelectFile, SelectedFile, 3, imgprofile\, Open a file, Settings files (*.ini)
    Thread, NoTimers, false
    SplitPath, SelectedFile, name, dir, ext, name_no_ext, drive
    if (SelectedFile = "" || ext != "ini") {
    	return
    }
    img_profile := name_no_ext
    file := "imgprofile\" . img_profile . ".ini"
    INI_Load(file,"img")
    INI_Save("settings.ini","img")
    Gui Img:Default
    GoSub, UpdateImg
    GoSub, img_statics
    return
    
    imgprofileSaveAs:
    Thread, NoTimers
    FileSelectFile, SelectedFile, S, imgprofile\new.ini, Save as:, Settings files (*.ini)
    Thread, NoTimers, false
    if (SelectedFile = "") {
    	return
    }
    SplitPath, SelectedFile, name, dir, ext, name_no_ext, drive
    if (ext != "ini") {
       name=%name_no_ext%.ini
    }
    if (FileExist("imgprofile\"name)) {
    	Msgbox, 4, Are you sure?, Overwrite existing file?
    	IfMsgBox, No
    		return
    }
    img_profile := name_no_ext
    Gui Img:default
    Gui submit, nohide
    INI_Save("settings.ini","img")
    file := "imgprofile\" . img_profile . ".ini"
    INI_Save(file,"img")
    INI_Load(file,"img")
    GoSub, UpdateImg
    GoSub, img_statics
    return
    
    mainprofileLoad:
    Thread, NoTimers
    FileSelectFile, SelectedFile, 3, mainprofile\, Open a file, Settings files (*.ini)
    Thread, NoTimers, false
    SplitPath, SelectedFile, name, dir, ext, name_no_ext, drive
    if (SelectedFile = "" || ext != "ini") {
    	return
    }
    main_profile := name_no_ext
    file := "mainprofile\" . main_profile . ".ini"
    INI_Load(file,"main")
    INI_Save("settings.ini","main")
    Gui Main:Default
    GoSub, trimMain
    GuiControl,, mainprofileText, Profile: %mainString%
    Gosub, UpdateMainGuiText
    if (drawing = 1) {
    	GoSub, UpdateOSD
    }
    return
    
    mainprofileSaveAs:
    Thread, NoTimers
    FileSelectFile, SelectedFile, S, mainprofile\new.ini, Save as:, Settings files (*.ini)
    Thread, NoTimers, false
    if (SelectedFile = "") {
    	return
    }
    SplitPath, SelectedFile, name, dir, ext, name_no_ext, drive
    if (ext != "ini") {
       name=%name_no_ext%.ini
    }
    if (FileExist("mainprofile\"name)) {
    	Msgbox, 4, Are you sure?, Overwrite existing file?
    	IfMsgBox, No
    		return
    }
    main_profile := name_no_ext
    Gui Main:default
    Gui submit, nohide
    GoSub, trimMain
    GuiControl,, mainprofileText, Profile: %mainString%
    INI_Save("settings.ini","main")
    file := "mainprofile\" . main_profile . ".ini"
    INI_Save(file,"main")
    INI_Load(file,"main")
    Gosub, UpdateMainGuiText
    if (drawing = 1) {
    	GoSub, UpdateOSD
    }
    return
    
    tolShift:
    Gui Img:Default
    loop, 3
    {
    	var:= "img_Red" . A_index . "t",var2:=%var%
    	var2 += A_Guicontrol
    	GuiControl,, %var%, %var2%
    	img_Red%A_index%t := var2
    }
    return
    
    MainGuiToggle:
    Gui Main:Default
    if (miniMode != 1) {
    	miniMode := 1
    	Gui, Show, w270 h337 NoActivate, %WinTitle%
    	GuiControl,, MiniButton, ... (main)
    } else {
    	miniMode := 0
    	Gui, Show, w270 h133 NoActivate, %WinTitle%
    	GuiControl,, MiniButton, Main settings
    }
    return
    
    toggleIMG:
    if (!showingImgBox) {
    	GoSub, showImg
    } else {
    	GoSub, hideImg
    }
    return
    
    toggleOSD:
    if (drawing != 1) {
    	drawing := 1
    	GoSub, UpdateOSD
    } else { 
    	drawing := 0
    	Gui OSD:Default
    	Gui, Cancel
    }
    return
    
    toggleTrgGui:
    if (showingTrgBox != 1) {
    	GoSub, showTrg
    } else {
    	GoSub, hideTrg
    }
    return
    
    ToggleHotkeyGui:
    Gui Hotkeys:Default
    if (showingHotkeys != 1) {
    	showingHotkeys := 1
    	Mousegetpos, xpos, ypos
    	xpos += 10
    	ypos += 10
    	Gui, show, w225 h165 x%xpos% y%ypos%, Hotkeys:
    } else {
    	showingHotkeys := 0
    	Gui, cancel
    }
    return
    
    ImgGuiEscape:
    ImgGuiClose:
    GoSub, hideImg
    return
    
    TrgGuiEscape:
    TrgGuiClose:
    GoSub, hideTrg
    return
    
    HotkeysGuiEscape:
    HotkeysGuiClose:
    GoSub, ToggleHotkeyGui
    return
    
    Tray:
    Gui Main:Default
    WinHide
    return
    
    Restore:
    Gui Main:Default
    gui, Main: +lastfound
    WinShow
    WinRestore
    return
    
    MainGuiEscape:
    MainGuiClose:
    Exit:
    ExitApp
    return
    
    GuiMove:
    Gui Main:Default
    PostMessage, 0xA1, 2,,, A
    return
    
    MuteSub:
    main_mute := !main_mute
    Iniwrite, %main_mute%, settings.ini, main, mute
    return
    
    ; ------ OTHER GUI FUNCTIONS ------
    
    UpdateImg:
    Gui Img:Default
    GuiControl,, WhitePic, *w%img_WhiteW% *h%img_WhiteH% bmp\2.bmp
    GuiControl,, GreyPic, *w%img_GreyW% *h%img_GreyH% bmp\3.bmp
    return
    
    UpdateOSD:
    OSDx := 0 + (g_W * (main_scanX / 10))
    OSDy := 0 + (g_H * (main_scanY / 10))
    OSDw := g_W - (g_W * (main_scanX / 5))
    OSDh := g_H - (g_H * (main_scanY / 5))
    Gui OSD:Default
    Gui, Show, x%OSDx% y%OSDy% w%OSDw% h%OSDh% NoActivate
    Gui, +lastfound
    ID := WinExist()
    WinSet, ExStyle, +0x80020, ahk_id %ID%
    return
    
    showImg:
    showingImgBox := 1
    Gui Main:Default
    Gui,+LastFound
    GuiControl,, imgButton, ... (img)
    WinGetPos,newWinx,newWiny,newWinw,newWinh
    imgX := newWinx
    imgY := newWiny + newWinh
    Gui Img:Default
    Gui, Show, w250 h302 x%imgX% y%imgY%, %WinTitle%
    Sleep, 25
    GoSub, UpdateImg
    return
    
    hideImg:
    Gui Img:Default
    Gui, cancel
    showingImgBox := 0
    Gui Main:Default
    GoSub, trimImg
    GuiControl,, imgButton, img: %imgString%
    return
    
    trimImg:
    imgString := img_profile
    len := StrLen(img_profile)
    if (len > 6) {
    	trim := len - 5
    	StringTrimRight, imgString, imgString, %trim%
    	imgString := imgString . ".."
    }
    return
    
    trimMain:
    mainString := main_profile
    len := StrLen(mainString)
    if (len > 13) {
    	trim := len - 12
    	StringTrimRight, mainString, mainString, %trim%
    	mainString := mainString . ".."
    }
    return
    
    showTrg:
    showingTrgBox := 1
    Gui Main:Default
    Gui, +LastFound,
    GuiControl,, trgButton, ... (trg)
    WinGetPos,newWinX,newWiny,newWinw,newWinh
    trgGuiX := newWinx + newWinw
    trgGuiY := newWiny
    Gui Trg:Default
    Gui, Show, w248 h317 x%trgGuiX% y%trgGuiY%, %winTitle%
    return
    
    hideTrg:
    Gui Trg:Default
    Gui, cancel
    showingTrgBox := 0
    Gui Main:Default
    GuiControl,, trgButton, Triggerbot
    return
    
    RevertText:
    Gui Main:Default
    GuiControl,, MainSaveText, Save
    Gui Img:Default
    GuiControl,, ImgSaveText, Apply changes
    Gui Trg:Default
    GuiControl,, TrgSaveText, Save
    return
    
    UpdateMainGuiText:
    Gui Main:Default
    if (b = 1) { 
    	GuiControl, +cLime, OnOff
    	GuiControl,, OnOff, [%hotkeys_1%] Bot: ON
    } else {
    	GuiControl, +cRed, OnOff
    	GuiControl,, OnOff, [%hotkeys_1%] Bot: OFF	
    }
    if (main_yMode = 1) {
    	GuiControl, +cGreen, Ylock
    	GuiControl,, Ylock, [%hotkeys_2%] Y Mode: LOCK
    } else if (main_yMode = 0) {
    	GuiControl, +cMaroon, Ylock
    	GuiControl,, Ylock, [%hotkeys_2%] Y Mode: FREE
    }
    if (main_PVMode = 1) {
    	GuiControl, +cGreen, PVText
    	GuiControl,, PVText, [%hotkeys_3%] 2nd Check: PVP
    } else if (main_PVMode = 2) {
    	GuiControl, +cTeal, PVText
    	GuiControl,, PVText, [%hotkeys_3%] 2nd Check: PvE
    } else if (main_PVMode = 3) {
    	GuiControl, +cOlive, PVText
    	GuiControl,, PVText, [%hotkeys_3%] 2nd Check: Both
    } else if (main_PVMode = 4) {
    	GuiControl, +cMaroon, PVText
    	GuiControl,, PVText, [%hotkeys_3%] 2nd Check: None	
    }
    if (main_trgMode = 1) {
    	GuiControl, +cGreen, TrigText
    	GuiControl,, TrigText, [%hotkeys_4%] Triggerbot: ON
    } else {
    	GuiControl, +cMaroon, TrigText
    	GuiControl,, TrigText, [%hotkeys_4%] Triggerbot: OFF
    }
    if (main_anti = 1) {
    	GuiControl, +cGreen, AntiText
    	GuiControl,, AntiText, [%hotkeys_5%] Anti-Recoil: ON
    } else {
    	GuiControl, +cMaroon, AntiText
    	GuiControl,, AntiText, [%hotkeys_5%] Anti-Recoil: OFF
    }	
    return
    
    ;  Setup all GUIs on load:
    
    LoadGUI:
    ; main gui
    Gui Main:Default
    Gui, -Caption +Border -DPIscale
    Gui, Color, 000000
    Gui, Add, Picture, x0 y25 hwndhpic +0xE
    bgPic := "bmp\gui.bmp"
    hbmp := DllCall("LoadImage", "uint", 0, "str", bgPic, "uint", 0x0, "int", 0, "int", 0, "uint", 0x10|0x2000)
    SendMessage, 0x172, 0x0, hbmp,, ahk_id %hpic%
    Gui, Font, s10 cBlack
    Gui, Add, Text, x4 y4 w134 h21 gGuiMove cWhite, FAT AA 2.0
    Gui, Font, s8
    Gui, Add, Button, w60 h17 x138 y4 gToggleHotkeyGui, hotkeys
    Gui, Add, Button, w30 h17 x202 y4 gTray, tray
    Gui, Add, Button, w30 h17 x236 y4 gExit, exit
    Gui, Font, s9 cWhite
    Gui, Add, Button, w69 h28 x10 y35 gMainGuiToggle vMiniButton, Main settings
    Gosub, trimImg
    Gui, Add, Button, w69 h28 x10 y66 gtoggleIMG vimgButton, img: %imgString%
    Gui, Add, Button, w69 h28 x10 y97 gtoggleTrgGui vtrgButton, Triggerbot
    Gui, Font, s11
    Gui, Add, Text, w130 x85 y33 vOnOff cRed
    Gui, Add, Text, w130 x85 y52 vYlock
    Gui, Add, Text, w150 x85 y71 vPVText
    Gui, Add, Text, w170 x85 y90 vTrigText
    Gui, Add, Text, w170 x85 y109 vAntiText
    Gui, Font, s9
    Gui, Add, Checkbox, x218 y36 gMuteSub vMute Checked%main_mute%, Mute
    Gui, Font, s10 cWhite
    Gui, Add, Text, x37 y148, Speed:
    Gui, Add, Text, x13 y173, Anti-Shake:
    Gui, Add, Text, x44 y198, Aim X:
    Gui, Add, Text, x44 y223, Aim Y:
    Gui, Add, Text, x160 y148, Scan X:
    Gui, Add, Text, x160 y173, Scan Y:
    Gui, Add, Text, x152 y198, Recoil X:
    Gui, Add, Text, x152 y223, Recoil Y:
    Gui, Font, S11 cBlack
    Gui, Add, Edit, w35 h20 x90 y145 vmain_sen, %main_sen%
    Gui, Add, Edit, w35 h20 x90 y170 vmain_shake, %main_shake%
    Gui, Add, Edit, w35 h20 x90 y195 vmain_aimX, %main_aimX%
    Gui, Add, Edit, w35 h20 x90 y220 vmain_aimY, %main_aimY%
    Gui, Add, Edit, w35 h20 x215 y145 vmain_scanX, %main_scanX%
    Gui, Add, Edit, w35 h20 x215 y170 vmain_scanY, %main_scanY%
    Gui, Add, Edit, w35 h20 x215 y195 vmain_antiX, %main_antiX%
    Gui, Add, Edit, w35 h20 x215 y220 vmain_antiY, %main_antiY%
    Gui, Font, s9 cWhite
    Gui, Add, Text, x10 y250, Activate:
    Gui, Add, Checkbox, x56 y250 vmain_aimL checked%main_aimL%, L Click
    Gui, Add, Checkbox, x115 y250 vmain_aimR checked%main_aimR%, R Click
    Gui, Add, Checkbox, w20 h20 x178 y247 vmain_aimC checked%main_aimC% -wrap, %A_space%
    Gui, Font, s9
    Gui, Add, Button, w56 h20 x198 y247 gSetAimKey vmain_customKey, %main_customkey%
    Gui, Add, Checkbox, x30 y277 gtoggleOSD, Draw Scan Area
    Gui, Add, Text, x145 y277 cLime w115 vmainprofileText, Profile: %mainString%
    Gui, Add, Button, w65 h19 x20 y300 gmainprofileSaveAs, Save As...
    Gui, Add, Button, w50 h19 x90 y300 gmainprofileLoad, Load
    Gui, Add, Button, w105 h19 x145 y300 gSaveMain vMainSaveText Default, Save
    Gui, +Lastfound
    Menu, Tray, NoStandard
    Menu, Tray, Add, Exit, Exit
    Menu, Tray, Add, Restore, Restore
    Menu, Tray, Default, Restore
    Menu, Tray, Click, 2
    ; imagesearch gui
    Gui Img:Default
    Gui, -DPIScale
    Gui, Color, 000000
    Gui, Add, Picture, x0 y0 hwndhpic2 +0xE
    ImgbgPic := "bmp\imgGui.bmp"
    hbmp := DllCall("LoadImage", "uint", 0, "str", ImgbgPic, "uint", 0x0, "int", 0, "int", 0, "uint", 0x10|0x2000)
    SendMessage, 0x172, 0x0, hbmp,, ahk_id %hpic2%
    Gui, Font, s9
    Gui, Add, Text, w70 h20 x67 y10 cWhite vimg_profile, %img_profile%
    Gui, Add, Button, h20 w140 x7 y31 gSaveImg vImgSaveText Default, Apply changes
    Gui, Add, Button, h18 w70 x165 y9 gimgprofileLoad, Load
    Gui, Add, Button, h18 w70 x165 y33 gimgprofileSaveAs, Save As...
    Gui, Font, s9 cWhite
    Gui, Add, Text, x55 y70, Retry Limit:
    Gui, Add, Text, x51 y92, Aggression:
    Gui, Add, Text, x44 y114, Minimum HP:
    Gui, Add, Text, x34 y136, Memory length:
    Gui, Add, Text, x145 y70, attempts
    Gui, Add, Text, x145 y92, `%
    Gui, Add, Text, x145 y114, `%
    Gui, Add, Text, x145 y136, seconds
    Gui, Font, cBlack
    Gui, Add, Edit, x113 y68 h17 w25 vimg_loops, %img_loops%
    Gui, Add, Edit, x113 y90 h17 w25 vimg_reduc, %img_reduc%
    Gui, Add, Edit, x113 y112 h17 w25 vimg_abs, %img_abs% 
    Gui, Add, Edit, x113 y134 h17 w25 vimg_timeout, %img_timeout%
    Gui, Font, s11
    Gui, Add, Text, x25 y177 cRed, Color Tolerance:
    Gui, Font, s9
    Gui, Add, Button, h16 w24 x69 y200 gtolShift, -5
    Gui, Add, Button, h16 w24 x99 y200 gtolShift, +5
    Gui, Add, Text, x178 y168 cRed, High HP
    Gui, Add, Text, x178 y193 cRed, Mid HP
    Gui, Add, Text, x178 y218 cRed, Low HP
    Gui, Font, s10 cBlack
    Gui, Add, Edit, x138 y165 w30 h18 vimg_Red1t, %img_Red1t% 
    Gui, Add, Edit, x138 y190 w30 h18 vimg_Red2t, %img_Red2t%
    Gui, Add, Edit, x138 y215 w30 h18 vimg_Red3t, %img_Red3t%
    Gui, Font, cWhite
    Gui, Add, Text, w96 h18 x26 y240, White (PvP):
    Gui, Add, Text, w92 h18 x155 y240, Grey (PvE):
    Gui, Font, s9
    Gui, Add, Text, x20 y259, Tolerance:
    Gui, Add, Text, x15 y279, W:
    Gui, Add, Text, x60 y279, H:
    Gui, Add, Text, x140 y259, Tolerance:
    Gui, Add, Text, x135 y279, W:
    Gui, Add, Text, x180 y279, H:
    Gui, Font, s9 cBlack
    Gui, Add, Picture, x105 y245 w2 h2 vwhitepic, bmp\2.bmp
    Gui, Add, Edit, w20 h16 x76 y260 vimg_WhiteT, %img_WhiteT%
    Gui, Add, Edit, w20 h16 x32 y278 vimg_WhiteW, %img_WhiteW%
    Gui, Add, Edit, w20 h16 x76 y278 vimg_whiteH, %img_WhiteH%
    Gui, Font, s10 cSilver
    Gui, Font, s9 cBlack
    Gui, Add, Picture, x228 y245 w2 h2 vgreypic, bmp\3.bmp
    Gui, Add, Edit, w25 h16 x197 y260 vimg_GreyT, %img_GreyT%
    Gui, Add, Edit, w25 h16 x151 y278 vimg_GreyW, %img_GreyW%
    Gui, Add, Edit, w25 h16 x197 y278 vimg_GreyH, %img_GreyH%
    ; Trigger gui
    Gui Trg:Default
    Gui, -DPIScale
    Gui, Color, 000000
    Gui, Add, Picture, x0 y0 hwndhpic3 +0xE
    TrgbgPic := "bmp\trgGui.bmp"
    hbmp := DllCall("LoadImage", "uint", 0, "str", TrgbgPic, "uint", 0x0, "int", 0, "int", 0, "uint", 0x10|0x2000)
    SendMessage, 0x172, 0x0, hbmp,, ahk_id %hpic3%
    Gui, Add, Button, Default gSaveTrg vTrgSaveText w100 h20 x75 y45, Save
    Gui, Font, cWhite s10
    Gui, Add, Text, x36 y84, Hold time / fire rate: 
    Gui, Add, Text, h22 x190 y85, ms 
    Gui, Font, cBlack 
    Gui, Add, Edit, w30 h20 x155 y82 vtrg_tFreq, %trg_tFreq%
    Gui, Font, cRed
    Gui, Add, Text, x72 y110, Trigger fire zone:
    Gui, font, s9 cWhite
    Gui, Add, Text, x29 y140, X1 (left): 
    Gui, Add, Text, x138 y140, X2 (right): 
    Gui, Add, Text, x29 y170, Y1 (up):
    Gui, Add, Text, x130 y170, Y2 (down): 
    Gui, font, cBlack
    Gui, Add, Edit, w22 h18 x79 y138 vtrg_tX1, %trg_tX1%
    Gui, Add, Edit, w22 h18 x196 y138 vtrg_tX2, %trg_tX2%
    Gui, Add, Edit, w22 h18 x79 y167 vtrg_tY1, %trg_tY1%
    Gui, Add, Edit, w22 h18 x196 y167 vtrg_tY2, %trg_tY2%
    ; hotkey gui
    Gui Hotkeys:Default
    Gui, -DPIScale
    Gui, Color, 000000
    Gui, Font, cWhite s10
    Gui, Add, Text, x10 y10, Set your toggle keys:
    Gui, Add, Text, x10 y50, Main On / Off:
    Gui, Add, Text, x10 y70, Y Mode:
    Gui, Add, Text, x10 y90, 2nd Check:
    Gui, Add, Text, x10 y110, Triggerbot:
    Gui, Add, Text, x10 y130, Anti-Recoil:
    Gui, Font, cLime s10
    Gui, Add, Text, w65 x110 y50 vhotkeys_1, %hotkeys_1%
    Gui, Add, Text, w65 x110 y70 vhotkeys_2, %hotkeys_2%
    Gui, Add, Text, w65 x110 y90 vhotkeys_3, %hotkeys_3%
    Gui, Add, Text, w65 x110 y110 vhotkeys_4, %hotkeys_4%
    Gui, Add, Text, w65 x110 y130 vhotkeys_5, %hotkeys_5%
    Gui, font, cBlack s9 
    Gui, Add, Button, h18 w30 x180 y50 gSetHotKey, 1
    Gui, Add, Button, h18 w30 x180 y70 gSetHotKey, 2
    Gui, Add, Button, h18 w30 x180 y90 gSetHotKey, 3
    Gui, Add, Button, h18 w30 x180 y110 gSetHotKey, 4
    Gui, Add, Button, h18 w30 x180 y130 gSetHotKey, 5
    ; OSD (draw scan area)
    Gui OSD:Default 
    Gui, +AlwaysOnTop -Caption +ToolWindow +Border -DPIScale
    Gui, Color, EEAA99
    Gui, +Lastfound
    WinSet, TransColor, EEAA99
    return
    
    ShowGUI:
    Random, r, 5, 10
    Loop %r% {
    	Random, Var,97,122
    	WinTitle.=Chr(Var)
    }
    mousegetpos, xpos, ypos
    xpos += -50
    ypos += -50
    Gui Main:default
    Gui, Show, w270 h133 x%xpos% y%ypos%, %WinTitle%
    return
    
    ; end
    Virus Scan 1
    Virus Scan 2

    GUI: image
    <b>Downloadable Files</b> Downloadable Files
    Last edited by fatdoobie; 10-16-2018 at 03:58 AM.

  2. The Following 57 Users Say Thank You to fatdoobie For This Useful Post:

    al5a6r (10-16-2018),bighape (10-16-2018),bigred158 (11-06-2020),BioZo (10-16-2018),Black Iceberg (10-16-2018),caronfmc (10-16-2018),CHM228 (05-31-2020),Chro21 (11-08-2019),dalekarr (09-06-2020),Desjani (10-16-2018),Duke2tuff (10-16-2018),elflin1024 (10-17-2018),Eviriany (10-16-2018),ExAnimo (10-17-2018),gabrygg (10-16-2018),GrungeG (08-23-2020),hong3154 (10-16-2018),idqdmaster (10-15-2018),JackAim (10-16-2018),lich1995 (10-18-2018),lilemcy (11-23-2020),LupiGod (10-18-2018),magnat32 (10-17-2018),mardukus (10-16-2018),Masbka (10-16-2018),mehti (10-16-2018),Method1990 (10-17-2018),MrBananaman89 (10-16-2018),mrherbs (08-17-2020),myself1200 (10-15-2018),n9nedeville (10-18-2018),naxete (10-17-2018),ogwazard (04-13-2019),orkun3445 (10-29-2018),pinheirinhos (03-31-2020),Polymorphos (10-16-2018),RagehackRandy (02-09-2021),Rchevyier (10-18-2018),rekth123 (06-25-2019),ricardmark1 (10-16-2018),s1375223954 (10-30-2018),SasoriFunny (10-16-2018),Shnking90 (10-15-2018),siyu9469 (10-15-2018),strictlydiesel (10-17-2018),TheTaiger (10-20-2018),TheurGist (10-15-2018),user4200 (10-17-2018),VampireGamerX (10-18-2018),viking805fan (10-15-2018),vt120vt (02-11-2024),w210511605 (10-16-2018),wahts005 (11-04-2018),WIRED_Soar (05-29-2020),yashspartan1 (10-15-2018),ydj7219 (10-16-2018),zlo007 (10-17-2018)

  3. #2
    Ahl's Avatar
    Join Date
    Dec 2012
    Gender
    male
    Location
    /modcp
    Posts
    16,599
    Reputation
    3219
    Thanks
    5,383
    My Mood
    Angelic
    Approved.

    This has not been tested.
    News Force Head Editor from 09/14/2018 - 03/02/2020
    Publicist from 11/23/2017 - 06/07/2019
    Global Moderator since 09/24/2017
    Minion+ from 04/16/2017 - 09/24/2017
    Market Place Minion from 04/16/2017 - 09/24/2017
    Minecraft Minion from 02/23/2017 - 09/24/2017
    Realm of the Mad God Minion from 11/06/2016 - 09/24/2017

    Middleman from 09/14/2016 - 09/24/2017
    News Force Editor from 08/23/2016 - 09/14/2018
    News Force (Section of the Week) from 03/21/2016 - 07/17/2017
    News Force (User News) from 10/18/2015 - 09/14/2018

    Donator since 03/16/2015
    Realm of the Mad God Editor from 05/20/2014 - 07/08/2014
    Member since 12/23/2012


    Rep Power: 82

  4. #3
    3andrew's Avatar
    Join Date
    Jun 2015
    Gender
    male
    Posts
    61
    Reputation
    10
    Thanks
    239
    Doing great work! I'm going to have to give yours a go now. Admittedly I've been sticking with mine simply because I have it so dialed in but you have been stacking new features like Apple stacks money.
    Last edited by 3andrew; 10-15-2018 at 06:43 PM.

  5. #4
    znyn's Avatar
    Join Date
    Oct 2018
    Gender
    male
    Posts
    0
    Reputation
    10
    Thanks
    0
    Doesn't seem to be working for me, where as the previous version did. Strange.

  6. #5
    mazxz's Avatar
    Join Date
    Feb 2013
    Gender
    male
    Posts
    6
    Reputation
    10
    Thanks
    0

    GOD LIKE

    Quote Originally Posted by fatdoobie View Post
    @mods, sorry for the other threads, this one is the correct version with virus scans.

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

    Virus Scan 1
    Virus Scan 2

    GUI: image

    FAT AIM ASSIST 2.0

    - Aim assist on L click / R click / Custom key
    - Basic triggerbot
    - Anti-shake, anti-recoil
    - much more

    Advanced imagesearch:
    - Dynamic bar sizes, adjusts itself as enemy loses HP
    - "tunnel vision" scan area to reduce jitter / false aim

    KNOWN PROBLEMS:
    - Red / bright orange environments still cause performance drops
    - Will occasionally aim at false targets, especially in PvE
    - Triggerbot needs work
    - No specific support for automatic guns

    NOTE: if you use any kind of windows DPI scaling, please turn it off.

    Enjoy

    Source:

    Code:
    #NoEnv
    #Persistent
    #SingleInstance, Force
    #KeyHistory, 0
    #InstallKeybdHook
    #InstallMouseHook
    #UseHook
    #HotKeyInterval 1 
    #MaxHotkeysPerInterval 127
    SetBatchLines,-1
    SetKeyDelay,-1, 8
    SetControlDelay, -1
    SetMouseDelay, 0
    SetWinDelay,0
    ListLines, Off
    Coordmode, mouse, screen
    SetWorkingDir, %A_Scriptdir%\res
    
    ; INI Files / GUI setup
    INI_Init("settings.ini")
    GoSub, trimImg
    GoSub, trimMain
    GoSub, LoadGUI
    GoSub, ShowGUI
    GoSub, UpdateMainGuiText
    
    ; STATIC Globals. All auto-adjust is based off 1920x1080.
    g_W := A_Screenwidth
    g_H := A_Screenheight
    g_rw1 := Floor(g_W * 140 / 1920) ; max red W
    g_rh1 := Floor(g_H * 6 / 1080) ; min red H
    g_rw2 := Floor(g_W * 80 / 1920) ; mid red W
    g_rh2 := Floor(g_H * 8 / 1080) ; mid red H
    g_rw3 := Floor(g_W * 35 / 1920) ; min red W
    g_rh3 := Floor(g_H * 9 / 1080) ; max red H
    do_recoil := 0
    GoSub, g_scan
    GoSub, img_statics
    
    ; HOTKEY setup
    Gui Hotkeys:Default
    loop, %hotkeys_keys% {
    	if (hotkeys_%A_Index% != "" && hotkeys_%A_Index% != "Not set") {
    		Hotkey, % hotkeys_%A_Index%, func_hotkeys%A_Index%
    	} else {
    		GuiControl, +cRed, hotkeys_%A_Index%
    		GuiControl,, hotkeys_%A_Index%, Not set
    	}
    }
    
    ; First launch
    if (etc_showonce = 1) {
    	etc_showonce := 0
    	INI_Save("settings.ini","etc")
    	Msgbox, 0, Welcome!, First launch detected! Running auto-adjust.`n`nYou can run auto-adjust any time by pressing Ctrl+Alt+F12
    	GoSub, AutoAdjust
    	Msgbox, 4, Set Hotkeys?, Would you like to set your toggle keys?`n`nYou can change them any time by pressing the 'hotkeys' button on the menu bar.
    	IfMsgBox, Yes
    		GoSub, ToggleHotkeyGui
    }
    
    ; -------------------- End auto-execute --------------------
    
    ^!F12::
    AutoAdjust:
    main_shake := Floor(g_W * 15 / 1920)
    main_aimX := Floor(g_W * 67 / 1920)
    main_aimY := Floor(g_H * 43 / 1080)
    img_WhiteH := Floor(g_H * 5 / 1080)
    img_WhiteW := 1
    img_GreyH := Floor(g_H * 5 / 1080)
    img_GreyW := 1
    trg_tX1 := Floor(g_W * 20 / 1920) 
    trg_tX2 := Floor(g_W * 20 / 1920)
    trg_tY1 := Floor(g_H * 10 / 1080)
    trg_tY2 := Floor(g_H * 30 / 1080)
    loop, %sections% {
    	sec := % s%A_Index%
    	INI_Save("settings.ini",sec)
    	INI_Load("settings.ini",sec)
    }
    file := "imgprofile\" . img_profile . ".ini"
    INI_Save(file,"img")
    file := "mainprofile\" . main_profile . ".ini"
    INI_Save(file,"main")
    return
    
    ; Hotkey funcs
    
    func_hotkeys1: ; master on / off
    Keywait, %hotkeys_1%, U
    lockOn := ""
    lock2 := ""
    b := 1
    Gui Main:Default
    Gui, submit, nohide
    GoSub, UpdateMainGuiText
    if (main_mute = 0) {
    	loop, 2 {
    		Soundbeep, 900, 100
    	}
    }
    loop, {
    	if (GetKeyState("LButton","P") && main_anti = 1) {
    		GoSub, mouseXY
    	}
    	if (GetKeyState("RButton", "P") && main_aimR) 
    	|| (GetKeyState("LButton", "P") && main_aimL) 
    	|| (GetKeyState(main_customkey, "P") && main_aimC = 1)
    	{
    		if (lockOn = "") {
    			GoSub, findTarget
    		} else {
    			GoSub, lockTarget
    		}
    		continue
    	}
    	if (do_recoil = 1) {
    		do_recoil := 0
    	}
    	if (ai = 1) {
    		gosub, g_scan
    	}
    	if (GetKeyState(hotkeys_1, "P")) {
    		Keywait, %hotkeys_1%, U
    		break
    	}
    	Sleep, 1
    }
    b := 0
    Gosub, UpdateMainGuiText
    if (main_mute = 0) {
    	Soundbeep, 900, 100
    }
    return
    
    func_hotkeys2: ; Y MODE, 0 = free, 1 = lock
    Keywait, %hotkeys_2%, Up
    main_yMode := !main_yMode
    IniWrite,%main_yMode%,settings.ini,main,yMode
    file := "mainprofile\" . main_profile . ".ini"
    Iniwrite,%main_yMode%,%file%,main,yMode
    Gosub, UpdateMainGuiText
    if (main_mute = 0) {
    	if (main_yMode = 1) {
    		loop, 2
    			Soundbeep, 700, 100
    	} else {
    		Soundbeep, 700, 100
    	}
    }
    return
    
    func_hotkeys3: ; 2nd Check, 1 = PVP, 2 = PVE, 3 = Both, 4 = None
    Keywait, %hotkeys_3%, Up
    if (main_PVMode < 4) {
    	main_PVMode ++
    	if (main_mute = 0) {
    		bf := 600 - (main_PVMode * 33)
    		Soundbeep, %bf%, 100
    	}
    } else {
    	main_PVMode := 1	
    	if (main_mute = 0) {
    		Soundbeep, 600, 100
    	}
    }
    Iniwrite,%main_PVMode%,settings.ini,main,PVMode
    file := "mainprofile\" . main_profile . ".ini"
    Iniwrite,%main_PVMode%,%file%,main,PVMode
    GoSub, UpdateMainGuiText
    return
    
    func_hotkeys4: ; Triggerbot on / off
    Keywait, %hotkeys_4%, Up
    main_trgMode := !main_trgMode
    iniwrite,%main_trgMode%,settings.ini,main,trgMode
    file := "mainprofile\" . main_profile . ".ini"
    Iniwrite,%main_trgMode%,%file%,main,trgMode
    GoSub, UpdateMainGuiText
    if (main_mute = 0) {
    	if (main_trgMode = 1) {
    		loop, 2 {
    			Soundbeep, 420, 100
    		}
    	} else {
    		Soundbeep, 420, 100
    	}
    }
    return
    
    func_hotkeys5: ; Anti-recoil on / off
    Keywait, %hotkeys_5%, Up
    main_anti := !main_anti
    iniwrite,%main_anti%,settings.ini,main,anti
    file := "mainprofile\" . main_profile . ".ini"
    Iniwrite,%main_anti%,%file%,main,anti
    GoSub, UpdateMainGuiText
    if (main_mute = 0) {
    	if (main_anti = 1) {
    		loop, 2 {
    			Soundbeep, 370, 100
    		}
    	} else {
    		Soundbeep, 370, 100
    	}
    }
    return
    
    ; ******************************************************************
    ; Main bot functions:
    
    g_scan: ; set normal scan area
    ai := 0
    X1 := 0 + (g_W * (main_scanX / 10))
    Y1 := 0 + (g_H * (main_scanY / 10))
    X2 := g_W - (g_W * (main_scanX / 10))
    Y2 := g_H - (g_H * (main_scanY / 10))
    return
    
    img_statics: ; only needs to be called on save/load
    t := 0 + img_timeout * 1000
    g_minv := Floor(g_W * (img_abs / 100) * 150 / 1920)
    return
    
    ai_scan: ; set "ai" scan area (tunnel vision)
    ai := 1
    X1 := aX - (g_W * 150 / 1920)
    X2 := aX + g_rw1 + (g_W * 100 / 1920)
    Y1 := aY - (g_H * 90 / 1080)
    Y2 := aY + g_rh2 + (g_H * 90 / 1080)
    return
    
    ai_timeout: ; force unlock
    lockOn := ""
    return
    
    findTarget: ; first scan for red bars
    loop, 3 {
    	i := A_Index
    	v1 := "img_Red" . i . "t",v1:=%v1%
    	v2 := "g_rw" . i,v2:=%v2%
    	v3 := "g_rh" . i,v3:=%v3%
    	imagesearch, aX, aY, %X1%, %Y1%, %X2%, %Y2%, *%v1% *w%v2% *h%v3% bmp\1.bmp
    	if (ErrorLevel = 0 && main_PVMode != 4) {
    		GoSub, scan2
    		if (ErrorLevel = 0) {
    			lockOn := i
    			retry := 0
    			GoSub, ai_scan
    			GoSub, mouse1	
    			return
    		}
    	} else if (ErrorLevel = 0 && main_PVMode = 4) {
    		lockOn := i
    		GoSub, mouse1
    		return
    	}
    }
    return
    
    lockTarget: ; lock on scan
    imagesearch, aX, aY, %X1%, %Y1%, %X2%, %Y2%, *%v1% *w%v2% *h%v3% bmp\1.bmp
    if (ErrorLevel = 0) {
    	GoSub, scan2
    	if (ErrorLevel = 0) {
    		SetTimer, ai_timeout, -%t%
    		GoSub, ai_scan
    		GoSub, mouse1
    		retry := 0
    		return
    	}
    }
    if (lockOn = "1") {
    	if (v2 > g_minv) {
    		v2 := Abs(v2 * (100 - (img_reduc / 2)) / 100) ; less aggressive width reduc for shielded bars
    	}
    	if (v2 <= g_rw2) { ; force unshielded search if we reach low hp
    		v3 := g_rh2
    	}
    } else {
    	if (v2 > g_minv) {
    		v2 := Abs(v2 * (100 - img_reduc) / 100) 
    	}
    }
    if (retry < img_loops) {
    	retry ++
    	if (lockOn = "1" && retry > Floor(img_loops / 2)) { ; less aggressive retry for shielded bars
    		retry := 0
    		lockOn := ""
    	}
    } else {
    	retry := 0
    	lockOn := ""
    }
    return
    
    scan2:
    if (main_PVMode = 1) { ; pvp mode
    	GoSub, scanB1
    	return
    } else if (main_PVMode = 2) { ; pve mode
    	GoSub, scanB2
    	return
    }
    loop, 2 { ; both mode
    	i2 := A_Index
    	if (lock2 = "" || lock2 = i2) {
    		Gosub, ScanB%i2%			
    		if (newX != "" && newY != "") {
    			lock2 := i2
    			return
    		}
    	}
    }
    lock2 := ""
    return
    
    scanB1: ; white search in level-text area
    newX1 := aX - Ceil(g_W * 37 / 1920) - 5
    newX2 := aX - Ceil(g_W * 8 / 1920) + 5
    newY1 := aY - Ceil(g_H * 19 / 1080) - 4
    newY2 := aY + Ceil(g_H * 10 / 1080) + 4
    imagesearch, newX, newY, %newX1%, %newY1%, %newX2%, %newY2%, *%img_WhiteT% *w%img_WhiteW% *h%img_WhiteH% bmp\2.bmp
    return
    
    scanB2: ; grey search in name area (eg "legionary")
    newX1 := aX - Ceil(g_W * 3 / 1920)
    newX2 := aX + Ceil(g_W * 60 / 1920)
    newY1 := aY - Ceil(g_H * 20 / 1080) - 5
    newY2 := aY - Ceil(g_H * 3 / 1080)
    imagesearch, newX, newY, %newX1%, %newY1%, %newX2%, %newY2%, *%img_GreyT% *w%img_GreyW% *h%img_GreyH% bmp\3.bmp
    return
    
    mouse1: ; actual aim function
    AimX := aX - (g_W / 2 ) + main_aimX ; set search result locations to fixed offsets relative to centre of screen
    AimY := aY - (g_H / 2 ) + main_aimY
    if (main_trgMode = 1 && doingClick != 1) {
    	if (AimX > -trg_tX1 && AimX < trg_tX2 && AimY > -trg_tY1 && AimY < trg_tY2) { ; triggerbot zone check
    		doingClick := 1
    		SetTimer, mouse2, -25 ; 0.025 second delay on trigger call
    	}
    }
    if (AimX > main_shake) { ; if target is outside shake zone to the left...
    	DirX := main_sen / 10
    } else if (AimX > 0) { ; inside shake zone...
    	DirX := main_sen / 15
    } else if (AimX < -main_shake) { ; outside to the right...
    	DirX := (-main_sen) / 10
    } else if (AimX < 0) { ; inside
    	DirX := (-main_sen) / 15
    }
    if (AimY > 0) { ; target Y is below
    	DirY := main_sen / 12
    } else if (AimY < 0) { ; above
    	DirY := (-main_sen) / 12
    }
    MoveX := Ceil(( AimX * DirX ** ( 1 ))) * DirX ; relative speed based on distance. DirX/Y is called twice to retain +/- direction.
    MoveY := Ceil(( AimY * DirY ** ( 1 ))) * DirY * main_yMode
    DllCall("mouse_event", uint, 1, int, MoveX, int, MoveY, uint, 0, int, 0) ; mouse move
    return
    
    mouse2:
    DllCall("mouse_event", uint, 2, int, x, int, y, uint, 0, int, 0) ; L button down
    if (main_anti = 1) {
    	GoSub, mouseXY
    }
    Random, r, 1, 1.2 ; 1 to 1.2 randomizer (never below hold time)
    d := trg_tFreq * r
    SetTimer, mouse3, -%d%
    return
    
    mouse3:
    DllCall("mouse_event", uint, 4, int, x, int, y, uint, 0, int, 0) ; L button up
    doingClick := 0
    return
    
    mouseXY: ; anti-recoil. Credits: Digi7aL. Randomizer by me.
    if (do_recoil = 0) {
    	do_recoil := 1
    	x := 0 + main_antiX
    	y := 0 + main_antiY
    	Random, r, 0.8, 1.2
    	d := r * 25
    	SetTimer, doMouseXY, -%d%
    }
    return
    
    doMouseXY:
    DllCall("mouse_event", uint, 1, int, main_antiX, int, main_antiY, uint, 0, int, 0)
    return
    
    
    
    ; **********************************************************************************************
    ; The rest of the script is just GUI and INI functions.
    
    
    ; ------ INI FUNCTIONS ------
    ; CREDITS: engunneer, edited by myself somewhat. 
    
    ; globals: sections, sNumber, section_keys, section_kNumber, section_key
    
    ; By default, these values should be:
    ; sections = 4
    ; s1 = main, etc
    ; main_keys = 14, etc
    ; main_k1 = sen, etc
    ; main_sen = 6, etc
    
    INI_Init(inifile) {
    	local key
    	sections := 0
    	loop, read, %inifile%
    	{
    		if (regexmatch(A_Loopreadline,"\[(\w+)]")) { ; line is a section name
    			sections+= 1
    			s%sections%:=regexreplace(A_loopreadline,"(\[)(\w+)(])","$2")
    			sec := s%sections%
    			%sec%_keys := 0
    			
    		} else if (regexmatch(A_LoopReadLine,"(\w+)=(.*)")) { ; line is a key=value pair
    			%sec%_keys+= 1
    			key:=%sec%_keys
    			%sec%_k%key%:=regexreplace(A_LoopReadLine,"(\w+)=(.*)","$1")
    			var:=sec "_" %sec%_k%key%
    			iniread,%var%,%inifile%,%sec%,% %sec%_k%key%	
    		}
    	}
    }
    
    INI_Load(inifile,sec) { ; requires file location and section name
    	Gui %sec%:default
    	loop,% %sec%_keys
    	{
    		var := sec "_" %sec%_k%A_index%
    		iniread,temp,%inifile%,%sec%,% %sec%_k%A_index%
    		if (temp != "ERROR") {
    			%var% := temp
    			GuiControl,, %var%, % %var%
    		} else {
    			msgbox, Error loading settings value "%var%". Please select a new file:
    			GoSub, imgprofileLoad
    			break
    		}
    	}		
    }
    
    INI_Save(inifile,sec) { ; requires file location and section name
    	loop,% %sec%_keys
    	{
    		var:= sec "_" %sec%_k%A_index%,var2:=%var%
    		iniwrite,%var2%,%inifile%,%sec%,% %sec%_k%A_index%
    	}
    }
    return
    
    
    ; ------ GUI ELEMENT FUNCTIONS ------
    
    SetHotKey:
    ID := A_Guicontrol
    SetCustomKey(temp,temperror)
    if (temperror = 0) {
    	loop, 4 {
    		v := hotkeys_%A_Index%
    		if (temp == v) {
    			msgbox, 16, Already in use, %v% is already in use. Please unbind it first.
    			return
    		}
    	}	
    	Gui Hotkeys:Default
    	if (hotkeys_%ID% != "" && hotkeys_%ID% != "Not set") {
    		Hotkey, % hotkeys_%ID%, off
    	}
    	hotkeys_%ID% := temp
    	INI_Save("settings.ini","hotkeys")
    	GuiControl, +cLime, hotkeys_%ID%
    	GuiControl,, hotkeys_%ID%, % hotkeys_%ID%
    	Hotkey, % hotkeys_%ID%, func_hotkeys%ID%, on
    }
    GoSub, UpdateMainGuiText
    return
    
    SetAimKey:
    SetCustomKey(temp,temperror)
    if (temperror = 0) {
    	main_customkey := temp
    	INI_Save("settings.ini","main")
    	Gui Main:Default
    	GuiControl,, main_customkey, %main_customkey%
    }
    return
    
    SetCustomKey(ByRef temp, ByRef temperror) {
    	global b
    	temperror := 0
    	if (b = 1) {
    		temperror := 1
    		msgbox, Please turn off the bot before changing custom key.
    		return
    	}
    	Mousegetpos, xpos, ypos
    	xpos += -50
    	prompt :=
    	(
    	"Please type the name of the key you wish to bind.`n
        A-Z, 0-9, F1-F99, Numpad0-Numpad9
        For other keys, type the literal key name (eg. CapsLock, PgDn, LCtrl, RAlt, etc)
        Mouse: MButton (middle), XButton1 (back), XButton2 (foward)`n"
    	)
    	InputBox, temp, Custom key, %prompt%, , 545, 225, %xpos%, %ypos%, , , 
    	if (ErrorLevel || temp = "") {
    		temperror := 1
    		return
    	}
    	Static ManualList := "CapsLock,Shift,LCtrl,RCtrl,LAlt,RAlt,Tab,Space,MButton,XButton1,XBUtton2,PgUp,PgDn,Ins,Home,Del,End,``,Enter,Up,Down,Left,Right,"
    	if temp not in %ManualList%
    	{
    		if !(StrLen(temp) = 1 && RegExMatch(temp,"[[:alnum:]]+",match))
    		&& !(StrLen(temp) < 4 && RegExMatch(temp,"i)F[[:digit:]]+",match))
    		&& !(StrLen(temp) = 7 && RegExMatch(temp,"i)Numpad[[:digit:]]",match)) 
    		{
    			temperror := 1
    			MsgBox, 16, Error!, "%temp%" may not be a valid key name.`nIt must be a single key name only.`nYou can attempt to enter the key name manually in the 'res\settings.ini' file if you want.
    			return
    		}
    	}
    	StringUpper, temp, temp, T
    }
    
    SaveMain:
    Gui Main:Default
    Gui submit, nohide
    INI_Save("settings.ini","main")
    GuiControl,, MainSaveText, Saved!
    SetTimer, RevertText, -1000
    GoSub, UpdateOSD
    return
    
    SaveImg:
    Gui Img:Default
    Gui submit, nohide
    INI_Save("settings.ini","img")
    file := "imgprofile\" . img_profile . ".ini"
    INI_Save(file,"img")
    GoSub, UpdateImg
    GuiControl,, ImgSaveText, Saved!
    SetTimer, RevertText, -1000
    GoSub, img_statics
    return
    
    SaveTrg:
    Gui Trg:Default
    Gui submit, nohide
    INI_Save("settings.ini","trg")
    GuiControl,, TrgSaveText, Saved!
    SetTimer, RevertText, -1000
    return
    
    imgprofileLoad:
    Thread, NoTimers
    FileSelectFile, SelectedFile, 3, imgprofile\, Open a file, Settings files (*.ini)
    Thread, NoTimers, false
    SplitPath, SelectedFile, name, dir, ext, name_no_ext, drive
    if (SelectedFile = "" || ext != "ini") {
    	return
    }
    img_profile := name_no_ext
    file := "imgprofile\" . img_profile . ".ini"
    INI_Load(file,"img")
    INI_Save("settings.ini","img")
    Gui Img:Default
    GoSub, UpdateImg
    GoSub, img_statics
    return
    
    imgprofileSaveAs:
    Thread, NoTimers
    FileSelectFile, SelectedFile, S, imgprofile\new.ini, Save as:, Settings files (*.ini)
    Thread, NoTimers, false
    if (SelectedFile = "") {
    	return
    }
    SplitPath, SelectedFile, name, dir, ext, name_no_ext, drive
    if (ext != "ini") {
       name=%name_no_ext%.ini
    }
    if (FileExist("imgprofile\"name)) {
    	Msgbox, 4, Are you sure?, Overwrite existing file?
    	IfMsgBox, No
    		return
    }
    img_profile := name_no_ext
    Gui Img:default
    Gui submit, nohide
    INI_Save("settings.ini","img")
    file := "imgprofile\" . img_profile . ".ini"
    INI_Save(file,"img")
    INI_Load(file,"img")
    GoSub, UpdateImg
    GoSub, img_statics
    return
    
    mainprofileLoad:
    Thread, NoTimers
    FileSelectFile, SelectedFile, 3, mainprofile\, Open a file, Settings files (*.ini)
    Thread, NoTimers, false
    SplitPath, SelectedFile, name, dir, ext, name_no_ext, drive
    if (SelectedFile = "" || ext != "ini") {
    	return
    }
    main_profile := name_no_ext
    file := "mainprofile\" . main_profile . ".ini"
    INI_Load(file,"main")
    INI_Save("settings.ini","main")
    Gui Main:Default
    GoSub, trimMain
    GuiControl,, mainprofileText, Profile: %mainString%
    Gosub, UpdateMainGuiText
    return
    
    mainprofileSaveAs:
    Thread, NoTimers
    FileSelectFile, SelectedFile, S, mainprofile\new.ini, Save as:, Settings files (*.ini)
    Thread, NoTimers, false
    if (SelectedFile = "") {
    	return
    }
    SplitPath, SelectedFile, name, dir, ext, name_no_ext, drive
    if (ext != "ini") {
       name=%name_no_ext%.ini
    }
    if (FileExist("mainprofile\"name)) {
    	Msgbox, 4, Are you sure?, Overwrite existing file?
    	IfMsgBox, No
    		return
    }
    main_profile := name_no_ext
    Gui Main:default
    Gui submit, nohide
    GoSub, trimMain
    GuiControl,, mainprofileText, Profile: %mainString%
    INI_Save("settings.ini","main")
    file := "mainprofile\" . main_profile . ".ini"
    INI_Save(file,"main")
    INI_Load(file,"main")
    Gosub, UpdateMainGuiText
    return
    
    tolShift:
    Gui Img:Default
    loop, 3
    {
    	var:= "img_Red" . A_index . "t",var2:=%var%
    	var2 += A_Guicontrol
    	GuiControl,, %var%, %var2%
    	img_Red%A_index%t := var2
    }
    return
    
    MainGuiToggle:
    Gui Main:Default
    if (miniMode != 1) {
    	miniMode := 1
    	Gui, Show, w270 h337 NoActivate, %WinTitle%
    	GuiControl,, MiniButton, ... (main)
    } else {
    	miniMode := 0
    	Gui, Show, w270 h133 NoActivate, %WinTitle%
    	GuiControl,, MiniButton, Main settings
    }
    return
    
    toggleIMG:
    if (!showingImgBox) {
    	GoSub, showImg
    } else {
    	GoSub, hideImg
    }
    return
    
    toggleOSD:
    if (drawing != 1) {
    	drawing := 1
    	GoSub, UpdateOSD
    } else { 
    	drawing := 0
    	Gui OSD:Default
    	Gui, Cancel
    }
    return
    
    toggleTrgGui:
    if (showingTrgBox != 1) {
    	GoSub, showTrg
    } else {
    	GoSub, hideTrg
    }
    return
    
    ToggleHotkeyGui:
    Gui Hotkeys:Default
    if (showingHotkeys != 1) {
    	showingHotkeys := 1
    	Mousegetpos, xpos, ypos
    	xpos += 10
    	ypos += 10
    	Gui, show, w225 h165 x%xpos% y%ypos%, Hotkeys:
    } else {
    	showingHotkeys := 0
    	Gui, cancel
    }
    return
    
    ImgGuiEscape:
    ImgGuiClose:
    GoSub, hideImg
    return
    
    TrgGuiEscape:
    TrgGuiClose:
    GoSub, hideTrg
    return
    
    HotkeysGuiEscape:
    HotkeysGuiClose:
    GoSub, ToggleHotkeyGui
    return
    
    Tray:
    Gui Main:Default
    WinHide
    return
    
    Restore:
    Gui Main:Default
    gui, Main: +lastfound
    WinShow
    WinRestore
    return
    
    MainGuiEscape:
    MainGuiClose:
    Exit:
    ExitApp
    return
    
    GuiMove:
    Gui Main:Default
    PostMessage, 0xA1, 2,,, A
    return
    
    MuteSub:
    main_mute := !main_mute
    Iniwrite, %main_mute%, settings.ini, main, mute
    return
    
    ; ------ OTHER GUI FUNCTIONS ------
    
    UpdateImg:
    Gui Img:Default
    GuiControl,, WhitePic, *w%img_WhiteW% *h%img_WhiteH% bmp\2.bmp
    GuiControl,, GreyPic, *w%img_GreyW% *h%img_GreyH% bmp\3.bmp
    return
    
    UpdateOSD:
    OSDx := 0 + (g_W * (main_scanX / 10))
    OSDy := 0 + (g_H * (main_scanY / 10))
    OSDw := g_W - (g_W * (main_scanX / 5))
    OSDh := g_H - (g_H * (main_scanY / 5))
    Gui OSD:Default
    Gui, Show, x%OSDx% y%OSDy% w%OSDw% h%OSDh% NoActivate
    Gui, +lastfound
    ID := WinExist()
    WinSet, ExStyle, +0x80020, ahk_id %ID%
    return
    
    showImg:
    showingImgBox := 1
    Gui Main:Default
    Gui,+LastFound
    GuiControl,, imgButton, ... (img)
    WinGetPos,newWinx,newWiny,newWinw,newWinh
    imgX := newWinx
    imgY := newWiny + newWinh
    Gui Img:Default
    Gui, Show, w250 h302 x%imgX% y%imgY%, %WinTitle%
    Sleep, 25
    GoSub, UpdateImg
    return
    
    hideImg:
    Gui Img:Default
    Gui, cancel
    showingImgBox := 0
    Gui Main:Default
    GoSub, trimImg
    GuiControl,, imgButton, img: %imgString%
    return
    
    trimImg:
    imgString := img_profile
    len := StrLen(img_profile)
    if (len > 6) {
    	trim := len - 5
    	StringTrimRight, imgString, imgString, %trim%
    	imgString := imgString . ".."
    }
    return
    
    trimMain:
    mainString := main_profile
    len := StrLen(mainString)
    if (len > 13) {
    	trim := len - 12
    	StringTrimRight, mainString, mainString, %trim%
    	mainString := mainString . ".."
    }
    return
    
    showTrg:
    showingTrgBox := 1
    Gui Main:Default
    Gui, +LastFound,
    GuiControl,, trgButton, ... (trg)
    WinGetPos,newWinX,newWiny,newWinw,newWinh
    trgGuiX := newWinx + newWinw
    trgGuiY := newWiny
    Gui Trg:Default
    Gui, Show, w248 h317 x%trgGuiX% y%trgGuiY%, %winTitle%
    return
    
    hideTrg:
    Gui Trg:Default
    Gui, cancel
    showingTrgBox := 0
    Gui Main:Default
    GuiControl,, trgButton, Triggerbot
    return
    
    RevertText:
    Gui Main:Default
    GuiControl,, MainSaveText, Save
    Gui Img:Default
    GuiControl,, ImgSaveText, Apply changes
    Gui Trg:Default
    GuiControl,, TrgSaveText, Save
    return
    
    UpdateMainGuiText:
    Gui Main:Default
    if (b = 1) { 
    	GuiControl, +cLime, OnOff
    	GuiControl,, OnOff, [%hotkeys_1%] Bot: ON
    } else {
    	GuiControl, +cRed, OnOff
    	GuiControl,, OnOff, [%hotkeys_1%] Bot: OFF	
    }
    if (main_yMode = 1) {
    	GuiControl, +cGreen, Ylock
    	GuiControl,, Ylock, [%hotkeys_2%] Y Mode: LOCK
    } else if (main_yMode = 0) {
    	GuiControl, +cMaroon, Ylock
    	GuiControl,, Ylock, [%hotkeys_2%] Y Mode: FREE
    }
    if (main_PVMode = 1) {
    	GuiControl, +cGreen, PVText
    	GuiControl,, PVText, [%hotkeys_3%] 2nd Check: PVP
    } else if (main_PVMode = 2) {
    	GuiControl, +cTeal, PVText
    	GuiControl,, PVText, [%hotkeys_3%] 2nd Check: PvE
    } else if (main_PVMode = 3) {
    	GuiControl, +cOlive, PVText
    	GuiControl,, PVText, [%hotkeys_3%] 2nd Check: Both
    } else if (main_PVMode = 4) {
    	GuiControl, +cMaroon, PVText
    	GuiControl,, PVText, [%hotkeys_3%] 2nd Check: None	
    }
    if (main_trgMode = 1) {
    	GuiControl, +cGreen, TrigText
    	GuiControl,, TrigText, [%hotkeys_4%] Triggerbot: ON
    } else {
    	GuiControl, +cMaroon, TrigText
    	GuiControl,, TrigText, [%hotkeys_4%] Triggerbot: OFF
    }
    if (main_anti = 1) {
    	GuiControl, +cGreen, AntiText
    	GuiControl,, AntiText, [%hotkeys_5%] Anti-Recoil: ON
    } else {
    	GuiControl, +cMaroon, AntiText
    	GuiControl,, AntiText, [%hotkeys_5%] Anti-Recoil: OFF
    }	
    return
    
    ;  Setup all GUIs on load:
    
    LoadGUI:
    ; main gui
    Gui Main:Default
    Gui, -Caption +Border -DPIscale
    Gui, Color, 000000
    Gui, Add, Picture, x0 y25 hwndhpic +0xE
    bgPic := "bmp\gui.bmp"
    hbmp := DllCall("LoadImage", "uint", 0, "str", bgPic, "uint", 0x0, "int", 0, "int", 0, "uint", 0x10|0x2000)
    SendMessage, 0x172, 0x0, hbmp,, ahk_id %hpic%
    Gui, Font, s10 cBlack
    Gui, Add, Text, x4 y4 w134 h21 gGuiMove cWhite, FAT AA 2.0
    Gui, Font, s8
    Gui, Add, Button, w60 h17 x138 y4 gToggleHotkeyGui, hotkeys
    Gui, Add, Button, w30 h17 x202 y4 gTray, tray
    Gui, Add, Button, w30 h17 x236 y4 gExit, exit
    Gui, Font, s9 cWhite
    Gui, Add, Button, w69 h28 x10 y35 gMainGuiToggle vMiniButton, Main settings
    Gosub, trimImg
    Gui, Add, Button, w69 h28 x10 y66 gtoggleIMG vimgButton, img: %imgString%
    Gui, Add, Button, w69 h28 x10 y97 gtoggleTrgGui vtrgButton, Triggerbot
    Gui, Font, s11
    Gui, Add, Text, w130 x85 y33 vOnOff cRed
    Gui, Add, Text, w130 x85 y52 vYlock
    Gui, Add, Text, w150 x85 y71 vPVText
    Gui, Add, Text, w170 x85 y90 vTrigText
    Gui, Add, Text, w170 x85 y109 vAntiText
    Gui, Font, s9
    Gui, Add, Checkbox, x218 y36 gMuteSub vMute Checked%main_mute%, Mute
    Gui, Font, s10 cWhite
    Gui, Add, Text, x37 y148, Speed:
    Gui, Add, Text, x13 y173, Anti-Shake:
    Gui, Add, Text, x44 y198, Aim X:
    Gui, Add, Text, x44 y223, Aim Y:
    Gui, Add, Text, x160 y148, Scan X:
    Gui, Add, Text, x160 y173, Scan Y:
    Gui, Add, Text, x152 y198, Recoil X:
    Gui, Add, Text, x152 y223, Recoil Y:
    Gui, Font, S11 cBlack
    Gui, Add, Edit, w35 h20 x90 y145 vmain_sen, %main_sen%
    Gui, Add, Edit, w35 h20 x90 y170 vmain_shake, %main_shake%
    Gui, Add, Edit, w35 h20 x90 y195 vmain_aimX, %main_aimX%
    Gui, Add, Edit, w35 h20 x90 y220 vmain_aimY, %main_aimY%
    Gui, Add, Edit, w35 h20 x215 y145 vmain_scanX, %main_scanX%
    Gui, Add, Edit, w35 h20 x215 y170 vmain_scanY, %main_scanY%
    Gui, Add, Edit, w35 h20 x215 y195 vmain_antiX, %main_antiX%
    Gui, Add, Edit, w35 h20 x215 y220 vmain_antiY, %main_antiY%
    Gui, Font, s9 cWhite
    Gui, Add, Text, x10 y250, Activate:
    Gui, Add, Checkbox, x56 y250 vmain_aimL checked%main_aimL%, L Click
    Gui, Add, Checkbox, x115 y250 vmain_aimR checked%main_aimR%, R Click
    Gui, Add, Checkbox, w20 h20 x178 y247 vmain_aimC checked%main_aimC% -wrap, %A_space%
    Gui, Font, s9
    Gui, Add, Button, w56 h20 x198 y247 gSetAimKey vmain_customKey, %main_customkey%
    Gui, Add, Checkbox, x30 y277 gtoggleOSD, Draw Scan Area
    Gui, Add, Text, x145 y277 cLime w115 vmainprofileText, Profile: %mainString%
    Gui, Add, Button, w65 h19 x20 y300 gmainprofileSaveAs, Save As...
    Gui, Add, Button, w50 h19 x90 y300 gmainprofileLoad, Load
    Gui, Add, Button, w105 h19 x145 y300 gSaveMain vMainSaveText Default, Save
    Gui, +Lastfound
    Menu, Tray, NoStandard
    Menu, Tray, Add, Exit, Exit
    Menu, Tray, Add, Restore, Restore
    Menu, Tray, Default, Restore
    Menu, Tray, Click, 2
    ; imagesearch gui
    Gui Img:Default
    Gui, -DPIScale
    Gui, Color, 000000
    Gui, Add, Picture, x0 y0 hwndhpic2 +0xE
    ImgbgPic := "bmp\imgGui.bmp"
    hbmp := DllCall("LoadImage", "uint", 0, "str", ImgbgPic, "uint", 0x0, "int", 0, "int", 0, "uint", 0x10|0x2000)
    SendMessage, 0x172, 0x0, hbmp,, ahk_id %hpic2%
    Gui, Font, s9
    Gui, Add, Text, w70 h20 x67 y10 cWhite vimg_profile, %img_profile%
    Gui, Add, Button, h20 w140 x7 y31 gSaveImg vImgSaveText Default, Apply changes
    Gui, Add, Button, h18 w70 x165 y9 gimgprofileLoad, Load
    Gui, Add, Button, h18 w70 x165 y33 gimgprofileSaveAs, Save As...
    Gui, Font, s9 cWhite
    Gui, Add, Text, x55 y70, Retry Limit:
    Gui, Add, Text, x51 y92, Aggression:
    Gui, Add, Text, x44 y114, Minimum HP:
    Gui, Add, Text, x34 y136, Memory length:
    Gui, Add, Text, x145 y70, attempts
    Gui, Add, Text, x145 y92, `%
    Gui, Add, Text, x145 y114, `%
    Gui, Add, Text, x145 y136, seconds
    Gui, Font, cBlack
    Gui, Add, Edit, x113 y68 h17 w25 vimg_loops, %img_loops%
    Gui, Add, Edit, x113 y90 h17 w25 vimg_reduc, %img_reduc%
    Gui, Add, Edit, x113 y112 h17 w25 vimg_abs, %img_abs% 
    Gui, Add, Edit, x113 y134 h17 w25 vimg_timeout, %img_timeout%
    Gui, Font, s11
    Gui, Add, Text, x25 y177 cRed, Color Tolerance:
    Gui, Font, s9
    Gui, Add, Button, h16 w24 x69 y200 gtolShift, -5
    Gui, Add, Button, h16 w24 x99 y200 gtolShift, +5
    Gui, Add, Text, x178 y168 cRed, High HP
    Gui, Add, Text, x178 y193 cRed, Mid HP
    Gui, Add, Text, x178 y218 cRed, Low HP
    Gui, Font, s10 cBlack
    Gui, Add, Edit, x138 y165 w30 h18 vimg_Red1t, %img_Red1t% 
    Gui, Add, Edit, x138 y190 w30 h18 vimg_Red2t, %img_Red2t%
    Gui, Add, Edit, x138 y215 w30 h18 vimg_Red3t, %img_Red3t%
    Gui, Font, cWhite
    Gui, Add, Text, w96 h18 x26 y240, White (PvP):
    Gui, Add, Text, w92 h18 x155 y240, Grey (PvE):
    Gui, Font, s9
    Gui, Add, Text, x20 y259, Tolerance:
    Gui, Add, Text, x15 y279, W:
    Gui, Add, Text, x60 y279, H:
    Gui, Add, Text, x140 y259, Tolerance:
    Gui, Add, Text, x135 y279, W:
    Gui, Add, Text, x180 y279, H:
    Gui, Font, s9 cBlack
    Gui, Add, Picture, x105 y245 w2 h2 vwhitepic, bmp\2.bmp
    Gui, Add, Edit, w20 h16 x76 y260 vimg_WhiteT, %img_WhiteT%
    Gui, Add, Edit, w20 h16 x32 y278 vimg_WhiteW, %img_WhiteW%
    Gui, Add, Edit, w20 h16 x76 y278 vimg_whiteH, %img_WhiteH%
    Gui, Font, s10 cSilver
    Gui, Font, s9 cBlack
    Gui, Add, Picture, x228 y245 w2 h2 vgreypic, bmp\3.bmp
    Gui, Add, Edit, w25 h16 x197 y260 vimg_GreyT, %img_GreyT%
    Gui, Add, Edit, w25 h16 x151 y278 vimg_GreyW, %img_GreyW%
    Gui, Add, Edit, w25 h16 x197 y278 vimg_GreyH, %img_GreyH%
    ; Trigger gui
    Gui Trg:Default
    Gui, -DPIScale
    Gui, Color, 000000
    Gui, Add, Picture, x0 y0 hwndhpic3 +0xE
    TrgbgPic := "bmp\trgGui.bmp"
    hbmp := DllCall("LoadImage", "uint", 0, "str", TrgbgPic, "uint", 0x0, "int", 0, "int", 0, "uint", 0x10|0x2000)
    SendMessage, 0x172, 0x0, hbmp,, ahk_id %hpic3%
    Gui, Add, Button, Default gSaveTrg vTrgSaveText w100 h20 x75 y45, Save
    Gui, Font, cWhite s10
    Gui, Add, Text, x36 y84, Hold time / fire rate: 
    Gui, Add, Text, h22 x190 y85, ms 
    Gui, Font, cBlack 
    Gui, Add, Edit, w30 h20 x155 y82 vtrg_tFreq, %trg_tFreq%
    Gui, Font, cRed
    Gui, Add, Text, x72 y110, Trigger fire zone:
    Gui, font, s9 cWhite
    Gui, Add, Text, x29 y140, X1 (left): 
    Gui, Add, Text, x138 y140, X2 (right): 
    Gui, Add, Text, x29 y170, Y1 (up):
    Gui, Add, Text, x130 y170, Y2 (down): 
    Gui, font, cBlack
    Gui, Add, Edit, w22 h18 x79 y138 vtrg_tX1, %trg_tX1%
    Gui, Add, Edit, w22 h18 x196 y138 vtrg_tX2, %trg_tX2%
    Gui, Add, Edit, w22 h18 x79 y167 vtrg_tY1, %trg_tY1%
    Gui, Add, Edit, w22 h18 x196 y167 vtrg_tY2, %trg_tY2%
    ; hotkey gui
    Gui Hotkeys:Default
    Gui, -DPIScale
    Gui, Color, 000000
    Gui, Font, cWhite s10
    Gui, Add, Text, x10 y10, Set your toggle keys:
    Gui, Add, Text, x10 y50, Main On / Off:
    Gui, Add, Text, x10 y70, Y Mode:
    Gui, Add, Text, x10 y90, 2nd Check:
    Gui, Add, Text, x10 y110, Triggerbot:
    Gui, Add, Text, x10 y130, Anti-Recoil:
    Gui, Font, cLime s10
    Gui, Add, Text, w65 x110 y50 vhotkeys_1, %hotkeys_1%
    Gui, Add, Text, w65 x110 y70 vhotkeys_2, %hotkeys_2%
    Gui, Add, Text, w65 x110 y90 vhotkeys_3, %hotkeys_3%
    Gui, Add, Text, w65 x110 y110 vhotkeys_4, %hotkeys_4%
    Gui, Add, Text, w65 x110 y130 vhotkeys_5, %hotkeys_5%
    Gui, font, cBlack s9 
    Gui, Add, Button, h18 w30 x180 y50 gSetHotKey, 1
    Gui, Add, Button, h18 w30 x180 y70 gSetHotKey, 2
    Gui, Add, Button, h18 w30 x180 y90 gSetHotKey, 3
    Gui, Add, Button, h18 w30 x180 y110 gSetHotKey, 4
    Gui, Add, Button, h18 w30 x180 y130 gSetHotKey, 5
    ; OSD (draw scan area)
    Gui OSD:Default 
    Gui, +AlwaysOnTop -Caption +ToolWindow +Border -DPIScale
    Gui, Color, EEAA99
    Gui, +Lastfound
    WinSet, TransColor, EEAA99
    return
    
    ShowGUI:
    Random, r, 5, 10
    Loop %r% {
    	Random, Var,97,122
    	WinTitle.=Chr(Var)
    }
    mousegetpos, xpos, ypos
    xpos += -50
    ypos += -50
    Gui Main:default
    Gui, Show, w270 h133 x%xpos% y%ypos%, %WinTitle%
    return
    
    ; end


    OMG WORK LIKE A GOD!!!!! Need to work with controllers !

  7. #6
    hydrolisk's Avatar
    Join Date
    Oct 2018
    Gender
    male
    Posts
    10
    Reputation
    10
    Thanks
    2

    Wink LOVE IT!

    Keep up the awesome work, If you could please add in a feature where you can set presets for your aimx and aimy and bind them to any key so I can adjust on the fly! that would be amazing!

  8. #7
    fatdoobie's Avatar
    Join Date
    Jul 2018
    Gender
    male
    Posts
    159
    Reputation
    10
    Thanks
    511
    Quote Originally Posted by 3andrew View Post
    Doing great work! I'm going to have to give yours a go now. Admittedly I've been sticking with mine simply because I have it so dialed in but you have been stacking new features like Apple stacks money.
    You the man dude! Without you I would have never bothered to try fix it for Forsaken xD

    Feel free to use any of my code if you want, it's all commented and should be fairly easy to understand (I hope!)

    Quote Originally Posted by znyn View Post
    Doesn't seem to be working for me, where as the previous version did. Strange.
    Give us some more info and we might be able to help. Whats your res? etc

    Quote Originally Posted by mazxz View Post
    OMG WORK LIKE A GOD!!!!! Need to work with controllers !
    its possible

    Quote Originally Posted by hydrolisk View Post
    Keep up the awesome work, If you could please add in a feature where you can set presets for your aimx and aimy and bind them to any key so I can adjust on the fly! that would be amazing!
    its possible

    -----

    The 2.0 should be completely stable now, I just updated the source in this thread to the bugfix version, so make sure you replace the .ahk file with the new source. If you don't, they are fairly similar anyway, it's just a few minor things.

    Also, keep in mind guys, you can all share your profiles with each other, just copy+paste the mainprofile or imgprofile file and tell people what it's for.

    Once you load someone else's profile, simply press Ctrl+Alt+F12 to fix the auto adjust (will overwrite any auto-adjusted settings they've changed though, keep that in mind).

    Eg, I was noticing some false-aim on some red/brown PvE maps, I found these settings more reliable...

    Code:
    [img]
    profile=PvE General
    loops=4
    reduc=5
    timeout=1
    abs=15
    Red1t=60
    Red2t=55
    Red3t=45
    WhiteW=1
    WhiteH=5
    WhiteT=5
    GreyW=1
    GreyH=5
    GreyT=25
    Last edited by fatdoobie; 10-16-2018 at 12:17 AM.

  9. The Following User Says Thank You to fatdoobie For This Useful Post:

    yashspartan1 (10-16-2018)

  10. #8
    yashspartan1's Avatar
    Join Date
    Feb 2011
    Gender
    male
    Location
    America
    Posts
    83
    Reputation
    10
    Thanks
    3
    For handcannons, anyone no a decent anti-recoil setting? Mostly for ace of spades.

  11. #9
    ricardmark1's Avatar
    Join Date
    Jul 2018
    Gender
    male
    Posts
    132
    Reputation
    10
    Thanks
    9
    Hand cannon is still problematic ofc.

  12. #10
    fatdoobie's Avatar
    Join Date
    Jul 2018
    Gender
    male
    Posts
    159
    Reputation
    10
    Thanks
    511
    Quote Originally Posted by yashspartan1 View Post
    For handcannons, anyone no a decent anti-recoil setting? Mostly for ace of spades.
    Not sure what res you're on, but I'm using about X = -5, Y = +40. Makes Coup more stable than Trust

    Quote Originally Posted by ricardmark1 View Post
    Hand cannon is still problematic ofc.
    No magic fix for it. Anti-recoil doesn't stop hand cannon going in front of the red bar. Try all sorts of settings though, retry/aggression can help for hand cannons since you are "breaking" the bar and the script can't find the full HP bar anymore.

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

    edit: nvm, old pve method was better
    Last edited by fatdoobie; 10-16-2018 at 09:24 AM.

  13. #11
    ricardmark1's Avatar
    Join Date
    Jul 2018
    Gender
    male
    Posts
    132
    Reputation
    10
    Thanks
    9
    Quote Originally Posted by fatdoobie View Post
    Not sure what res you're on, but I'm using about X = -5, Y = +40. Makes Coup more stable than Trust



    No magic fix for it. Anti-recoil doesn't stop hand cannon going in front of the red bar. Try all sorts of settings though, retry/aggression can help for hand cannons since you are "breaking" the bar and the script can't find the full HP bar anymore.

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

    For those of you who use the script in PvE, I've been doing some tests with an alternate PvE method, this new one searches in the same area as the white pvp search. Seems just as reliable, except you need only about 15-25 tolerance instead of 25-35, so it should be better.

    New "3.bmp" file ->
    note: for better performance, open the picture in paint and resize to 1x1 pixels.

    New grey check settings:
    H = 10-15? Try a few values.
    W = 1
    Tol = 15-25, try different values.

    New 2.1 script test:
    Code:
    #NoEnv
    #Persistent
    #SingleInstance, Force
    #KeyHistory, 0
    #InstallKeybdHook
    #InstallMouseHook
    #UseHook
    #HotKeyInterval 1 
    #MaxHotkeysPerInterval 127
    SetBatchLines,-1
    SetKeyDelay,-1, 8
    SetControlDelay, -1
    SetMouseDelay, 0
    SetWinDelay,0
    ListLines, Off
    Coordmode, mouse, screen
    SetWorkingDir, %A_Scriptdir%\res
    
    ; INI Files / GUI setup
    INI_Init("settings.ini")
    GoSub, trimImg
    GoSub, trimMain
    GoSub, LoadGUI
    GoSub, ShowGUI
    GoSub, UpdateMainGuiText
    
    ; STATIC Globals. All auto-adjust is based off 1920x1080.
    g_W := A_Screenwidth
    g_H := A_Screenheight
    g_rw1 := Floor(g_W * 140 / 1920) ; max red W
    g_rh1 := Floor(g_H * 6 / 1080) ; min red H
    g_rw2 := Floor(g_W * 80 / 1920) ; mid red W
    g_rh2 := Floor(g_H * 8 / 1080) ; mid red H
    g_rw3 := Floor(g_W * 35 / 1920) ; min red W
    g_rh3 := Floor(g_H * 9 / 1080) ; max red H
    do_recoil := 0
    GoSub, g_scan
    GoSub, img_statics
    
    ; HOTKEY setup
    Gui Hotkeys:Default
    loop, %hotkeys_keys% {
    	if (hotkeys_%A_Index% != "" && hotkeys_%A_Index% != "Not set") {
    		Hotkey, % hotkeys_%A_Index%, func_hotkeys%A_Index%
    	} else {
    		GuiControl, +cRed, hotkeys_%A_Index%
    		GuiControl,, hotkeys_%A_Index%, Not set
    	}
    }
    
    ; First launch
    if (etc_showonce = 1) {
    	etc_showonce := 0
    	INI_Save("settings.ini","etc")
    	Msgbox, 0, Welcome!, First launch detected! Running auto-adjust.`n`nYou can run auto-adjust any time by pressing Ctrl+Alt+F12
    	GoSub, AutoAdjust
    	Msgbox, 4, Set Hotkeys?, Would you like to set your toggle keys?`n`nYou can change them any time by pressing the 'hotkeys' button on the menu bar.
    	IfMsgBox, Yes
    		GoSub, ToggleHotkeyGui
    }
    
    ; -------------------- End auto-execute --------------------
    
    ^!F12::
    AutoAdjust:
    Msgbox, 0, Auto-Adjusting!, Running auto adjust!
    main_shake := Floor(g_W * 15 / 1920)
    main_aimX := Floor(g_W * 67 / 1920)
    main_aimY := Floor(g_H * 43 / 1080)
    img_WhiteH := Floor(g_H * 5 / 1080)
    img_WhiteW := 1
    img_GreyH := Floor(g_H * 10 / 1080)
    img_GreyW := 1
    trg_tX1 := Floor(g_W * 20 / 1920) 
    trg_tX2 := Floor(g_W * 20 / 1920)
    trg_tY1 := Floor(g_H * 10 / 1080)
    trg_tY2 := Floor(g_H * 30 / 1080)
    loop, %sections% {
    	sec := % s%A_Index%
    	INI_Save("settings.ini",sec)
    	INI_Load("settings.ini",sec)
    }
    file := "imgprofile\" . img_profile . ".ini"
    INI_Save(file,"img")
    file := "mainprofile\" . main_profile . ".ini"
    INI_Save(file,"main")
    return
    
    ; Hotkey funcs
    
    func_hotkeys1: ; master on / off
    Keywait, %hotkeys_1%, U
    lockOn := ""
    lock2 := ""
    b := 1
    Gui Main:Default
    Gui, submit, nohide
    GoSub, UpdateMainGuiText
    if (main_mute = 0) {
    	loop, 2 {
    		Soundbeep, 900, 100
    	}
    }
    loop, {	
    	if ((GetKeyState("LButton","P")) && (main_anti = 1)) {
    		GoSub, mouseXY
    	}
    	if ((GetKeyState("RButton", "P")) && (main_aimR = 1)) 
    	|| ((GetKeyState("LButton", "P")) && (main_aimL = 1)) 
    	|| ((GetKeyState(main_customkey, "P")) && (main_aimC = 1))
    	{
    		if (lockOn = "") {
    			GoSub, findTarget
    		} else {
    			GoSub, lockTarget
    		}
    		gosub, check_recoil
    		continue
    	}
    	gosub, check_recoil
    	if (ai = 1) {
    		gosub, g_scan
    	}
    	if (GetKeyState(hotkeys_1, "P")) {
    		Keywait, %hotkeys_1%, U
    		break
    	}
    	Sleep, 1
    }
    b := 0
    Gosub, UpdateMainGuiText
    if (main_mute = 0) {
    	Soundbeep, 900, 100
    }
    return
    
    func_hotkeys2: ; Y MODE, 0 = free, 1 = lock
    Keywait, %hotkeys_2%, Up
    main_yMode := !main_yMode
    IniWrite,%main_yMode%,settings.ini,main,yMode
    file := "mainprofile\" . main_profile . ".ini"
    Iniwrite,%main_yMode%,%file%,main,yMode
    Gosub, UpdateMainGuiText
    if (main_mute = 0) {
    	if (main_yMode = 1) {
    		loop, 2
    			Soundbeep, 700, 100
    	} else {
    		Soundbeep, 700, 100
    	}
    }
    return
    
    func_hotkeys3: ; 2nd Check, 1 = PVP, 2 = PVE, 3 = Both, 4 = None
    Keywait, %hotkeys_3%, Up
    if (main_PVMode < 4) {
    	main_PVMode ++
    	if (main_mute = 0) {
    		bf := 600 - (main_PVMode * 33)
    		Soundbeep, %bf%, 100
    	}
    } else {
    	main_PVMode := 1	
    	if (main_mute = 0) {
    		Soundbeep, 600, 100
    	}
    }
    Iniwrite,%main_PVMode%,settings.ini,main,PVMode
    file := "mainprofile\" . main_profile . ".ini"
    Iniwrite,%main_PVMode%,%file%,main,PVMode
    GoSub, UpdateMainGuiText
    return
    
    func_hotkeys4: ; Triggerbot on / off
    Keywait, %hotkeys_4%, Up
    main_trgMode := !main_trgMode
    iniwrite,%main_trgMode%,settings.ini,main,trgMode
    file := "mainprofile\" . main_profile . ".ini"
    Iniwrite,%main_trgMode%,%file%,main,trgMode
    GoSub, UpdateMainGuiText
    if (main_mute = 0) {
    	if (main_trgMode = 1) {
    		loop, 2 {
    			Soundbeep, 420, 100
    		}
    	} else {
    		Soundbeep, 420, 100
    	}
    }
    return
    
    func_hotkeys5: ; Anti-recoil on / off
    Keywait, %hotkeys_5%, Up
    main_anti := !main_anti
    iniwrite,%main_anti%,settings.ini,main,anti
    file := "mainprofile\" . main_profile . ".ini"
    Iniwrite,%main_anti%,%file%,main,anti
    GoSub, UpdateMainGuiText
    if (main_mute = 0) {
    	if (main_anti = 1) {
    		loop, 2 {
    			Soundbeep, 370, 100
    		}
    	} else {
    		Soundbeep, 370, 100
    	}
    }
    return
    
    ; ******************************************************************
    ; Main bot functions:
    
    g_scan: ; set normal scan area
    ai := 0
    X1 := 0 + (g_W * (main_scanX / 10))
    Y1 := 0 + (g_H * (main_scanY / 10))
    X2 := g_W - (g_W * (main_scanX / 10))
    Y2 := g_H - (g_H * (main_scanY / 10))
    return
    
    img_statics: ; only needs to be called on save/load
    t := 0 + img_timeout * 1000
    g_minv := Floor(g_W * (img_abs / 100) * 150 / 1920)
    return
    
    ai_scan: ; set "ai" scan area (tunnel vision)
    ai := 1
    X1 := aX - (g_W * 150 / 1920)
    X2 := aX + g_rw1 + (g_W * 100 / 1920)
    Y1 := aY - (g_H * 90 / 1080)
    Y2 := aY + g_rh2 + (g_H * 90 / 1080)
    return
    
    ai_timeout: ; force unlock
    lockOn := ""
    return
    
    findTarget: ; first scan for red bars
    loop, 3 {
    	i := A_Index
    	v1 := "img_Red" . i . "t",v1:=%v1%
    	v2 := "g_rw" . i,v2:=%v2%
    	v3 := "g_rh" . i,v3:=%v3%
    	imagesearch, aX, aY, %X1%, %Y1%, %X2%, %Y2%, *%v1% *w%v2% *h%v3% bmp\1.bmp
    	if (ErrorLevel = 0 && main_PVMode != 4) {
    		GoSub, scan2
    		if (ErrorLevel = 0) {
    			lockOn := i
    			retry := 0
    			GoSub, ai_scan
    			GoSub, mouse1	
    			return
    		}
    	} else if (ErrorLevel = 0 && main_PVMode = 4) {
    		lockOn := i
    		GoSub, mouse1
    		return
    	}
    }
    return
    
    lockTarget: ; lock on scan
    imagesearch, aX, aY, %X1%, %Y1%, %X2%, %Y2%, *%v1% *w%v2% *h%v3% bmp\1.bmp
    if (ErrorLevel = 0 && main_PVMode != 4) {
    	GoSub, scan2
    	if (ErrorLevel = 0) {
    		SetTimer, ai_timeout, -%t%
    		GoSub, ai_scan
    		GoSub, mouse1
    		retry := 0
    		return
    	}
    } else if (ErrorLevel = 0 && main_PVMode = 4) {
    	lockOn := i
    	GoSub, mouse1
    	return
    }
    if (lockOn = "1") {
    	if (v2 > g_minv) {
    		v2 := Abs(v2 * (100 - (img_reduc / 2)) / 100) ; less aggressive width reduc for shielded bars
    	}
    	if (v2 <= g_rw3) { ; force unshielded search if we reach low hp
    		v3 := g_rh3
    		
    	}
    	retry++ ; add one less retry for good measure... ;)
    } else {
    	if (v2 > g_minv) {
    		v2 := Abs(v2 * (100 - img_reduc) / 100) 
    	}
    }
    if (retry < img_loops) {
    	retry ++
    } else {
    	retry := 0
    	lockOn := ""
    }
    return
    
    scan2:
    if (main_PVMode != 3) {
    	GoSub, scanB
    } else {
    	loop, 2 { ; both mode
    		i2 := A_Index
    		if (lock2 = "" || lock2 = i2) {
    			Gosub, ScanB%i2%			
    			if (newX != "" && newY != "") {
    				lock2 := i2
    				return
    			}
    		}
    	}
    }
    lock2 := ""
    return
    
    scanB:
    newX1 := aX - Ceil(g_W * 37 / 1920) - 3
    newX2 := aX - Ceil(g_W * 8 / 1920) + 3
    newY1 := aY - Ceil(g_H * 19 / 1080) - 2
    newY2 := aY + Ceil(g_H * 10 / 1080) + 2
    if (main_PVMode = 1) {
    	imagesearch, newX, newY, %newX1%, %newY1%, %newX2%, %newY2%, *%img_WhiteT% *w%img_WhiteW% *h%img_WhiteH% bmp\2.bmp ; pvp
    } else if (main_PVMode = 2) {
    	imagesearch, newX, newY, %newX1%, %newY1%, %newX2%, %newY2%, *%img_GreyT% *w%img_GreyW% *h%img_GreyH% bmp\3.bmp ; pve
    }
    return
    
    mouse1: ; actual aim function
    AimX := aX - (g_W / 2 ) + main_aimX ; set search result locations to fixed offsets relative to centre of screen
    AimY := aY - (g_H / 2 ) + main_aimY
    if (main_trgMode = 1 && doingClick != 1) {
    	if (AimX > -trg_tX1 && AimX < trg_tX2 && AimY > -trg_tY1 && AimY < trg_tY2) { ; triggerbot zone check
    		doingClick := 1
    		SetTimer, mouse2, -25 ; 0.025 second delay on trigger call
    	}
    }
    if (AimX > main_shake) { ; if target is outside shake zone to the left...
    	DirX := main_sen / 10
    } else if (AimX > 0) { ; inside shake zone...
    	DirX := main_sen / 15
    } else if (AimX < -main_shake) { ; outside to the right...
    	DirX := (-main_sen) / 10
    } else if (AimX < 0) { ; inside
    	DirX := (-main_sen) / 15
    }
    if (AimY > 0) { ; target Y is below
    	DirY := main_sen / 12
    } else if (AimY < 0) { ; above
    	DirY := (-main_sen) / 12
    }
    MoveX := Ceil(( AimX * DirX ** ( 1 ))) * DirX ; relative speed based on distance. DirX/Y is called twice to retain +/- direction.
    MoveY := Ceil(( AimY * DirY ** ( 1 ))) * DirY * main_yMode
    DllCall("mouse_event", uint, 1, int, MoveX, int, MoveY, uint, 0, int, 0) ; mouse move
    return
    
    mouse2:
    DllCall("mouse_event", uint, 2, int, x, int, y, uint, 0, int, 0) ; L button down
    if (main_anti = 1) {
    	GoSub, mouseXY
    }
    Random, r, 1, 1.2 ; 1 to 1.2 randomizer (never below hold time)
    d := trg_tFreq * r
    SetTimer, mouse3, -%d%
    return
    
    mouse3:
    DllCall("mouse_event", uint, 4, int, x, int, y, uint, 0, int, 0) ; L button up
    doingClick := 0
    return
    
    mouseXY: ; anti-recoil. Credits: Digi7aL.
    if (do_recoil = 0) {
    	do_recoil := 1
    	SetTimer, dorecoil, -25
    }
    return
    
    dorecoil:
    DllCall("mouse_event", uint, 1, int, main_antiX, int, main_antiY, uint, 0, int, 0)
    return
    
    check_recoil:
    if (do_recoil = 1) {
    	if !(GetKeyState("LButton","P")) {
    		do_recoil := 0	
    	}		
    }
    return
    
    
    
    ; **********************************************************************************************
    ; The rest of the script is just GUI and INI functions.
    
    
    ; ------ INI FUNCTIONS ------
    ; CREDITS: engunneer, edited by myself somewhat. 
    
    ; globals: sections, sNumber, section_keys, section_kNumber, section_key
    
    ; By default, these values should be:
    ; sections = 4
    ; s1 = main, etc
    ; main_keys = 14, etc
    ; main_k1 = sen, etc
    ; main_sen = 6, etc
    
    INI_Init(inifile) {
    	local key
    	sections := 0
    	loop, read, %inifile%
    	{
    		if (regexmatch(A_Loopreadline,"\[(\w+)]")) { ; line is a section name
    			sections+= 1
    			s%sections%:=regexreplace(A_loopreadline,"(\[)(\w+)(])","$2")
    			sec := s%sections%
    			%sec%_keys := 0
    			
    		} else if (regexmatch(A_LoopReadLine,"(\w+)=(.*)")) { ; line is a key=value pair
    			%sec%_keys+= 1
    			key:=%sec%_keys
    			%sec%_k%key%:=regexreplace(A_LoopReadLine,"(\w+)=(.*)","$1")
    			var:=sec "_" %sec%_k%key%
    			iniread,%var%,%inifile%,%sec%,% %sec%_k%key%
    		}
    	}
    }
    
    INI_Load(inifile,sec) { ; requires file location and section name
    	Gui %sec%:default
    	loop,% %sec%_keys
    	{
    		var := sec "_" %sec%_k%A_index%
    		iniread,temp,%inifile%,%sec%,% %sec%_k%A_index%
    		if (temp != "ERROR") {
    			%var% := temp
    			GuiControl,, %var%, % %var%
    		} else {
    			msgbox, Error loading settings value "%var%". Please select a new file:
    			GoSub, imgprofileLoad
    			break
    		}
    	}		
    }
    
    INI_Save(inifile,sec) { ; requires file location and section name
    	loop,% %sec%_keys
    	{
    		var:= sec "_" %sec%_k%A_index%,var2:=%var%
    		iniwrite,%var2%,%inifile%,%sec%,% %sec%_k%A_index%
    	}
    }
    return
    
    
    ; ------ GUI ELEMENT FUNCTIONS ------
    
    SetHotKey:
    ID := A_Guicontrol
    SetCustomKey(temp,temperror)
    if (temperror = 0) {
    	loop, 4 {
    		v := hotkeys_%A_Index%
    		if (temp == v) {
    			msgbox, 16, Already in use, %v% is already in use. Please unbind it first.
    			return
    		}
    	}	
    	Gui Hotkeys:Default
    	if (hotkeys_%ID% != "" && hotkeys_%ID% != "Not set") {
    		Hotkey, % hotkeys_%ID%, off
    	}
    	hotkeys_%ID% := temp
    	INI_Save("settings.ini","hotkeys")
    	GuiControl, +cLime, hotkeys_%ID%
    	GuiControl,, hotkeys_%ID%, % hotkeys_%ID%
    	Hotkey, % hotkeys_%ID%, func_hotkeys%ID%, on
    }
    GoSub, UpdateMainGuiText
    return
    
    SetAimKey:
    SetCustomKey(temp,temperror)
    if (temperror = 0) {
    	main_customkey := temp
    	INI_Save("settings.ini","main")
    	Gui Main:Default
    	GuiControl,, main_customkey, %main_customkey%
    }
    return
    
    SetCustomKey(ByRef temp, ByRef temperror) {
    	global b
    	temperror := 0
    	if (b = 1) {
    		temperror := 1
    		msgbox, Please turn off the bot before changing custom key.
    		return
    	}
    	Mousegetpos, xpos, ypos
    	xpos += -50
    	prompt :=
    	(
    	"Please type the name of the key you wish to bind.`n
        A-Z, 0-9, F1-F99, Numpad0-Numpad9
        For other keys, type the literal key name (eg. CapsLock, PgDn, LCtrl, RAlt, etc)
        Mouse: MButton (middle), XButton1 (back), XButton2 (foward)`n"
    	)
    	InputBox, temp, Custom key, %prompt%, , 545, 225, %xpos%, %ypos%, , , 
    	if (ErrorLevel || temp = "") {
    		temperror := 1
    		return
    	}
    	Static ManualList := "CapsLock,Shift,LCtrl,RCtrl,LAlt,RAlt,Tab,Space,MButton,XButton1,XBUtton2,PgUp,PgDn,Ins,Home,Del,End,``,Enter,Up,Down,Left,Right,"
    	if temp not in %ManualList%
    	{
    		if !(StrLen(temp) = 1 && RegExMatch(temp,"[[:alnum:]]+",match))
    		&& !(StrLen(temp) < 4 && RegExMatch(temp,"i)F[[:digit:]]+",match))
    		&& !(StrLen(temp) = 7 && RegExMatch(temp,"i)Numpad[[:digit:]]",match)) 
    		{
    			temperror := 1
    			MsgBox, 16, Error!, "%temp%" may not be a valid key name.`nIt must be a single key name only.`nYou can attempt to enter the key name manually in the 'res\settings.ini' file if you want.
    			return
    		}
    	}
    	StringUpper, temp, temp, T
    }
    
    SaveMain:
    Gui Main:Default
    Gui submit, nohide
    INI_Save("settings.ini","main")
    GuiControl,, MainSaveText, Saved!
    SetTimer, RevertText, -1000
    if (drawing = 1) {
    	GoSub, UpdateOSD
    }
    return
    
    SaveImg:
    Gui Img:Default
    Gui submit, nohide
    INI_Save("settings.ini","img")
    file := "imgprofile\" . img_profile . ".ini"
    INI_Save(file,"img")
    GoSub, UpdateImg
    GuiControl,, ImgSaveText, Saved!
    SetTimer, RevertText, -1000
    GoSub, img_statics
    return
    
    SaveTrg:
    Gui Trg:Default
    Gui submit, nohide
    INI_Save("settings.ini","trg")
    GuiControl,, TrgSaveText, Saved!
    SetTimer, RevertText, -1000
    return
    
    imgprofileLoad:
    Thread, NoTimers
    FileSelectFile, SelectedFile, 3, imgprofile\, Open a file, Settings files (*.ini)
    Thread, NoTimers, false
    SplitPath, SelectedFile, name, dir, ext, name_no_ext, drive
    if (SelectedFile = "" || ext != "ini") {
    	return
    }
    img_profile := name_no_ext
    file := "imgprofile\" . img_profile . ".ini"
    INI_Load(file,"img")
    INI_Save("settings.ini","img")
    Gui Img:Default
    GoSub, UpdateImg
    GoSub, img_statics
    return
    
    imgprofileSaveAs:
    Thread, NoTimers
    FileSelectFile, SelectedFile, S, imgprofile\new.ini, Save as:, Settings files (*.ini)
    Thread, NoTimers, false
    if (SelectedFile = "") {
    	return
    }
    SplitPath, SelectedFile, name, dir, ext, name_no_ext, drive
    if (ext != "ini") {
       name=%name_no_ext%.ini
    }
    if (FileExist("imgprofile\"name)) {
    	Msgbox, 4, Are you sure?, Overwrite existing file?
    	IfMsgBox, No
    		return
    }
    img_profile := name_no_ext
    Gui Img:default
    Gui submit, nohide
    INI_Save("settings.ini","img")
    file := "imgprofile\" . img_profile . ".ini"
    INI_Save(file,"img")
    INI_Load(file,"img")
    GoSub, UpdateImg
    GoSub, img_statics
    return
    
    mainprofileLoad:
    Thread, NoTimers
    FileSelectFile, SelectedFile, 3, mainprofile\, Open a file, Settings files (*.ini)
    Thread, NoTimers, false
    SplitPath, SelectedFile, name, dir, ext, name_no_ext, drive
    if (SelectedFile = "" || ext != "ini") {
    	return
    }
    main_profile := name_no_ext
    file := "mainprofile\" . main_profile . ".ini"
    INI_Load(file,"main")
    INI_Save("settings.ini","main")
    Gui Main:Default
    GoSub, trimMain
    GuiControl,, mainprofileText, Profile: %mainString%
    Gosub, UpdateMainGuiText
    if (drawing = 1) {
    	GoSub, UpdateOSD
    }
    return
    
    mainprofileSaveAs:
    Thread, NoTimers
    FileSelectFile, SelectedFile, S, mainprofile\new.ini, Save as:, Settings files (*.ini)
    Thread, NoTimers, false
    if (SelectedFile = "") {
    	return
    }
    SplitPath, SelectedFile, name, dir, ext, name_no_ext, drive
    if (ext != "ini") {
       name=%name_no_ext%.ini
    }
    if (FileExist("mainprofile\"name)) {
    	Msgbox, 4, Are you sure?, Overwrite existing file?
    	IfMsgBox, No
    		return
    }
    main_profile := name_no_ext
    Gui Main:default
    Gui submit, nohide
    GoSub, trimMain
    GuiControl,, mainprofileText, Profile: %mainString%
    INI_Save("settings.ini","main")
    file := "mainprofile\" . main_profile . ".ini"
    INI_Save(file,"main")
    INI_Load(file,"main")
    Gosub, UpdateMainGuiText
    if (drawing = 1) {
    	GoSub, UpdateOSD
    }
    return
    
    tolShift:
    Gui Img:Default
    loop, 3
    {
    	var:= "img_Red" . A_index . "t",var2:=%var%
    	var2 += A_Guicontrol
    	GuiControl,, %var%, %var2%
    	img_Red%A_index%t := var2
    }
    return
    
    MainGuiToggle:
    Gui Main:Default
    if (miniMode != 1) {
    	miniMode := 1
    	Gui, Show, w270 h337 NoActivate, %WinTitle%
    	GuiControl,, MiniButton, ... (main)
    } else {
    	miniMode := 0
    	Gui, Show, w270 h133 NoActivate, %WinTitle%
    	GuiControl,, MiniButton, Main settings
    }
    return
    
    toggleIMG:
    if (!showingImgBox) {
    	GoSub, showImg
    } else {
    	GoSub, hideImg
    }
    return
    
    toggleOSD:
    if (drawing != 1) {
    	drawing := 1
    	GoSub, UpdateOSD
    } else { 
    	drawing := 0
    	Gui OSD:Default
    	Gui, Cancel
    }
    return
    
    toggleTrgGui:
    if (showingTrgBox != 1) {
    	GoSub, showTrg
    } else {
    	GoSub, hideTrg
    }
    return
    
    ToggleHotkeyGui:
    Gui Hotkeys:Default
    if (showingHotkeys != 1) {
    	showingHotkeys := 1
    	Mousegetpos, xpos, ypos
    	xpos += 10
    	ypos += 10
    	Gui, show, w225 h165 x%xpos% y%ypos%, Hotkeys:
    } else {
    	showingHotkeys := 0
    	Gui, cancel
    }
    return
    
    ImgGuiEscape:
    ImgGuiClose:
    GoSub, hideImg
    return
    
    TrgGuiEscape:
    TrgGuiClose:
    GoSub, hideTrg
    return
    
    HotkeysGuiEscape:
    HotkeysGuiClose:
    GoSub, ToggleHotkeyGui
    return
    
    Tray:
    Gui Main:Default
    WinHide
    return
    
    Restore:
    Gui Main:Default
    gui, Main: +lastfound
    WinShow
    WinRestore
    return
    
    MainGuiEscape:
    MainGuiClose:
    Exit:
    ExitApp
    return
    
    GuiMove:
    Gui Main:Default
    PostMessage, 0xA1, 2,,, A
    return
    
    MuteSub:
    main_mute := !main_mute
    Iniwrite, %main_mute%, settings.ini, main, mute
    return
    
    ; ------ OTHER GUI FUNCTIONS ------
    
    UpdateImg:
    Gui Img:Default
    GuiControl,, WhitePic, *w%img_WhiteW% *h%img_WhiteH% bmp\2.bmp
    GuiControl,, GreyPic, *w%img_GreyW% *h%img_GreyH% bmp\3.bmp
    return
    
    UpdateOSD:
    OSDx := 0 + (g_W * (main_scanX / 10))
    OSDy := 0 + (g_H * (main_scanY / 10))
    OSDw := g_W - (g_W * (main_scanX / 5))
    OSDh := g_H - (g_H * (main_scanY / 5))
    Gui OSD:Default
    Gui, Show, x%OSDx% y%OSDy% w%OSDw% h%OSDh% NoActivate
    Gui, +lastfound
    ID := WinExist()
    WinSet, ExStyle, +0x80020, ahk_id %ID%
    return
    
    showImg:
    showingImgBox := 1
    Gui Main:Default
    Gui,+LastFound
    GuiControl,, imgButton, ... (img)
    WinGetPos,newWinx,newWiny,newWinw,newWinh
    imgX := newWinx
    imgY := newWiny + newWinh
    Gui Img:Default
    Gui, Show, w250 h302 x%imgX% y%imgY%, %WinTitle%
    Sleep, 25
    GoSub, UpdateImg
    return
    
    hideImg:
    Gui Img:Default
    Gui, cancel
    showingImgBox := 0
    Gui Main:Default
    GoSub, trimImg
    GuiControl,, imgButton, img: %imgString%
    return
    
    trimImg:
    imgString := img_profile
    len := StrLen(img_profile)
    if (len > 6) {
    	trim := len - 5
    	StringTrimRight, imgString, imgString, %trim%
    	imgString := imgString . ".."
    }
    return
    
    trimMain:
    mainString := main_profile
    len := StrLen(mainString)
    if (len > 13) {
    	trim := len - 12
    	StringTrimRight, mainString, mainString, %trim%
    	mainString := mainString . ".."
    }
    return
    
    showTrg:
    showingTrgBox := 1
    Gui Main:Default
    Gui, +LastFound,
    GuiControl,, trgButton, ... (trg)
    WinGetPos,newWinX,newWiny,newWinw,newWinh
    trgGuiX := newWinx + newWinw
    trgGuiY := newWiny
    Gui Trg:Default
    Gui, Show, w248 h317 x%trgGuiX% y%trgGuiY%, %winTitle%
    return
    
    hideTrg:
    Gui Trg:Default
    Gui, cancel
    showingTrgBox := 0
    Gui Main:Default
    GuiControl,, trgButton, Triggerbot
    return
    
    RevertText:
    Gui Main:Default
    GuiControl,, MainSaveText, Save
    Gui Img:Default
    GuiControl,, ImgSaveText, Apply changes
    Gui Trg:Default
    GuiControl,, TrgSaveText, Save
    return
    
    UpdateMainGuiText:
    Gui Main:Default
    if (b = 1) { 
    	GuiControl, +cLime, OnOff
    	GuiControl,, OnOff, [%hotkeys_1%] Bot: ON
    } else {
    	GuiControl, +cRed, OnOff
    	GuiControl,, OnOff, [%hotkeys_1%] Bot: OFF	
    }
    if (main_yMode = 1) {
    	GuiControl, +cGreen, Ylock
    	GuiControl,, Ylock, [%hotkeys_2%] Y Mode: LOCK
    } else if (main_yMode = 0) {
    	GuiControl, +cMaroon, Ylock
    	GuiControl,, Ylock, [%hotkeys_2%] Y Mode: FREE
    }
    if (main_PVMode = 1) {
    	GuiControl, +cGreen, PVText
    	GuiControl,, PVText, [%hotkeys_3%] 2nd Check: PVP
    } else if (main_PVMode = 2) {
    	GuiControl, +cTeal, PVText
    	GuiControl,, PVText, [%hotkeys_3%] 2nd Check: PvE
    } else if (main_PVMode = 3) {
    	GuiControl, +cOlive, PVText
    	GuiControl,, PVText, [%hotkeys_3%] 2nd Check: Both
    } else if (main_PVMode = 4) {
    	GuiControl, +cMaroon, PVText
    	GuiControl,, PVText, [%hotkeys_3%] 2nd Check: None	
    }
    if (main_trgMode = 1) {
    	GuiControl, +cGreen, TrigText
    	GuiControl,, TrigText, [%hotkeys_4%] Triggerbot: ON
    } else {
    	GuiControl, +cMaroon, TrigText
    	GuiControl,, TrigText, [%hotkeys_4%] Triggerbot: OFF
    }
    if (main_anti = 1) {
    	GuiControl, +cGreen, AntiText
    	GuiControl,, AntiText, [%hotkeys_5%] Anti-Recoil: ON
    } else {
    	GuiControl, +cMaroon, AntiText
    	GuiControl,, AntiText, [%hotkeys_5%] Anti-Recoil: OFF
    }	
    return
    
    ;  Setup all GUIs on load:
    
    LoadGUI:
    ; main gui
    Gui Main:Default
    Gui, -Caption +Border -DPIscale
    Gui, Color, 000000
    Gui, Add, Picture, x0 y25 hwndhpic +0xE
    bgPic := "bmp\gui.bmp"
    hbmp := DllCall("LoadImage", "uint", 0, "str", bgPic, "uint", 0x0, "int", 0, "int", 0, "uint", 0x10|0x2000)
    SendMessage, 0x172, 0x0, hbmp,, ahk_id %hpic%
    Gui, Font, s10 cBlack
    Gui, Add, Text, x4 y4 w134 h21 gGuiMove cWhite, FAT AA 2.0
    Gui, Font, s8
    Gui, Add, Button, w60 h17 x138 y4 gToggleHotkeyGui, hotkeys
    Gui, Add, Button, w30 h17 x202 y4 gTray, tray
    Gui, Add, Button, w30 h17 x236 y4 gExit, exit
    Gui, Font, s9 cWhite
    Gui, Add, Button, w69 h28 x10 y35 gMainGuiToggle vMiniButton, Main settings
    Gosub, trimImg
    Gui, Add, Button, w69 h28 x10 y66 gtoggleIMG vimgButton, img: %imgString%
    Gui, Add, Button, w69 h28 x10 y97 gtoggleTrgGui vtrgButton, Triggerbot
    Gui, Font, s11
    Gui, Add, Text, w130 x85 y33 vOnOff cRed
    Gui, Add, Text, w130 x85 y52 vYlock
    Gui, Add, Text, w150 x85 y71 vPVText
    Gui, Add, Text, w170 x85 y90 vTrigText
    Gui, Add, Text, w170 x85 y109 vAntiText
    Gui, Font, s9
    Gui, Add, Checkbox, x218 y36 gMuteSub vMute Checked%main_mute%, Mute
    Gui, Font, s10 cWhite
    Gui, Add, Text, x37 y148, Speed:
    Gui, Add, Text, x13 y173, Anti-Shake:
    Gui, Add, Text, x44 y198, Aim X:
    Gui, Add, Text, x44 y223, Aim Y:
    Gui, Add, Text, x160 y148, Scan X:
    Gui, Add, Text, x160 y173, Scan Y:
    Gui, Add, Text, x152 y198, Recoil X:
    Gui, Add, Text, x152 y223, Recoil Y:
    Gui, Font, S11 cBlack
    Gui, Add, Edit, w35 h20 x90 y145 vmain_sen, %main_sen%
    Gui, Add, Edit, w35 h20 x90 y170 vmain_shake, %main_shake%
    Gui, Add, Edit, w35 h20 x90 y195 vmain_aimX, %main_aimX%
    Gui, Add, Edit, w35 h20 x90 y220 vmain_aimY, %main_aimY%
    Gui, Add, Edit, w35 h20 x215 y145 vmain_scanX, %main_scanX%
    Gui, Add, Edit, w35 h20 x215 y170 vmain_scanY, %main_scanY%
    Gui, Add, Edit, w35 h20 x215 y195 vmain_antiX, %main_antiX%
    Gui, Add, Edit, w35 h20 x215 y220 vmain_antiY, %main_antiY%
    Gui, Font, s9 cWhite
    Gui, Add, Text, x10 y250, Activate:
    Gui, Add, Checkbox, x56 y250 vmain_aimL checked%main_aimL%, L Click
    Gui, Add, Checkbox, x115 y250 vmain_aimR checked%main_aimR%, R Click
    Gui, Add, Checkbox, w20 h20 x178 y247 vmain_aimC checked%main_aimC% -wrap, %A_space%
    Gui, Font, s9
    Gui, Add, Button, w56 h20 x198 y247 gSetAimKey vmain_customKey, %main_customkey%
    Gui, Add, Checkbox, x30 y277 gtoggleOSD, Draw Scan Area
    Gui, Add, Text, x145 y277 cLime w115 vmainprofileText, Profile: %mainString%
    Gui, Add, Button, w65 h19 x20 y300 gmainprofileSaveAs, Save As...
    Gui, Add, Button, w50 h19 x90 y300 gmainprofileLoad, Load
    Gui, Add, Button, w105 h19 x145 y300 gSaveMain vMainSaveText Default, Save
    Gui, +Lastfound
    Menu, Tray, NoStandard
    Menu, Tray, Add, Exit, Exit
    Menu, Tray, Add, Restore, Restore
    Menu, Tray, Default, Restore
    Menu, Tray, Click, 2
    ; imagesearch gui
    Gui Img:Default
    Gui, -DPIScale
    Gui, Color, 000000
    Gui, Add, Picture, x0 y0 hwndhpic2 +0xE
    ImgbgPic := "bmp\imgGui.bmp"
    hbmp := DllCall("LoadImage", "uint", 0, "str", ImgbgPic, "uint", 0x0, "int", 0, "int", 0, "uint", 0x10|0x2000)
    SendMessage, 0x172, 0x0, hbmp,, ahk_id %hpic2%
    Gui, Font, s9
    Gui, Add, Text, w70 h20 x67 y10 cWhite vimg_profile, %img_profile%
    Gui, Add, Button, h20 w140 x7 y31 gSaveImg vImgSaveText Default, Apply changes
    Gui, Add, Button, h18 w70 x165 y9 gimgprofileLoad, Load
    Gui, Add, Button, h18 w70 x165 y33 gimgprofileSaveAs, Save As...
    Gui, Font, s9 cWhite
    Gui, Add, Text, x55 y70, Retry Limit:
    Gui, Add, Text, x51 y92, Aggression:
    Gui, Add, Text, x44 y114, Minimum HP:
    Gui, Add, Text, x34 y136, Memory length:
    Gui, Add, Text, x145 y70, attempts
    Gui, Add, Text, x145 y92, `%
    Gui, Add, Text, x145 y114, `%
    Gui, Add, Text, x145 y136, seconds
    Gui, Font, cBlack
    Gui, Add, Edit, x113 y68 h17 w25 vimg_loops, %img_loops%
    Gui, Add, Edit, x113 y90 h17 w25 vimg_reduc, %img_reduc%
    Gui, Add, Edit, x113 y112 h17 w25 vimg_abs, %img_abs% 
    Gui, Add, Edit, x113 y134 h17 w25 vimg_timeout, %img_timeout%
    Gui, Font, s11
    Gui, Add, Text, x25 y177 cRed, Color Tolerance:
    Gui, Font, s9
    Gui, Add, Button, h16 w24 x69 y200 gtolShift, -5
    Gui, Add, Button, h16 w24 x99 y200 gtolShift, +5
    Gui, Add, Text, x178 y168 cRed, High HP
    Gui, Add, Text, x178 y193 cRed, Mid HP
    Gui, Add, Text, x178 y218 cRed, Low HP
    Gui, Font, s10 cBlack
    Gui, Add, Edit, x138 y165 w30 h18 vimg_Red1t, %img_Red1t% 
    Gui, Add, Edit, x138 y190 w30 h18 vimg_Red2t, %img_Red2t%
    Gui, Add, Edit, x138 y215 w30 h18 vimg_Red3t, %img_Red3t%
    Gui, Font, cWhite
    Gui, Add, Text, w96 h18 x26 y240, White (PvP):
    Gui, Add, Text, w92 h18 x155 y240, Grey (PvE):
    Gui, Font, s9
    Gui, Add, Text, x20 y259, Tolerance:
    Gui, Add, Text, x15 y279, W:
    Gui, Add, Text, x60 y279, H:
    Gui, Add, Text, x140 y259, Tolerance:
    Gui, Add, Text, x135 y279, W:
    Gui, Add, Text, x180 y279, H:
    Gui, Font, s9 cBlack
    Gui, Add, Picture, x105 y245 w2 h2 vwhitepic, bmp\2.bmp
    Gui, Add, Edit, w20 h16 x76 y260 vimg_WhiteT, %img_WhiteT%
    Gui, Add, Edit, w20 h16 x32 y278 vimg_WhiteW, %img_WhiteW%
    Gui, Add, Edit, w20 h16 x76 y278 vimg_whiteH, %img_WhiteH%
    Gui, Font, s10 cSilver
    Gui, Font, s9 cBlack
    Gui, Add, Picture, x228 y245 w2 h2 vgreypic, bmp\3.bmp
    Gui, Add, Edit, w25 h16 x197 y260 vimg_GreyT, %img_GreyT%
    Gui, Add, Edit, w25 h16 x151 y278 vimg_GreyW, %img_GreyW%
    Gui, Add, Edit, w25 h16 x197 y278 vimg_GreyH, %img_GreyH%
    ; Trigger gui
    Gui Trg:Default
    Gui, -DPIScale
    Gui, Color, 000000
    Gui, Add, Picture, x0 y0 hwndhpic3 +0xE
    TrgbgPic := "bmp\trgGui.bmp"
    hbmp := DllCall("LoadImage", "uint", 0, "str", TrgbgPic, "uint", 0x0, "int", 0, "int", 0, "uint", 0x10|0x2000)
    SendMessage, 0x172, 0x0, hbmp,, ahk_id %hpic3%
    Gui, Add, Button, Default gSaveTrg vTrgSaveText w100 h20 x75 y45, Save
    Gui, Font, cWhite s10
    Gui, Add, Text, x36 y84, Hold time / fire rate: 
    Gui, Add, Text, h22 x190 y85, ms 
    Gui, Font, cBlack 
    Gui, Add, Edit, w30 h20 x155 y82 vtrg_tFreq, %trg_tFreq%
    Gui, Font, cRed
    Gui, Add, Text, x72 y110, Trigger fire zone:
    Gui, font, s9 cWhite
    Gui, Add, Text, x29 y140, X1 (left): 
    Gui, Add, Text, x138 y140, X2 (right): 
    Gui, Add, Text, x29 y170, Y1 (up):
    Gui, Add, Text, x130 y170, Y2 (down): 
    Gui, font, cBlack
    Gui, Add, Edit, w22 h18 x79 y138 vtrg_tX1, %trg_tX1%
    Gui, Add, Edit, w22 h18 x196 y138 vtrg_tX2, %trg_tX2%
    Gui, Add, Edit, w22 h18 x79 y167 vtrg_tY1, %trg_tY1%
    Gui, Add, Edit, w22 h18 x196 y167 vtrg_tY2, %trg_tY2%
    ; hotkey gui
    Gui Hotkeys:Default
    Gui, -DPIScale
    Gui, Color, 000000
    Gui, Font, cWhite s10
    Gui, Add, Text, x10 y10, Set your toggle keys:
    Gui, Add, Text, x10 y50, Main On / Off:
    Gui, Add, Text, x10 y70, Y Mode:
    Gui, Add, Text, x10 y90, 2nd Check:
    Gui, Add, Text, x10 y110, Triggerbot:
    Gui, Add, Text, x10 y130, Anti-Recoil:
    Gui, Font, cLime s10
    Gui, Add, Text, w65 x110 y50 vhotkeys_1, %hotkeys_1%
    Gui, Add, Text, w65 x110 y70 vhotkeys_2, %hotkeys_2%
    Gui, Add, Text, w65 x110 y90 vhotkeys_3, %hotkeys_3%
    Gui, Add, Text, w65 x110 y110 vhotkeys_4, %hotkeys_4%
    Gui, Add, Text, w65 x110 y130 vhotkeys_5, %hotkeys_5%
    Gui, font, cBlack s9 
    Gui, Add, Button, h18 w30 x180 y50 gSetHotKey, 1
    Gui, Add, Button, h18 w30 x180 y70 gSetHotKey, 2
    Gui, Add, Button, h18 w30 x180 y90 gSetHotKey, 3
    Gui, Add, Button, h18 w30 x180 y110 gSetHotKey, 4
    Gui, Add, Button, h18 w30 x180 y130 gSetHotKey, 5
    ; OSD (draw scan area)
    Gui OSD:Default 
    Gui, +AlwaysOnTop -Caption +ToolWindow +Border -DPIScale
    Gui, Color, EEAA99
    Gui, +Lastfound
    WinSet, TransColor, EEAA99
    return
    
    ShowGUI:
    Random, r, 5, 10
    Loop %r% {
    	Random, Var,97,122
    	WinTitle.=Chr(Var)
    }
    mousegetpos, xpos, ypos
    xpos += -50
    ypos += -50
    Gui Main:default
    Gui, Show, w270 h133 x%xpos% y%ypos%, %WinTitle%
    return
    
    ; end
    Just tested more the 2.0 and i am stickin to 1.2.
    Something is off with the standard settings it was good with 1.2.
    2.0 is not working well.
    and the low hp part also not working

  14. #12
    fatdoobie's Avatar
    Join Date
    Jul 2018
    Gender
    male
    Posts
    159
    Reputation
    10
    Thanks
    511
    Quote Originally Posted by ricardmark1 View Post
    Just tested more the 2.0 and i am stickin to 1.2.
    Something is off with the standard settings it was good with 1.2.
    2.0 is not working well.
    and the low hp part also not working
    If you set retry to 0, it will be exactly the same as 1.2. But to each their own, personally I find the new method way more reliable.

  15. #13
    ricardmark1's Avatar
    Join Date
    Jul 2018
    Gender
    male
    Posts
    132
    Reputation
    10
    Thanks
    9
    It's not. at least not added value.

  16. #14
    fatdoobie's Avatar
    Join Date
    Jul 2018
    Gender
    male
    Posts
    159
    Reputation
    10
    Thanks
    511
    Quote Originally Posted by ricardmark1 View Post
    It's not. at least not added value.
    With 1.2, did you change any red bar width and height from the auto adjust size?

    Otherwise they are truly the same if retry is 0. but you could use the anti-recoil and stuff in 2.0.

    I might double check the tunnel vision thing isnt causing problems, it makes the scan area focus around your target a little bit. I can look at dialing that back or giving the option to turn it off completely.

  17. #15
    mazxz's Avatar
    Join Date
    Feb 2013
    Gender
    male
    Posts
    6
    Reputation
    10
    Thanks
    0

    Aim assist + controller

    Quote Originally Posted by fatdoobie View Post
    With 1.2, did you change any red bar width and height from the auto adjust size?

    Otherwise they are truly the same if retry is 0. but you could use the anti-recoil and stuff in 2.0.

    I might double check the tunnel vision thing isnt causing problems, it makes the scan area focus around your target a little bit. I can look at dialing that back or giving the option to turn it off completely.


    ==> I use the new update and well work like a charm!! <3

Page 1 of 14 12311 ... LastLast

Similar Threads

  1. [Release] Modern Warfare 2 Aim Assistance Bot & No Spread
    By jdslashv2 in forum Call of Duty Modern Warfare 2 Server / GSC Modding
    Replies: 22
    Last Post: 04-14-2014, 09:31 AM
  2. Aim assist
    By viper4060 in forum Call of Duty Modern Warfare 2 GSC Modding Help/Discussion
    Replies: 5
    Last Post: 01-28-2011, 08:38 AM
  3. [Discussion] Aim assist!!
    By thewisedumbguy9 in forum WarRock Discussions
    Replies: 14
    Last Post: 12-01-2010, 07:45 AM
  4. [SOLVED] auto aim assist
    By wasaka1 in forum Call of Duty Black Ops Help
    Replies: 3
    Last Post: 11-30-2010, 04:38 PM
  5. [SOLVED] Aim Assist
    By synth in forum Call of Duty Modern Warfare 2 Help
    Replies: 8
    Last Post: 09-19-2010, 10:17 AM