UOSA ではカスタムUI というユーザーがインタフェースをカスタマイズできる枠組みがある。
で、あれやこれや出来ないかと考えてました。
UO のチャットの内容をゆっくりさんが読み上げたら面白いんじゃないか、と。
いろいろ調べて、出来るんじゃないかなーと思ったのですが、(まだ?)カスタムUI について充分な文書が公開されてないようでよくわからん。XML エレメントの親子関係からしてよくわからん。
が、どうも UOSA はチャットログがまともに動くようで、書き出しのタイミングもかなり緻密に逐次書き出している。相変わらず UTF-16-LE ではあるが、ざっと見たところ正しい UTF-16-LE であるようだ。
であれば、FindFirstChangeNotification() でログファイルを見張って更新があったらゆっくりさんに渡す、という外部プログラムでやるのが簡単なんじゃないかと気づいてしまった。
で、その手の「ファイルを見張ってゆっくりさんが読む」という類のものはすでに誰かが作っているだろう、とも。
UOSA のカスタムUI でやるとしたら:
Interface.lua で
hYukkurisan = io.popen("SofTalk.exe", "w")
しておいて、
UO_ChatWindow/Source/ChatWidows.lua の ChatWindow.UpdateNewTextAlert() を改造して、
numLogEntry = TextLogGetNumEntries("Chat")
LogEntry = TextLogGetEntry("Chat", numLogEntry)
LogText = WStringToString(LogEntry.text)
hYukkurisan:write(LogText)
hYukkurisan:flush()
追記: SofTalk.exe は標準入力を食べないのでこれじゃダメ。
みたいな?と思ったけどさすがに io や os モジュールは使えないようだ。package とかも無理だった。
外部プログラムを呼び出せるようなものは禁止されてるようなので、「カスタムUI でゆっくりさんにしゃべらせよう」計画はこれでおしまい。
ちなみに UO のカスタム UI は、
でいじれる。Lua インタープリタのバージョンは 5.1 でした。
カスタムUI をいじる場合は、
<Include file="Source/DebugWindow.xml" />
<Script file="Source/Debug.lua" />
WindowSetShowing("DebugWindow", true)
DebugWindow.logging = true
しておくと便利だと思います。