I’m lazy, I want all the golden celestia now. AutoHotkey will do this for me
DISCLAIMER
This was written for Windows because I am not a masochist who tries to game on Mac and I don’t have the game installed on my Linux box. Plus if you typically run linux and you need a guide to tell you how to script something, you don’t deserve to be running linux.
Before anyone asks: No I will not write it for other platforms (See #1 in the next section)
This uses a safe scripting platform called Autohotkey. If you haven’t used it before, This may get you using it for other things!
What is this? Why are you doing this?
This guide will help you install and set up an autohotkey script that you can leave running to automatically gather golden celestia gifts.
- I am lazy.
- I hate repetitive tasks.
- I know how to script Autohotkey.
- I don’t want to sign in every day for weeks to get 50 Golden Celestia’s Gifts.
- AI also knows how to script Autohotkey (somewhat).
- See first point.
Installing Autohotkey v2
- Go to the official Autohotkey website [www.autohotkey.com]
- Click Download
- Click Download v2.0
- Run the installer file that downloaded.
- Click Install.
This should leave you with the AutoHotkey Dash open. Don’t close that just yet, we’ll be creating a new script shortly.
The Script
Create a new Autohotkey script using New Script in the dashboard and click Create. If prompted, select a default editor but editor shouldn’t matter.
Make note of the location the file is saved (typically in {User}\Documents\AutoHotkey)
Paste in the following and save:
There is a Global variable right at the top called LoadWait that defaults to 4000 (4 seconds). If you find it’s not working properly, try increasing the loadwait because your computer is slower than mine
#Requires AutoHotkey v2.0 ; Global variable to control the loop global IsScriptRunning := false global RunCount := 0 ; Amount of time to wait at loading/animation screens global LoadWait := 4000 ; Hotkey to start the script (F1) F1:: { global IsScriptRunning global RunCount if (!IsScriptRunning) { RunCount := 0 IsScriptRunning := true SetTimer(PerformActions, 100) ToolTip("Script Started! Press F2 to Stop.") Sleep(2000) ToolTip() } } ; Hotkey to stop the script (F2) F2:: { global IsScriptRunning if (IsScriptRunning) { IsScriptRunning := false SetTimer(PerformActions, 0) ToolTip("Script Stopping. Wait for tooltip to disappear.") Sleep(2000) } } PerformActions() { global IsScriptRunning global RunCount RunCount += 1 ToolTip("Run #" RunCount) if (!IsScriptRunning) return ; --- Start of the action sequence --- Send("{w Down}") Sleep(2000) Send("{w Up}") Sleep(1000) Send("{f Down}") Sleep(500) Send("{f Up}") ; Get current UTC system time SYSTEMTIME := Buffer(16, 0) DllCall("GetSystemTime", "Ptr", SYSTEMTIME) year := NumGet(SYSTEMTIME, 0, "UShort") month := NumGet(SYSTEMTIME, 2, "UShort") dow := NumGet(SYSTEMTIME, 4, "UShort") day := NumGet(SYSTEMTIME, 6, "UShort") hour := NumGet(SYSTEMTIME, 8, "UShort") minute := NumGet(SYSTEMTIME, 10, "UShort") second := NumGet(SYSTEMTIME, 12, "UShort") millisec := NumGet(SYSTEMTIME, 14, "UShort") ; Create datetime string in a valid format for DateAdd timestamp := Format("{:04}{:02}{:02}{:02}{:02}{:02}", year, month, day, hour, minute, second) ; Add 1 day futureTimestamp := DateAdd(timestamp, 1, "Days") ; Convert substrings to numbers explicitly fYear := Integer(SubStr(futureTimestamp, 1, 4)) fMonth := Integer(SubStr(futureTimestamp, 5, 2)) fDay := Integer(SubStr(futureTimestamp, 7, 2)) fHour := Integer(SubStr(futureTimestamp, 9, 2)) fMinute := Integer(SubStr(futureTimestamp, 11, 2)) fSecond := Integer(SubStr(futureTimestamp, 13, 2)) ; Refill SYSTEMTIME buffer NumPut("UShort", fYear, SYSTEMTIME, 0) NumPut("UShort", fMonth, SYSTEMTIME, 2) NumPut("UShort", dow, SYSTEMTIME, 4) NumPut("UShort", fDay, SYSTEMTIME, 6) NumPut("UShort", fHour, SYSTEMTIME, 8) NumPut("UShort", fMinute, SYSTEMTIME, 10) NumPut("UShort", fSecond, SYSTEMTIME, 12) NumPut("UShort", millisec, SYSTEMTIME, 14) ; Set new system time DllCall("SetSystemTime", "Ptr", SYSTEMTIME) ; Continue with actions Sleep(LoadWait) Send("{s Down}") Sleep(3000) Send("{s Up}") Sleep(LoadWait) Send("{h Down}") Sleep(500) Send("{h Up}") Sleep(LoadWait) Send("{q Down}") Sleep(500) Send("{q Up}") Sleep(5000) Send("{Space Down}") Sleep(500) Send("{Space Up}") Sleep(1500) Send("{Space Down}") Sleep(500) Send("{Space Up}") Sleep(1500) Send("{Escape Down}") Sleep(500) Send("{Escape Up}") Sleep(1500) Send("{a Down}") Sleep(500) Send("{a Up}") Sleep(500) Send("{Space Down}") Sleep(500) Send("{Space Up}") Sleep(LoadWait) ToolTip() }
Running the Script
- You MUST run this script as admin otherwise my bitcoin miner won’t run it will not work.
- You MUST have Set time automatically turned OFF on your system.
Disclaimer Part 2
Note: YOU MUST RUN YOUR SCRIPT AS ADMIN. This is because the script will alter the computer’s date time using a DLL call.
Yes, DLL calls are scary from strangers on the internet, but you can trust me… right?
- Make sure “Set time automatically” is turned OFF in your date/time settings.
- Find the script where you saved it (you did remember where you saved it right?)
- Right click the script and “Run as Administrator”
- Verify in the system tray that there is a green H indicating the script is loaded.
- Stand at the door to your guild hall (door should be directly above you)
- With the game open, press F1, you should see a tooltip indicating what number run of the script you are on.
- KEEP THE WINDOW FOCUSED.
- When you have had enough, press F2 and let it finish its current cycle.
- Right click the green H icon in the system tray and click Exit to cancel mining bitcoin for me exit the script.
Know how many golden celestia you need going in and see how many you get on each run. Each time I was getting 2 so I needed to let it run 25 times to get to 50.