ZH TW UO Topic skills - LIHACHTETAN/ClassicUO-Bad-Newbie-CSharp-Scripts-IDE GitHub Wiki
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
家 · C# · IDE · UO API · A–Z · 範例 · Languages
應用技能、讀取數值和管理技能鎖。技能的名稱和操作的可用性取決於客戶端/伺服器支援的資料。
| 主題 | 命令與解釋 |
|---|---|
| UseSkill | UO.UseSkill |
| Skill Value | UO.GetSkillValue · UO.SkillVal |
| Skill Current Value | UO.GetSkillCurrentValue |
| Skill Cap | UO.GetSkillCap |
| Skill Locks | UO.GetSkillLockState · UO.SetSkillLockState |
| Tracking | UO.Track |
| Snooping | UO.Snoop |
| Stealth | UO.StealthCnt · UO.UseSkill |
UO.UseSkill · UO.GetSkillCap · UO.GetSkillCurrentValue · UO.GetSkillValue · UO.GetSkillLockState · UO.SetSkillLockState · UO.SkillLockState · UO.SkillVal · UO.Track · UO.Snoop · UO.StealthCnt · UO.TicksSkill
每個命令卡都有幾個獨立的場景:直接程式碼、函數和類別。以下是精選的簡短場景;限制和全面分析是有可能的。
if (!(Truth(UO.Connected())) || Truth(UO.Dead()) || Truth(UO.Hidden()))
{
return null;
}
if (!(Truth(UO.UseSkill("Hiding"))))
{
UO.Print("Hiding request rejected");
return null;
}
await Delay(1000);
if (Truth(UO.Hidden()))
{
UO.Print("Character is hidden");
}
else
{
UO.Print("Not hidden yet; check the game journal");
}
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;var selector = "Mining";
var value = UO.GetSkillValue(selector);
UO.Print(Convert.ToString(value));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
double UO.GetSkillCap(object? skillName);讀取從伺服器收到的技能限制。
-
skillName- 所需技能:客戶端資料中的名稱,例如“採礦”或“動物傳說”,或從 0 到 Skills.Length−1 的十進制索引,數字或字串。名稱的大小寫並不重要,尾隨空格將被刪除,_ 將被替換為空格。此索引不是主題的ID或1的索引。數字字串始終表示索引。
double (Double) - 0,1增量的技能點,例如95,1,而非951。 CapFixed字段被10直接除以Double。 0 表示零技能或沒有角色/技能。結果不是bool。舊版 SkillVal/BaseVal 有不同的尺寸 - 不要混合這些系列。
- 根據已經接收到的數據,透過遊戲執行緒上的Invoke進行讀取;不發送網路資料包。該技能未被使用或訓練。兩個請求 - 兩個單獨的快照。
- 所需技能:客戶端資料中的名稱,例如“採礦”或“動物傳說”,或從 0 到 Skills.Length−1 的十進制索引、數字或字串。名稱的大小寫並不重要,尾隨空格將被刪除,_ 將被替換為空格。此索引不是主題的ID或1的索引。數字字串始終表示索引。
- ExecuteClientApiCompatibility 選擇指令分支。 Text 讀取技能選擇器,Arg 讀取數字和模式。不可轉換的參數可能會使呼叫失敗並出現轉換錯誤。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
var result = UO.GetSkillCap("Mining");
UO.Print("GetSkillCap: " + Convert.ToString(result));參數與執行流程:
- 在範例中,選擇器和錄製時的模式均已明確指定。第一行按名稱選擇技能或按數字選擇特徵。 Print 僅顯示結果。
var selector = "Mining";
var value = UO.GetSkillCap(selector);
UO.Print(Convert.ToString(value));參數與執行流程:
- 以閾值95.1和模式0/1/2為例。 −1 在改變模式之前被檢查。寫入後,只讀取本機副本;它不等待伺服器回應。
return RunScenario();
object? RunScenario()
{
if (Truth(UO.GetSkillLockState("Mining") >= 0))
{
var value = UO.GetSkillCap("Mining");
if (Truth(value >= 95.1))
{
UO.Print("Value >= 95.1: " + Convert.ToString(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;參數與執行流程:
- 所有幫助程序代碼都在 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 = ReadValue("Animal_Lore");
await Delay(1000);
var after = ReadValue("Animal Lore");
UO.Print(Convert.ToString(after - before));
return null;
}
dynamic ReadValue(dynamic selector)
{
return UO.GetSkillCap(selector);
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
}C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。
參數: skillName (Any)
結果: double / Decimal.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetSkillValue:bridge.GetSkillValue(Text(0), false, true). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(0).
內部實作程式碼,不能作為獨立腳本執行。
case "getskillcap": return new InjectionValue(bridge.GetSkillValue(Text(0), false, true));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
double UO.GetSkillCurrentValue(object? skillName);讀取帶有修飾符的技能的有效值。
-
skillName- 所需技能:客戶端資料中的名稱,例如“採礦”或“動物傳說”,或從 0 到 Skills.Length−1 的十進制索引,數字或字串。名稱的大小寫並不重要,尾隨空格將被刪除,_ 將被替換為空格。此索引不是主題的ID或1的索引。數字字串始終表示索引。
double (Double) - 0,1增量的技能點,例如95,1,而非951。 ValueFixed字段被10直接除以Double。 0 表示零技能或沒有角色/技能。結果不是bool。舊版 SkillVal/BaseVal 有不同的尺寸 - 不要混合這些系列。
- 根據已經接收到的數據,透過遊戲執行緒上的Invoke進行讀取;不發送網路資料包。該技能未被使用或訓練。兩個請求 - 兩個單獨的快照。
- 所需技能:客戶端資料中的名稱,例如“採礦”或“動物傳說”,或從 0 到 Skills.Length−1 的十進制索引、數字或字串。名稱的大小寫並不重要,尾隨空格將被刪除,_ 將被替換為空格。此索引不是主題的ID或1的索引。數字字串始終表示索引。
- ExecuteClientApiCompatibility 選擇指令分支。 Text 讀取技能選擇器,Arg 讀取數字和模式。不可轉換的參數可能會使呼叫失敗並出現轉換錯誤。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
var result = UO.GetSkillCurrentValue("Mining");
UO.Print("GetSkillCurrentValue: " + Convert.ToString(result));參數與執行流程:
- 在範例中,選擇器和錄製時的模式均已明確指定。第一行按名稱選擇技能或按數字選擇特徵。 Print 僅顯示結果。
var selector = "Mining";
var value = UO.GetSkillCurrentValue(selector);
UO.Print(Convert.ToString(value));參數與執行流程:
- 以閾值95.1和模式0/1/2為例。 −1 在改變模式之前被檢查。寫入後,只讀取本機副本;它不等待伺服器回應。
return RunScenario();
object? RunScenario()
{
if (Truth(UO.GetSkillLockState("Mining") >= 0))
{
var value = UO.GetSkillCurrentValue("Mining");
if (Truth(value >= 95.1))
{
UO.Print("Value >= 95.1: " + Convert.ToString(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;參數與執行流程:
- 所有幫助程序代碼都在 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 = ReadValue("Animal_Lore");
await Delay(1000);
var after = ReadValue("Animal Lore");
UO.Print(Convert.ToString(after - before));
return null;
}
dynamic ReadValue(dynamic selector)
{
return UO.GetSkillCurrentValue(selector);
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
}C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。
參數: skillName (Any)
結果: double / Decimal.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetSkillValue:bridge.GetSkillValue(Text(0), true, false). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(0).
內部實作程式碼,不能作為獨立腳本執行。
case "getskillcurrentvalue": return new InjectionValue(bridge.GetSkillValue(Text(0), true, false));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.GetSkillLockState(object? skillName);讀取本地技能變更模式。
-
skillName- 所需技能:客戶端資料中的名稱,例如“採礦”或“動物傳說”,或從 0 到 Skills.Length−1 的十進制索引,數字或字串。名稱的大小寫並不重要,尾隨空格將被刪除,_ 將被替換為空格。此索引不是主題的ID或1的索引。數字字串始終表示索引。
int:0 - 增加,1 - 減少,2 - 阻塞。這是模式碼,不是true/false。對於未知技能或缺失角色,返回−1。
- 根據已經接收到的數據,透過遊戲執行緒上的Invoke進行讀取;不發送網路資料包。該技能未被使用或訓練。兩個請求 - 兩個單獨的快照。
- 所需技能:客戶端資料中的名稱,例如“採礦”或“動物傳說”,或從 0 到 Skills.Length−1 的十進制索引、數字或字串。名稱的大小寫並不重要,尾隨空格將被刪除,_ 將被替換為空格。此索引不是主題的ID或1的索引。數字字串始終表示索引。
- ExecuteClientApiCompatibility 選擇指令分支。 Text 讀取技能選擇器,Arg 讀取數字和模式。不可轉換的參數可能會使呼叫失敗並出現轉換錯誤。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
var result = UO.GetSkillLockState("Mining");
UO.Print("GetSkillLockState: " + Convert.ToString(result));參數與執行流程:
- 在範例中,選擇器和錄製時的模式均已明確指定。第一行按名稱選擇技能或按數字選擇特徵。 Print 僅顯示結果。
var selector = "Mining";
var mode = UO.GetSkillLockState(selector);
UO.Print(Convert.ToString(mode));參數與執行流程:
- 以閾值95.1和模式0/1/2為例。 −1 在改變模式之前被檢查。寫入後,只讀取本機副本;它不等待伺服器回應。
return RunScenario();
object? RunScenario()
{
var mode = UO.GetSkillLockState("Mining");
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("Mining");
await Delay(1000);
var after = ReadMode("Mining");
UO.Print(Convert.ToString(before) + " -> " + Convert.ToString(after));
return null;
}
dynamic ReadMode(dynamic selector)
{
return UO.GetSkillLockState(selector);
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
}C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。
參數: skillName (Any)
結果: int / Integer.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetSkillLockState:bridge.GetSkillLockState(Text(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(0).
內部實作程式碼,不能作為獨立腳本執行。
case "getskilllockstate": return new InjectionValue(bridge.GetSkillLockState(Text(0)));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
double UO.GetSkillValue(object? skillName);讀取沒有修飾符的技能的基礎值。
-
skillName- 所需技能:客戶端資料中的名稱,例如“採礦”或“動物傳說”,或從 0 到 Skills.Length−1 的十進制索引,數字或字串。名稱的大小寫並不重要,尾隨空格將被刪除,_ 將被替換為空格。此索引不是主題的ID或1的索引。數字字串始終表示索引。
double (Double) - 0,1增量的技能點,例如95,1,而非951。 BaseFixed字段被10直接除以Double。 0 表示零技能或沒有角色/技能。結果不是bool。舊版 SkillVal/BaseVal 有不同的尺寸 - 不要混合這些系列。
- 根據已經接收到的數據,透過遊戲執行緒上的Invoke進行讀取;不發送網路資料包。該技能未被使用或訓練。兩個請求 - 兩個單獨的快照。
- 所需技能:客戶端資料中的名稱,例如“採礦”或“動物傳說”,或從 0 到 Skills.Length−1 的十進制索引、數字或字串。名稱的大小寫並不重要,尾隨空格將被刪除,_ 將被替換為空格。此索引不是主題的ID或1的索引。數字字串始終表示索引。
- ExecuteClientApiCompatibility 選擇指令分支。 Text 讀取技能選擇器,Arg 讀取數字和模式。不可轉換的參數可能會使呼叫失敗並出現轉換錯誤。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
var result = UO.GetSkillValue("Mining");
UO.Print("GetSkillValue: " + Convert.ToString(result));參數與執行流程:
- 在範例中,選擇器和錄製時的模式均已明確指定。第一行按名稱選擇技能或按數字選擇特徵。 Print 僅顯示結果。
var selector = "Mining";
var value = UO.GetSkillValue(selector);
UO.Print(Convert.ToString(value));參數與執行流程:
- 以閾值95.1和模式0/1/2為例。 −1 在改變模式之前被檢查。寫入後,只讀取本機副本;它不等待伺服器回應。
return RunScenario();
object? RunScenario()
{
if (Truth(UO.GetSkillLockState("Mining") >= 0))
{
var value = UO.GetSkillValue("Mining");
if (Truth(value >= 95.1))
{
UO.Print("Value >= 95.1: " + Convert.ToString(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;參數與執行流程:
- 所有幫助程序代碼都在 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 = ReadValue("Animal_Lore");
await Delay(1000);
var after = ReadValue("Animal Lore");
UO.Print(Convert.ToString(after - before));
return null;
}
dynamic ReadValue(dynamic selector)
{
return UO.GetSkillValue(selector);
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
}C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。
參數: skillName (Any)
結果: double / Decimal.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetSkillValue:bridge.GetSkillValue(Text(0), false, false). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(0).
內部實作程式碼,不能作為獨立腳本執行。
case "getskillvalue": return new InjectionValue(bridge.GetSkillValue(Text(0), false, false));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.SetSkillLockState(object? skillName, object? skillState);請求更改技能模式。
-
skillName- 所需技能:客戶端資料中的名稱,例如“採礦”或“動物傳說”,或從 0 到 Skills.Length−1 的十進制索引,數字或字串。名稱的大小寫並不重要,尾隨空格將被刪除,_ 將被替換為空格。此索引不是主題的ID或1的索引。數字字串始終表示索引。 -
skillState— 強制模式:0 — 增加,1 — 減少,2 — 阻止。這是三個程式碼,不是 bool; true/false 不會取代所有模式的名稱。
void - 無回傳值。結果不能用作成功/錯誤或與 true 進行比較。隨後的讀取顯示的是本機模型,而不是伺服器的確認。
- 有效請求透過GameActions發送一個資料包並立即更改本地模式。伺服器可以應用自己的限制;不能保證技能或統計資料的提高。如果沒有包,未知的技能、無效的索引/模式和遺失的字元將被忽略。
- 所需技能:客戶端資料中的名稱,例如“採礦”或“動物傳說”,或從 0 到 Skills.Length−1 的十進制索引、數字或字串。名稱的大小寫並不重要,尾隨空格將被刪除,_ 將被替換為空格。此索引不是主題的ID或1的索引。數字字串始終表示索引。
- ExecuteClientApiCompatibility 選擇指令分支。 Text 讀取技能選擇器,Arg 讀取數字和模式。不可轉換的參數可能會使呼叫失敗並出現轉換錯誤。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
指令是獨立的陳述式。前面的訊息表示呼叫開始,並非伺服器已完成動作的確認。
UO.Print("Calling UO.SetSkillLockState");
UO.SetSkillLockState("Mining", 2);參數與執行流程:
- 在範例中,選擇器和錄製時的模式均已明確指定。第一行按名稱選擇技能或按數字選擇特徵。 Print 僅顯示結果。
var selector = "Mining";
var mode = 2;
UO.SetSkillLockState(selector, mode);
UO.Print(Convert.ToString(UO.GetSkillLockState(selector)));參數與執行流程:
- 以閾值95.1和模式0/1/2為例。 −1 在改變模式之前被檢查。寫入後,只讀取本機副本;它不等待伺服器回應。
return RunScenario();
object? RunScenario()
{
var selector = "Mining";
var before = UO.GetSkillLockState(selector);
if (Truth(before >= 0) && Truth(before <= 2))
{
UO.SetSkillLockState(selector, 0);
UO.Print(Convert.ToString(UO.GetSkillLockState(selector)));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;參數與執行流程:
- 所有幫助程序代碼都在 Main 下面給出。選擇器選擇技能/特性,模式設定錄製模式。 ReadValue/ReadMode 傳回原數; ApplyMode 檢查參數,執行操作,且不傳回值。閱讀範例中的UO.Wait(1000)將兩張圖片分開。
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
ApplyMode("Mining", 2);
return null;
}
void ApplyMode(dynamic selector, dynamic mode)
{
if (Truth(mode < 0) || Truth(mode > 2))
{
return;
}
if (Truth(UO.GetSkillLockState(selector) < 0))
{
return;
}
UO.SetSkillLockState(selector, mode);
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。
參數: skillName (Any), skillState (Any)
結果: void / Unit.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetSkillLockState:bridge.SetSkillLockState(Text(0), Arg(1)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(0). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(1).
內部實作程式碼,不能作為獨立腳本執行。
case "setskilllockstate":
case "skilllockstate": bridge.SetSkillLockState(Text(0), Arg(1)); return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.SkillLockState(object? skillName, object? skillState);請求更改技能模式。
-
skillName- 所需技能:客戶端資料中的名稱,例如“採礦”或“動物傳說”,或從 0 到 Skills.Length−1 的十進制索引,數字或字串。名稱的大小寫並不重要,尾隨空格將被刪除,_ 將被替換為空格。此索引不是主題的ID或1的索引。數字字串始終表示索引。 -
skillState— 強制模式:0 — 增加,1 — 減少,2 — 阻止。這是三個程式碼,不是 bool; true/false 不會取代所有模式的名稱。
void - 無回傳值。結果不能用作成功/錯誤或與 true 進行比較。隨後的讀取顯示的是本機模型,而不是伺服器的確認。
- 有效請求透過GameActions發送一個資料包並立即更改本地模式。伺服器可以應用自己的限制;不能保證技能或統計資料的提高。如果沒有包,未知的技能、無效的索引/模式和遺失的字元將被忽略。
- 所需技能:客戶端資料中的名稱,例如“採礦”或“動物傳說”,或從 0 到 Skills.Length−1 的十進制索引、數字或字串。名稱的大小寫並不重要,尾隨空格將被刪除,_ 將被替換為空格。此索引不是主題的ID或1的索引。數字字串始終表示索引。
- ExecuteClientApiCompatibility 選擇指令分支。 Text 讀取技能選擇器,Arg 讀取數字和模式。不可轉換的參數可能會使呼叫失敗並出現轉換錯誤。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
指令是獨立的陳述式。前面的訊息表示呼叫開始,並非伺服器已完成動作的確認。
UO.Print("Calling UO.SkillLockState");
UO.SkillLockState("Mining", 2);參數與執行流程:
- 在範例中,選擇器和錄製時的模式均已明確指定。第一行按名稱選擇技能或按數字選擇特徵。 Print 僅顯示結果。
var selector = "Mining";
var mode = 2;
UO.SkillLockState(selector, mode);
UO.Print(Convert.ToString(UO.GetSkillLockState(selector)));參數與執行流程:
- 以閾值95.1和模式0/1/2為例。 −1 在改變模式之前被檢查。寫入後,只讀取本機副本;它不等待伺服器回應。
return RunScenario();
object? RunScenario()
{
var selector = "Mining";
var before = UO.GetSkillLockState(selector);
if (Truth(before >= 0) && Truth(before <= 2))
{
UO.SkillLockState(selector, 0);
UO.Print(Convert.ToString(UO.GetSkillLockState(selector)));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;參數與執行流程:
- 所有幫助程序代碼都在 Main 下面給出。選擇器選擇技能/特性,模式設定錄製模式。 ReadValue/ReadMode 傳回原數; ApplyMode 檢查參數,執行操作,且不傳回值。閱讀範例中的UO.Wait(1000)將兩張圖片分開。
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
ApplyMode("Mining", 2);
return null;
}
void ApplyMode(dynamic selector, dynamic mode)
{
if (Truth(mode < 0) || Truth(mode > 2))
{
return;
}
if (Truth(UO.GetSkillLockState(selector) < 0))
{
return;
}
UO.SkillLockState(selector, mode);
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。
參數: skillName (Any), skillState (Any)
結果: void / Unit.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetSkillLockState:bridge.SetSkillLockState(Text(0), Arg(1)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(0). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(1).
內部實作程式碼,不能作為獨立腳本執行。
case "setskilllockstate":
case "skilllockstate": bridge.SetSkillLockState(Text(0), Arg(1)); return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.SkillVal(object? skillName);
int UO.SkillVal(object? skill, object? variant);讀取技能或其模式/成長的遺留價值。
-
variant- 可選int:0 - 有效值(預設),1 - 基礎值,2 - 從運行時第一次讀取此技能開始增加基礎值,3 - 阻擋模式。 -
skillName— 運行時字典skillNameToSkillId中的名稱,例如「Mining」。大小寫並不重要,但空格不會被修剪,_ 也不會被替換。此遺留函數中的數字文字不是索引;而是索引。未知名稱會顯示一則訊息並給出0。 -
skill— 運行時字典skillNameToSkillId中的名稱,例如「Mining」。大小寫並不重要,但空格不會被修剪,_ 也不會被替換。此遺留函數中的數字文字不是索引;而是索引。未知名稱會顯示一則訊息並給出0。
int: 選項 0/1/2 - 十分之幾的技能點數(951 = 95.1);選項 3 - 模式 0/1/2 任何一個 -1,如果沒有玩家/技能。未知名稱/變體給出 0。選項 2 如果 base 低於已儲存的基準運行時間(包括缺少 Player 和 base= 的情況),則可以為負數0。這不是 bool.
- 在選擇變體之前,會取得SkillBaseVal,如果是第一次讀取技能,則會儲存基線。因此,即使讀取variant=0/1/3,也為未來的成長variant=2設定了起點。
- 不正確的變體會顯示一則訊息並給出0,但基線可能已經建立。 GetSkillValue/GetSkillCurrentValue值是透過double眼鏡測量的,並且具有不同的刻度。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
var result = UO.SkillVal("Mining");
UO.Print("SkillVal: " + Convert.ToString(result));參數與執行流程:
- 讀取技能或其模式/成長的遺留價值。
UO.Print(UO.SkillVal("Mining"));
UO.Print(UO.SkillVal("Mining", 1));參數與執行流程:
- 在選擇變體之前,會取得SkillBaseVal,如果是第一次讀取技能,則會儲存基線。因此,即使讀取variant=0/1/3,也為未來的成長variant=2設定了起點。
return RunScenario();
object? RunScenario()
{
var baseline = UO.SkillVal("Mining", 2);
UO.Wait(1000);
UO.Print(UO.SkillVal("Mining", 2) - baseline);
return null;
}參數與執行流程:
- 不正確的變體會顯示一則訊息並給出0,但基線可能已經建立。 GetSkillValue/GetSkillCurrentValue值是透過double眼鏡測量的,並且具有不同的刻度。
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 lockMode = UO.SkillVal("Mining", 3);
if (Truth(lockMode == 2))
{
UO.Print("Skill locked");
}
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。
參數: skillName (String)
結果: int / Integer.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.SkillVal. -
InjectionScript.Runtime.InjectionApiUO.SkillVal:SkillVal(skillName, 0).
內部實作程式碼,不能作為獨立腳本執行。
public int SkillVal(string skillName) => SkillVal(skillName, 0);參數: skill (Any), variant (Any)
結果: int / Integer.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.Register [SkillVal]. -
InjectionScript.Runtime.InjectionApiUO.SkillVal:SkillVal(values[0].ToString(), NumberConversions.ToInt(values[1])). -
InjectionScript.Runtime.InjectionValue.ToString:values[0].ToString(). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(values[1]).
呼叫時執行已儲存的處理函式 delegate。註冊方法在建立 API 時建立此 delegate。
內部實作程式碼,不能作為獨立腳本執行。
values => new InjectionValue(SkillVal(values[0].ToString(), NumberConversions.ToInt(values[1])))Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.Snoop();
void UO.Snoop(object? container);使用容器/對象,通常請求將其開啟。
-
container- 可選serial/別名。預設為橋接。 LastTarget。此指令不檢查 IsContainer 或從屬關係。
void - 沒有值。使用單獨的線路撥打電話;完成並不確認伺服器的操作。
- ExecuteLegacyManualAlias 呼叫網橋。 UseObject(Arg(0,bridge.LastTarget))。這是常規的double點擊請求,而不是偵聽技能的單獨客戶端演算法。
- Bridge 在遊戲串流上發送請求。伺服器規則適用;沒有內建的等待確認。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
指令是獨立的陳述式。前面的訊息表示呼叫開始,並非伺服器已完成動作的確認。
UO.Print("Calling UO.Snoop");
UO.Snoop();參數與執行流程:
- 使用容器/對象,通常請求將其開啟。
UO.Snoop();參數與執行流程:
- ExecuteLegacyManualAlias 呼叫網橋。 UseObject(Arg(0,bridge.LastTarget))。這是常規的double點擊請求,而不是偵聽技能的單獨客戶端演算法。
return RunScenario();
object? RunScenario()
{
if (Truth(UO.IsContainer("lasttarget")))
{
UO.Snoop("lasttarget");
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;參數與執行流程:
- Bridge 在遊戲串流上發送請求。伺服器規則適用;沒有內建的等待確認。
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
var id = UO.GetSerial("lasttarget");
if (Truth(UO.Exists(id)))
{
UO.Snoop(id);
UO.Wait(500);
UO.Print(UO.GetContent(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。
參數: 沒有參數。
結果: void / Unit.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.UseObject:bridge.UseObject(Arg(0, bridge.LastTarget)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Arg:Arg(0, bridge.LastTarget). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.LastTarget:bridge.LastTarget.
內部實作程式碼,不能作為獨立腳本執行。
case "snoop": bridge.UseObject(Arg(0, bridge.LastTarget)); break;參數: container (Any)
結果: void / Unit.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.UseObject:bridge.UseObject(Arg(0, bridge.LastTarget)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Arg:Arg(0, bridge.LastTarget). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.LastTarget:bridge.LastTarget.
內部實作程式碼,不能作為獨立腳本執行。
case "snoop": bridge.UseObject(Arg(0, bridge.LastTarget)); break;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.StealthCnt();讀取角色的本機隱形偏移計數器。
沒有參數。
int 是 IsHidden 處呼叫之間的累積和 max(abs(deltaX),abs(deltaY))。這不是伺服器隱身步驟的保證數量或剩餘限制。
- 沒有 Player 或 Player 未隱藏時,重設 count=0 並儲存目前 X/Y(或 -1)。隱身時,與先前儲存的X/Y進行比較,加入偏移量並更新座標。
- 計數器在讀取時發生變化。可以跳過通話之間的來回移動;在沒有 X/Y 的情況下更改 Z 不會增加計數器。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
var result = UO.StealthCnt();
UO.Print("StealthCnt: " + Convert.ToString(result));參數與執行流程:
- 讀取角色的本機隱形偏移計數器。
UO.Print(UO.StealthCnt());參數與執行流程:
- 沒有 Player 或 Player 未隱藏時,重設 count=0 並儲存目前 X/Y(或 -1)。隱身時,與先前儲存的X/Y進行比較,加入偏移量並更新座標。
return RunScenario();
object? RunScenario()
{
var before = UO.StealthCnt();
UO.Wait(500);
UO.Print(UO.StealthCnt() - before);
return null;
}參數與執行流程:
- 計數器在讀取時發生變化。可以跳過通話之間的來回移動;在沒有 X/Y 的情況下更改 Z 不會增加計數器。
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.Hidden()))
{
UO.Print(UO.StealthCnt());
}
else
{
UO.Print(UO.StealthCnt());
}
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。
參數: 沒有參數。
結果: int / Integer.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.StealthCnt. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.StealthCnt:bridge.StealthCnt().
內部實作程式碼,不能作為獨立腳本執行。
public int StealthCnt() => bridge.StealthCnt();Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.TicksSkill();讀取保存的標記TicksSkill。
沒有參數。
int — 標記 UO.Timer 從運行時開始算起十分之一秒。 0 — 標記尚未設定或事件發生在前十分之一秒內;它不是毫秒或日曆時間。
- 返回字段ticksSkill。由成功受理的UseSkill/UseSkillAtTarget更新;它不是自動觀察所有手動/伺服器活動。命令本身不會更改標記。
- UO.Timer() - 此標記以十分之一秒為單位計算年齡。不比較不同運行時間之間的分數。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
var result = UO.TicksSkill();
UO.Print("TicksSkill: " + Convert.ToString(result));參數與執行流程:
- 讀取保存的標記TicksSkill。
var stamp = UO.TicksSkill();
UO.Print(stamp);參數與執行流程:
- 返回字段ticksSkill。由成功受理的UseSkill/UseSkillAtTarget更新;它不是自動觀察所有手動/伺服器活動。命令本身不會更改標記。
return RunScenario();
object? RunScenario()
{
var stamp = UO.TicksSkill();
var ageTenths = UO.Timer() - stamp;
UO.Print(ageTenths);
return null;
}參數與執行流程:
- UO.Timer() - 此標記以十分之一秒為單位計算年齡。不比較不同運行時間之間的分數。
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
var before = UO.TicksSkill();
UO.Wait(250);
var after = UO.TicksSkill();
UO.Print(before = after);
return null;
}
}C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。
參數: 沒有參數。
結果: int / Integer.
呼叫時:
內部實作程式碼,不能作為獨立腳本執行。
public int TicksSkill() => ticksSkill;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.Track();
void UO.Track(object? flag);
void UO.Track(object? flagRaw, object? x, object? y);建立或刪除指向座標的局部箭頭。幫助標記返回地點。不觸發追蹤技能,不搜尋生物,也不移動角色。
-
flag— 0 — 移除局部箭頭;任何其他整體表演。 UO.Track() 和 UO.Track(1) 將其放置在角色目前的 X/Y 位置。 UO.Track(1, x, y) 將其放置在指定點; UO.Track(0, x, y) 忽略座標。註冊的API中不包含二參數形式。 -
flagRaw— 0 — 移除局部箭頭;任何其他整體表演。 UO.Track() 和 UO.Track(1) 將其放置在角色目前的 X/Y 位置。 UO.Track(1, x, y) 將其放置在指定點; UO.Track(0, x, y) 忽略座標。註冊的API中不包含二參數形式。 -
x— 目前地圖上的單元座標,而非視窗像素。不接受 Z 和卡號。選擇地圖上的現有點;該團隊不會檢查地形、繪製路線或追蹤移動目標。 -
y— 目前地圖上的單元座標,而非視窗像素。不接受 Z 和卡號。選擇地圖上的現有點;該團隊不會檢查地形、繪製路線或追蹤移動目標。
void - 无值;该命令不会返回移动成功或bool。僅更改本地令牌。
- 伺服器和本地箭頭是分開儲存的。 Track(0) 不會移除伺服器箭頭。如果沒有圖形,標記將被儲存並在視窗開啟時出現。關閉遊戲視窗不會刪除標記;斷開連接會清除它們。伺服器可以移動或移除其箭頭。座標並不能證明目標是可以實現的。
- 目前地圖上的單元座標,而不是視窗像素。不接受 Z 和卡號。選擇地圖上的現有點;該團隊不會檢查地形、繪製路線或追蹤移動目標。
- 0 — 刪除局部箭頭;任何其他整體表演。 UO.Track() 和 UO.Track(1) 將其放置在角色目前的 X/Y 位置。 UO.Track(1, x, y) 將其放置在指定點; UO.Track(0, x, y) 忽略座標。註冊的API中不包含二參數形式。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
指令是獨立的陳述式。前面的訊息表示呼叫開始,並非伺服器已完成動作的確認。
UO.Print("Calling UO.Track");
UO.Track();參數與執行流程:
- UO.Track() 記住當前點:離開後,箭頭指向返回。該點不會隨著角色自動更新。
UO.Track();參數與執行流程:
- 在目前地圖上顯示指向1450,1690的局部箭頭。如果您已經在一個方格內,則 Track(0) 會將其刪除。替換你的座標。
return RunScenario();
object? RunScenario()
{
var x = 1450;
var y = 1690;
UO.Track(1, x, y);
if (Truth(UO.GetDistance(x, y) <= 1))
{
UO.Track(0);
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;參數與執行流程:
- MarkIfDistant 函數使用相同的 X/Y 和距離:如果目標距離超過兩個單元格,則放置一個箭頭,否則將其刪除。整個函數如下圖所示;這裡沒有任何進展,也沒有成就的期望。
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()
{
MarkIfDistant(1450, 1690);
return null;
}
void MarkIfDistant(dynamic x, dynamic y)
{
if (Truth(UO.GetDistance(x, y) > 2))
{
UO.Track(1, x, y);
}
else
{
UO.Track(0);
}
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。
參數: 沒有參數。
結果: void / Unit.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.Track. -
InjectionScript.Runtime.InjectionApiUO.Track:Track(1, GetX(), GetY()). -
InjectionScript.Runtime.InjectionApiUO.GetX:GetX(). -
InjectionScript.Runtime.InjectionApiUO.GetY:GetY().
內部實作程式碼,不能作為獨立腳本執行。
public void Track() => Track(1, GetX(), GetY());參數: flag (Any)
結果: void / Unit.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.Track. -
InjectionScript.Runtime.InjectionApiUO.Track:Track(NumberConversions.ToInt(flag), GetX(), GetY()). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(flag). -
InjectionScript.Runtime.InjectionApiUO.GetX:GetX(). -
InjectionScript.Runtime.InjectionApiUO.GetY:GetY().
內部實作程式碼,不能作為獨立腳本執行。
public void Track(InjectionValue flag) => Track(NumberConversions.ToInt(flag), GetX(), GetY());參數: flagRaw (Any), x (Any), y (Any)
結果: void / Unit.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.Track. -
InjectionScript.Runtime.InjectionApiUO.Track:Track(NumberConversions.ToInt(flagRaw), NumberConversions.ToInt(x), NumberConversions.ToInt(y)). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(flagRaw).
內部實作程式碼,不能作為獨立腳本執行。
public void Track(InjectionValue flagRaw, InjectionValue x, InjectionValue y)
=> Track(NumberConversions.ToInt(flagRaw), NumberConversions.ToInt(x), NumberConversions.ToInt(y));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.UseSkill(object? skillName);要求伺服器按名稱使用該技能。僅有一個參數:skillName。 UO.UseSkill("Hiding")試圖隱藏自己的性格。如果技能需要目標,請透過遊戲瞄準器選擇它,或提前使用單獨的命令WaitTargetObject選擇它。
-
skillName- 必填字串 - 技能的確切英文名稱,例如「隱藏」、「解剖」或「冥想」。大小寫並不重要;空格和底線不會自動修正。技能编号、serial、self、距离、恶名、maxZ、等待不在此转移。 所有名字。
int: 1/true——客戶端接受了請求;0/false - 未知名稱或本地故障。這不是技能成功、技能成長或隱身的標誌。如需秘密閱讀Hidden()。你可以寫 if UO.UseSkill("Hiding") { ... } 或與 1/true 比較。缺少或額外的參數是呼叫錯誤。
- 單一形式:UO.UseSkill(skillName)。沒有第二個或後續參數。搜尋、定位和等待由其他命令執行。
- 隱藏和冥想不需要選擇另一個物件。不要為他們準備WaitTargetObject:剩餘的爆發可能會對下一個外人的視線做出反應。
- 解剖學使用範圍。呼叫 UseSkill("Anatomy") 並用滑鼠選擇角色。要自動回應,先執行WaitTargetObject,然後執行UseSkill:這樣你就不會錯過伺服器的快速回應。
- UseSkill 不會建立或清除目標佇列。如果您已準備好回應,請在失敗/超時時清除它CancelWaitTarget。不要同時運行其他目擊場景。
- 中毒、挑釁和其他多步驟技能需要單獨處理額外的目標/工具。一個預先選擇的物體並不能完成任何技能。
- 字典中的名稱不保證無需工具即可使用。挖礦需要工具;咒語由Cast施展。規則和成功由伺服器決定。
- 接受的請求更新TicksSkill。團隊不期望隱身、效果、技能提升或隊列消耗。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
var result = UO.UseSkill("Hiding");
UO.Print("UseSkill: " + Convert.ToString(result));參數與執行流程:
- 隱藏是唯一的論點。 UO.Wait(1000) 給予反應時間; Hidden 讀取接收到的標誌。從UseSkill返回1並不代表你已經逃脫。
if (!(Truth(UO.Connected())) || Truth(UO.Dead()) || Truth(UO.Hidden()))
{
return null;
}
if (!(Truth(UO.UseSkill("Hiding"))))
{
UO.Print("Hiding request rejected");
return null;
}
await Delay(1000);
if (Truth(UO.Hidden()))
{
UO.Print("Character is hidden");
}
else
{
UO.Print("Not hidden yet; check the game journal");
}
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;參數與執行流程:
- 解剖學是唯一參數 UseSkill;mobile 指的是WaitTargetObject。 ASC 將十六進位字串GetSerial 轉換為數字以進行範圍檢查。 1500 — 範例中等待的毫秒數。最後清空剩餘隊列;查看遊戲中的解剖學結果。
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var mobile = Asc(UO.GetSerial("lasttarget"), 0);
if (Truth(mobile <= 0) || Truth(mobile >= 0x40000000) || !(Truth(UO.Exists(mobile))))
{
return null;
}
UO.CancelWaitTarget();
try
{
UO.WaitTargetObject(mobile);
if (Truth(UO.UseSkill("Anatomy")))
{
await Delay(1500);
}
}
finally
{
UO.CancelWaitTarget();
}
return null;
}
int Asc(object? value, int fallback = 0)
{
string text = Convert.ToString(value) ?? "";
if (text.StartsWith("0x", StringComparison.OrdinalIgnoreCase))
return int.TryParse(text[2..], System.Globalization.NumberStyles.HexNumber, System.Globalization.CultureInfo.InvariantCulture, out int hex) ? hex : fallback;
return int.TryParse(text, out int number) ? number : fallback;
}
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;參數與執行流程:
- 冥想是沒有目的的。 before 儲存之前的法力,2000 是觀察期。法力增長可能還有其他原因;這並不是冥想的證明,也不是固定恢復率的承諾。
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
async public Task<object?> RunScenarioAsync()
{
if (!(Truth(UO.Connected())) || Truth(UO.Dead()))
{
return null;
}
var before = UO.Mana();
if (!(Truth(UO.UseSkill("Meditation"))))
{
UO.Print("Meditation request rejected");
return null;
}
await Delay(2000);
if (Truth(UO.Mana() > before))
{
UO.Print("Mana increased");
}
else
{
UO.Print("No mana increase observed yet");
}
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。
參數: skillName (String)
結果: int / Integer.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.UseSkill. -
InjectionScript.Runtime.InjectionApiUO.UseSkillCore:UseSkillCore(skillName).
內部實作程式碼,不能作為獨立腳本執行。
public int UseSkill(string skillName)
{
return UseSkillCore(skillName) ? 1 : 0;
}