ZH TW UO Topic character Part 4 - 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.MaxStamina();從本地模型讀取最大耐久性。
沒有參數。
int 是StaminaMax 欄位的值,而不是百分比或bool。 0 可以是實值或缺失資料的指示。零最大值不能用作除數。對別人的mobile來說,其意義可能是未知的。 HP/HitsMax 可能包含相對伺服器規模而不是精確點。 HP=0並不能證明死亡;為此有Dead/IsDead。
- 該命令不會開啟狀態,也不會請求伺服器更新。客户端只读取已经加载的数据。不改变特性,也不发送数据包。
- 結果是單獨閱讀。从Exists到下一个挑战,世界可能会发生变化;多个查询不形成原子快照。
- 讀取物件時,World.Get 會拒絕缺少的或 IsDestroyed 並產生 0。 HP/HitsMax從實體中讀取,包括具有這些欄位的項目; Mana/Stamina - 僅適用於行動裝置。沒有爭論,請閱讀self。不帶參數的同名變體不一定有ID的變體:請參閱簽名。
- 對於遺失或損壞的 Player,不帶參數的讀取也會回傳 0。這適用於直接 Mana/Stamina 及其最大值,而不僅僅是透過 World.Get 的表格。存在的死亡角色可以保留價值。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
var result = UO.MaxStamina();
UO.Print("MaxStamina: " + Convert.ToString(result));參數與執行流程:
- 不帶參數的呼叫讀取為self。 value 儲存一個數字,Convert.ToString 僅將其轉換為訊息。
var value = UO.MaxStamina();
UO.Print("MaxStamina: " + Convert.ToString(value));參數與執行流程:
- 顯示該欄位應用的閾值或計算。條件中的數字是範例設置,而不是伺服器限制。在除以最大值之前,檢查其正值。
return RunScenario();
object? RunScenario()
{
var value = UO.MaxStamina();
if (Truth(value > 0))
{
UO.Print("Stamina percent: " + Convert.ToString(UO.Stamina() * 100 / value));
}
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 的形式。不含參數的ReadValue讀取self;兩個呼叫由 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 = ReadValue();
await Delay(1000);
var after = ReadValue();
UO.Print("Before: " + Convert.ToString(before) + "; after: " + Convert.ToString(after));
return null;
}
dynamic ReadValue()
{
return UO.MaxStamina();
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
}C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。
參數: 沒有參數。
結果: int / Integer.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases [MaxStamina]. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.MaxStamina:bridge.MaxStamina.
呼叫時執行已儲存的處理函式 delegate。註冊方法在建立 API 時建立此 delegate。
內部實作程式碼,不能作為獨立腳本執行。
() => bridge.MaxStamina建立 API: 這些函式負責註冊 API,不會在每次命令呼叫時重新執行。
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.MaxWeight();讀取角色的狀態計數器:最大重量(以石頭為單位)。
沒有參數。
int — 石頭的最大重量,客戶端模型中的0..65535。 0 可以是真實值、無資料或遺失/損壞的播放器。這是一個數量,不是bool、ID或type:1表示一個單位,而不是成功。該指令不會迭代對象,也不傳回數組。
- 此指令不帶參數。使用上面的確切簽名。
- 如果目前Player存在且尚未被銷毀,則在遊戲執行緒上讀取需要Player.WeightMax;否則0。設備不排序,獎金不重新計算,狀態不要求,並且沒有等待更新。存在的鬼魂不等於被摧毀的玩家。
- MaxWeight 讀取快取 WeightMax。自身狀況 type >= 5 將伺服器限制設為 UInt16,即使它等於 0。舊的擴展狀態在接收時計算一次:協議 UO >= 5.0.0a — 7 * floor(Strength / 2) + 40;較舊的一個是轉換。ToString * 4 + 25。結果儲存為UInt16;極值以模包裹 65536. Strength=101 相應地給出 390 或者 429。對轉換進行單獨更改。ToString getter 本身不會重新計算限制。
- CharacterStatus 在更新之前檢查所需的主體。 Weight 可用其自己的擴展狀態,插槽 - 與 type 3, Luck - 和 type 4, 伺服器 WeightMax - 和 type 5。沒有可選計數器的緊湊/舊包會留下其先前的快取。新玩家從頭開始;該通話並未證明收到新狀態。
- 這些函式負責註冊 API,不會在每次命令呼叫時重新執行。 C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。
- 每次呼叫都會重新讀取本地資料。變數儲存快照;各個讀取可能會收到不同的伺服器更新。非零結果不會測試連線。零可以是一個值,也可以沒有資料。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
var result = UO.MaxWeight();
UO.Print("MaxWeight: " + Convert.ToString(result));參數與執行流程:
- value 儲存對其自身字元的一次無參數呼叫; Convert.ToString 格式化日誌中的數字而不改變其意義。
var value = UO.MaxWeight();
UO.Print("WeightMax: " + Convert.ToString(value));參數與執行流程:
- UO.Wait(500)前後間隔500毫秒。差值可以是正數、零或負數;暫時更新和角色變更可能會被跳過。暫停就是一個例子。
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var before = UO.MaxWeight();
await Delay(500);
var after = UO.MaxWeight();
var difference = after - before;
UO.Print("Counter change: " + Convert.ToString(difference));
return null;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));參數與執行流程:
- CanCarry(額外)獲得額外的石頭重量; 10是一個例子,不是堆疊的數量。拒絕負額外、無玩家或最大值 <= 0,讀取當前重量和限制,然後按額外 <= 最大值 - 目前返回 bool: true 或 false。減法避免了當前+額外的溢出。過載時,即使額外=0,結果也是false。這是本地評估,不是伺服器解析;讀取不是原子的,並且零權重可能是未知的。
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()
{
if (Truth(Truth(CanCarry(10)) == true))
{
UO.Print("Local check passed");
}
else
{
UO.Print("Local check failed or data unavailable");
}
return null;
}
dynamic CanCarry(dynamic extra)
{
if (Truth(extra < 0) || Truth(UO.Self() == 0))
{
return false;
}
var current = UO.Weight();
var maximum = UO.MaxWeight();
if (Truth(maximum <= 0))
{
return false;
}
return extra <= maximum - current;
}
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.MaxWeight. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.MaxWeight:bridge.MaxWeight.
內部實作程式碼,不能作為獨立腳本執行。
public int MaxWeight() => bridge.MaxWeight;int UO.Mount();
int UO.Mount(object? mount);Mount 與 Dismount 直接傳送使用物件請求,不需要手動雙擊,也不會套用戰鬥模式攻擊行為。int 是 Mount 層目前物品的 serial,並非成功旗標。伺服器回覆是非同步的:Mount 可能仍回傳 0,Dismount 可能回傳移除前的 serial。請在回覆後檢查 ObjAtLayer("Mount")。
-
mount— 坐騎序號;省略時使用最後目標。
每個程式碼區塊都是完整的獨立 .csx。請替換範例 serial、type 與座標;參數順序及 C# 具名參數依照簽章。
#mount 0x00001234
#mount
每個程式碼區塊都是完整的獨立 .csx。請替換範例 serial、type 與座標;參數順序及 C# 具名參數依照簽章。
int mountLayerSerial = UO.Mount(0x00001234);
UO.Print(UO.Int2Hex(mountLayerSerial));int currentSerial = UO.Mount();
UO.Print(UO.Int2Hex(currentSerial));UO.Mount(0x00001234);
for (int attempt = 0; attempt < 40; attempt++)
{
var serial = UO.ObjAtLayer("Mount");
if (Convert.ToString(serial) != "0" && Convert.ToString(serial) != "0x00000000")
{
UO.Print(Convert.ToString(serial));
break;
}
await WaitAsync(50);
}new CommandSample().Execute(UO);
sealed class CommandSample
{
public void Execute(global::ClassicUO.CSharp.CSharpGameApi api)
{
int mountLayerSerial = api.Mount(0x00001234);
api.Print(api.Int2Hex(mountLayerSerial));
}
}CSharpGameApi.Mount
-> CSharpScriptGlobals
-> InjectionScript.Runtime.InjectionApiUO.Mount
ClassicUOInjectionApiBridge -> NativeMountController.Request
-> OutgoingPackets.Send_UseObjectRequest (0x06)
-> MountedLayerSerialUnsafe -> Player.FindItemByLayer(Layer.Mount)
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.ObjAtLayer(object? layer);尋找您自己角色裝備的指定層上的物品。
-
layer— 一個必需參數:圖層編號 1..29 或下面列表中的字串名稱。號碼0和名字無效給0。名稱的大小寫和尾隨空格將被忽略。未知的字串名稱會導致腳本錯誤;數字字串「1」不會替換數字1。
對於該項目,數字形式傳回 int - serial,對於空/無效層返回 0。如果找到該項目,則字串形式傳回「0x40001001」形式的string,否則傳回int0。這是商品的 ID,而非層數、graphic/type 或數量。元資料object?字串形式反映了兩種可能的結果類型。
- 讀取本機用戶端模型;無需向伺服器發出請求,無需等待或移動。
- 結果指的是閱讀的那一刻。在UO.Wait或其他操作之後,物件及其標誌可能會發生變化。
- 檢查設備資料self。團隊不會打開袋子、穿上物品或發送檢查請求。
- 1..29 以外的數字給出0,無需模轉換256;例如,257無法選擇右手。
- 所有支援的數字圖層和字串名稱:
- 1 OneHanded/Rhand/RightHand; 2 TwoHanded/Lhand/LeftHand; 3 Shoes; 4 Pants; 5 Shirt; 6 Helmet/Hat; 7 Gloves; 8 Ring; 9 Talisman; 10 Necklace/Neck.
- 11 Hair; 12 Waist; 13 Torso; 14 Bracelet/Brace; 15 Face; 16 Beard; 17 Tunic; 18 Earrings/Ear; 19 Arms; 20 Cloak.
- 21 Backpack/Bpack/BackpackLayer; 22 Robe; 23 Skirt; 24 Legs; 25 Mount; 26 ShopBuyRestock/Rstk; 27 ShopBuy/NRstk; 28 ShopSell/Sell; 29 Bank.
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
object? item = UO.ObjAtLayer("Rhand");
if (item is string serial) UO.Print("Equipped serial: " + serial);
else UO.Print("The layer is empty");參數與執行流程:
- Rhand 選擇圖層1。如果成功,hand是一個十六進位字串;如果不存在,則編號0。
- Convert.ToString 允許您輸出兩種可能的類型。結果不能作為武器的graphic。
object? hand = UO.ObjAtLayer("Rhand");
if (hand is string serial)
{
UO.Print("Right hand serial: " + serial);
}
else
{
UO.Print("Right hand is empty or unavailable");
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;參數與執行流程:
- 數字2選擇TwoHanded。此形式始終回傳int。
- Exists 檢查該項目是否可用於讀取其屬性。 GetGraphic 回傳一個單獨的type。
return RunScenario();
object? RunScenario()
{
var item = UO.ObjAtLayer(2);
if (Truth(UO.Exists(item)))
{
UO.Print("Two-handed layer serial: " + Convert.ToString(item));
UO.Print("Graphic: " + UO.GetGraphic(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;參數與執行流程:
- 21—層Backpack;在裝載設備之前,結果0是可能的。
- 257 在列表之外,並且始終給出 0。這不是 1 層的替代名稱。
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 bag = UO.ObjAtLayer(21);
var invalid = UO.ObjAtLayer(257);
UO.Print("Backpack serial: " + Convert.ToString(bag));
UO.Print("Invalid layer: " + Convert.ToString(invalid));
return null;
}
}C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。
參數: layer (Any/String)
結果: dynamic / Integer.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.GetObject:GetObject(ObjAtLayer(Text(0))). -
InjectionScript.Runtime.InjectionApiUO.ObjAtLayer:ObjAtLayer(Text(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(0). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.ObjAtLayer:bridge.ObjAtLayer(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
內部實作程式碼,不能作為獨立腳本執行。
case "objatlayer":
return new InjectionValue(arguments[0].Kind == InjectionValueKind.String
? GetObject(ObjAtLayer(Text(0))) : bridge.ObjAtLayer(Arg(0)));參數: layer (Any/String)
結果: dynamic / Any.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ObjAtLayer. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.ObjAtLayer:bridge.ObjAtLayer(ConvertLayer(layer)). -
InjectionScript.Runtime.InjectionApiUO.ConvertLayer:ConvertLayer(layer).
內部實作程式碼,不能作為獨立腳本執行。
public InjectionValue ObjAtLayer(string layer)
{
var id = bridge.ObjAtLayer(ConvertLayer(layer));
if (id == 0)
return InjectionValue.Zero;
return new InjectionValue("0x" + id.ToString("X8"));
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.ObjAtLayerEx(object? layerType, object? playerID);讀取指定層中指定載入角色的項目/容器。
-
layerType— 層的編號1..29。接受整數或數字字串,例如 26 或“0x1A”。字串名稱 Rhand/ShopBuyRestock 和裸層常數此處不轉換為數字。使用一個號碼。 -
playerID— 字元序列/mobile,數字、十六進位字串或可解析的物件名稱,例如「self」/「lasttarget」。物品的圖形/type或容器本身的ID不合適。
int:圖層上的項目/容器的serial,或0(如果圖層為空/未知、編號無效或沒有載入行動裝置)。這不是 bool 或層數。
- 讀取是本地的,無目標、無購買、無開箱、無網路請求。
- 檢查範圍 1..29。轉換不合適的字串參數可能會導致錯誤;不應傳遞任意圖層名稱來取代數字。
- 單獨的UO.ObjAtLayer可用於具有字串圖層名稱的自訂字元。不要將圖層與worldZ、靜態索引或阿甘座標混淆。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
var result = UO.ObjAtLayerEx(26, UO.GetSerial("lasttarget"));
UO.Print("ObjAtLayerEx: " + Convert.ToString(result));參數與執行流程:
- LayerType=26;玩家ID=供應商;商店 — serial 貨櫃。對於GetContent,傳遞的是店鋪,而不是層數。
- 此數組的索引從0到長度減去1。每個元素都是serial。空數組意味著沒有立即載入元素;購買未完成。
var vendor = UO.GetSerial("lasttarget");
if (Truth(vendor == "0x00000000"))
{
UO.Print("Vendor not selected");
return null;
}
var shop = UO.ObjAtLayerEx(26, vendor);
if (Truth(shop == 0))
{
UO.Print("ShopBuyRestock container is not loaded");
return null;
}
UO.Print("Shop container ID: " + Convert.ToString(shop));
var items = UO.GetContent(shop);
var i = 0;
while (Truth(i < ArrayLength(items)))
{
var item = items[i];
UO.Print(UO.GetName(item) + " | ID: " + Convert.ToString(item));
UO.Print("Graphic: " + Convert.ToString(UO.GetType(item)));
i = i + 1;
}
UO.Print("Loaded entries: " + Convert.ToString(ArrayLength(items)));
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;參數與執行流程:
- wantedType是graphic,item是單一item的ID。堆疊計數記錄/堆疊;單位將其中的數字相加。
- 這是已收到數量的讀數,而不是未來購買所保證的餘額。這裡沒有指定價格。
return RunScenario();
object? RunScenario()
{
var vendor = UO.GetSerial("lasttarget");
if (Truth(vendor == "0x00000000"))
{
UO.Print("Vendor not selected");
return null;
}
var shop = UO.ObjAtLayerEx(26, vendor);
if (Truth(shop == 0))
{
UO.Print("Shop layer is not loaded");
return null;
}
var wantedType = 0x1766;
var stacks = 0;
var units = 0;
var items = UO.GetContent(shop);
var i = 0;
while (Truth(i < ArrayLength(items)))
{
var item = items[i];
if (Truth(UO.GetType(item) == wantedType))
{
stacks = stacks + 1;
units = units + UO.GetQuantity(item);
}
i = i + 1;
}
UO.Print("Stacks: " + Convert.ToString(stacks) + " | Units: " + Convert.ToString(units));
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;參數與執行流程:
- ShowVendorLayer 被完整聲明。供應商 - ID NPC、layerNumber - 26/27/28,標題 - 僅簽名。
- 客戶端可能不知道容器。 0 在 GetContent 之前檢查:明確的 GetContent(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 vendor = UO.GetSerial("lasttarget");
if (Truth(vendor == "0x00000000"))
{
UO.Print("Vendor not selected");
return null;
}
ShowVendorLayer(vendor, 26, "ShopBuyRestock / Rstk");
ShowVendorLayer(vendor, 27, "ShopBuy / NRstk");
ShowVendorLayer(vendor, 28, "ShopSell / Sell");
return null;
}
void ShowVendorLayer(dynamic vendor, dynamic layerNumber, dynamic caption)
{
var container = UO.ObjAtLayerEx(layerNumber, vendor);
if (Truth(container == 0))
{
UO.Print(caption + ": not loaded");
return;
}
var items = UO.GetContent(container);
UO.Print(caption + " | Container ID: " + Convert.ToString(container));
UO.Print("Loaded entries: " + Convert.ToString(ArrayLength(items)));
}
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。
參數: layerType (Any), playerID (Any)
結果: int / Integer.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.ObjAtLayerEx:bridge.ObjAtLayerEx(Arg(0), Arg(1)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
內部實作程式碼,不能作為獨立腳本執行。
case "objatlayerex": return new InjectionValue(bridge.ObjAtLayerEx(Arg(0), Arg(1)));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.Paralyzed();
int UO.Paralyzed(object? value);檢查客戶端已知的角色麻痺標誌。
-
value- 可選 serial/ID mobile:數字、十六進位字串、self、lasttarget 或其他標準物件名稱或 AddObject 名稱。這不是graphic/type。如果沒有參數,則使用 self。未知名稱在0中解析;目標未開啟。
數字標誌int:1(滿足條件)-加載mobile具有標誌IsParalyzed;0(不滿足條件)- 無標誌、mobile 未知、已刪除或該物件為項目。這不是癱瘓時間,並且不保證能夠以0的結果移動。
- 使用 Paralyzed 檢查癱瘓標誌。變體 Is/Get、GetParalisa、Frozen 和 GetLocked 讀取相同的標誌。
- 該命令僅讀取本地資料。它不會應用或消除癱瘓,不會等待其結束,也不會向伺服器發送更新請求。
- 此指令的結果是int型別:使用 if (value != 0) 或 if (value == 0)。不允許與true/false以及C#中的if(值)直接比較。該值保留標誌的含義,而不是數量或ID。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
var result = UO.Paralyzed();
UO.Print("Paralyzed: " + Convert.ToString(result));參數與執行流程:
- 空括號選擇 self。 state 儲存標誌的一個快照; true — 數值常數 1。
- false 的結果並不排除因牆壁、缺乏耐力或其他原因而停止。
var state = UO.Paralyzed();
if (Truth(Truth(state) == true))
{
UO.Print("Paralysis flag is set");
}
else
{
UO.Print("Paralysis flag is absent or unavailable");
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;參數與執行流程:
- target 儲存最後一個目標的十六進位字串serial。 IsNpc 檢查是否是已載入的mobile,包括玩家。
- 帶參數的命令讀取目標。她沒有選擇新角色或改變lasttarget。
return RunScenario();
object? RunScenario()
{
var target = UO.GetSerial("lasttarget");
if (Truth(UO.IsNPC(target)))
{
var state = UO.Paralyzed(target);
UO.Print("Selected mobile paralysis 1/0: " + Convert.ToString(state));
}
else
{
UO.Print("No loaded mobile selected");
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;參數與執行流程:
- 暫停時間不超過 10 100 毫秒。每次不帶參數的呼叫都會再次讀取 self 。
- 循環之後,單獨檢查 self 是否存在。這是大約一秒鐘的觀察加上命令的執行,並不能保證消除癱瘓。
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 attempts = 0;
while (Truth(Truth(UO.Paralyzed()) == true) && Truth(attempts < 10))
{
await Delay(100);
attempts = attempts + 1;
}
if (Truth(UO.IsNPC("self")))
{
if (Truth(Truth(UO.Paralyzed()) == false))
{
UO.Print("Paralysis flag is clear");
}
else
{
UO.Print("Still paralyzed");
}
}
else
{
UO.Print("Self is unavailable");
}
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.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetLocked:bridge.GetLocked(bridge.Self). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Self:bridge.Self.
內部實作程式碼,不能作為獨立腳本執行。
case "paralyzed": return new InjectionValue(bridge.GetLocked(bridge.Self));參數: value (Any)
結果: int / Integer.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases [Paralyzed]. -
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetLocked:bridge.GetLocked(serial). -
InjectionScript.Runtime.InjectionApiUO.GetObject:GetObject(value).
呼叫時執行已儲存的處理函式 delegate。註冊方法在建立 API 時建立此 delegate。
內部實作程式碼,不能作為獨立腳本執行。
serial => bridge.GetLocked(serial)內部實作程式碼,不能作為獨立腳本執行。
value => getter(GetObject(value))建立 API: 這些函式負責註冊 API,不會在每次命令呼叫時重新執行。
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.PhysicalResist();讀取目前角色的抵抗力場:物理護甲/抵抗力。
沒有參數。
int 是簽章狀態值,客戶端模型中的 -32768..32767。負值被保留。 0可以是真正的抵抗,缺乏數據或失踪/被毀壞的玩家;對於未知選擇器,GetResist 還給出 0。這不是bool、ID、技能或阻力極限。 1表示一分,不是成功。
- 此指令不帶參數。使用上面的確切簽名。
- 如果目前Player存在且尚未被銷毀,則在遊戲執行緒上讀取需要Player.PhysicalResistance;否則0。設備不排序,獎金不重新計算,狀態不要求,並且沒有等待更新。存在的鬼魂不等於被摧毀的玩家。
- PhysicalResistance - 伺服器護甲/狀態列:經典伺服器可以傳送護甲等級,有抗性的規則可以傳送物理抗性。 API 不會從一種轉換為另一種,也不會計算傷害減免的百分比。 Armor 和實體別名讀取相同的欄位。
- CharacterStatus在更改名字、健康狀況和自身特徵之前檢查所需的身體,然後將每個抵抗詞翻譯成帶符號的Int16。修剪後的強制主體不會改變先前的資料。可選尾部type6保留相同的規則;電阻指令不會從中讀取最大限制。
- 每次呼叫都會重新讀取本地資料。變數儲存快照;各個讀取可能會收到不同的伺服器更新。非零結果不會測試連線。零可以是一個值,也可以沒有資料。
- 這些函式負責註冊 API,不會在每次命令呼叫時重新執行。 C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
var result = UO.PhysicalResist();
UO.Print("PhysicalResist: " + Convert.ToString(result));參數與執行流程:
- value 儲存一次呼叫的結果。 Convert.ToString 格式化日誌的數字。沒有任何爭論:你可以讀懂自己的個性。
var value = UO.PhysicalResist();
UO.Print("PhysicalResistance: " + Convert.ToString(value));參數與執行流程:
- 前後有UO.Wait(500)毫秒;差異可以是負數。可能會錯過臨時更新。暫停指的是範例,而不是延遲API。
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var before = UO.PhysicalResist();
await Delay(500);
var after = UO.PhysicalResist();
var difference = after - before;
UO.Print("Resistance change: " + Convert.ToString(difference));
return null;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));參數與執行流程:
- 最小值 =50 是要求的範例,而不是客戶端限制。 ResistanceAtLeast 拒絕遺失的玩家,讀取一個值並回傳 bool: true 或 false 如果值 >= 最小值。电阻本身不是bool。該函數的完整聲明如下。
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()
{
if (Truth(Truth(ResistanceAtLeast(50)) == true))
{
UO.Print("Local resistance requirement met");
}
else
{
UO.Print("Requirement not met or no player");
}
return null;
}
dynamic ResistanceAtLeast(dynamic minimum)
{
if (Truth(UO.Self() == 0))
{
return false;
}
var value = UO.PhysicalResist();
return value >= minimum;
}
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 [PhysicalResist]. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Armor:bridge.Armor.
呼叫時執行已儲存的處理函式 delegate。註冊方法在建立 API 時建立此 delegate。
內部實作程式碼,不能作為獨立腳本執行。
() => bridge.Armor建立 API: 這些函式負責註冊 API,不會在每次命令呼叫時重新執行。
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.Poison();
void UO.Poison(object? target);如有必要,對給定目標使用中毒技能。
-
target- 可選的serial/目標別名。沒有參數 - 只有UseSkill(「中毒」)。帶參數 - UseSkillAtTarget(“中毒”,目標)。
void - 沒有值。使用單獨的線路撥打電話;完成並不確認伺服器的操作。
- 註冊的舊命令不是中毒抵抗或中毒狀態的吸氣劑。分支召喚技能並丟棄它1/0。
- 在有目標的形式中,UseSkillAtTarget檢查serial是否為正,在請求技能之前準備好目標;如果不接受該技能,則取消目標。不保證目標會被伺服器中毒。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
指令是獨立的陳述式。前面的訊息表示呼叫開始,並非伺服器已完成動作的確認。
UO.Print("Calling UO.Poison");
UO.Poison();參數與執行流程:
- 如有必要,對給定目標使用中毒技能。
UO.Poison();參數與執行流程:
- 註冊的舊命令不是中毒抵抗或中毒狀態的吸氣劑。分支召喚技能並丟棄它1/0。
return RunScenario();
object? RunScenario()
{
if (Truth(UO.Exists("lasttarget")))
{
UO.Poison("lasttarget");
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;參數與執行流程:
- 在有目標的形式中,UseSkillAtTarget檢查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 id = UO.GetSerial("lasttarget");
if (Truth(UO.Exists(id)))
{
UO.Poison(id);
UO.Print(UO.Waiting());
}
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。
參數: 沒有參數。
結果: void / Unit.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
InjectionScript.Runtime.InjectionApiUO.UseSkillAtTarget:UseSkillAtTarget(new InjectionValue("Poisoning"), arguments[0]). -
InjectionScript.Runtime.InjectionApiUO.UseSkill:UseSkill("Poisoning").
內部實作程式碼,不能作為獨立腳本執行。
case "poison":
if (arguments.Length > 0) UseSkillAtTarget(new InjectionValue("Poisoning"), arguments[0]);
else UseSkill("Poisoning");
break;參數: target (Any)
結果: void / Unit.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
InjectionScript.Runtime.InjectionApiUO.UseSkillAtTarget:UseSkillAtTarget(new InjectionValue("Poisoning"), arguments[0]). -
InjectionScript.Runtime.InjectionApiUO.UseSkill:UseSkill("Poisoning").
內部實作程式碼,不能作為獨立腳本執行。
case "poison":
if (arguments.Length > 0) UseSkillAtTarget(new InjectionValue("Poisoning"), arguments[0]);
else UseSkill("Poisoning");
break;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.PoisonResist();讀取目前角色的抗性場:毒。
沒有參數。
int 是簽章狀態值,客戶端模型中的 -32768..32767。負值被保留。 0可以是真正的抵抗,缺乏數據或失踪/被毀壞的玩家;對於未知選擇器,GetResist 還給出 0。這不是bool、ID、技能或阻力極限。 1表示一分,不是成功。
- 此指令不帶參數。使用上面的確切簽名。
- 如果目前Player存在且尚未被銷毀,則在遊戲執行緒上讀取需要Player.PoisonResistance;否則0。設備不排序,獎金不重新計算,狀態不要求,並且沒有等待更新。存在的鬼魂不等於被摧毀的玩家。
- 元素場有擴展 CharacterStatus (0x11)、type >= 4。該命令本身不檢查伺服器紀元。沒有這些欄位的 Compact/old 狀態會離開先前的快取;新玩家原本是0。抗毒不是Poisoned標誌;這也不是抵抗法術的技能。
- CharacterStatus在更改名字、健康狀況和自身特徵之前檢查所需的身體,然後將每個抵抗詞翻譯成帶符號的Int16。修剪後的強制主體不會改變先前的資料。可選尾部type6保留相同的規則;電阻指令不會從中讀取最大限制。
- 每次呼叫都會重新讀取本地資料。變數儲存快照;各個讀取可能會收到不同的伺服器更新。非零結果不會測試連線。零可以是一個值,也可以沒有資料。
- 這些函式負責註冊 API,不會在每次命令呼叫時重新執行。 C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
var result = UO.PoisonResist();
UO.Print("PoisonResist: " + Convert.ToString(result));參數與執行流程:
- value 儲存一次呼叫的結果。 Convert.ToString 格式化日誌的數字。沒有任何爭論:你可以讀懂自己的個性。
var value = UO.PoisonResist();
UO.Print("PoisonResistance: " + Convert.ToString(value));參數與執行流程:
- 前後有UO.Wait(500)毫秒;差異可以是負數。可能會錯過臨時更新。暫停指的是範例,而不是延遲API。
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var before = UO.PoisonResist();
await Delay(500);
var after = UO.PoisonResist();
var difference = after - before;
UO.Print("Resistance change: " + Convert.ToString(difference));
return null;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));參數與執行流程:
- 最小值 =50 是要求的範例,而不是客戶端限制。 ResistanceAtLeast 拒絕遺失的玩家,讀取一個值並回傳 bool: true 或 false 如果值 >= 最小值。电阻本身不是bool。該函數的完整聲明如下。
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()
{
if (Truth(Truth(ResistanceAtLeast(50)) == true))
{
UO.Print("Local resistance requirement met");
}
else
{
UO.Print("Requirement not met or no player");
}
return null;
}
dynamic ResistanceAtLeast(dynamic minimum)
{
if (Truth(UO.Self() == 0))
{
return false;
}
var value = UO.PoisonResist();
return value >= minimum;
}
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.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.PoisonResistance:bridge.PoisonResistance.
內部實作程式碼,不能作為獨立腳本執行。
case "poisonresist": return new InjectionValue(bridge.PoisonResistance);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.Poisoned();
int UO.Poisoned(object? id);檢查角色中毒情況。
-
id— 所示形式的可選物件:serial 由數字/十六進位字串、self、lasttarget 或註冊名稱 AddObject。這不是type。没有争论,请阅读self。某些形式的未知文字會導致轉換錯誤;打電話前檢查名字。
數字標誌int:1(滿足條件),0(不滿足條件)。這是一個數字標誌:在 C# 中檢查結果 != 0 或結果 == 0。 int 與 true/false 和 if(結果)的直接比較是不允許的。 1 - mobile 有 IsPoisoned,0 沒有標誌或 mobile 缺失。中毒程度和剩餘時間不返回。
該命令的結果是一個數字標誌: 1 表示滿足條件, 0 - 未實現。後 var 結果=命令(...)檢查是否(結果!= 0) 或 if (結果 == 0)。儲存一次呼叫的結果:重複呼叫可以再次執行該操作或讀取已經變更的狀態。
- 讀取本機模型:不開啟目標、不要求狀態、不更改標誌、不發送資料包。即使在從字典中刪除條目之前,被破壞的物件也被視為遺失。
- 結果是單獨閱讀。从Exists到下一个挑战,世界可能会发生变化;多个查询不形成原子快照。
- 對於Poisoned/Flying,考慮協議版本:直到7.0.0.0,0x04位表示有毒; 7.0.0.0開頭表示飛行,毒藥單獨存放。航班不是根據Z計算的。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
var result = UO.Poisoned();
UO.Print("Poisoned: " + Convert.ToString(result));參數與執行流程:
- 空括號讀作self。 active 保存一次結果;true和 false定義了兩個分支。 Print 僅顯示範例訊息。
var active = UO.Poisoned();
if (Truth(Truth(active) == true))
{
UO.Print("State is active");
}
else
{
UO.Print("State is inactive or unavailable");
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;參數與執行流程:
- lasttarget – 先前選擇的物件。 Exists 檢查其存在。 obj是唯一參數ReadState;此函數不加修改地傳回指令的結果。它的定義包含在複製的程式碼中。
return RunScenario();
object? RunScenario()
{
if (Truth(UO.Exists("lasttarget")))
{
var observed = ReadState("lasttarget");
UO.Print("State 1/0: " + Convert.ToString(observed));
}
return null;
}
dynamic ReadState(dynamic obj)
{
return UO.Poisoned(obj);
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;參數與執行流程:
- 兩個不帶參數的呼叫讀取self,UO.Wait(500)設定500毫秒。比較兩個影像;可以跳過中間轉換。沒有無盡的等待。
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.Poisoned();
await Delay(500);
var after = UO.Poisoned();
if (Truth(before != after))
{
UO.Print("State changed: " + Convert.ToString(before) + " -> " + 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.Poisoned. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Poisoned:bridge.Poisoned(bridge.Self). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Self:bridge.Self.
內部實作程式碼,不能作為獨立腳本執行。
public int Poisoned() => bridge.Poisoned(bridge.Self);參數: id (Any)
結果: int / Integer.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.Poisoned. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Poisoned:bridge.Poisoned(GetObject(id)). -
InjectionScript.Runtime.InjectionApiUO.GetObject:GetObject(id).
內部實作程式碼,不能作為獨立腳本執行。
public int Poisoned(InjectionValue id) => bridge.Poisoned(GetObject(id));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.Race();從客戶端模型讀取角色的種族。
沒有參數。
int — 1=人類,2=精靈,3=石像鬼(依照客戶模型)。 0表示没有加载角色。它不是body/graphic,也不是serial。
- 讀取已經接收到的本地資料。該請求不會開啟狀態,也不會強制伺服器發送更新。死亡、地圖轉換或物件刪除後,兩次呼叫之間的值可能會改變。
- C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
object? result = UO.Race();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));參數與執行流程:
- 不帶參數的呼叫指的是 self。角色的種族被儲存在值中。
- Convert.ToString 轉換要輸出的數字,不改變結果的意義。
var value = UO.Race();
UO.Print("Race: " + Convert.ToString(value));參數與執行流程:
- 該值在沒有任何參數的情況下被讀取一次。角色的種族用於顯示的計算或條件。
- 數字閾值是腳本條件的範例,而不是新的客戶端限制。此欄位儲存上述伺服器單元和限制。
return RunScenario();
object? RunScenario()
{
var value = UO.Race();
if (Truth(value == 3))
{
UO.Print("Player race is gargoyle");
}
return null;
}
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) 在兩次拍攝之間提供以毫秒為單位的暫停。
- 變化比較:性格種族。榜樣不會改變世界上的任何事情,也不會無止盡地等待。這一秒鐘內的事件可能會被錯過。
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.Race();
await Delay(1000);
var after = UO.Race();
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.Race:bridge.Race.
內部實作程式碼,不能作為獨立腳本執行。
case "race": return new InjectionValue(bridge.Race);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.RemoveEarrings();請求從 Ear 層移除一個項目。
沒有參數。
void - 沒有值。使用單獨的線路撥打電話;完成並不確認伺服器的操作。
- ExecuteLegacyManualAlias 呼叫 Unequip(“Ear”)。 ConvertLayer 選擇數字層、橋。 Unequip請求轉移到背包。
- 舊指令內部 Unequip (1/0) 的結果被丟棄;撥打單獨的線路。如果沒有物品/背包,則請求可能不會被執行。呼叫後的ObjAtLayer檢查僅讀取本地狀態。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
指令是獨立的陳述式。前面的訊息表示呼叫開始,並非伺服器已完成動作的確認。
UO.Print("Calling UO.RemoveEarrings");
UO.RemoveEarrings();參數與執行流程:
- 請求從 Ear 層移除一個項目。
UO.RemoveEarrings();參數與執行流程:
- ExecuteLegacyManualAlias 呼叫 Unequip(“Ear”)。 ConvertLayer 選擇數字層、橋。 Unequip請求轉移到背包。
return RunScenario();
object? RunScenario()
{
UO.Print(UO.ObjAtLayer("Ear"));
UO.RemoveEarrings();
return null;
}參數與執行流程:
- 舊指令內部 Unequip (1/0) 的結果被丟棄;撥打單獨的線路。如果沒有物品/背包,則請求可能不會被執行。呼叫後的ObjAtLayer檢查僅讀取本地狀態。
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()
{
UO.RemoveEarrings();
UO.Wait(500);
UO.Print(UO.ObjAtLayer("Ear"));
return null;
}
}C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。
參數: 沒有參數。
結果: void / Unit.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
InjectionScript.Runtime.InjectionApiUO.Unequip:Unequip("Ear").
內部實作程式碼,不能作為獨立腳本執行。
case "removeearrings": Unequip("Ear"); break;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.RemoveHat();請求從 Hat 層移除項目。
沒有參數。
void - 沒有值。使用單獨的線路撥打電話;完成並不確認伺服器的操作。
- ExecuteLegacyManualAlias 呼叫Unequip(「帽子」)。 ConvertLayer 選擇數字層、橋。 Unequip請求轉移到背包。
- 舊指令內部 Unequip (1/0) 的結果被丟棄;撥打單獨的線路。如果沒有物品/背包,則請求可能不會被執行。呼叫後的ObjAtLayer檢查僅讀取本地狀態。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
指令是獨立的陳述式。前面的訊息表示呼叫開始,並非伺服器已完成動作的確認。
UO.Print("Calling UO.RemoveHat");
UO.RemoveHat();參數與執行流程:
- 請求從 Hat 層移除項目。
UO.RemoveHat();參數與執行流程:
- ExecuteLegacyManualAlias 呼叫Unequip(「帽子」)。 ConvertLayer 選擇數字層、橋。 Unequip請求轉移到背包。
return RunScenario();
object? RunScenario()
{
UO.Print(UO.ObjAtLayer("Hat"));
UO.RemoveHat();
return null;
}參數與執行流程:
- 舊指令內部 Unequip (1/0) 的結果被丟棄;撥打單獨的線路。如果沒有物品/背包,則請求可能不會被執行。呼叫後的ObjAtLayer檢查僅讀取本地狀態。
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()
{
UO.RemoveHat();
UO.Wait(500);
UO.Print(UO.ObjAtLayer("Hat"));
return null;
}
}C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。
參數: 沒有參數。
結果: void / Unit.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
InjectionScript.Runtime.InjectionApiUO.Unequip:Unequip("Hat").
內部實作程式碼,不能作為獨立腳本執行。
case "removehat": Unequip("Hat"); break;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.RemoveNeckless();請求從 Neck 層移除一個項目。
沒有參數。
void - 沒有值。使用單獨的線路撥打電話;完成並不確認伺服器的操作。
- ExecuteLegacyManualAlias 呼叫 Unequip(“Neck”)。 ConvertLayer 選擇數字層、橋。 Unequip請求轉移到背包。
- 舊指令內部 Unequip (1/0) 的結果被丟棄;撥打單獨的線路。如果沒有物品/背包,則請求可能不會被執行。呼叫後的ObjAtLayer檢查僅讀取本地狀態。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
指令是獨立的陳述式。前面的訊息表示呼叫開始,並非伺服器已完成動作的確認。
UO.Print("Calling UO.RemoveNeckless");
UO.RemoveNeckless();參數與執行流程:
- 請求從 Neck 層移除一個項目。
UO.RemoveNeckless();參數與執行流程:
- ExecuteLegacyManualAlias 呼叫 Unequip(“Neck”)。 ConvertLayer 選擇數字層、橋。 Unequip請求轉移到背包。
return RunScenario();
object? RunScenario()
{
UO.Print(UO.ObjAtLayer("Neck"));
UO.RemoveNeckless();
return null;
}參數與執行流程:
- 舊指令內部 Unequip (1/0) 的結果被丟棄;撥打單獨的線路。如果沒有物品/背包,則請求可能不會被執行。呼叫後的ObjAtLayer檢查僅讀取本地狀態。
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()
{
UO.RemoveNeckless();
UO.Wait(500);
UO.Print(UO.ObjAtLayer("Neck"));
return null;
}
}C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。
參數: 沒有參數。
結果: void / Unit.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
InjectionScript.Runtime.InjectionApiUO.Unequip:Unequip("Neck").
內部實作程式碼,不能作為獨立腳本執行。
case "removeneckless": Unequip("Neck"); break;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.RemoveRing();請求從 Ring 層移除一個項目。
沒有參數。
void - 沒有值。使用單獨的線路撥打電話;完成並不確認伺服器的操作。
- ExecuteLegacyManualAlias 呼叫Unequip(「響鈴」)。 ConvertLayer 選擇數字層、橋。 Unequip請求轉移到背包。
- 舊指令內部 Unequip (1/0) 的結果被丟棄;撥打單獨的線路。如果沒有物品/背包,則請求可能不會被執行。呼叫後的ObjAtLayer檢查僅讀取本地狀態。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
指令是獨立的陳述式。前面的訊息表示呼叫開始,並非伺服器已完成動作的確認。
UO.Print("Calling UO.RemoveRing");
UO.RemoveRing();參數與執行流程:
- 請求從 Ring 層移除一個項目。
UO.RemoveRing();參數與執行流程:
- ExecuteLegacyManualAlias 呼叫Unequip(「響鈴」)。 ConvertLayer 選擇數字層、橋。 Unequip請求轉移到背包。
return RunScenario();
object? RunScenario()
{
UO.Print(UO.ObjAtLayer("Ring"));
UO.RemoveRing();
return null;
}參數與執行流程:
- 舊指令內部 Unequip (1/0) 的結果被丟棄;撥打單獨的線路。如果沒有物品/背包,則請求可能不會被執行。呼叫後的ObjAtLayer檢查僅讀取本地狀態。
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()
{
UO.RemoveRing();
UO.Wait(500);
UO.Print(UO.ObjAtLayer("Ring"));
return null;
}
}C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。
參數: 沒有參數。
結果: void / Unit.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
InjectionScript.Runtime.InjectionApiUO.Unequip:Unequip("Ring").
內部實作程式碼,不能作為獨立腳本執行。
case "removering": Unequip("Ring"); break;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.RequestStats(object? objID);透過serial請求角色狀態。
-
objID— 序列/ID 物件:int,數字/十六進位字串或已建立的別名,例如「lasttarget」。這不是graphic/type。在採取行動之前檢查裝載的物體。
void - 沒有值。使用單獨的線路撥打電話;完成並不確認伺服器的操作。
- RequestStats 呼叫RequestMobileStatus(_world,serial,true)。呼叫不會傳回特徵數組,也不會等待回應; GetHP/GetStr 接下來是讀取本地模型。
- Bridge 在遊戲串流上發送請求。伺服器規則適用;沒有內建的等待確認。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
指令是獨立的陳述式。前面的訊息表示呼叫開始,並非伺服器已完成動作的確認。
UO.Print("Calling UO.RequestStats");
UO.RequestStats(UO.GetSerial("lasttarget"));參數與執行流程:
- 透過serial請求角色狀態。
var id = UO.GetSerial("lasttarget");
if (Truth(UO.Exists(id)))
{
UO.RequestStats(id);
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;參數與執行流程:
- RequestStats 呼叫RequestMobileStatus(_world,serial,true)。呼叫不會傳回特徵數組,也不會等待回應; GetHP/GetStr 接下來是讀取本地模型。
return RunScenario();
object? RunScenario()
{
var id = UO.GetSerial("self");
if (Truth(UO.Exists(id)))
{
UO.RequestStats(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;參數與執行流程:
- Bridge 在遊戲串流上發送請求。伺服器規則適用;沒有內建的等待確認。
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()
{
ApplyToLoaded(UO.GetSerial("lasttarget"));
return null;
}
void ApplyToLoaded(dynamic id)
{
if (Truth(UO.Exists(id)))
{
UO.RequestStats(id);
}
}
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。
參數: objID (Any)
結果: void / Unit.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.RequestStats:bridge.RequestStats(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
內部實作程式碼,不能作為獨立腳本執行。
case "requeststats": bridge.RequestStats(Arg(0)); return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.ResistCold();讀取目前角色的抵抗力場:冷。
沒有參數。
int 是簽章狀態值,客戶端模型中的 -32768..32767。負值被保留。 0可以是真正的抵抗,缺乏數據或失踪/被毀壞的玩家;對於未知選擇器,GetResist 還給出 0。這不是bool、ID、技能或阻力極限。 1表示一分,不是成功。
- 此指令不帶參數。使用上面的確切簽名。
- 如果目前Player存在且尚未被銷毀,則在遊戲執行緒上讀取需要Player.ColdResistance;否則0。設備不排序,獎金不重新計算,狀態不要求,並且沒有等待更新。存在的鬼魂不等於被摧毀的玩家。
- 元素場有擴展 CharacterStatus (0x11)、type >= 4。該命令本身不檢查伺服器紀元。沒有這些欄位的 Compact/old 狀態會離開先前的快取;新玩家原本是0。抗毒不是Poisoned標誌;這也不是抵抗法術的技能。
- CharacterStatus在更改名字、健康狀況和自身特徵之前檢查所需的身體,然後將每個抵抗詞翻譯成帶符號的Int16。修剪後的強制主體不會改變先前的資料。可選尾部type6保留相同的規則;電阻指令不會從中讀取最大限制。
- 每次呼叫都會重新讀取本地資料。變數儲存快照;各個讀取可能會收到不同的伺服器更新。非零結果不會測試連線。零可以是一個值,也可以沒有資料。
- 這些函式負責註冊 API,不會在每次命令呼叫時重新執行。 C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
var result = UO.ResistCold();
UO.Print("ResistCold: " + Convert.ToString(result));參數與執行流程:
- value 儲存一次呼叫的結果。 Convert.ToString 格式化日誌的數字。沒有任何爭論:你可以讀懂自己的個性。
var value = UO.ResistCold();
UO.Print("ColdResistance: " + Convert.ToString(value));參數與執行流程:
- 前後有UO.Wait(500)毫秒;差異可以是負數。可能會錯過臨時更新。暫停指的是範例,而不是延遲API。
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var before = UO.ResistCold();
await Delay(500);
var after = UO.ResistCold();
var difference = after - before;
UO.Print("Resistance change: " + Convert.ToString(difference));
return null;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));參數與執行流程:
- 最小值 =50 是要求的範例,而不是客戶端限制。 ResistanceAtLeast 拒絕遺失的玩家,讀取一個值並回傳 bool: true 或 false 如果值 >= 最小值。电阻本身不是bool。該函數的完整聲明如下。
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()
{
if (Truth(Truth(ResistanceAtLeast(50)) == true))
{
UO.Print("Local resistance requirement met");
}
else
{
UO.Print("Requirement not met or no player");
}
return null;
}
dynamic ResistanceAtLeast(dynamic minimum)
{
if (Truth(UO.Self() == 0))
{
return false;
}
var value = UO.ResistCold();
return value >= minimum;
}
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 [ResistCold]. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.ColdResistance:bridge.ColdResistance.
呼叫時執行已儲存的處理函式 delegate。註冊方法在建立 API 時建立此 delegate。
內部實作程式碼,不能作為獨立腳本執行。
() => bridge.ColdResistance建立 API: 這些函式負責註冊 API,不會在每次命令呼叫時重新執行。
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.ResistEnergy();讀取目前角色的阻力場:能量。
沒有參數。
int 是簽章狀態值,客戶端模型中的 -32768..32767。負值被保留。 0可以是真正的抵抗,缺乏數據或失踪/被毀壞的玩家;對於未知選擇器,GetResist 還給出 0。這不是bool、ID、技能或阻力極限。 1表示一分,不是成功。
- 此指令不帶參數。使用上面的確切簽名。
- 如果目前Player存在且尚未被銷毀,則在遊戲執行緒上讀取需要Player.EnergyResistance;否則0。設備不排序,獎金不重新計算,狀態不要求,並且沒有等待更新。存在的鬼魂不等於被摧毀的玩家。
- 元素場有擴展 CharacterStatus (0x11)、type >= 4。該命令本身不檢查伺服器紀元。沒有這些欄位的 Compact/old 狀態會離開先前的快取;新玩家原本是0。抗毒不是Poisoned標誌;這也不是抵抗法術的技能。
- CharacterStatus在更改名字、健康狀況和自身特徵之前檢查所需的身體,然後將每個抵抗詞翻譯成帶符號的Int16。修剪後的強制主體不會改變先前的資料。可選尾部type6保留相同的規則;電阻指令不會從中讀取最大限制。
- 每次呼叫都會重新讀取本地資料。變數儲存快照;各個讀取可能會收到不同的伺服器更新。非零結果不會測試連線。零可以是一個值,也可以沒有資料。
- 這些函式負責註冊 API,不會在每次命令呼叫時重新執行。 C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
var result = UO.ResistEnergy();
UO.Print("ResistEnergy: " + Convert.ToString(result));參數與執行流程:
- value 儲存一次呼叫的結果。 Convert.ToString 格式化日誌的數字。沒有任何爭論:你可以讀懂自己的個性。
var value = UO.ResistEnergy();
UO.Print("EnergyResistance: " + Convert.ToString(value));參數與執行流程:
- 前後有UO.Wait(500)毫秒;差異可以是負數。可能會錯過臨時更新。暫停指的是範例,而不是延遲API。
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var before = UO.ResistEnergy();
await Delay(500);
var after = UO.ResistEnergy();
var difference = after - before;
UO.Print("Resistance change: " + Convert.ToString(difference));
return null;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));參數與執行流程:
- 最小值 =50 是要求的範例,而不是客戶端限制。 ResistanceAtLeast 拒絕遺失的玩家,讀取一個值並回傳 bool: true 或 false 如果值 >= 最小值。电阻本身不是bool。該函數的完整聲明如下。
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()
{
if (Truth(Truth(ResistanceAtLeast(50)) == true))
{
UO.Print("Local resistance requirement met");
}
else
{
UO.Print("Requirement not met or no player");
}
return null;
}
dynamic ResistanceAtLeast(dynamic minimum)
{
if (Truth(UO.Self() == 0))
{
return false;
}
var value = UO.ResistEnergy();
return value >= minimum;
}
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 [ResistEnergy]. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.EnergyResistance:bridge.EnergyResistance.
呼叫時執行已儲存的處理函式 delegate。註冊方法在建立 API 時建立此 delegate。
內部實作程式碼,不能作為獨立腳本執行。
() => bridge.EnergyResistance建立 API: 這些函式負責註冊 API,不會在每次命令呼叫時重新執行。
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.ResistFire();讀取目前角色的抵抗力場:火。
沒有參數。
int 是簽章狀態值,客戶端模型中的 -32768..32767。負值被保留。 0可以是真正的抵抗,缺乏數據或失踪/被毀壞的玩家;對於未知選擇器,GetResist 還給出 0。這不是bool、ID、技能或阻力極限。 1表示一分,不是成功。
- 此指令不帶參數。使用上面的確切簽名。
- 如果目前Player存在且尚未被銷毀,則在遊戲執行緒上讀取需要Player.FireResistance;否則0。設備不排序,獎金不重新計算,狀態不要求,並且沒有等待更新。存在的鬼魂不等於被摧毀的玩家。
- 元素場有擴展 CharacterStatus (0x11)、type >= 4。該命令本身不檢查伺服器紀元。沒有這些欄位的 Compact/old 狀態會離開先前的快取;新玩家原本是0。抗毒不是Poisoned標誌;這也不是抵抗法術的技能。
- CharacterStatus在更改名字、健康狀況和自身特徵之前檢查所需的身體,然後將每個抵抗詞翻譯成帶符號的Int16。修剪後的強制主體不會改變先前的資料。可選尾部type6保留相同的規則;電阻指令不會從中讀取最大限制。
- 每次呼叫都會重新讀取本地資料。變數儲存快照;各個讀取可能會收到不同的伺服器更新。非零結果不會測試連線。零可以是一個值,也可以沒有資料。
- 這些函式負責註冊 API,不會在每次命令呼叫時重新執行。 C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
var result = UO.ResistFire();
UO.Print("ResistFire: " + Convert.ToString(result));參數與執行流程:
- value 儲存一次呼叫的結果。 Convert.ToString 格式化日誌的數字。沒有任何爭論:你可以讀懂自己的個性。
var value = UO.ResistFire();
UO.Print("FireResistance: " + Convert.ToString(value));參數與執行流程:
- 前後有UO.Wait(500)毫秒;差異可以是負數。可能會錯過臨時更新。暫停指的是範例,而不是延遲API。
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var before = UO.ResistFire();
await Delay(500);
var after = UO.ResistFire();
var difference = after - before;
UO.Print("Resistance change: " + Convert.ToString(difference));
return null;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));參數與執行流程:
- 最小值 =50 是要求的範例,而不是客戶端限制。 ResistanceAtLeast 拒絕遺失的玩家,讀取一個值並回傳 bool: true 或 false 如果值 >= 最小值。电阻本身不是bool。該函數的完整聲明如下。
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()
{
if (Truth(Truth(ResistanceAtLeast(50)) == true))
{
UO.Print("Local resistance requirement met");
}
else
{
UO.Print("Requirement not met or no player");
}
return null;
}
dynamic ResistanceAtLeast(dynamic minimum)
{
if (Truth(UO.Self() == 0))
{
return false;
}
var value = UO.ResistFire();
return value >= minimum;
}
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 [ResistFire]. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.FireResistance:bridge.FireResistance.
呼叫時執行已儲存的處理函式 delegate。註冊方法在建立 API 時建立此 delegate。
內部實作程式碼,不能作為獨立腳本執行。
() => bridge.FireResistance建立 API: 這些函式負責註冊 API,不會在每次命令呼叫時重新執行。
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.ResistPhysical();讀取目前角色的抵抗力場:物理護甲/抵抗力。
沒有參數。
int 是簽章狀態值,客戶端模型中的 -32768..32767。負值被保留。 0可以是真正的抵抗,缺乏數據或失踪/被毀壞的玩家;對於未知選擇器,GetResist 還給出 0。這不是bool、ID、技能或阻力極限。 1表示一分,不是成功。
- 此指令不帶參數。使用上面的確切簽名。
- 如果目前Player存在且尚未被銷毀,則在遊戲執行緒上讀取需要Player.PhysicalResistance;否則0。設備不排序,獎金不重新計算,狀態不要求,並且沒有等待更新。存在的鬼魂不等於被摧毀的玩家。
- PhysicalResistance - 伺服器護甲/狀態列:經典伺服器可以傳送護甲等級,有抗性的規則可以傳送物理抗性。 API 不會從一種轉換為另一種,也不會計算傷害減免的百分比。 Armor 和實體別名讀取相同的欄位。
- CharacterStatus在更改名字、健康狀況和自身特徵之前檢查所需的身體,然後將每個抵抗詞翻譯成帶符號的Int16。修剪後的強制主體不會改變先前的資料。可選尾部type6保留相同的規則;電阻指令不會從中讀取最大限制。
- 每次呼叫都會重新讀取本地資料。變數儲存快照;各個讀取可能會收到不同的伺服器更新。非零結果不會測試連線。零可以是一個值,也可以沒有資料。
- 這些函式負責註冊 API,不會在每次命令呼叫時重新執行。 C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
var result = UO.ResistPhysical();
UO.Print("ResistPhysical: " + Convert.ToString(result));參數與執行流程:
- value 儲存一次呼叫的結果。 Convert.ToString 格式化日誌的數字。沒有任何爭論:你可以讀懂自己的個性。
var value = UO.ResistPhysical();
UO.Print("PhysicalResistance: " + Convert.ToString(value));參數與執行流程:
- 前後有UO.Wait(500)毫秒;差異可以是負數。可能會錯過臨時更新。暫停指的是範例,而不是延遲API。
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var before = UO.ResistPhysical();
await Delay(500);
var after = UO.ResistPhysical();
var difference = after - before;
UO.Print("Resistance change: " + Convert.ToString(difference));
return null;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));參數與執行流程:
- 最小值 =50 是要求的範例,而不是客戶端限制。 ResistanceAtLeast 拒絕遺失的玩家,讀取一個值並回傳 bool: true 或 false 如果值 >= 最小值。电阻本身不是bool。該函數的完整聲明如下。
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()
{
if (Truth(Truth(ResistanceAtLeast(50)) == true))
{
UO.Print("Local resistance requirement met");
}
else
{
UO.Print("Requirement not met or no player");
}
return null;
}
dynamic ResistanceAtLeast(dynamic minimum)
{
if (Truth(UO.Self() == 0))
{
return false;
}
var value = UO.ResistPhysical();
return value >= minimum;
}
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 [ResistPhysical]. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Armor:bridge.Armor.
呼叫時執行已儲存的處理函式 delegate。註冊方法在建立 API 時建立此 delegate。
內部實作程式碼,不能作為獨立腳本執行。
() => bridge.Armor建立 API: 這些函式負責註冊 API,不會在每次命令呼叫時重新執行。
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.ResistPoison();讀取目前角色的抗性場:毒。
沒有參數。
int 是簽章狀態值,客戶端模型中的 -32768..32767。負值被保留。 0可以是真正的抵抗,缺乏數據或失踪/被毀壞的玩家;對於未知選擇器,GetResist 還給出 0。這不是bool、ID、技能或阻力極限。 1表示一分,不是成功。
- 此指令不帶參數。使用上面的確切簽名。
- 如果目前Player存在且尚未被銷毀,則在遊戲執行緒上讀取需要Player.PoisonResistance;否則0。設備不排序,獎金不重新計算,狀態不要求,並且沒有等待更新。存在的鬼魂不等於被摧毀的玩家。
- 元素場有擴展 CharacterStatus (0x11)、type >= 4。該命令本身不檢查伺服器紀元。沒有這些欄位的 Compact/old 狀態會離開先前的快取;新玩家原本是0。抗毒不是Poisoned標誌;這也不是抵抗法術的技能。
- CharacterStatus在更改名字、健康狀況和自身特徵之前檢查所需的身體,然後將每個抵抗詞翻譯成帶符號的Int16。修剪後的強制主體不會改變先前的資料。可選尾部type6保留相同的規則;電阻指令不會從中讀取最大限制。
- 每次呼叫都會重新讀取本地資料。變數儲存快照;各個讀取可能會收到不同的伺服器更新。非零結果不會測試連線。零可以是一個值,也可以沒有資料。
- 這些函式負責註冊 API,不會在每次命令呼叫時重新執行。 C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
var result = UO.ResistPoison();
UO.Print("ResistPoison: " + Convert.ToString(result));參數與執行流程:
- value 儲存一次呼叫的結果。 Convert.ToString 格式化日誌的數字。沒有任何爭論:你可以讀懂自己的個性。
var value = UO.ResistPoison();
UO.Print("PoisonResistance: " + Convert.ToString(value));參數與執行流程:
- 前後有UO.Wait(500)毫秒;差異可以是負數。可能會錯過臨時更新。暫停指的是範例,而不是延遲API。
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var before = UO.ResistPoison();
await Delay(500);
var after = UO.ResistPoison();
var difference = after - before;
UO.Print("Resistance change: " + Convert.ToString(difference));
return null;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));參數與執行流程:
- 最小值 =50 是要求的範例,而不是客戶端限制。 ResistanceAtLeast 拒絕遺失的玩家,讀取一個值並回傳 bool: true 或 false 如果值 >= 最小值。电阻本身不是bool。該函數的完整聲明如下。
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()
{
if (Truth(Truth(ResistanceAtLeast(50)) == true))
{
UO.Print("Local resistance requirement met");
}
else
{
UO.Print("Requirement not met or no player");
}
return null;
}
dynamic ResistanceAtLeast(dynamic minimum)
{
if (Truth(UO.Self() == 0))
{
return false;
}
var value = UO.ResistPoison();
return value >= minimum;
}
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 [ResistPoison]. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.PoisonResistance:bridge.PoisonResistance.
呼叫時執行已儲存的處理函式 delegate。註冊方法在建立 API 時建立此 delegate。
內部實作程式碼,不能作為獨立腳本執行。
() => bridge.PoisonResistance建立 API: 這些函式負責註冊 API,不會在每次命令呼叫時重新執行。
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.Self();傳回目前字元的ID。
沒有參數。
int - serial/ID,而非 graphic/type、圖層、項目數或 bool。 0—當前沒有物件。所有32位serial均被保存;檢查 != 0,而不是 == true 或 > 0。儲存的結果不會自行更新。讀取 World.Player.Serial;失蹤或被摧毀的玩家給予0。死亡與移除不同:存在的鬼魂保留了角色的ID。
- 沒有參數。通过游戏流上的Invoke读取本地数据;取消脚本会中断对该线程的等待。不发送包裹,不打开容器/目标,也不转移物品。
- 除非被腳本變數覆蓋,否則將再次讀取不含括號的內建self/backpack。字串名稱由接收命令處理。在攜帶目的地中,「self」表示背包,UO.Self()返回角色的serial。對於 ID 容器,明確使用 UO.Backpack()。
- World.Clear 移除玩家;隨後的讀數產生0。進入世界或更換裝備包都可以改變ID。單獨的讀取不是原子的。非零 ID 不證明連線、伺服器解析或內容載入。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
var result = UO.Self();
UO.Print("Self: " + Convert.ToString(result));參數與執行流程:
- id 儲存一次呼叫的結果; HEX 將 serial 格式化為日誌。此範例沒有選擇或使用任何內容。
var id = UO.Self();
UO.Print("ID: " + Hex(id));
string Hex(object? value) => Convert.ToInt64(value).ToString("X");參數與執行流程:
- before/after 以250 ms 的間隔讀取。 UO.Wait 僅作為範例添加。相等意味著最終的ID相同;中間的變化可能會被錯過。
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var before = UO.Self();
await Delay(250);
var after = UO.Self();
if (Truth(before != after))
{
UO.Print("ID changed: " + Hex(after));
}
return null;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
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;參數與執行流程:
- 候選人 - 已保存IDLastTarget。 IsOwnSerial(候選者)取 1 serial 並回傳 bool:true 為目前非零自己的 ID,否則為 false。完整給出了函數定義;目標不變。
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 candidate = UO.LastTarget();
if (Truth(Truth(IsOwnSerial(candidate)) == true))
{
UO.Print("Own object selected");
}
else
{
UO.Print("Different object or no own object");
}
return null;
}
dynamic IsOwnSerial(dynamic candidate)
{
var current = UO.Self();
return Truth(current != 0) && Truth(current == candidate);
}
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.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Self:bridge.Self.
內部實作程式碼,不能作為獨立腳本執行。
case "self": return new InjectionValue(bridge.Self);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.SetARExtParams();
void UO.SetARExtParams(object? shardName);
void UO.SetARExtParams(object? shardName, object? charName);
void UO.SetARExtParams(object? shardName, object? charName, object? useAtEveryConnect);指定分片清單中的伺服器和用於後續登入的字元。當腳本需要由同一帳戶的某個角色重新連結時很有用。
-
shardName— 登入清單中伺服器的選用顯示名稱,而非 IP 或連接埠。目前 ShardName 取空值或缺失值。邊緣周圍的空白被刪除。 -
charName- 現有帳戶角色的可選名稱。若已知,空值或缺失值的名稱為 self。這是名稱,不是槽號或serial;非空名稱優先於設定檔槽。 -
useAtEveryConnect- 可選標誌:預設為false/0 - 一次性選擇;true/1 或其他非零整數 - 儲存選擇以供將來在此會話中登入。
void - 沒有值。這是設定下一個輸入,而不是確認角色的連接或存在。
- 在管理器中,隨機數在失敗的網路嘗試中保存,並且僅在進入世界後才被消耗。下一次連線將返回設定檔設定。持久選擇將持續到新設定或會話擁有者結束為止;管理員設定檔不會被覆蓋。登入時的新設定適用於下次登錄,並且在目前登入完成後不會遺失。
- 在單獨的圖形客戶端中,伺服器儲存為LastServerName,角色儲存為LastCharacterManager。成功登入後,該角色也將成為最後使用的角色:可處置並不意味著自動返回前一個角色。永久覆蓋存在於目前進程中。
- 該命令本身不會啟用自動重新連接,也不會中斷連接。為此,分別使用 SetARStatus、Connect 和 Disconnect。名稱必須出現在伺服器清單中;比較不區分大小寫。如果在管理員中停用自動字元輸入,則仍保留手動選擇。離線時可能無法辨識名稱 self:明確指定名稱。此指令不會改變帳號、密碼、IP、連接埠和加密方式;沒有可用目前名稱的空值不會清除先前設定的選擇。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
指令是獨立的陳述式。前面的訊息表示呼叫開始,並非伺服器已完成動作的確認。
UO.Print("Calling UO.SetARExtParams");
UO.SetARExtParams("", "", true);參數與執行流程:
- 第一個範例僅適用於線上。兩個空白行採用目前名稱; true 儲存它們以供重複登錄,SetARStatus(true) 啟用自動重新連接策略。不會立即重新連線。
if (!(Truth(UO.Connected())))
{
return null;
}
UO.SetARExtParams("", "", true);
UO.SetARStatus(true);
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;參數與執行流程:
- 僅當該名稱位於真實的 GetCharsListForShard 中時,第二個範例才選擇範例字元。此數組的索引為0; ToLowerInvariant 以不區分大小寫的方式比較名稱。 false表示一次輸入成功,配置後自動重連,呼叫Disconnect。將名稱替換為您的名稱。如果沒有名稱,則保留連線。自動暫停可能會延遲返回,直到連線恢復。
return RunScenario();
object? RunScenario()
{
if (!(Truth(UO.Connected())))
{
return null;
}
var wanted = "Example Character";
var names = UO.GetCharsListForShard();
var i = 0;
while (Truth(i < ArrayLength(names)))
{
if (Truth(Convert.ToString(names[i]) == Convert.ToString(wanted)))
{
UO.SetARExtParams("", names[i], false);
UO.SetARStatus(true);
UO.Disconnect();
return null;
}
i += 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;參數與執行流程:
- 第三個範例是從執行的離線腳本啟動的。明確指定範例碎片和範例字元;將其替換為真實姓名。 true 保留選擇,SetARStatus 中的 false 停用自動重試,Connect 要求一個輸入。您需要儲存的帳戶詳細資料。 Connect 不會等待世界準備好;而是會等待世界準備好。自動暫停的腳本在不恢復的情況下不會到達這些行。
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()
{
if (Truth(UO.Connected()))
{
return null;
}
UO.SetARExtParams("Example Shard", "Example Character", true);
UO.SetARStatus(false);
UO.Connect();
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。
參數: 沒有參數。
結果: void / Unit.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(0). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetName:bridge.GetName(bridge.Self). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(2). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetReconnectSelection:bridge.SetReconnectSelection(state.AutoReconnectShard, state.AutoReconnectCharacter, useAtEveryConnect). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.ShardName:bridge.ShardName. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Self:bridge.Self.
內部實作程式碼,不能作為獨立腳本執行。
case "setarextparams":
{
string requestedShard = arguments.Length > 0 ? Text(0) : string.Empty;
string requestedCharacter = arguments.Length > 1 ? Text(1) : string.Empty;
state.AutoReconnectShard = string.IsNullOrWhiteSpace(requestedShard)
? bridge.ShardName
: requestedShard;
state.AutoReconnectCharacter = string.IsNullOrWhiteSpace(requestedCharacter)
? bridge.GetName(bridge.Self) ?? string.Empty
: requestedCharacter;
int useAtEveryConnect = arguments.Length > 2 ? Arg(2) : 0;
bridge.SetReconnectSelection(state.AutoReconnectShard, state.AutoReconnectCharacter, useAtEveryConnect);
return InjectionValue.Unit;
}參數: shardName (Any)
結果: void / Unit.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(0). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetName:bridge.GetName(bridge.Self). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(2). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetReconnectSelection:bridge.SetReconnectSelection(state.AutoReconnectShard, state.AutoReconnectCharacter, useAtEveryConnect). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.ShardName:bridge.ShardName. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Self:bridge.Self.
內部實作程式碼,不能作為獨立腳本執行。
case "setarextparams":
{
string requestedShard = arguments.Length > 0 ? Text(0) : string.Empty;
string requestedCharacter = arguments.Length > 1 ? Text(1) : string.Empty;
state.AutoReconnectShard = string.IsNullOrWhiteSpace(requestedShard)
? bridge.ShardName
: requestedShard;
state.AutoReconnectCharacter = string.IsNullOrWhiteSpace(requestedCharacter)
? bridge.GetName(bridge.Self) ?? string.Empty
: requestedCharacter;
int useAtEveryConnect = arguments.Length > 2 ? Arg(2) : 0;
bridge.SetReconnectSelection(state.AutoReconnectShard, state.AutoReconnectCharacter, useAtEveryConnect);
return InjectionValue.Unit;
}參數: shardName (Any), charName (Any)
結果: void / Unit.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(0). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetName:bridge.GetName(bridge.Self). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(2). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetReconnectSelection:bridge.SetReconnectSelection(state.AutoReconnectShard, state.AutoReconnectCharacter, useAtEveryConnect). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.ShardName:bridge.ShardName. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Self:bridge.Self.
內部實作程式碼,不能作為獨立腳本執行。
case "setarextparams":
{
string requestedShard = arguments.Length > 0 ? Text(0) : string.Empty;
string requestedCharacter = arguments.Length > 1 ? Text(1) : string.Empty;
state.AutoReconnectShard = string.IsNullOrWhiteSpace(requestedShard)
? bridge.ShardName
: requestedShard;
state.AutoReconnectCharacter = string.IsNullOrWhiteSpace(requestedCharacter)
? bridge.GetName(bridge.Self) ?? string.Empty
: requestedCharacter;
int useAtEveryConnect = arguments.Length > 2 ? Arg(2) : 0;
bridge.SetReconnectSelection(state.AutoReconnectShard, state.AutoReconnectCharacter, useAtEveryConnect);
return InjectionValue.Unit;
}參數: shardName (Any), charName (Any), useAtEveryConnect (Any)
結果: void / Unit.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(0). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetName:bridge.GetName(bridge.Self). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(2). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetReconnectSelection:bridge.SetReconnectSelection(state.AutoReconnectShard, state.AutoReconnectCharacter, useAtEveryConnect). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.ShardName:bridge.ShardName. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Self:bridge.Self.
內部實作程式碼,不能作為獨立腳本執行。
case "setarextparams":
{
string requestedShard = arguments.Length > 0 ? Text(0) : string.Empty;
string requestedCharacter = arguments.Length > 1 ? Text(1) : string.Empty;
state.AutoReconnectShard = string.IsNullOrWhiteSpace(requestedShard)
? bridge.ShardName
: requestedShard;
state.AutoReconnectCharacter = string.IsNullOrWhiteSpace(requestedCharacter)
? bridge.GetName(bridge.Self) ?? string.Empty
: requestedCharacter;
int useAtEveryConnect = arguments.Length > 2 ? Arg(2) : 0;
bridge.SetReconnectSelection(state.AutoReconnectShard, state.AutoReconnectCharacter, useAtEveryConnect);
return InjectionValue.Unit;
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.SetARStatus(object? value);啟用或停用自動重新連線。
-
value- 0 關閉;任何非零整數包括。
void - 沒有值。使用單獨的線路撥打電話;完成並不確認伺服器的操作。
- Bridge.SetAutoReconnect 更改自動重連設定。該值被解釋為啟用! = 0;沒有立即登入/登出伺服器。
- 更改客戶端設定。該值不是連接測試的結果,並且不確認伺服器的處理。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
指令是獨立的陳述式。前面的訊息表示呼叫開始,並非伺服器已完成動作的確認。
UO.Print("Calling UO.SetARStatus");
UO.SetARStatus(1);參數與執行流程:
- 啟用或停用自動重新連線。
UO.SetARStatus(1);參數與執行流程:
- Bridge.SetAutoReconnect 更改自動重連設定。該值被解釋為啟用! = 0;沒有立即登入/登出伺服器。
return RunScenario();
object? RunScenario()
{
UO.SetARStatus(0);
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()
{
ApplyMode(1);
return null;
}
void ApplyMode(dynamic mode)
{
UO.SetARStatus(mode);
}
}C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。
參數: value (Any)
結果: void / Unit.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetAutoReconnect:bridge.SetAutoReconnect(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
內部實作程式碼,不能作為獨立腳本執行。
case "setarstatus": bridge.SetAutoReconnect(Arg(0)); return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.SetArm(object? name);記得命名集中當前的武器和盾牌。
-
name— 集合的字串名稱,例如「旅行」或「戰鬥」。名稱不區分大小寫。服裝和武器套裝分開存放:兩者允許使用相同的名稱。這不是 ID 的東西或檔名。只有SetDress允許沒有名稱:然後為DressSavedSet/EquipDressSet記錄一個單獨的集合。
void - 无值。使用單獨的線路撥打電話;不要分配結果或將其與true進行比較。儲存和刪除會更改條目,而不是設備。
- 服裝:層數3,4,5,6,7,8,10,12,13,14,17,18,19,20,22,23,24。武器:僅限1和2。頭髮、鬍鬚、背包、動物和銀行不包含在這些套裝中。
- 具體的serial已經加載的東西都記錄在自己的層中。再次儲存相同的名稱會取代該條目。空層也有意義:當恢復時,相應的佔用層將被釋放到自己的背包中。因此,已儲存的完全空集會從其圖層中刪除內容。
- 此集合儲存在運行時狀態中。呼叫本身不會建立文件,也不保證該集將被傳輸到另一個設定檔或新的運行時。首先,將所需的集合儲存為其使用狀態。載入/保存客戶端的一般狀態是一個單獨的機制。
- UO.SetDress · UO.Dress · UO.DressSavedSet · UO.SetArm · UO.Arm · UO.DressSpeed
- 在常規用戶端主機中,此狀態資料取自GetPersistentState管理器,並且對於同一世界/設定檔的腳本/聊天/巨集是通用的,且不屬於一個腳本。另一個進程或明顯獨立的InjectionRuntimeState具有不同的狀態。載入/清除設定檔可以取代它;已儲存的serial仍然會根據載入的世界進行檢查。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
指令是獨立的陳述式。前面的訊息表示呼叫開始,並非伺服器已完成動作的確認。
UO.Print("Calling UO.SetArm");
UO.SetArm("battle");參數與執行流程:
- 照片是現在拍攝的,當時必要的東西已經穿上了。挑戰不裝備背包中的物品。
UO.SetArm("battle");參數與執行流程:
- 不同的儲存庫中使用相同的名稱。 SetDress()也单独存储未命名集合;它不是对以前记录的名称的选择。
return RunScenario();
object? RunScenario()
{
UO.SetArm("battle");
UO.SetDress("battle");
return null;
}參數與執行流程:
- SaveIfReady 檢查控制層:3 - 鞋子用於衣服,1 - 右手用於武器。如果為空,則不會覆蓋快照。回傳的1/0屬於助手,而非SetDress/SetArm。
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()
{
return SaveIfReady("battle");
return null;
}
dynamic SaveIfReady(dynamic name)
{
if (Truth(UO.ObjAtLayerEx(1, UO.Self()) == 0))
{
return 0;
}
UO.SetArm(name);
return 1;
}
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。
參數: name (String)
結果: void / Unit.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.SetArm. -
InjectionScript.Runtime.InjectionApiUO.SetEquip:SetEquip(name, armSets, weaponLayers, "Arm set.").
內部實作程式碼,不能作為獨立腳本執行。
public void SetArm(string name)
=> SetEquip(name, armSets, weaponLayers, "Arm set.");Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.SetDress();
void UO.SetDress(object? name);記住目前穿著的衣服和盔甲以供後續修復。
-
name— 集合的字串名稱,例如「旅行」或「戰鬥」。名稱不區分大小寫。服裝和武器套裝分開存放:兩者允許使用相同的名稱。這不是 ID 的東西或檔名。只有SetDress允許沒有名稱:然後為DressSavedSet/EquipDressSet記錄一個單獨的集合。
void - 无值。使用單獨的線路撥打電話;不要分配結果或將其與true進行比較。儲存和刪除會更改條目,而不是設備。
- 服裝:層數3,4,5,6,7,8,10,12,13,14,17,18,19,20,22,23,24。武器:僅限1和2。頭髮、鬍鬚、背包、動物和銀行不包含在這些套裝中。
- 具體的serial已經加載的東西都記錄在自己的層中。再次儲存相同的名稱會取代該條目。空層也有意義:當恢復時,相應的佔用層將被釋放到自己的背包中。因此,已儲存的完全空集會從其圖層中刪除內容。
- 此集合儲存在運行時狀態中。呼叫本身不會建立文件,也不保證該集將被傳輸到另一個設定檔或新的運行時。首先,將所需的集合儲存為其使用狀態。載入/保存客戶端的一般狀態是一個單獨的機制。
- UO.SetDress · UO.Dress · UO.DressSavedSet · UO.SetArm · UO.Arm · UO.DressSpeed
- 在常規用戶端主機中,此狀態資料取自GetPersistentState管理器,並且對於同一世界/設定檔的腳本/聊天/巨集是通用的,且不屬於一個腳本。另一個進程或明顯獨立的InjectionRuntimeState具有不同的狀態。載入/清除設定檔可以取代它;已儲存的serial仍然會根據載入的世界進行檢查。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
指令是獨立的陳述式。前面的訊息表示呼叫開始,並非伺服器已完成動作的確認。
UO.Print("Calling UO.SetDress");
UO.SetDress();參數與執行流程:
- 照片是現在拍攝的,當時必要的東西已經穿上了。挑戰不裝備背包中的物品。
UO.SetDress("travel");參數與執行流程:
- 不同的儲存庫中使用相同的名稱。 SetDress()也单独存储未命名集合;它不是对以前记录的名称的选择。
return RunScenario();
object? RunScenario()
{
UO.SetArm("battle");
UO.SetDress("battle");
UO.SetDress();
return null;
}參數與執行流程:
- SaveIfReady 檢查控制層:3 - 鞋子用於衣服,1 - 右手用於武器。如果為空,則不會覆蓋快照。回傳的1/0屬於助手,而非SetDress/SetArm。
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()
{
return SaveIfReady("travel");
return null;
}
dynamic SaveIfReady(dynamic name)
{
if (Truth(UO.ObjAtLayerEx(3, UO.Self()) == 0))
{
return 0;
}
UO.SetDress(name);
return 1;
}
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。
參數: 沒有參數。
結果: void / Unit.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.SetDress:SetDress("__stealth_saved_set__").
內部實作程式碼,不能作為獨立腳本執行。
case "setdress": SetDress("__stealth_saved_set__"); return InjectionValue.Unit;參數: name (String)
結果: void / Unit.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.SetDress. -
InjectionScript.Runtime.InjectionApiUO.SetEquip:SetEquip(name, dressSets, dressLayers, "Clothing set.").
內部實作程式碼,不能作為獨立腳本執行。
public void SetDress(string name)
=> SetEquip(name, dressSets, dressLayers, "Clothing set.");Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.SetDressSpeed(object? delayms);在換衣服請求之間設定暫停。
-
delayms- int,毫秒。該值僅限於10..10000(含)。
void - 沒有值。使用單獨的線路撥打電話;完成並不確認伺服器的操作。
- SetDressSpeed 保存狀態。 DressSpeed = max(10, min(10000, 延遲))。保存集的操作利用了這一點;伺服器允許的操作速度不會改變。
- 小於10的值變為10,大於10000的值變為10000。團隊不穿脫物品。
- 在常規用戶端主機中,此狀態資料取自GetPersistentState管理器,並且對於同一世界/設定檔的腳本/聊天/巨集是通用的,且不屬於一個腳本。另一個進程或明顯獨立的InjectionRuntimeState具有不同的狀態。載入/清除設定檔可以取代它;已儲存的serial仍然會根據載入的世界進行檢查。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
指令是獨立的陳述式。前面的訊息表示呼叫開始,並非伺服器已完成動作的確認。
UO.Print("Calling UO.SetDressSpeed");
UO.SetDressSpeed(250);參數與執行流程:
- 在換衣服請求之間設定暫停。
UO.SetDressSpeed(250);參數與執行流程:
- SetDressSpeed 保存狀態。 DressSpeed = max(10, min(10000, 延遲))。保存集的操作利用了這一點;伺服器允許的操作速度不會改變。
return RunScenario();
object? RunScenario()
{
UO.SetDressSpeed(0);
UO.Print(UO.DressSpeed());
return null;
}參數與執行流程:
- 小於10的值變為10,大於10000的值變為10000。團隊不穿脫物品。
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()
{
UO.SetDressSpeed(20000);
UO.Print(UO.DressSpeed());
return null;
}
}C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。
參數: delayms (Integer)
結果: void / Unit.
呼叫時:
內部實作程式碼,不能作為獨立腳本執行。
public void SetDressSpeed(int delayms) => state.DressSpeed = Math.Max(10, Math.Min(10_000, delayms));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.SetStatLockState(object? statNum, object? statState);請求更改特徵模式。
-
statNum- 強制特徵編號:0 - 轉換ToString、1 - DEX、2 - INT。這不是它的目前值,也不是字串的名稱。 -
statState— 強制模式:0 — 增加,1 — 減少,2 — 阻止。這是三個程式碼,不是 bool; true/false 不會取代所有模式的名稱。
void - 無回傳值。結果不能用作成功/錯誤或與 true 進行比較。隨後的讀取顯示的是本機模型,而不是伺服器的確認。
- 有效請求透過GameActions發送一個資料包並立即更改本地模式。伺服器可以應用自己的限制;不能保證技能或統計資料的提高。如果沒有包,未知的技能、無效的索引/模式和遺失的字元將被忽略。
- 強制特徵編號:0 - 轉換.ToString、1 - DEX、2 - INT。這不是它的目前值,也不是字串的名稱。
- ExecuteClientApiCompatibility 選擇指令分支。 Text 讀取技能選擇器,Arg 讀取數字和模式。不可轉換的參數可能會使呼叫失敗並出現轉換錯誤。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
指令是獨立的陳述式。前面的訊息表示呼叫開始,並非伺服器已完成動作的確認。
UO.Print("Calling UO.SetStatLockState");
UO.SetStatLockState(0, 2);參數與執行流程:
- 在範例中,選擇器和錄製時的模式均已明確指定。第一行按名稱選擇技能或按數字選擇特徵。 Print 僅顯示結果。
var selector = 0;
var mode = 2;
UO.SetStatLockState(selector, mode);
UO.Print(Convert.ToString(UO.GetStatLockState(selector)));參數與執行流程:
- 以閾值95.1和模式0/1/2為例。 −1 在改變模式之前被檢查。寫入後,只讀取本機副本;它不等待伺服器回應。
return RunScenario();
object? RunScenario()
{
var selector = 0;
var before = UO.GetStatLockState(selector);
if (Truth(before >= 0) && Truth(before <= 2))
{
UO.SetStatLockState(selector, 0);
UO.Print(Convert.ToString(UO.GetStatLockState(selector)));
}
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 下面給出。選擇器選擇技能/特性,模式設定錄製模式。 ReadValue/ReadMode 傳回原數; ApplyMode 檢查參數,執行操作,且不傳回值。閱讀範例中的UO.Wait(1000)將兩張圖片分開。
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()
{
ApplyMode(0, 2);
return null;
}
void ApplyMode(dynamic selector, dynamic mode)
{
if (Truth(mode < 0) || Truth(mode > 2))
{
return;
}
if (Truth(UO.GetStatLockState(selector) < 0))
{
return;
}
UO.SetStatLockState(selector, mode);
}
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。
參數: statNum (Any), statState (Any)
結果: void / Unit.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetStatLockState:bridge.SetStatLockState(Arg(0), Arg(1)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
內部實作程式碼,不能作為獨立腳本執行。
case "setstatlockstate":
case "setstatstate": bridge.SetStatLockState(Arg(0), Arg(1)); return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.SetStatState(object? statNum, object? statState);請求更改特徵模式。
-
statNum- 強制特徵編號:0 - 轉換ToString、1 - DEX、2 - INT。這不是它的目前值,也不是字串的名稱。 -
statState— 強制模式:0 — 增加,1 — 減少,2 — 阻止。這是三個程式碼,不是 bool; true/false 不會取代所有模式的名稱。
void - 無回傳值。結果不能用作成功/錯誤或與 true 進行比較。隨後的讀取顯示的是本機模型,而不是伺服器的確認。
- 有效請求透過GameActions發送一個資料包並立即更改本地模式。伺服器可以應用自己的限制;不能保證技能或統計資料的提高。如果沒有包,未知的技能、無效的索引/模式和遺失的字元將被忽略。
- 強制特徵編號:0 - 轉換.ToString、1 - DEX、2 - INT。這不是它的目前值,也不是字串的名稱。
- ExecuteClientApiCompatibility 選擇指令分支。 Text 讀取技能選擇器,Arg 讀取數字和模式。不可轉換的參數可能會使呼叫失敗並出現轉換錯誤。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
指令是獨立的陳述式。前面的訊息表示呼叫開始,並非伺服器已完成動作的確認。
UO.Print("Calling UO.SetStatState");
UO.SetStatState(0, 2);參數與執行流程:
- 在範例中,選擇器和錄製時的模式均已明確指定。第一行按名稱選擇技能或按數字選擇特徵。 Print 僅顯示結果。
var selector = 0;
var mode = 2;
UO.SetStatState(selector, mode);
UO.Print(Convert.ToString(UO.GetStatLockState(selector)));參數與執行流程:
- 以閾值95.1和模式0/1/2為例。 −1 在改變模式之前被檢查。寫入後,只讀取本機副本;它不等待伺服器回應。
return RunScenario();
object? RunScenario()
{
var selector = 0;
var before = UO.GetStatLockState(selector);
if (Truth(before >= 0) && Truth(before <= 2))
{
UO.SetStatState(selector, 0);
UO.Print(Convert.ToString(UO.GetStatLockState(selector)));
}
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 下面給出。選擇器選擇技能/特性,模式設定錄製模式。 ReadValue/ReadMode 傳回原數; ApplyMode 檢查參數,執行操作,且不傳回值。閱讀範例中的UO.Wait(1000)將兩張圖片分開。
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()
{
ApplyMode(0, 2);
return null;
}
void ApplyMode(dynamic selector, dynamic mode)
{
if (Truth(mode < 0) || Truth(mode > 2))
{
return;
}
if (Truth(UO.GetStatLockState(selector) < 0))
{
return;
}
UO.SetStatState(selector, mode);
}
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。
參數: statNum (Any), statState (Any)
結果: void / Unit.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetStatLockState:bridge.SetStatLockState(Arg(0), Arg(1)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
內部實作程式碼,不能作為獨立腳本執行。
case "setstatlockstate":
case "setstatstate": bridge.SetStatLockState(Arg(0), Arg(1)); return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.Sex();從客戶端模型中讀取性別和種族代碼。
沒有參數。
int - 相容代碼:0=人類男性,1=人類女性,2=精靈男性,3=精靈女性,4=石像鬼男性,5=精靈石女性。沒有字元也0,所以檢查Exists(self)是否可用。這不是一個簡單的bool女性。
- 讀取已經接收到的本地資料。該請求不會開啟狀態,也不會強制伺服器發送更新。死亡、地圖轉換或物件刪除後,兩次呼叫之間的值可能會改變。
- C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
object? result = UO.Sex();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));參數與執行流程:
- 不帶參數的呼叫指的是 self。性别和种族代码存储在值中。
- Convert.ToString 轉換要輸出的數字,不改變結果的意義。
var value = UO.Sex();
UO.Print("Sex: " + Convert.ToString(value));參數與執行流程:
- 該值在沒有任何參數的情況下被讀取一次。性別和種族代碼用於所示的計算或條件。
- 數字閾值是腳本條件的範例,而不是新的客戶端限制。此欄位儲存上述伺服器單元和限制。
return RunScenario();
object? RunScenario()
{
var value = UO.Sex();
if (Truth(value == 4) || Truth(value == 5))
{
UO.Print("Gargoyle sex/race code");
}
return null;
}
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) 在兩次拍攝之間提供以毫秒為單位的暫停。
- 變化比較:性別和種族代碼。榜樣不會改變世界上的任何事情,也不會無止盡地等待。這一秒鐘內的事件可能會被錯過。
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.Sex();
await Delay(1000);
var after = UO.Sex();
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.Sex:bridge.Sex.
內部實作程式碼,不能作為獨立腳本執行。
case "sex": return new InjectionValue(bridge.Sex);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.Stam();從本地模型讀取目前的耐力。
沒有參數。
int 是Stamina 欄位的值,而不是百分比或bool。 0 可以是實值或缺失資料的指示。零最大值不能用作除數。對別人的mobile來說,其意義可能是未知的。 HP/HitsMax 可能包含相對伺服器比例而不是精確點。 HP=0並不能證明死亡;為此有Dead/IsDead。
- 該命令不會開啟狀態,也不會請求伺服器更新。客户端只读取已经加载的数据。不改变特性,也不发送数据包。
- 結果是單獨閱讀。从Exists到下一个挑战,世界可能会发生变化;多个查询不形成原子快照。
- 讀取物件時,World.Get 會拒絕缺少的或 IsDestroyed 並產生 0。 HP/HitsMax從實體中讀取,包括具有這些欄位的項目; Mana/Stamina - 僅適用於行動裝置。沒有爭論,請閱讀self。不帶參數的同名變體不一定有ID的變體:請參閱簽名。
- 對於遺失或損壞的 Player,不帶參數的讀取也會回傳 0。這適用於直接 Mana/Stamina 及其最大值,而不僅僅是透過 World.Get 的表格。存在的死亡角色可以保留價值。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
object? result = UO.Stam();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));參數與執行流程:
- 不帶參數的呼叫讀取為self。 value 儲存一個數字,Convert.ToString 僅將其轉換為訊息。
var value = UO.Stam();
UO.Print("Stam: " + Convert.ToString(value));參數與執行流程:
- 顯示該欄位應用的閾值或計算。條件中的數字是範例設置,而不是伺服器限制。在除以最大值之前,檢查其正值。
return RunScenario();
object? RunScenario()
{
var value = UO.Stam();
if (Truth(value < 15))
{
UO.Print("Known stamina is below the movement threshold of 15");
}
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 的形式。不含參數的ReadValue讀取self;兩個呼叫由 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 = ReadValue();
await Delay(1000);
var after = ReadValue();
UO.Print("Before: " + Convert.ToString(before) + "; after: " + Convert.ToString(after));
return null;
}
dynamic ReadValue()
{
return UO.Stam();
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
}C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。
參數: 沒有參數。
結果: dynamic / Any.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Stamina:bridge.Stamina.
內部實作程式碼,不能作為獨立腳本執行。
case "stam": return new InjectionValue(bridge.Stamina);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.Stamina();從本地模型讀取目前的耐力。
沒有參數。
int 是Stamina 欄位的值,而不是百分比或bool。 0 可以是實值或缺失資料的指示。零最大值不能用作除數。對別人的mobile來說,其意義可能是未知的。 HP/HitsMax 可能包含相對伺服器比例而不是精確點。 HP=0並不能證明死亡;為此有Dead/IsDead。
- 該命令不會開啟狀態,也不會請求伺服器更新。客户端只读取已经加载的数据。不改变特性,也不发送数据包。
- 結果是單獨閱讀。从Exists到下一个挑战,世界可能会发生变化;多个查询不形成原子快照。
- 讀取物件時,World.Get 會拒絕缺少的或 IsDestroyed 並產生 0。 HP/HitsMax從實體中讀取,包括具有這些欄位的項目; Mana/Stamina - 僅適用於行動裝置。沒有爭論,請閱讀self。不帶參數的同名變體不一定有ID的變體:請參閱簽名。
- 對於遺失或損壞的 Player,不帶參數的讀取也會回傳 0。這適用於直接 Mana/Stamina 及其最大值,而不僅僅是透過 World.Get 的表格。存在的死亡角色可以保留價值。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
var result = UO.Stamina();
UO.Print("Stamina: " + Convert.ToString(result));參數與執行流程:
- 不帶參數的呼叫讀取為self。 value 儲存一個數字,Convert.ToString 僅將其轉換為訊息。
var value = UO.Stamina();
UO.Print("Stamina: " + Convert.ToString(value));參數與執行流程:
- 顯示該欄位應用的閾值或計算。條件中的數字是範例設置,而不是伺服器限制。在除以最大值之前,檢查其正值。
return RunScenario();
object? RunScenario()
{
var value = UO.Stamina();
if (Truth(value < 15))
{
UO.Print("Known stamina is below the movement threshold of 15");
}
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 的形式。不含參數的ReadValue讀取self;兩個呼叫由 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 = ReadValue();
await Delay(1000);
var after = ReadValue();
UO.Print("Before: " + Convert.ToString(before) + "; after: " + Convert.ToString(after));
return null;
}
dynamic ReadValue()
{
return UO.Stamina();
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
}C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。
參數: 沒有參數。
結果: int / Integer.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases [Stamina]. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Stamina:bridge.Stamina.
呼叫時執行已儲存的處理函式 delegate。註冊方法在建立 API 時建立此 delegate。
內部實作程式碼,不能作為獨立腳本執行。
() => bridge.Stamina建立 API: 這些函式負責註冊 API,不會在每次命令呼叫時重新執行。
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.Str();讀取角色目前的力量值(Strength)。
沒有參數。
int — 當前統計點,客戶端模型中的0..65535;不是百分比、ID、技能、鎖定模式或bool。 0 也意味著遺失/刪除的字元或無法存取的物件。與數值要求比較,不==true。這不是統計上限或沒有修飾符的保證基值。
- 此指令不帶參數。使用上面的確切簽名。
- 如果 Player 存在且尚未被銷毀,則讀取 Player.Strength;否則0。存在的死亡角色並不是被移除的物體。此統計數據不是根據HP、法力或耐力計算的。
- GetStr/GetInt/GetDex 接受 ObjID。 PlayerMobile数据仅适用于self;对于另一个serial - 0,甚至对于加载的mobile。別人的特徵不能被取代或猜測。
- 呼叫遊戲流上的讀取,並能夠透過腳本取消等待。不查詢狀態、不開啟目標、不發送資料包、不改變特性、不新增延遲。
- 每次呼叫都會重新讀取本地資料。變數儲存快照;各個讀取可能會收到不同的伺服器更新。非零結果不會測試連線。零可以是一個值,也可以沒有資料。
- 請使用正確的 C# 名稱:
UO.Str()、UO.Strength()、UO.GetStr()或UO.GetStrength()。C# 區分大小寫。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
var result = UO.Str();
UO.Print("Str: " + Convert.ToString(result));參數與執行流程:
- value 儲存數值結果;轉換。 ToString 只是將其格式化為雜誌。沒有爭論或角色動作。
var value = UO.Str();
UO.Print("Strength: " + Convert.ToString(value));參數與執行流程:
- 前後分別1000 ms; UO.Wait 加入範例。 Change=after-before 可以是正數、零或負數。就其本身而言,它並不區分所有中間更新和退出世界。
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var before = UO.Str();
await Delay(1000);
var after = UO.Str();
var change = after - before;
UO.Print("Change: " + Convert.ToString(change));
return null;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));參數與執行流程:
- 最小值 =80 是要求的範例,而不是客戶端限制。 AttributeAtLeast(最小值) 拒絕遺失的字符,讀取一次特徵並傳回 bool: true 或 false 如果 >= 最小值。邏輯意義是透過比較給出的,而不是特徵本身。
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()
{
if (Truth(Truth(AttributeAtLeast(80)) == true))
{
UO.Print("Requirement met");
}
else
{
UO.Print("Requirement not met or no player");
}
return null;
}
dynamic AttributeAtLeast(dynamic minimum)
{
if (Truth(UO.Self() == 0))
{
return false;
}
var value = UO.Str();
return value >= minimum;
}
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.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Strength:bridge.Strength.
內部實作程式碼,不能作為獨立腳本執行。
case "str": return new InjectionValue(bridge.Strength);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.Strength();讀取角色目前功率(Strength、Str)。
沒有參數。
int — 當前統計點,客戶端模型中的0..65535;不是百分比、ID、技能、鎖定模式或bool。 0 也意味著遺失/刪除的字元或無法存取的物件。與數值要求比較,不==true。這不是統計上限或沒有修飾符的保證基值。
- 此指令不帶參數。使用上面的確切簽名。
- 如果 Player 存在且尚未被銷毀,則讀取 Player.Strength;否則0。存在的死亡角色並不是被移除的物體。此統計數據不是根據HP、法力或耐力計算的。
- GetStr/GetInt/GetDex 接受 ObjID。 PlayerMobile数据仅适用于self;对于另一个serial - 0,甚至对于加载的mobile。別人的特徵不能被取代或猜測。
- 呼叫遊戲流上的讀取,並能夠透過腳本取消等待。不查詢狀態、不開啟目標、不發送資料包、不改變特性、不新增延遲。
- 每次呼叫都會重新讀取本地資料。變數儲存快照;各個讀取可能會收到不同的伺服器更新。非零結果不會測試連線。零可以是一個值,也可以沒有資料。
- C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。
UO.Str(),UO.Strength(),UO.GetStr(),UO.GetStrength().
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
var result = UO.Strength();
UO.Print("Strength: " + Convert.ToString(result));參數與執行流程:
- value 儲存數值結果;轉換。 ToString 只是將其格式化為雜誌。沒有爭論或角色動作。
var value = UO.Strength();
UO.Print("Strength: " + Convert.ToString(value));參數與執行流程:
- 前後分別1000 ms; UO.Wait 加入範例。 Change=after-before 可以是正數、零或負數。就其本身而言,它並不區分所有中間更新和退出世界。
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var before = UO.Strength();
await Delay(1000);
var after = UO.Strength();
var change = after - before;
UO.Print("Change: " + Convert.ToString(change));
return null;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));參數與執行流程:
- 最小值 =80 是要求的範例,而不是客戶端限制。 AttributeAtLeast(最小值) 拒絕遺失的字符,讀取一次特徵並傳回 bool: true 或 false 如果 >= 最小值。邏輯意義是透過比較給出的,而不是特徵本身。
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()
{
if (Truth(Truth(AttributeAtLeast(80)) == true))
{
UO.Print("Requirement met");
}
else
{
UO.Print("Requirement not met or no player");
}
return null;
}
dynamic AttributeAtLeast(dynamic minimum)
{
if (Truth(UO.Self() == 0))
{
return false;
}
var value = UO.Strength();
return value >= minimum;
}
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 [Strength]. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Strength:bridge.Strength.
呼叫時執行已儲存的處理函式 delegate。註冊方法在建立 API 時建立此 delegate。
內部實作程式碼,不能作為獨立腳本執行。
() => bridge.Strength建立 API: 這些函式負責註冊 API,不會在每次命令呼叫時重新執行。
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.TicksDead();第一次讀取或標記注意到的死亡。
沒有參數。
int — UO.Timer 從運行時開始算起的十分之一秒,最初為 0。不是死亡人數,也不是死亡持續時間。
- 每次呼叫時,如果bridge.Dead()!=0且ticksDead==0,則儲存Timer()。否則返回前一個ticksDead。復活後,該欄位不會透過此方法重置。
- 這是第一個呼叫標記 TicksDead 观察到的死亡时间,而不是服务器事件的确切时间。在前十分之一秒內的值 0 可以重新安裝。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
var result = UO.TicksDead();
UO.Print("TicksDead: " + Convert.ToString(result));參數與執行流程:
- 第一次讀取或標記注意到的死亡。
UO.Print(UO.TicksDead());參數與執行流程:
- 每次呼叫時,如果bridge.Dead()!=0且ticksDead==0,則儲存Timer()。否則返回前一個ticksDead。復活後,該欄位不會透過此方法重置。
return RunScenario();
object? RunScenario()
{
if (Truth(UO.IsDead()))
{
var stamp = UO.TicksDead();
UO.Print(UO.Timer() - stamp);
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;參數與執行流程:
- 這是第一個呼叫標記 TicksDead 观察到的死亡时间,而不是服务器事件的确切时间。在前十分之一秒內的值 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 before = UO.TicksDead();
UO.Wait(500);
UO.Print(before = UO.TicksDead());
return null;
}
}C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。
參數: 沒有參數。
結果: int / Integer.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.TicksDead. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Dead:bridge.Dead(). -
InjectionScript.Runtime.InjectionApiUO.Timer:Timer().
內部實作程式碼,不能作為獨立腳本執行。
public int TicksDead()
{
if (bridge.Dead() != 0 && ticksDead == 0)
ticksDead = Timer();
return ticksDead;
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.ToggleFly();請求切換您自己的石像鬼的飛行:從地面到飛行,從飛行到地面。這是一個動作,UO.Flying()只檢查狀態。該命令在需要某種模式的路由之前很有用。
沒有參數。
void - 沒有價值。這不是true/false或伺服器確認。處理完伺服器回應後,透過UO.Flying()查看實際結果。
- 唯一的形式是UO.ToggleFly(),沒有ID、座標和參數true/false。與你的個性有關;無法更改其他mobile的航班。
- 使用子命令 0x0032 發送請求 0xBF。呼叫本身不會檢查種族、協議版本、伺服器權限或當前模式;在支援飛行的伺服器上為您自己的石像鬼選擇它。
- 伺服器可能會發生故障,狀態更新會稍後出現。不要在等待循環中呼叫ToggleFly:再次呼叫可能會取消先前的切換。發送一個請求並讀取 Flying,直到逾時。
- 高度Z和飛行標誌是不同的數據。 UO.Flying()回傳int1/true或0/false;如果沒有字元或舊協議,false也是可以的。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
指令是獨立的陳述式。前面的訊息表示呼叫開始,並非伺服器已完成動作的確認。
UO.Print("Calling UO.ToggleFly");
UO.ToggleFly();參數與執行流程:
- 此範例適用於支援飛行的伺服器上的 Gargoyle。如果觀察到飛行,則EnsureFlight(timeoutMs) 回傳1/true,否則回傳0/false。 2000 — 等待限制(以毫秒為單位);每 50 毫秒檢查一次。如果您已經在飛行,則不會呼叫 ToggleFly。最多發送一個請求,然後檢查回應狀態。腳本暫停/調度程序延遲可以增加即時性。
if (Truth(await EnsureFlight(2000)))
{
UO.Print("Flight confirmed; ready for the next stage");
}
else
{
UO.Print("Flight not confirmed; route was not started");
}
async Task<dynamic> EnsureFlight(dynamic timeoutMs)
{
if (!(Truth(UO.Connected())) || Truth(UO.Dead()))
{
return false;
}
if (Truth(UO.Flying()))
{
return true;
}
UO.ToggleFly();
var waited = 0;
while (Truth(waited < timeoutMs))
{
if (!(Truth(UO.Connected())))
{
return false;
}
if (Truth(UO.Flying()))
{
return true;
}
await Delay(50);
waited += 50;
}
return UO.Flying();
}
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;參數與執行流程:
- 最多40等待50毫秒,僅一個請求。 Connected 檢查可防止將關閉視為成功著陸。暫停腳本會增加實際時間。
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
if (Truth(UO.Connected()) && Truth(UO.Flying()))
{
UO.ToggleFly();
var checks = 0;
while (Truth(UO.Connected()) && Truth(UO.Flying()) && Truth(checks < 40))
{
await Delay(50);
checks += 1;
}
if (Truth(UO.Connected()) && !(Truth(UO.Flying())))
{
UO.Print("Landing state observed");
}
else
{
UO.Print("Landing not confirmed");
}
}
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;參數與執行流程:
- 將 Main 指派給一個鍵以進行一次切換請求。這不是EnsureFlight:在航班請求著陸時再次按下。一個按鍵重複或兩個並行腳本可以發送多個請求;這裡沒有安裝限制器。
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()
{
if (Truth(UO.Connected()) && !(Truth(UO.Dead())))
{
UO.ToggleFly();
}
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。
參數: 沒有參數。
結果: void / Unit.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.ToggleFly:bridge.ToggleFly().
內部實作程式碼,不能作為獨立腳本執行。
case "togglefly": bridge.ToggleFly(); return InjectionValue.Unit;