; קואורדינטות הפינה השמאלית העליונה של חלון המשחק (יש לקבל קודם)
winX = 100
winY = 80
; קבלת קואורדינטות העכבר על המסך
GetCursorPos mouseX, mouseY
; המרה לקואורדינטות יחסיות בתוך חלון המשחק
gameX := mouseX - winX
gameY := mouseY - winYהערות חשובות:
בשלב הפיתוח, הזנה ידנית תכופה של קואורדינטות היא מייגעת. דרך יעילה יותר היא ללחוץ על מקש חם אחד, שיחלץ את קואורדינטות מיקום העכבר הנוכחי ויכניס אותן אוטומטית לשדות ה-GUI של הסקריפט.
; רישום מקש חם F1
Hotkey, F1, GetMousePos
return
GetMousePos:
MouseGetPos, mx, my
GuiControl,, FindX, %mx%
GuiControl,, FindY, %my%
ToolTip, נקלטו קואורדינטות: X%mx% Y%my%
SetTimer, RemoveTip, -2000
returnכך, כל מה שצריך לעשות הוא להעביר את העכבר למיקום הרצוי, ללחוץ על F1, והקואורדינטות ימולאו אוטומטית בשדות "חפש X / חפש Y". ניתן לקשר מקשים חמים שונים לשדות קואורדינטות שונים לפי הצורך.
הסקריפט המקורי תכנן ארבעה מקשים עצמאיים, לכל אחד זמן השהיה משלו. אבל במשחק אמיתי, לעתים קרובות יש צורך לשלוח שני מקשים ברצף (למשל, קודם מקש מיומנות ואז מקש עזר), ורק אז להמתין פרק זמן.
כיוון השינוי:
SendKeyGroup(useGroup, keyA, keyB, waitMs, minute) {
global TimerCount, TargetHwnd
if (useGroup != 1)
return
if (minute > 0 and Mod(TimerCount, minute * 60) = 0) {
; שליחת צמד המקשים כל N דקות
ControlSend, , {%keyA%}, ahk_id %TargetHwnd%
Sleep, 100
ControlSend, , {%keyB%}, ahk_id %TargetHwnd%
}
if (minute = 0) {
; שליחת צמד המקשים בכל סיבוב
ControlSend, , {%keyA%}, ahk_id %TargetHwnd%
Sleep, 100
ControlSend, , {%keyB%}, ahk_id %TargetHwnd%
}
}זוהי ההתלבטות הנפוצה ביותר בסקריפטים למשחקים ב-AHK:
| שיטה | יתרונות | חסרונות |
|---|---|---|
| ניתן להפסיק בכל עת, לא חוסם את הסקריפט, מבנה נקי | מרווח מינימלי של כשנייה אחת, לא מתאים לפעולות בתדר גבוה |
| שליטה מדויקת על מרווח הזמן בין סיבובים | עצירת הסקריפט דורשת מנגנון נוסף, עלולה להיתקע |
אם המשחק שלך דורש תדר של פעם בשנייה או איטי יותר (למשל, שימוש חוזר במיומנויות, חידוש באפים בזמן), SetTimer הוא הבחירה הנקייה יותר. אם נדרשת שליטה מדויקת במילישניות, יש להשתמש בלולאת Sleep עם תנאי break.
PostMessage או לחפש הודעות חלון אחרות.{F1}, {Enter}.MouseGetPos, , , TargetHwndControlClick עלולות לזוז. מומלץ להשתמש במשחק במצב חלון, ולקבוע את קנה המידה ל-100%.השינוי מסקריפט חזיתי פשוט למערכת רקע מרובת צמדי מקשים מתמקד בשינויים הליבה הבאים: בחירת פקודות רקע (ControlSend / ControlClick), חישוב קואורדינטות בתוך החלון, ואופן הפעלת הלולאה הראשית. דוגמאות השינוי המצורפות למאמר זה ניתנות ליישום ישירות במשחק "שו-הו אונליין" או בסקריפטים אוטומטיים אחרים בעלי דרישות דומות. אם למשחק שלך יש שילובי מקשים או לחיצות קואורדינטות מיוחדות, מומלץ להתחיל מבדיקת גרסת רקע מינימלית ולהוסיף פונקציונליות בהדרגה.