概要

WoT クライアントは多くの処理が Python で記述されており、 mod を Python で作成することが容易になっています。

WoT クライアントから mod を呼び出すには、 mod モジュールを作成して所定のフォルダに設置する方法と、 WoT の元のモジュールを置き換える方法の2通りがあります。

後者の置き換える方法は、オリジナルのモジュールと互換性があるように作成したモジュールを設置します。

ここでは、前者の mod モジュールについて説明します。

mod のファイル名と設置場所

mod は scripts/client/gui/modsmod_*.pyc というファイル名で置かれます。

フォルダは仮想ファイルシステムでの相対位置を表すので、 実際には res_mods/0.9.18.0/scripts/client/gui/mods などのフォルダ、 もしくは、 mods/0.9.18.0 に置かれた ZIP アーカイブファイルである XXX.wotmodres/scripts/client/gui/mods になります。

mod の初期化と終了処理

mod モジュールには、初期化のときに呼ばれる関数 init() と、クライアントの終了時に呼ばれる fini() が想定されています。

これらはオプションなので、存在しなくても構いません。

つまり、mod モジュールに関数 init() が存在すれば初期化の際に呼び出されますが、存在しない場合にはエラーにはならず単に何もしないだけです。 終了処理の fini() についても同様です。

通常の Python スクリプトと同様に、グローバル定義部にコードを書くと、mod の読み込み時(インポート時)にコードが実行されますが、 特に理由がなければ init() で初期化の処理を行ったほうがよいでしょう。

終了処理を必要とする mod はあまりありませんが、終了時に何かリソースを開放したりデータを保存するような mod だと必要かもしれません。

mod の処理

mod は通常、WoT クライアントの動作を変更するために用いられます。 静的な変更であれば、init() 内で完結するパターンも多いと思います。 動的な変更(クライアントの現在の状態に応じた動作)であれば、何らかの形で WoT クライアントのスクリプトをフックするか、コールバックを設定することになります。

マニュアルはないので、既存の mod を参考にするか、 WoT の Python コードを読みましょう。 WoT の Python スクリプトをデコンパイルした結果が XVM のソースサイト で公開されています。