JA UO Topic multis houses - LIHACHTETAN/ClassicUO-Bad-Newbie-CSharp-Scripts-IDE GitHub Wiki
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
家 · C# · IDE · UO API · A–Z · 例 · Languages
世界の複合オブジェクト: 家やその他のマルチ、それらの部分と地図上の位置。
| トピック | コマンドと説明 |
|---|---|
| GetMultis | UO.GetMultis |
| Multi Parts | UO.GetMultiAllParts |
| Parts at Position | UO.GetMultiPartsAtPosition |
| IsHouse | UO.IsHouse |
UO.GetMultis · UO.GetMultiAllParts · UO.GetMultiPartsAtPosition · UO.IsHouse
各コマンド カードには、直接コード、関数、クラスなどのいくつかの独立したシナリオがあります。以下は厳選された短いシナリオです。制限と完全な分析がカードに含まれています。
var items = UO.GetMultis();
UO.Print(Convert.ToString(ArrayLength(items)));
int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;var houses = UO.GetMultis();
if (Truth(ArrayLength(houses) == 0))
{
return null;
}
var parts = UO.GetMultiAllParts(houses[0]);
UO.Print(Convert.ToString(ArrayLength(parts)));
int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.GetMultiAllParts(object? multiID);ある家のコンポーネントの記録を読み取ります。
-
multiID— 特定のオブジェクトのシリアル/ID: int、10 進数/16 進数の文字列、またはセットエイリアス self、backpack、lasttarget、lastobject または名前 AddObject。これはgraphic/typeではありません。自宅のHouseManagerにはIDがロードされているはずです。
配列<配列>。各行には 9 フィールドが含まれます: [0] graphic/type コンポーネント、[1] hue、[2] ワールド X、[3] ワールド Y、 [4] ワールド Z、[5] multiOffsetX - マルチからのオフセット X、[6] multiOffsetY - オフセット Y、[7] multiOffsetZ - オフセットZ、[8] multiSerial - serial 自宅にて。コンポーネントなし - 空の配列。グラフィックはIDではありません。ここでは、個々の静的コンポーネントには独自の serial がありません。
- クライアントによって既にダウンロードされているデータが読み込まれます。このコマンドは、コンテナを開いたり、アイテムを移動したり、サーバー全体からオブジェクトをダウンロードしたりしません。
- 配列 - 0 から始まるインデックスを持つ配列。 varに保存し、アクセスする前にArrayLengthを確認してください。スナップショットを作成した後、要素がワールドから消える可能性があります。アクションを実行する前に、Exists(serial) を確認してください。
- 既知の削除されていないコンポーネント HouseManager が返されます。個別の静的マップと土地はこのリストには含まれません。行はスナップショットです。固定順序または Z ソートは保証されません。
各サンプルは個別のファイル .csx として保存し、IDE で実行できます。 UO オブジェクトと待機関数は、現在のゲーム セッションのホストを提供します。デモの serial の名前、座標、アドレスを自分のものに置き換えます。
このコードを独立した .csx ファイルとして実行します。引数は呼び出しに直接記載されています。例の名前、serial、アドレスを自分の値に置き換えてください。
var multis = (object?[])UO.GetMultis();
if (multis.Length > 0) {
var parts = (object?[])UO.GetMultiAllParts(multis[0]);
UO.Print("Parts: " + parts.Length);
}引数と実行の流れ:
- まず、ロードされたハウスが選択されます。
- 長さはコンポーネントの数であり、高さやハウスの数ではありません。
var houses = UO.GetMultis();
if (Truth(ArrayLength(houses) == 0))
{
return null;
}
var parts = UO.GetMultiAllParts(houses[0]);
UO.Print(Convert.ToString(ArrayLength(parts)));
int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;引数と実行の流れ:
- Parts[0] は配列の最初の行です。彼女の [0] - type、[2]/[3]/[4] - 世界 X/Y/Z。
- インデックス [5]/[6]/[7] には、代わりに相対オフセットが含まれます。
return RunScenario();
object? RunScenario()
{
var houses = UO.GetMultis();
if (Truth(ArrayLength(houses) == 0))
{
return null;
}
var parts = UO.GetMultiAllParts(houses[0]);
if (Truth(ArrayLength(parts) > 0))
{
var part = parts[0];
UO.Print("Type: 0x" + Hex(part[0]));
UO.Print(Convert.ToString(part[2]) + "," + Convert.ToString(part[3]) + "," + Convert.ToString(part[4]));
}
return null;
}
int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;
string Hex(object? value) => Convert.ToInt64(value).ToString("X");
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;引数と実行の流れ:
- [8] は自宅の serial、[7] は Z コンポーネントのオフセットです。
- ホームで serial を期待するコマンドに part[0] を渡さないでください。それは別のコンポーネントの graphic です。
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
var houses = UO.GetMultis();
if (Truth(ArrayLength(houses) == 0))
{
return null;
}
var parts = UO.GetMultiAllParts(houses[0]);
var i = 0;
while (Truth(i < ArrayLength(parts)))
{
var part = parts[i];
UO.Print("Multi: 0x" + Hex(part[8]) + ", offset Z: " + Convert.ToString(part[7]));
i = i + 1;
}
return null;
}
int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;
string Hex(object? value) => Convert.ToInt64(value).ToString("X");
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}C# は大文字と小文字を区別します。正確な UO 名を使用してください。数値フラグは 0 と比較し、戻り値が bool の場合だけ bool を使います。
引数: multiID (Any)
結果: dynamic / Any.
呼び出し時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetMultiAllParts:bridge.GetMultiAllParts(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
内部実装のコードです。単独のスクリプトとして実行できません。
case "getmultiallparts":
return new InjectionValue((bridge.GetMultiAllParts(Arg(0)) ?? Array.Empty<int[]>())
.Select(part => new InjectionValue((part ?? Array.Empty<int>()).Select(value => new InjectionValue(value)).ToArray())).ToArray());Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.GetMultiPartsAtPosition(object? x, object? y);指定されたワールド セル内の家のコンポーネントを読み取ります。
-
x— 家の内部のオフセットではなく、現在のマップ セルのワールド X 座標。 -
y— セルの世界座標 Y。このセル内のロードされたすべての家のコンポーネントが、すべての Z 高さで返されます。
配列<配列>。各行には 9 フィールドが含まれます: [0] graphic/type コンポーネント、[1] hue、[2] ワールド X、[3] ワールド Y、 [4] ワールド Z、[5] multiOffsetX - マルチからのオフセット X、[6] multiOffsetY - オフセット Y、[7] multiOffsetZ - オフセットZ、[8] multiSerial - serial 自宅にて。コンポーネントなし - 空の配列。グラフィックはIDではありません。ここでは、個々の静的コンポーネントには独自の serial がありません。
- クライアントによって既にダウンロードされているデータが読み込まれます。このコマンドは、コンテナを開いたり、アイテムを移動したり、サーバー全体からオブジェクトをダウンロードしたりしません。
- 配列 - 0 から始まるインデックスを持つ配列。 varに保存し、アクセスする前にArrayLengthを確認してください。スナップショットを作成した後、要素がワールドから消える可能性があります。アクションを実行する前に、Exists(serial) を確認してください。
- 既知の削除されていないコンポーネント HouseManager が返されます。個別の静的マップと土地はこのリストには含まれません。行はスナップショットです。固定順序または Z ソートは保証されません。
各サンプルは個別のファイル .csx として保存し、IDE で実行できます。 UO オブジェクトと待機関数は、現在のゲーム セッションのホストを提供します。デモの serial の名前、座標、アドレスを自分のものに置き換えます。
このコードを独立した .csx ファイルとして実行します。引数は呼び出しに直接記載されています。例の名前、serial、アドレスを自分の値に置き換えてください。
1 回の呼び出し結果をジャーナルに表示します。数値は bool に変換されません。配列の場合は要素数を表示します。
object? result = UO.GetMultiPartsAtPosition(UO.GetX(), UO.GetY());
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));引数と実行の流れ:
- X/Y - キャラクターの現在位置。
- 長さはコンポーネントの数であり、高さやハウスの数ではありません。
var parts = UO.GetMultiPartsAtPosition(UO.GetX(), UO.GetY());
UO.Print(Convert.ToString(ArrayLength(parts)));
int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;引数と実行の流れ:
- Parts[0] は配列の最初の行です。彼女の [0] - type、[2]/[3]/[4] - 世界 X/Y/Z。
- インデックス [5]/[6]/[7] には、代わりに相対オフセットが含まれます。
return RunScenario();
object? RunScenario()
{
var parts = UO.GetMultiPartsAtPosition(UO.GetX(), UO.GetY());
if (Truth(ArrayLength(parts) > 0))
{
var part = parts[0];
UO.Print("Type: 0x" + Hex(part[0]));
UO.Print(Convert.ToString(part[2]) + "," + Convert.ToString(part[3]) + "," + Convert.ToString(part[4]));
}
return null;
}
int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;
string Hex(object? value) => Convert.ToInt64(value).ToString("X");
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;引数と実行の流れ:
- [8] は自宅の serial、[7] は Z コンポーネントのオフセットです。
- ホームで serial を期待するコマンドに part[0] を渡さないでください。それは別のコンポーネントの graphic です。
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
var parts = UO.GetMultiPartsAtPosition(UO.GetX(), UO.GetY());
var i = 0;
while (Truth(i < ArrayLength(parts)))
{
var part = parts[i];
UO.Print("Multi: 0x" + Hex(part[8]) + ", offset Z: " + Convert.ToString(part[7]));
i = i + 1;
}
return null;
}
int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;
string Hex(object? value) => Convert.ToInt64(value).ToString("X");
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}C# は大文字と小文字を区別します。正確な UO 名を使用してください。数値フラグは 0 と比較し、戻り値が bool の場合だけ bool を使います。
引数: x (Any), y (Any)
結果: dynamic / Any.
呼び出し時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetMultiPartsAtPosition:bridge.GetMultiPartsAtPosition(Arg(0), Arg(1)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
内部実装のコードです。単独のスクリプトとして実行できません。
case "getmultipartsatposition":
return new InjectionValue((bridge.GetMultiPartsAtPosition(Arg(0), Arg(1)) ?? Array.Empty<int[]>())
.Select(part => new InjectionValue((part ?? Array.Empty<int>()).Select(value => new InjectionValue(value)).ToArray())).ToArray());Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.GetMultis();クライアントによってホーム/マルチとして認識されるロードされたオブジェクトのリスト。
パラメータはありません。
配列は、IsHouseが1を返すワールドアイテムのserialです。そのようなオブジェクトがない場合は空の配列。これは ID の家であり、グラフィックス コンポーネントのリストでも、座標でも、サーバー上のすべての家のリストでもありません。
- クライアントによって既にダウンロードされているデータが読み込まれます。このコマンドは、コンテナを開いたり、アイテムを移動したり、サーバー全体からオブジェクトをダウンロードしたりしません。
- 配列 - 0 から始まるインデックスを持つ配列。 varに保存し、アクセスする前にArrayLengthを確認してください。スナップショットを作成した後、要素がワールドから消える可能性があります。アクションを実行する前に、Exists(serial) を確認してください。
- データはロードされたワールド アイテムから読み取られます。 1 つの家のコンポーネントには、GetMultiAllParts(serial) を使用します。
各サンプルは個別のファイル .csx として保存し、IDE で実行できます。 UO オブジェクトと待機関数は、現在のゲーム セッションのホストを提供します。デモの serial の名前、座標、アドレスを自分のものに置き換えます。
このコードを独立した .csx ファイルとして実行します。引数は呼び出しに直接記載されています。例の名前、serial、アドレスを自分の値に置き換えてください。
1 回の呼び出し結果をジャーナルに表示します。数値は bool に変換されません。配列の場合は要素数を表示します。
object? result = UO.GetMultis();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));引数と実行の流れ:
- パラメータはありません。ロードされたハウス/マルチアイテムが選択されています。
- 長さ - レコード数/ID。これはスタック内の Amount の量ではありません。空のリストは 0 を与えます。
var items = UO.GetMultis();
UO.Print(Convert.ToString(ArrayLength(items)));
int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;引数と実行の流れ:
- パラメータはありません。ロードされたハウス/マルチアイテムが選択されています。
- items[i] — 数値 serial。 16 進数は出力のみに使用されます。ループは最後のインデックスにはアクセスしません。
return RunScenario();
object? RunScenario()
{
var items = UO.GetMultis();
var i = 0;
while (Truth(i < ArrayLength(items)))
{
UO.Print("0x" + Hex(items[i]));
i = i + 1;
}
return null;
}
int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;
string Hex(object? value) => Convert.ToInt64(value).ToString("X");
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;引数と実行の流れ:
- パラメータはありません。ロードされたハウス/マルチアイテムが選択されています。
- スナップショット内のレコードと現在のオブジェクトの存在という 2 つの異なることがチェックされます。明示的な並べ替えのない順序は、近いことを意味しません。
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
var items = UO.GetMultis();
if (Truth(ArrayLength(items) > 0))
{
var first = items[0];
if (Truth(UO.Exists(first)))
{
UO.Print(UO.GetName(first));
}
}
else
{
UO.Print("Empty list");
}
return null;
}
int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}C# は大文字と小文字を区別します。正確な UO 名を使用してください。数値フラグは 0 と比較し、戻り値が bool の場合だけ bool を使います。
引数: 引数はありません。
結果: dynamic / Any.
呼び出し時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetWorldItems:bridge.GetWorldItems(). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.IsHouse:bridge.IsHouse(id).
内部実装のコードです。単独のスクリプトとして実行できません。
case "getmultis":
return new InjectionValue(bridge.GetWorldItems().Where(id => bridge.IsHouse(id) != 0).Select(id => new InjectionValue(id)).ToArray());Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.IsHouse(object? objID);ロードされたオブジェクト (家、船、または別のマルチタイル構造物) のマルチ フラグを確認します。
-
objID— 特定のオブジェクトの必須 serial/ID: int、16 進文字列またはエイリアス self、backpack、lasttarget、lastobject、lastcontainer、laststatus、finditem、lastcorpse または name AddObject。これはgraphic/typeではありません。指定されていない名前は 0 に解決されます。このコマンドは新しいターゲットを開きません。
int 1 - IsMulti 属性を持つアイテム。 int 0 - 通常のオブジェクト、mobile、未知または遠隔オブジェクト。名前は結果を家に限定しません。船も 1 を与える可能性があります。チームは家の所有者、地域、エリアを返しません。
コマンドの結果は数値フラグです。1 は条件が満たされたことを意味し、0 は条件が満たされていないことを意味します。 var result = command(...) の後、(result != 0) または (result == 0) を確認します。 1 回の呼び出しの結果を保存します。呼び出しを繰り返すと、アクションを再度実行したり、すでに変更された状態を読み取ることができます。
- ローカル クライアント モデルが読み取られます。サーバーへのリクエストはなく、待機や移動もありません。
- 結果は読書の瞬間を指します。 UO.Wait またはその他のアクションの後、オブジェクトとそのフラグが変更される場合があります。
各サンプルは個別のファイル .csx として保存し、IDE で実行できます。 UO オブジェクトと待機関数は、現在のゲーム セッションのホストを提供します。デモの serial の名前、座標、アドレスを自分のものに置き換えます。
このコードを独立した .csx ファイルとして実行します。引数は呼び出しに直接記載されています。例の名前、serial、アドレスを自分の値に置き換えてください。
1 回の呼び出し結果をジャーナルに表示します。数値は bool に変換されません。配列の場合は要素数を表示します。
var result = UO.IsHouse(UO.GetSerial("lasttarget"));
UO.Print("IsHouse: " + Convert.ToString(result));引数と実行の流れ:
- ターゲットには、個々の壁の graphic ではなく、マルチオブジェクトの serial が含まれている必要があります。
- 1 はクラスマルチを意味します。これは、その構造物が住宅用建物であることを証明するものではありません。
var target = UO.GetSerial("lasttarget");
if (Truth(UO.IsHouse(target)))
{
UO.Print("Loaded multi structure");
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;引数と実行の流れ:
- まず存在がチェックされ、次に mobile が削除されます。
- Exists のないゼロは、通常のオブジェクトではなく、オブジェクトが存在しないことを意味する可能性があります。
return RunScenario();
object? RunScenario()
{
var target = UO.GetSerial("lasttarget");
if (Truth(UO.Exists(target)))
{
if (Truth(UO.IsNPC(target) == 0))
{
if (Truth(UO.IsHouse(target)))
{
UO.Print("Multi");
}
else
{
UO.Print("Ordinary item");
}
}
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;引数と実行の流れ:
- selfはmobileなので、家の中でも最初の結果は0です。
- 構造をテストするには、それ自体の serial を渡します。チームはキャラクターの周りに家を探しているわけではありません。
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
var selfIsMulti = UO.IsHouse("self");
var selectedIsMulti = UO.IsHouse("lasttarget");
UO.Print("Self: " + Convert.ToString(selfIsMulti));
UO.Print("Selected object: " + Convert.ToString(selectedIsMulti));
return null;
}
}C# は大文字と小文字を区別します。正確な UO 名を使用してください。数値フラグは 0 と比較し、戻り値が bool の場合だけ bool を使います。
引数: objID (Any)
結果: int / Integer.
呼び出し時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.IsHouse:bridge.IsHouse(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
内部実装のコードです。単独のスクリプトとして実行できません。
case "ishouse": return new InjectionValue(bridge.IsHouse(Arg(0)));