|
|
@ -0,0 +1,312 @@ |
|
|
|
|
|
|
|
Stdout(output:="", sciteCheck := true){ ;output to console - sciteCheck reduces Stdout/Stdin performance,so where performance is necessary disable it accordingly |
|
|
|
|
|
|
|
Global ___console___ |
|
|
|
|
|
|
|
If (sciteCheck && ProcessExist("SciTE.exe") && GetScriptParentProcess() = "SciTE.exe"){ ;if script parent is scite,output to scite console & return |
|
|
|
|
|
|
|
FileAppend, %output%`n, * |
|
|
|
|
|
|
|
Return |
|
|
|
|
|
|
|
} ;CONOUT$ is a special file windows uses to expose attached console output |
|
|
|
|
|
|
|
( output ? ( !___console___? (DllCall("AttachConsole", "int", -1) || DllCall("AllocConsole")) & (___console___:= true) : "" ) & FileAppend(output . "`n","CONOUT$") : DllCall("FreeConsole") & (___console___:= false) & StdExit() ) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Stdin(output:="", sciteCheck := true){ ;output to console & wait for input & return input |
|
|
|
|
|
|
|
Global ___console___ |
|
|
|
|
|
|
|
If (sciteCheck && ProcessExist("SciTE.exe") && GetScriptParentProcess() = "SciTE.exe"){ ;if script parent is scite,output to scite console & return |
|
|
|
|
|
|
|
FileAppend, %output%`n, * |
|
|
|
|
|
|
|
Return |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
( output ? ( !___console___? (DllCall("AttachConsole", "int", -1) || DllCall("AllocConsole")) & (___console___:= true) : "" ) & FileAppend(output . "`n","CONOUT$") & (Stdin := FileReadLine("CONIN$",1)) : DllCall("FreeConsole") & (___console___:= false) & StdExit() ) |
|
|
|
|
|
|
|
Return Stdin |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
StdExit(){ |
|
|
|
|
|
|
|
If GetScriptParentProcess() = "cmd.exe" ;couldn't get this: 'DllCall("GenerateConsoleCtrlEvent", CTRL_C_EVENT, 0)' to work so... |
|
|
|
|
|
|
|
ControlSend, , {Enter}, % "ahk_pid " . GetParentProcess(GetCurrentProcess()) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
FileAppend(str, file){ |
|
|
|
|
|
|
|
FileAppend, %str%, %file% |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
FileReadLine(file,lineNum){ |
|
|
|
|
|
|
|
FileReadLine, retVal, %file%, %lineNum% |
|
|
|
|
|
|
|
return retVal |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ProcessExist(procName){ |
|
|
|
|
|
|
|
Process, Exist, % procName |
|
|
|
|
|
|
|
Return ErrorLevel |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
GetScriptParentProcess(){ |
|
|
|
|
|
|
|
return GetProcessName(GetParentProcess(GetCurrentProcess())) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
GetParentProcess(PID) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
static function := DllCall("GetProcAddress", "ptr", DllCall("GetModuleHandle", "str", "kernel32.dll", "ptr"), "astr", "Process32Next" (A_IsUnicode ? "W" : ""), "ptr") |
|
|
|
|
|
|
|
if !(h := DllCall("CreateToolhelp32Snapshot", "uint", 2, "uint", 0)) |
|
|
|
|
|
|
|
return |
|
|
|
|
|
|
|
VarSetCapacity(pEntry, sz := (A_PtrSize = 8 ? 48 : 36)+(A_IsUnicode ? 520 : 260)) |
|
|
|
|
|
|
|
Numput(sz, pEntry, 0, "uint") |
|
|
|
|
|
|
|
DllCall("Process32First" (A_IsUnicode ? "W" : ""), "ptr", h, "ptr", &pEntry) |
|
|
|
|
|
|
|
loop |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
if (pid = NumGet(pEntry, 8, "uint") || !DllCall(function, "ptr", h, "ptr", &pEntry)) |
|
|
|
|
|
|
|
break |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
DllCall("CloseHandle", "ptr", h) |
|
|
|
|
|
|
|
return Numget(pEntry, 16+2*A_PtrSize, "uint") |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
GetProcessName(PID) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
static function := DllCall("GetProcAddress", "ptr", DllCall("GetModuleHandle", "str", "kernel32.dll", "ptr"), "astr", "Process32Next" (A_IsUnicode ? "W" : ""), "ptr") |
|
|
|
|
|
|
|
if !(h := DllCall("CreateToolhelp32Snapshot", "uint", 2, "uint", 0)) |
|
|
|
|
|
|
|
return |
|
|
|
|
|
|
|
VarSetCapacity(pEntry, sz := (A_PtrSize = 8 ? 48 : 36)+260*(A_IsUnicode ? 2 : 1)) |
|
|
|
|
|
|
|
Numput(sz, pEntry, 0, "uint") |
|
|
|
|
|
|
|
DllCall("Process32First" (A_IsUnicode ? "W" : ""), "ptr", h, "ptr", &pEntry) |
|
|
|
|
|
|
|
loop |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
if (pid = NumGet(pEntry, 8, "uint") || !DllCall(function, "ptr", h, "ptr", &pEntry)) |
|
|
|
|
|
|
|
break |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
DllCall("CloseHandle", "ptr", h) |
|
|
|
|
|
|
|
return StrGet(&pEntry+28+2*A_PtrSize, A_IsUnicode ? "utf-16" : "utf-8") |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
GetCurrentProcess() |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
return DllCall("GetCurrentProcessId") |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases. |
|
|
|
|
|
|
|
; #Warn ; Enable warnings to assist with detecting common errors. |
|
|
|
|
|
|
|
SendMode Input ; Recommended for new scripts due to its superior speed and reliability. |
|
|
|
|
|
|
|
SetWorkingDir %A_ScriptDir% ; Ensures a consistent starting directory. |
|
|
|
|
|
|
|
#MaxThreadsPerHotkey, 2 ;with this each hotkey can have more than 1 "thread" allowing us to execute "space::" again |
|
|
|
|
|
|
|
;even though it's still stuck in the loop. |
|
|
|
|
|
|
|
;space:: |
|
|
|
|
|
|
|
;toggle:=!toggle |
|
|
|
|
|
|
|
;loop { |
|
|
|
|
|
|
|
; send, {Numpad0} ;send the Enter key, which needs to be in brackets, then text "/oos" followed by another enter. |
|
|
|
|
|
|
|
; sleep, 100 |
|
|
|
|
|
|
|
; send, {Numpad0} |
|
|
|
|
|
|
|
; sleep, 100 |
|
|
|
|
|
|
|
; send, {Numpad0} |
|
|
|
|
|
|
|
; sleep, 2000 |
|
|
|
|
|
|
|
; send, {Z} |
|
|
|
|
|
|
|
; sleep, 27500 ;sleep for 5000 milliseconds/5 seconds |
|
|
|
|
|
|
|
;} until !toggle |
|
|
|
|
|
|
|
;return |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
WinActivate, FINAL FANTASY XIV |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
;Normal - 0xAAAAAA |
|
|
|
|
|
|
|
;Good - 0xB569FF 160 284 |
|
|
|
|
|
|
|
;Excellent - 0xEEEEEE 233 282 |
|
|
|
|
|
|
|
;BGR |
|
|
|
|
|
|
|
;Crafting Window - 0xFFFFFF 1283 655 |
|
|
|
|
|
|
|
;Action Ready - 0x636663 |
|
|
|
|
|
|
|
;Action Not Ready - 3E3F3E |
|
|
|
|
|
|
|
;100% Quality - 0x60DC97 336 269 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
WaitForCraftingWindow() { |
|
|
|
|
|
|
|
Stdout("Waiting for Crafting Window...") |
|
|
|
|
|
|
|
sleep, 500 |
|
|
|
|
|
|
|
loop { |
|
|
|
|
|
|
|
MouseGetPos,MouseX,MouseY |
|
|
|
|
|
|
|
PixelGetColor,color,%MouseX%,%MouseY% |
|
|
|
|
|
|
|
Stdout(color . " " . MouseX . " " . MouseY) |
|
|
|
|
|
|
|
sleep, 50 |
|
|
|
|
|
|
|
} until CraftingWindowOpen() |
|
|
|
|
|
|
|
send, {Numpad0} |
|
|
|
|
|
|
|
sleep, 50 |
|
|
|
|
|
|
|
send, {Numpad0} |
|
|
|
|
|
|
|
sleep, 50 |
|
|
|
|
|
|
|
send, {Numpad0} |
|
|
|
|
|
|
|
sleep, 150 |
|
|
|
|
|
|
|
if (!CraftingWindowOpen()) { |
|
|
|
|
|
|
|
return true |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
return false |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ProgressStep(ByRef step,ByRef cp,cpcost,stepamt=1) { |
|
|
|
|
|
|
|
cp -= cpcost |
|
|
|
|
|
|
|
step += stepamt |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
WaitForReady() { |
|
|
|
|
|
|
|
global toggle |
|
|
|
|
|
|
|
loop { |
|
|
|
|
|
|
|
Stdout("Waiting for Ready...") |
|
|
|
|
|
|
|
sleep, 250 |
|
|
|
|
|
|
|
} until (ActionReady()) |
|
|
|
|
|
|
|
if (!toggle) { |
|
|
|
|
|
|
|
return false |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
return true |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CraftingRotation(ByRef STEP) { |
|
|
|
|
|
|
|
global toggle |
|
|
|
|
|
|
|
CP = 252 |
|
|
|
|
|
|
|
FINALSTEP = 13 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (!WaitForReady()) { |
|
|
|
|
|
|
|
return |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
loop { |
|
|
|
|
|
|
|
if (IsMaxQuality()) { |
|
|
|
|
|
|
|
STEP = FINALSTEP |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
Switch STEP |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
Case 1: |
|
|
|
|
|
|
|
send, {5} |
|
|
|
|
|
|
|
ProgressStep(STEP,CP,18) |
|
|
|
|
|
|
|
Case 2: |
|
|
|
|
|
|
|
if (IsExcellent()) { |
|
|
|
|
|
|
|
send, {2} |
|
|
|
|
|
|
|
ProgressStep(STEP,CP,18,2) |
|
|
|
|
|
|
|
WaitForReady() |
|
|
|
|
|
|
|
PressKeyWithModifier("Ctrl","1") |
|
|
|
|
|
|
|
ProgressStep(STEP,CP,56,0) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
TricksOfTheTrade(CP) |
|
|
|
|
|
|
|
PressKeyWithModifier("Ctrl","1") |
|
|
|
|
|
|
|
ProgressStep(STEP,CP,56) |
|
|
|
|
|
|
|
Case 3, 4, 5, 6, 7: |
|
|
|
|
|
|
|
if ((IsGood() or IsExcellent()) and CP > 160) { |
|
|
|
|
|
|
|
send, {2} |
|
|
|
|
|
|
|
ProgressStep(STEP,CP,18) |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
PressKeyWithModifier("Ctrl","3") |
|
|
|
|
|
|
|
ProgressStep(STEP,CP,0) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
Case 8: |
|
|
|
|
|
|
|
TricksOfTheTrade(CP) |
|
|
|
|
|
|
|
send, {3} |
|
|
|
|
|
|
|
ProgressStep(STEP,CP,88) |
|
|
|
|
|
|
|
Case 9: |
|
|
|
|
|
|
|
TricksOfTheTrade(CP) |
|
|
|
|
|
|
|
send, {4} |
|
|
|
|
|
|
|
ProgressStep(STEP,CP,18) |
|
|
|
|
|
|
|
Case 10, 11, 12: |
|
|
|
|
|
|
|
if (CP > 54) { |
|
|
|
|
|
|
|
PressKeyWithModifier("Shift","2") |
|
|
|
|
|
|
|
ProgressStep(STEP,CP,32) |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
send, {2} |
|
|
|
|
|
|
|
ProgressStep(STEP,CP,18) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
Case 13: |
|
|
|
|
|
|
|
send, {1} |
|
|
|
|
|
|
|
ProgressStep(STEP,CP,0) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
loop { |
|
|
|
|
|
|
|
Stdout("Waiting for Ready...") |
|
|
|
|
|
|
|
sleep, 250 |
|
|
|
|
|
|
|
} until (ActionReady() or STEP >= FINALSTEP + 1) |
|
|
|
|
|
|
|
Stdout("STEP " . STEP . ": " . CP) |
|
|
|
|
|
|
|
} until (STEP >= FINALSTEP + 1 or !toggle) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
PressKeyWithModifier(modifier,key) { |
|
|
|
|
|
|
|
Send, {%modifier% down} |
|
|
|
|
|
|
|
sleep, 50 |
|
|
|
|
|
|
|
Send, %key% |
|
|
|
|
|
|
|
sleep, 50 |
|
|
|
|
|
|
|
Send, {%modifier% up} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
TricksOfTheTrade(ByRef cp) { |
|
|
|
|
|
|
|
if IsGood() { |
|
|
|
|
|
|
|
PressKeyWithModifier("Ctrl","2") |
|
|
|
|
|
|
|
cp += 20 |
|
|
|
|
|
|
|
loop { |
|
|
|
|
|
|
|
sleep, 250 |
|
|
|
|
|
|
|
} until ActionReady() |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ActionReady() { |
|
|
|
|
|
|
|
PixelGetColor,ScreenCol,1912,700 |
|
|
|
|
|
|
|
if (SubStr(ScreenCol,3,6) = "636663") { |
|
|
|
|
|
|
|
return true |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
return false |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CraftingWindowOpen() { |
|
|
|
|
|
|
|
PixelGetColor,ScreenCol,1283,655 |
|
|
|
|
|
|
|
if (SubStr(ScreenCol,3,6) = "FFFFFF") { |
|
|
|
|
|
|
|
return true |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
return false |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
IsMaxQuality() { |
|
|
|
|
|
|
|
PixelGetColor,ScreenCol,336,269 |
|
|
|
|
|
|
|
if (SubStr(ScreenCol,3,6) = "60DC97") { |
|
|
|
|
|
|
|
return true |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
return false |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
IsGood() { |
|
|
|
|
|
|
|
PixelGetColor,ScreenCol,160,284 |
|
|
|
|
|
|
|
if (SubStr(ScreenCol,7,2) = "FF") { |
|
|
|
|
|
|
|
return true |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
return false |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
IsExcellent() { |
|
|
|
|
|
|
|
PixelGetColor,ScreenCol,233,282 |
|
|
|
|
|
|
|
if (SubStr(ScreenCol,3,6) = "EEEEEE") { |
|
|
|
|
|
|
|
return true |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
return false |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
STEP = -9999 |
|
|
|
|
|
|
|
toggle := false |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
;Stdout("Toggle1: " . toggle) |
|
|
|
|
|
|
|
F11:: |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
toggle := !toggle |
|
|
|
|
|
|
|
Stdout("Toggle1: " . toggle) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
return |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
F12:: |
|
|
|
|
|
|
|
loop { |
|
|
|
|
|
|
|
if !toggle { |
|
|
|
|
|
|
|
Stdout("Toggle was false. Toggle is now " . toggle) |
|
|
|
|
|
|
|
toggle = true |
|
|
|
|
|
|
|
break |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
Stdout("Crafting is on. Starting craft...") |
|
|
|
|
|
|
|
STEP = 1 |
|
|
|
|
|
|
|
if (WaitForCraftingWindow()) { |
|
|
|
|
|
|
|
CraftingRotation(STEP) |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
toggle = false |
|
|
|
|
|
|
|
Stdout("Toggle4: " . toggle) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
sleep, 250 |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
return |