WoWS - UI Mod作成の基本 2: Modをゲームに認識させる

前回
kawaii-14.hatenablog.com

はじめに

UnboundまたはUnbound2で作成したModは、ゲームが自動的に認識してくれるわけではありません。
Modファイルのパスと表示したい要素をXMLに指定して読み込ませる必要があります。
ただし、Python+Unboundの場合は例外です。(PythonのメソッドからUnboundをロードする)
また、既存の要素を置き換える場合と、新規要素を増やす場合では若干操作が異なります。

Unbound/Unbound2共に

  • Modファイルを読み込むと、記述された各要素がUnbound系グローバルスコープにロードされる
  • グローバルスコープに存在するだけではUIとして機能しない
  • 表示する要素は別途指定する必要がある

といった大まかなイメージを持っておくとよいです。

これらの操作はゲームのアップデート毎(ゲームフォルダが変わる度)に必ず要求されますが、半自動的に管理するためのModも存在します。

Modをクライアントに読み込ませる方法

ファイルとフォルダ

省略のため、頻出するパスは以下のように表します。res_mods内で途中のディレクトリが欠けている場合は適宜作成してください

  • gui: (World_of_Warships)\bin\(最新バージョン)\res_mods\guiフォルダ
  • uss_settings: gui\uss_settings.xml Modのパスを指定するファイルです。存在しない場合はUnpackerから抽出してください
  • battle_elements: gui\battle_elements.xml 表示する要素を指定するファイルです。存在しない場合はUnpackerから抽出してください

編集するファイル

既存要素を置き換えるMod 新規要素を追加するMod
Unbound uss_settings uss_settings, battle_elements
Unbound2 なし battle_elements

新規要素を追加するModの場合、battle_elementsは必ず編集することになります。
また、UnboundではModファイルパスを必ず指定する必要があります。
Unbound2ではファイルが自動的に読み込まれるため、uss_settingsを改変する必要はありません。

uss_settingsの設定

uss_settings.xmlを開き、<mods>要素の下に作成したModのファイルパスを記述します。

<mods>
    <swffile>../unbound/mods/ModFileName.swf</swffile>
    <xmlfile>../unbound/mods/ModFileName.xml</xmlfile>
</mods>

例: gui\unbound\modsTestMod.xmlTestMod.swfがある場合

uss_settingsにパスを通す例

battle_elementsの設定

重要: 既存の要素を置き換えるModの場合、このファイルを編集する必要はありません。

パラメータ
  • hitTest: UIの当たり判定を制御します。クリックやD&Dを利用する場合はtrueに、それ以外はfalseを指定します
  • tempModName: 他のModと競合しない自由な名前を設定してください。慣例ではunboundModNameになっていることが多いです
  • rootElementName(Unbound)またはelementName(Unbound2): Modとして読み込む要素の名前です。
<element>要素

<elementList>の内側に追加します

  • Unboundの場合
<elementList forceHideAll="false">
    <element class="lesta.libs.unbound.UnboundElement" name="tempModName" url="battle_stats.swf">
        <properties hitTest="true|false" rootElementId="rootElementName"/>
    </element>
</elementList>
  • Unbound2の場合
<elementList forceHideAll="false">
    <element class="lesta.unbound2.UbElement" elementName="rootElementName" name="tempModName" url="battle_stats.swf">
        <properties hitTest="true|false"/>
    </element>
</elementList>
<controller>要素

<controllers>の内側に追加します
Unbound2では不要です。

<controllers>
    <controller class="lesta.dialogs.battle_window_controllers.UnboundElementController" clips="tempModName"/>
</controllers>

例: Hello Worldを表示するMod
下記画像だとrootElementId="TestModRoot"またはelementName="TestModRoot"になります

例: Unboundの場合
例: Unbound2の場合

半自動でModを登録する方法

ModsInstallerというPython Modによって、これらの作業を自動化することができます。
使い方の説明は配布元のマニュアルに譲りますが、編集するファイルや内容等、この記事の知識が前提として必要になります。作者: Monstrofil, Roslich
drive.google.com