コンテナ&宝石箱内グリッドの表示プロパティ設定方法。ClifeUI

はじめに。

この記事はSAクライアント(Enhanced Client)用カスタムUI「ClifeUI」の「コンテナ&宝石箱のグリッドにアイテムのプロパティ等を表示」機能でコンテナ内のグリッドに表示するプロパティを設定する方法の説明になります。
設定が保存されたファイルを直接編集する必要があるので、結構面倒くさいです。。。

※ 編集するファイルは標準のユーザー設定ファイルとは別の専用ファイルなので、もし編集に失敗して設定が読み込めなくなってもグリッド内プロパティ表示用設定が初期状態に戻るだけです。

※ 編集に失敗してプロパティ表示用設定が正常に読み込めない状態でログインすると、プロパティ表示用設定が初期化されます。その際、データを初期化した旨のダイアログが出ますので、必要ならログアウト前・クライアント終了前に設定用ファイルのバックアップを取ってください。(ログアウトまたはクライアントを終了した時点で初期化したデータが設定用ファイルに反映されます)

グリッド内プロパティ表示 設定用ファイルの場所

{マイドキュメント}/EA Games/ウルティマ オンライン ステイジアン アビス/User Data/ClfContainerMod フォルダ内にある SavedVariables.lua が設定用ファイルになります。
※ ClifeUI有効時にログアウトした時点で作成されるファイルです。
(ご利用の環境が拡張子を表示しない設定になっている時は SavedVariables と表示されるかも?)

プロパティ表示用設定を初期値に戻したい場合は、上記ファイルを削除(もしくは別の場所に移動)してから ログイン → ログアウト するか、下記コマンドを実行してください。

  • [その他]コマンド
    コマンド

    script ClfContnrWin.resetData()

または /script ClfContnrWin.resetData() と発言(チャット画面で入力)でもOKです。
コマンド実行後にログアウト(またはクライアント終了)した時点で、設定用ファイルに反映されます。

設定用ファイル編集に使用するアプリ

UTF-8(BOM無し)のテキストファイルを編集・保存出来るエディタならなんでも構いません。
※ UTF-8 でも BOM付きで保存するとデータが読み込めなくなるので注意!

Windows10ならメモ帳でも大丈夫です。(他のWindowsの場合は分かりません、ごめんなさい)

メモ帳でも大丈夫、と書きましたが、シンタックスハイライトされた方が編集しやすい(&ミスしにくい)ので、Lua(本設定用ファイルやカスタムUIで使用されているスクリプト言語)のシンタックスハイライトに対応したエディタの方が良いと思います。

ちなみに筆者の場合、カスタムUIのコードを書くときは Brackets (無料です)を使用しています。
Brackets は日本語対応、初期状態でLuaのシンタックスハイライトにも対応していますので、インストールするだけで(プラグインの追加等無しで)Luaの編集に使えるのでオススメです。

lua用エディタ

上の画像は SavedVariables.lua を開いた所。左がメモ帳で右がBracketsです。
※ 上の画像のBracketsはテーマを「Brackets Dark」に変更し、表示フォントも変更してありますが、拡張機能(プラグイン)等は無効な状態です。

編集に使用するエディタの紹介が済んだ所で、設定用ファイルの中身について説明します。

設定用ファイルの基本的なこと

設定用ファイルは、ClifeUIを有効にした状態でログアウト(またはクライアント終了)した時点で、冒頭で説明した通り {マイドキュメント}/EA Games/ウルティマ オンライン ステイジアン アビス/User Data/ClfContainerMod フォルダ内に作成されます。
※ 設定はWindowsのユーザー単位になります。(正確に言うとユーザーの「ドキュメント」フォルダ単位)

ファイルは SavedVariables.lua の拡張子の通り Lua という言語で書かれています。
※ 「言語」と言っても、設定用ファイルに書き出されているのは ClifeUIで使用するデータだけなので(何かを実行する部分では無いので)、編集に失敗してもクライアントが動かなくなるなどはありません。

また、ファイルの編集はログインしていない状態で行ってください
※ ログイン中に編集しても、ログアウトした時点でログイン時点のデータに書き戻されます。

ファイルの中身については、javascriptやphpなどのスクリプト言語を触った事のある方には難しい事は無いと思います。

設定用ファイルの一行目に

ClfContnrWin.LastInitTime = "2018/09/15-15:24:08"

といった感じで日付の文字列がありますが、この日付は最後に設定用データを初期化した日時です。
カスタムUI側でこの値の存在確認はしていますが、日付を比較して何かする訳ではないので、カラ文字("")以外であればメモ的な文字に変更しても大丈夫です。(改行はNG。半角の英数にしておいた方が無難です)

この日付以降の各データはテーブルになっています。(jsやphpの配列やオブジェクトの様な物です)
テーブル内の改行やインデントはあっても無くても構いません。(インデントが揃って無くても大丈夫)
但し、テーブル内の キー = 値 の後には , (カンマ)を忘れずに付けてください。(テーブル内最後の値はカンマ省略可)

(Lua以外の)スクリプト言語に詳しい人向けの補足:
Luaでは、0 や カラ文字("")、空のテーブル({}) は false では無く true と判定されますので、false と判定させたい場合は false もしくは nil としてください。
nil を代入した場合、ログイン→ログアウトの時点で設定ファイルからそのキーは抹消されます。

文字色の設定方法

明るめの文字色は ClfContnrWin.TxtColorsLight 、暗めの文字色は ClfContnrWin.TxtColorsDark で設定します。

どちらも設定方法は同じなので ClfContnrWin.TxtColorsLight の例で説明します。

ClfContnrWin.TxtColorsLight = 
{
	artifact = 
	{
		r = 255,
		g = 105,
		b = 255,
	},
	unwieldy = 
	{
		r = 255,
		g = 80,
		b = 70,
	},
	-- (以下省略)
}

上記の様に ClfContnrWin.TxtColorsLight = { ... } の中に 色名 = { r = **, g = **, b = **, }, の形で各色名の RGB値(0~255の半角数字)を指定します。(色名の並び順は環境に依って変わるかもしれません)

この色名が後述の各プロパティで文字色を指定するときの名前になりますが default はプロパティによる文字色指定が無かった場合に使用され、 unwieldy は 重量が50のアイテムの時に必ず使用されるようになっています。他に notewarn もカスタムUI内部で使用しています。

アイテムアイコン着色カラーの設定

ClfContnrWin.HueTbl = 
{
	mjPurple = 1283,
	jade = 2965,
	mjRed = 1287,
	bronze = 2951,
	-- (以下省略)
}

上記の様に ClfContnrWin.HueTbl = { ... } の中に 色名 = 色ID, として指定します。(色名の並び順は環境に依って変わるかもしれません)

この色名が後述の各プロパティでアイコン色を指定するときの名前になります。
(初期状態で使用しているのは icepinkgold だけです)

表示するプロパティの設定

表示するプロパティの設定は以下の各テーブルで行います。
※ バッグ類、矢筒、ルーンブック、リコールルーン、レシピ、マスタリーの書、マスタリーの手引き、ハードコート剤、ハードワックス、ハードメッキのプロパティ表示はカスタムUI内部で別処理を行っていますので設定出来ません。

  • ClfContnrWin.UniqueCondTable : アイテムに特定の名前・プロパティがある時に使用される。
  • ClfContnrWin.DisplayCondTable.Acce : アイテムがアクセサリの時。
  • ClfContnrWin.DisplayCondTable.Armor : アイテムが防具の時。
  • ClfContnrWin.DisplayCondTable.OneHand : アイテムが片手武器の時。
  • ClfContnrWin.DisplayCondTable.TwoHand : アイテムが両手武器の時。
  • ClfContnrWin.DisplayCondTable.Shield : アイテムがシールドの時。
  • ClfContnrWin.DisplayCondTable.Equip :  アイテムがその他装備品の時。(装備STR、または装備条件軽減プロパティがあるが、上記 防具~シールドと判定されなかった場合に使用される)
  • ClfContnrWin.DisplayCondTable.Talis : アイテムがタリスマンの時。
  • ClfContnrWin.DisplayCondTable.Other : 上記 アクセサリ~タリスマンと判定されなかったアイテムの場合に使用される。

この機能の紹介記事でも書きましたが、アイテムの種別判定が厳格では無いので、その辺りはご了承くださいませ。。。

上記の各テーブルの設定方法は基本的にどれも同じですので、アクセサリの場合の ClfContnrWin.DisplayCondTable.Acce を例として説明します。

ClfContnrWin.DisplayCondTable.Acce = 
{
	
	{
		useRawText = true,
		key = "cursed",
		suffix = "",
		color = "cursed",
		priority = 99999,
		prefix = "",
	},
	
	{
		useRawText = true,
		key = "antique",
		suffix = "",
		color = "antique",
		priority = 99999,
		prefix = "",
	},
	
	{
		minVal = 0,
		key = "rarity",
		doBreak = true,
		priority = 0,
		suffix = "",
		prefix = "Rare:",
	},
	
	{
		hue = "gold",
		minVal = 120,
		key = "luck",
		suffix = "",
		priority = 10,
		prefix = "Luc:",
	},
	-- (以下省略)
}

上記の様に ClfContnrWin.DisplayCondTable.Acce= { ... } の中に、各プロパティ用の設定を  { key = "propertyKey", priority = **, ... }, として指定します。

各プロパティ用設定の中身は下記の様になっています。

{
	key = "propertyKey",	-- 必須:後述のプロパティ用キーを指定
	priority = 20,	-- プロパティを表示する優先順位
	minVal = 0,	-- プロパティの値がここで指定した数値以上の場合のみ表示
	useRawText = true,	-- プロパティに使用されている文字をそのままグリッドに表示する
	text = "",	-- 代替テキストを表示する場合に指定
	prefix = "",	-- プロパティ値の前に付ける文字
	suffix = "",	-- プロパティ値の後ろに付ける文字
	color = "green",	-- プロパティ表示の文字色の名前
	hue = "ice",	-- アイテムアイコンの着色に使用する色の名前
	doBreak = true,	-- このプロパティがあった時はそれ以降のプロパティ判定を行わない
},

各値の意味は上記の --  以降のコメントの様になっていますが、もう少し詳しく。
※ 下記設定で文字を指定する物に対して全角文字を指定すると文字化け(または動作を停止)します


key 【必須】
カスタムUIで各プロパティに紐付けたキー名です。
キー名はカスタムUIフォルダ内の ClfMods/ClfCommon/Data/csv フォルダにある、 tid_uniquName.csv 、 tid_magic.csv 、 tid_skillGroup.csv 、 tid_slayers.csv 、 tid_nonMagic.csv の各CSVファイルの key列にある物を指定します。
※ CSVファイルはUTF-8なので、エクセルでそのまま開くと文字化けします。カスタムUIフォルダ内にあるCSVをエクセルで開いてしまった場合は保存せずにそのまま終了してください。

priority
プロパティを表示する優先順位を指定します。(半角数字)
この数値が小さい順に優先してグリッド内にプロパティを表示します。
異なるプロパティで同じpriorityの物があった時にはプロパティ値が大きい方を優先します。
※ 省略した場合は 99999 として処理されます。

minVal
これを指定した場合、プロパティ値がこの値以上の時だけ表示します。(半角数字)
※ 値が無いプロパティの場合はプロパティ値を「0」として比較します。
(指定しない場合は省略するか false にする)

useRawText
これを指定すると、プロパティの表記そのままの文字をグリッドでのプロパティ表示に使用します。指定する場合は true にしてください。
(指定しない場合は省略するか false にする)

text
これを指定すると、指定した文字をそのままグリッドでのプロパティ表示に使用します。
ダブルコーテーションで括って文字列を指定してください。(半角英数記号)
※ useRawText が指定されていれば、そちらが優先されます。
(指定しない場合は省略するか false にする)

prefixsuffix
これを指定すると、プロパティ値の前後に指定した文字を追加してグリッドのプロパティ表示に使用します。
ダブルコーテーションで括って文字列を指定してください。(半角英数記号)
※ useRawText または text が指定されていれば、そちらが優先されます。
例えば、「命中: +15%」のプロパティの場合、プロパティ値は「15」が取得されますので、prefixを "HCI:" 、suffixを "%" として設定すると、グリッドでのプロパティ表示は「HCI:15%」となります。
(指定しない場合はカラ文字("")にするか、省略または false にする)

color
プロパティ表示の文字色を、前述の ClfContnrWin.TxtColorsLightClfContnrWin.TxtColorsDark で設定した色名で指定します。
ダブルコーテーションで括って色名の文字列を指定してください。(半角英数記号)
指定が無い場合は、色名 default が使用されます。
(指定しない場合は省略するか false にする)

hue
前述の ClfContnrWin.HueTbl で設定した色名を指定して、アイテムアイコンの着色を行います。
ダブルコーテーションで括って色名の文字列を指定してください。(半角英数記号)
(指定しない場合は省略するか false にする)

doBreak
これを指定すると、そのプロパティがあった時はそれ以降のプロパティ判定を行いません。
主に ClfContnrWin.UniqueCondTable で使用する事を目的とした項目です。
(指定しない場合は省略するか false にする)


各プロパティ用設定については以上です。
例えば、ファストキャストのプロパティがある場合に最優先で文字色「blue」で「FC:~」と表示させたい場合は以下の様にします。

{
	key = "fc",
	priority = 0,
	prefix = "FC:",
	suffix = "",
	color = "blue",
},

また、補足を以下に。

  • 重量が50のアイテムに対しては、プロパティの判定を行いません。
    文字色「unwieldy」で「重量: 50」と表示します。
  • プロパティごとに指定する文字色、アイテムアイコン着色は優先順位が高い物を使用しますが、「Cursed」か「短命」が付いているアイテムの文字色は、優先順位に関係無く「Cursed」「短命」に設定してある文字色が優先されます。
  •  useRawTexttext  を指定していないと、値が無いプロパティの場合は正常に表示出来ません。
    また、値があるプロパティの場合でも prefixsuffix を指定しないと数字しか表示されませんので、なんだか分からないと思います。
  • プロパティ表示用設定の初期値は、カスタムUIフォルダ内の ClfMods/Container フォルダにある  ClfContainerModData.lua の CONST_DATA テーブル内で定義してしています。
    初期設定で表示されるプロパティについては、上記説明と併せて ClfContainerModData.lua をご覧ください。( SavedVariables.lua にはコメント文がありませんが、こちらのファイルにはコメント文がありますので、多少は分かりやすいと思います)

 

設定方法については以上です。
説明が不十分で文章だけだと分かり難い部分もあると思いますので、質問などありましたらお気軽にコメントください。
※ 設定用UI制作のご要望にはお応えできません…申し訳ありませんが、ご了承のほど何卒よろしくお願いいたします。。。m(__)m

“コンテナ&宝石箱内グリッドの表示プロパティ設定方法。ClifeUI”への2件のコメント

  1. めちゃめちゃ便利になってます!
    希望出した通りに、いやそれ以上にVer.UPされてて感動です。
    仕上がりは想像以上で、今のところ不具合も感じていません。
    ほんとにありがとうございました!
    またなにか気が付いたら書き込みしますね!

    1. 感想&お褒めの言葉ありがとうございます!

      追加する機能の効果に対して
      追加・修正するソースの規模が大きかったり負荷が高くなる様な物は(あと私自身の技術力の問題で)
      見送る場合もあるかもしれませんが
      何か良いアイデアがありましたら是非よろしくお願いします!
      # アイデア以外でも既存の機能に対する疑問等ありましたらお気軽にどうぞ

コメントを残す

※ 送信されたコメントは、管理者の承認後に公開されます。