開発段階では、座標を手動で入力するのは面倒です。より効率的な方法は、ホットキーを押すだけで現在のマウス位置の座標をスクリプトの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」フィールドに自動入力されます。必要に応じて、異なるホットキーを異なる座標フィールドに割り当てることもできます。
元のスクリプトでは4つの独立したキーがあり、それぞれに個別の遅延時間が設定されていました。しかし実際のゲームでは、2つのキーを連続して送信(例:スキルキーの後に補助キー)し、その後に待機時間を設ける必要があるケースがよくあります。
改造の方針:
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ゲームスクリプトで最もよくある選択肢です:
| 方法 | メリット | デメリット |
|---|---|---|
| いつでも停止可能、スクリプトをブロックしない、構造が明確 | 最小間隔が約1秒と高頻度操作に不向き |
| 各ループの間隔を正確に制御可能 | 停止に追加の仕組みが必要、スクリプトが固まりやすい |
ゲームで1秒程度以下の頻度(例:スキルの繰り返し使用、定期的なバフ更新)で操作するなら、SetTimerの方がすっきりします。ミリ秒単位の正確な制御が必要なら、break条件を備えたSleepループを使うべきです。
PostMessageの使用や別のウィンドウメッセージの調査が必要。{F1}、{Enter}。MouseGetPos, , , TargetHwndControlClickの座標がずれる可能性があります。ゲームはウィンドウモードで実行し、表示スケールを100%に設定することを推奨します。単純なフォアグラウンドスクリプトからバックグラウンドの複数キーグループシステムへの改造において、核心となる変更点は次の3つです:バックグラウンドコマンド(ControlSend / ControlClick)の選択、ウィンドウ内座標の換算、メインループの駆動方法。この記事で紹介した改造サンプルは、『水滸歴險Online』や同様の要件を持つゲームの自動化スクリプトにそのまま応用できます。ゲームに特殊なキーコンビネーションや座標クリックが必要な場合は、まず最小限のバックグラウンド版でテストし、徐々に機能を追加していくことをお勧めします。