added a few failsafes and some sort of ocr since I don't seem to be able to use the simplest tool.
Tightened the timings as well.
there's the original captures, the others might need some trimming.
Code: Select all
#include OCR.ahk
#Warn
#SingleInstance Force
ProcessSetPriority "H"
SendMode "event"
SetWorkingDir A_ScriptDir
SetTitleMatchMode 2
#MaxThreadsperHotkey 1
SetKeyDelay 0, 50
SetMouseDelay 50
WinActivate "Starfield"
HotIfWinActive "Starfield"
InstallMouseHook
toggle := false
;----------------------------------------------------------------------------
time:= "time" ;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
;----------------------------------------------------------------------------
timeimg:= "*95 " time ".png"
;----------------------------------------------------------------------------
coldev:= "*95" ;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
;----------------------------------------------------------------------------
checkindex:= 1
item:= 0
indexfactor:= 0
indexcomp:= ""
clockwork2comp:= ""
clockworkcompare:= ""
hl:= "h.png"
;save1posList:= [[1025, 395, 1035, 410], [1037, 395, 1047, 410], [1054, 395, 1064, 410], [1067, 395, 1077, 410], [1085, 395, 1095, 410], [1098, 395, 1108, 410]]
;save2posList:= [[1025, 466, 1035, 481], [1037, 466, 1047, 481], [1054, 466, 1064, 481], [1067, 466, 1077, 481], [1085, 466, 1095, 481], [1098, 466, 1108, 481]]
;save3posList:= [[1025, 538, 1035, 553], [1037, 538, 1047, 553], [1054, 538, 1064, 553], [1067, 538, 1077, 553], [1085, 538, 1095, 553], [1098, 538, 1108, 553]]
;save4posList:= [[1025, 609, 1035, 624], [1037, 609, 1047, 624], [1054, 609, 1064, 624], [1067, 609, 1077, 624], [1085, 609, 1095, 624], [1098, 609, 1108, 624]]
;save5posList:= [[1025, 681, 1035, 696], [1037, 681, 1047, 696], [1054, 681, 1064, 696], [1067, 681, 1077, 696], [1085, 681, 1095, 696], [1098, 681, 1108, 696]]
;save6posList:= [[1025, 752, 1035, 767], [1037, 752, 1047, 767], [1054, 752, 1064, 767], [1067, 752, 1077, 767], [1085, 752, 1095, 767], [1098, 752, 1108, 767]]
;save7posList:= [[1025, 824, 1035, 839], [1037, 824, 1047, 839], [1054, 824, 1064, 839], [1067, 824, 1077, 839], [1085, 824, 1095, 839], [1098, 824, 1108, 839]]
;----------------------------------------------------------------------------
;----------------------------------------------------------------------------
f10::{
pause
}
f11::{
; Pre-established coordinates
;local x := 1025
;local y := 395
;local w := 1035
;local h := 410
; Perform OCR on the specified rectangle and store the result in a variable
; ocrText := OCR.FromRect(x, y, w, h,,2).Text
; Display the result in a message box
; MsgBox ocrText
global indexfactor:= 3
clockwork2
}
;----------------------------------------------------------------------------
f1:: {
eraser
}
;----------------------------------------------------------------------------
f2:: {
global checkindex+= 1
}
;----------------------------------------------------------------------------
f3:: {
loadcheck
}
;----------------------------------------------------------------------------
f4:: {
global checkindex+= 1
loadcheck
}
;----------------------------------------------------------------------------
f8:: {
eraserloadcheck
}
;----------------------------------------------------------------------------
f12:: {
exitapp
}
;----------------------------------------------------------------------------
f6:: {
reload
}
;----------------------------------------------------------------------------
;----------------------------------------------------------------------------
F7:: {
starto2
loop {
global item:= 0
sleep(100)
;----------------------------------------------------------------------------
load ;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
;----------------------------------------------------------------------------
;---------custom movement
sleep(50)
send "{w down}{a down}{LButton down}{Lctrl down}"
sleep(200)
send "{w up}{a up}"
sleep(900)
sleep(900)
send "{LButton up}{w down}"
sleep(200)
send "{w up}{Lctrl up}"
; loop {
; if pixelsearch(&x_o2, &y_o2, 1376, 276, 1377, 277, 0xFFFFFF, 20) {
; send "{lcontrol up}"
; break
; }
; }
SetTimer () => ToolTip(), -10
sleep(100)
;------------item scan
;----------------------------------------------------------------------------
loot ;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
;----------------------------------------------------------------------------
if (item = 1)
;----------------------------------------------------------------------------
save ;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
;----------------------------------------------------------------------------
} ;---------main hotkey loop end
} ;--------- end
;----------------------------------------------------------------------------
;----------------------------------------------------------------------------
;----------------------------------------------------------------------------
;----------------------------------------------------------------------------
;---------hotkey functions
;----------------------------------------------------------------------------
loot() {
global item:= 0
if imagesearch(&x_loot, &y_loot, 0, 0, 1920,1080, "*55 lootbox.png") { ;<----------searches for the lootbox
tooltip("Lootbox found", x_loot, y_loot)
loop 9 {
if (pixelsearch(&x_legendary, &y_legendary, x_loot-120, y_loot+50, x_loot+120,y_loot+60, 0xEDC162, 30) or pixelsearch(&x_iconic, &y_iconic, x_loot-120, y_loot+50, x_loot+120,y_loot+60, 0x42356A, 30) or imagesearch(&x_advancedw, &y_advancedw, x_loot-120, y_loot+50, x_loot+120,y_loot+460, coldev " advancedw.png")) {
tooltip("item found", x_loot, y_loot)
sleep(50)
item:= 1
loop 7 {
send "{e down}"
sleep(50)
send "{e up}"
sleep(50)
}
break
}
}
}
SetTimer () => ToolTip(), -10
}
;----------------------------------------------------------------------------
load() {
box
loadmenu
save1
loadloop
SetTimer () => ToolTip(), -10
sleep(2000) ;---------load delay
o2
}
;-------------------------------------------------------------------------
save() {
box
savemenu
save1
send "{e down}"
sleep(50)
send "{e up}"
sleep(50)
o2
}
;----------------------------------------------------------------------------
quickload() {
f9down := GetKeyState("f9")
sleep(50)
if (f9down = 1) {
sleep(50)
send "{f9 up}"
sleep(50)
}
send "{f9}"
}
;----------------------------------------------------------------------------
loadcheck() {
box
loadmenu
save1
saveindex
send "{e down}"
sleep(50)
send "{e up}"
sleep(50)
send "{e down}"
sleep(50)
send "{e up}"
sleep(2000) ; load delay
o2
inventory
}
;----------------------------------------------------------------------------
eraser() {
box
loadmenu
save1
saveindex
send "{r down}"
sleep(50)
send "{r up}"
sleep(2000)
rdown := getkeystate("r")
if (rdown = 1) {
send "{r up}"
sleep(50)
send "{e down}"
sleep(50)
send "{e up}"
sleep(50)
SetTimer () => ToolTip(), -10
} else
settimer () => tooltip(), -10
}
;----------------------------------------------------------------------------
eraserloadcheck() {
box
loadmenu
save1
saveindex
send "{r down}"
sleep(50)
send "{r up}"
sleep(1000)
sleep(500)
send "{e down}"
sleep(50)
send "{e up}"
sleep(100)
;----------file erased
loop 2 {
send "{e down}"
sleep(50)
send "{e up}"
sleep(50)
}
SetTimer () => ToolTip(), -10
sleep(2000) ; load delay
o2
inventory
}
;----------------------------------------------------------------------------
;----------------------------------------------------------------------------
;----------------------------------------------------------------------------
;----------------------------------------------------------------------------
;---------aux functions
;----------------------------------------------------------------------------
o2() {
while !(pixelsearch(&x_o2, &y_o2, 106, 920, 108, 922, 0xFFFFFF, 20))
sleep(50)
}
;----------------------------------------------------------------------------
starto2() {
while !(pixelsearch(&x_o2, &y_o2, 106, 920, 108, 922, 0xFFFFFF, 20)) {
send "{esc down}"
sleep(50)
send "{esc up}"
sleep(50)
}
}
;----------------------------------------------------------------------------
box() {
while !(pixelsearch(&x_g, &y_g, 77, 445, 77, 452, 0x394145, 20) and pixelsearch(&x_b, &y_b, 290, 761, 290, 761, 0x09141A, 10) and not pixelsearch(&x_w, &y_w, 111, 300, 111, 300, 0xFFFFFF, 20)) { ;menu check
send "{esc down}"
sleep(50)
send "{esc up}"
sleep(150)
}
}
;----------------------------------------------------------------------------
loadmenu() {
while (pixelsearch(&x_g, &y_g, 77, 445, 77, 452, 0x394145, 20) and pixelsearch(&x_b, &y_b, 290, 761, 290, 761, 0x09141A, 20) and not pixelsearch(&x_w, &y_w, 111, 300, 111, 300, 0xFFFFFF, 20)) { ;menu check
while (pixelsearch(&x_w, &y_w, 77, 380, 77, 695, 0xFFFFFF, 20)) {
if (y_w < 449) {
send "{down down}"
sleep(50)
send "{down up}"
sleep(50)
} else if (y_w > 484) {
send "{up down}"
sleep(50)
send "{up up}"
sleep(50)
} else {
send "{e down}"
sleep(50)
send "{e up}"
sleep(50)
break 2
}
}
send "{esc down}"
sleep(50)
send "{esc up}"
sleep(50)
}
}
;----------------------------------------------------------------------------
savemenu() {
while (pixelsearch(&x_g, &y_g, 77, 445, 77, 452, 0x394145, 20) and pixelsearch(&x_b, &y_b, 290, 761, 290, 761, 0x09141A, 20) and not pixelsearch(&x_w, &y_w, 111, 300, 111, 300, 0xFFFFFF, 20)) { ;menu check
while (pixelsearch(&x_w, &y_w, 77, 380, 77, 695, 0xFFFFFF, 20)) {
if (y_w < 413) {
send "{down down}"
sleep(50)
send "{down up}"
sleep(50)
} else if (y_w > 449) {
send "{up down}"
sleep(50)
send "{up up}"
sleep(50)
} else {
send "{e down}"
sleep(50)
send "{e up}"
sleep(50)
break 2
}
sleep(50)
}
send "{esc down}"
sleep(50)
send "{esc up}"
sleep(50)
}
settimer () => tooltip(), -10
}
;----------------------------------------------------------------------------
save1() {
while (pixelsearch(&x_g, &y_g, 77, 440, 77, 457, 0x394145, 20) and not ((pixelsearch(&x_w, &y_w, 111, 300, 111, 300, 0xFFFFFF, 20)) or pixelsearch(&x_b, &y_b, 290, 761, 290, 761, 0x09141A, 20))) { ;menu check
while (pixelsearch(&x_w, &y_w, 313, 380, 313, 877, 0xFFFFFF, 20) and not (pixelsearch(&x_b, &y_b, 290, 761, 290, 761, 0x09141A, 20))) {
if (y_w < 449) ;<----------top save
break 2
send "{up down}"
sleep(50)
send "{up up}"
sleep(50)
}
send "{esc down}"
sleep(50)
send "{esc up}"
sleep(50)
box
break
}
sleep 100
}
;----------------------------------------------------------------------------
loadloop() {
loop { ;<----------chooses the selected load capture
if (A_Index <= 7)
yoffset:= A_Index*71
if imagesearch(&x_autosave, &y_autosave, 390, 320+yoffset, 450, 360+yoffset, "*55 autosave.png") or imagesearch(&x_autosaveh, &y_autosaveh, 1000, 320+yoffset, 1120,360+yoffset, "*55 autosaveh.png") {
send "{r down}"
sleep(50)
send "{r up}"
sleep(50)
send "{e down}"
sleep(50)
send "{e up}"
sleep(50)
}
if imagesearch(&x_time, &y_time, 1000, 320+yoffset, 1120, 360+yoffset, timeimg) { ;<----------finds the selected load capture
tooltip("<<--- " time, 1200, 340+yoffset)
loop 2 {
send "{e down}"
sleep(50)
send "{e up}"
sleep(50)
}
break
}
send "{down down}"
sleep(50)
send "{down up}"
sleep(50)
}
settimer () => tooltip(), -10
}
;----------------------------------------------------------------------------
saveindex() {
global indexcomp
global indexfactor:= 0
global checkindex
global savetime
global clockworkcompare:= 0
global highlight:= true
blockinput "mousemove"
loop {
indexfactor+= 1
if (A_Index <= 7)
yoffset:= A_Index*71
tooltip(indexfactor, 350, 330 + yoffset)
if (imagesearch(&x_autosave, &y_autosave, 390, 320+yoffset, 450 , 360+yoffset, "*55 autosave.png") or imagesearch(&x_autosaveh, &y_autosaveh, 1000, 320+yoffset, 1120,360+yoffset, "*55 autosaveh.png")) {
send "{r down}"
sleep(50)
send "{r up}"
sleep(50)
send "{e down}"
sleep(50)
send "{e up}"
sleep(50)
send "{esc down}"
sleep(50)
send "{esc up}"
sleep(50)
save1
break
}
if imagesearch(&x_time, &y_time, 1000, 320+yoffset, 1120,360+yoffset, timeimg) {
tooltip (time, 1220, 355+yoffset)
Result := MsgBox("END OF SAVES.`nCLICK ABORT TO EXIT THE SCRIPT.`nCLICK RETRY TO RELOAD.","WARNING", "ARI")
if (Result = "retry") {
settimer () => tooltip(), -10
reload
}
if (Result = "abort") {
settimer () => tooltip(), -10
exitapp
}
if Result = "ignore"
return
}
if (checkindex = indexfactor) {
highlight:= true
clockwork
if (indexcomp > indexfactor) {
loop (indexcomp - indexfactor) {
sleep(50)
send "{up down}"
sleep(50)
send "{up up}"
break
}
}
if (indexcomp < indexfactor) {
loop (indexfactor - indexcomp) {
send "{down down}"
sleep(50)
send "{down up}"
sleep(50)
break
}
}
if (indexcomp = indexfactor) {
highlight:= true
clockwork2
if ((clockworkcompare= savetime) or (clockworkcompare= 0)) {
clockworkcompare:= savetime
break
}
}
}
sleep(50)
send "{down down}"
sleep(50)
send "{down up}"
sleep(50)
}
settimer () => tooltip(), -10
blockinput "mousemoveoff"
}
;----------------------------------------------------------------------------
inventory() {
send "{i down}"
sleep(50)
send "{i up}"
sleep(200)
loop 8 {
send "{up down}"
sleep(50)
send "{up up}"
sleep(50)
}
send "{e down}"
sleep(50)
send "{e up}"
sleep(200)
send "{z down}"
sleep(50)
send "{z up}"
sleep(50)
}
;----------------------------------------------------------------------------
clockwork() {
global indexcomp:= ""
saveposList:= [[324, 337], [337, 349], [349, 361]]
indexfact:= indexfactor*71
if indexfact > 497
indexfact:= 497
indexpos1:= 334+(indexfact)-(mod(indexfactor,2))
indexpos2:= indexpos1+17
For each, savepos in saveposList {
Loop 11 {
digit := A_Index - 1
image :="sfdigit-" digit hl
if(ImageSearch(&x_savepos, &y_savepos, savepos[1], indexpos1, savepos[2], indexpos2, "*105 " image)) {
if (digit = "10")
digit := ""
Tooltip(digit, savepos[1], indexpos2)
indexcomp:= indexcomp digit
continue
}
}
}
settimer(() => tooltip(), -100)
}
;----------------------------------------------------------------------------
timecheck() {
global indexcomp
saveposList:= [[324, 337], [337, 349], [349, 361]]
loop 7 {
indexcomp:=""
indexfact:= A_Index*71
if indexfact > 497
indexfact:= 497
indexpos1:= 334+(indexfact)-(mod(A_Index,2))
indexpos2:= indexpos1+17
For each, savepos in saveposList {
forloopindex += 1
Loop 11 {
digit := A_Index - 1
image :="sfdigit-" digit hl
if(ImageSearch(&x_savepos, &y_savepos, savepos[1], indexpos1, savepos[2], indexpos2, "*105 " image)) {
if (digit = "10")
digit := ""
Tooltip(digit, savepos[1], indexpos2)
indexcomp:= indexcomp digit
continue
}
}
}
MsgBox(A_Index ": " indexcomp)
}
settimer(() => tooltip(), -100)
}
;----------------------------------------------------------------------------
clockwork2() {
Global savetime:= ""
saveposList:= [[1025, 1035], [1037, 1047], [1054, 1064], [1067, 1077], [1085, 1095], [1098, 1108]]
saveposfact:= indexfactor*71
if saveposfact > 497
saveposfact:= 497
saveposList1:= 324 + (saveposfact) - mod(indexfactor,2)
saveposList2:= saveposlist1 + 17
For each, savepos in saveposList {
Loop 11 {
digit := A_Index - 1
image := "sfdigit-" digit hl
if(ImageSearch(&x_savepos, &y_savepos, savepos[1], saveposList1, savepos[2], saveposList2, "*105 " image)) {
if (digit = "10")
digit := "0"
Tooltip(digit, savepos[1], saveposList2+3)
savetime:= savetime digit
continue
}
}
}
settimer(() => tooltip(), -100)
}
;----------------------------------------------------------------------------
timecheck2() {
global savetime
saveposList:= [[1025, 1035], [1037, 1047], [1054, 1064], [1067, 1077], [1085, 1095], [1098, 1108]]
loop 7 {
savetime:= ""
saveposfact:= indexfactor*71
if saveposfact > 497
saveposfact:= 497
saveposList1:= 324 + (saveposfact) - mod(indexfactor,2)
saveposList2:= saveposlist1 + 17
For each, savepos in saveposList {
forloopindex += 1
Loop 11 {
digit := A_Index - 1
image :="sfdigit-" digit hl
if(ImageSearch(&x_savepos, &y_savepos, savepos[1], saveposList1, savepos[2], saveposList2, "*105 " image)) {
if (digit = "10")
digit := "0"
Tooltip(".", savepos[1], saveposList2+3)
global savetime:= savetime digit
continue
}
}
}
MsgBox(A_Index ": " savetime)
}
settimer(() => tooltip(), -100)
}
;----------------------------------------------------------------------------
;----------------------------------------------------------------------------
;----------------------------------------------------------------------------
;----------------------------------------------------------------------------
;----------------------------------------------------------------------------
;----------------------------------------------------------------------------
;----------------------------------------------------------------------------
;----------------------------------------------------------------------------
;----------------------------------------------------------------------------
;----------------------------------------------------------------------------
;----------------------------------------------------------------------------
;----------------------------------------------------------------------------
;----------------------------------------------------------------------------
;----------------------------------------------------------------------------
;----------------------------------------------------------------------------
;----------------------------------------------------------------------------
;----------------------------------------------------------------------------
;----------------------------------------------------------------------------
;----------------------------------------------------------------------------
;----------------------------------------------------------------------------
;----------------------------------------------------------------------------
;keyf() {
; key:= ""
; if (GetKeyState(key, )) {
; send "{" key " down}"
; send "{" key " up}"
; }
;}
;;----------------------------------------------------------------------------
;enter() {
; key:= "enter"
;keyf()
;}
;;----------------------------------------------------------------------------
;lbutton() {
; key:= "lbutton"
;keyf()
;}
;;----------------------------------------------------------------------------
;e() {
; key:= "e"
;keyf()
;}
;;----------------------------------------------------------------------------
;esc() {
; key:= "esc"
;keyf()
;}
;;----------------------------------------------------------------------------
;ww() {
; key:= "w"
;keyf()
;}
;;----------------------------------------------------------------------------
;a() {
; key:= "a"
;keyf()
;}
;;----------------------------------------------------------------------------
;s() {
; key:= "s"
;keyf()
;}
;;----------------------------------------------------------------------------
;d() {
; key:= "s"
;keyf()
;}
;;----------------------------------------------------------------------------
;up() {
; key:= "up"
;keyf()
;}
;;----------------------------------------------------------------------------
;down() {
; key:= "down"
;keyf()
;}
;;----------------------------------------------------------------------------
;ii() {
; key:= "i"
;keyf()
;}
;;----------------------------------------------------------------------------
;r() {
; key:= "r"
;keyf()
;}
;;----------------------------------------------------------------------------
;z() {
; key:= "z"
;keyf()
;}
;;----------------------------------------------------------------------------
;q() {
; key:= "q"
;keyf()
;}
;;----------------------------------------------------------------------------
;lcontrol() {
; key:= "lcontrol"
;keyf()
;}
;;----------------------------------------------------------------------------
;lshift() {
; key:= "lshift"
;keyf()
;}
;;----------------------------------------------------------------------------
;keyup() {
;; send "{lbutton up}{esc up}{w up}{a up}{s up}{d up}{e up}{r up}{enter up}{up up}{down up}{i up}{z up}{q up}"
;lbutton
;esc
;ww
;a
;s
;d
;e
;r
;enter
;up
;down
;ii
;z
;q
;lcontrol
;lshift
;}
If you like this code please support the people of the world and the less favored with a personal donation.
Thank you.