Skip to content
MPGHThe Dark Arts
/
RegisterLog in
Forum
Community
What's NewLatest posts across the boardTrendingHottest threads right nowSubscribedThreads you follow
Discussion
GeneralIntroductionsEntertainmentDebate FortFlaming & Rage
Board
News & AnnouncementsMPGH TimesSuggestions & HelpGiveaways
More Sections
Art & Graphic DesignProgrammingHackingCryptocurrency
Hacks & Cheats
Games
ValorantCS2 / CS:GOCall of Duty / WarzoneFortniteApex LegendsEscape From Tarkov
+14 moreLeague of LegendsGTA VMinecraftRustROTMGBattlefieldTroveBattleOnCombat ArmsCrossFireBlackshotRuneScapeDayZDead by Daylight
Resources
Game Hacking TutorialsReverse EngineeringGeneral Game HackingAnti-CheatConsole Game Hacking
Tools
Game Hacking ToolsTrainers & CheatsHack/Release NewsNew
Submit a release →Share your cheat, tool, or config with the community.
AINEW
AI Tools
General & DiscussionPrompt EngineeringLLM JailbreaksHotAI Agents & AutomationLocal / Open Models
AI × Gaming
AI Aimbots & VisionML Anti-CheatGame Bots & Automation
Create
AI Coding / Vibe CodingAI Art & MediaAI Voice & TTS
The AI frontier →Where game hacking meets modern machine learning. Jump in.
Marketplace
Buy & Sell
SellingBuyingTradingUser Services
Trust & Safety
Middleman LoungeMarketplace TalkVouch Copy Profiles
Money
Cryptocurrency TalkCurrency ExchangeWork & Job Offers
Start selling →List accounts, services, and goods. Use the middleman to trade safe.
MPGH The Dark Arts

A community for offensive security research, reverse engineering, and AI.

Community

ForumMarketplaceSearch

Account

RegisterLog in

Legal

Privacy PolicyForum RulesHelp & FAQ
© 2026 MPGH · All rights reserved.Built by the community, for the community. For educational purposes onlyContent is shared for security research and education — we don't condone illegal use. You're responsible for complying with applicable laws. Use at your own risk.
Home › Forum › MultiPlayer Game Hacks & Cheats › Other MMORPG Hacks › Trove Hacks & Cheats › Trove AutoHotkey Scripts

Trove AutoHotkey Scripts

Posts 1–15 of 122 · Page 1 of 9
…
Xaymar
Xaymar
Trove AutoHotkey Scripts
I'm here, with another release for the multiplayer hacking scene - this time for Trove, aka Cube World as an MMO. I bring you a little AutoHotkey script that can automate some common tasks for you, like being AFK and fishing. Seriously, who thought fishing like this was a good idea? Even old PlayStation 1 games had better fishing mini-games!

[ Credits ]
  • taejim for the AutoHotkey bot.
  • AutoHotkey Forum for helping with the toggle-able Hotkey.
  • Fishing List for Trove - looks like it's worth making these bots.


[ Features ]
  • Modular
    The entire Script is based on one Include-able file, which means that you can easily build your own Hotkeys if you have AutoHotkey installed (It's free and less detectable!).
  • Anti-AFK Logout
    Prevents automatic logout by pressing C to open the character menu. Includes: Anti-Detection Timings, Statistics
  • Automatic Fishing Bot
    Automate your fishing needs with a single Hotkey - just press and do something else. I made over ~120k Glim in one day with this bot. Includes: Anti-Detection Timings, Statistics
  • Utility/Tool: Anti-Detection Timings
    I've measured my own reaction times using custom written software and found that I usually respond within 86 - 111ms of the sound being played (plus driver delays, so actually 116 - 141ms).
  • Utility/Tool: Statistics
    Displays a small Statistics ToolTip at the top-left of the window - useful for anyone needing these.


[ Source Code ]
Trove.ahk
Code:
AntiAFK_Code(Index, Key, ByRef RunningVar, ByRef StopVar)
{
    ;- Check if the HotKey is already running.
    if RunningVar
    {
        ; Let's signal the running thread it to stop.
        StopVar := true
        return
    }
    
    ;- Make sure that we actually have a Trove window targeted.
    if not WinActive("Trove")
        return
    
    ;- Signal that we have officially been able to start.
    RunningVar := true
    
    ;- If it's not running, we'll start by grabbing information about the games window.
    WinGet, PID, PID, A
    WinGet, HWND, ID, A
    
    ; Show a tooltip at the windows position.
    CoordMode, ToolTip, Screen
    WinGetPos, winX, winY, winW, winH, ahk_pid %PID%
        
    ;- The actual loop that does our work.
    Timer := 0
    Time_Start := A_TickCount
    Loop
    {
        ; Avoiding AFK is as simple as opening up the Character menu.
        ControlSend, , {c down}, ahk_pid %PID%
        Sleep, 86
        ControlSend, , {c up}, ahk_pid %PID%

        ; Sleep in order to not look like a spammer.
        Random, SleepTime, 5, 50
        Loop %SleepTime%
        {
            ; Check if we should stop.
            if StopVar
                break 2
            
            ; Display AFK time.
            CoordMode, ToolTip, Screen
            WinGetPos, winX, winY, winW, winH, ahk_pid %PID%
            Time := A_TickCount - Time_Start
            ToolTipText =
(
Anti-AFK Bot %Index% is running, press %Key% to stop it.
    Total Time: %Time% ms.
)
            ToolTip, %ToolTipText%, %winX%, %winY%
            
            Random, SleepTime, 86, 111
            Sleep, %SleepTime%
            Timer := Timer + 1
        }
    }
    
    ; Reset state for re-use.
    RunningVar := false
    StopVar := false
    ToolTip, , , , 1
}

AutoFishing_Code(Index, Key, ByRef RunningVar, ByRef StopVar)
{
    ;- Check if the HotKey is already running.
    if RunningVar
    {
        ; Let's signal the running thread it to stop.
        StopVar := true
        return
    }
    
    ;- Make sure that we actually have a Trove window targeted.
    if not WinActive("Trove")
        return
    
    ;- Signal that we're running now.
    RunningVar := true
    
    ;- If it's not running, we'll start by grabbing information about the games window.
    WinGet, PID, PID, A
    WinGet, HWND, ID, A
    
    ;- Pointers
    Base := getProcessBaseAddress(HWND)
    WaterAddress := GetAddressWater(PID, Base, 0x009570DC) 
    LavaAddress := GetAddressLava(PID, Base, 0x009570DC) 
    ChocoAddress := GetAddressChoco(PID, Base, 0x009570DC)
    
    ;- Statistics
    Time_Start := A_TickCount
    Time := 0
    Fishing_Start := A_TickCount
    Fishing := 0
    Fish := 0
    
    HumanPressButton(b, ahk_pid %PID%)
    
    
    ; The main loop based on a State-Machine.
    State=0
    Loop
    {
        ; Show a tooltip at the windows position.
        CoordMode, ToolTip, Screen
        WinGetPos, winX, winY, winW, winH, ahk_pid %PID%
        Time := A_TickCount - Time_Start
        ToolTipText=
(
Auto-Fishing Bot %Index% is running, press %Key% to stop it.
    Total Time: %Time% ms
    Total Fish Caught: %Fish%
    Fishing Time: %Fishing% ms
    State: %State%/%StateNext%
)
        ToolTip, %ToolTipText%, %winX%, %winY%, 1s
        
        ;- State-Machine
        If IsLabel("AutoFishing-" . State)
        {
            Loop 1 {
                Goto AutoFishing-%State%
                
                ; State: Anti-AFK
                AutoFishing-0:
                AutoFishing-AntiAFK-Init:
                    ControlSend, , {c down}, ahk_pid %PID%
                    
                    ; Advance
                    State=AntiAFK
                    StateTimer=0
                    Break
                AutoFishing-AntiAFK:
                    ControlSend, , {c up}, ahk_pid %PID%
                    
                    ; Advance
                    State=AntiDetection-Init
                    StateNext=ThrowHook-Init
                    StateTimer=0
                    Break
                
                ; State: Throw Hook
                AutoFishing-2:
                AutoFishing-ThrowHook-Init:
                    ControlSend, , {f down}, ahk_pid %PID%
                    
                    ; Advance
                    State=ThrowHook
                    StateTimer=0
                    Random, StateMaxTimer, 2, 15
                    Break
                AutoFishing-ThrowHook:
                    ControlSend, , {f up}, ahk_pid %PID%
                    
                    ; Time Display
                    Fishing_Start := A_TickCount
                    
                    ; Advance
                    State=AntiDetection-Init
                    StateNext=Prepare
                    Break
                
                ; State: Prepare for Check
                AutoFishing-Prepare:
                    ; Update Statistics
                    Fishing := A_TickCount - Fishing_Start
                    
                    ; Read memory to determine if we're in the pool of things (it's 1 until it hits the surface).
                    CaughtWater := ReadMemory(PID, WaterAddress)
                    CaughtLava := ReadMemory(PID, LavaAddress)
                    CaughtChoco := ReadMemory(PID, ChocoAddress)
                    
                    if !(CaughtWater || CaughtLava || CaughtChoco)
                    {
                        State=Check
                    }
                    else {
                        ; If 5 seconds have passed, assume we hit the ground and reset.
                        If (Fishing > 5000)
                            State=0
                    }
                    
                    Break
                
                ; State: Check for Fish
                AutoFishing-Check:
                    ; Update Statistics
                    Fishing := A_TickCount - Fishing_Start
                    
                    ; Read memory to determine if we have something hooked or not.
                    ; (Can we do this without reading memory? This is easily detectable, we'd have to mask it like a virus scanner.)
                    CaughtWater := ReadMemory(PID, WaterAddress)
                    CaughtLava := ReadMemory(PID, LavaAddress)
                    CaughtChoco := ReadMemory(PID, ChocoAddress)
                    
                    if (CaughtWater || CaughtLava || CaughtChoco)
                    {
                        Fish := Fish + 1
                        
                        State=AntiDetection-Init
                        StateNext=ReelIn-Init
                    }
                    else 
                    {
                        ; If 45 seconds have passed, we're bugged so reset.
                        if (Fishing > 45000)
                        {
                            State=AntiDetection-Init
                            StateNext=ReelIn-Init
                        }
                    }
                    Break
                    
                ; State: Reel In Hook
                AutoFishing-ReelIn-Init:
                    ControlSend, , {f down}, ahk_pid %PID%
                    
                    State=ReelIn
                    Break
                AutoFishing-ReelIn:
                    ControlSend, , {f up}, ahk_pid %PID%
                    
                    State=CompleteCycle
                    StateNext=Reset
                    Break
                
                ; State: Complete Cycle
                AutoFishing-CompleteCycle-Init:
                    Random, StateMaxTimer, 8, 16
                    
                    State=CompleteCycle
                    StateTimer=0
                    Break
                AutoFishing-CompleteCycle:
                    StateTimer := StateTimer + 1
                    if (StateTimer > StateMaxTimer)
                    {
                        State=AntiDetection-Init
                        StateNext=Reset
                    }
                    Break
                
                ; Reset State
                AutoFishing-Reset:
                    State=0
                    StateNext=
                    StateTimer=0
                    StateMaxTimer=0
                    Break
                
                ; Utility State: Anti-Detection (wait humane amount of time)
                AutoFishing-AntiDetection-Init:
                    Random, StateMaxTimer, 8, 16
                    
                    State=AntiDetection
                    StateTimer=0
                    Break
                AutoFishing-AntiDetection:
                    StateTimer := StateTimer + 1
                    if (StateTimer > StateMaxTimer)
                    {
                        State=%StateNext%
                        StateNext=
                        StateTimer=0
                    }
                    Break
            }
        }
        
        ; Check if we should stop.
        if StopVar
            break
        
        HumanLikeSleep()
    }
    HumanPressButton(b, ahk_pid %PID%)
    
    ; Reset state for re-use.
    RunningVar := false
    StopVar := false
    ToolTip, , , , 1
}

HumanPressButton(Button, To)
{
    ControlSend, , {%Button% down}, %To%
    HumanLikeSleep()
    ControlSend, , {%Button% up}, %To%
}

HumanLikeSleep()
{
    Random, SleepTime, 66, 122
    Sleep, %SleepTime%
}

;- Helpers & Utility
GetAddressWater(PID, Base, Address)
{
    pointerBase := base + Address
    y1 := ReadMemory(PID, pointerBase)
    y2 := ReadMemory(PID, y1 + 0x144)
    y3 := ReadMemory(PID, y2 + 0xe4)
    Return WaterAddress := (y3 + 0x70)   
}

GetAddressLava(PID, Base, Address)
{
    pointerBase := base + Address
    y1 := ReadMemory(PID, pointerBase)
    y2 := ReadMemory(PID, y1 + 0x144)
    y3 := ReadMemory(PID, y2 + 0xe4)
    Return LavaAddress := (y3 + 0x514) 
}

GetAddressChoco(PID, Base, Address)
{
    pointerBase := base + Address
    y1 := ReadMemory(PID, pointerBase)
    y2 := ReadMemory(PID, y1 + 0x144)
    y3 := ReadMemory(PID, y2 + 0xe4)
    Return ChocoAddress := (y3 + 0x2c0) 
}

getProcessBaseAddress(HWND)
{
    return DllCall( A_PtrSize = 4
                        ? "GetWindowLong"
                        : "GetWindowLongPtr"
                    , "Ptr", HWND
                    , "Int", -6
                    , "Int64") ; Use Int64 to prevent negative overflow when AHK is 32 bit and target process is 64bit
    ; If DLL call fails, returned value will = 0
}   

ReadMemory(PID, MADDRESS)
{
    VarSetCapacity(MVALUE,4,0)
    ProcessHandle := DllCall("OpenProcess", "Int", 24, "Char", 0, "UInt", PID, "UInt")
    ;DllCall("ReadProcessMemory","UInt",ProcessHandle,"UInt",MADDRESS,"Str",MVALUE,"UInt",4,"UInt *",0)
    DllCall("ReadProcessMemory", "UInt", ProcessHandle, "Ptr", MADDRESS, "Ptr", &MVALUE, "Uint",4)
    Loop 4
        result += *(&MVALUE + A_Index-1) << 8*(A_Index-1)
    return, result
}
Example Use
Code:
#Persistent
#MaxThreadsPerHotKey 3
#WinActivateForce

; Client 1: Hotkeys
^NumpadDiv::
    AntiAFK_Code(1, "NumpadDiv", Running, Stop)
return

^NumpadMult::
    AutoFishing_Code(1, "NumpadMult", Running, Stop)
return

#Include Trove.ahk
[ Media ]


[ Version History ]
  • 2015/07/20 (VirusTotal | Jotti's Malware Scan)
    Changes:
    • Fix for 32-bit systems (previously used Unicode 64-bit for compiling).
  • 2015/07/19
    (VirusTotal | Jotti Virus Scan)
    Changes:
    • Automatic Fishing Bot: Fixed State Corruption caused by low wait times.
  • 2015/07/18
    (VirusTotal | Jotti Virus Scan)
    Changes:
    • Initial Public Release



[ Remaining Changes / To Do ]
  • Avoid reading memory if possible - check screen, sniff network?
TroveScripts_20150720_mpgh.net.zip Trove_mpgh.net.zip
#1 · edited 11y ago · 11y ago
JE
Jerico555
Oooo lala, can't wait to try it out! Thanks for posting this.
#2 · 11y ago
SL
SlaiiZ
Sry im new in this thinks. How can i use it / install it ?
#3 · 11y ago
PT
ptfock
nice work, nice coding, good job
#4 · 11y ago
SH
ShadowOps
Quote Originally Posted by SlaiiZ View Post
Sry im new in this thinks. How can i use it / install it ?

Download AutoHotKey
#5 · 11y ago
Xaymar
Xaymar
Update 2015/07/19:
  • Auto-Fishing: Fixed State Corruption
    Previously it would randomly stop working due to the Anti-Detection time being too short, fixed that by introducing a set amount of extra wait time. Should work over longer durations now.


Binaries will follow as soon as the old ones have been approved, can't upload new ones while other ones are being approved it seems.
#6 · 11y ago
ME
Mew31
Just upload teh screenshot to imgur?
#7 · 11y ago
MM
mmxxl
nice bot
#edit
Very nice bot i can now watch streams and fishing in background
#8 · edited 11y ago · 11y ago
BI
BinsoXO
does this work while you do something on the background? also does this script include throwing away boots automatically?
#9 · 11y ago
US
Usernaemmm
Sorry im new to ahk ... Ive saved the script and ran it but im not sure which key starts it up ? Again, sorry for being a noob
#10 · 11y ago
maddoggy00
maddoggy00
Approved .
#11 · 11y ago
Xaymar
Xaymar
Thanks @maddoggy00 for approving this.
Do you happen to know why I'm suddenly no longer able to upload files? It does the spinning animation, but nothing changes.
#12 · 11y ago
maddoggy00
maddoggy00
Quote Originally Posted by Xaymar View Post
Do you happen to know why I'm suddenly no longer able to upload files?
huh? where?
#13 · 11y ago
::::Joe::::
::::Joe::::
Can use it with Multi Client Loader v1.1 ??
I try, but seem like can not read Multi Client's Trove.exe....

If can fixed or write new scripts to read Multi Client trove.exe, that will be excellent!!
#14 · 11y ago
TO
tomzen
It dosent work. I'm by myself, I press CTRL+NUMPAD9, and it dosent do anything.
#15 · 11y ago
Posts 1–15 of 122 · Page 1 of 9
…

Post a Reply

Similar Threads

  • Black Ops QuickScope AutoHotkey Script for Sph4ack's Aimbot v1.0By 63OR63 in Call of Duty 7 - Black Ops Hacks & Cheats
    19Last post 15y ago
  • BO2 Rapid Fire + Antirecoil - UNDETECTED [AutoHotkey Script]By digi7al in Call of Duty Black Ops 2 Coding, Programming & Source Code
    47Last post 12y ago
  • Black Ops QuickScope AutoHotkey Script for Sph4ack's Aimbot v1.2By 63OR63 in Call of Duty 7 - Black Ops Hacks & Cheats
    45Last post 15y ago
  • Do compiled autohotkey scripts get detected?By Unrealer in Call of Duty Modern Warfare Help
    6Last post 14y ago
  • AutoHotKey ScriptsBy joker__4ever in All Points Bulletin Reloaded Hacks
    9Last post 14y ago

Tags for this Thread

#afk#autohotkey#bot#fishing