ZH TW UO Topic character - LIHACHTETAN/ClassicUO-Bad-Newbie-CSharp-Scripts-IDE GitHub Wiki
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
家 · C# · IDE · UO API · A–Z · 範例 · Languages
你的性格、特質、抵抗力和裝備的狀態。對於特定實體,如果指令卡中有serial,請使用重載。
UO.Self · UO.CharacterTitle · UO.CharName · UO.CharTitle · UO.GetRace · UO.GetSex · UO.Race · UO.Sex · UO.IsFemale · UO.GetTitle
UO.Armor · UO.GetArmor · UO.HP · UO.GetHP · UO.Life · UO.GetLife · UO.MaxHP · UO.GetMaxHP · UO.MaxLife · UO.GetMaxLife · UO.Mana · UO.GetMana · UO.MaxMana · UO.GetMaxMana · UO.Stam · UO.GetStam · UO.Stamina · UO.GetStamina · UO.MaxStam · UO.GetMaxStam · UO.MaxStamina · UO.GetMaxStamina · UO.Str · UO.GetStr · UO.Strength · UO.GetStrength · UO.Dex · UO.GetDex · UO.Dexterity · UO.GetDexterity · UO.Int · UO.GetInt · UO.Intelligence · UO.GetIntelligence · UO.Weight · UO.GetWeight · UO.MaxWeight · UO.GetMaxWeight · UO.Luck · UO.GetLuck · UO.Gold · UO.GetGold · UO.GetStatLockState · UO.SetStatLockState · UO.SetStatState · UO.RequestStats · UO.GetStatus · UO.GetPlayerStatusText · UO.LastStatus · UO.LastStatusX · UO.LastStatusY · UO.GetARStatus · UO.SetARStatus · UO.SetARExtParams
UO.Alive · UO.GetAlive · UO.IsAlive · UO.Dead · UO.GetDead · UO.IsDead · UO.Hidden · UO.GetHidden · UO.IsHidden · UO.Poison · UO.Poisoned · UO.GetPoisoned · UO.IsPoisoned · UO.Frozen · UO.GetFrozen · UO.IsFrozen · UO.Paralyzed · UO.GetParalisa · UO.GetParalysed · UO.GetParalyzed · UO.IsParalysed · UO.IsParalyzed · UO.Flying · UO.GetFlying · UO.IsFlying · UO.ToggleFly · UO.GetYellowBar · UO.IsYellowHits · UO.TicksDead
UO.PhysicalResist · UO.GetPhysicalResist · UO.ResistPhysical · UO.GetResistPhysical · UO.FireResist · UO.GetFireResist · UO.ResistFire · UO.GetResistFire · UO.ColdResist · UO.GetColdResist · UO.ResistCold · UO.GetResistCold · UO.PoisonResist · UO.GetPoisonResist · UO.ResistPoison · UO.GetResistPoison · UO.EnergyResist · UO.GetEnergyResist · UO.ResistEnergy · UO.GetResistEnergy · UO.GetResist
UO.GetEquipment · UO.ObjAtLayer · UO.ObjAtLayerEx · UO.Equip · UO.EquipT · UO.EquipItems · UO.Unequip · UO.UnequipItems · UO.WearItem · UO.EquipLastWeapon · UO.RemoveEarrings · UO.RemoveHat · UO.RemoveNeckless · UO.RemoveRing
UO.Dress · UO.Undress · UO.SetDress · UO.UnsetDress · UO.DressSavedSet · UO.EquipDressSet · UO.DressSpeed · UO.SetDressSpeed
UO.Arm · UO.Disarm · UO.SetArm · UO.UnsetArm
UO.UseSelfPaperdollScroll · UO.UseOtherPaperdollScroll
所有層:目的、意義和範例。裝備的層數serial和graphic是不同的值。
每個命令卡都有幾個獨立的場景:直接程式碼、函數和類別。以下是精選的簡短場景;限制和全面分析是有可能的。
var value = UO.HP();
UO.Print("HP: " + Convert.ToString(value));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;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.Alive();
int UO.Alive(object? value);檢查是否有沒有死亡跡象的物體。
-
value— 所示形式的可選物件:serial 由數字/十六進位字串、self、lasttarget 或註冊名稱 AddObject。這不是type。没有争论,请阅读self。某些形式的未知文字會導致轉換錯誤;打電話前檢查名字。
數字標誌int:1(滿足條件),0(不滿足條件)。這是一個數字標誌:在 C# 中檢查結果 != 0 或結果 == 0。 int 與 true/false 和 if(結果)的直接比較是不被允許的。 1 - 正serial存在且未標記為死亡。名品也給了1:這不是mobile濾鏡。死亡/丟失的物體給出0。
該命令的結果是一個數字標誌: 1 表示滿足條件, 0 - 未實現。後 var 結果=命令(...)檢查是否(結果!= 0) 或 if (結果 == 0)。儲存一次呼叫的結果:重複呼叫可以再次執行該操作或讀取已經變更的狀態。
- 讀取本機模型:不開啟目標、不要求狀態、不更改標誌、不發送資料包。即使在從字典中刪除條目之前,被破壞的物件也被視為遺失。
- 結果是單獨閱讀。从Exists到下一个挑战,世界可能会发生变化;多个查询不形成原子快照。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
var result = UO.Alive();
UO.Print("Alive: " + Convert.ToString(result));參數與執行流程:
- 空括號讀作self。 active 保存一次結果;true和 false定義了兩個分支。 Print 僅顯示範例訊息。
var active = UO.Alive();
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.Alive(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.Alive();
await Delay(500);
var after = UO.Alive();
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.RegisterCharacterGetterAliases [Alive]. -
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Exists:bridge.Exists(serial). -
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases::IsDeadState:IsDeadState(serial). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Self:bridge.Self.
呼叫時執行已儲存的處理函式 delegate。註冊方法在建立 API 時建立此 delegate。
內部實作程式碼,不能作為獨立腳本執行。
serial => serial > 0 && bridge.Exists(serial) != 0 && IsDeadState(serial) == 0 ? 1 : 0內部實作程式碼,不能作為獨立腳本執行。
() => getter(bridge.Self)建立 API: 這些函式負責註冊 API,不會在每次命令呼叫時重新執行。
參數: value (Any)
結果: int / Integer.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases [Alive]. -
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Exists:bridge.Exists(serial). -
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases::IsDeadState:IsDeadState(serial). -
InjectionScript.Runtime.InjectionApiUO.GetObject:GetObject(value).
呼叫時執行已儲存的處理函式 delegate。註冊方法在建立 API 時建立此 delegate。
內部實作程式碼,不能作為獨立腳本執行。
serial => serial > 0 && bridge.Exists(serial) != 0 && IsDeadState(serial) == 0 ? 1 : 0內部實作程式碼,不能作為獨立腳本執行。
value => getter(GetObject(value))建立 API: 這些函式負責註冊 API,不會在每次命令呼叫時重新執行。
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.Arm(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已經加載的東西都記錄在自己的層中。再次儲存相同的名稱會取代該條目。空層也有意義:當恢復時,相應的佔用層將被釋放到自己的背包中。因此,已儲存的完全空集會從其圖層中刪除內容。
- 此集合儲存在運行時狀態中。呼叫本身不會建立文件,也不保證該集將被傳輸到另一個設定檔或新的運行時。首先,將所需的集合儲存為其使用狀態。載入/保存客戶端的一般狀態是一個單獨的機制。
- 目前和已儲存的 ID 之間的精確匹配將被跳過,而不會再次使用/引發。遺失的物品不會被類似的 type 取代。一項操作的失敗並不影響成功的操作,也不影響其他操作的嘗試;沒有自動回滾。需要連接和載入的東西。拆下後,就使用了真正的背包。
- UO.Set("equipfordress", 0)選擇使用該物品的請求(初始模式);非零值 - 拾取/裝備。在兩種模式下都會檢查所需的耐磨層。已經穿戴過的物品無法透過重複使用來更換。 DressSpeed在接受請求後有效,提款另外尊重DropDelay。
- 即使失敗,Dress 和 Arm 也會傳回 void。請求已被接受的訊息並不表示伺服器已確認。對於依賴穿著的連續性,請以有限的期望檢查實際層數。
- UO.SetDress · UO.Dress · UO.DressSavedSet · UO.SetArm · UO.Arm · UO.DressSpeed
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
指令是獨立的陳述式。前面的訊息表示呼叫開始,並非伺服器已完成動作的確認。
UO.Print("Calling UO.Arm");
UO.Arm("battle");參數與執行流程:
- 所需的集必須提前保存在相同的運行時狀態。不要在每次恢復之前呼叫 SetDress/SetArm:這會用目前專案覆蓋目標。
UO.Arm("battle");參數與執行流程:
- 非零裝備選擇拾取/裝備; 350 — 毫秒DressSpeed。這些設定在範例結束後仍保留在執行時。脫下和穿上由服務生決定。
return RunScenario();
object? RunScenario()
{
UO.Set("equipfordress", 1);
UO.DressSpeed(350);
UO.Arm("battle");
return null;
}參數與執行流程:
- lasttarget — ID 應該包含在先前儲存的集合中的內容。控制層3表示鞋子,1表示右手。 AwaitSlot 透過 100 毫秒暫停進行 20 檢查,且不重複此指令。這僅確認所選項目,而不是整個集合。
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 expected = Asc(UO.GetSerial("lasttarget"), 0);
if (Truth(expected == 0))
{
return 0;
}
UO.Arm("battle");
return AwaitSlot(1, expected);
return null;
}
dynamic AwaitSlot(dynamic layer, dynamic expected)
{
for (int attempt = (int)(1); attempt <= 20; attempt += (int)(1))
{
if (Truth(UO.ObjAtLayerEx(layer, UO.Self()) == expected))
{
return 1;
}
UO.Wait(100);
}
return 0;
}
int Asc(object? value, int fallback = 0)
{
string text = Convert.ToString(value) ?? "";
if (text.StartsWith("0x", StringComparison.OrdinalIgnoreCase))
return int.TryParse(text[2..], System.Globalization.NumberStyles.HexNumber, System.Globalization.CultureInfo.InvariantCulture, out int hex) ? hex : fallback;
return int.TryParse(text, out int number) ? number : fallback;
}
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.Arm. -
InjectionScript.Runtime.InjectionApiUO.Equip:Equip(name, armSets, weaponLayers, "Weapon set requests processed.", "No weapons set with setarm.").
內部實作程式碼,不能作為獨立腳本執行。
public void Arm(string name)
=> Equip(name, armSets, weaponLayers, "Weapon set requests processed.", "No weapons set with setarm.");Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.Armor();讀取目前角色的抵抗力場:物理護甲/抵抗力。
沒有參數。
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.Armor();
UO.Print("Armor: " + Convert.ToString(result));參數與執行流程:
- value 儲存一次呼叫的結果。 Convert.ToString 格式化日誌的數字。沒有任何爭論:你可以讀懂自己的個性。
var value = UO.Armor();
UO.Print("PhysicalResistance: " + Convert.ToString(value));參數與執行流程:
- 前後有UO.Wait(500)毫秒;差異可以是負數。可能會錯過臨時更新。暫停指的是範例,而不是延遲API。
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var before = UO.Armor();
await Delay(500);
var after = UO.Armor();
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.Armor();
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.Armor:bridge.Armor.
內部實作程式碼,不能作為獨立腳本執行。
case "armor": return new InjectionValue(bridge.Armor);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.CharName();讀出角色的名字。
沒有參數。
string 是客戶已知的名稱。空字串意味著空/未知值或沒有物件。這不是 serial 或設定檔路徑。遊戲名稱/標題未依語言IDE翻譯。
- 讀取已經接收到的本地資料。該請求不會開啟狀態,也不會強制伺服器發送更新。死亡、地圖轉換或物件刪除後,兩次呼叫之間的值可能會改變。
- C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
object? result = UO.CharName();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));參數與執行流程:
- 沒有參數:讀取 self。
- 空字串被明確處理;這不是文字“0”。
var text = UO.CharName();
if (Truth(text != ""))
{
UO.Print(text);
}
else
{
UO.Print("Text is unavailable");
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;參數與執行流程:
- 您的字元被讀取,值被儲存為一行。
-
- 運算子連接字串;此結果不需要 Convert.ToString。
return RunScenario();
object? RunScenario()
{
var text = UO.CharName();
UO.Print("Player имя: " + text);
return null;
}參數與執行流程:
- 這兩個稱呼都指的是 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 previous = UO.CharName();
await Delay(1000);
var current = UO.CharName();
if (Truth(previous != current))
{
UO.Print("Updated text: " + current);
}
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.GetName:bridge.GetName(Arg(0, bridge.Self)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0, bridge.Self). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Self:bridge.Self.
內部實作程式碼,不能作為獨立腳本執行。
case "getname":
case "charname": return new InjectionValue(bridge.GetName(Arg(0, bridge.Self)));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.CharTitle();讀出角色的標題。
沒有參數。
string 是客戶已知的標題。空字串意味著空/未知值或沒有物件。這不是 serial 或設定檔路徑。遊戲名稱/標題未依語言IDE翻譯。
- 讀取已經接收到的本地資料。該請求不會開啟狀態,也不會強制伺服器發送更新。死亡、地圖轉換或物件刪除後,兩次呼叫之間的值可能會改變。
- C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
object? result = UO.CharTitle();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));參數與執行流程:
- 沒有參數:讀取 self。
- 空字串被明確處理;這不是文字“0”。
var text = UO.CharTitle();
if (Truth(text != ""))
{
UO.Print(text);
}
else
{
UO.Print("Text is unavailable");
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;參數與執行流程:
- 您的字元被讀取,值被儲存為一行。
-
- 運算子連接字串;此結果不需要 Convert.ToString。
return RunScenario();
object? RunScenario()
{
var text = UO.CharTitle();
UO.Print("Player титул: " + text);
return null;
}參數與執行流程:
- 這兩個稱呼都指的是 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 previous = UO.CharTitle();
await Delay(1000);
var current = UO.CharTitle();
if (Truth(previous != current))
{
UO.Print("Updated text: " + current);
}
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.CharacterTitle:bridge.CharacterTitle.
內部實作程式碼,不能作為獨立腳本執行。
case "chartitle": return new InjectionValue(bridge.CharacterTitle);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
string UO.CharacterTitle();讀出角色的標題。
沒有參數。
string 是客戶已知的標題。空字串意味著空/未知值或沒有物件。這不是 serial 或設定檔路徑。遊戲名稱/標題未依語言IDE翻譯。
- 讀取已經接收到的本地資料。該請求不會開啟狀態,也不會強制伺服器發送更新。死亡、地圖轉換或物件刪除後,兩次呼叫之間的值可能會改變。
- C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
var result = UO.CharacterTitle();
UO.Print("CharacterTitle: " + Convert.ToString(result));參數與執行流程:
- 沒有參數:讀取 self。
- 空字串被明確處理;這不是文字“0”。
var text = UO.CharacterTitle();
if (Truth(text != ""))
{
UO.Print(text);
}
else
{
UO.Print("Text is unavailable");
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;參數與執行流程:
- 您的字元被讀取,值被儲存為一行。
-
- 運算子連接字串;此結果不需要 Convert.ToString。
return RunScenario();
object? RunScenario()
{
var text = UO.CharacterTitle();
UO.Print("Player титул: " + text);
return null;
}參數與執行流程:
- 這兩個稱呼都指的是 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 previous = UO.CharacterTitle();
await Delay(1000);
var current = UO.CharacterTitle();
if (Truth(previous != current))
{
UO.Print("Updated text: " + current);
}
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。
參數: 沒有參數。
結果: string / String.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases [CharacterTitle]. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.CharacterTitle:bridge.CharacterTitle.
呼叫時執行已儲存的處理函式 delegate。註冊方法在建立 API 時建立此 delegate。
內部實作程式碼,不能作為獨立腳本執行。
() => bridge.CharacterTitle建立 API: 這些函式負責註冊 API,不會在每次命令呼叫時重新執行。
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.ColdResist();讀取目前角色的抵抗力場:冷。
沒有參數。
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.ColdResist();
UO.Print("ColdResist: " + Convert.ToString(result));參數與執行流程:
- value 儲存一次呼叫的結果。 Convert.ToString 格式化日誌的數字。沒有任何爭論:你可以讀懂自己的個性。
var value = UO.ColdResist();
UO.Print("ColdResistance: " + Convert.ToString(value));參數與執行流程:
- 前後有UO.Wait(500)毫秒;差異可以是負數。可能會錯過臨時更新。暫停指的是範例,而不是延遲API。
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var before = UO.ColdResist();
await Delay(500);
var after = UO.ColdResist();
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.ColdResist();
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.ColdResistance:bridge.ColdResistance.
內部實作程式碼,不能作為獨立腳本執行。
case "coldresist": return new InjectionValue(bridge.ColdResistance);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.Dead();
int UO.Dead(object? id);檢查角色死亡。
-
id— 所示形式的可選物件:serial 由數字/十六進位字串、self、lasttarget 或註冊名稱 AddObject。這不是type。没有争论,请阅读self。某些形式的未知文字會導致轉換錯誤;打電話前檢查名字。
數字標誌int:1(滿足條件),0(不滿足條件)。這是一個數字標誌:在 C# 中檢查結果 != 0 或結果 == 0。 int 與 true/false 和 if(結果)的直接比較是不允許的。 1 - mobile 有 IsDead,0 無符號或 mobile 不存在。 HP=0本身並不意味著死亡。
該命令的結果是一個數字標誌: 1 表示滿足條件, 0 - 未實現。後 var 結果=命令(...)檢查是否(結果!= 0) 或 if (結果 == 0)。儲存一次呼叫的結果:重複呼叫可以再次執行該操作或讀取已經變更的狀態。
- 讀取本機模型:不開啟目標、不要求狀態、不更改標誌、不發送資料包。即使在從字典中刪除條目之前,被破壞的物件也被視為遺失。
- 結果是單獨閱讀。从Exists到下一个挑战,世界可能会发生变化;多个查询不形成原子快照。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
var result = UO.Dead();
UO.Print("Dead: " + Convert.ToString(result));參數與執行流程:
- 空括號讀作self。 active 保存一次結果;true和 false定義了兩個分支。 Print 僅顯示範例訊息。
var active = UO.Dead();
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.Dead(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.Dead();
await Delay(500);
var after = UO.Dead();
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.Dead. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Dead:bridge.Dead().
內部實作程式碼,不能作為獨立腳本執行。
public int Dead() => bridge.Dead();參數: id (Any)
結果: int / Integer.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.Dead. -
InjectionScript.Runtime.InjectionApiUO.GetObject:GetObject(id). -
InjectionScript.Runtime.InjectionApiUO.Dead:Dead(). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.IsDead:bridge.IsDead(serial). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Self:bridge.Self.
內部實作程式碼,不能作為獨立腳本執行。
public int Dead(InjectionValue id)
{
int serial = GetObject(id);
if (serial == bridge.Self)
return Dead();
return serial > 0 ? bridge.IsDead(serial) : 0;
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.Dex();讀取角色目前的敏捷度(Dexterity,DEX)。
沒有參數。
int — 當前統計點,客戶端模型中的0..65535;不是百分比、ID、技能、鎖定模式或bool。 0 也意味著遺失/刪除的字元或無法存取的物件。與數值要求比較,不==true。這不是統計上限或沒有修飾符的保證基值。
- 此指令不帶參數。使用上面的確切簽名。
- 如果 Player 存在且尚未被銷毀,則讀取 Player.Dexterity;否則0。存在的死亡角色並不是被移除的物體。此統計數據不是根據HP、法力或耐力計算的。
- GetStr/GetInt/GetDex 接受 ObjID。 PlayerMobile数据仅适用于self;对于另一个serial - 0,甚至对于加载的mobile。別人的特徵不能被取代或猜測。
- 呼叫遊戲流上的讀取,並能夠透過腳本取消等待。不查詢狀態、不開啟目標、不發送資料包、不改變特性、不新增延遲。
- 每次呼叫都會重新讀取本地資料。變數儲存快照;各個讀取可能會收到不同的伺服器更新。非零結果不會測試連線。零可以是一個值,也可以沒有資料。
- C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。
UO.Dex(),UO.Dexterity(),UO.GetDex(),UO.GetDexterity().
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
var result = UO.Dex();
UO.Print("Dex: " + Convert.ToString(result));參數與執行流程:
- value 儲存數值結果;轉換。 ToString 只是將其格式化為雜誌。沒有爭論或角色動作。
var value = UO.Dex();
UO.Print("Dexterity: " + Convert.ToString(value));參數與執行流程:
- 前後分別1000 ms; UO.Wait 加入範例。 Change=after-before 可以是正數、零或負數。就其本身而言,它並不區分所有中間更新和退出世界。
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var before = UO.Dex();
await Delay(1000);
var after = UO.Dex();
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.Dex();
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.Dexterity:bridge.Dexterity.
內部實作程式碼,不能作為獨立腳本執行。
case "dex": return new InjectionValue(bridge.Dexterity);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.Dexterity();讀取角色目前的敏捷度(Dexterity,DEX)。
沒有參數。
int — 當前統計點,客戶端模型中的0..65535;不是百分比、ID、技能、鎖定模式或bool。 0 也意味著遺失/刪除的字元或無法存取的物件。與數值要求比較,不==true。這不是統計上限或沒有修飾符的保證基值。
- 此指令不帶參數。使用上面的確切簽名。
- 如果 Player 存在且尚未被銷毀,則讀取 Player.Dexterity;否則0。存在的死亡角色並不是被移除的物體。此統計數據不是根據HP、法力或耐力計算的。
- GetStr/GetInt/GetDex 接受 ObjID。 PlayerMobile数据仅适用于self;对于另一个serial - 0,甚至对于加载的mobile。別人的特徵不能被取代或猜測。
- 呼叫遊戲流上的讀取,並能夠透過腳本取消等待。不查詢狀態、不開啟目標、不發送資料包、不改變特性、不新增延遲。
- 每次呼叫都會重新讀取本地資料。變數儲存快照;各個讀取可能會收到不同的伺服器更新。非零結果不會測試連線。零可以是一個值,也可以沒有資料。
- C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。
UO.Dex(),UO.Dexterity(),UO.GetDex(),UO.GetDexterity().
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
var result = UO.Dexterity();
UO.Print("Dexterity: " + Convert.ToString(result));參數與執行流程:
- value 儲存數值結果;轉換。 ToString 只是將其格式化為雜誌。沒有爭論或角色動作。
var value = UO.Dexterity();
UO.Print("Dexterity: " + Convert.ToString(value));參數與執行流程:
- 前後分別1000 ms; UO.Wait 加入範例。 Change=after-before 可以是正數、零或負數。就其本身而言,它並不區分所有中間更新和退出世界。
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var before = UO.Dexterity();
await Delay(1000);
var after = UO.Dexterity();
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.Dexterity();
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 [Dexterity]. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Dexterity:bridge.Dexterity.
呼叫時執行已儲存的處理函式 delegate。註冊方法在建立 API 時建立此 delegate。
內部實作程式碼,不能作為獨立腳本執行。
() => bridge.Dexterity建立 API: 這些函式負責註冊 API,不會在每次命令呼叫時重新執行。
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.Disarm();移除手中的武器和盾牌:層1和2。不影響衣物。
沒有參數。
數字標誌int:1(滿足條件)- 接受本地操作,0(不滿足條件)- 拒絕。這不是伺服器確認,不是ID,也不是數量。稍後伺服器可能會發生故障;接聽後檢查實際設備。
該命令的結果是一個數字標誌: 1 表示滿足條件, 0 - 未實現。後 var 結果=命令(...)檢查是否(結果!= 0) 或 if (結果 == 0)。儲存一次呼叫的結果:重複呼叫可以再次執行該操作或讀取已經變更的狀態。
- 需要裝載物品並徒手拖曳。取下后,需要实际背包self:不使用备用背包GrabBag。未知、損壞和不合適的物品將被拒絕。其他人的物品無法透過UnequipItems移除。集合不是原子事務。
- EquipItems/UnequipItems 在接受操作之後、下一個元素之前應用DressSpeed; Disarm/Undress - 在每個佔用層之後。當提款被接受時,提款仍遵守DropDelay。其他運行時的相同設定不變;加速不會超越伺服器限制。
- 不正確的呼叫形式、未知的圖層名稱或不可轉換為數字的值可能會導致腳本錯誤,而不是0。設備快照僅包含已經載入的資料。在助手中,ChangeAndConfirm層=1是右手:對於另一件事,通過它的真實層。
- 對於數組,1表示接受所有列出的操作;如果拒絕,0將被退回。剩餘的元素仍然被處理,沒有回滾。空數組會產生 1 且不執行任何操作。當所需層已為空時,Disarm/Undress也給出1;部分失敗給出0。
- UO.EquipItems · UO.UnequipItems · UO.DressSpeed · UO.DropDelay · UO.ObjAtLayerEx
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
var result = UO.Disarm();
UO.Print("Disarm: " + Convert.ToString(result));參數與執行流程:
- 首先,在遊戲中選擇適當的項目:lasttarget - 它的ID。在Equip/WearItem範例中,1層需要副手武器。 Unequip(1) 移除右手; Disarm/Undress 使用自己的固定圖層。拒绝后不会自动重播。
return UO.Disarm();參數與執行流程:
- 裝備方面,0x0F5E是劍的例子,0x1B76是盾的例子。 FindType在背包裝載的物品中尋找它們,ASC轉換返回的十六進制-ID。為了刪除,讀取自己的目前層。如果所需的項目不可用,則腳本結束。陣列儲存兩個ID;每個項目都被完全轉移。
return RunScenario();
object? RunScenario()
{
var first = UO.ObjAtLayerEx(1, UO.Self());
var second = UO.ObjAtLayerEx(2, UO.Self());
if (Truth(first == 0) || Truth(second == 0))
{
return 0;
}
UO.AddObject("saved_first", first);
UO.AddObject("saved_second", second);
return UO.Disarm();
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;參數與執行流程:
- ChangeAndConfirm 執行一次指令。然後檢查實際狀態最多20次,暫停100毫秒。 1 - 檢查看到預期狀態,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()
{
return ChangeAndConfirm();
return null;
}
dynamic ChangeAndConfirm()
{
if (!(Truth(UO.Disarm())))
{
return 0;
}
dynamic[] layers = new dynamic[checked((int)(1) + 1)];
layers[0] = 1;
layers[1] = 2;
for (int attempt = (int)(1); attempt <= 20; attempt += (int)(1))
{
dynamic empty = true;
for (int i = (int)(0); i <= ArrayLength(layers) - 1; i += (int)(1))
{
if (Truth(UO.ObjAtLayerEx(layers[i], UO.Self()) != 0))
{
empty = false;
}
}
if (Truth(empty))
{
return 1;
}
UO.Wait(100);
}
return 0;
}
int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。
參數: 沒有參數。
結果: int / Integer.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.Disarm. -
InjectionScript.Runtime.InjectionApiUO.Unequip:Unequip(weaponLayers, "Weapons disarmed.").
內部實作程式碼,不能作為獨立腳本執行。
public int Disarm()
=> Unequip(weaponLayers, "Weapons disarmed.");int UO.Dismount();Mount 與 Dismount 直接傳送使用物件請求,不需要手動雙擊,也不會套用戰鬥模式攻擊行為。int 是 Mount 層目前物品的 serial,並非成功旗標。伺服器回覆是非同步的:Mount 可能仍回傳 0,Dismount 可能回傳移除前的 serial。請在回覆後檢查 ObjAtLayer("Mount")。
沒有參數。
每個程式碼區塊都是完整的獨立 .csx。請替換範例 serial、type 與座標;參數順序及 C# 具名參數依照簽章。
#dismount
每個程式碼區塊都是完整的獨立 .csx。請替換範例 serial、type 與座標;參數順序及 C# 具名參數依照簽章。
int mountLayerSerial = UO.Dismount();
UO.Print(UO.Int2Hex(mountLayerSerial));var before = UO.ObjAtLayer("Mount");
int currentSerial = UO.Dismount();
UO.Print($"{before} -> {UO.Int2Hex(currentSerial)}");UO.Dismount();
await WaitAsync(250);
UO.Print(Convert.ToString(UO.ObjAtLayer("Mount")));new CommandSample().Execute(UO);
sealed class CommandSample
{
public void Execute(global::ClassicUO.CSharp.CSharpGameApi api)
{
int mountLayerSerial = api.Dismount();
api.Print(api.Int2Hex(mountLayerSerial));
}
}CSharpGameApi.Dismount
-> CSharpScriptGlobals
-> InjectionScript.Runtime.InjectionApiUO.Dismount
ClassicUOInjectionApiBridge -> NativeMountController.Request
-> OutgoingPackets.Send_UseObjectRequest (0x06)
-> MountedLayerSerialUnsafe -> Player.FindItemByLayer(Layer.Mount)
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.Dress(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已經加載的東西都記錄在自己的層中。再次儲存相同的名稱會取代該條目。空層也有意義:當恢復時,相應的佔用層將被釋放到自己的背包中。因此,已儲存的完全空集會從其圖層中刪除內容。
- 此集合儲存在運行時狀態中。呼叫本身不會建立文件,也不保證該集將被傳輸到另一個設定檔或新的運行時。首先,將所需的集合儲存為其使用狀態。載入/保存客戶端的一般狀態是一個單獨的機制。
- 目前和已儲存的 ID 之間的精確匹配將被跳過,而不會再次使用/引發。遺失的物品不會被類似的 type 取代。一項操作的失敗並不影響成功的操作,也不影響其他操作的嘗試;沒有自動回滾。需要連接和載入的東西。拆下後,就使用了真正的背包。
- UO.Set("equipfordress", 0)選擇使用該物品的請求(初始模式);非零值 - 拾取/裝備。在兩種模式下都會檢查所需的耐磨層。已經穿戴過的物品無法透過重複使用來更換。 DressSpeed在接受請求後有效,提款另外尊重DropDelay。
- 即使失敗,Dress 和 Arm 也會傳回 void。請求已被接受的訊息並不表示伺服器已確認。對於依賴穿著的連續性,請以有限的期望檢查實際層數。
- UO.SetDress · UO.Dress · UO.DressSavedSet · UO.SetArm · UO.Arm · UO.DressSpeed
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
指令是獨立的陳述式。前面的訊息表示呼叫開始,並非伺服器已完成動作的確認。
UO.Print("Calling UO.Dress");
UO.Dress("travel");參數與執行流程:
- 所需的集必須提前保存在相同的運行時狀態。不要在每次恢復之前呼叫 SetDress/SetArm:這會用目前專案覆蓋目標。
UO.Dress("travel");參數與執行流程:
- 非零裝備選擇拾取/裝備; 350 — 毫秒DressSpeed。這些設定在範例結束後仍保留在執行時。脫下和穿上由服務生決定。
return RunScenario();
object? RunScenario()
{
UO.Set("equipfordress", 1);
UO.DressSpeed(350);
UO.Dress("travel");
return null;
}參數與執行流程:
- lasttarget — ID 應該包含在先前儲存的集合中的內容。控制層3表示鞋子,1表示右手。 AwaitSlot 透過 100 毫秒暫停進行 20 檢查,且不重複此指令。這僅確認所選項目,而不是整個集合。
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 expected = Asc(UO.GetSerial("lasttarget"), 0);
if (Truth(expected == 0))
{
return 0;
}
UO.Dress("travel");
return AwaitSlot(3, expected);
return null;
}
dynamic AwaitSlot(dynamic layer, dynamic expected)
{
for (int attempt = (int)(1); attempt <= 20; attempt += (int)(1))
{
if (Truth(UO.ObjAtLayerEx(layer, UO.Self()) == expected))
{
return 1;
}
UO.Wait(100);
}
return 0;
}
int Asc(object? value, int fallback = 0)
{
string text = Convert.ToString(value) ?? "";
if (text.StartsWith("0x", StringComparison.OrdinalIgnoreCase))
return int.TryParse(text[2..], System.Globalization.NumberStyles.HexNumber, System.Globalization.CultureInfo.InvariantCulture, out int hex) ? hex : fallback;
return int.TryParse(text, out int number) ? number : fallback;
}
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.Dress. -
InjectionScript.Runtime.InjectionApiUO.Equip:Equip(name, dressSets, dressLayers, "Clothing set requests processed.", "No clothing set with setdress.").
內部實作程式碼,不能作為獨立腳本執行。
public void Dress(string name)
=> Equip(name, dressSets, dressLayers, "Clothing set requests processed.", "No clothing set with setdress.");Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.DressSavedSet();恢復不帶名字叫UO.SetDress()保存的一套衣服。
沒有參數。
事實上,數字標誌int:1(滿足條件)-所有必要的請求都被本地接受或必要的層已經匹配; 0(未滿足條件)- 未撥號、未連接或至少一個請求被拒絕。註冊object?允許這個int。這不是ID、穿戴的物品數量或服務器確認。
該命令的結果是一個數字標誌: 1 表示滿足條件, 0 - 未實現。後 var 結果=命令(...)檢查是否(結果!= 0) 或 if (結果 == 0)。儲存一次呼叫的結果:重複呼叫可以再次執行該操作或讀取已經變更的狀態。
- 服裝:層數3,4,5,6,7,8,10,12,13,14,17,18,19,20,22,23,24。武器:僅限1和2。頭髮、鬍鬚、背包、動物和銀行不包含在這些套裝中。
- 具體的serial已經加載的東西都記錄在自己的層中。再次儲存相同的名稱會取代該條目。空層也有意義:當恢復時,相應的佔用層將被釋放到自己的背包中。因此,已儲存的完全空集會從其圖層中刪除內容。
- 此集合儲存在運行時狀態中。呼叫本身不會建立文件,也不保證該集將被傳輸到另一個設定檔或新的運行時。首先,將所需的集合儲存為其使用狀態。載入/保存客戶端的一般狀態是一個單獨的機制。
- 目前和已儲存的 ID 之間的精確匹配將被跳過,而不會再次使用/引發。遺失的物品不會被類似的 type 取代。一項操作的失敗並不影響成功的操作,也不影響其他操作的嘗試;沒有自動回滾。需要連接和載入的東西。拆下後,就使用了真正的背包。
- UO.Set("equipfordress", 0)選擇使用該物品的請求(初始模式);非零值 - 拾取/裝備。在兩種模式下都會檢查所需的耐磨層。已經穿戴過的物品無法透過重複使用來更換。 DressSpeed在接受請求後有效,提款另外尊重DropDelay。
- 即使失敗,Dress 和 Arm 也會傳回 null。請求已被接受的訊息並不表示伺服器已確認。對於依賴穿著的連續性,請以有限的期望檢查實際層數。
- UO.SetDress · UO.Dress · UO.DressSavedSet · UO.SetArm · UO.Arm · UO.DressSpeed
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
object? result = UO.DressSavedSet();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));參數與執行流程:
- 所需的集必須提前保存在相同的運行時狀態。不要在每次恢復之前呼叫 SetDress/SetArm:這會用目前專案覆蓋目標。
return UO.DressSavedSet();參數與執行流程:
- 非零裝備選擇拾取/裝備; 350 — 毫秒DressSpeed。這些設定在範例結束後仍保留在執行時。脫下和穿上由服務生決定。
return RunScenario();
object? RunScenario()
{
UO.Set("equipfordress", 1);
UO.DressSpeed(350);
return UO.DressSavedSet();
return null;
}參數與執行流程:
- lasttarget — ID 應該包含在先前儲存的集合中的內容。控制層3表示鞋子,1表示右手。 AwaitSlot 透過 100 毫秒暫停進行 20 檢查,且不重複此指令。這僅確認所選項目,而不是整個集合。
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 expected = Asc(UO.GetSerial("lasttarget"), 0);
if (Truth(expected == 0))
{
return 0;
}
if (!(Truth(UO.DressSavedSet())))
{
return 0;
}
return AwaitSlot(3, expected);
return null;
}
dynamic AwaitSlot(dynamic layer, dynamic expected)
{
for (int attempt = (int)(1); attempt <= 20; attempt += (int)(1))
{
if (Truth(UO.ObjAtLayerEx(layer, UO.Self()) == expected))
{
return 1;
}
UO.Wait(100);
}
return 0;
}
int Asc(object? value, int fallback = 0)
{
string text = Convert.ToString(value) ?? "";
if (text.StartsWith("0x", StringComparison.OrdinalIgnoreCase))
return int.TryParse(text[2..], System.Globalization.NumberStyles.HexNumber, System.Globalization.CultureInfo.InvariantCulture, out int hex) ? hex : fallback;
return int.TryParse(text, out int number) ? number : fallback;
}
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. -
InjectionScript.Runtime.InjectionApiUO.Equip:Equip("__stealth_saved_set__", dressSets, dressLayers, "Clothing set requests processed.", "No clothing set with setdress.").
內部實作程式碼,不能作為獨立腳本執行。
case "dresssavedset":
case "equipdressset": return new InjectionValue(Equip("__stealth_saved_set__", dressSets, dressLayers, "Clothing set requests processed.", "No clothing set with setdress."));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.DressSpeed();
dynamic UO.DressSpeed(object? value);讀取或設定目前運轉時間中穿衣/脫衣操作之間的暫停。有助于避免针对服务器规则过快地发送一系列操作。
-
value- 可選毫秒。不帶爭論-閱讀;帶參數的值限制為10..10000。如果沒有設定延遲時,runtime的初始值可以是0;您不能使用此指令寫入0。
不含參數:int,目前毫秒。帶參數:null,無回傳值;然後單獨讀取UO.DressSpeed()。這不是bool。
- EquipItems/UnequipItems 在接受操作之後、下一個元素之前應用DressSpeed; Disarm/Undress - 在每個佔用層之後。當提款被接受時,提款仍遵守DropDelay。其他運行時的相同設定不變;加速不會超越伺服器限制。
- UO.EquipItems · UO.UnequipItems · UO.DressSpeed · UO.DropDelay · UO.ObjAtLayerEx
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
object? result = UO.DressSpeed();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));參數與執行流程:
- 讀取目前暫停並選擇下一組的最小值; 0表示尚未設定的延遲。
var delay = UO.DressSpeed();
if (Truth(delay < 350))
{
UO.DressSpeed(350);
}
return UO.DressSpeed();
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;參數與執行流程:
- 設定350 ms並單獨檢查儲存值。您不能將 setter 的結果指派給變數:setter 傳回 Unit。
return RunScenario();
object? RunScenario()
{
UO.DressSpeed(350);
return UO.DressSpeed();
return null;
}參數與執行流程:
- ConfigureDressDelay 接受腳本設定。 15000僅限於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()
{
return ConfigureDressDelay(15000);
return null;
}
dynamic ConfigureDressDelay(dynamic requested)
{
UO.DressSpeed(requested);
return UO.DressSpeed();
}
}C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。
參數: 沒有參數。
結果: dynamic / Any.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.SetDressSpeed:SetDressSpeed(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
內部實作程式碼,不能作為獨立腳本執行。
case "dressspeed":
if (arguments.Length > 0) { SetDressSpeed(Arg(0)); return InjectionValue.Unit; }
return new InjectionValue(state.DressSpeed);參數: value (Any)
結果: dynamic / Any.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.SetDressSpeed:SetDressSpeed(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
內部實作程式碼,不能作為獨立腳本執行。
case "dressspeed":
if (arguments.Length > 0) { SetDressSpeed(Arg(0)); return InjectionValue.Unit; }
return new InjectionValue(state.DressSpeed);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.EnergyResist();讀取目前角色的阻力場:能量。
沒有參數。
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.EnergyResist();
UO.Print("EnergyResist: " + Convert.ToString(result));參數與執行流程:
- value 儲存一次呼叫的結果。 Convert.ToString 格式化日誌的數字。沒有任何爭論:你可以讀懂自己的個性。
var value = UO.EnergyResist();
UO.Print("EnergyResistance: " + Convert.ToString(value));參數與執行流程:
- 前後有UO.Wait(500)毫秒;差異可以是負數。可能會錯過臨時更新。暫停指的是範例,而不是延遲API。
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var before = UO.EnergyResist();
await Delay(500);
var after = UO.EnergyResist();
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.EnergyResist();
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.EnergyResistance:bridge.EnergyResistance.
內部實作程式碼,不能作為獨立腳本執行。
case "energyresist": return new InjectionValue(bridge.EnergyResistance);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.Equip(object? layer, object? id);將所選項目裝備到角色的指定層。
-
layer- 層數,例如 1 - 右手,2 - 左手。 Equip和Unequip也接受圖層名稱,例如「Rhand」。 WearItem 使用數字層。該層必須與物品的可穿戴層相符;它不是graphic,也不是ID。 - 載入的特定事物的
id- ID:整數、十六進位字串、「lasttarget」或名稱AddObject。這不是type。例如0x0F5E先尋找graphic的劍並透過ID得到它。 - 載入的特定事物的
ObjID- ID:整數、十六進位字串、「lasttarget」或名稱AddObject。這不是type。例如0x0F5E先尋找graphic的劍並透過ID得到它。
數字標誌int:1(滿足條件)- 接受本地操作,0(不滿足條件)- 拒絕。這不是伺服器確認,不是ID,也不是數量。稍後伺服器可能會發生故障;接聽後檢查實際設備。
該命令的結果是一個數字標誌: 1 表示滿足條件, 0 - 未實現。後 var 結果=命令(...)檢查是否(結果!= 0) 或 if (結果 == 0)。儲存一次呼叫的結果:重複呼叫可以再次執行該操作或讀取已經變更的狀態。
- 需要裝載物品並徒手拖曳。取下后,需要实际背包self:不使用备用背包GrabBag。未知、損壞和不合適的物品將被拒絕。其他人的物品無法透過UnequipItems移除。集合不是原子事務。
- EquipItems/UnequipItems 在接受操作之後、下一個元素之前應用DressSpeed; Disarm/Undress - 在每個佔用層之後。當提款被接受時,提款仍遵守DropDelay。其他運行時的相同設定不變;加速不會超越伺服器限制。
- 不正確的呼叫形式、未知的圖層名稱或不可轉換為數字的值可能會導致腳本錯誤,而不是0。設備快照僅包含已經載入的資料。在助手中,ChangeAndConfirm層=1是右手:對於另一件事,通過它的真實層。
- UO.EquipItems · UO.UnequipItems · UO.DressSpeed · UO.DropDelay · UO.ObjAtLayerEx
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
int item = UO.LastTarget();
if (item != 0)
UO.Print("Accepted flag: " + UO.Equip(1, item));參數與執行流程:
- 首先,在遊戲中選擇適當的項目:lasttarget - 它的ID。在Equip/WearItem範例中,1層需要副手武器。 Unequip(1) 移除右手; Disarm/Undress 使用自己的固定圖層。拒绝后不会自动重播。
var item = Asc(UO.GetSerial("lasttarget"), 0);
if (Truth(item == 0))
{
return 0;
}
return UO.Equip(1, item);
int Asc(object? value, int fallback = 0) { string text = Convert.ToString(value) ?? ""; if (text.StartsWith("0x", StringComparison.OrdinalIgnoreCase)) return int.TryParse(text[2..], System.Globalization.NumberStyles.HexNumber, System.Globalization.CultureInfo.InvariantCulture, out int hex) ? hex : fallback; return int.TryParse(text, out int number) ? number : fallback; }
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;參數與執行流程:
- 裝備方面,0x0F5E是劍的例子,0x1B76是盾的例子。 FindType在背包裝載的物品中尋找它們,ASC轉換返回的十六進制-ID。為了刪除,讀取自己的目前層。如果所需的項目不可用,則腳本結束。陣列儲存兩個ID;每個項目都被完全轉移。
return RunScenario();
object? RunScenario()
{
var first = Asc(UO.FindType(0x0F5E, -1, "backpack"), 0);
var second = Asc(UO.FindType(0x1B76, -1, "backpack"), 0);
if (Truth(first == 0) || Truth(second == 0))
{
return 0;
}
UO.AddObject("saved_first", first);
UO.AddObject("saved_second", second);
var firstOk = UO.Equip(1, first);
var secondOk = UO.Equip(2, second);
return firstOk != 0 && secondOk != 0;
return null;
}
int Asc(object? value, int fallback = 0)
{
string text = Convert.ToString(value) ?? "";
if (text.StartsWith("0x", StringComparison.OrdinalIgnoreCase))
return int.TryParse(text[2..], System.Globalization.NumberStyles.HexNumber, System.Globalization.CultureInfo.InvariantCulture, out int hex) ? hex : fallback;
return int.TryParse(text, out int number) ? number : fallback;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;參數與執行流程:
- ChangeAndConfirm 執行一次指令。然後檢查實際狀態最多20次,暫停100毫秒。 1 - 檢查看到預期狀態,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 item = Asc(UO.GetSerial("lasttarget"), 0);
if (Truth(item == 0))
{
return 0;
}
return ChangeAndConfirm(1, item);
return null;
}
dynamic ChangeAndConfirm(dynamic layer, dynamic item)
{
if (Truth(item == 0))
{
return 0;
}
if (!(Truth(UO.Equip(layer, item))))
{
return 0;
}
for (int attempt = (int)(1); attempt <= 20; attempt += (int)(1))
{
if (Truth(UO.ObjAtLayerEx(layer, UO.Self()) == item))
{
return 1;
}
UO.Wait(100);
}
return 0;
}
int Asc(object? value, int fallback = 0)
{
string text = Convert.ToString(value) ?? "";
if (text.StartsWith("0x", StringComparison.OrdinalIgnoreCase))
return int.TryParse(text[2..], System.Globalization.NumberStyles.HexNumber, System.Globalization.CultureInfo.InvariantCulture, out int hex) ? hex : fallback;
return int.TryParse(text, out int number) ? number : fallback;
}
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。
參數: layer (Any/String), id (Any/Integer/String)
結果: int / Any.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.Equip:Equip(Text(0), Arg(1)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(0). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(1). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Equip:bridge.Equip(Arg(0), Arg(1)).
內部實作程式碼,不能作為獨立腳本執行。
case "equip":
return new InjectionValue(arguments[0].Kind == InjectionValueKind.String ? Equip(Text(0), Arg(1)) : bridge.Equip(Arg(0), Arg(1)));參數: layer (Any/String), id (Any/Integer/String)
結果: int / Integer.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.Equip. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Equip:bridge.Equip(ConvertLayer(layer), id). -
InjectionScript.Runtime.InjectionApiUO.ConvertLayer:ConvertLayer(layer).
內部實作程式碼,不能作為獨立腳本執行。
public int Equip(string layer, int id) => bridge.Equip(ConvertLayer(layer), id);參數: layer (Any/String), id (Any/Integer/String)
結果: int / Integer.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.Equip. -
InjectionScript.Runtime.InjectionApiUO.Equip:Equip(layer, GetObject(id)). -
InjectionScript.Runtime.InjectionApiUO.GetObject:GetObject(id).
內部實作程式碼,不能作為獨立腳本執行。
public int Equip(string layer, string id) => Equip(layer, GetObject(id));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.EquipDressSet();備用名稱DressSavedSet:恢復同一套未命名的衣服。
沒有參數。
事實上,數字標誌int:1(滿足條件)-所有必要的請求都被本地接受或必要的層已經匹配; 0(未滿足條件)- 未撥號、未連接或至少一個請求被拒絕。註冊object?允許這個int。這不是ID、穿戴的物品數量或服務器確認。
該命令的結果是一個數字標誌: 1 表示滿足條件, 0 - 未實現。後 var 結果=命令(...)檢查是否(結果!= 0) 或 if (結果 == 0)。儲存一次呼叫的結果:重複呼叫可以再次執行該操作或讀取已經變更的狀態。
- 服裝:層數3,4,5,6,7,8,10,12,13,14,17,18,19,20,22,23,24。武器:僅限1和2。頭髮、鬍鬚、背包、動物和銀行不包含在這些套裝中。
- 具體的serial已經加載的東西都記錄在自己的層中。再次儲存相同的名稱會取代該條目。空層也有意義:當恢復時,相應的佔用層將被釋放到自己的背包中。因此,已儲存的完全空集會從其圖層中刪除內容。
- 此集合儲存在運行時狀態中。呼叫本身不會建立文件,也不保證該集將被傳輸到另一個設定檔或新的運行時。首先,將所需的集合儲存為其使用狀態。載入/保存客戶端的一般狀態是一個單獨的機制。
- 目前和已儲存的 ID 之間的精確匹配將被跳過,而不會再次使用/引發。遺失的物品不會被類似的 type 取代。一項操作的失敗並不影響成功的操作,也不影響其他操作的嘗試;沒有自動回滾。需要連接和載入的東西。拆下後,就使用了真正的背包。
- UO.Set("equipfordress", 0)選擇使用該物品的請求(初始模式);非零值 - 拾取/裝備。在兩種模式下都會檢查所需的耐磨層。已經穿戴過的物品無法透過重複使用來更換。 DressSpeed在接受請求後有效,提款另外尊重DropDelay。
- 即使失敗,Dress 和 Arm 也會傳回 null。請求已被接受的訊息並不表示伺服器已確認。對於依賴穿著的連續性,請以有限的期望檢查實際層數。
- UO.SetDress · UO.Dress · UO.DressSavedSet · UO.SetArm · UO.Arm · UO.DressSpeed
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
object? result = UO.EquipDressSet();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));參數與執行流程:
- 所需的集必須提前保存在相同的運行時狀態。不要在每次恢復之前呼叫 SetDress/SetArm:這會用目前專案覆蓋目標。
return UO.EquipDressSet();參數與執行流程:
- 非零裝備選擇拾取/裝備; 350 — 毫秒DressSpeed。這些設定在範例結束後仍保留在執行時。脫下和穿上由服務生決定。
return RunScenario();
object? RunScenario()
{
UO.Set("equipfordress", 1);
UO.DressSpeed(350);
return UO.EquipDressSet();
return null;
}參數與執行流程:
- lasttarget — ID 應該包含在先前儲存的集合中的內容。控制層3表示鞋子,1表示右手。 AwaitSlot 透過 100 毫秒暫停進行 20 檢查,且不重複此指令。這僅確認所選項目,而不是整個集合。
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 expected = Asc(UO.GetSerial("lasttarget"), 0);
if (Truth(expected == 0))
{
return 0;
}
if (!(Truth(UO.EquipDressSet())))
{
return 0;
}
return AwaitSlot(3, expected);
return null;
}
dynamic AwaitSlot(dynamic layer, dynamic expected)
{
for (int attempt = (int)(1); attempt <= 20; attempt += (int)(1))
{
if (Truth(UO.ObjAtLayerEx(layer, UO.Self()) == expected))
{
return 1;
}
UO.Wait(100);
}
return 0;
}
int Asc(object? value, int fallback = 0)
{
string text = Convert.ToString(value) ?? "";
if (text.StartsWith("0x", StringComparison.OrdinalIgnoreCase))
return int.TryParse(text[2..], System.Globalization.NumberStyles.HexNumber, System.Globalization.CultureInfo.InvariantCulture, out int hex) ? hex : fallback;
return int.TryParse(text, out int number) ? number : fallback;
}
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. -
InjectionScript.Runtime.InjectionApiUO.Equip:Equip("__stealth_saved_set__", dressSets, dressLayers, "Clothing set requests processed.", "No clothing set with setdress.").
內部實作程式碼,不能作為獨立腳本執行。
case "dresssavedset":
case "equipdressset": return new InjectionValue(Equip("__stealth_saved_set__", dressSets, dressLayers, "Clothing set requests processed.", "No clothing set with setdress."));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.EquipItems(object? items);裝備一個物品或一組物品。每個物品的層數由其可穿戴數據決定,因此該物品可以從背包中攜帶。
-
items- 必需的ID 或項目陣列ID。數組元素是數字或數字十六進位字串。單一參數也接受“lasttarget”/名稱AddObject。對於數組,對索引 0 和 1 處的兩個元素使用變數宣告 items[1]。事物被傳輸,不是層數,也不是type。
數字標誌int:1(滿足條件)- 接受本地操作,0(不滿足條件)- 拒絕。這不是伺服器確認,不是ID,也不是數量。稍後伺服器可能會發生故障;接聽後檢查實際設備。
該命令的結果是一個數字標誌: 1 表示滿足條件, 0 - 未實現。後 var 結果=命令(...)檢查是否(結果!= 0) 或 if (結果 == 0)。儲存一次呼叫的結果:重複呼叫可以再次執行該操作或讀取已經變更的狀態。
- 需要裝載物品並徒手拖曳。取下后,需要实际背包self:不使用备用背包GrabBag。未知、損壞和不合適的物品將被拒絕。其他人的物品無法透過UnequipItems移除。集合不是原子事務。
- EquipItems/UnequipItems 在接受操作之後、下一個元素之前應用DressSpeed; Disarm/Undress - 在每個佔用層之後。當提款被接受時,提款仍遵守DropDelay。其他運行時的相同設定不變;加速不會超越伺服器限制。
- 不正確的呼叫形式、未知的圖層名稱或不可轉換為數字的值可能會導致腳本錯誤,而不是0。設備快照僅包含已經載入的資料。在助手中,ChangeAndConfirm層=1是右手:對於另一件事,通過它的真實層。
- 對於數組,1表示接受所有列出的操作;如果拒絕,0將被退回。剩餘的元素仍然被處理,沒有回滾。空數組會產生 1 且不執行任何操作。當所需層已為空時,Disarm/Undress也給出1;部分失敗給出0。
- UO.EquipItems · UO.UnequipItems · UO.DressSpeed · UO.DropDelay · UO.ObjAtLayerEx
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
object? result = UO.EquipItems(UO.LastTarget());
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));參數與執行流程:
- 首先,在遊戲中選擇適當的項目:lasttarget - 它的ID。在Equip/WearItem範例中,1層需要副手武器。 Unequip(1) 移除右手; Disarm/Undress 使用自己的固定圖層。拒绝后不会自动重播。
var item = Asc(UO.GetSerial("lasttarget"), 0);
if (Truth(item == 0))
{
return 0;
}
return UO.EquipItems(item);
int Asc(object? value, int fallback = 0) { string text = Convert.ToString(value) ?? ""; if (text.StartsWith("0x", StringComparison.OrdinalIgnoreCase)) return int.TryParse(text[2..], System.Globalization.NumberStyles.HexNumber, System.Globalization.CultureInfo.InvariantCulture, out int hex) ? hex : fallback; return int.TryParse(text, out int number) ? number : fallback; }
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;參數與執行流程:
- 裝備方面,0x0F5E是劍的例子,0x1B76是盾的例子。 FindType在背包裝載的物品中尋找它們,ASC轉換返回的十六進制-ID。為了刪除,讀取自己的目前層。如果所需的項目不可用,則腳本結束。陣列儲存兩個ID;每個項目都被完全轉移。
return RunScenario();
object? RunScenario()
{
var first = Asc(UO.FindType(0x0F5E, -1, "backpack"), 0);
var second = Asc(UO.FindType(0x1B76, -1, "backpack"), 0);
if (Truth(first == 0) || Truth(second == 0))
{
return 0;
}
UO.AddObject("saved_first", first);
UO.AddObject("saved_second", second);
dynamic[] items = new dynamic[checked((int)(1) + 1)];
items[0] = first;
items[1] = second;
return UO.EquipItems(items);
return null;
}
int Asc(object? value, int fallback = 0)
{
string text = Convert.ToString(value) ?? "";
if (text.StartsWith("0x", StringComparison.OrdinalIgnoreCase))
return int.TryParse(text[2..], System.Globalization.NumberStyles.HexNumber, System.Globalization.CultureInfo.InvariantCulture, out int hex) ? hex : fallback;
return int.TryParse(text, out int number) ? number : fallback;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;參數與執行流程:
- ChangeAndConfirm 執行一次指令。然後檢查實際狀態最多20次,暫停100毫秒。 1 - 檢查看到預期狀態,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 item = Asc(UO.GetSerial("lasttarget"), 0);
if (Truth(item == 0))
{
return 0;
}
return ChangeAndConfirm(1, item);
return null;
}
dynamic ChangeAndConfirm(dynamic layer, dynamic item)
{
if (Truth(item == 0))
{
return 0;
}
if (!(Truth(UO.EquipItems(item))))
{
return 0;
}
for (int attempt = (int)(1); attempt <= 20; attempt += (int)(1))
{
if (Truth(UO.ObjAtLayerEx(layer, UO.Self()) == item))
{
return 1;
}
UO.Wait(100);
}
return 0;
}
int Asc(object? value, int fallback = 0)
{
string text = Convert.ToString(value) ?? "";
if (text.StartsWith("0x", StringComparison.OrdinalIgnoreCase))
return int.TryParse(text[2..], System.Globalization.NumberStyles.HexNumber, System.Globalization.CultureInfo.InvariantCulture, out int hex) ? hex : fallback;
return int.TryParse(text, out int number) ? number : fallback;
}
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。
參數: items (Any)
結果: dynamic / Any.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ChangeEquipmentItems:ChangeEquipmentItems(ArrayArg(0), true). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::ArrayArg:ArrayArg(0).
內部實作程式碼,不能作為獨立腳本執行。
case "equipitems":
return new InjectionValue(ChangeEquipmentItems(ArrayArg(0), true));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.EquipLastWeapon();請求重新裝備上次保存的右手和左手物品。
沒有參數。
void - 無回傳值。
- 橋存儲 _lastRightHand 和 _lastLeftHand。傳輸非零右serialEquip(OneHanded),非零左Equip(TwoHanded)。空條目將被跳過。這是兩個可能的請求,而不是伺服器確認的原子恢復。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
指令是獨立的陳述式。前面的訊息表示呼叫開始,並非伺服器已完成動作的確認。
UO.Print("Calling UO.EquipLastWeapon");
UO.EquipLastWeapon();參數與執行流程:
- 僅使用保存的橋serial手。
UO.EquipLastWeapon();參數與執行流程:
- 連線測試在發送請求之前執行。
return RunScenario();
object? RunScenario()
{
if (Truth(UO.Connected()))
{
UO.EquipLastWeapon();
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;參數與執行流程:
- 完全宣布的幫助者可以使一隻手恢復。
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
RestoreWeapons();
return null;
}
void RestoreWeapons()
{
UO.EquipLastWeapon();
}
}C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。
參數: 沒有參數。
結果: void / Unit.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.EquipLastWeapon:bridge.EquipLastWeapon().
內部實作程式碼,不能作為獨立腳本執行。
case "equiplastweapon": bridge.EquipLastWeapon(); return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.EquipT(object? layer, object? @type);-
layer——設備層。線「Rhand」是右手(1),「Lhand」是左手(2);數字也是可以接受的。所有可識別的名稱都列在圖層表中。字串“1”不會替換數字1:未知的字串名稱會導致錯誤。選擇事物本身的實際層:此指令不會變更其有效槽。 -
type- 一個 graphic 物品,例如 0x0F51 - 一把匕首。它不是特定事物的serial,也不是身體mobile的graphic。數字或數字十六進位字串。不指定顏色:搜尋任意hue;遞歸搜尋包括背包中已載入的子容器。 -1/0xFFFF,因為這裡的通配符搜尋對於選擇武器幾乎沒有用:將採取第一個可能與圖層不匹配的東西。
void:此C#形式不傳回值。不要將其呼叫分配給變量,也不要在 if 中使用它。若要測試是否接受兩個整數參數的請求,請使用 UO.Equipt。在這兩種情況下,請在伺服器通過ObjAtLayer和GetType回應後檢查實際設備。
- 兩個參數都是必需的。首先FindType尋找背包中的物品,然後Equip檢查其是否合適。搜尋更新整體結果FindItem/FindCount/GetFoundItems。如果有多個符合項,則選擇第一個適合搜尋的項目;品質、hue 或名稱沒有單獨的選擇。
- 客戶端檢查可穿戴標誌、物品的實際層(1..29)以及提起它的能力。必須加載該項目。伺服器另外決定是否允許佩戴;接受的本地請求並不證明成功。
- 如果缺少某個項目,void 表單將顯示訊息「未找到項目」;數字形式回傳0。若您需要依顏色/serial選擇特定項目,請單獨使用FindType和Equip。 UO.Equip 取得找到的項目的 ID。
- 在等待回應時,請勿同時開始另一個項目傳輸。檢查圖層變化而不是無休止地重複操作。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
指令是獨立的陳述式。前面的訊息表示呼叫開始,並非伺服器已完成動作的確認。
UO.Print("Calling UO.EquipT");
UO.EquipT("Rhand", 0x0F51);參數與執行流程:
- 右手線選擇右手圖層。匕首必须放在装满物品的背包中才能拿到。任何顏色;參數的數量始終是兩個。
if (Truth(UO.Connected()))
{
UO.EquipT("Rhand", 0x0F51);
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;參數與執行流程:
- 1 - 層,0x0F51 - type。字串C#形式EquipT回傳void;請求的接受不能透過其結果來驗證。 300 ms - 例如短暫等待;之後沒有任何東西並不能證明伺服器確實故障。
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
UO.EquipT("Rhand", 0x0F51);
await Delay(300);
var worn = UO.ObjAtLayer(1);
if (Truth(worn != 0) && Truth(UO.GetType(worn) == 0x0F51))
{
UO.AddObject("equipped_dagger", worn);
}
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;參數與執行流程:
- timeoutMs=2000 指定最長等待時間(以毫秒為單位)。每50毫秒檢查一次不會發送重新裝備。這個自訂函數的true表示客戶端已經在圖層上看到了想要的type;這是比傳回的 Equipt 請求接受更強的檢查。
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()
{
if (Truth(UO.Connected()) && !(Truth(await EnsureDagger(2000))))
{
UO.Print("Dagger was not confirmed within the timeout");
}
return null;
}
async Task<dynamic> EnsureDagger(dynamic timeoutMs)
{
var worn = UO.ObjAtLayer(1);
if (Truth(worn != 0) && Truth(UO.GetType(worn) == 0x0F51))
{
return true;
}
UO.EquipT("Rhand", 0x0F51);
var started = Now();
while (Truth(Now() - started < timeoutMs))
{
await Delay(50);
worn = UO.ObjAtLayer(1);
if (Truth(worn != 0) && Truth(UO.GetType(worn) == 0x0F51))
{
return true;
}
}
return false;
}
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;
private int Now() => global::ClassicUO.CSharp.CSharpScriptContext.Current.Now();
}C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。
參數: layer (Any), type (Any)
結果: void / Unit.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.EquipT. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.FindType:bridge.FindType(ResolveType(type), -1, bridge.Backpack, -1, true). -
InjectionScript.Runtime.InjectionApiUO.ResolveType:ResolveType(type). -
InjectionScript.Runtime.InjectionApiUO.SystemMessage:SystemMessage("No item found."). -
InjectionScript.Runtime.InjectionApiUO.Equip:Equip(layer.String, obj). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Equip:bridge.Equip(NumberConversions.ToInt(layer), obj). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(layer). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Backpack:bridge.Backpack.
內部實作程式碼,不能作為獨立腳本執行。
public void EquipT(InjectionValue layer, InjectionValue type)
{
var obj = bridge.FindType(ResolveType(type), -1, bridge.Backpack, -1, true);
if (obj == 0)
{
SystemMessage("No item found.");
return;
}
if (layer.Kind == InjectionValueKind.String)
Equip(layer.String, obj);
else
bridge.Equip(NumberConversions.ToInt(layer), obj);
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.Equipt(object? layer, object? @type);-
layer/layer - 設備層的整數。右手 - 1,左手 - 2。選擇一個真實的物品槽。 -
type/ type - 一個物品的整個graphic,例如匕首的0x0F51。這不是serial。在背包和嵌套容器的裝載內容中搜尋任何hue。
如果客戶接受服裝請求,則此C#表格返回int:1,否則返回0。傳遞兩個整數(層數和graphic);字串值選擇不同的運行時合約,不適合這種形式。呼叫不會等待伺服器確認。對於字串圖層名稱,請使用 UO.EquipT,它傳回 void。
- 兩個參數都是必需的。首先FindType尋找背包中的物品,然後Equip檢查其是否合適。搜尋更新整體結果FindItem/FindCount/GetFoundItems。如果有多個符合項,則選擇第一個適合搜尋的項目;品質、hue 或名稱沒有單獨的選擇。
- 客戶端檢查可穿戴標誌、物品的實際層(1..29)以及提起它的能力。必須加載該項目。伺服器另外決定是否允許佩戴;接受的本地請求並不證明成功。
- 如果缺少某個項目,null 表單將顯示訊息「未找到項目」;數字形式回傳0。若您需要依顏色/serial選擇特定項目,請單獨使用FindType和Equip。 UO.Equip 取得找到的項目的 ID。
- 在等待回應時,請勿同時開始另一個項目傳輸。檢查圖層變化而不是無休止地重複操作。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
var result = UO.Equipt(1, 0x0F51);
UO.Print("Equipt: " + Convert.ToString(result));參數與執行流程:
- 兩個參數都是整數:匕首的層1和graphic。值1確認請求被客戶端而非伺服器接受。
int accepted = UO.Equipt(1, 0x0F51);
UO.Print(accepted != 0 ? "Equip request accepted locally" : "Equip request not accepted");參數與執行流程:
- 等待並不能取代檢查:讀取層上的實際內容。該腳本不會無休止地重複傳輸。
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
int accepted = UO.Equipt(1, 0x0F51);
if (accepted == 0)
return false;
await WaitAsync(300);
int worn = UO.ObjAtLayer(1);
return worn != 0 && UO.GetType(worn) == 0x0F51;
return null;
}參數與執行流程:
- 首先檢查目前設備;一次請求後,驗證嘗試次數僅限二十次。
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()
{
return await EnsureDagger();
return null;
}
async Task<bool> EnsureDagger()
{
int current = UO.ObjAtLayer(1);
if (current != 0 && UO.GetType(current) == 0x0F51)
return true;
if (UO.Equipt(1, 0x0F51) == 0)
return false;
for (int attempt = 0; attempt < 20; attempt++)
{
await WaitAsync(100);
current = UO.ObjAtLayer(1);
if (current != 0 && UO.GetType(current) == 0x0F51)
return true;
}
return false;
}
}C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。
參數: layer (Integer), type (Integer)
結果: int / Integer.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.Equipt. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.FindType:bridge.FindType(type, -1, bridge.Backpack, -1, true). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Equip:bridge.Equip(layer, item). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Backpack:bridge.Backpack.
內部實作程式碼,不能作為獨立腳本執行。
public int Equipt(int layer, int type)
{
int item = bridge.FindType(type, -1, bridge.Backpack, -1, true);
return item == 0 ? 0 : bridge.Equip(layer, item);
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.FireResist();讀取目前角色的抵抗力場:火。
沒有參數。
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.FireResist();
UO.Print("FireResist: " + Convert.ToString(result));參數與執行流程:
- value 儲存一次呼叫的結果。 Convert.ToString 格式化日誌的數字。沒有任何爭論:你可以讀懂自己的個性。
var value = UO.FireResist();
UO.Print("FireResistance: " + Convert.ToString(value));參數與執行流程:
- 前後有UO.Wait(500)毫秒;差異可以是負數。可能會錯過臨時更新。暫停指的是範例,而不是延遲API。
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var before = UO.FireResist();
await Delay(500);
var after = UO.FireResist();
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.FireResist();
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.FireResistance:bridge.FireResistance.
內部實作程式碼,不能作為獨立腳本執行。
case "fireresist": return new InjectionValue(bridge.FireResistance);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.Flying();
int UO.Flying(object? id);檢查角色當前是否正在飛行。 Gargoyle 通常需要這樣做:例如,在開始航線之前或要求啟用航班之前。回答「我的角色現在在飛嗎?」的問題沒有爭論。此命令僅讀取狀態:它不會啟用角色飛行、著陸或移動。
-
id- 可選的 serial 字元:數字、十六進位字串、self、lasttarget 或透過 UO.AddObject 儲存的名稱。不用爭論,你的個性就會被使用。這是特定mobile的ID,而不是graphic/type,也不是Z的座標。未知名稱、遺失/刪除 mobile 或物品給出 0。
數字標誌int:1(滿足條件),0(不滿足條件)。這是一個數字標誌:在 C# 中檢查結果 != 0 或結果 == 0。 int 與 true/false 和 if(結果)的直接比較是不允許的。 1 - mobile 有 IsFlying,0 沒有標誌或 mobile 缺失。海拔Z本身並不意味著飛行。
該命令的結果是一個數字標誌: 1 表示滿足條件, 0 - 未實現。後 var 結果=命令(...)檢查是否(結果!= 0) 或 if (結果 == 0)。儲存一次呼叫的結果:重複呼叫可以再次執行該操作或讀取已經變更的狀態。
- 主要的遊戲應用是石像鬼的飛行。但是,getter 不會檢查競爭:在此客戶端中,它使用協定版本 7.0.0.0 及更高版本從 mobile 讀取 0x04 位元。在舊協議上它返回0。站在屋頂上、高Z、翅膀動畫或石像鬼競賽本身都無法證明飛行。
- 有一個單獨的UO.ToggleFly()用於更改狀態:它發送切換請求而不是“打開”命令。如果您已經在飛行中,重複呼叫會要求著陸。伺服器可能發生故障;出現提示後,在有限的等待時間內再次閱讀Flying。 false 在沒有可用角色/數據的情況下也是可能的,所以在玩遊戲之前檢查Connected。
- 讀取本機模型:不開啟目標、不要求狀態、不更改標誌、不發送資料包。即使在從字典中刪除條目之前,被破壞的物件也被視為遺失。
- 結果是單獨閱讀。从Exists到下一个挑战,世界可能会发生变化;多个查询不形成原子快照。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
var result = UO.Flying();
UO.Print("Flying: " + Convert.ToString(result));參數與執行流程:
- 空括號表示self。 true等於1,false等於0;如果 UO.Flying() { ... } 是可以接受的。這個例子沒有改變任何東西。
var active = UO.Flying();
if (Truth(Truth(active) == true))
{
UO.Print("Flying mode active");
}
else
{
UO.Print("Ground mode or character data unavailable");
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;參數與執行流程:
- ReadState(obj) 採用 serial/別名並傳回狀態。完整的定義如下;在讀取之前處理物件不存在的情況。也會根據客戶端已收到的資料檢查其他人的性格。
return RunScenario();
object? RunScenario()
{
var target = Asc(UO.GetSerial("lasttarget"), 0);
if (Truth(target != 0) && Truth(UO.Exists(target)))
{
if (Truth(ReadState(target)))
{
UO.AddObject("flying_mobile", target);
}
}
return null;
}
dynamic ReadState(dynamic obj)
{
if (!(Truth(UO.Exists(obj))))
{
return false;
}
return UO.Flying(obj);
}
int Asc(object? value, int fallback = 0)
{
string text = Convert.ToString(value) ?? "";
if (text.StartsWith("0x", StringComparison.OrdinalIgnoreCase))
return int.TryParse(text[2..], System.Globalization.NumberStyles.HexNumber, System.Globalization.CultureInfo.InvariantCulture, out int hex) ? hex : fallback;
return int.TryParse(text, out int number) ? number : fallback;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;參數與執行流程:
- 此範例適用於支援飛行的伺服器上的 Gargoyle。如果觀察到飛行,則EnsureFlight(timeoutMs) 回傳1/true,否則回傳0/false。 2000 — 等待限制(以毫秒為單位);每 50 毫秒檢查一次。如果您已經在飛行,則不會呼叫 ToggleFly。最多發送一個請求,然後檢查回應狀態。腳本暫停/調度程序延遲可以增加即時性。
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()
{
if (Truth(await EnsureFlight(2000)))
{
UO.Print("Flight confirmed; ready for the next stage");
}
else
{
UO.Print("Flight not confirmed; route was not started");
}
return null;
}
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;
}C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。
參數: 沒有參數。
結果: int / Integer.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.Flying. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Flying:bridge.Flying(bridge.Self). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Self:bridge.Self.
內部實作程式碼,不能作為獨立腳本執行。
public int Flying() => bridge.Flying(bridge.Self);參數: id (Any)
結果: int / Integer.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.Flying. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Flying:bridge.Flying(GetObject(id)). -
InjectionScript.Runtime.InjectionApiUO.GetObject:GetObject(id).
內部實作程式碼,不能作為獨立腳本執行。
public int Flying(InjectionValue id) => bridge.Flying(GetObject(id));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.Frozen();
int UO.Frozen(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.Frozen();
UO.Print("Frozen: " + Convert.ToString(result));參數與執行流程:
- 空括號選擇 self。 state 儲存標誌的一個快照; true — 數值常數 1。
- false 的結果並不排除因牆壁、缺乏耐力或其他原因而停止。
var state = UO.Frozen();
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.Frozen(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.Frozen()) == true) && Truth(attempts < 10))
{
await Delay(100);
attempts = attempts + 1;
}
if (Truth(UO.IsNPC("self")))
{
if (Truth(Truth(UO.Frozen()) == 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.RegisterCharacterGetterAliases [Frozen]. -
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetLocked:bridge.GetLocked(serial). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Self:bridge.Self.
呼叫時執行已儲存的處理函式 delegate。註冊方法在建立 API 時建立此 delegate。
內部實作程式碼,不能作為獨立腳本執行。
serial => bridge.GetLocked(serial)內部實作程式碼,不能作為獨立腳本執行。
() => getter(bridge.Self)建立 API: 這些函式負責註冊 API,不會在每次命令呼叫時重新執行。
參數: value (Any)
結果: int / Integer.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases [Frozen]. -
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 · 繁體中文 · 日本語 · 한국어
dynamic UO.GetARStatus();讀取目前管理器會話或全域用戶端自動重新連線的標誌。
沒有參數。
int 1 — 自動重新連線已啟用; 0 — 停用。
- SessionControl.AutoReconnect 優先。如果缺少SessionControl,則使用Settings.GlobalSettings.Reconnect。這是一個設置,而不是當前連接的狀態或嘗試次數。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
object? result = UO.GetARStatus();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));參數與執行流程:
- 讀取未連接。
var enabled = UO.GetARStatus();
UO.Print(Convert.ToString(enabled));參數與執行流程:
- AR 設定和實際連接是兩個單獨的值。
return RunScenario();
object? RunScenario()
{
var enabled = UO.GetARStatus();
var online = UO.Connected();
UO.Print(Convert.ToString(enabled) + " " + Convert.ToString(online));
return null;
}參數與執行流程:
- 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.GetARStatus() == 0) && !(Truth(UO.Connected())))
{
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。
參數: 沒有參數。
結果: dynamic / Any.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetAutoReconnect:bridge.GetAutoReconnect().
內部實作程式碼,不能作為獨立腳本執行。
case "getarstatus": return new InjectionValue(bridge.GetAutoReconnect());Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.GetAlive();
int UO.GetAlive(object? value);檢查是否有沒有死亡跡象的物體。
-
value— 所示形式的可選物件:serial 由數字/十六進位字串、self、lasttarget 或註冊名稱 AddObject。這不是type。没有争论,请阅读self。某些形式的未知文字會導致轉換錯誤;打電話前檢查名字。
數字標誌int:1(滿足條件),0(不滿足條件)。這是一個數字標誌:在 C# 中檢查結果 != 0 或結果 == 0。 int 與 true/false 和 if(結果)的直接比較是不被允許的。 1 - 正serial存在且未標記為死亡。名品也給了1:這不是mobile濾鏡。死亡/丟失的物體給出0。
該命令的結果是一個數字標誌: 1 表示滿足條件, 0 - 未實現。後 var 結果=命令(...)檢查是否(結果!= 0) 或 if (結果 == 0)。儲存一次呼叫的結果:重複呼叫可以再次執行該操作或讀取已經變更的狀態。
- 讀取本機模型:不開啟目標、不要求狀態、不更改標誌、不發送資料包。即使在從字典中刪除條目之前,被破壞的物件也被視為遺失。
- 結果是單獨閱讀。从Exists到下一个挑战,世界可能会发生变化;多个查询不形成原子快照。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
var result = UO.GetAlive();
UO.Print("GetAlive: " + Convert.ToString(result));參數與執行流程:
- 空括號讀作self。 active 保存一次結果;true和 false定義了兩個分支。 Print 僅顯示範例訊息。
var active = UO.GetAlive();
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.GetAlive(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.GetAlive();
await Delay(500);
var after = UO.GetAlive();
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.RegisterCharacterGetterAliases [GetAlive]. -
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Exists:bridge.Exists(serial). -
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases::IsDeadState:IsDeadState(serial). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Self:bridge.Self.
呼叫時執行已儲存的處理函式 delegate。註冊方法在建立 API 時建立此 delegate。
內部實作程式碼,不能作為獨立腳本執行。
serial => serial > 0 && bridge.Exists(serial) != 0 && IsDeadState(serial) == 0 ? 1 : 0內部實作程式碼,不能作為獨立腳本執行。
() => getter(bridge.Self)建立 API: 這些函式負責註冊 API,不會在每次命令呼叫時重新執行。
參數: value (Any)
結果: int / Integer.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases [GetAlive]. -
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Exists:bridge.Exists(serial). -
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases::IsDeadState:IsDeadState(serial). -
InjectionScript.Runtime.InjectionApiUO.GetObject:GetObject(value).
呼叫時執行已儲存的處理函式 delegate。註冊方法在建立 API 時建立此 delegate。
內部實作程式碼,不能作為獨立腳本執行。
serial => serial > 0 && bridge.Exists(serial) != 0 && IsDeadState(serial) == 0 ? 1 : 0內部實作程式碼,不能作為獨立腳本執行。
value => getter(GetObject(value))建立 API: 這些函式負責註冊 API,不會在每次命令呼叫時重新執行。
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.GetArmor();讀取目前角色的抵抗力場:物理護甲/抵抗力。
沒有參數。
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.GetArmor();
UO.Print("GetArmor: " + Convert.ToString(result));參數與執行流程:
- value 儲存一次呼叫的結果。 Convert.ToString 格式化日誌的數字。沒有任何爭論:你可以讀懂自己的個性。
var value = UO.GetArmor();
UO.Print("PhysicalResistance: " + Convert.ToString(value));參數與執行流程:
- 前後有UO.Wait(500)毫秒;差異可以是負數。可能會錯過臨時更新。暫停指的是範例,而不是延遲API。
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var before = UO.GetArmor();
await Delay(500);
var after = UO.GetArmor();
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.GetArmor();
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 [GetArmor]. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Armor:bridge.Armor.
呼叫時執行已儲存的處理函式 delegate。註冊方法在建立 API 時建立此 delegate。
內部實作程式碼,不能作為獨立腳本執行。
() => bridge.Armor建立 API: 這些函式負責註冊 API,不會在每次命令呼叫時重新執行。
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.GetColdResist();讀取目前角色的抵抗力場:冷。
沒有參數。
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.GetColdResist();
UO.Print("GetColdResist: " + Convert.ToString(result));參數與執行流程:
- value 儲存一次呼叫的結果。 Convert.ToString 格式化日誌的數字。沒有任何爭論:你可以讀懂自己的個性。
var value = UO.GetColdResist();
UO.Print("ColdResistance: " + Convert.ToString(value));參數與執行流程:
- 前後有UO.Wait(500)毫秒;差異可以是負數。可能會錯過臨時更新。暫停指的是範例,而不是延遲API。
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var before = UO.GetColdResist();
await Delay(500);
var after = UO.GetColdResist();
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.GetColdResist();
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 [GetColdResist]. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.ColdResistance:bridge.ColdResistance.
呼叫時執行已儲存的處理函式 delegate。註冊方法在建立 API 時建立此 delegate。
內部實作程式碼,不能作為獨立腳本執行。
() => bridge.ColdResistance建立 API: 這些函式負責註冊 API,不會在每次命令呼叫時重新執行。
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.GetDead();
int UO.GetDead(object? value);檢查角色死亡。
-
value— 所示形式的可選物件:serial 由數字/十六進位字串、self、lasttarget 或註冊名稱 AddObject。這不是type。没有争论,请阅读self。某些形式的未知文字會導致轉換錯誤;打電話前檢查名字。
數字標誌int:1(滿足條件),0(不滿足條件)。這是一個數字標誌:在 C# 中檢查結果 != 0 或結果 == 0。 int 與 true/false 和 if(結果)的直接比較是不允許的。 1 - mobile 有 IsDead,0 無符號或 mobile 不存在。 HP=0本身並不意味著死亡。
該命令的結果是一個數字標誌: 1 表示滿足條件, 0 - 未實現。後 var 結果=命令(...)檢查是否(結果!= 0) 或 if (結果 == 0)。儲存一次呼叫的結果:重複呼叫可以再次執行該操作或讀取已經變更的狀態。
- 讀取本機模型:不開啟目標、不要求狀態、不更改標誌、不發送資料包。即使在從字典中刪除條目之前,被破壞的物件也被視為遺失。
- 結果是單獨閱讀。从Exists到下一个挑战,世界可能会发生变化;多个查询不形成原子快照。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
var result = UO.GetDead();
UO.Print("GetDead: " + Convert.ToString(result));參數與執行流程:
- 空括號讀作self。 active 保存一次結果;true和 false定義了兩個分支。 Print 僅顯示範例訊息。
var active = UO.GetDead();
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.GetDead(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.GetDead();
await Delay(500);
var after = UO.GetDead();
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.RegisterCharacterGetterAliases [GetDead]. -
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Self:bridge.Self.
呼叫時執行已儲存的處理函式 delegate。註冊方法在建立 API 時建立此 delegate。
內部實作程式碼,不能作為獨立腳本執行。
IsDeadState內部實作程式碼,不能作為獨立腳本執行。
() => getter(bridge.Self)建立 API: 這些函式負責註冊 API,不會在每次命令呼叫時重新執行。
參數: value (Any)
結果: int / Integer.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases [GetDead]. -
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases. -
InjectionScript.Runtime.InjectionApiUO.GetObject:GetObject(value).
呼叫時執行已儲存的處理函式 delegate。註冊方法在建立 API 時建立此 delegate。
內部實作程式碼,不能作為獨立腳本執行。
IsDeadState內部實作程式碼,不能作為獨立腳本執行。
value => getter(GetObject(value))建立 API: 這些函式負責註冊 API,不會在每次命令呼叫時重新執行。
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.GetDex();
int UO.GetDex(object? objID);讀取角色目前的敏捷度(Dexterity,DEX)。
-
objID— 僅顯示形式的 ObjID,帶有一個參數:serial 字元數、十進位/0x 十六進位字串、「self」、「lasttarget」或名稱 AddObject。選擇 graphic/type 以外的物件。如果沒有參數,則讀取目前字元。
int — 當前統計點,客戶端模型中的0..65535;不是百分比、ID、技能、鎖定模式或bool。 0 也意味著遺失/刪除的字元或無法存取的物件。與數值要求比較,不==true。這不是統計上限或沒有修飾符的保證基值。
- 支援用於 self 的 () 和用於明確物件的 (ObjID)。沒有其他可選參數。
- 如果 Player 存在且尚未被銷毀,則讀取 Player.Dexterity;否則0。存在的死亡角色並不是被移除的物體。此統計數據不是根據HP、法力或耐力計算的。
- GetStr/GetInt/GetDex 接受 ObjID。 PlayerMobile数据仅适用于self;对于另一个serial - 0,甚至对于加载的mobile。別人的特徵不能被取代或猜測。
- 呼叫遊戲流上的讀取,並能夠透過腳本取消等待。不查詢狀態、不開啟目標、不發送資料包、不改變特性、不新增延遲。
- 每次呼叫都會重新讀取本地資料。變數儲存快照;各個讀取可能會收到不同的伺服器更新。非零結果不會測試連線。零可以是一個值,也可以沒有資料。
- C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。
UO.Dex(),UO.Dexterity(),UO.GetDex(),UO.GetDexterity(). - ExecuteClientApiCompatibility.Arg 先解析物件名稱,然後轉換數字。未知的非數字字串會導致轉換錯誤,而不是目標。 double 縮減為int,Array/void 縮減為0。要選擇字符,請使用正確的 serial,而不是此類轉換。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
var result = UO.GetDex();
UO.Print("GetDex: " + Convert.ToString(result));參數與執行流程:
- value 儲存數值結果;轉換。 ToString 只是將其格式化為雜誌。沒有爭論或角色動作。
var value = UO.GetDex();
UO.Print("Dexterity: " + Convert.ToString(value));參數與執行流程:
- 前後分別1000 ms; UO.Wait 加入範例。 Change=after-before 可以是正數、零或負數。就其本身而言,它並不區分所有中間更新和退出世界。
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var before = UO.GetDex();
await Delay(1000);
var after = UO.GetDex();
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.GetDex();
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;
}參數與執行流程:
- id 是UO.Self()的結果,而不是type。 AddObject 將 ID 儲存為 statSubject,沒有範圍,因為指定了第二個參數。兩次調用都選擇相同的字符,但讀數不是原子的。
var id = UO.Self();
if (Truth(id != 0))
{
UO.AddObject("statSubject", id);
var direct = UO.GetDex(id);
var byName = UO.GetDex("statSubject");
UO.Print("Direct: " + Convert.ToString(direct) + "; alias: " + Convert.ToString(byName));
}
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 [GetDex]. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Dexterity:bridge.Dexterity.
呼叫時執行已儲存的處理函式 delegate。註冊方法在建立 API 時建立此 delegate。
內部實作程式碼,不能作為獨立腳本執行。
() => bridge.Dexterity建立 API: 這些函式負責註冊 API,不會在每次命令呼叫時重新執行。
參數: objID (Any)
結果: int / Integer.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetDexterity:bridge.GetDexterity(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Dexterity:bridge.Dexterity.
內部實作程式碼,不能作為獨立腳本執行。
case "getdex": return new InjectionValue(arguments.Length > 0 ? bridge.GetDexterity(Arg(0)) : bridge.Dexterity);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.GetDexterity();讀取角色目前的敏捷度(Dexterity,DEX)。
沒有參數。
int — 當前統計點,客戶端模型中的0..65535;不是百分比、ID、技能、鎖定模式或bool。 0 也意味著遺失/刪除的字元或無法存取的物件。與數值要求比較,不==true。這不是統計上限或沒有修飾符的保證基值。
- 此指令不帶參數。使用上面的確切簽名。
- 如果 Player 存在且尚未被銷毀,則讀取 Player.Dexterity;否則0。存在的死亡角色並不是被移除的物體。此統計數據不是根據HP、法力或耐力計算的。
- GetStr/GetInt/GetDex 接受 ObjID。 PlayerMobile数据仅适用于self;对于另一个serial - 0,甚至对于加载的mobile。別人的特徵不能被取代或猜測。
- 呼叫遊戲流上的讀取,並能夠透過腳本取消等待。不查詢狀態、不開啟目標、不發送資料包、不改變特性、不新增延遲。
- 每次呼叫都會重新讀取本地資料。變數儲存快照;各個讀取可能會收到不同的伺服器更新。非零結果不會測試連線。零可以是一個值,也可以沒有資料。
- C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。
UO.Dex(),UO.Dexterity(),UO.GetDex(),UO.GetDexterity().
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
var result = UO.GetDexterity();
UO.Print("GetDexterity: " + Convert.ToString(result));參數與執行流程:
- value 儲存數值結果;轉換。 ToString 只是將其格式化為雜誌。沒有爭論或角色動作。
var value = UO.GetDexterity();
UO.Print("Dexterity: " + Convert.ToString(value));參數與執行流程:
- 前後分別1000 ms; UO.Wait 加入範例。 Change=after-before 可以是正數、零或負數。就其本身而言,它並不區分所有中間更新和退出世界。
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var before = UO.GetDexterity();
await Delay(1000);
var after = UO.GetDexterity();
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.GetDexterity();
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 [GetDexterity]. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Dexterity:bridge.Dexterity.
呼叫時執行已儲存的處理函式 delegate。註冊方法在建立 API 時建立此 delegate。
內部實作程式碼,不能作為獨立腳本執行。
() => bridge.Dexterity建立 API: 這些函式負責註冊 API,不會在每次命令呼叫時重新執行。
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.GetEnergyResist();讀取目前角色的阻力場:能量。
沒有參數。
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.GetEnergyResist();
UO.Print("GetEnergyResist: " + Convert.ToString(result));參數與執行流程:
- value 儲存一次呼叫的結果。 Convert.ToString 格式化日誌的數字。沒有任何爭論:你可以讀懂自己的個性。
var value = UO.GetEnergyResist();
UO.Print("EnergyResistance: " + Convert.ToString(value));參數與執行流程:
- 前後有UO.Wait(500)毫秒;差異可以是負數。可能會錯過臨時更新。暫停指的是範例,而不是延遲API。
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var before = UO.GetEnergyResist();
await Delay(500);
var after = UO.GetEnergyResist();
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.GetEnergyResist();
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 [GetEnergyResist]. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.EnergyResistance:bridge.EnergyResistance.
呼叫時執行已儲存的處理函式 delegate。註冊方法在建立 API 時建立此 delegate。
內部實作程式碼,不能作為獨立腳本執行。
() => bridge.EnergyResistance建立 API: 這些函式負責註冊 API,不會在每次命令呼叫時重新執行。