Skip to content

Instantly share code, notes, and snippets.

@Systemcluster
Last active December 14, 2021 20:38
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Systemcluster/b4f1e5568d9493c5bb48dbc0aa458d16 to your computer and use it in GitHub Desktop.
Save Systemcluster/b4f1e5568d9493c5bb48dbc0aa458d16 to your computer and use it in GitHub Desktop.
Realm Grinder Auto-Buy/Auto-Upgrade/Auto-Click Script for AutoHotKey
; Realm Grinder Auto-Buy/Auto-Upgrade/Auto-Click Script
; (c) 2019 Systemcluster
;
; Version: 2021-12-12
;
; This script requires AutoHotKey 2.0-beta.3 or later.
; Tested with the Realm Grinder Steam version and AutoHotKey 2.0-beta.3
; Controls:
;
; F1 = Buy All once
; F2 = Toggle Treasure Click Mode (full Auto-Click)
; F3 = Toggle Buy+Click Mode (Auto-Buy + Auto-Upgrade + minimal Auto-Click)
; F4 = Toggle Super Mode (Auto-Buy + Auto-Upgrade + full Auto-Click)
;
; PRINTSCREEN = Set position of prioritized click (e.g. for prioritizing a building)
; ROLL = Reload script / Stop all
; PAUSE = Exit script
#MaxThreads 20
#MaxThreadsPerHotkey 2
#SingleInstance
SetControlDelay(-1)
SetDefaultMouseSpeed(0)
SetMouseDelay(1)
CoordMode("Pixel", "Client")
SetTitleMatchMode(3)
TITLE := "Realm Grinder"
BuyAllButtonX := 0
BuyAllButtonY := 61
PriorityBuyO := "Right"
PriorityBuyX := 0
PriorityBuyY := 0
YMid := 0
XRight := 0
BUY_BUTTON_COLOR := 0x980B1F
BUY_BUTTON_COLOR_ACTIVE := 0xB20E27
ToggleRapid := False
ToggleBuy := False
ToggleSuper2 := False
UpdateBuyButton(BecomeActive:=True) {
; Update Buy All button position
if(BecomeActive) {
WinActivate()
Sleep(100)
}
else {
if(not WinActive()) {
return
}
}
global BuyAllButtonX
global BuyAllButtonY
global BUY_BUTTON_COLOR
global BUY_BUTTON_COLOR_ACTIVE
Color := PixelGetColor(121, BuyAllButtonY)
if(Color = BUY_BUTTON_COLOR) {
BuyAllButtonX := 121
}
else if (Color = BUY_BUTTON_COLOR_ACTIVE) {
BuyAllButtonX := 121
}
else {
Color := PixelGetColor(250, BuyAllButtonY)
if(Color = BUY_BUTTON_COLOR) {
BuyAllButtonX := 250
}
else if(Color = BUY_BUTTON_COLOR_ACTIVE) {
BuyAllButtonX := 250
}
else{
BuyAllButtonX := 0
}
}
}
UpdateDimensions() {
; Update window dimensions
global YMid
global XRight
WinGetPos(&X, &Y, &Width, &Height,)
XRight := Width - 200
YMid := Floor((Height / 2) - 40)
}
TreasureClick(Times:=1,Delay:=16) {
; (Times) Treasure Clicks
global XRight
global YMid
Counter := 0
While(Counter < Times) {
Counter := Counter + 1
ControlClick("x" XRight " y" (YMid - 340),,,"LEFT", 1, "NA")
If(Counter < Times) {
Sleep(Delay)
}
}
}
BuyAllBuildings() {
; Buy All Buildings
; + 4 Treasure Clicks
global XRight
global YMid
global PriorityBuyX
global PriorityBuyY
global PriorityBuyO
if (PriorityBuyX > 0) {
if (PriorityBuyO = "Left") {
ControlClick("x" (PriorityBuyX) " y" (YMid + PriorityBuyY),,,"LEFT", 1, "NA") ; Priority Click
}
else {
WinGetPos(,,&Width,,)
ControlClick("x" (Width - PriorityBuyX) " y" (YMid + PriorityBuyY),,,"LEFT", 1, "NA") ; Priority Click
}
}
ControlClick("x" XRight " y" (YMid + 300),,,"LEFT", 1, "NA") ; Hall of Legends
ControlClick("x" XRight " y" (YMid + 240),,,"LEFT", 1, "NA") ; HoL - 1
TreasureClick()
ControlClick("x" XRight " y" (YMid - 300),,,"LEFT", 1, "NA") ; Farm
ControlClick("x" XRight " y" (YMid - 240),,,"LEFT", 1, "NA") ; Inn
ControlClick("x" XRight " y" (YMid - 180),,,"LEFT", 1, "NA") ; Blacksmith
TreasureClick()
ControlClick("x" XRight " y" (YMid + 180),,,"LEFT", 1, "NA") ; HoL - 2
ControlClick("x" XRight " y" (YMid + 120),,,"LEFT", 1, "NA") ; HoL - 3
ControlClick("x" XRight " y" (YMid + 60),,,"LEFT", 1, "NA") ; HoL - 4
ControlClick("x" XRight " y" (YMid),,,"LEFT", 1, "NA") ; HoL - 5
ControlClick("x" XRight " y" (YMid - 60),,,"LEFT", 1, "NA") ; HoL - 6
ControlClick("x" XRight " y" (YMid - 120),,,"LEFT", 1, "NA") ; HoL - 7
TreasureClick()
ControlClick("x" XRight " y" (YMid + 300),,,"LEFT", 1, "NA") ; Hall of Legends
TreasureClick()
}
BuyAllUpgrades() {
; Buy All Upgrades
; + 1 Treasure Clicks
global BuyAllButtonX
global BuyAllButtonY
if(BuyAllButtonX > 0) {
ControlClick("x" BuyAllButtonX " y" BuyAllButtonY,,,"LEFT", 1, "NA")
TreasureClick()
}
}
F1:: {
; Buy All Once
global TITLE
if WinExist(TITLE) {
UpdateBuyButton()
UpdateDimensions()
TreasureClick(5)
BuyAllUpgrades()
BuyAllBuildings()
TreasureClick(5)
Sleep(200)
}
Return
}
F2:: {
; Treasure Click Mode
global TITLE
global ToggleRapid
global ToggleBuy
global ToggleSuper2
ToggleRapid := !ToggleRapid
ToggleBuy := False
ToggleSuper2 := False
if WinExist(TITLE) {
UpdateBuyButton()
UpdateDimensions()
global BuyAllButtonX
global BuyAllButtonY
global XRight
While ToggleRapid {
TreasureClick(15)
Sleep(260)
TreasureClick(15)
Sleep(260)
}
}
Return
}
F3:: {
; Buy+Click Mode
global TITLE
global ToggleRapid
global ToggleBuy
global ToggleSuper2
ToggleBuy := !ToggleBuy
ToggleRapid := False
ToggleSuper2 := False
If ToggleBuy {
if WinExist(TITLE) {
UpdateBuyButton()
Counter := 3
While ToggleBuy {
UpdateBuyButton(False)
UpdateDimensions()
TreasureClick(3)
if(Counter >= 2) {
Counter := 0
; Only buy upgrades every second iteration
; This prevents the message popup getting stuck
BuyAllUpgrades()
}
Counter := Counter + 1
TreasureClick(3)
Sleep(400)
BuyAllBuildings()
Sleep(25)
TreasureClick(3)
Sleep(400)
}
}
}
Return
}
F4:: {
; Super Buy+Click Mode (max clicks)
global TITLE
global ToggleRapid
global ToggleBuy
global ToggleSuper2
ToggleSuper2 := !ToggleSuper2
ToggleBuy := False
ToggleRapid := False
If ToggleSuper2 {
if WinExist(TITLE) {
UpdateBuyButton()
Counter := 3
While ToggleSuper2 {
UpdateBuyButton(False)
UpdateDimensions()
TreasureClick(1)
if(Counter >= 2) {
Counter := 0
; Only buy upgrades every second iteration
; This prevents the message popup getting stuck
BuyAllUpgrades() ; +1 Clicks
}
else {
TreasureClick(1)
}
Counter := Counter + 1
TreasureClick(1)
Sleep(250)
BuyAllBuildings() ; +4 Clicks
Sleep(20)
TreasureClick(15)
Sleep(250)
TreasureClick(8)
}
}
}
Return
}
PrintScreen:: {
; Update Buy All Button position and set Priority Click
global TITLE
if WinExist(TITLE) {
UpdateBuyButton()
UpdateDimensions()
global BuyAllButtonX
global BuyAllButtonY
global PriorityBuyX
global PriorityBuyY
global PriorityBuyO
global YMid
global XRight
MouseGetPos(&mX, &mY, &WinID)
WinTitle := WinGetTitle("ahk_id " WinID)
if (WinTitle = TITLE) {
WinGetPos(&X, &Y, &Width, &Height,)
if (mX > Width / 2) {
PriorityBuyX := Width - mX
PriorityBuyO := "Right"
}
else {
PriorityBuyX := mX
PriorityBuyO := "Left"
}
PriorityBuyY := mY - YMid
}
else {
PriorityBuyX := 0
PriorityBuyY := 0
}
}
Return
}
ScrollLock:: {
Reload
Sleep(500)
Return
}
Pause:: {
ExitApp
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment