#NoEnv #MaxHotkeysPerInterval 99000000 #HotkeyInterval 99000000 #KeyHistory 0 ListLines Off Process, Priority, , A SetBatchLines, -1 SetKeyDelay, -1, -1 SetMouseDelay, -1 SetDefaultMouseSpeed, 0 SendMode Input ; Recommended for new scripts due to its superior speed and reliability. SetWorkingDir %A_ScriptDir% ; Ensures a consistent starting directory. DetectHiddenWindows, On #Persistent ; --------- Controls accel := "Enter" turnLeft := "Left" turnRight := "Right" brake := "Up" nitros := "Down" ; --------- Constants ; Time at turn in seconds and Stablizing control t := 220000 intensity := 220 delay := 160 MenuDirect := "Right" Menu_loops := 6 menu_s := 1 color_check1 := 0xFD3C37 color_check2 := 0x4DCF75 c1_alt := false color_2_delay := 1500 ; resolution parameters and pixel search locations ps_win_width := 640 ps_win_height := 360 pix1x := 247 pix1y := 65 pix2x := 342 pix2y := 362 ps_load_time1 := 14000 ps_load_time2 := 7000 ps_load_time3 := 8400 ; ---------- Gui Setup ------------- Gui, -MaximizeBox Gui, 2: -MaximizeBox Gui, 2: -MinimizeBox Gui, Color, c282a36, c6272a4 Gui, Add, Button, x15 y10 w70 default, Start ;Gui, Add, Button, x15 y40 w70 default gVariableWindow, Variables ;Gui, Add, Button, x15 y70 w70 default gGetColo_p, ColorP1 ; Gui, Add, Button, x110 y70 w70 default gGetColo_g, ColorP2 Gui, Add, Button, x110 y10 w70 default gMenuTest, MenuTest ; Gui, Add, DropDownList, w50 Choose1 vMenuDirect, Right|Left ; Gui, Add, Edit, vMenu_loops w20 x165 y39, 6 ; Gui, Font, ce8dfe3 s9 w550 Bold ; Gui, Add, Radio, Group x15 y100 altsubmit Checked gPSystem vSysCheck, PS5 ; Gui, Add, Radio, x70 y100 altsubmit gPSystem, PS4 ; Gui, Add, Radio, Group x15 y120 altsubmit Checked gMenuSel vMenuCheck, Pixel ; Gui, Add, Radio, x70 y120 altsubmit gMenuSel, Timing ; Gui, Font, ce8dfe3 s9 w550 Bold ;--------- Gui 2 Setup -------------- Gui, 2: Color, c535770, c6272a4 Gui, 2: Font, c11f s9 Bold Gui, 2: Add, Text,, Turn Length (time miliseconds) Gui, 2: Add, Edit, w70 vA, %t% Gui, 2: Add, Text,, Turn Intensity Gui, 2: Add, Edit, w40 vB, %intensity% Gui, 2: Add, Text,, Turn Delay Gui, 2: Add, Edit, w40 vC, %delay% Gui, 2: Add, Text, x100 y90, Color 2 Delay Gui, 2: Add, Edit, x100 y110 w40 vD, %color_2_delay% Gui, 2: Add, Button, x20 y170 gSaveVars, Save Gui, 2: Add, Button, x100 y170 gVarDef, Defaults Gui, Show,w220 h150, GT7 Pan American AFK return VariableWindow: Gui, 2: Show, w220 h205, Variables return SaveVars: Gui, 2:Submit GuiControlGet, t, 2:, A GuiControlGet, intensity, 2:, B GuiControlGet, delay, 2:, C GuiControlGet, color_2_delay, 2:, D return VarDef: t = 220000 intensity = 220 delay := 140 GuiControl, 2:, A, %t% GuiControl, 2:, B, %intensity% GuiControl, 2:, C, %delay% GuiControl, 2:, D, %color_2_delay% return ButtonStart: gosub, GrabRemotePlay gosub, PixelTuning SetKeyDelay, 10 ;get to upper left hand menu gosub, PressLeft gosub, PressLeft gosub, PressLeft gosub, PressLeft gosub, PressLeft gosub, PressLeft gosub, PressX ;get to options menu gosub, PressDown gosub, PressX ;get to Controllers menu gosub, PressRight gosub, PressX ;get to wireless controller 1p gosub, PressDown gosub, PressRight gosub, PressX ;change steering controlls gosub, PressUp gosub, PressX gosub, PressRight gosub, PressX ;change pedal controlls gosub, PressRight gosub, PressRight gosub, PressRight gosub, PressRight gosub, PressX gosub, PressRight gosub, PressX ;change Nitros to down arrow gosub, PressO gosub, PressLeft gosub, PressLeft gosub, PressUp gosub, PressX gosub, PressUp gosub, PressUp gosub, PressX ;apply settings gosub, PressO gosub, PressRight gosub, PressX ;back to menu gosub, PressO gosub, PressO ;enter world circuits gosub, PressDown gosub, PressRight gosub, PressX Sleep, 5000 ;enter panam gosub, PressDown gosub, PressRight gosub, PressRight gosub, PressRight gosub, PressRight gosub, PressRight gosub, PressRight gosub, PressX ;change car - selecing twice if good car was already selected gosub, PressRight gosub, PressX gosub, PressRight gosub, PressX gosub, PressDown gosub, PressDown gosub, PressX gosub, PressDown gosub, PressRight gosub, PressX gosub, PressX gosub, PressRight gosub, PressX gosub, PressDown gosub, PressDown gosub, PressX gosub, PressDown gosub, PressX ;enter race gosub, PressLeft gosub, PressX Sleep, 12000 gosub, PressX Sleep, 2000 ;change gearbox to auto gosub, PressRight gosub, PressX gosub, PressDown gosub, PressX gosub, PressX gosub, PressDown gosub, PressX gosub, PressO ;start race gosub, PressLeft ; gosub, PressX ; ;pause race ; Sleep, 5000 ; ; TODO below doesn't go to exit menu FIXME ; gosub, PressO ; gosub, PressRight MsgBox, Settings set for AFK return ; ---------- Gui Setup End------------- AFKLoop: loop{ ;gosub, Menu gosub, PressX DllCall("Sleep", "UInt", 10000) ; This is dependent on load time, probably different for ps4 version gosub, Race gosub, Menu } return PressX: ; Just for menuing, does not hold X down ControlSend,, {%accel% down}, ahk_id %id% Sleep, 200 ControlSend,, {%accel% up}, ahk_id %id% Sleep, 500 return PressO: ; Just for menuing, does not hold O down ControlSend,, {Esc down}, ahk_id %id% Sleep, 200 ControlSend,, {Esc up}, ahk_id %id% Sleep, 500 return PressRight: ControlSend,, {%turnRight% down}, ahk_id %id% Sleep, 200 ControlSend,, {%turnRight% up}, ahk_id %id% Sleep, 500 return PressLeft: ControlSend,, {%turnLeft% down}, ahk_id %id% Sleep, 200 ControlSend,, {%turnLeft% up}, ahk_id %id% Sleep, 500 return PressDown: ControlSend,, {Down down}, ahk_id %id% Sleep, 200 ControlSend,, {Down up}, ahk_id %id% Sleep, 500 return PressUp: ControlSend,, {%brake% down}, ahk_id %id% Sleep, 200 ControlSend,, {%brake% up}, ahk_id %id% Sleep, 500 return ; given time t in miliseconds, turn right for that long, with intensity being how much the turn button is held for TurnRight: t0 := A_TickCount tf := t0+t loop { ControlSend,, {%turnRight% down}, ahk_id %id% DllCall("Sleep", "UInt", intensity) ControlSend,, {%turnRight% up}, ahk_id %id% DllCall("Sleep", "UInt", delay) } until A_TickCount > tf return TurnLeft: t0 := A_TickCount tf := t0+t loop { ControlSend,, {%turnLeft% down}, ahk_id %id% DllCall("Sleep", "UInt", intensity) ControlSend,, {%turnLeft% up}, ahk_id %id% DllCall("Sleep", "UInt", delay) } until A_TickCount > tf return Race: ; Hold Acceleration and manage turning ControlSend,, {%accel% down}, ahk_id %id% ControlSend,, {%nitros% down}, ahk_id %id% DllCall("Sleep", "UInt", 8200) gosub TurnRight /* ; This section detects the end of the race. Can be used to be faster/more accurate at the ending but good timing takes less computer resources Screen: 218, 359 (less often used) Window: 222, 357 (default) Client: 214, 326 (recommended) Color: 3F1757 (Red=3F Green=17 Blue=57) Screen: 247, 65 (less often used) Window: -129, -376 (default) Client: -129, -376 (recommended) Color: FD3C37 (Red=FD Green=3C Blue=37) Screen: 210, 64 (less often used) Window: 210, 64 (default) Client: 202, 33 (recommended) Color: 5091E9 (Red=50 Green=91 Blue=E9) Screen: 261, 39 (less often used) Window: 261, 39 (default) Client: 253, 8 (recommended) Color: A774A9 (Red=A7 Green=74 Blue=A9) */ loop { PixelSearch, x, y, pix1x-2, pix1y-2, pix1x+2, pix1y+2, %color_check1%, 20, Fast RGB If (ErrorLevel != 0) { ControlSend,, {%turnRight% down}, ahk_id %id% Sleep, 140 ControlSend,, {%turnRight% up}, ahk_id %id% Sleep, 200 } else{ break } } ControlSend,, {%accel% up}, ahk_id %id% ControlSend,, {%nitros% up}, ahk_id %id% return Menu: if (menu_s = 1){ gosub, Menu_pixel } if (menu_s = 2){ gosub, Menu_time } return Menu_pixel: ;ToolTip, Menuing, 100, 100, Screen loop { PixelSearch, x, y, pix2x-2, pix2y-2, pix2x+2, pix2y+2, %color_check2%, 20, Fast RGB If (ErrorLevel != 0) { gosub, PressX sleep %color_2_delay% } else{ break } } ;ToolTip, Found color 2, 100, 100, Screen Sleep, 2000 ControlSend,, {Esc down}, ahk_id %id% Sleep, 200 ControlSend,, {Esc up}, ahk_id %id% Sleep, 200 ControlSend,, {Right down}, ahk_id %id% Sleep, 200 ControlSend,, {Right up}, ahk_id %id% Sleep, 500 gosub, PressX Sleep, %ps_load_time1% gosub, PressX Sleep, 1000 ControlSend,, {Esc down}, ahk_id %id% Sleep, 200 ControlSend,, {Esc up}, ahk_id %id% loop, 2 { gosub, PressX Sleep, 500 } Sleep, %ps_load_time2% ControlSend,, {Down down}, ahk_id %id% Sleep, 200 ControlSend,, {Down up}, ahk_id %id% Sleep, 500 loop, %menu_loops% { ControlSend,, {%MenuDirect% down}, ahk_id %id% Sleep, 50 ControlSend,, {%MenuDirect% up}, ahk_id %id% Sleep, 200 } loop, 2{ gosub, PressX Sleep, 1200 } Sleep, %ps_load_time3% loop, 2{ gosub, PressX Sleep, 1000 } return Menu_time: loop, 9{ gosub, PressX Sleep, 1700 } Sleep, 2000 ControlSend,, {Right down}, ahk_id %id% Sleep, 200 ControlSend,, {Right up}, ahk_id %id% Sleep, 500 gosub, PressX Sleep, %ps_load_time1% gosub, PressX Sleep, 1000 ControlSend,, {Esc down}, ahk_id %id% Sleep, 200 ControlSend,, {Esc up}, ahk_id %id% loop, 2 { gosub, PressX Sleep, 500 } Sleep, %ps_load_time2% ControlSend,, {Down down}, ahk_id %id% Sleep, 200 ControlSend,, {Down up}, ahk_id %id% Sleep, 500 loop, %menu_loops% { ControlSend,, {%MenuDirect% down}, ahk_id %id% Sleep, 50 ControlSend,, {%MenuDirect% up}, ahk_id %id% Sleep, 200 } loop, 2{ gosub, PressX Sleep, 2000 } Sleep, %ps_load_time3% gosub, PressX Sleep, 2000 return ;; General Functions for AHK PixelTuning: x_ratio := ps_win_width/640 y_ratio := ps_win_height/360 pix1x := Floor(pix1x*x_ratio) pix1y := Floor(pix1y*y_ratio) pix2x := Floor(pix2x*x_ratio) pix2y := Floor(pix2y*y_ratio) return GrabRemotePlay: WinGet, remotePlay_id, List, ahk_exe RemotePlay.exe if (remotePlay_id = 0) { MsgBox, PS4 Remote Play not found return } Loop, %remotePlay_id% { id := remotePlay_id%A_Index% WinGetTitle, title, % "ahk_id " id If InStr(title, "PS Remote Play") break } WinGetClass, remotePlay_class, ahk_id %id% WinMove, ahk_id %id%,, 0, 0, 640, 360 ControlFocus,, ahk_class %remotePlay_class% WinActivate, ahk_id %id% GetClientSize(id, ps_win_width, ps_win_height) gosub, PixelTuning return RPwind: WinGet, remotePlay_id, List, ahk_exe RemotePlay.exe if (remotePlay_id = 0) { MsgBox, PS4 Remote Play not found return } Loop, %remotePlay_id% { id := remotePlay_id%A_Index% WinGetTitle, title, % "ahk_id " id If InStr(title, "PS Remote Play") break } WinGetClass, remotePlay_class, ahk_id %id% WinMove, ahk_id %id%,, -700, -400, 640, 360 ControlFocus,, ahk_class %remotePlay_class% WinActivate, ahk_id %id% return PixelColorSimple(pc_x, pc_y) { WinGet, remotePlay_id, List, ahk_exe RemotePlay.exe if (remotePlay_id = 0) { MsgBox, PS4 Remote Play not found return } if remotePlay_id { pc_wID := remotePlay_id[0] pc_hDC := DllCall("GetDC", "UInt", pc_wID) pc_fmtI := A_FormatInteger SetFormat, IntegerFast, Hex pc_c := DllCall("GetPixel", "UInt", pc_hDC, "Int", pc_x, "Int", pc_y, "UInt") pc_c := pc_c >> 16 & 0xff | pc_c & 0xff00 | (pc_c & 0xff) << 16 pc_c .= "" SetFormat, IntegerFast, %pc_fmtI% DllCall("ReleaseDC", "UInt", pc_wID, "UInt", pc_hDC) return pc_c } } GetClientSize(hWnd, ByRef w := "", ByRef h := "") { VarSetCapacity(rect, 16) DllCall("GetClientRect", "ptr", hWnd, "ptr", &rect) w := NumGet(rect, 8, "int") h := NumGet(rect, 12, "int") } Distance(c1, c2) { ; function by [VxE], return value range = [0, 441.67295593006372] return Sqrt((((c1>>16)-(c2>>16))**2)+(((c1>>8&255)-(c2>>8&255))**2)+(((c1&255)-(c1&255))**2)) } MenuTest: gosub, GrabRemotePlay gosub, PixelTuning SetKeyDelay, 10 ;get to upper left hand menu gosub, PressLeft gosub, PressLeft gosub, PressLeft gosub, PressLeft gosub, PressLeft gosub, PressLeft gosub, PressX ;get to options menu gosub, PressDown gosub, PressX ;get to Controllers menu gosub, PressRight gosub, PressX ;get to wireless controller 1p gosub, PressDown gosub, PressRight gosub, PressX ;change steering controlls gosub, PressUp gosub, PressX gosub, PressLeft gosub, PressX ;change pedal controlls gosub, PressRight gosub, PressRight gosub, PressRight gosub, PressRight gosub, PressX gosub, PressLeft gosub, PressX ;disable camera control gosub, PressO gosub, PressUp gosub, PressRight gosub, PressX gosub, PressDown gosub, PressX ;apply settings gosub, PressO gosub, PressRight gosub, PressX ;back to menu gosub, PressO gosub, PressO ;enter world circuits gosub, PressDown gosub, PressRight gosub, PressX Sleep, 5000 ;enter panam gosub, PressDown gosub, PressRight gosub, PressRight gosub, PressRight gosub, PressRight gosub, PressRight gosub, PressRight gosub, PressX ;enter race gosub, PressX Sleep, 12000 gosub, PressX Sleep, 2000 ;change gearbox to manual gosub, PressRight gosub, PressX gosub, PressDown gosub, PressX gosub, PressX gosub, PressUp gosub, PressX gosub, PressO ;leave race gosub, PressO gosub, PressX gosub, PressX Sleep, 8000 ;go back to main menu gosub, PressO MsgBox, Reverted settings after AFK return GetColo_p: gosub, GrabRemotePlay ;Screen: 218, 359 (less often used) color_check1 := PixelColorSimple(pix1x, pix1y) ;MsgBox, At the screen with [Replay] [Next Race], Press ColorP2 c1_alt := true MsgBox, Put this in for color_check1 %color_check1% return GetColo_g: gosub, GrabRemotePlay ;Screen: 218, 359 (less often used) color_check2 := PixelColorSimple(pix2x, pix2y) c1_alt := false MsgBox, Put this in for color_check2 %color_check2% return PSystem: Gui, Submit, NoHide if (SysCheck = 1){ ps_load_time1 := 14000 ps_load_time2 := 7000 ps_load_time3 := 8400 } if (SysCheck = 2){ ps_load_time1 := 41500 ps_load_time2 := 12000 ps_load_time3 := 40000 } return MenuSel: Gui, Submit, NoHide if (MenuCheck = 1){ menu_s := 1 } if (MenuCheck = 2){ menu_s := 2 } return PauseLoop: ControlSend,, {%accel% up}, ahk_id %id% ControlSend,, {%nitros% up}, ahk_id %id% ControlSend,, {%turnLeft% up}, ahk_id %id% ControlSend,, {%turnRight% up}, ahk_id %id% return GuiClose: gosub, PauseLoop ExitApp ^Esc::ExitApp