Virtual Skipper 情報サイト

Virtual Skipperは、シミュレーション系のゲームにもかかわらず、プレイ中にチャットができてします。とは言え、それなりの手間がかかるし、日本語入力するならテキストエディターを立ち上げ、コピー&ペーストするしかありません(でした)。

AutoHotkeyとは

AutoHotkeyは、キー入力を監視して登録された入力があった場合に、スクリプト(プログラム)を実行することができるプログラムで、Virtual Skipperでよくつかわれています。

インストールの方法は、AutoHotkeyのインストールを参照してください。

Virtual Skipperでのチャット入力

AutoHotkeyの具体的な説明の前に、Virtual Skipperでのチャット入力について説明します。

Virtual Skipperでチャット入力する場合は、テキスト入力モード(実際の名称はわかりません:))に切り替えてからテキストを入力し、登録します。
テキスト入力モードへの切り替えと登録の方法は、マウスを使う方法とキー入力の2通りがあります。

マウスによる方法

マウスで、チャット入力バーをクリックし、テキストを入力し、チェックボタンをクリックします。

キー入力による方法

キーボードから「Enter」を入力し、テキストを入力し、ふたたび「Enter」を入力します。

つまり、「Enter」でチャット入力モードの切り替えができます。AutoHotkeyでのチャット入力は、
  1. 「Enter」を入力し、チャット入力モードに切り替え
  2. メッセージを入力
  3. 「Enter」を入力し、チャット入力モードを終了
という手順を登録する事で実現します。

基本的な記述

AutoHotkeyは、「○○.ahk」という末尾が「.ahk」で終わるテキストファイルにスクリプトを記述します。たとえば、vsk.ahkというテキストファイルにスクリプトを書いておき、Virtual Skipperをプレイしている際にAutoHotkeyを実行します。

例えは、次のような登録をしておくと
^1::Send {Enter} Restart coming {Enter}
Ctrl+1(コントロールを押しながら数字の1)を入力すると、チャットエリアに「Restart coming」と入力することができます。
「::」の左がわの「^1」が入力キーで右側の「Send {Enter} Restart coming {Enter}」が実行されるスクリプトです。「^」は、Ctl(コントロール)を表しています。

スクリプトの説明ですが、「Send」がテキスト送信コマンドで、「{Enter}」は「Enter」キーのコードを送信します。
「Send {Enter} Restart coming {Enter}」ですと、
  1. 「Enter」キーのコードを送信し、チャット入力モードに切り替え
  2. メッセージ「Restart coming」を送信し
  3. 「Enter」キーのコードを送信し、チャット入力モードを終了
となります。
  • ^ Ctrl(コントロール)
の他には以下があります。
  • ! Alt
  • + Shift
  • # Win

「!1」なら、Altキーを押しながら1を押した場合を表します。

AutoHotkeyは、常駐型のアプリケーションです。一度起動するとずっと動いたままです。このため、いつでもCtrl+1を押すと「Restart coming」と出力してしまいます。Virtual Skipper をプレイしている時だけスクリプトを実行するようにするために、初めに次のスクリプトを入力してください。
#IfWinActive ahk_class GbxApp ; this caters for both VskAC32 and Vsk5Online
ちなみに「;」以下は、コメントです。

日本語の扱い

AutoHotkeyでは、基本的に日本語を扱うことができません。このため、AutoHotkeyをUTF-8化したAutoHotkeyUを使います。

Hotkey palette

前に説明したように、キーを入力した際に、スクリプトを実行することができます。このようなキーを「Hotkey」と呼びます。
Hotkeyの記述例を紹介します。
^1::Send {Enter} Restart coming {Enter}
^2::Send {Enter} Restart & go at start minus 1.30 {Enter}
^3::Send {Enter} no more restarts {Enter}
^4::Send {Enter} NPC - no pen cancel race {Enter}
^5::Send {Enter} Cancel only wrong pens please {Enter}
^6::Send {Enter} this is the start {Enter}
^8::send {Enter}better to$ff0 spin and fin$g than to $ff0fit and quit {Enter}
^9::send {Enter} when did $ff0overlap$g begin? {Enter}
!a::send {Enter}testing something ... will you help? {Enter}
^b::send {Enter} ty host ty fleet $ff0good-bye {Enter}
^c::send {Enter} cheers {Enter}
!c::send {Enter}"getting clear" & "taking a penalty" are $ff0separate$g actions (r44.2) {Enter}
!d::send {Enter} pen. boat may assert ROW while "getting clear" not while taking penalty turns {Enter}
!e::send {Enter}i had $ff0ROW$g so resp. to keep clear was $ff0KC$g boat's .. not mine {Enter} ;'
^f::send {Enter} fair winds .. I'll check back later {Enter} ;'
^g::Send {Enter} good winds {Enter}
!h::send {Enter} not hunting. I was racing and observing my right of way {Enter}
^l::send {Enter} Last race ... $ff0No more races, sorry! {Enter}
^n::Send {Enter} NPC - no pen cancel race {Enter}
;!n (see PC request guard below)
^o::send {Enter} room to tack $ff0RTT$g please {Enter}
^p::send {Enter} $ff0proper course$g please {Enter}
;!p (see PC request guard below)
;^!q (see House Rules below)
^r::send {Enter} room please {Enter}
^s:: send {Enter} starboard {Enter}
^t::send {Enter} tacking {Enter}
!u::send {Enter}host, I saw the "Falling back to $ff0TCP$g (from UDP)" alert when joining {Enter}
^w::send {Enter} $0ffwater$g please ... $ff0I have overlap {Enter}
!w:: ;displays weather bulletin
KeyWait Alt
send {Escape}
Sleep, 100
send {Down}
Sleep, 50
send {Down}
Sleep, 50
send {Enter}
return
^x::Send {Enter} thanks for racing everyone {Enter}
^z:: send {Enter}please help me receive a penalty .. OK?{Enter}
!z::send {Enter} any $ff0eye-witness$g ... speak please {Enter}

Hotkey paletteの書き換え

^1::Send {Enter} Restart coming {Enter}
のスクリプト部分の説明とします。
「Send」は、テキストの出力コマンドで、右側の「{Enter} Restart coming {Enter}」を出力します。「{Enter}」は、テキストではなく「改行(Enterキー)」を出よくします。つまり、Ctrl+1を入力すると、
改行
Restart coming
改行
を出力します。
VSKのレース画面で、
改行
Restart coming
改行
と入力してみてください。初めの改行で、チャットエリアの入力モードに切り替わり、Restart comingを入力すてふたたび改行を入力すると、「Restart coming」のテキストが登録されます。つまり、Ctrl+1を入力すると、上の記述と同じ操作をすることになります。

関数の定義

AutoHotkeyでは、関数を登録することができます。
改行+テキスト+改行を関数化してみましょう。
Chat(Msg) {
send {Enter}
sendInput %Msg%
send {Enter}
}
Chatが関数名で、Msgにテキストを入力します。
send と sendInput がありますが、sendは、1文字ずつ出力するのに対し、sendInput は一気に文字を出力します。すべて、sendInput にすればよいように思えますが、いっぺんにテキストを送ると取りこぼしが発生してしまいます。具体的には、プレイ中に改行を入力するとチャット入力に切りかわりますが、チャット入力に切りかわるのに、少し時間がかかります。切りかわる前に送られたテキストは、取りこぼされてしまいます。つまり、改行を入力したあとに少し、待ってあげる必要があります。
Chat(Msg) {
SetKeyDelay,40,40,0
send {Enter}
sendInput %Msg%
send {Enter}
}
SetKeyDelay は、sendで送る文字の間隔を指定しています。
SetKeyDelay[, Delay, PressDuration,Play]
  • Delay 間隔をミリ秒で指定。
  • PressDuration キーを押してから離すまでの時間を指定。
  • Play 
^1::Send {Enter} Restart coming {Enter}
は、次のように書きかえることができます。
^1::Chat("Restart coming")

Hotstring palette

「Hotkey palette」では、特定のキー入力を監視してスクリプトを実行しましたが、特定の「文字列」を監視することもできます。
たとえば、
:*:i16::$n16.1 $ff0ROW$g boat changing course shall give other boat room to keep clear$m
と定義した場合、i16とチャットエリアに入力したとたんに、「$n16.1 $ff0ROW$g boat changing course shall give other boat room to keep clear$m」という文字列と置き換えてしまいます。

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

世界時計

メンバーのみ編集できます