; Tọa độ góc trên bên trái của cửa sổ game (cần lấy trước)
winX = 100
winY = 80
; Lấy tọa độ chuột trên màn hình
GetCursorPos mouseX, mouseY
; Chuyển đổi thành tọa độ trong cửa sổ game
gameX := mouseX - winX
gameY := mouseY - winYLưu ý quan trọng:
Thay vì phải nhập tay tọa độ, bạn có thể dùng phím tắt để tự động điền chúng vào script. Cách làm như sau:
; Đăng ký phím nóng F1
Hotkey, F1, GetMousePos
return
GetMousePos:
MouseGetPos, mx, my
GuiControl,, FindX, %mx%
GuiControl,, FindY, %my%
ToolTip, Đã lấy tọa độ: X%mx% Y%my%
SetTimer, RemoveTip, -2000
returnBạn chỉ cần di chuột đến vị trí mong muốn, nhấn F1, và tọa độ sẽ tự động điền vào ô “Tìm X / Tìm Y”.
Script gốc thường thiết kế cho từng phím riêng lẻ. Tuy nhiên, trong thực tế game, bạn thường cần gửi liên tiếp hai phím (ví dụ: nhấn phím chiêu thức rồi đến phím hỗ trợ).
Hướng thay đổi:
SendKeyGroup(useGroup, keyA, keyB, waitMs, minute) {
global TimerCount, TargetHwnd
if (useGroup != 1)
return
if (minute > 0 and Mod(TimerCount, minute * 60) = 0) {
; Gửi nhóm phím mỗi N phút
ControlSend, , {%keyA%}, ahk_id %TargetHwnd%
Sleep, 100
ControlSend, , {%keyB%}, ahk_id %TargetHwnd%
}
if (minute = 0) {
; Gửi mỗi chu kỳ
ControlSend, , {%keyA%}, ahk_id %TargetHwnd%
Sleep, 100
ControlSend, , {%keyB%}, ahk_id %TargetHwnd%
}
}Đây là sự lựa chọn quan trọng nhất khi viết script game AHK:
| Phương pháp | Ưu điểm | Nhược điểm |
|---|---|---|
| Có thể dừng bất cứ lúc nào, không làm nghẽn script, cấu trúc rõ ràng | Khoảng cách tối thiểu khoảng 1 giây, không phù hợp cho thao tác tần số cao |
| Có thể kiểm soát chính xác khoảng cách mỗi chu kỳ | Cần cơ chế dừng bổ sung, dễ bị treo nếu viết sai |
Nếu game của bạn chỉ cần thao tác mỗi giây hoặc lâu hơn (ví dụ: lặp lại kỹ năng, buff định kỳ), SetTimer là lựa chọn sạch sẽ hơn. Nếu bạn cần kiểm soát chính xác ở mức mili-giây, hãy dùng vòng lặp Sleep kèm với điều kiện break.
ControlClick không được hỗ trợ cho mọi game: Một số game không xử lý tín hiệu chuột nền. Khi đó, bạn cần dùng PostMessage hoặc tìm kiếm các tin nhắn cửa sổ khác.ControlSend: Các phím đặc biệt phải được đặt trong dấu ngoặc nhọn, ví dụ {F1}, {Enter}.MouseGetPos, , , TargetHwndControlClick có thể bị lệch. Nên chơi game ở chế độ cửa sổ và đặt tỷ lệ phóng to là 100%.Chuyển đổi từ script chạy nền đơn giản thành một hệ thống đa phím nền, các thay đổi cốt lõi nằm ở: lựa chọn lệnh nền (ControlSend / ControlClick), cách tính tọa độ trong cửa sổ, và cách điều khiển vòng lặp chính. Các ví dụ sửa đổi trong bài viết này có thể áp dụng trực tiếp cho game “Thủy Hử Lịch Hiểm Online” hoặc bất kỳ game nào có nhu cầu tương tự. Nếu game của bạn có các tổ hợp phím hoặc tọa độ click đặc biệt, hãy bắt đầu bằng một phiên bản nền nhỏ nhất có thể, sau đó dần dần thêm các tính năng.