Code:
SetWorkingDir %A_ScriptDir%
PauseFlag := 0
Gui Add, GroupBox, h87 w250, Adventure Bot Control (arrow = blade position)
Gui Add, Button, xm+5 ym+12 w80 h23 gTopL, 🡼
Gui Add, Button, xm+85 ym+12 w80 h23 gTop, 🡹
Gui Add, Button, xm+165 ym+12 w80 h23 gTopR, 🡽
Gui Add, Button, xm+5 ym+35 w80 h23 gLeft, 🡸
Gui Add, Button, xm+85 ym+35 w80 h23, unused
Gui Add, Button, xm+165 ym+35 w80 h23 gRight, 🡺
Gui Add, Button, xm+5 ym+58 w80 h23 gBotL, 🡿
Gui Add, Button, xm+85 ym+58 w80 h23 gBot,🡻
Gui Add, Button, xm+165 ym+58 w80 h23 gBotR, 🡾
Gui Add, GroupBox, h87 w90 x262 y6, Tools
Gui Add, Button, xm+257 ym+12 w80 h23 gPxChk, Pixel Checker
Gui Add, Button, xm+257 ym+35 w80 h23 gPause vToggle, Pause
Gui Add, Button, xm+257 ym+58 w80 h23 gStop, Stop
Gui Show,, Nk Bots v1.5
Return
TopL:
Run, NkAdvBot.ahk "TopL"
Return
Top:
Run, NkAdvBot.ahk "Top"
Return
TopR:
Run, NkAdvBot.ahk "TopR"
Return
Left:
Run, NkAdvBot.ahk "Left"
Return
Right:
Run, NkAdvBot.ahk "Right"
Return
BotL:
Run, NkAdvBot.ahk "BotL"
Return
Bot:
Run, NkAdvBot.ahk "Bot"
Return
BotR:
Run, NkAdvBot.ahk "BotR"
Return
Pause:
Send {Numpad1}
if(PauseFlag=0){
PauseFlag := 1
GuiControl,,Toggle,Resume
}else{
PauseFlag := 0
GuiControl,,Toggle,Pause
}
Return
Stop:
Send {Numpad0}
Return
PxChk:
Run, NkPxChk.ahk
Return
GuiClose:
Send {Numpad0}
ExitApp
Return
Code:
#SingleInstance force
#NoTrayIcon
;get window handle
hWnd := WinExist("ahk_exe Trove.exe")
if(hWnd=""){
MsgBox, 48, Error, No Trove window found
ExitApp
}else{
CoordMode, Mouse, Screen
CoordMode, Pixel, Screen
SysGet, WindowBorderWidth, 32
;Delay between each key (ms) to avoid some bugs while typing
SetKeyDelay, 40
}
;Retrieve the direction from args[1] and setup the keys (don't ask me why, dir is always equal to 1, which is also the name of the first arg var, so it works only like this Ô_o
dir := 1
if (%dir% = "TopL"){
xDirKey := "q"
yDirKey := "z"
}else if (%dir% = "Top"){
xDirKey := ""
yDirKey := "z"
}else if (%dir% = "TopR"){
xDirKey := "d"
yDirKey := "z"
}else if (%dir% = "Left"){
xDirKey := "q"
yDirKey := ""
}else if (%dir% = "Right"){
xDirKey := "d"
yDirKey := ""
}else if (%dir% = "BotL"){
xDirKey := "q"
yDirKey := "s"
}else if (%dir% = "Bot"){
xDirKey := ""
yDirKey := "s"
}else if (%dir% = "BotR"){
xDirKey := "d"
yDirKey := "s"
}
;Init quests tracker
ClearedDungeons := 0
Loop {
ToolTipColor(0x262626,0xffab87)
ToolTip, Dungeons completed : %ClearedDungeons%`nPress num1 to pause`nPress num0 to exit, 10, 34
Sleep 200
ControlSend,,{w},ahk_id %hWnd%
Sleep 100
ControlSend,,{z down},ahk_id %hWnd%
ControlSend,,{d down},ahk_id %hWnd%
Sleep 100
ControlSend,,{Space},ahk_id %hWnd%
Sleep 200
ControlSend,,{Space},ahk_id %hWnd%
Sleep 200
ControlSend,,{Space},ahk_id %hWnd%
Sleep 200
ControlSend,,{Space},ahk_id %hWnd%
Sleep 200
ControlSend,,{Space},ahk_id %hWnd%
Sleep 200
ControlSend,,{Space down},ahk_id %hWnd%
Sleep 600
ControlSend,,{z up},ahk_id %hWnd%
ControlSend,,{d up},ahk_id %hWnd%
ControlSend,,{Space up},ahk_id %hWnd%
Sleep 200
;respawn to the rally blade and use it
ControlSend,,{Enter}{Shift down}:{Shift up}respawn{Enter},ahk_id %hWnd%
Sleep 1000
ControlSend,,e,ahk_id %hWnd%
;Send {e}
Sleep 2000
ControlSend,,w,ahk_id %hWnd%
ControlSend,,{%yDirKey% down},ahk_id %hWnd%
ControlSend,,{%xDirKey% down},ahk_id %hWnd%
Sleep 300
ControlSend,,{%yDirKey% up},ahk_id %hWnd%
Sleep 100
ControlSend,,{%xDirKey% up},ahk_id %hWnd%
Sleep 1000
ControlSend,,e,ahk_id %hWnd%
Sleep 3000
TimeOut = 0
FoundDungeon = 0
Loop {
;detect a dungeon TO-DO : Edit for multi accounts
Dungeon1 := PixelColorSimple(1560 , 122, hWnd)
Dungeon2 := PixelColorSimple(1560 , 194, hWnd)
Dungeon3 := PixelColorSimple(1560 , 266, hWnd)
if (Dungeon1 = "0xFEF89A"||Dungeon2 = "0xFEF89A"||Dungeon3 = "0xFEF89A")
{
FoundDungeon = 1
if (TimeOut = 18)
{
;break after 5000ms*18=90s in uncleared dungeon
Break
}
TimeOut++
;fake human moves in 5000ms loop
Sleep 500
ControlSend,,&,ahk_id %hWnd%
Sleep 4500 ;=5000ms wait per loop inside dungeon
}
else
{
;When the dungeon is completed (after waiting a bit and the detected icon disappeared)
if (FoundDungeon = 1)
{
ClearedDungeons++
;time to loot !
Sleep 2000
;wait for chest to be destroyed
ControlSend,,{e down},ahk_id %hWnd%
;auto loot everything
Sleep 5000
ControlSend,,{e up},ahk_id %hWnd%
}
Break
}
}
}
Numpad0::ExitApp
Numpad1::
ToolTipColor(0x262626,0xff0000)
ToolTip, The bot is paused `nPress num1 to resume, 10, 34
Pause,,1
Return
;libraries :
;Thanks to lexikos for his pixel color and tooltip color libs
PixelColorSimple(pc_x, pc_y, hWnd)
{
SysGet, WindowTitleHeight, 4
SysGet, WindowBorderWidth, 45
pc_hDC := DllCall("GetDC", "UInt", hWnd)
pc_fmtI := A_FormatInteger
SetFormat, IntegerFast, Hex
pc_c := DllCall("GetPixel", "UInt", pc_hDC, "Int", pc_x+WindowBorderWidth, "Int", pc_y-WindowTitleHeight, "UInt")
pc_c := pc_c >> 16 & 0xff | pc_c & 0xff00 | (pc_c & 0xff) << 16
pc_c .= ""
SetFormat, IntegerFast, %pc_fmtI%
DllCall("ReleaseDC", "UInt", hWnd, "UInt", pc_hDC)
return pc_c
}
ToolTipColor(Background := "", Text := "", hwnd := "") {
static bc := "", tc := ""
if (hwnd = "") {
if (Background != "")
bc := Background="Default" ? "" : _TTG("Color", Background)
if (Text != "")
tc := Text="Default" ? "" : _TTG("Color", Text)
_TTHook()
}
else {
VarSetCapacity(empty, 2, 0)
DllCall("UxTheme.dll\SetWindowTheme", "ptr", hwnd, "ptr", 0
, "ptr", (bc != "" && tc != "") ? &empty : 0)
if (bc != "")
DllCall("SendMessage", "ptr", hwnd, "uint", 1043, "ptr", bc, "ptr", 0)
if (tc != "")
DllCall("SendMessage", "ptr", hwnd, "uint", 1044, "ptr", tc, "ptr", 0)
}
}
_TTHook() {
static hook := 0
if !hook
hook := DllCall("SetWindowsHookExW", "int", 4
, "ptr", RegisterCallback("_TTWndProc"), "ptr", 0
, "uint", DllCall("GetCurrentThreadId"), "ptr")
}
_TTWndProc(nCode, _wp, _lp) {
Critical 999
;lParam := NumGet(_lp+0*A_PtrSize)
;wParam := NumGet(_lp+1*A_PtrSize)
uMsg := NumGet(_lp+2*A_PtrSize, "uint")
hwnd := NumGet(_lp+3*A_PtrSize)
if (nCode >= 0 && (uMsg = 1081 || uMsg = 1036)) {
_hack_ = ahk_id %hwnd%
WinGetClass wclass, %_hack_%
if (wclass = "tooltips_class32") {
ToolTipColor(,, hwnd)
}
}
return DllCall("CallNextHookEx", "ptr", 0, "int", nCode, "ptr", _wp, "ptr", _lp, "ptr")
}
_TTG(Cmd, Arg1, Arg2 := "") {
static htext := 0, hgui := 0
if !htext {
Gui _TTG: Add, Text, +hwndhtext
Gui _TTG: +hwndhgui +0x40000000
}
Gui _TTG: %Cmd%, %Arg1%, %Arg2%
if (Cmd = "Font") {
GuiControl _TTG: Font, %htext%
SendMessage 0x31, 0, 0,, ahk_id %htext%
return ErrorLevel
}
if (Cmd = "Color") {
hdc := DllCall("GetDC", "ptr", htext, "ptr")
SendMessage 0x138, hdc, htext,, ahk_id %hgui%
clr := DllCall("GetBkColor", "ptr", hdc, "uint")
DllCall("ReleaseDC", "ptr", htext, "ptr", hdc)
return clr
}
}