; Coördinaten linkerbovenhoek gamevenster (eerst ophalen)
winX = 100
winY = 80
; Schermcoördinaten muis ophalen
GetCursorPos mouseX, mouseY
; Omrekenen naar coördinaten in gamevenster
gameX := mouseX - winX
gameY := mouseY - winYLet op:
Tijdens het ontwikkelen is het handmatig invoeren van coördinaten omslachtig. Een efficiëntere manier is: druk op een sneltoets en de huidige muispositie wordt automatisch ingevuld in de juiste velden van de GUI.
; Sneltoets F1 registreren
Hotkey, F1, GetMousePos
return
GetMousePos:
MouseGetPos, mx, my
GuiControl,, FindX, %mx%
GuiControl,, FindY, %my%
ToolTip, Coördinaten vastgelegd: X%mx% Y%my%
SetTimer, RemoveTip, -2000
returnZo kun je de muis op de gewenste positie zetten, op F1 drukken, en de coördinaten verschijnen in de velden 'Zoek X / Zoek Y'. Je kunt verschillende sneltoetsen koppelen aan verschillende coördinatenvelden.
Het oorspronkelijke script had vier onafhankelijke toetsen met elk een eigen vertragingstijd. In de praktijk moet je vaak twee toetsen kort na elkaar versturen (bijvoorbeeld een vaardigheidstoets en daarna een hulptoets), en dan pas wachten.
Aanpassingen:
SendKeyGroup(useGroup, keyA, keyB, waitMs, minute) {
global TimerCount, TargetHwnd
if (useGroup != 1)
return
if (minute > 0 and Mod(TimerCount, minute * 60) = 0) {
; Toetsgroep elke N minuten versturen
ControlSend, , {%keyA%}, ahk_id %TargetHwnd%
Sleep, 100
ControlSend, , {%keyB%}, ahk_id %TargetHwnd%
}
if (minute = 0) {
; Toetsgroep elke cyclus versturen
ControlSend, , {%keyA%}, ahk_id %TargetHwnd%
Sleep, 100
ControlSend, , {%keyB%}, ahk_id %TargetHwnd%
}
}Dit is een klassieke keuze bij AHK-game scripts:
| Methode | Voordelen | Nadelen |
|---|---|---|
| Altijd te stoppen, blokkeert het script niet, heldere structuur | Minimale interval ~1 seconde, niet geschikt voor hoge frequentie |
| Nauwkeurige controle over de interval | Stoppen vereist extra logica, kan vastlopen |
Als je game handelingen per seconde of langzamer nodig heeft, is SetTimer de nettere optie. Voor milliseconde-nauwkeurigheid gebruik je een Sleep-lus met een break-conditie.
PostMessage of zoek naar andere vensterberichten.{F1} en {Enter}.MouseGetPos, , , TargetHwndControlClick verschuiven. Gebruik de game in venstermodus en zet de schaal op 100%.De kern van het ombouwen van een simpel voorgrondscript naar een systeem met meerdere toetsgroepen op de achtergrond ligt in: de juiste achtergrondcommando's gebruiken (ControlSend / ControlClick), coördinaten binnen het venster berekenen, en de juiste manier vinden om de hoofdloop aan te sturen. De voorbeelden in dit artikel kun je direct toepassen op Water Margin Online of andere games met vergelijkbare automatiseringsbehoeften. Als je game speciale toetscombinaties of coördinatenklikken vereist, begin dan met een minimale werkende achtergrondversie en bouw stap voor stap uit.