Tips7

Last-modified: 2011-08-25 (木) 11:00:15

オリジナルのプロパティをクライアントで表示する

  • カテゴリー: スクリプト
  • 重要性: 普通
  • 投稿日: 2005-07-30 (土) 09:41:08

アイテムにオリジナルのプロパティをクライアントで表示するにはItemクラスのGetProperties関数にリストを追加する必要があります。しかし、普通に

list.Add( string text )

で追加しても、正常に表示されません。これはクライアント側の問題のようで、変数を利用できるローカライズを使うことで解決できます。

例えば、GetProperties関数内に

list.Add( 1060658, "重さ\t{0}", Weight );

と書けば、Weightが10だった場合「重さ : 10」がクライアント上のプロパティのリストに正常に追加されます。この1060658のローカライズの内容は

~1_val~: ~2_val~

となっており、2つの変数を表示させることができます。そのため、名前と数値の両方を必要とするオリジナルのプロパティを表示するのに適しています。

ただし、同じGetProperties関数内で同じ番号を同時に利用することはできません。そのためオリジナルのプロパティが複数あった場合はその数だけ、ローカライズの番号を使う必要があります。(別のアイテムのGetPropertiesであれば同じ番号を利用できます) 番号が足りなくなった場合はUO Localizationなどのローカライズを追加できるソフトを使って増やしましょう。

ローカライズ番号

   「~1_val~: ~2_val~」となっているローカライズの番号
       1060658
       1060659
       1060660
       1060661
       1060662
       1060663

参考例

参考例としてSpawnerのソースを書いておきます。イジってみたい方はScripts\Engines\Spawnerにあります。

public override void GetProperties( ObjectPropertyList list )
{
base.GetProperties( list );

if ( m_Running )
{
list.Add( 1060742 ); // active

list.Add( 1060656, m_Count.ToString() ); // amount to make: ~1_val~
list.Add( 1061169, m_HomeRange.ToString() ); // range ~1_val~

list.Add( 1060658, "group\t{0}", m_Group ); // ~1_val~: ~2_val~
list.Add( 1060659, "team\t{0}", m_Team ); // ~1_val~: ~2_val~
list.Add( 1060660, "speed\t{0} to {1}", m_MinDelay, m_MaxDelay ); // ~1_val~: ~2_val~

for ( int i = 0; i < 3 && i < m_CreaturesName.Count; ++i )
list.Add( 1060661 + i, "{0}\t{1}", m_CreaturesName[i], CountCreatures( (string)m_CreaturesName[i] ) );
}
else
{
list.Add( 1060743 ); // inactive
}
}

12,13,14行目のlist.Addがオリジナルのプロパティを表示させている部分になります。