; Koordinater for øvre venstre hjørne av spillvinduet (må hentes først)
winX = 100
winY = 80
; Hent musens skjermkoordinater
GetCursorPos mouseX, mouseY
; Konverter til koordinater inne i spillvinduet
gameX := mouseX - winX
gameY := mouseY - winYViktige merknader:
Under utvikling er det tungvint å manuelt taste inn koordinater. En mer effektiv måte er å trykke en hurtigtast som automatisk fyller inn gjeldende museposisjon i skriptets GUI-felt.
; Registrer hurtigtast F1
Hotkey, F1, GetMousePos
return
GetMousePos:
MouseGetPos, mx, my
GuiControl,, FindX, %mx%
GuiControl,, FindY, %my%
ToolTip, Koordinater fanget: X%mx% Y%my%
SetTimer, RemoveTip, -2000
returnPå denne måten flytter du bare musen til ønsket posisjon, trykker F1, og koordinatene fylles automatisk inn i «Finn X / Finn Y»-feltene. Du kan også binde forskjellige hurtigtaster til forskjellige koordinatfelt etter behov.
Det opprinnelige skriptet hadde fire individuelle taster, hver med sin egen forsinkelse. Men i praksis trenger man ofte å sende to taster i rask rekkefølge (for eksempel en ferdighetstast etterfulgt av en hjelpetast) før man venter en stund.
Modifikasjonsretning:
SendKeyGroup(useGroup, keyA, keyB, waitMs, minute) {
global TimerCount, TargetHwnd
if (useGroup != 1)
return
if (minute > 0 and Mod(TimerCount, minute * 60) = 0) {
; Send tastpar hvert N. minutt
ControlSend, , {%keyA%}, ahk_id %TargetHwnd%
Sleep, 100
ControlSend, , {%keyB%}, ahk_id %TargetHwnd%
}
if (minute = 0) {
; Send tastpar hver syklus
ControlSend, , {%keyA%}, ahk_id %TargetHwnd%
Sleep, 100
ControlSend, , {%keyB%}, ahk_id %TargetHwnd%
}
}Dette er et klassisk valg i AHK-spillskript:
| Metode | Fordeler | Ulemper |
|---|---|---|
| Kan stoppes når som helst, blokkerer ikke skriptet, ren struktur | Minimumsintervall ca. 1 sekund, ikke egnet for høyfrekvente operasjoner |
| Gir presis kontroll over intervall mellom hver syklus | Krever ekstra mekanismer for å stoppe, kan lett låse seg |
Hvis spillet ditt trenger operasjoner hvert sekund eller sjeldnere (f.eks. gjentatte ferdigheter, tidsbestemte buffs), er SetTimer et renere valg. Hvis du trenger millisekund-presisjon, bør du bruke en Sleep-løkke med en break-betingelse.
PostMessage eller andre vindusmeldinger.{F1}, {Enter}.MouseGetPos, , , TargetHwndControlClick-koordinater bli forskyvd. Anbefaler å bruke vindusmodus og sette visningsskala til 100%.Overgangen fra et enkelt frontend-skript til et bakgrunnsbasert system med flere tastpar krever disse kjernendringene: valg av bakgrundskommandoer (ControlSend / ControlClick), beregning av koordinater inne i vinduet, og valg av drivmekanisme for hovedløkken. Eksemplene i denne artikkelen kan brukes direkte på Water Margin Online eller andre spill med lignende automatiseringsbehov. Hvis spillet ditt har spesielle tastekombinasjoner eller koordinatklikk, anbefales det å starte med en minimal fungerende bakgrunnsversjon og deretter legge til funksjoner steg for steg.