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

關於該主題的範例

每個命令卡都有幾個獨立的場景:直接程式碼、函數和類別。以下是精選的簡短場景;限制和全面分析是有可能的。

UO.UseSkill

參數、結果及所有場景

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;

UO.GetSkillValue

參數、結果及所有場景

var selector = "Mining";
var value = UO.GetSkillValue(selector);
UO.Print(Convert.ToString(value));

完整指令說明


UO.GetSkillCap

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

C# 簽章

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 讀取數字和模式。不可轉換的參數可能會使呼叫失敗並出現轉換錯誤。

獨立的 C# 腳本

每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。

簡單範例

將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。

將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。

var result = UO.GetSkillCap("Mining");
UO.Print("GetSkillCap: " + Convert.ToString(result));

1。讀取並輸出-直接腳本

參數與執行流程:

  • 在範例中,選擇器和錄製時的模式均已明確指定。第一行按名稱選擇技能或按數字選擇特徵。 Print 僅顯示結果。
var selector = "Mining";
var value = UO.GetSkillCap(selector);
UO.Print(Convert.ToString(value));

2。應用條件或比較 - 腳本函數

參數與執行流程:

  • 以閾值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;

3。完整的輔助函數 - 腳本類

參數與執行流程:

  • 所有幫助程序代碼都在 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。

UO.GetSkillCap(skillName) — UO.GetSkillCap(Any)

參數: skillName (Any)

結果: double / Decimal.

呼叫時:

內部實作程式碼,不能作為獨立腳本執行。

case "getskillcap": return new InjectionValue(bridge.GetSkillValue(Text(0), false, true));

UO.GetSkillCurrentValue

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

C# 簽章

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 讀取數字和模式。不可轉換的參數可能會使呼叫失敗並出現轉換錯誤。

獨立的 C# 腳本

每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。

簡單範例

將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。

將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。

var result = UO.GetSkillCurrentValue("Mining");
UO.Print("GetSkillCurrentValue: " + Convert.ToString(result));

1。讀取並輸出-直接腳本

參數與執行流程:

  • 在範例中,選擇器和錄製時的模式均已明確指定。第一行按名稱選擇技能或按數字選擇特徵。 Print 僅顯示結果。
var selector = "Mining";
var value = UO.GetSkillCurrentValue(selector);
UO.Print(Convert.ToString(value));

2。應用條件或比較 - 腳本函數

參數與執行流程:

  • 以閾值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;

3。完整的輔助函數 - 腳本類

參數與執行流程:

  • 所有幫助程序代碼都在 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。

UO.GetSkillCurrentValue(skillName) — UO.GetSkillCurrentValue(Any)

參數: skillName (Any)

結果: double / Decimal.

呼叫時:

內部實作程式碼,不能作為獨立腳本執行。

case "getskillcurrentvalue": return new InjectionValue(bridge.GetSkillValue(Text(0), true, false));

UO.GetSkillLockState

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

C# 簽章

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 讀取數字和模式。不可轉換的參數可能會使呼叫失敗並出現轉換錯誤。

獨立的 C# 腳本

每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。

簡單範例

將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。

將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。

var result = UO.GetSkillLockState("Mining");
UO.Print("GetSkillLockState: " + Convert.ToString(result));

1。讀取並輸出-直接腳本

參數與執行流程:

  • 在範例中,選擇器和錄製時的模式均已明確指定。第一行按名稱選擇技能或按數字選擇特徵。 Print 僅顯示結果。
var selector = "Mining";
var mode = UO.GetSkillLockState(selector);
UO.Print(Convert.ToString(mode));

2。應用條件或比較 - 腳本函數

參數與執行流程:

  • 以閾值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;

3。完整的輔助函數 - 腳本類

參數與執行流程:

  • 所有幫助程序代碼都在 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。

UO.GetSkillLockState(skillName) — UO.GetSkillLockState(Any)

參數: skillName (Any)

結果: int / Integer.

呼叫時:

內部實作程式碼,不能作為獨立腳本執行。

case "getskilllockstate": return new InjectionValue(bridge.GetSkillLockState(Text(0)));

UO.GetSkillValue

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

C# 簽章

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 讀取數字和模式。不可轉換的參數可能會使呼叫失敗並出現轉換錯誤。

獨立的 C# 腳本

每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。

簡單範例

將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。

將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。

var result = UO.GetSkillValue("Mining");
UO.Print("GetSkillValue: " + Convert.ToString(result));

1。讀取並輸出-直接腳本

參數與執行流程:

  • 在範例中,選擇器和錄製時的模式均已明確指定。第一行按名稱選擇技能或按數字選擇特徵。 Print 僅顯示結果。
var selector = "Mining";
var value = UO.GetSkillValue(selector);
UO.Print(Convert.ToString(value));

2。應用條件或比較 - 腳本函數

參數與執行流程:

  • 以閾值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;

3。完整的輔助函數 - 腳本類

參數與執行流程:

  • 所有幫助程序代碼都在 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。

UO.GetSkillValue(skillName) — UO.GetSkillValue(Any)

參數: skillName (Any)

結果: double / Decimal.

呼叫時:

內部實作程式碼,不能作為獨立腳本執行。

case "getskillvalue": return new InjectionValue(bridge.GetSkillValue(Text(0), false, false));

UO.SetSkillLockState

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

C# 簽章

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 讀取數字和模式。不可轉換的參數可能會使呼叫失敗並出現轉換錯誤。

獨立的 C# 腳本

每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。

簡單範例

將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。

指令是獨立的陳述式。前面的訊息表示呼叫開始,並非伺服器已完成動作的確認。

UO.Print("Calling UO.SetSkillLockState");
UO.SetSkillLockState("Mining", 2);

1。讀取並輸出-直接腳本

參數與執行流程:

  • 在範例中,選擇器和錄製時的模式均已明確指定。第一行按名稱選擇技能或按數字選擇特徵。 Print 僅顯示結果。
var selector = "Mining";
var mode = 2;
UO.SetSkillLockState(selector, mode);
UO.Print(Convert.ToString(UO.GetSkillLockState(selector)));

2。應用條件或比較 - 腳本函數

參數與執行流程:

  • 以閾值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;

3。完整的輔助函數 - 腳本類

參數與執行流程:

  • 所有幫助程序代碼都在 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。

UO.SetSkillLockState(skillName, skillState) — UO.SetSkillLockState(Any,Any)

參數: skillName (Any), skillState (Any)

結果: void / Unit.

呼叫時:

內部實作程式碼,不能作為獨立腳本執行。

case "setskilllockstate":

                case "skilllockstate": bridge.SetSkillLockState(Text(0), Arg(1)); return InjectionValue.Unit;

UO.SkillLockState

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

C# 簽章

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 讀取數字和模式。不可轉換的參數可能會使呼叫失敗並出現轉換錯誤。

獨立的 C# 腳本

每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。

簡單範例

將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。

指令是獨立的陳述式。前面的訊息表示呼叫開始,並非伺服器已完成動作的確認。

UO.Print("Calling UO.SkillLockState");
UO.SkillLockState("Mining", 2);

1。讀取並輸出-直接腳本

參數與執行流程:

  • 在範例中,選擇器和錄製時的模式均已明確指定。第一行按名稱選擇技能或按數字選擇特徵。 Print 僅顯示結果。
var selector = "Mining";
var mode = 2;
UO.SkillLockState(selector, mode);
UO.Print(Convert.ToString(UO.GetSkillLockState(selector)));

2。應用條件或比較 - 腳本函數

參數與執行流程:

  • 以閾值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;

3。完整的輔助函數 - 腳本類

參數與執行流程:

  • 所有幫助程序代碼都在 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。

UO.SkillLockState(skillName, skillState) — UO.SkillLockState(Any,Any)

參數: skillName (Any), skillState (Any)

結果: void / Unit.

呼叫時:

內部實作程式碼,不能作為獨立腳本執行。

case "setskilllockstate":

                case "skilllockstate": bridge.SetSkillLockState(Text(0), Arg(1)); return InjectionValue.Unit;

UO.SkillVal

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

C# 簽章

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眼鏡測量的,並且具有不同的刻度。

獨立的 C# 腳本

每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。

簡單範例

將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。

將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。

var result = UO.SkillVal("Mining");
UO.Print("SkillVal: " + Convert.ToString(result));

1。直接呼叫-直接腳本

參數與執行流程:

  • 讀取技能或其模式/成長的遺留價值。
UO.Print(UO.SkillVal("Mining"));
UO.Print(UO.SkillVal("Mining", 1));

2。明確選項 - 腳本函數

參數與執行流程:

  • 在選擇變體之前,會取得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;
}

3。完整的輔助函數 - 腳本類

參數與執行流程:

  • 不正確的變體會顯示一則訊息並給出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。

UO.SkillVal(skillName) — UO.SkillVal(String)

參數: skillName (String)

結果: int / Integer.

呼叫時:

內部實作程式碼,不能作為獨立腳本執行。

public int SkillVal(string skillName) => SkillVal(skillName, 0);

UO.SkillVal(skill, variant) — UO.SkillVal(Any,Any)

參數: skill (Any), variant (Any)

結果: int / Integer.

呼叫時:

呼叫時執行已儲存的處理函式 delegate。註冊方法在建立 API 時建立此 delegate。

內部實作程式碼,不能作為獨立腳本執行。

values => new InjectionValue(SkillVal(values[0].ToString(), NumberConversions.ToInt(values[1])))

UO.Snoop

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

C# 簽章

void UO.Snoop();
void UO.Snoop(object? container);

使用容器/對象,通常請求將其開啟。

參數

  • container - 可選serial/別名。預設為橋接。 LastTarget。此指令不檢查 IsContainer 或從屬關係。

傳回值

void - 沒有值。使用單獨的線路撥打電話;完成並不確認伺服器的操作。

行為

  • ExecuteLegacyManualAlias 呼叫網橋。 UseObject(Arg(0,bridge.LastTarget))。這是常規的double點擊請求,而不是偵聽技能的單獨客戶端演算法。
  • Bridge 在遊戲串流上發送請求。伺服器規則適用;沒有內建的等待確認。

獨立的 C# 腳本

每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。

簡單範例

將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。

指令是獨立的陳述式。前面的訊息表示呼叫開始,並非伺服器已完成動作的確認。

UO.Print("Calling UO.Snoop");
UO.Snoop();

1。直接呼叫-直接腳本

參數與執行流程:

  • 使用容器/對象,通常請求將其開啟。
UO.Snoop();

2。明確選項 - 腳本函數

參數與執行流程:

  • 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;

3。完整的輔助函數 - 腳本類

參數與執行流程:

  • 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。

UO.Snoop() — UO.Snoop()

參數: 沒有參數。

結果: void / Unit.

呼叫時:

內部實作程式碼,不能作為獨立腳本執行。

case "snoop": bridge.UseObject(Arg(0, bridge.LastTarget)); break;

UO.Snoop(container) — UO.Snoop(Any)

參數: container (Any)

結果: void / Unit.

呼叫時:

內部實作程式碼,不能作為獨立腳本執行。

case "snoop": bridge.UseObject(Arg(0, bridge.LastTarget)); break;

UO.StealthCnt

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

C# 簽章

int UO.StealthCnt();

讀取角色的本機隱形偏移計數器。

參數

沒有參數。

傳回值

int 是 IsHidden 處呼叫之間的累積和 max(abs(deltaX),abs(deltaY))。這不是伺服器隱身步驟的保證數量或剩餘限制。

行為

  • 沒有 Player 或 Player 未隱藏時,重設 count=0 並儲存目前 X/Y(或 -1)。隱身時,與先前儲存的X/Y進行比較,加入偏移量並更新座標。
  • 計數器在讀取時發生變化。可以跳過通話之間的來回移動;在沒有 X/Y 的情況下更改 Z 不會增加計數器。

獨立的 C# 腳本

每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。

簡單範例

將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。

將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。

var result = UO.StealthCnt();
UO.Print("StealthCnt: " + Convert.ToString(result));

1。直接呼叫-直接腳本

參數與執行流程:

  • 讀取角色的本機隱形偏移計數器。
UO.Print(UO.StealthCnt());

2。明確選項 - 腳本函數

參數與執行流程:

  • 沒有 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;
}

3。完整的輔助函數 - 腳本類

參數與執行流程:

  • 計數器在讀取時發生變化。可以跳過通話之間的來回移動;在沒有 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。

UO.StealthCnt() — UO.StealthCnt()

參數: 沒有參數。

結果: int / Integer.

呼叫時:

內部實作程式碼,不能作為獨立腳本執行。

public int StealthCnt() => bridge.StealthCnt();

UO.TicksSkill

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

C# 簽章

int UO.TicksSkill();

讀取保存的標記TicksSkill。

參數

沒有參數。

傳回值

int — 標記 UO.Timer 從運行時開始算起十分之一秒。 0 — 標記尚未設定或事件發生在前十分之一秒內;它不是毫秒或日曆時間。

行為

  • 返回字段ticksSkill。由成功受理的UseSkill/UseSkillAtTarget更新;它不是自動觀察所有手動/伺服器活動。命令本身不會更改標記。
  • UO.Timer() - 此標記以十分之一秒為單位計算年齡。不比較不同運行時間之間的分數。

獨立的 C# 腳本

每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。

簡單範例

將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。

將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。

var result = UO.TicksSkill();
UO.Print("TicksSkill: " + Convert.ToString(result));

1。直接呼叫-直接腳本

參數與執行流程:

  • 讀取保存的標記TicksSkill。
var stamp = UO.TicksSkill();
UO.Print(stamp);

2。明確選項 - 腳本函數

參數與執行流程:

  • 返回字段ticksSkill。由成功受理的UseSkill/UseSkillAtTarget更新;它不是自動觀察所有手動/伺服器活動。命令本身不會更改標記。
return  RunScenario();
 object? RunScenario()
{
    var stamp = UO.TicksSkill();
    var ageTenths = UO.Timer() - stamp;
    UO.Print(ageTenths);
    return null;
}

3。完整的輔助函數 - 腳本類

參數與執行流程:

  • 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。

UO.TicksSkill() — UO.TicksSkill()

參數: 沒有參數。

結果: int / Integer.

呼叫時:

內部實作程式碼,不能作為獨立腳本執行。

public int TicksSkill() => ticksSkill;

UO.Track

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

C# 簽章

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中不包含二參數形式。

獨立的 C# 腳本

每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。

簡單範例

將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。

指令是獨立的陳述式。前面的訊息表示呼叫開始,並非伺服器已完成動作的確認。

UO.Print("Calling UO.Track");
UO.Track();

1。直接應用-直接腳本

參數與執行流程:

  • UO.Track() 記住當前點:離開後,箭頭指向返回。該點不會隨著角色自動更新。
UO.Track();

2。遊戲條件-場景功能

參數與執行流程:

  • 在目前地圖上顯示指向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;

3。完整的輔助函數 - 腳本類

參數與執行流程:

  • 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。

UO.Track() — UO.Track()

參數: 沒有參數。

結果: void / Unit.

呼叫時:

內部實作程式碼,不能作為獨立腳本執行。

public void Track() => Track(1, GetX(), GetY());

UO.Track(flag) — UO.Track(Any)

參數: flag (Any)

結果: void / Unit.

呼叫時:

內部實作程式碼,不能作為獨立腳本執行。

public void Track(InjectionValue flag) => Track(NumberConversions.ToInt(flag), GetX(), GetY());

UO.Track(flagRaw, x, y) — UO.Track(Any,Any,Any)

參數: flagRaw (Any), x (Any), y (Any)

結果: void / Unit.

呼叫時:

內部實作程式碼,不能作為獨立腳本執行。

public void Track(InjectionValue flagRaw, InjectionValue x, InjectionValue y)

            => Track(NumberConversions.ToInt(flagRaw), NumberConversions.ToInt(x), NumberConversions.ToInt(y));

UO.UseSkill

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

C# 簽章

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。團隊不期望隱身、效果、技能提升或隊列消耗。

獨立的 C# 腳本

每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。

簡單範例

將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。

將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。

var result = UO.UseSkill("Hiding");
UO.Print("UseSkill: " + Convert.ToString(result));

1。透過隱藏隱藏 - 直接腳本

參數與執行流程:

  • 隱藏是唯一的論點。 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;

2。解剖與單獨準備的目標 - 腳本功能

參數與執行流程:

  • 解剖學是唯一參數 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;

3。冥想與法力觀察 - 腳本課

參數與執行流程:

  • 冥想是沒有目的的。 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。

UO.UseSkill(skillName) — UO.UseSkill(String)

參數: skillName (String)

結果: int / Integer.

呼叫時:

內部實作程式碼,不能作為獨立腳本執行。

public int UseSkill(string skillName)

        {

            return UseSkillCore(skillName) ? 1 : 0;

        }
⚠️ **GitHub.com Fallback** ⚠️