ZH TW UO Topic world geometry Part 2 - LIHACHTETAN/ClassicUO-Bad-Newbie-CSharp-Scripts-IDE GitHub Wiki
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
家 · C# · IDE · UO API · A–Z · 範例 · Languages
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.GetZ();
int UO.GetZ(object? id);讀取已載入物件或目前字元的 Z 欄位。
-
id是物件的 Serial/ID,而非 graphic/type。數字、十六進位字串、標準名稱 self/backpack/lasttarget/lastobject/lastcontainer/laststatus/finditem/lastcorpse 或名稱 AddObject。必須設定別名;存在性由Exists檢查。不含參數的註冊形式使用self。
int 是 Z 的高度。對於未知物體,返回0。零也是一個有效的座標。高度可以為負值;這不是設備層或靜態索引。
- 讀取客戶端已知的最新資料;更新請求不會傳送到伺服器。
- 未知物件和尚未檢索的屬性可以具有 null/空值。檢查Exists以及特定動作的條件。
- 對於地面上的角色或物體,這是世界座標。容器內的物品在口香糖內具有 X/Y 位置;該命令不會將它們轉換為所有者的世界座標。
- 讀取物件的當前座標。此命令不會將待處理步驟轉換為路徑計算。
int z = UO.GetZ();
UO.Print($"Z = {z}");每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
var result = UO.GetZ();
UO.Print("GetZ: " + Convert.ToString(result));參數與執行流程:
- 不含參數的形式選擇目前字元 self。
- 位置包含Z的高度,而不是serial。
var position = UO.GetZ();
UO.Print("Z: " + Convert.ToString(position));參數與執行流程:
- lasttarget 應表示地面上已加載的角色或物品。
- delta — 沿一個軸的差異。它不是路線的長度;而是路線的長度。該值可能為負數。
return RunScenario();
object? RunScenario()
{
var other = UO.GetSerial("lasttarget");
if (Truth(UO.Exists(other)))
{
var delta = UO.GetZ(other) - UO.GetZ();
UO.Print("Difference: " + Convert.ToString(delta));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;參數與執行流程:
- id="self" 是字元選擇的明確形式。 UO.Wait=500 毫秒。
- 比較僅顯示 Z 軸的變化。這裡不考慮其他軸或旋轉的變化。
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
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;
}
async public Task<object?> RunScenarioAsync()
{
var before = UO.GetZ("self");
await Delay(500);
var after = UO.GetZ("self");
if (Truth(before != after))
{
UO.Print("Coordinate changed");
}
return null;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
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。
參數: 沒有參數。
結果: int / Integer.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.GetZ. -
InjectionScript.Runtime.InjectionApiUO.GetZ:GetZ("self").
內部實作程式碼,不能作為獨立腳本執行。
public int GetZ() => GetZ("self");參數: id (Any/Integer/String)
結果: int / Any.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetZ:bridge.GetZ(Arg(0, bridge.Self)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0, bridge.Self). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Self:bridge.Self.
內部實作程式碼,不能作為獨立腳本執行。
case "getz": return new InjectionValue(bridge.GetZ(Arg(0, bridge.Self)));參數: id (Any/Integer/String)
結果: int / Integer.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.GetZ. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetZ:bridge.GetZ(id).
內部實作程式碼,不能作為獨立腳本執行。
public int GetZ(int id) => bridge.GetZ(id);參數: id (Any/Integer/String)
結果: int / Integer.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.GetZ. -
InjectionScript.Runtime.InjectionApiUO.GetZ:GetZ(GetObject(id)). -
InjectionScript.Runtime.InjectionApiUO.GetObject:GetObject(id).
內部實作程式碼,不能作為獨立腳本執行。
public int GetZ(string id) => GetZ(GetObject(id));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.IsMineTile(object? x, object? y);根據本地地圖資料檢查單元格的特徵。
-
x— 目前卡片的 int X 個單元格;世界座標,而非螢幕像素。 -
y— 目前卡片的 int Y 個單元格;世界座標,而非螢幕像素。
數字標誌 int: 1 — 找到符合條件的物件; 0 - 不存在此類物件或單元/卡片無法存取。
- AnyTileAt 繞過加載單元的 TNext 鏈。條件IsMineTile:靜態/多,有StaticFilters.IsRock或包含洞穴、山或岩石的名稱,不區分大小寫。
- 此檢查描述了本地圖塊資料/過濾器。它不承諾開採資源的可用性、跨國能力、採礦範圍或伺服器許可。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
var result = UO.IsMineTile(UO.GetX(), UO.GetY());
UO.Print("IsMineTile: " + Convert.ToString(result));參數與執行流程:
- 根據本地地圖資料檢查單元格的特徵。
UO.Print(UO.IsMineTile(UO.GetX(), UO.GetY()));參數與執行流程:
- AnyTileAt 繞過加載單元的 TNext 鏈。條件IsMineTile:靜態/多,有StaticFilters.IsRock或包含洞穴、山或岩石的名稱,不區分大小寫。
return RunScenario();
object? RunScenario()
{
var x = UO.GetX() + 1;
var y = UO.GetY();
if (Truth(UO.IsMineTile(x, y)))
{
UO.Print("Local tile predicate matched");
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;參數與執行流程:
- 此檢查描述了本地圖塊資料/過濾器。它不承諾開採資源的可用性、跨國能力、採礦範圍或伺服器許可。
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 x = UO.GetX();
var y = UO.GetY();
var before = UO.IsMineTile(x, y);
UO.Wait(500);
UO.Print(before = UO.IsMineTile(x, y));
return null;
}
}C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。
參數: x (Any), y (Any)
結果: int / Integer.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.IsMineTile. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.IsMineTile:bridge.IsMineTile(NumberConversions.ToInt(x), NumberConversions.ToInt(y)). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(x).
內部實作程式碼,不能作為獨立腳本執行。
public int IsMineTile(InjectionValue x, InjectionValue y) => bridge.IsMineTile(NumberConversions.ToInt(x), NumberConversions.ToInt(y));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.IsTreeTile(object? x, object? y);根據本地地圖資料檢查單元格的特徵。
-
x— 目前卡片的 int X 個單元格;世界座標,而非螢幕像素。 -
y— 目前卡片的 int Y 個單元格;世界座標,而非螢幕像素。
數字標誌 int: 1 — 找到符合條件的物件; 0 - 不存在此類物件或單元/卡片無法存取。
- AnyTileAt 繞過加載單元的 TNext 鏈。條件IsTreeTile:靜態/多重被StaticFilters.IsTree識別。
- 此檢查描述了本地圖塊資料/過濾器。它不承諾開採資源的可用性、跨國能力、採礦範圍或伺服器許可。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
var result = UO.IsTreeTile(UO.GetX(), UO.GetY());
UO.Print("IsTreeTile: " + Convert.ToString(result));參數與執行流程:
- 根據本地地圖資料檢查單元格的特徵。
UO.Print(UO.IsTreeTile(UO.GetX(), UO.GetY()));參數與執行流程:
- AnyTileAt 繞過加載單元的 TNext 鏈。條件IsTreeTile:靜態/多重被StaticFilters.IsTree識別。
return RunScenario();
object? RunScenario()
{
var x = UO.GetX() + 1;
var y = UO.GetY();
if (Truth(UO.IsTreeTile(x, y)))
{
UO.Print("Local tile predicate matched");
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;參數與執行流程:
- 此檢查描述了本地圖塊資料/過濾器。它不承諾開採資源的可用性、跨國能力、採礦範圍或伺服器許可。
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 x = UO.GetX();
var y = UO.GetY();
var before = UO.IsTreeTile(x, y);
UO.Wait(500);
UO.Print(before = UO.IsTreeTile(x, y));
return null;
}
}C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。
參數: x (Any), y (Any)
結果: int / Integer.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.IsTreeTile. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.IsTreeTile:bridge.IsTreeTile(NumberConversions.ToInt(x), NumberConversions.ToInt(y)). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(x).
內部實作程式碼,不能作為獨立腳本執行。
public int IsTreeTile(InjectionValue x, InjectionValue y) => bridge.IsTreeTile(NumberConversions.ToInt(x), NumberConversions.ToInt(y));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.IsWaterTile(object? x, object? y);根據本地地圖資料檢查單元格的特徵。
-
x— 目前卡片的 int X 個單元格;世界座標,而非螢幕像素。 -
y— 目前卡片的 int Y 個單元格;世界座標,而非螢幕像素。
數字標誌 int: 1 — 找到符合條件的物件; 0 - 不存在此類物件或單元/卡片無法存取。
- AnyTileAt 繞過加載單元的 TNext 鏈。條件IsWaterTile:以TileData.IsWet或具有有效靜態graphic和標誌IsWet的物體著陸。
- 此檢查描述了本地圖塊資料/過濾器。它不承諾開採資源的可用性、跨國能力、採礦範圍或伺服器許可。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
var result = UO.IsWaterTile(UO.GetX(), UO.GetY());
UO.Print("IsWaterTile: " + Convert.ToString(result));參數與執行流程:
- 根據本地地圖資料檢查單元格的特徵。
UO.Print(UO.IsWaterTile(UO.GetX(), UO.GetY()));參數與執行流程:
- AnyTileAt 繞過加載單元的 TNext 鏈。條件IsWaterTile:以TileData.IsWet或具有有效靜態graphic和標誌IsWet的物體著陸。
return RunScenario();
object? RunScenario()
{
var x = UO.GetX() + 1;
var y = UO.GetY();
if (Truth(UO.IsWaterTile(x, y)))
{
UO.Print("Local tile predicate matched");
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;參數與執行流程:
- 此檢查描述了本地圖塊資料/過濾器。它不承諾開採資源的可用性、跨國能力、採礦範圍或伺服器許可。
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 x = UO.GetX();
var y = UO.GetY();
var before = UO.IsWaterTile(x, y);
UO.Wait(500);
UO.Print(before = UO.IsWaterTile(x, y));
return null;
}
}C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。
參數: x (Any), y (Any)
結果: int / Integer.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.IsWaterTile. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.IsWaterTile:bridge.IsWaterTile(NumberConversions.ToInt(x), NumberConversions.ToInt(y)). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(x).
內部實作程式碼,不能作為獨立腳本執行。
public int IsWaterTile(InjectionValue x, InjectionValue y) => bridge.IsWaterTile(NumberConversions.ToInt(x), NumberConversions.ToInt(y));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.IsWorldCellPassable(object? currX, object? currY, object? currZ, object? destX, object? destY, object? destZ, object? worldNum);檢查到相鄰世界單元的一個轉換並返回可通過的標誌以及高度。
-
currX— 源單元的強制世界 X 座標。載入地圖內的整數0..65535;這不是阿甘座標。 -
currY— 源單元的強制世界 Y 座標。載入地圖內的整數0..65535;這不是阿甘座標。 -
currZ— 強制初始高度−128..127。這是世界的高度,而不是樓層數。無效高度將被拒絕且不會被修剪。 -
destX— 目標單元格的強制世界 X 座標。載入地圖內的整數0..65535;這不是阿甘座標。 -
destY— 目標單元格的強制世界 Y 座標。載入地圖內的整數0..65535;這不是阿甘座標。 -
destZ- 所需的輸入備用Z,通常為 CurrZ。這不是var:變數不會改變,也不會設定所需的樓層。從結果中讀取計算出的高度[1]。這座橋總是返回它的高度;為了與 Pascal 形式相容,需要該參數。 -
worldNum— 強制卡號:UO.WorldNum()。僅檢查目前已知尺寸的地圖;其他地圖將無法載入。
兩個int的陣列:[0] - 可通過性,1(滿足條件),0(不滿足條件); [1] - 計算Z。只有第一個元素是合乎邏輯的。數組本身無法與true進行比較。高度0/負值可以接受;對於 [0]=0 ,高度並不能證明可達性。拒絕參數回傳 [0, CurrZ]。
- 無移動、門開啟、十字準線或網路資料包。讀取現有的局部幾何圖形;伺服器稍後可能會拒絕該步驟。兩個請求可能會看到不同的狀態。
- 相鄰單元格被接受(X/Y 差異不再 1)。一個更遙遠的目標,離開地圖,缺乏角色/地圖和 IsDestroyed 結算前拒絕。如需完整行程,請使用 GetPathArray 或者 NewMoveXY.
- 相同的有效 X/Y 給出 [1, CurrZ],無需碰撞檢查:無需步驟。這並不是考驗逃出牢籠的能力。角色的狀況和目前的探路者規則會影響相鄰的步驟;如果沒有載入幾何體,它可能會被拒絕。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
object? result = UO.IsWorldCellPassable(UO.GetX(), UO.GetY(), UO.GetZ(), UO.GetX() + 1, UO.GetY(), UO.GetZ(), UO.WorldNum());
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));參數與執行流程:
- x/y/z為起始位置,x+1/y為相鄰單元格,第六個參數z為備用Z,最後一個為目前卡。在使用 result[1] 之前檢查 result[0]。
var x = UO.GetX();
var y = UO.GetY();
var z = UO.GetZ();
var result = UO.IsWorldCellPassable(x,y,z,x+1,y,z,UO.WorldNum());
if (Truth(Truth(result[0]) == true))
{
UO.Print("Passable, Z=" + Convert.ToString(result[1]));
}
else
{
UO.Print("Blocked");
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;參數與執行流程:
- 呼叫後proposedZ仍為0。 targetZ取自結果[1],而非取自參數。如果失敗,則此範例不會推斷身高。
return RunScenario();
object? RunScenario()
{
var x = UO.GetX();
var y = UO.GetY();
var z = UO.GetZ();
var proposedZ = 0;
var result = UO.IsWorldCellPassable(x, y, z, x, y + 1, proposedZ, UO.WorldNum());
if (Truth(result[0] == 1))
{
var targetZ = result[1];
UO.Print("Input=" + Convert.ToString(proposedZ) + "; result=" + Convert.ToString(targetZ));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;參數與執行流程:
- Main 下面的完整助手接受來源 X/Y/Z、目標 X/Y 和映射。它添加所需的第六個參數並僅返回 int 1/0,而不是數組。因此,IsCellOpen的結果可以與true進行比較。該代碼不會移動角色。
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 x = UO.GetX();
var y = UO.GetY();
var openCell = IsCellOpen(x, y, UO.GetZ(), x + 1, y + 1, UO.WorldNum());
if (Truth(Truth(openCell) == true))
{
UO.Print("Diagonal cell is locally passable");
}
return null;
}
dynamic IsCellOpen(dynamic x, dynamic y, dynamic z, dynamic toX, dynamic toY, dynamic map)
{
var cellResult = UO.IsWorldCellPassable(x, y, z, toX, toY, z, map);
if (Truth(ArrayLength(cellResult) != 2))
{
return 0;
}
return cellResult[0];
}
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。
UO.IsWorldCellPassable(currX, currY, currZ, destX, destY, destZ, worldNum) — UO.IsWorldCellPassable(Any,Any,Any,Any,Any,Any,Any)
參數: currX (Any), currY (Any), currZ (Any), destX (Any), destY (Any), destZ (Any), worldNum (Any)
結果: dynamic / Array.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(5). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.CheckWorldStep:bridge.CheckWorldStep(Arg(0), Arg(1), Arg(2), Arg(3), Arg(4), Arg(6)).
內部實作程式碼,不能作為獨立腳本執行。
case "isworldcellpassable":
{
int destinationZFallback = Arg(5);
int[] step = bridge.CheckWorldStep(Arg(0), Arg(1), Arg(2), Arg(3), Arg(4), Arg(6));
int passable = step.Length > 0 ? step[0] : 0;
int destinationZ = step.Length > 1 ? step[1] : destinationZFallback;
return new InjectionValue(new[] { new InjectionValue(passable), new InjectionValue(destinationZ) });
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.LOSOptions();
dynamic UO.LOSOptions(object? value);讀取或保存本機選項掩碼 LOS runtime.
-
value- 選修的 int;無參數唯讀。在此線程中,不檢查範圍和各個位元。雅戈爾 byte (value & 0xFF) 選擇演算法 1..4;次要的其他意義 byte V CheckLosCell 使用演算法 3。演算法 1/2 堵牆且無法通行, 3 另外 NoShoot, 一個 4 包括 NoShoot 僅與 0x200 並僅跳過窗口障礙物 0x400。頁 0x100 另外檢查任何選定演算法的每個對角射線步驟的兩側單元。值=0 禁用額外的 CheckLosCell/對角線檢查,但是 BadLocations 和 CheckWorldStep 保持。例如 4+0x100+0x200+0x400 選擇具有三個標誌的自訂;設定器保存原始的 int,不是標準化演算法。
int - 可能錄製後的狀態。 LosOptions。這是參數代碼/掩碼,不是bool,也不是可見性檢查的結果。
- ExecuteClientApiCompatibility 分配狀態。 LosOptions 給定一個參數並傳回相同的欄位。此呼叫不執行CheckLOS,也不檢查牆壁。
- 該設定屬於運行時。它不能保證伺服器可見性,也不是穿越障礙的方法。
- 在常規用戶端主機中,此狀態資料取自GetPersistentState管理器,並且對於同一世界/設定檔的腳本/聊天/巨集是通用的,且不屬於一個腳本。另一個進程或明顯獨立的InjectionRuntimeState具有不同的狀態。載入/清除設定檔可以取代它;已儲存的serial仍然會根據載入的世界進行檢查。
- 次要byte(值&0xFF)選擇演算法1..4;CheckLosCell中次byte的其他值使用3演算法。演算法1/2阻擋牆壁和不可通行,3另外NoShoot,4僅使用0x200啟用NoShoot,僅使用0x400P18⟧。位元0x100也檢查每個對角波束步長的兩側單元是否有任何選定的演算法。 value=0 禁用額外的 CheckLosCell/對角線檢查,但 BadLocations 和 CheckWorldStep 保留。例如4+0x100+0x200+0x400選擇具有三個標誌的自訂; setter 保留原始的int,而不是標準化演算法。
- 非零長度的光束僅讀取目前載入的_world.Map/World.Map:via CheckWorldStep 需要的 WorldNum == _world.MapIndex 和即時 Player.Pathfinder。未載入或請求另一個方面;沒有地圖/角色/探路者或步驟不可用 - 0。排除相同的 X/Y 會跳過整個細胞週期:X/Y 位於 0..65535, WorldNum V 0..255 和abs(Zfrom-Zto)<=20 回報 1 即使沒有加載卡或卡號不同。這不是幾何或可達性的證明。結果是局部的,不是解決方案 LOS 伺服器.
- CheckLosCell 繞過一個單元格的載入陸地/靜態/多/項目。具有ABS的不可逾越的土地塊(rayZ-land.Z)<=20。靜態/多/項目標誌僅適用於圖塊範圍。Z-2 .. tile.Z+max(1,Height)+2;在檢查 Wall/Impassable/ 之前跳過允許的自訂窗口NoShoot。光束 X/Y 使用 Bresenham,最大 4096 步驟; Z 從表面獲取 CheckWorldStep,不插值到Zto,最終的高度公差為 20.
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
object? result = UO.LOSOptions();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));參數與執行流程:
- 讀取或保存本機選項掩碼 LOS runtime.
UO.Print(UO.LOSOptions());參數與執行流程:
- ExecuteClientApiCompatibility 分配狀態。 LosOptions 給定一個參數並傳回相同的欄位。此呼叫不執行CheckLOS,也不檢查牆壁。
return RunScenario();
object? RunScenario()
{
var before = UO.LOSOptions();
UO.Print(UO.LOSOptions(0));
UO.LOSOptions(before);
return null;
}參數與執行流程:
- 該設定屬於運行時。它不能保證伺服器可見性,也不是穿越障礙的方法。
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 original = UO.LOSOptions();
UO.LOSOptions(original);
UO.Print(Convert.ToString(UO.LOSOptions() == original));
return null;
}
}C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。
參數: 沒有參數。
結果: dynamic / Any.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
內部實作程式碼,不能作為獨立腳本執行。
case "losoptions": if (arguments.Length > 0) state.LosOptions = Arg(0); return new InjectionValue(state.LosOptions);參數: value (Any)
結果: dynamic / Any.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
內部實作程式碼,不能作為獨立腳本執行。
case "losoptions": if (arguments.Length > 0) state.LosOptions = Arg(0); return new InjectionValue(state.LosOptions);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
string UO.PrivateGetTile(object? x, object? y, object? unknown, object? minTile, object? maxTile);在本地單元格的給定範圍內搜尋第一個 graphic。
-
x— 目前地圖的 int 世界座標。 -
y— 目前地圖的 int 世界座標。 -
unknown— 語法中保留了舊參數 int,但橋不使用它。 -
minTile- int 包含邊界 graphic。順序不會自動改變; minTile>maxTile 不符。 -
maxTile- int 包含邊界 graphic。順序不會自動改變; minTile>maxTile 不符。
第一個匹配的string“0xXXXX”graphic; “0x0000” - 沒有匹配或地圖未加載。真實的graphic=0也有這樣的表示。
- PrivateGetTile依map順序遍歷所有cell物件的TNext鏈,比較graphic>=minTile && graphic<=maxTile。只有靜態不過濾且不考慮hue/高度。
- 無探路者/伺服器請求。對於精確的結構化幾何,請使用GetWorldCell/ReadStaticsXY。遺失卡牌的守衛會回到先前不符的哨兵。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
var result = UO.PrivateGetTile(UO.GetX(), UO.GetY(), 0, 0, 65535);
UO.Print("PrivateGetTile: " + Convert.ToString(result));參數與執行流程:
- 在本地單元格的給定範圍內搜尋第一個 graphic。
UO.Print(UO.PrivateGetTile(UO.GetX(), UO.GetY(), 0, 0, 65535));參數與執行流程:
- PrivateGetTile依map順序遍歷所有cell物件的TNext鏈,比較graphic>=minTile && graphic<=maxTile。只有靜態不過濾且不考慮hue/高度。
return RunScenario();
object? RunScenario()
{
UO.Print(UO.PrivateGetTile(UO.GetX(), UO.GetY(), 0, 0x0E21, 0x0E21));
return null;
}參數與執行流程:
- 無探路者/伺服器請求。對於精確的結構化幾何,請使用GetWorldCell/ReadStaticsXY。遺失卡牌的守衛會回到先前不符的哨兵。
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 tile = UO.PrivateGetTile(UO.GetX(), UO.GetY(), 0, 0, 65535);
if (Truth(tile != "0x0000"))
{
UO.Print(tile);
}
return null;
}
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。
UO.PrivateGetTile(x, y, unknown, minTile, maxTile) — UO.PrivateGetTile(Integer,Integer,Integer,Integer,Integer)
參數: x (Integer), y (Integer), unknown (Integer), minTile (Integer), maxTile (Integer)
結果: string / String.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.PrivateGetTile. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.PrivateGetTile:bridge.PrivateGetTile(x, y, unknown, minTile, maxTile).
內部實作程式碼,不能作為獨立腳本執行。
public string PrivateGetTile(int x, int y, int unknown, int minTile, int maxTile)
=> bridge.PrivateGetTile(x, y, unknown, minTile, maxTile);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.ReadStaticsXY(object? x, object? y, object? worldNum);讀取單元中目前卡片的平面靜態記錄。
-
x— 單元格的 int 世界座標。 -
y— 單元格的 int 世界座標。 -
worldNum— int 當前卡號。另一個地圖未載入並給出一個空數組。
數組int,三元組[graphic,Z,hue,graphic,Z,hue,...]。無映射/不匹配 WorldNum 是一個空數組。
- Bridge.GetStaticTiles 包括單元格 TNext 鏈中的 Static、Multi 和 Item;土地不包括在內。這不是 Pascal 記錄或嵌套三元素記錄的陣列。
- 記錄數 = ArrayLength(結果)/3。只讀取下載的資料;沒有向伺服器發送未知幾何圖形的請求。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
object? result = UO.ReadStaticsXY(UO.GetX(), UO.GetY(), UO.WorldNum());
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));參數與執行流程:
- 讀取單元中目前卡片的平面靜態記錄。
var records = UO.ReadStaticsXY(UO.GetX(), UO.GetY(), UO.WorldNum());
UO.Print(UO.GetArrayLength(records) / 3);參數與執行流程:
- Bridge.GetStaticTiles 包括單元格 TNext 鏈中的 Static、Multi 和 Item;土地不包括在內。這不是 Pascal 記錄或嵌套三元素記錄的陣列。
return RunScenario();
object? RunScenario()
{
var records = UO.ReadStaticsXY(UO.GetX(), UO.GetY(), UO.WorldNum());
if (Truth(UO.GetArrayLength(records) >= 3))
{
UO.Print(records[0]);
UO.Print(records[1]);
UO.Print(records[2]);
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;參數與執行流程:
- 記錄數 = ArrayLength(結果)/3。只讀取下載的資料;沒有向伺服器發送未知幾何圖形的請求。
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 map = UO.WorldNum();
var records = UO.ReadStaticsXY(UO.GetX(), UO.GetY(), map);
var i = 0;
while (Truth(i + 2 < UO.GetArrayLength(records)))
{
UO.Print(Convert.ToString(records[i]) + " " + Convert.ToString(records[i + 1]) + " " + Convert.ToString(records[i + 2]));
i = i + 3;
}
return null;
}
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), worldNum (Any)
結果: dynamic / Any.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetStaticTiles:bridge.GetStaticTiles(Arg(0), Arg(1), Arg(2)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
內部實作程式碼,不能作為獨立腳本執行。
case "readstaticsxy":
return new InjectionValue(bridge.GetStaticTiles(Arg(0), Arg(1), Arg(2)).Select(value => new InjectionValue(value)).ToArray());Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.RemoveUserStatic(object? id);刪除ID處的用戶靜態記錄。
-
id- int ID,回AddUserStatic;不是graphic/type。
數字標誌 int:1 - 記錄已刪除,0 - ID 遺失。
- 第一個狀態。 UserStatics。刪除;僅當刪除成功時,才會呼叫bridge.RemoveUserStatic(id)。刪除不適用於標準靜態地圖檔。
- 本機自訂幾何體將從目前狀態中刪除。伺服器物品和其他ID物品不會改變。
- 在常規用戶端主機中,此狀態資料取自GetPersistentState管理器,並且對於同一世界/設定檔的腳本/聊天/巨集是通用的,且不屬於一個腳本。另一個進程或明顯獨立的InjectionRuntimeState具有不同的狀態。載入/清除設定檔可以取代它;已儲存的serial仍然會根據載入的世界進行檢查。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
object? result = UO.RemoveUserStatic(1);
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));參數與執行流程:
- 刪除ID處的用戶靜態記錄。
UO.Print(UO.RemoveUserStatic(1));參數與執行流程:
- 第一個狀態。 UserStatics。刪除;僅當刪除成功時,才會呼叫bridge.RemoveUserStatic(id)。刪除不適用於標準靜態地圖檔。
return RunScenario();
object? RunScenario()
{
if (Truth(UO.UserStaticExists(1)))
{
UO.Print(UO.RemoveUserStatic(1));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;參數與執行流程:
- 本機自訂幾何體將從目前狀態中刪除。伺服器物品和其他ID物品不會改變。
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 records = UO.GetUserStatics();
if (Truth(UO.GetArrayLength(records) > 0))
{
var id = records[0][0];
UO.Print(UO.RemoveUserStatic(id));
UO.Print(UO.UserStaticExists(id));
}
return null;
}
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。
參數: id (Any)
結果: dynamic / Any.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.RemoveUserStatic:bridge.RemoveUserStatic(id).
內部實作程式碼,不能作為獨立腳本執行。
case "removeuserstatic":
{
int id = Arg(0);
bool removed = state.UserStatics.Remove(id);
if (removed) bridge.RemoveUserStatic(id);
return new InjectionValue(removed ? 1 : 0);
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.UserStaticExists(object? id);檢查使用者靜態記錄中是否存在ID。
-
id— int ID AddUserStatic;不是graphic/type,也不是serial。
數字標誌int:1 - 鑰匙處於狀態。 UserStatics、0 - 缺席。
- 運行時字典中僅檢查ContainsKey。不檢查地圖上物件的可見性、橋物件的成功創建以及伺服器世界。
- 讀取目前本地狀態。沒有軟體包、目標或自動更新;個別讀取可能會看到不同的狀態。
- 在常規用戶端主機中,此狀態資料取自GetPersistentState管理器,並且對於同一世界/設定檔的腳本/聊天/巨集是通用的,且不屬於一個腳本。另一個進程或明顯獨立的InjectionRuntimeState具有不同的狀態。載入/清除設定檔可以取代它;已儲存的serial仍然會根據載入的世界進行檢查。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
var result = UO.UserStaticExists(1);
UO.Print("UserStaticExists: " + Convert.ToString(result));參數與執行流程:
- 檢查使用者靜態記錄中是否存在ID。
UO.Print(UO.UserStaticExists(1));參數與執行流程:
- 運行時字典中僅檢查ContainsKey。不檢查地圖上物件的可見性、橋物件的成功創建以及伺服器世界。
return RunScenario();
object? RunScenario()
{
if (Truth(UO.UserStaticExists(1)))
{
UO.Print(UO.GetUserStatic(1));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;參數與執行流程:
- 讀取目前本地狀態。沒有軟體包、目標或自動更新;個別讀取可能會看到不同的狀態。
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 records = UO.GetUserStatics();
if (Truth(UO.GetArrayLength(records) > 0))
{
UO.Print(UO.UserStaticExists(records[0][0]));
}
return null;
}
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。
參數: id (Any)
結果: int / Integer.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.UserStaticExists. -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(id).
內部實作程式碼,不能作為獨立腳本執行。
public int UserStaticExists(InjectionValue id)
=> state.UserStatics.ContainsKey(NumberConversions.ToInt(id)) ? 1 : 0;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.WorldNum();從客戶端型號讀取目前卡號。
沒有參數。
int — 目前客戶端卡的索引,通常 0=Felucca, 1=Trammel, 2=Ilshenar, 3=Malas, 4=Tokuno, 5=泰爾穆爾。用戶伺服器可以使用不同的卡片組。 0 ——一張完整的地圖,沒有錯誤的跡象。
- 讀取已經接收到的本地資料。該請求不會開啟狀態,也不會強制伺服器發送更新。死亡、地圖轉換或物件刪除後,兩次呼叫之間的值可能會改變。
- C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
object? result = UO.WorldNum();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));參數與執行流程:
- 不帶參數的呼叫指的是 self。當前卡號被儲存在值中。
- Convert.ToString 轉換要輸出的數字,不改變結果的意義。
var value = UO.WorldNum();
UO.Print("WorldNum: " + Convert.ToString(value));參數與執行流程:
- 該值在沒有任何參數的情況下被讀取一次。當前卡號用於顯示的計算或條件。
- 數字閾值是腳本條件的範例,而不是新的客戶端限制。此欄位儲存上述伺服器單元和限制。
return RunScenario();
object? RunScenario()
{
var value = UO.WorldNum();
var land = UO.GetLandscapeTile(UO.GetX(), UO.GetY(), value);
UO.Print("Land record length: " + Convert.ToString(ArrayLength(land)));
return null;
}
int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;參數與執行流程:
- 兩個不帶參數的呼叫都會讀取它們的目前值。 UO.Wait(1000) 在兩次拍攝之間提供以毫秒為單位的暫停。
- 比較的變化就是目前卡的號碼。榜樣不會改變世界上的任何事情,也不會無止盡地等待。這一秒鐘內的事件可能會被錯過。
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
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;
}
async public Task<object?> RunScenarioAsync()
{
var before = UO.WorldNum();
await Delay(1000);
var after = UO.WorldNum();
if (Truth(before != after))
{
UO.Print("Before: " + Convert.ToString(before) + "; after: " + Convert.ToString(after));
}
return null;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
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.WorldNumber:bridge.WorldNumber.
內部實作程式碼,不能作為獨立腳本執行。
case "worldnum": return new InjectionValue(bridge.WorldNumber);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.X();從客戶端模型讀取 X 座標。
沒有參數。
int 是載入物件的 X 座標。對於角色/世界物品,這是世界單元格;對於袋子中的物品,這是容器內的座標。未知物件給出 0,但 X=0 也是有效的。
- 讀取已經接收到的本地資料。該請求不會開啟狀態,也不會強制伺服器發送更新。死亡、地圖轉換或物件刪除後,兩次呼叫之間的值可能會改變。
- C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
var result = UO.X();
UO.Print("X: " + Convert.ToString(result));參數與執行流程:
- 不帶參數的呼叫指的是 self。 x 座標儲存在值中。
- Convert.ToString 轉換要輸出的數字,不改變結果的意義。
var value = UO.X();
UO.Print("X: " + Convert.ToString(value));參數與執行流程:
- 該值在沒有任何參數的情況下被讀取一次。 x 座標用於所示的計算或條件。
- 數字閾值是腳本條件的範例,而不是新的客戶端限制。此欄位儲存上述伺服器單元和限制。
return RunScenario();
object? RunScenario()
{
var value = UO.X();
UO.Print("Two tiles east would be X=" + Convert.ToString(value + 2));
return null;
}參數與執行流程:
- 兩個不帶參數的呼叫都會讀取它們的目前值。 UO.Wait(1000) 在兩次拍攝之間提供以毫秒為單位的暫停。
- 比較變化:X 座標。這個例子不會改變世界上的任何事情,也不會無限期地等待。這一秒鐘內的事件可能會被錯過。
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
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;
}
async public Task<object?> RunScenarioAsync()
{
var before = UO.X();
await Delay(1000);
var after = UO.X();
if (Truth(before != after))
{
UO.Print("Before: " + Convert.ToString(before) + "; after: " + Convert.ToString(after));
}
return null;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
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。
參數: 沒有參數。
結果: int / Integer.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases [X]. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetX:bridge.GetX(bridge.Self). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Self:bridge.Self.
呼叫時執行已儲存的處理函式 delegate。註冊方法在建立 API 時建立此 delegate。
內部實作程式碼,不能作為獨立腳本執行。
() => bridge.GetX(bridge.Self)建立 API: 這些函式負責註冊 API,不會在每次命令呼叫時重新執行。
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.Y();從客戶端模型讀取 Y 座標。
沒有參數。
int — 載入物件的 Y 座標。對於角色/世界物品,這是世界單元,對於袋子中的物品,這是容器內的位置。未知物體給出0。
- 讀取已經接收到的本地資料。該請求不會開啟狀態,也不會強制伺服器發送更新。死亡、地圖轉換或物件刪除後,兩次呼叫之間的值可能會改變。
- C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
var result = UO.Y();
UO.Print("Y: " + Convert.ToString(result));參數與執行流程:
- 不帶參數的呼叫指的是 self。 y 座標儲存在值中。
- Convert.ToString 轉換要輸出的數字,不改變結果的意義。
var value = UO.Y();
UO.Print("Y: " + Convert.ToString(value));參數與執行流程:
- 該值在沒有任何參數的情況下被讀取一次。 y 座標用於所示的計算或條件。
- 數字閾值是腳本條件的範例,而不是新的客戶端限制。此欄位儲存上述伺服器單元和限制。
return RunScenario();
object? RunScenario()
{
var value = UO.Y();
UO.Print("Two tiles south would be Y=" + Convert.ToString(value + 2));
return null;
}參數與執行流程:
- 兩個不帶參數的呼叫都會讀取它們的目前值。 UO.Wait(1000) 在兩次拍攝之間提供以毫秒為單位的暫停。
- 比較變化:Y 座標。這個例子不會改變世界上的任何事情,也不會無限期地等待。這一秒鐘內的事件可能會被錯過。
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
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;
}
async public Task<object?> RunScenarioAsync()
{
var before = UO.Y();
await Delay(1000);
var after = UO.Y();
if (Truth(before != after))
{
UO.Print("Before: " + Convert.ToString(before) + "; after: " + Convert.ToString(after));
}
return null;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
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。
參數: 沒有參數。
結果: int / Integer.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases [Y]. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetY:bridge.GetY(bridge.Self). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Self:bridge.Self.
呼叫時執行已儲存的處理函式 delegate。註冊方法在建立 API 時建立此 delegate。
內部實作程式碼,不能作為獨立腳本執行。
() => bridge.GetY(bridge.Self)建立 API: 這些函式負責註冊 API,不會在每次命令呼叫時重新執行。
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.Z();從客戶端模型讀取 Z 高度。
沒有參數。
int 是对象的高度(以世界单位表示),通常为 -128..127。這不是樓層數或設備層。 0可能是实际高度,也可能是没有物体的结果。
- 讀取已經接收到的本地資料。該請求不會開啟狀態,也不會強制伺服器發送更新。死亡、地圖轉換或物件刪除後,兩次呼叫之間的值可能會改變。
- C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
var result = UO.Z();
UO.Print("Z: " + Convert.ToString(result));參數與執行流程:
- 不帶參數的呼叫指的是 self。 z 高度儲存在值中。
- Convert.ToString 轉換要輸出的數字,不改變結果的意義。
var value = UO.Z();
UO.Print("Z: " + Convert.ToString(value));參數與執行流程:
- 該值在沒有任何參數的情況下被讀取一次。 z 高度用於所示的計算或條件。
- 數字閾值是腳本條件的範例,而不是新的客戶端限制。此欄位儲存上述伺服器單元和限制。
return RunScenario();
object? RunScenario()
{
var value = UO.Z();
var land = UO.GetLandscapeTile(UO.GetX(), UO.GetY(), UO.WorldNum());
if (Truth(ArrayLength(land) >= 3))
{
UO.Print("Height above land: " + Convert.ToString(value - land[1]));
}
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;參數與執行流程:
- 兩個不帶參數的呼叫都會讀取它們的目前值。 UO.Wait(1000) 在兩次拍攝之間提供以毫秒為單位的暫停。
- 比較的變化是高度 Z。這個例子不會改變世界上的任何東西,也不會無限期地等待。這一秒鐘內的事件可能會被錯過。
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
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;
}
async public Task<object?> RunScenarioAsync()
{
var before = UO.Z();
await Delay(1000);
var after = UO.Z();
if (Truth(before != after))
{
UO.Print("Before: " + Convert.ToString(before) + "; after: " + Convert.ToString(after));
}
return null;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
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。
參數: 沒有參數。
結果: int / Integer.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases [Z]. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetZ:bridge.GetZ(bridge.Self). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Self:bridge.Self.
呼叫時執行已儲存的處理函式 delegate。註冊方法在建立 API 時建立此 delegate。
內部實作程式碼,不能作為獨立腳本執行。
() => bridge.GetZ(bridge.Self)建立 API: 這些函式負責註冊 API,不會在每次命令呼叫時重新執行。