ZH TW UO Topic character Part 3 - LIHACHTETAN/ClassicUO-Bad-Newbie-CSharp-Scripts-IDE GitHub Wiki
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
家 · C# · IDE · UO API · A–Z · 範例 · Languages
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.GetSex();從客戶端模型中讀取性別和種族代碼。
沒有參數。
int - 相容代碼:0=人類男性,1=人類女性,2=精靈男性,3=精靈女性,4=石像鬼男性,5=精靈石女性。沒有字元也0,所以檢查Exists(self)是否可用。這不是一個簡單的bool女性。
- 讀取已經接收到的本地資料。該請求不會開啟狀態,也不會強制伺服器發送更新。死亡、地圖轉換或物件刪除後,兩次呼叫之間的值可能會改變。
- C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
var result = UO.GetSex();
UO.Print("GetSex: " + Convert.ToString(result));參數與執行流程:
- 不帶參數的呼叫指的是 self。性别和种族代码存储在值中。
- Convert.ToString 轉換要輸出的數字,不改變結果的意義。
var value = UO.GetSex();
UO.Print("GetSex: " + Convert.ToString(value));參數與執行流程:
- 該值在沒有任何參數的情況下被讀取一次。性別和種族代碼用於所示的計算或條件。
- 數字閾值是腳本條件的範例,而不是新的客戶端限制。此欄位儲存上述伺服器單元和限制。
return RunScenario();
object? RunScenario()
{
var value = UO.GetSex();
if (Truth(value == 4) || Truth(value == 5))
{
UO.Print("Gargoyle sex/race code");
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;參數與執行流程:
- 兩個不帶參數的呼叫都會讀取它們的目前值。 UO.Wait(1000) 在兩次拍攝之間提供以毫秒為單位的暫停。
- 變化比較:性別和種族代碼。榜樣不會改變世界上的任何事情,也不會無止盡地等待。這一秒鐘內的事件可能會被錯過。
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
async public Task<object?> RunScenarioAsync()
{
var before = UO.GetSex();
await Delay(1000);
var after = UO.GetSex();
if (Truth(before != after))
{
UO.Print("Before: " + Convert.ToString(before) + "; after: " + Convert.ToString(after));
}
return null;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。
參數: 沒有參數。
結果: int / Integer.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases [GetSex]. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Sex:bridge.Sex.
呼叫時執行已儲存的處理函式 delegate。註冊方法在建立 API 時建立此 delegate。
內部實作程式碼,不能作為獨立腳本執行。
() => bridge.Sex建立 API: 這些函式負責註冊 API,不會在每次命令呼叫時重新執行。
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.GetStam();
dynamic UO.GetStam(object? objID);從本地模型讀取目前的耐力。
-
objID— 所示形式的可選物件:serial 由數字/十六進位字串、self、lasttarget 或註冊名稱 AddObject。這不是type。没有争论,请阅读self。某些形式的未知文字會導致轉換錯誤;打電話前檢查名字。
int 是Stamina 欄位的值,而不是百分比或bool。 0 可以是實值或缺失資料的指示。零最大值不能用作除數。對別人的mobile來說,其意義可能是未知的。 HP/HitsMax 可能包含相對伺服器比例而不是精確點。 HP=0並不能證明死亡;為此有Dead/IsDead。
- 該命令不會開啟狀態,也不會請求伺服器更新。客户端只读取已经加载的数据。不改变特性,也不发送数据包。
- 結果是單獨閱讀。从Exists到下一个挑战,世界可能会发生变化;多个查询不形成原子快照。
- 讀取物件時,World.Get 會拒絕缺少的或 IsDestroyed 並產生 0。 HP/HitsMax從實體中讀取,包括具有這些欄位的項目; Mana/Stamina - 僅適用於行動裝置。沒有爭論,請閱讀self。不帶參數的同名變體不一定有ID的變體:請參閱簽名。
- 對於遺失或損壞的 Player,不帶參數的讀取也會回傳 0。這適用於直接 Mana/Stamina 及其最大值,而不僅僅是透過 World.Get 的表格。存在的死亡角色可以保留價值。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
var result = UO.GetStam();
UO.Print("GetStam: " + Convert.ToString(result));參數與執行流程:
- 不帶參數的呼叫讀取為self。 value 儲存一個數字,Convert.ToString 僅將其轉換為訊息。
var value = UO.GetStam();
UO.Print("GetStam: " + Convert.ToString(value));參數與執行流程:
- 顯示該欄位應用的閾值或計算。條件中的數字是範例設置,而不是伺服器限制。在除以最大值之前,檢查其正值。
return RunScenario();
object? RunScenario()
{
var value = UO.GetStam();
if (Truth(value < 15))
{
UO.Print("Known stamina is below the movement threshold of 15");
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;參數與執行流程:
- lasttarget — 先前選擇的物件; Exists 檢查可用性。 obj 是ReadValue 的唯一參數。此函數傳回命令編號不變,並且是完整給出的。
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.Exists("lasttarget")))
{
var value = ReadValue("lasttarget");
UO.Print("Selected value: " + Convert.ToString(value));
}
return null;
}
dynamic ReadValue(dynamic obj)
{
return UO.GetStam(obj);
}
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 [GetStam]. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Stamina:bridge.Stamina.
呼叫時執行已儲存的處理函式 delegate。註冊方法在建立 API 時建立此 delegate。
內部實作程式碼,不能作為獨立腳本執行。
() => bridge.Stamina建立 API: 這些函式負責註冊 API,不會在每次命令呼叫時重新執行。
參數: objID (Any)
結果: dynamic / Any.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetStamina:bridge.GetStamina(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Stamina:bridge.Stamina.
內部實作程式碼,不能作為獨立腳本執行。
case "getstam": return new InjectionValue(arguments.Length > 0 ? bridge.GetStamina(Arg(0)) : bridge.Stamina);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.GetStamina();從本地模型讀取目前的耐力。
沒有參數。
int 是Stamina 欄位的值,而不是百分比或bool。 0 可以是實值或缺失資料的指示。零最大值不能用作除數。對別人的mobile來說,其意義可能是未知的。 HP/HitsMax 可能包含相對伺服器比例而不是精確點。 HP=0並不能證明死亡;為此有Dead/IsDead。
- 該命令不會開啟狀態,也不會請求伺服器更新。客户端只读取已经加载的数据。不改变特性,也不发送数据包。
- 結果是單獨閱讀。从Exists到下一个挑战,世界可能会发生变化;多个查询不形成原子快照。
- 讀取物件時,World.Get 會拒絕缺少的或 IsDestroyed 並產生 0。 HP/HitsMax從實體中讀取,包括具有這些欄位的項目; Mana/Stamina - 僅適用於行動裝置。沒有爭論,請閱讀self。不帶參數的同名變體不一定有ID的變體:請參閱簽名。
- 對於遺失或損壞的 Player,不帶參數的讀取也會回傳 0。這適用於直接 Mana/Stamina 及其最大值,而不僅僅是透過 World.Get 的表格。存在的死亡角色可以保留價值。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
var result = UO.GetStamina();
UO.Print("GetStamina: " + Convert.ToString(result));參數與執行流程:
- 不帶參數的呼叫讀取為self。 value 儲存一個數字,Convert.ToString 僅將其轉換為訊息。
var value = UO.GetStamina();
UO.Print("GetStamina: " + Convert.ToString(value));參數與執行流程:
- 顯示該欄位應用的閾值或計算。條件中的數字是範例設置,而不是伺服器限制。在除以最大值之前,檢查其正值。
return RunScenario();
object? RunScenario()
{
var value = UO.GetStamina();
if (Truth(value < 15))
{
UO.Print("Known stamina is below the movement threshold of 15");
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;參數與執行流程:
- 該名稱沒有 ID 的形式。不含參數的ReadValue讀取self;兩個呼叫由 UO.Wait(1000) 分隔。比較兩個快照可能會錯過中間更改。
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
async public Task<object?> RunScenarioAsync()
{
var before = ReadValue();
await Delay(1000);
var after = ReadValue();
UO.Print("Before: " + Convert.ToString(before) + "; after: " + Convert.ToString(after));
return null;
}
dynamic ReadValue()
{
return UO.GetStamina();
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
}C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。
參數: 沒有參數。
結果: int / Integer.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases [GetStamina]. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Stamina:bridge.Stamina.
呼叫時執行已儲存的處理函式 delegate。註冊方法在建立 API 時建立此 delegate。
內部實作程式碼,不能作為獨立腳本執行。
() => bridge.Stamina建立 API: 這些函式負責註冊 API,不會在每次命令呼叫時重新執行。
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.GetStatLockState(object? statNum);讀取局部特徵變化模式。
-
statNum- 強制特徵編號:0 - 轉換ToString、1 - DEX、2 - INT。這不是它的目前值,也不是字串的名稱。
int:0 - 增加,1 - 減少,2 - 阻塞。這是模式碼,不是true/false。對於 0..2 以外的數字,傳回 −1。如果字元缺失,有效數字預設回傳0;這不是伺服器狀態的確認。
- 根據已經接收到的數據,透過遊戲執行緒上的Invoke進行讀取;不發送網路資料包。該技能未被使用或訓練。兩個請求 - 兩個單獨的快照。
- 強制特徵編號:0 - 轉換.ToString、1 - DEX、2 - INT。這不是它的目前值,也不是字串的名稱。
- ExecuteClientApiCompatibility 選擇指令分支。 Text 讀取技能選擇器,Arg 讀取數字和模式。不可轉換的參數可能會使呼叫失敗並出現轉換錯誤。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
var result = UO.GetStatLockState(0);
UO.Print("GetStatLockState: " + Convert.ToString(result));參數與執行流程:
- 在範例中,選擇器和錄製時的模式均已明確指定。第一行按名稱選擇技能或按數字選擇特徵。 Print 僅顯示結果。
var selector = 0;
var mode = UO.GetStatLockState(selector);
UO.Print(Convert.ToString(mode));參數與執行流程:
- 以閾值95.1和模式0/1/2為例。 −1 在改變模式之前被檢查。寫入後,只讀取本機副本;它不等待伺服器回應。
return RunScenario();
object? RunScenario()
{
var mode = UO.GetStatLockState(0);
if (Truth(mode == 2))
{
UO.Print("Locked");
}
else
{
if (Truth(mode == -1))
{
UO.Print("Unknown selector");
}
else
{
UO.Print("Mode: " + Convert.ToString(mode));
}
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;參數與執行流程:
- 所有幫助程序代碼都在 Main 下面給出。選擇器選擇技能/特性,模式設定錄製模式。 ReadValue/ReadMode 傳回原數; ApplyMode 檢查參數,執行操作,且不傳回值。閱讀範例中的UO.Wait(1000)將兩張圖片分開。
return 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 = ReadMode(0);
await Delay(1000);
var after = ReadMode(0);
UO.Print(Convert.ToString(before) + " -> " + Convert.ToString(after));
return null;
}
dynamic ReadMode(dynamic selector)
{
return UO.GetStatLockState(selector);
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
}C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。
參數: statNum (Any)
結果: int / Integer.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetStatLockState:bridge.GetStatLockState(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
內部實作程式碼,不能作為獨立腳本執行。
case "getstatlockstate": return new InjectionValue(bridge.GetStatLockState(Arg(0)));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.GetStatus(object? id);傳送指定 mobile 狀態的伺服器請求。
-
id— 物件的序號或支援的 self/backpack/lasttarget/saved 物件名稱;數字字串和 0x 字串由執行時間解析。
void - 無回傳值。
- string-form經由GetObject解析名稱;int形式直接渲染serial。網橋呼叫 GameActions.RequestMobileStatus(world,serial,true)。該命令不返回數據,也不等待回應。世界更新後分別閱讀GetHP/GetMaxHP和其他getter。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
指令是獨立的陳述式。前面的訊息表示呼叫開始,並非伺服器已完成動作的確認。
UO.Print("Calling UO.GetStatus");
UO.GetStatus("self");參數與執行流程:
- 發送狀態請求而不等待回應。
UO.GetStatus("self");參數與執行流程:
- int 形式發送相同的請求。
return RunScenario();
object? RunScenario()
{
var id = UO.Self();
UO.GetStatus(id);
return null;
}參數與執行流程:
- 暫停並不能保證得到新的答案; getters 返回目前的本地模型。
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()
{
UO.GetStatus("self");
await Delay(500);
UO.Print(Convert.ToString(UO.GetHP()) + "/" + Convert.ToString(UO.GetMaxHP()));
return null;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
}C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。
參數: id (Integer/String)
結果: void / Unit.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.GetStatus. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetStatus:bridge.GetStatus(id).
內部實作程式碼,不能作為獨立腳本執行。
public void GetStatus(int id) => bridge.GetStatus(id);參數: id (Integer/String)
結果: void / Unit.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.GetStatus. -
InjectionScript.Runtime.InjectionApiUO.GetStatus:GetStatus(GetObject(id)). -
InjectionScript.Runtime.InjectionApiUO.GetObject:GetObject(id).
內部實作程式碼,不能作為獨立腳本執行。
public void GetStatus(string id) => GetStatus(GetObject(id));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.GetStr();
int UO.GetStr(object? objID);讀取角色目前功率(Strength、Str)。
-
objID— 僅顯示形式的 ObjID,帶有一個參數:serial 字元數、十進位/0x 十六進位字串、「self」、「lasttarget」或名稱 AddObject。選擇 graphic/type 以外的物件。如果沒有參數,則讀取目前字元。
int — 當前統計點,客戶端模型中的0..65535;不是百分比、ID、技能、鎖定模式或bool。 0 也意味著遺失/刪除的字元或無法存取的物件。與數值要求比較,不==true。這不是統計上限或沒有修飾符的保證基值。
- 支援用於 self 的 () 和用於明確物件的 (ObjID)。沒有其他可選參數。
- 如果 Player 存在且尚未被銷毀,則讀取 Player.Strength;否則0。存在的死亡角色並不是被移除的物體。此統計數據不是根據HP、法力或耐力計算的。
- GetStr/GetInt/GetDex 接受 ObjID。 PlayerMobile数据仅适用于self;对于另一个serial - 0,甚至对于加载的mobile。別人的特徵不能被取代或猜測。
- 呼叫遊戲流上的讀取,並能夠透過腳本取消等待。不查詢狀態、不開啟目標、不發送資料包、不改變特性、不新增延遲。
- 每次呼叫都會重新讀取本地資料。變數儲存快照;各個讀取可能會收到不同的伺服器更新。非零結果不會測試連線。零可以是一個值,也可以沒有資料。
- C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。
UO.Str(),UO.Strength(),UO.GetStr(),UO.GetStrength(). - ExecuteClientApiCompatibility.Arg 先解析物件名稱,然後轉換數字。未知的非數字字串會導致轉換錯誤,而不是目標。 double 縮減為int,Array/void 縮減為0。要選擇字符,請使用正確的 serial,而不是此類轉換。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
var result = UO.GetStr();
UO.Print("GetStr: " + Convert.ToString(result));參數與執行流程:
- value 儲存數值結果;轉換。 ToString 只是將其格式化為雜誌。沒有爭論或角色動作。
var value = UO.GetStr();
UO.Print("Strength: " + Convert.ToString(value));參數與執行流程:
- 前後分別1000 ms; UO.Wait 加入範例。 Change=after-before 可以是正數、零或負數。就其本身而言,它並不區分所有中間更新和退出世界。
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var before = UO.GetStr();
await Delay(1000);
var after = UO.GetStr();
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.GetStr();
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.GetStr(id);
var byName = UO.GetStr("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 [GetStr]. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Strength:bridge.Strength.
呼叫時執行已儲存的處理函式 delegate。註冊方法在建立 API 時建立此 delegate。
內部實作程式碼,不能作為獨立腳本執行。
() => bridge.Strength建立 API: 這些函式負責註冊 API,不會在每次命令呼叫時重新執行。
參數: objID (Any)
結果: int / Integer.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetStrength:bridge.GetStrength(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Strength:bridge.Strength.
內部實作程式碼,不能作為獨立腳本執行。
case "getstr": return new InjectionValue(arguments.Length > 0 ? bridge.GetStrength(Arg(0)) : bridge.Strength);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.GetStrength();讀取角色目前功率(Strength、Str)。
沒有參數。
int — 當前統計點,客戶端模型中的0..65535;不是百分比、ID、技能、鎖定模式或bool。 0 也意味著遺失/刪除的字元或無法存取的物件。與數值要求比較,不==true。這不是統計上限或沒有修飾符的保證基值。
- 此指令不帶參數。使用上面的確切簽名。
- 如果 Player 存在且尚未被銷毀,則讀取 Player.Strength;否則0。存在的死亡角色並不是被移除的物體。此統計數據不是根據HP、法力或耐力計算的。
- GetStr/GetInt/GetDex 接受 ObjID。 PlayerMobile数据仅适用于self;对于另一个serial - 0,甚至对于加载的mobile。別人的特徵不能被取代或猜測。
- 呼叫遊戲流上的讀取,並能夠透過腳本取消等待。不查詢狀態、不開啟目標、不發送資料包、不改變特性、不新增延遲。
- 每次呼叫都會重新讀取本地資料。變數儲存快照;各個讀取可能會收到不同的伺服器更新。非零結果不會測試連線。零可以是一個值,也可以沒有資料。
- C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。
UO.Str(),UO.Strength(),UO.GetStr(),UO.GetStrength().
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
var result = UO.GetStrength();
UO.Print("GetStrength: " + Convert.ToString(result));參數與執行流程:
- value 儲存數值結果;轉換。 ToString 只是將其格式化為雜誌。沒有爭論或角色動作。
var value = UO.GetStrength();
UO.Print("Strength: " + Convert.ToString(value));參數與執行流程:
- 前後分別1000 ms; UO.Wait 加入範例。 Change=after-before 可以是正數、零或負數。就其本身而言,它並不區分所有中間更新和退出世界。
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var before = UO.GetStrength();
await Delay(1000);
var after = UO.GetStrength();
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.GetStrength();
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 [GetStrength]. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Strength:bridge.Strength.
呼叫時執行已儲存的處理函式 delegate。註冊方法在建立 API 時建立此 delegate。
內部實作程式碼,不能作為獨立腳本執行。
() => bridge.Strength建立 API: 這些函式負責註冊 API,不會在每次命令呼叫時重新執行。
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.GetTitle(object? objID);讀取客戶已知的角色頭銜:例如姓名後的職業或簽名。
-
objID— 必需的 serial/ID 對象,而非 type 也不是 cliloc。接受 int、十進位/十六進位字串、self、backpack、lasttarget、finditem 或名稱 AddObject。 0表示沒有物體。
string — 移动设备标题字段的文本。如果標題未知、物件不是字元或缺少 ID,則為空字串。它不是 serial、全名或屬性陣列。 GetAltName 使用與 GetTitle 相同的欄位。
- 呼叫本身讀取本地數據,不等待伺服器,也不發送單擊。要請求姓名/頭銜,請單獨使用ClickOnObject;回應是異步到來的。
- 對於現有字符,空字串也是可接受的。 Exists 檢查回答了另一個問題:物件是否已載入。
- 在此實作中,備用名稱被對應到角色的標題欄位。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
object? result = UO.GetTitle("self");
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));參數與執行流程:
- ObjID=self — 目前客戶端的角色。
- title 僅包含標題;空白欄位並不意味著腳本錯誤。
var title = UO.GetTitle("self");
UO.Print(title);參數與執行流程:
- ObjID=id — 最後一個目標的serial。 GetName和標題分開讀取。
- 項目目標沒有標題字段,並且將給出空字串。
return RunScenario();
object? RunScenario()
{
var id = UO.GetSerial("lasttarget");
if (Truth(UO.Exists(id)))
{
var title = UO.GetTitle(id);
if (Truth(title != ""))
{
UO.Print(UO.GetName(id) + " " + title);
}
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;參數與執行流程:
- 350 — 點選後以毫秒為單位的暫停範例;這不是一個 getter 參數。
- 伺服器可能會稍後回應,也可能不會傳輸標題。保留對空字串的處理。
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
var id = UO.GetSerial("lasttarget");
if (Truth(UO.Exists(id)))
{
UO.ClickOnObject(id);
UO.Wait(350);
UO.Print(UO.GetTitle(id));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。
參數: objID (Any)
結果: dynamic / Any.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetTitle:bridge.GetTitle(Arg(0, bridge.Self)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0, bridge.Self). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Self:bridge.Self.
內部實作程式碼,不能作為獨立腳本執行。
case "gettitle": return new InjectionValue(bridge.GetTitle(Arg(0, bridge.Self)));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.GetWeight();讀取角色的狀態計數器:目前的石頭重量。
沒有參數。
int — 當前石頭重量,0..65535 在客戶端模型中。 0 可以是真實值、無資料或遺失/損壞的播放器。這是一個數量,不是bool、ID或type:1表示一個單位,而不是成功。該指令不會迭代對象,也不傳回數組。
- 此指令不帶參數。使用上面的確切簽名。
- 如果目前Player存在且尚未被銷毀,則在遊戲執行緒上讀取需要Player.Weight;否則0。設備不排序,獎金不重新計算,狀態不要求,並且沒有等待更新。存在的鬼魂不等於被摧毀的玩家。
- Weight 讀取伺服器報告的總重量(以石頭為單位)。身體、設備和隨附行李的重量包含在數量中是由分片的規則決定的。團隊不會遍歷貨櫃、累加物品重量或更新封閉的袋子。這不是單一項目的 Weight 屬性,也不是項目的數量。
- CharacterStatus 在更新之前檢查所需的主體。 Weight 可用其自己的擴展狀態,插槽 - 與 type 3, Luck - 和 type 4, 伺服器 WeightMax - 和 type 5。沒有可選計數器的緊湊/舊包會留下其先前的快取。新玩家從頭開始;該通話並未證明收到新狀態。
- 這些函式負責註冊 API,不會在每次命令呼叫時重新執行。 C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。
- 每次呼叫都會重新讀取本地資料。變數儲存快照;各個讀取可能會收到不同的伺服器更新。非零結果不會測試連線。零可以是一個值,也可以沒有資料。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
var result = UO.GetWeight();
UO.Print("GetWeight: " + Convert.ToString(result));參數與執行流程:
- value 儲存對其自身字元的一次無參數呼叫; Convert.ToString 格式化日誌中的數字而不改變其意義。
var value = UO.GetWeight();
UO.Print("Weight: " + Convert.ToString(value));參數與執行流程:
- UO.Wait(500)前後間隔500毫秒。差值可以是正數、零或負數;暫時更新和角色變更可能會被跳過。暫停就是一個例子。
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var before = UO.GetWeight();
await Delay(500);
var after = UO.GetWeight();
var difference = after - before;
UO.Print("Counter change: " + Convert.ToString(difference));
return null;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));參數與執行流程:
- CanCarry(額外)獲得額外的石頭重量; 10是一個例子,不是堆疊的數量。拒絕負額外、無玩家或最大值 <= 0,讀取當前重量和限制,然後按額外 <= 最大值 - 目前返回 bool: true 或 false。減法避免了當前+額外的溢出。過載時,即使額外=0,結果也是false。這是本地評估,不是伺服器解析;讀取不是原子的,並且零權重可能是未知的。
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
if (Truth(Truth(CanCarry(10)) == true))
{
UO.Print("Local check passed");
}
else
{
UO.Print("Local check failed or data unavailable");
}
return null;
}
dynamic CanCarry(dynamic extra)
{
if (Truth(extra < 0) || Truth(UO.Self() == 0))
{
return false;
}
var current = UO.GetWeight();
var maximum = UO.MaxWeight();
if (Truth(maximum <= 0))
{
return false;
}
return extra <= maximum - current;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。
參數: 沒有參數。
結果: int / Integer.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.Weight. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Weight:bridge.Weight.
內部實作程式碼,不能作為獨立腳本執行。
public int Weight() => bridge.Weight;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.GetYellowBar(object? id);檢查黃色生命條標誌 mobile。
-
id- 必需的 serial/ID 具體對象: int、十六進位字串或別名 self, backpack, lasttarget, lastobject, lastcontainer、laststatus、finitem、lastcorpse 或名稱 AddObject。這不是 graphic/type。未指定的名稱被解析為 0;該指令不會開啟任何新目標。參數是必需的;為自己傳遞 self.
int 1 - 加載的mobile具有屬性IsYellowHits。 int 0 - 屬性遺失,物件不是 mobile、未知或已刪除。這是伺服器/相容標誌,而不是主題顏色IDE或數量HP。沒有標誌並不證明存在漏洞:伺服器可能會以不同的方式指示保護。
該命令的結果是一個數字標誌: 1 表示滿足條件, 0 - 未實現。後 var 結果=命令(...)檢查是否(結果!= 0) 或 if (結果 == 0)。儲存一次呼叫的結果:重複呼叫可以再次執行該操作或讀取已經變更的狀態。
- 讀取本機用戶端模型;無需向伺服器發出請求,無需等待或移動。
- 結果指的是閱讀的那一刻。在UO.Wait或其他操作之後,物件及其標誌可能會發生變化。
- 這是伺服器/相容標誌,而不是主題顏色IDE或數量HP。沒有標誌並不證明存在漏洞:伺服器可能會以不同的方式指示保護。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
var result = UO.GetYellowBar("self");
UO.Print("GetYellowBar: " + Convert.ToString(result));參數與執行流程:
- self 參數明確選擇其字元。狀態 - 僅1/0。
- 這是伺服器/相容標誌,而不是主題顏色IDE或數量HP。沒有標誌並不證明存在漏洞:伺服器可能會以不同的方式指示保護。
var state = UO.GetYellowBar("self");
var hp = UO.GetHP("self");
UO.Print("Yellow flag: " + Convert.ToString(state));
UO.Print("Known HP: " + Convert.ToString(hp));參數與執行流程:
- IsNpc 排除主體和未知客體。 target 儲存單一serial,而不是對不斷變化的lasttarget 的即時引用。
- 結果引用欄位IsYellowHits。僅在客戶端收到適當的狀態後才會更新資料。
return RunScenario();
object? RunScenario()
{
var target = UO.GetSerial("lasttarget");
if (Truth(UO.IsNPC(target)))
{
var state = UO.GetYellowBar(target);
UO.Print("Selected mobile state 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;參數與執行流程:
- UO.Wait(500) — 以毫秒為單位暫停。之後,單獨檢查mobile是否仍然存在。
- 比較兩個影像。可能會錯過中間的更改,並且這不是對伺服器事件的連續訂閱。
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 target = UO.GetSerial("lasttarget");
if (Truth(UO.IsNPC(target)))
{
var before = UO.GetYellowBar(target);
await Delay(500);
if (Truth(UO.IsNPC(target)))
{
var after = UO.GetYellowBar(target);
if (Truth(before != after))
{
UO.Print("Flag changed: " + Convert.ToString(before) + " -> " + Convert.ToString(after));
}
}
else
{
UO.Print("Mobile left the local world");
}
}
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。
參數: id (Any)
結果: int / Integer.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.GetYellowBar. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetYellowBar:bridge.GetYellowBar(GetObject(id)). -
InjectionScript.Runtime.InjectionApiUO.GetObject:GetObject(id).
內部實作程式碼,不能作為獨立腳本執行。
public int GetYellowBar(InjectionValue id) => bridge.GetYellowBar(GetObject(id));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.Gold();從目前角色的狀態讀取金幣數量。
沒有參數。
int/double 是非負和0..4294967295。返回並包含2147483647int,高於double(Double),精確表示任何32位無符號整數。 0 也表示目前沒有未刪除的玩家或收到的金額。這不是bool、ID、堆疊數量或背包/銀行旁路。
- 沒有參數。從 CharacterStatus (0x11) 讀取 Player.Gold 快取。伺服器決定其計數器中包含哪些金幣;該團隊不會檢查袋子或索取銀行餘額。沒有/被摧毀的玩家 - 0;幽靈存在可以維持一定的狀態量。
- ReadGoldValue 讀取橋接一次。 Gold。舊的C#橋保留Int32簽章並傳送UInt32位元。未经检查的转换恢复未签名的总和;少量变成int,大量变成double。最高有效位元不再使餘額變成負值。轉換是本地的,沒有包。
- 每次呼叫都會重新讀取本地資料。變數儲存快照;各個讀取可能會收到不同的伺服器更新。非零結果不會測試連線。零可以是一個值,也可以沒有資料。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
object? result = UO.Gold();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));參數與執行流程:
- amount 儲存一個結果;轉換。 ToString 將其格式化為雜誌。黃金不會被尋找、攜帶或花費。
var amount = UO.Gold();
UO.Print("Status gold: " + Convert.ToString(amount));參數與執行流程:
- Price=3000000000.0 是價格範例,而不是限制。 CanAfford(price) 拒絕負價格或沒有玩家,讀取一次金額並回傳 bool: true 或 false 如果金額 >= 價格。金额本身并不是bool。此函數的完整定義如下。
return RunScenario();
object? RunScenario()
{
var price = 3000000000.0;
if (Truth(Truth(CanAfford(price)) == true))
{
UO.Print("Local balance is sufficient");
}
else
{
UO.Print("Local check failed");
}
return null;
}
dynamic CanAfford(dynamic price)
{
if (Truth(price < 0) || Truth(UO.Self() == 0))
{
return false;
}
var amount = UO.Gold();
return amount >= price;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;參數與執行流程:
- 之前/之后分隔 UO.Wait(500) 毫秒。當餘額減少時,difference=after-before 可以為負數;這不是固定的無符號計數器溢位。可能会错过临时更新和角色更改。
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.Gold();
await Delay(500);
var after = UO.Gold();
var difference = after - before;
UO.Print("Balance change: " + Convert.ToString(difference));
return null;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
}C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。
參數: 沒有參數。
結果: dynamic / Any.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ReadGoldValue:ReadGoldValue().
內部實作程式碼,不能作為獨立腳本執行。
case "gold": return ReadGoldValue();Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.HP();從本機模型讀取目前的運行狀況。
沒有參數。
int 是「Hits」欄位的值,不是百分比,也不是bool。 0 可以是實值或缺失資料的指示。零最大值不能用作除數。對別人的mobile來說,其意義可能是未知的。 HP/HitsMax 可能包含相對伺服器比例而不是精確點。 HP=0並不能證明死亡;為此有Dead/IsDead。
- 該命令不會開啟狀態,也不會請求伺服器更新。客户端只读取已经加载的数据。不改变特性,也不发送数据包。
- 結果是單獨閱讀。从Exists到下一个挑战,世界可能会发生变化;多个查询不形成原子快照。
- 讀取物件時,World.Get 會拒絕缺少的或 IsDestroyed 並產生 0。 HP/HitsMax從實體中讀取,包括具有這些欄位的項目; Mana/Stamina - 僅適用於行動裝置。沒有爭論,請閱讀self。不帶參數的同名變體不一定有ID的變體:請參閱簽名。
- 對於遺失或損壞的 Player,不帶參數的讀取也會回傳 0。這適用於直接 Mana/Stamina 及其最大值,而不僅僅是透過 World.Get 的表格。存在的死亡角色可以保留價值。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
var result = UO.HP();
UO.Print("HP: " + Convert.ToString(result));參數與執行流程:
- 不帶參數的呼叫讀取為self。 value 儲存一個數字,Convert.ToString 僅將其轉換為訊息。
var value = UO.HP();
UO.Print("HP: " + Convert.ToString(value));參數與執行流程:
- 顯示該欄位應用的閾值或計算。條件中的數字是範例設置,而不是伺服器限制。在除以最大值之前,檢查其正值。
return RunScenario();
object? RunScenario()
{
var value = UO.HP();
var maximum = UO.GetMaxHP();
if (Truth(maximum > 0) && Truth(value * 100 / maximum < 50))
{
UO.Print("Health below half of the known maximum");
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;參數與執行流程:
- 該名稱沒有 ID 的形式。不含參數的ReadValue讀取self;兩個呼叫由 UO.Wait(1000) 分隔。比較兩個快照可能會錯過中間更改。
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
async public Task<object?> RunScenarioAsync()
{
var before = ReadValue();
await Delay(1000);
var after = ReadValue();
UO.Print("Before: " + Convert.ToString(before) + "; after: " + Convert.ToString(after));
return null;
}
dynamic ReadValue()
{
return UO.HP();
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
}C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。
參數: 沒有參數。
結果: int / Integer.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases [HP]. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetHP:bridge.GetHP(bridge.Self). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Self:bridge.Self.
呼叫時執行已儲存的處理函式 delegate。註冊方法在建立 API 時建立此 delegate。
內部實作程式碼,不能作為獨立腳本執行。
() => bridge.GetHP(bridge.Self)建立 API: 這些函式負責註冊 API,不會在每次命令呼叫時重新執行。
UO.Hidden
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.Hidden();
int UO.Hidden(object? id);測試角色的隱身能力。
-
id— 所示形式的可選物件:serial 由數字/十六進位字串、self、lasttarget 或註冊名稱 AddObject。這不是type。没有争论,请阅读self。某些形式的未知文字會導致轉換錯誤;打電話前檢查名字。
數字標誌int:1(滿足條件),0(不滿足條件)。這是一個數字標誌:在 C# 中檢查結果 != 0 或結果 == 0。 int 與 true/false 和 if(結果)的直接比較是不允許的。 1 - mobile 有 IsHidden,0 沒有標誌或 mobile 缺失。這是一個伺服器標誌,而不是牆後的可見性。
該命令的結果是一個數字標誌: 1 表示滿足條件, 0 - 未實現。後 var 結果=命令(...)檢查是否(結果!= 0) 或 if (結果 == 0)。儲存一次呼叫的結果:重複呼叫可以再次執行該操作或讀取已經變更的狀態。
- 讀取本機模型:不開啟目標、不要求狀態、不更改標誌、不發送資料包。即使在從字典中刪除條目之前,被破壞的物件也被視為遺失。
- 結果是單獨閱讀。从Exists到下一个挑战,世界可能会发生变化;多个查询不形成原子快照。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
var result = UO.Hidden();
UO.Print("Hidden: " + Convert.ToString(result));參數與執行流程:
- 空括號讀作self。 active 保存一次結果;true和 false定義了兩個分支。 Print 僅顯示範例訊息。
var active = UO.Hidden();
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.Hidden(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.Hidden();
await Delay(500);
var after = UO.Hidden();
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。
UO.Hidden() — UO.Hidden()
參數: 沒有參數。
結果: int / Integer.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.Hidden. -
InjectionScript.Runtime.InjectionApiUO.Hidden:Hidden("self").
內部實作程式碼,不能作為獨立腳本執行。
public int Hidden() => Hidden("self");
UO.Hidden(id) — UO.Hidden(Integer)
參數: id (Integer/String)
結果: int / Integer.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.Hidden. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Hidden:bridge.Hidden(id).
內部實作程式碼,不能作為獨立腳本執行。
public int Hidden(int id) => bridge.Hidden(id);
UO.Hidden(id) — UO.Hidden(String)
參數: id (Integer/String)
結果: int / Integer.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.Hidden. -
InjectionScript.Runtime.InjectionApiUO.Hidden:Hidden(GetObject(idText)). -
InjectionScript.Runtime.InjectionApiUO.GetObject:GetObject(idText).
內部實作程式碼,不能作為獨立腳本執行。
public int Hidden(string idText) => Hidden(GetObject(idText));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.Int();讀取角色當前智力(Intelligence,INT)。
沒有參數。
int — 當前統計點,客戶端模型中的0..65535;不是百分比、ID、技能、鎖定模式或bool。 0 也意味著遺失/刪除的字元或無法存取的物件。與數值要求比較,不==true。這不是統計上限或沒有修飾符的保證基值。
- 此指令不帶參數。使用上面的確切簽名。
- 如果 Player 存在且尚未被銷毀,則讀取 Player.Intelligence;否則0。存在的死亡角色並不是被移除的物體。此統計數據不是根據HP、法力或耐力計算的。
- GetStr/GetInt/GetDex 接受 ObjID。 PlayerMobile数据仅适用于self;对于另一个serial - 0,甚至对于加载的mobile。別人的特徵不能被取代或猜測。
- 呼叫遊戲流上的讀取,並能夠透過腳本取消等待。不查詢狀態、不開啟目標、不發送資料包、不改變特性、不新增延遲。
- 每次呼叫都會重新讀取本地資料。變數儲存快照;各個讀取可能會收到不同的伺服器更新。非零結果不會測試連線。零可以是一個值,也可以沒有資料。
- C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。
UO.Int(),UO.Intelligence(),UO.GetInt(),UO.GetIntelligence().
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
var result = UO.Int();
UO.Print("Int: " + Convert.ToString(result));參數與執行流程:
- value 儲存數值結果;轉換。 ToString 只是將其格式化為雜誌。沒有爭論或角色動作。
var value = UO.Int();
UO.Print("Intelligence: " + Convert.ToString(value));參數與執行流程:
- 前後分別1000 ms; UO.Wait 加入範例。 Change=after-before 可以是正數、零或負數。就其本身而言,它並不區分所有中間更新和退出世界。
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var before = UO.Int();
await Delay(1000);
var after = UO.Int();
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.Int();
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.Intelligence:bridge.Intelligence.
內部實作程式碼,不能作為獨立腳本執行。
case "int": return new InjectionValue(bridge.Intelligence);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.Intelligence();讀取角色當前智力(Intelligence,INT)。
沒有參數。
int — 當前統計點,客戶端模型中的0..65535;不是百分比、ID、技能、鎖定模式或bool。 0 也意味著遺失/刪除的字元或無法存取的物件。與數值要求比較,不==true。這不是統計上限或沒有修飾符的保證基值。
- 此指令不帶參數。使用上面的確切簽名。
- 如果 Player 存在且尚未被銷毀,則讀取 Player.Intelligence;否則0。存在的死亡角色並不是被移除的物體。此統計數據不是根據HP、法力或耐力計算的。
- GetStr/GetInt/GetDex 接受 ObjID。 PlayerMobile数据仅适用于self;对于另一个serial - 0,甚至对于加载的mobile。別人的特徵不能被取代或猜測。
- 呼叫遊戲流上的讀取,並能夠透過腳本取消等待。不查詢狀態、不開啟目標、不發送資料包、不改變特性、不新增延遲。
- 每次呼叫都會重新讀取本地資料。變數儲存快照;各個讀取可能會收到不同的伺服器更新。非零結果不會測試連線。零可以是一個值,也可以沒有資料。
- C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。
UO.Int(),UO.Intelligence(),UO.GetInt(),UO.GetIntelligence().
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
var result = UO.Intelligence();
UO.Print("Intelligence: " + Convert.ToString(result));參數與執行流程:
- value 儲存數值結果;轉換。 ToString 只是將其格式化為雜誌。沒有爭論或角色動作。
var value = UO.Intelligence();
UO.Print("Intelligence: " + Convert.ToString(value));參數與執行流程:
- 前後分別1000 ms; UO.Wait 加入範例。 Change=after-before 可以是正數、零或負數。就其本身而言,它並不區分所有中間更新和退出世界。
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var before = UO.Intelligence();
await Delay(1000);
var after = UO.Intelligence();
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.Intelligence();
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 [Intelligence]. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Intelligence:bridge.Intelligence.
呼叫時執行已儲存的處理函式 delegate。註冊方法在建立 API 時建立此 delegate。
內部實作程式碼,不能作為獨立腳本執行。
() => bridge.Intelligence建立 API: 這些函式負責註冊 API,不會在每次命令呼叫時重新執行。
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.IsAlive();
int UO.IsAlive(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.IsAlive();
UO.Print("IsAlive: " + Convert.ToString(result));參數與執行流程:
- 空括號讀作self。 active 保存一次結果;true和 false定義了兩個分支。 Print 僅顯示範例訊息。
var active = UO.IsAlive();
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.IsAlive(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.IsAlive();
await Delay(500);
var after = UO.IsAlive();
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 [IsAlive]. -
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 [IsAlive]. -
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.IsDead();
dynamic UO.IsDead(object? objID);檢查角色死亡。
-
objID— 所示形式的可選物件: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.IsDead();
UO.Print("IsDead: " + Convert.ToString(result));參數與執行流程:
- 空括號讀作self。 active 保存一次結果;true和 false定義了兩個分支。 Print 僅顯示範例訊息。
var active = UO.IsDead();
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.IsDead(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.IsDead();
await Delay(500);
var after = UO.IsDead();
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 [IsDead]. -
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Self:bridge.Self.
呼叫時執行已儲存的處理函式 delegate。註冊方法在建立 API 時建立此 delegate。
內部實作程式碼,不能作為獨立腳本執行。
IsDeadState內部實作程式碼,不能作為獨立腳本執行。
() => getter(bridge.Self)建立 API: 這些函式負責註冊 API,不會在每次命令呼叫時重新執行。
參數: objID (Any)
結果: dynamic / Any.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.IsDead:bridge.IsDead(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Dead:bridge.Dead().
內部實作程式碼,不能作為獨立腳本執行。
case "isdead": return new InjectionValue(arguments.Length > 0 ? bridge.IsDead(Arg(0)) : bridge.Dead());Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.IsFemale(object? objID);檢查女性性別屬性mobile。
-
objID- 必需的 serial/ID 具體對象: int、十六進位字串或別名 self, backpack, lasttarget, lastobject, lastcontainer、laststatus、finitem、lastcorpse 或名稱 AddObject。這不是 graphic/type。未指定的名稱被解析為 0;該指令不會開啟任何新目標。參數是必需的;為自己傳遞 self.
int 1 - 加載的mobile具有屬性IsFemale。 int 0 - 屬性遺失,物件不是 mobile、未知或已刪除。無法確定物體所有者的種族、姓名、年齡或類型。
該命令的結果是一個數字標誌: 1 表示滿足條件, 0 - 未實現。後 var 結果=命令(...)檢查是否(結果!= 0) 或 if (結果 == 0)。儲存一次呼叫的結果:重複呼叫可以再次執行該操作或讀取已經變更的狀態。
- 讀取本機用戶端模型;無需向伺服器發出請求,無需等待或移動。
- 結果指的是閱讀的那一刻。在UO.Wait或其他操作之後,物件及其標誌可能會發生變化。
- 無法確定物體所有者的種族、姓名、年齡或類型。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
var result = UO.IsFemale("self");
UO.Print("IsFemale: " + Convert.ToString(result));參數與執行流程:
- self 參數明確選擇其字元。狀態 - 僅1/0。
- 無法確定物體所有者的種族、姓名、年齡或類型。
var state = UO.IsFemale("self");
if (Truth(state))
{
UO.Print("Female flag is set");
}
else
{
UO.Print("Female flag is not set");
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;參數與執行流程:
- IsNpc 排除主體和未知客體。 target 儲存單一serial,而不是對不斷變化的lasttarget 的即時引用。
- 結果引用欄位IsFemale。僅在客戶端收到適當的狀態後才會更新資料。
return RunScenario();
object? RunScenario()
{
var target = UO.GetSerial("lasttarget");
if (Truth(UO.IsNPC(target)))
{
var state = UO.IsFemale(target);
UO.Print("Selected mobile state 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;參數與執行流程:
- UO.Wait(500) — 以毫秒為單位暫停。之後,單獨檢查mobile是否仍然存在。
- 比較兩個影像。可能會錯過中間的更改,並且這不是對伺服器事件的連續訂閱。
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 target = UO.GetSerial("lasttarget");
if (Truth(UO.IsNPC(target)))
{
var before = UO.IsFemale(target);
await Delay(500);
if (Truth(UO.IsNPC(target)))
{
var after = UO.IsFemale(target);
if (Truth(before != after))
{
UO.Print("Flag changed: " + Convert.ToString(before) + " -> " + Convert.ToString(after));
}
}
else
{
UO.Print("Mobile left the local world");
}
}
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。
參數: objID (Any)
結果: int / Integer.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.IsFemale:bridge.IsFemale(Arg(0, bridge.Self)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0, bridge.Self). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Self:bridge.Self.
內部實作程式碼,不能作為獨立腳本執行。
case "isfemale": return new InjectionValue(bridge.IsFemale(Arg(0, bridge.Self)));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.IsFlying();
int UO.IsFlying(object? value);檢查角色當前是否正在飛行。 Gargoyle 通常需要這樣做:例如,在開始航線之前或要求啟用航班之前。回答「我的角色現在在飛嗎?」的問題沒有爭論。此命令僅讀取狀態:它不會啟用角色飛行、著陸或移動。
-
value- 可選的 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.IsFlying();
UO.Print("IsFlying: " + Convert.ToString(result));參數與執行流程:
- 空括號表示self。 true等於1,false等於0;如果 UO.Flying() { ... } 是可以接受的。這個例子沒有改變任何東西。
var active = UO.IsFlying();
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.IsFlying(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.IsFlying()))
{
return true;
}
UO.ToggleFly();
var waited = 0;
while (Truth(waited < timeoutMs))
{
if (!(Truth(UO.Connected())))
{
return false;
}
if (Truth(UO.IsFlying()))
{
return true;
}
await Delay(50);
waited += 50;
}
return UO.IsFlying();
}
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 [IsFlying]. -
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Flying:bridge.Flying(serial). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Self:bridge.Self.
呼叫時執行已儲存的處理函式 delegate。註冊方法在建立 API 時建立此 delegate。
內部實作程式碼,不能作為獨立腳本執行。
serial => bridge.Flying(serial)內部實作程式碼,不能作為獨立腳本執行。
() => getter(bridge.Self)建立 API: 這些函式負責註冊 API,不會在每次命令呼叫時重新執行。
參數: value (Any)
結果: int / Integer.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases [IsFlying]. -
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Flying:bridge.Flying(serial). -
InjectionScript.Runtime.InjectionApiUO.GetObject:GetObject(value).
呼叫時執行已儲存的處理函式 delegate。註冊方法在建立 API 時建立此 delegate。
內部實作程式碼,不能作為獨立腳本執行。
serial => bridge.Flying(serial)內部實作程式碼,不能作為獨立腳本執行。
value => getter(GetObject(value))建立 API: 這些函式負責註冊 API,不會在每次命令呼叫時重新執行。
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.IsFrozen();
int UO.IsFrozen(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.IsFrozen();
UO.Print("IsFrozen: " + Convert.ToString(result));參數與執行流程:
- 空括號選擇 self。 state 儲存標誌的一個快照; true — 數值常數 1。
- false 的結果並不排除因牆壁、缺乏耐力或其他原因而停止。
var state = UO.IsFrozen();
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.IsFrozen(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.IsFrozen()) == true) && Truth(attempts < 10))
{
await Delay(100);
attempts = attempts + 1;
}
if (Truth(UO.IsNPC("self")))
{
if (Truth(Truth(UO.IsFrozen()) == 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 [IsFrozen]. -
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 [IsFrozen]. -
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,不會在每次命令呼叫時重新執行。
UO.IsHidden
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.IsHidden();
dynamic UO.IsHidden(object? objID);測試角色的隱身能力。
-
objID— 所示形式的可選物件:serial 由數字/十六進位字串、self、lasttarget 或註冊名稱 AddObject。這不是type。没有争论,请阅读self。某些形式的未知文字會導致轉換錯誤;打電話前檢查名字。
數字標誌int:1(滿足條件),0(不滿足條件)。這是一個數字標誌:在 C# 中檢查結果 != 0 或結果 == 0。 int 與 true/false 和 if(結果)的直接比較是不允許的。 1 - mobile 有 IsHidden,0 沒有標誌或 mobile 缺失。這是一個伺服器標誌,而不是牆後的可見性。
該命令的結果是一個數字標誌: 1 表示滿足條件, 0 - 未實現。後 var 結果=命令(...)檢查是否(結果!= 0) 或 if (結果 == 0)。儲存一次呼叫的結果:重複呼叫可以再次執行該操作或讀取已經變更的狀態。
- 讀取本機模型:不開啟目標、不要求狀態、不更改標誌、不發送資料包。即使在從字典中刪除條目之前,被破壞的物件也被視為遺失。
- 結果是單獨閱讀。从Exists到下一个挑战,世界可能会发生变化;多个查询不形成原子快照。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
var result = UO.IsHidden();
UO.Print("IsHidden: " + Convert.ToString(result));參數與執行流程:
- 空括號讀作self。 active 保存一次結果;true和 false定義了兩個分支。 Print 僅顯示範例訊息。
var active = UO.IsHidden();
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.IsHidden(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.IsHidden();
await Delay(500);
var after = UO.IsHidden();
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。
UO.IsHidden() — UO.IsHidden()
參數: 沒有參數。
結果: int / Integer.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases [IsHidden]. -
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Hidden:bridge.Hidden(serial). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Self:bridge.Self.
呼叫時執行已儲存的處理函式 delegate。註冊方法在建立 API 時建立此 delegate。
內部實作程式碼,不能作為獨立腳本執行。
serial => bridge.Hidden(serial)內部實作程式碼,不能作為獨立腳本執行。
() => getter(bridge.Self)建立 API: 這些函式負責註冊 API,不會在每次命令呼叫時重新執行。
UO.IsHidden(objID) — UO.IsHidden(Any)
參數: objID (Any)
結果: dynamic / Any.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Hidden:bridge.Hidden(Arg(0, bridge.Self)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0, bridge.Self). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Self:bridge.Self.
內部實作程式碼,不能作為獨立腳本執行。
case "ishidden": return new InjectionValue(bridge.Hidden(Arg(0, bridge.Self)));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.IsParalysed();
int UO.IsParalysed(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.IsParalysed();
UO.Print("IsParalysed: " + Convert.ToString(result));參數與執行流程:
- 空括號選擇 self。 state 儲存標誌的一個快照; true — 數值常數 1。
- false 的結果並不排除因牆壁、缺乏耐力或其他原因而停止。
var state = UO.IsParalysed();
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.IsParalysed(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.IsParalysed()) == true) && Truth(attempts < 10))
{
await Delay(100);
attempts = attempts + 1;
}
if (Truth(UO.IsNPC("self")))
{
if (Truth(Truth(UO.IsParalysed()) == 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 [IsParalysed]. -
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 [IsParalysed]. -
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetLocked:bridge.GetLocked(serial). -
InjectionScript.Runtime.InjectionApiUO.GetObject:GetObject(value).
呼叫時執行已儲存的處理函式 delegate。註冊方法在建立 API 時建立此 delegate。
內部實作程式碼,不能作為獨立腳本執行。
serial => bridge.GetLocked(serial)內部實作程式碼,不能作為獨立腳本執行。
value => getter(GetObject(value))建立 API: 這些函式負責註冊 API,不會在每次命令呼叫時重新執行。
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.IsParalyzed();
int UO.IsParalyzed(object? objID);檢查客戶端已知的角色麻痺標誌。
-
objID- 可選 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.IsParalyzed();
UO.Print("IsParalyzed: " + Convert.ToString(result));參數與執行流程:
- 空括號選擇 self。 state 儲存標誌的一個快照; true — 數值常數 1。
- false 的結果並不排除因牆壁、缺乏耐力或其他原因而停止。
var state = UO.IsParalyzed();
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.IsParalyzed(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.IsParalyzed()) == true) && Truth(attempts < 10))
{
await Delay(100);
attempts = attempts + 1;
}
if (Truth(UO.IsNPC("self")))
{
if (Truth(Truth(UO.IsParalyzed()) == 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 [IsParalyzed]. -
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,不會在每次命令呼叫時重新執行。
參數: objID (Any)
結果: int / Integer.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetLocked:bridge.GetLocked(Arg(0, bridge.Self)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0, bridge.Self). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Self:bridge.Self.
內部實作程式碼,不能作為獨立腳本執行。
case "isparalyzed": return new InjectionValue(bridge.GetLocked(Arg(0, bridge.Self)));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.IsPoisoned();
dynamic UO.IsPoisoned(object? objID);檢查角色中毒情況。
-
objID— 所示形式的可選物件:serial 由數字/十六進位字串、self、lasttarget 或註冊名稱 AddObject。這不是type。没有争论,请阅读self。某些形式的未知文字會導致轉換錯誤;打電話前檢查名字。
數字標誌int:1(滿足條件),0(不滿足條件)。這是一個數字標誌:在 C# 中檢查結果 != 0 或結果 == 0。 int 與 true/false 和 if(結果)的直接比較是不允許的。 1 - mobile 有 IsPoisoned,0 沒有標誌或 mobile 缺失。中毒程度和剩餘時間不返回。
該命令的結果是一個數字標誌: 1 表示滿足條件, 0 - 未實現。後 var 結果=命令(...)檢查是否(結果!= 0) 或 if (結果 == 0)。儲存一次呼叫的結果:重複呼叫可以再次執行該操作或讀取已經變更的狀態。
- 讀取本機模型:不開啟目標、不要求狀態、不更改標誌、不發送資料包。即使在從字典中刪除條目之前,被破壞的物件也被視為遺失。
- 結果是單獨閱讀。从Exists到下一个挑战,世界可能会发生变化;多个查询不形成原子快照。
- 對於Poisoned/Flying,考慮協議版本:直到7.0.0.0,0x04位表示有毒; 7.0.0.0開頭表示飛行,毒藥單獨存放。航班不是根據Z計算的。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
var result = UO.IsPoisoned();
UO.Print("IsPoisoned: " + Convert.ToString(result));參數與執行流程:
- 空括號讀作self。 active 保存一次結果;true和 false定義了兩個分支。 Print 僅顯示範例訊息。
var active = UO.IsPoisoned();
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.IsPoisoned(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.IsPoisoned();
await Delay(500);
var after = UO.IsPoisoned();
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 [IsPoisoned]. -
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Poisoned:bridge.Poisoned(serial). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Self:bridge.Self.
呼叫時執行已儲存的處理函式 delegate。註冊方法在建立 API 時建立此 delegate。
內部實作程式碼,不能作為獨立腳本執行。
serial => bridge.Poisoned(serial)內部實作程式碼,不能作為獨立腳本執行。
() => getter(bridge.Self)建立 API: 這些函式負責註冊 API,不會在每次命令呼叫時重新執行。
參數: objID (Any)
結果: dynamic / Any.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Poisoned:bridge.Poisoned(Arg(0, bridge.Self)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0, bridge.Self). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Self:bridge.Self.
內部實作程式碼,不能作為獨立腳本執行。
case "ispoisoned": return new InjectionValue(bridge.Poisoned(Arg(0, bridge.Self)));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.IsYellowHits(object? objID);檢查黃色生命條標誌 mobile。
-
objID- 必需的 serial/ID 具體對象: int、十六進位字串或別名 self, backpack, lasttarget, lastobject, lastcontainer、laststatus、finitem、lastcorpse 或名稱 AddObject。這不是 graphic/type。未指定的名稱被解析為 0;該指令不會開啟任何新目標。參數是必需的;為自己傳遞 self.
int 1 - 加載的mobile具有屬性IsYellowHits。 int 0 - 屬性遺失,物件不是 mobile、未知或已刪除。這是伺服器/相容標誌,而不是主題顏色IDE或數量HP。沒有標誌並不證明存在漏洞:伺服器可能會以不同的方式指示保護。
該命令的結果是一個數字標誌: 1 表示滿足條件, 0 - 未實現。後 var 結果=命令(...)檢查是否(結果!= 0) 或 if (結果 == 0)。儲存一次呼叫的結果:重複呼叫可以再次執行該操作或讀取已經變更的狀態。
- 讀取本機用戶端模型;無需向伺服器發出請求,無需等待或移動。
- 結果指的是閱讀的那一刻。在UO.Wait或其他操作之後,物件及其標誌可能會發生變化。
- 這是伺服器/相容標誌,而不是主題顏色IDE或數量HP。沒有標誌並不證明存在漏洞:伺服器可能會以不同的方式指示保護。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
var result = UO.IsYellowHits("self");
UO.Print("IsYellowHits: " + Convert.ToString(result));參數與執行流程:
- self 參數明確選擇其字元。狀態 - 僅1/0。
- 這是伺服器/相容標誌,而不是主題顏色IDE或數量HP。沒有標誌並不證明存在漏洞:伺服器可能會以不同的方式指示保護。
var state = UO.IsYellowHits("self");
var hp = UO.GetHP("self");
UO.Print("Yellow flag: " + Convert.ToString(state));
UO.Print("Known HP: " + Convert.ToString(hp));參數與執行流程:
- IsNpc 排除主體和未知客體。 target 儲存單一serial,而不是對不斷變化的lasttarget 的即時引用。
- 結果引用欄位IsYellowHits。僅在客戶端收到適當的狀態後才會更新資料。
return RunScenario();
object? RunScenario()
{
var target = UO.GetSerial("lasttarget");
if (Truth(UO.IsNPC(target)))
{
var state = UO.IsYellowHits(target);
UO.Print("Selected mobile state 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;參數與執行流程:
- UO.Wait(500) — 以毫秒為單位暫停。之後,單獨檢查mobile是否仍然存在。
- 比較兩個影像。可能會錯過中間的更改,並且這不是對伺服器事件的連續訂閱。
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 target = UO.GetSerial("lasttarget");
if (Truth(UO.IsNPC(target)))
{
var before = UO.IsYellowHits(target);
await Delay(500);
if (Truth(UO.IsNPC(target)))
{
var after = UO.IsYellowHits(target);
if (Truth(before != after))
{
UO.Print("Flag changed: " + Convert.ToString(before) + " -> " + Convert.ToString(after));
}
}
else
{
UO.Print("Mobile left the local world");
}
}
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。
參數: objID (Any)
結果: int / Integer.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetYellowBar:bridge.GetYellowBar(Arg(0, bridge.Self)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0, bridge.Self). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Self:bridge.Self.
內部實作程式碼,不能作為獨立腳本執行。
case "isyellowhits": return new InjectionValue(bridge.GetYellowBar(Arg(0, bridge.Self)));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.LastStatus();傳回客戶端接受狀態的最後一個物件的serial。
沒有參數。
int 是32 位元serial,而不是type,也不是邏輯結果。 0:尚未接受狀態或世界已被清除。保留最高有效位;負數也可以表示serial。檢查 != 0,而非 > 0 且不 == true。
- 無參數。讀取不會發送資料包、開啟視窗或等待回應。 UO.GetStatus(id)、RequestStats和UpdateObject僅請求資料:發送不會改變LastStatus。
- 收到的套件0x11將serial和客戶端已知的X/Y一起儲存在所有腳本的World中。未知/被破壞的物件和不完整的基礎包不會替換該條目。其他物件的後續包可能會取代它。
- X/Y是實體在接收時的快照,而不是目前位置。對於mobile,這些是世界細胞;對於容器內的項目,這可能是內容的座標。狀態包本身不傳送X/Y。接收後移動/移除物件不會改變影像; World.Clear 重置它。對於現有要素的當前座標,請使用 GetX/GetY。
- 單一呼叫不形成原子快照;伺服器可以更新它們之間的記錄。等式 serial 並不能證明專門針對您的查詢的新答案。如果腳本沒有用變數覆寫它,則不帶括號的laststatus是即時內建值; UO.LastStatus()是一個註冊函數。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
var result = UO.LastStatus();
UO.Print("LastStatus: " + Convert.ToString(result));參數與執行流程:
- 该值被读取一次。對於serial,HEX保留了方便的十六進位表示法;對於座標 Convert.ToString 列印數字。該呼叫不會選擇對象。
var value = UO.LastStatus();
UO.Print("Saved value: " + Hex(value));
string Hex(object? value) => Convert.ToInt64(value).ToString("X");參數與執行流程:
- 主題 — serial self。 500 是以毫秒為單位的暫停,僅作為範例而選擇。它不保證答案:顯示當前記錄,該記錄可能仍然是舊的或屬於另一個物件。
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var subject = UO.Self();
if (Truth(subject != 0))
{
UO.GetStatus(subject);
await Delay(500);
var value = UO.LastStatus();
UO.Print("Known value: " + Hex(value));
}
return null;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
string Hex(object? value) => Convert.ToInt64(value).ToString("X");
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;參數與執行流程:
- expectedId - serial,保存在Main中。助手的完整定義如下; -1表示所選條目不再存在,且不是指令本身的結果。之前/之後檢查降低了混合物件的風險,但不保證更新相同serial時的原子性。
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
var expectedId = UO.LastStatus();
if (Truth(expectedId != 0))
{
var value = ReadSavedStatus(expectedId);
UO.Print("Checked value: " + Convert.ToString(value));
}
return null;
}
dynamic ReadSavedStatus(dynamic expectedId)
{
if (Truth(expectedId == 0) || Truth(UO.LastStatus() != expectedId))
{
return -1;
}
var value = UO.LastStatus();
if (Truth(UO.LastStatus() != expectedId))
{
return -1;
}
return value;
}
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.LastStatus:bridge.LastStatus.
內部實作程式碼,不能作為獨立腳本執行。
case "laststatus": return new InjectionValue(bridge.LastStatus);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.LastStatusX();傳回最後接受的狀態物件的儲存 X 座標。
沒有參數。
int 是X 保存的座標,不是狀態視窗的像素,也不是bool。在第一個狀態之前或通關世界之後 - 0;座標0本身也是可以接受的。檢查UO.LastStatus()以區分遺失的條目。
- 無參數。讀取不會發送資料包、開啟視窗或等待回應。 UO.GetStatus(id)、RequestStats和UpdateObject僅請求資料:發送不會改變LastStatus。
- 收到的套件0x11將serial和客戶端已知的X/Y一起儲存在所有腳本的World中。未知/被破壞的物件和不完整的基礎包不會替換該條目。其他物件的後續包可能會取代它。
- X/Y是實體在接收時的快照,而不是目前位置。對於mobile,這些是世界細胞;對於容器內的項目,這可能是內容的座標。狀態包本身不傳送X/Y。接收後移動/移除物件不會改變影像; World.Clear 重置它。對於現有要素的當前座標,請使用 GetX/GetY。
- 單一呼叫不形成原子快照;伺服器可以更新它們之間的記錄。等式 serial 並不能證明專門針對您的查詢的新答案。如果腳本沒有用變數覆寫它,則不帶括號的laststatus是即時內建值; UO.LastStatus()是一個註冊函數。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
var result = UO.LastStatusX();
UO.Print("LastStatusX: " + Convert.ToString(result));參數與執行流程:
- 该值被读取一次。對於serial,HEX保留了方便的十六進位表示法;對於座標 Convert.ToString 列印數字。該呼叫不會選擇對象。
var value = UO.LastStatusX();
UO.Print("Saved value: " + Convert.ToString(value));參數與執行流程:
- 主題 — serial self。 500 是以毫秒為單位的暫停,僅作為範例而選擇。它不保證答案:顯示當前記錄,該記錄可能仍然是舊的或屬於另一個物件。
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var subject = UO.Self();
if (Truth(subject != 0))
{
UO.GetStatus(subject);
await Delay(500);
var value = UO.LastStatusX();
UO.Print("Known value: " + Convert.ToString(value));
}
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;參數與執行流程:
- expectedId - serial,保存在Main中。助手的完整定義如下; -1表示所選條目不再存在,且不是指令本身的結果。之前/之後檢查降低了混合物件的風險,但不保證更新相同serial時的原子性。
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
var expectedId = UO.LastStatus();
if (Truth(expectedId != 0))
{
var value = ReadSavedStatus(expectedId);
UO.Print("Checked value: " + Convert.ToString(value));
}
return null;
}
dynamic ReadSavedStatus(dynamic expectedId)
{
if (Truth(expectedId == 0) || Truth(UO.LastStatus() != expectedId))
{
return -1;
}
var value = UO.LastStatusX();
if (Truth(UO.LastStatus() != expectedId))
{
return -1;
}
return value;
}
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.LastStatusX. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetX:bridge.GetX(bridge.LastStatus). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.LastStatus:bridge.LastStatus.
內部實作程式碼,不能作為獨立腳本執行。
public int LastStatusX() => bridge is IStatusSnapshotBridge snapshot ? snapshot.LastStatusX : bridge.GetX(bridge.LastStatus);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.LastStatusY();傳回最後接受的狀態物件的儲存 Y 座標。
沒有參數。
int 是Y 保存的座標,不是狀態視窗的像素,也不是bool。在第一個狀態之前或通關世界之後 - 0;座標0本身也是可以接受的。檢查UO.LastStatus()以區分遺失的條目。
- 無參數。讀取不會發送資料包、開啟視窗或等待回應。 UO.GetStatus(id)、RequestStats和UpdateObject僅請求資料:發送不會改變LastStatus。
- 收到的套件0x11將serial和客戶端已知的X/Y一起儲存在所有腳本的World中。未知/被破壞的物件和不完整的基礎包不會替換該條目。其他物件的後續包可能會取代它。
- X/Y是實體在接收時的快照,而不是目前位置。對於mobile,這些是世界細胞;對於容器內的項目,這可能是內容的座標。狀態包本身不傳送X/Y。接收後移動/移除物件不會改變影像; World.Clear 重置它。對於現有要素的當前座標,請使用 GetX/GetY。
- 單一呼叫不形成原子快照;伺服器可以更新它們之間的記錄。等式 serial 並不能證明專門針對您的查詢的新答案。如果腳本沒有用變數覆寫它,則不帶括號的laststatus是即時內建值; UO.LastStatus()是一個註冊函數。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
var result = UO.LastStatusY();
UO.Print("LastStatusY: " + Convert.ToString(result));參數與執行流程:
- 该值被读取一次。對於serial,HEX保留了方便的十六進位表示法;對於座標 Convert.ToString 列印數字。該呼叫不會選擇對象。
var value = UO.LastStatusY();
UO.Print("Saved value: " + Convert.ToString(value));參數與執行流程:
- 主題 — serial self。 500 是以毫秒為單位的暫停,僅作為範例而選擇。它不保證答案:顯示當前記錄,該記錄可能仍然是舊的或屬於另一個物件。
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var subject = UO.Self();
if (Truth(subject != 0))
{
UO.GetStatus(subject);
await Delay(500);
var value = UO.LastStatusY();
UO.Print("Known value: " + Convert.ToString(value));
}
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;參數與執行流程:
- expectedId - serial,保存在Main中。助手的完整定義如下; -1表示所選條目不再存在,且不是指令本身的結果。之前/之後檢查降低了混合物件的風險,但不保證更新相同serial時的原子性。
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
var expectedId = UO.LastStatus();
if (Truth(expectedId != 0))
{
var value = ReadSavedStatus(expectedId);
UO.Print("Checked value: " + Convert.ToString(value));
}
return null;
}
dynamic ReadSavedStatus(dynamic expectedId)
{
if (Truth(expectedId == 0) || Truth(UO.LastStatus() != expectedId))
{
return -1;
}
var value = UO.LastStatusY();
if (Truth(UO.LastStatus() != expectedId))
{
return -1;
}
return value;
}
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.LastStatusY. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetY:bridge.GetY(bridge.LastStatus). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.LastStatus:bridge.LastStatus.
內部實作程式碼,不能作為獨立腳本執行。
public int LastStatusY() => bridge is IStatusSnapshotBridge snapshot ? snapshot.LastStatusY : bridge.GetY(bridge.LastStatus);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.Life();從本機模型讀取目前的運行狀況。
沒有參數。
int 是「Hits」欄位的值,不是百分比,也不是bool。 0 可以是實值或缺失資料的指示。零最大值不能用作除數。對別人的mobile來說,其意義可能是未知的。 HP/HitsMax 可能包含相對伺服器比例而不是精確點。 HP=0並不能證明死亡;為此有Dead/IsDead。
- 該命令不會開啟狀態,也不會請求伺服器更新。客户端只读取已经加载的数据。不改变特性,也不发送数据包。
- 結果是單獨閱讀。从Exists到下一个挑战,世界可能会发生变化;多个查询不形成原子快照。
- 讀取物件時,World.Get 會拒絕缺少的或 IsDestroyed 並產生 0。 HP/HitsMax從實體中讀取,包括具有這些欄位的項目; Mana/Stamina - 僅適用於行動裝置。沒有爭論,請閱讀self。不帶參數的同名變體不一定有ID的變體:請參閱簽名。
- 對於遺失或損壞的 Player,不帶參數的讀取也會回傳 0。這適用於直接 Mana/Stamina 及其最大值,而不僅僅是透過 World.Get 的表格。存在的死亡角色可以保留價值。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
object? result = UO.Life();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));參數與執行流程:
- 不帶參數的呼叫讀取為self。 value 儲存一個數字,Convert.ToString 僅將其轉換為訊息。
var value = UO.Life();
UO.Print("Life: " + Convert.ToString(value));參數與執行流程:
- 顯示該欄位應用的閾值或計算。條件中的數字是範例設置,而不是伺服器限制。在除以最大值之前,檢查其正值。
return RunScenario();
object? RunScenario()
{
var value = UO.Life();
var maximum = UO.GetMaxHP();
if (Truth(maximum > 0) && Truth(value * 100 / maximum < 50))
{
UO.Print("Health below half of the known maximum");
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;參數與執行流程:
- 該名稱沒有 ID 的形式。不含參數的ReadValue讀取self;兩個呼叫由 UO.Wait(1000) 分隔。比較兩個快照可能會錯過中間更改。
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
async public Task<object?> RunScenarioAsync()
{
var before = ReadValue();
await Delay(1000);
var after = ReadValue();
UO.Print("Before: " + Convert.ToString(before) + "; after: " + Convert.ToString(after));
return null;
}
dynamic ReadValue()
{
return UO.Life();
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
}C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。
參數: 沒有參數。
結果: dynamic / Any.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetHP:bridge.GetHP(bridge.Self). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Self:bridge.Self.
內部實作程式碼,不能作為獨立腳本執行。
case "life": return new InjectionValue(bridge.GetHP(bridge.Self));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.Luck();讀取角色的狀態計數器:運氣點。
沒有參數。
int — 運氣點,客戶端模型中的0..65535。 0 可以是真實值、無資料或遺失/損壞的播放器。這是一個數量,不是bool、ID或type:1表示一個單位,而不是成功。該指令不會迭代對象,也不傳回數組。
- 此指令不帶參數。使用上面的確切簽名。
- 如果目前Player存在且尚未被銷毀,則在遊戲執行緒上讀取需要Player.Luck;否則0。設備不排序,獎金不重新計算,狀態不要求,並且沒有等待更新。存在的鬼魂不等於被摧毀的玩家。
- Luck從狀態type>=4讀取儲存為UInt16的伺服器幸運值。這不是百分比、隨機數,也不是戰利品品質的保證。客戶端讀取時不計算掉落率,也不添加裝備加成。
- CharacterStatus 在更新之前檢查所需的主體。 Weight 可用其自己的擴展狀態,插槽 - 與 type 3, Luck - 和 type 4, 伺服器 WeightMax - 和 type 5。沒有可選計數器的緊湊/舊包會留下其先前的快取。新玩家從頭開始;該通話並未證明收到新狀態。
- 這些函式負責註冊 API,不會在每次命令呼叫時重新執行。 C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。
- 每次呼叫都會重新讀取本地資料。變數儲存快照;各個讀取可能會收到不同的伺服器更新。非零結果不會測試連線。零可以是一個值,也可以沒有資料。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
var result = UO.Luck();
UO.Print("Luck: " + Convert.ToString(result));參數與執行流程:
- value 儲存對其自身字元的一次無參數呼叫; Convert.ToString 格式化日誌中的數字而不改變其意義。
var value = UO.Luck();
UO.Print("Luck: " + Convert.ToString(value));參數與執行流程:
- UO.Wait(500)前後間隔500毫秒。差值可以是正數、零或負數;暫時更新和角色變更可能會被跳過。暫停就是一個例子。
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var before = UO.Luck();
await Delay(500);
var after = UO.Luck();
var difference = after - before;
UO.Print("Counter change: " + Convert.ToString(difference));
return null;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));參數與執行流程:
- LuckAtLeast(最小值)收到數值要求; 1000 是一個範例,而不是限製或百分比。拒絕玩家缺席,讀取一次運氣並按值 >= 最小值返回 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(LuckAtLeast(1000)) == true))
{
UO.Print("Local check passed");
}
else
{
UO.Print("Local check failed or data unavailable");
}
return null;
}
dynamic LuckAtLeast(dynamic minimum)
{
if (Truth(UO.Self() == 0))
{
return false;
}
var value = UO.Luck();
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.Luck:bridge.Luck.
內部實作程式碼,不能作為獨立腳本執行。
case "luck": return new InjectionValue(bridge.Luck);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.Mana();從本地模型讀取目前的法力值。
沒有參數。
int 是Mana 欄位的值,而不是百分比或bool。 0 可以是實值或缺失資料的指示。零最大值不能用作除數。對別人的mobile來說,其意義可能是未知的。 HP/HitsMax 可能包含相對伺服器比例而不是精確點。 HP=0並不能證明死亡;為此有Dead/IsDead。
- 該命令不會開啟狀態,也不會請求伺服器更新。客户端只读取已经加载的数据。不改变特性,也不发送数据包。
- 結果是單獨閱讀。从Exists到下一个挑战,世界可能会发生变化;多个查询不形成原子快照。
- 讀取物件時,World.Get 會拒絕缺少的或 IsDestroyed 並產生 0。 HP/HitsMax從實體中讀取,包括具有這些欄位的項目; Mana/Stamina - 僅適用於行動裝置。沒有爭論,請閱讀self。不帶參數的同名變體不一定有ID的變體:請參閱簽名。
- 對於遺失或損壞的 Player,不帶參數的讀取也會回傳 0。這適用於直接 Mana/Stamina 及其最大值,而不僅僅是透過 World.Get 的表格。存在的死亡角色可以保留價值。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
object? result = UO.Mana();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));參數與執行流程:
- 不帶參數的呼叫讀取為self。 value 儲存一個數字,Convert.ToString 僅將其轉換為訊息。
var value = UO.Mana();
UO.Print("Mana: " + Convert.ToString(value));參數與執行流程:
- 顯示該欄位應用的閾值或計算。條件中的數字是範例設置,而不是伺服器限制。在除以最大值之前,檢查其正值。
return RunScenario();
object? RunScenario()
{
var value = UO.Mana();
if (Truth(value >= 10))
{
UO.Print("At least ten mana points are known");
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;參數與執行流程:
- 該名稱沒有 ID 的形式。不含參數的ReadValue讀取self;兩個呼叫由 UO.Wait(1000) 分隔。比較兩個快照可能會錯過中間更改。
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
async public Task<object?> RunScenarioAsync()
{
var before = ReadValue();
await Delay(1000);
var after = ReadValue();
UO.Print("Before: " + Convert.ToString(before) + "; after: " + Convert.ToString(after));
return null;
}
dynamic ReadValue()
{
return UO.Mana();
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
}C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。
參數: 沒有參數。
結果: dynamic / Any.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Mana:bridge.Mana.
內部實作程式碼,不能作為獨立腳本執行。
case "mana": return new InjectionValue(bridge.Mana);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.MaxHP();從本地模型讀取最大健康狀況。
沒有參數。
int 是HitsMax 欄位的值,而不是百分比或bool。 0 可以是實值或缺失資料的指示。零最大值不能用作除數。對別人的mobile來說,其意義可能是未知的。 HP/HitsMax 可能包含相對伺服器規模而不是精確點。 HP=0並不能證明死亡;為此有Dead/IsDead。
- 該命令不會開啟狀態,也不會請求伺服器更新。客户端只读取已经加载的数据。不改变特性,也不发送数据包。
- 結果是單獨閱讀。从Exists到下一个挑战,世界可能会发生变化;多个查询不形成原子快照。
- 讀取物件時,World.Get 會拒絕缺少的或 IsDestroyed 並產生 0。 HP/HitsMax從實體中讀取,包括具有這些欄位的項目; Mana/Stamina - 僅適用於行動裝置。沒有爭論,請閱讀self。不帶參數的同名變體不一定有ID的變體:請參閱簽名。
- 對於遺失或損壞的 Player,不帶參數的讀取也會回傳 0。這適用於直接 Mana/Stamina 及其最大值,而不僅僅是透過 World.Get 的表格。存在的死亡角色可以保留價值。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
var result = UO.MaxHP();
UO.Print("MaxHP: " + Convert.ToString(result));參數與執行流程:
- 不帶參數的呼叫讀取為self。 value 儲存一個數字,Convert.ToString 僅將其轉換為訊息。
var value = UO.MaxHP();
UO.Print("MaxHP: " + Convert.ToString(value));參數與執行流程:
- 顯示該欄位應用的閾值或計算。條件中的數字是範例設置,而不是伺服器限制。在除以最大值之前,檢查其正值。
return RunScenario();
object? RunScenario()
{
var value = UO.MaxHP();
if (Truth(value > 0))
{
UO.Print("Known HP percent: " + Convert.ToString(UO.GetHP() * 100 / value));
}
else
{
UO.Print("HP maximum unavailable");
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;參數與執行流程:
- 該名稱沒有 ID 的形式。不含參數的ReadValue讀取self;兩個呼叫由 UO.Wait(1000) 分隔。比較兩個快照可能會錯過中間更改。
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
async public Task<object?> RunScenarioAsync()
{
var before = ReadValue();
await Delay(1000);
var after = ReadValue();
UO.Print("Before: " + Convert.ToString(before) + "; after: " + Convert.ToString(after));
return null;
}
dynamic ReadValue()
{
return UO.MaxHP();
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
}C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。
參數: 沒有參數。
結果: int / Integer.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases [MaxHP]. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetMaxHP:bridge.GetMaxHP(bridge.Self). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Self:bridge.Self.
呼叫時執行已儲存的處理函式 delegate。註冊方法在建立 API 時建立此 delegate。
內部實作程式碼,不能作為獨立腳本執行。
() => bridge.GetMaxHP(bridge.Self)建立 API: 這些函式負責註冊 API,不會在每次命令呼叫時重新執行。
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.MaxLife();從本地模型讀取最大健康狀況。
沒有參數。
int 是HitsMax 欄位的值,而不是百分比或bool。 0 可以是實值或缺失資料的指示。零最大值不能用作除數。對別人的mobile來說,其意義可能是未知的。 HP/HitsMax 可能包含相對伺服器規模而不是精確點。 HP=0並不能證明死亡;為此有Dead/IsDead。
- 該命令不會開啟狀態,也不會請求伺服器更新。客户端只读取已经加载的数据。不改变特性,也不发送数据包。
- 結果是單獨閱讀。从Exists到下一个挑战,世界可能会发生变化;多个查询不形成原子快照。
- 讀取物件時,World.Get 會拒絕缺少的或 IsDestroyed 並產生 0。 HP/HitsMax從實體中讀取,包括具有這些欄位的項目; Mana/Stamina - 僅適用於行動裝置。沒有爭論,請閱讀self。不帶參數的同名變體不一定有ID的變體:請參閱簽名。
- 對於遺失或損壞的 Player,不帶參數的讀取也會回傳 0。這適用於直接 Mana/Stamina 及其最大值,而不僅僅是透過 World.Get 的表格。存在的死亡角色可以保留價值。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
object? result = UO.MaxLife();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));參數與執行流程:
- 不帶參數的呼叫讀取為self。 value 儲存一個數字,Convert.ToString 僅將其轉換為訊息。
var value = UO.MaxLife();
UO.Print("MaxLife: " + Convert.ToString(value));參數與執行流程:
- 顯示該欄位應用的閾值或計算。條件中的數字是範例設置,而不是伺服器限制。在除以最大值之前,檢查其正值。
return RunScenario();
object? RunScenario()
{
var value = UO.MaxLife();
if (Truth(value > 0))
{
UO.Print("Known HP percent: " + Convert.ToString(UO.GetHP() * 100 / value));
}
else
{
UO.Print("HP maximum unavailable");
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;參數與執行流程:
- 該名稱沒有 ID 的形式。不含參數的ReadValue讀取self;兩個呼叫由 UO.Wait(1000) 分隔。比較兩個快照可能會錯過中間更改。
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
async public Task<object?> RunScenarioAsync()
{
var before = ReadValue();
await Delay(1000);
var after = ReadValue();
UO.Print("Before: " + Convert.ToString(before) + "; after: " + Convert.ToString(after));
return null;
}
dynamic ReadValue()
{
return UO.MaxLife();
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
}C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。
參數: 沒有參數。
結果: dynamic / Any.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetMaxHP:bridge.GetMaxHP(bridge.Self). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Self:bridge.Self.
內部實作程式碼,不能作為獨立腳本執行。
case "maxlife": return new InjectionValue(bridge.GetMaxHP(bridge.Self));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.MaxMana();從本地模型讀取最大法力值。
沒有參數。
int 是ManaMax 欄位的值,而不是百分比或bool。 0 可以是實值或缺失資料的指示。零最大值不能用作除數。對別人的mobile來說,其意義可能是未知的。 HP/HitsMax 可能包含相對伺服器規模而不是精確點。 HP=0並不能證明死亡;為此有Dead/IsDead。
- 該命令不會開啟狀態,也不會請求伺服器更新。客户端只读取已经加载的数据。不改变特性,也不发送数据包。
- 結果是單獨閱讀。从Exists到下一个挑战,世界可能会发生变化;多个查询不形成原子快照。
- 讀取物件時,World.Get 會拒絕缺少的或 IsDestroyed 並產生 0。 HP/HitsMax從實體中讀取,包括具有這些欄位的項目; Mana/Stamina - 僅適用於行動裝置。沒有爭論,請閱讀self。不帶參數的同名變體不一定有ID的變體:請參閱簽名。
- 對於遺失或損壞的 Player,不帶參數的讀取也會回傳 0。這適用於直接 Mana/Stamina 及其最大值,而不僅僅是透過 World.Get 的表格。存在的死亡角色可以保留價值。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
object? result = UO.MaxMana();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));參數與執行流程:
- 不帶參數的呼叫讀取為self。 value 儲存一個數字,Convert.ToString 僅將其轉換為訊息。
var value = UO.MaxMana();
UO.Print("MaxMana: " + Convert.ToString(value));參數與執行流程:
- 顯示該欄位應用的閾值或計算。條件中的數字是範例設置,而不是伺服器限制。在除以最大值之前,檢查其正值。
return RunScenario();
object? RunScenario()
{
var value = UO.MaxMana();
if (Truth(value > 0))
{
UO.Print("Mana percent: " + Convert.ToString(UO.Mana() * 100 / value));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;參數與執行流程:
- 該名稱沒有 ID 的形式。不含參數的ReadValue讀取self;兩個呼叫由 UO.Wait(1000) 分隔。比較兩個快照可能會錯過中間更改。
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
async public Task<object?> RunScenarioAsync()
{
var before = ReadValue();
await Delay(1000);
var after = ReadValue();
UO.Print("Before: " + Convert.ToString(before) + "; after: " + Convert.ToString(after));
return null;
}
dynamic ReadValue()
{
return UO.MaxMana();
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
}C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。
參數: 沒有參數。
結果: dynamic / Any.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.MaxMana:bridge.MaxMana.
內部實作程式碼,不能作為獨立腳本執行。
case "maxmana": return new InjectionValue(bridge.MaxMana);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.MaxStam();從本地模型讀取最大耐久性。
沒有參數。
int 是StaminaMax 欄位的值,而不是百分比或bool。 0 可以是實值或缺失資料的指示。零最大值不能用作除數。對別人的mobile來說,其意義可能是未知的。 HP/HitsMax 可能包含相對伺服器規模而不是精確點。 HP=0並不能證明死亡;為此有Dead/IsDead。
- 該命令不會開啟狀態,也不會請求伺服器更新。客户端只读取已经加载的数据。不改变特性,也不发送数据包。
- 結果是單獨閱讀。从Exists到下一个挑战,世界可能会发生变化;多个查询不形成原子快照。
- 讀取物件時,World.Get 會拒絕缺少的或 IsDestroyed 並產生 0。 HP/HitsMax從實體中讀取,包括具有這些欄位的項目; Mana/Stamina - 僅適用於行動裝置。沒有爭論,請閱讀self。不帶參數的同名變體不一定有ID的變體:請參閱簽名。
- 對於遺失或損壞的 Player,不帶參數的讀取也會回傳 0。這適用於直接 Mana/Stamina 及其最大值,而不僅僅是透過 World.Get 的表格。存在的死亡角色可以保留價值。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
object? result = UO.MaxStam();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));參數與執行流程:
- 不帶參數的呼叫讀取為self。 value 儲存一個數字,Convert.ToString 僅將其轉換為訊息。
var value = UO.MaxStam();
UO.Print("MaxStam: " + Convert.ToString(value));參數與執行流程:
- 顯示該欄位應用的閾值或計算。條件中的數字是範例設置,而不是伺服器限制。在除以最大值之前,檢查其正值。
return RunScenario();
object? RunScenario()
{
var value = UO.MaxStam();
if (Truth(value > 0))
{
UO.Print("Stamina percent: " + Convert.ToString(UO.Stamina() * 100 / value));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;參數與執行流程:
- 該名稱沒有 ID 的形式。不含參數的ReadValue讀取self;兩個呼叫由 UO.Wait(1000) 分隔。比較兩個快照可能會錯過中間更改。
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
async public Task<object?> RunScenarioAsync()
{
var before = ReadValue();
await Delay(1000);
var after = ReadValue();
UO.Print("Before: " + Convert.ToString(before) + "; after: " + Convert.ToString(after));
return null;
}
dynamic ReadValue()
{
return UO.MaxStam();
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
}C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。
參數: 沒有參數。
結果: dynamic / Any.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.MaxStamina:bridge.MaxStamina.
內部實作程式碼,不能作為獨立腳本執行。
case "maxstam": return new InjectionValue(bridge.MaxStamina);