ZH TW UO Topic profiles configuration - LIHACHTETAN/ClassicUO-Bad-Newbie-CSharp-Scripts-IDE GitHub Wiki

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

設定檔和設定

家 · C# · IDE · UO API · A–Z · 範例 · Languages

設定檔、儲存設定、全域值和熱鍵。全域運行時值和局部製程變數具有不同的生存期。

部分

主題 命令與解釋
GetProfile UO.GetProfile
ProfileName UO.ProfileName
ProfileShardName UO.ProfileShardName
ChangeProfile UO.ChangeProfile
ExtChangeProfile UO.ExtChangeProfile
ResetProfile UO.ResetProfile
SaveConfig UO.SaveConfig
Global Variables UO.GetGlobal · UO.SetGlobal · UO.GListGet · UO.GListSet · UO.GListSize
EasyUO Variables UO.GetEasyUO · UO.SetEasyUO
MUL Path UO.SetMulPath

所有主題命令

型材

UO.GetProfile · UO.ProfileName · UO.ProfileShardName · UO.ChangeProfile · UO.ExtChangeProfile · UO.ResetProfile · UO.SaveConfig · UO.ReqProfile · UO.ClientProfilePath · UO.ClientPath · UO.SetMulPath

全域變數

UO.GetGlobal · UO.SetGlobal · UO.GetEasyUO · UO.SetEasyUO · UO.GListClear · UO.GListGet · UO.GListPosName · UO.GListPosValue · UO.GListSet · UO.GListSize

熱鍵/設定

UO.LoadHotkeys · UO.SaveHotkeys · UO.Set · UO.SetDefault

關於該主題的範例

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

UO.GetGlobal

參數、結果及所有場景

var text = UO.GetGlobal("manual.delay");
var delayMs = 350;
if (Truth(text != "N/A") && Truth(IsNumeric(text)))
{
    var parsed = Val(text);
    if (Truth(parsed >= 50) && Truth(parsed <= 5000))
    {
        delayMs = checked((int)parsed);
    }
}
await Delay(delayMs);

Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
bool IsNumeric(object? value) => double.TryParse(Convert.ToString(value), System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture, out _);
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
double Val(object? value) => double.TryParse(Convert.ToString(value), System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture, out var number) ? number : 0;

UO.SetGlobal

參數、結果及所有場景

UO.SetGlobal("manual.delay", 350);
UO.SetGlobal("manual.delay", 600);
var text = UO.GetGlobal("manual.delay");
if (Truth(IsNumeric(text)))
{
    await Delay(Val(text));
}

Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
bool IsNumeric(object? value) => double.TryParse(Convert.ToString(value), System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture, out _);
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
double Val(object? value) => double.TryParse(Convert.ToString(value), System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture, out var number) ? number : 0;

完整指令說明


UO.ChangeProfile

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

C# 簽章

dynamic UO.ChangeProfile(object? name);

會話斷開連線時變更下一個自客戶端連線的選定設定檔。

參數

  • name — 由TryResolveProfileCharacter為所選分片解析的已儲存設定檔/角色名稱。空/未知名稱給出 -4。

傳回值

int: 0 — 選擇已準備好; -2 — 經理會話或連接/遊戲世界處於活動狀態; -3 — 執行多個腳本; -4 - 不允許設定檔名稱/分片。

行為

  • ChangeProfile 傳遞空碎片/字元; ExtChangeProfile 允許明確分片和字元。在管理器會話中,您需要在 ClassicUO Manager 中選擇另一個會話 - 正在執行的會話會儲存其設定檔。
  • 如果成功,請儲存並卸載目前設定文件,更改LastServerName,儲存設定並指派下一個字元。連線本身不會啟動; Connect 是單獨呼叫的。

獨立的 C# 腳本

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

簡單範例

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

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

object? result = UO.ChangeProfile("ExampleProfile");
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));

1。檢查故障碼-直接腳本

參數與執行流程:

  • 使用實際儲存的設定檔名稱;負代碼描述失敗。
var status = UO.ChangeProfile("ExampleProfile");
UO.Print(Convert.ToString(status));

2。空名稱 - 腳本函數

參數與執行流程:

  • 沒有其他違規的禁用獨立客戶端將返回 -4 作為空名稱。
return  RunScenario();
 object? RunScenario()
{
    var status = UO.ChangeProfile("");
    UO.Print(Convert.ToString(status));
    return null;
}

3。選擇成功後連線-腳本類

參數與執行流程:

  • Connect僅在代碼0之後調用;伺服器回應尚未確認。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var status = UO.ChangeProfile("ExampleProfile");
        if (Truth(status == 0))
        {
            UO.Connect();
        }

        return null;
    }

    bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}

命令實作

C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。

UO.ChangeProfile(name) — UO.ChangeProfile(Any)

參數: name (Any)

結果: dynamic / Any.

呼叫時:

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

case "changeprofile":

                    return new InjectionValue(bridge.ChangeProfileSelection(Text(0), string.Empty, string.Empty));

UO.ClientPath

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

C# 簽章

string UO.ClientPath();

返回客戶端安裝/可執行目錄。

參數

沒有參數。

傳回值

string — 目錄路徑。它不是bool,不是數組,也不是ID。空路徑表示該值不可用;不要將其用作預設的當前工作資料夾。

行為

  • 閱讀 CUOEnviroment.ExecutablePath。這不是駕駛路線、航路點清單、腳本資料夾或遊戲資料的路徑。
  • 此命令僅讀取路徑,不開啟、建立或儲存任何內容。不應假定尾部分隔符號;如果需要,幫助器範例會新增它。
  • 名稱是遊戲/客戶端名稱API,拼寫為UO。 ClientPath 返回客戶端目錄,ClientProfilePath 返回活動設定檔目錄。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。讀取路徑-直接腳本

參數與執行流程:

  • 沒有爭論。資料夾 - 字串;空值單獨處理。
var folder = UO.ClientPath();
if (Truth(folder == ""))
{
    UO.Print("Folder is not available");
    return null;
}
UO.Print(folder);

bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

2。將客戶端資料夾與設定檔資料夾進行比較 - 腳本功能

參數與執行流程:

  • 這些資料夾有不同的用途。該腳本輸出這兩行,而不更改配置或設定檔。
return  RunScenario();
 object? RunScenario()
{
    var client = UO.ClientPath();
    var profile = UO.ClientProfilePath();
    UO.Print("Client: " + client);
    if (Truth(profile == ""))
    {
        UO.Print("No current profile");
    }
    else
    {
        UO.Print("Profile: " + profile);
    }

    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。用於建立檔案路徑的完整功能 - 腳本類

參數與執行流程:

  • ChildPath 完整顯示:folder 是結果目錄,leaf 是檔案名稱。這是給定名稱的字串連接,而不是通用路徑規範化器。
  • 檔案未被建立或讀取;首先,您可以檢查結果字串。
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 folder = UO.ClientPath();
        var filePath = ChildPath(folder, "sample.json");
        if (Truth(filePath != ""))
        {
            UO.Print("Example path: " + filePath);
        }

        return null;
    }

    dynamic ChildPath(dynamic folder, dynamic leaf)
    {
        if (Truth(folder == ""))
        {
            return "";
        }

        var last = Right(folder, 1);
        if (Truth(last == "/") || Truth(last == "\\"))
        {
            return folder + leaf;
        }

        return folder + "/" + leaf;
    }

    string Right(object? value, int count)
    {
        string text = Convert.ToString(value) ?? "";
        return text[Math.Max(0, text.Length - count)..];
    }

    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.ClientPath() — UO.ClientPath()

參數: 沒有參數。

結果: string / String.

呼叫時:

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

case "clientpath": return new InjectionValue(bridge.ClientPath);

UO.ClientProfilePath

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

C# 簽章

string UO.ClientProfilePath();

傳回目前客戶端設定檔目錄。

參數

沒有參數。

傳回值

string — 目錄路徑。它不是bool,不是數組,也不是ID。空路徑表示該值不可用;不要將其用作預設的當前工作資料夾。

行為

  • 讀取ProfileManager.ProfilePath;如果尚未選擇配置文件,則返回空字串。通話本身不會建立設定文件,也不會傳輸設定。
  • 此命令僅讀取路徑,不開啟、建立或儲存任何內容。不應假定尾部分隔符號;如果需要,幫助器範例會新增它。
  • 名稱是遊戲/客戶端名稱API,拼寫為UO。 ClientPath 返回客戶端目錄,ClientProfilePath 返回活動設定檔目錄。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。讀取路徑-直接腳本

參數與執行流程:

  • 沒有爭論。資料夾 - 字串;空值單獨處理。
var folder = UO.ClientProfilePath();
if (Truth(folder == ""))
{
    UO.Print("Folder is not available");
    return null;
}
UO.Print(folder);

bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

2。將客戶端資料夾與設定檔資料夾進行比較 - 腳本功能

參數與執行流程:

  • 這些資料夾有不同的用途。該腳本輸出這兩行,而不更改配置或設定檔。
return  RunScenario();
 object? RunScenario()
{
    var client = UO.ClientPath();
    var profile = UO.ClientProfilePath();
    UO.Print("Client: " + client);
    if (Truth(profile == ""))
    {
        UO.Print("No current profile");
    }
    else
    {
        UO.Print("Profile: " + profile);
    }

    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。用於建立檔案路徑的完整功能 - 腳本類

參數與執行流程:

  • ChildPath 完整顯示:folder 是結果目錄,leaf 是檔案名稱。這是給定名稱的字串連接,而不是通用路徑規範化器。
  • 檔案未被建立或讀取;首先,您可以檢查結果字串。
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 folder = UO.ClientProfilePath();
        var filePath = ChildPath(folder, "sample.json");
        if (Truth(filePath != ""))
        {
            UO.Print("Example path: " + filePath);
        }

        return null;
    }

    dynamic ChildPath(dynamic folder, dynamic leaf)
    {
        if (Truth(folder == ""))
        {
            return "";
        }

        var last = Right(folder, 1);
        if (Truth(last == "/") || Truth(last == "\\"))
        {
            return folder + leaf;
        }

        return folder + "/" + leaf;
    }

    string Right(object? value, int count)
    {
        string text = Convert.ToString(value) ?? "";
        return text[Math.Max(0, text.Length - count)..];
    }

    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.ClientProfilePath() — UO.ClientProfilePath()

參數: 沒有參數。

結果: string / String.

呼叫時:

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

case "shardpath":

                case "clientprofilepath": return new InjectionValue(bridge.CurrentProfilePath);

UO.ExtChangeProfile

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

C# 簽章

dynamic UO.ExtChangeProfile(object? profileName);
dynamic UO.ExtChangeProfile(object? profileName, object? shardName);
dynamic UO.ExtChangeProfile(object? profileName, object? shardName, object? charName);

會話斷開連線時變更下一個自客戶端連線的選定設定檔。

參數

  • profileName — 由TryResolveProfileCharacter為所選分片解析的已儲存設定檔/角色名稱。空/未知名稱給出 -4。
  • shardName — 可選的分片名稱。空值使用 CurrentProfile.ServerName、World.ServerName 或 LastServerName。
  • charName - 可選的角色名稱。空值使用已儲存的設定檔名稱。

傳回值

int: 0 — 選擇已準備好; -2 — 經理會話或連接/遊戲世界處於活動狀態; -3 — 執行多個腳本; -4 - 不允許設定檔名稱/分片。

行為

  • ChangeProfile 傳遞空碎片/字元; ExtChangeProfile 允許明確分片和字元。在管理器會話中,您需要在 ClassicUO Manager 中選擇另一個會話 - 正在執行的會話會儲存其設定檔。
  • 如果成功,請儲存並卸載目前設定文件,更改LastServerName,儲存設定並指派下一個字元。連線本身不會啟動; Connect 是單獨呼叫的。

獨立的 C# 腳本

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

簡單範例

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

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

object? result = UO.ExtChangeProfile("ExampleProfile");
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));

1。檢查故障碼-直接腳本

參數與執行流程:

  • 使用實際儲存的設定檔名稱;負代碼描述失敗。
var status = UO.ExtChangeProfile("ExampleProfile");
UO.Print(Convert.ToString(status));

2。空名稱 - 腳本函數

參數與執行流程:

  • 沒有其他違規的禁用獨立客戶端將返回 -4 作為空名稱。
return  RunScenario();
 object? RunScenario()
{
    var status = UO.ExtChangeProfile("");
    UO.Print(Convert.ToString(status));
    return null;
}

3。選擇成功後連線-腳本類

參數與執行流程:

  • Connect僅在代碼0之後調用;伺服器回應尚未確認。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var status = UO.ExtChangeProfile("ExampleProfile");
        if (Truth(status == 0))
        {
            UO.Connect();
        }

        return null;
    }

    bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}

命令實作

C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。

UO.ExtChangeProfile(profileName) — UO.ExtChangeProfile(Any)

參數: profileName (Any)

結果: dynamic / Any.

呼叫時:

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

case "extchangeprofile":

                {

                    string requestedProfile = Text(0);

                    string requestedShard = arguments.Length > 1 ? Text(1) : string.Empty;

                    string requestedCharacter = arguments.Length > 2 ? Text(2) : string.Empty;

                    return new InjectionValue(bridge.ChangeProfileSelection(requestedProfile, requestedShard, requestedCharacter));

                }

UO.ExtChangeProfile(profileName, shardName) — UO.ExtChangeProfile(Any,Any)

參數: profileName (Any), shardName (Any)

結果: dynamic / Any.

呼叫時:

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

case "extchangeprofile":

                {

                    string requestedProfile = Text(0);

                    string requestedShard = arguments.Length > 1 ? Text(1) : string.Empty;

                    string requestedCharacter = arguments.Length > 2 ? Text(2) : string.Empty;

                    return new InjectionValue(bridge.ChangeProfileSelection(requestedProfile, requestedShard, requestedCharacter));

                }

UO.ExtChangeProfile(profileName, shardName, charName) — UO.ExtChangeProfile(Any,Any,Any)

參數: profileName (Any), shardName (Any), charName (Any)

結果: dynamic / Any.

呼叫時:

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

case "extchangeprofile":

                {

                    string requestedProfile = Text(0);

                    string requestedShard = arguments.Length > 1 ? Text(1) : string.Empty;

                    string requestedCharacter = arguments.Length > 2 ? Text(2) : string.Empty;

                    return new InjectionValue(bridge.ChangeProfileSelection(requestedProfile, requestedShard, requestedCharacter));

                }

UO.GListClear

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

C# 簽章

void UO.GListClear();

在執行一系列新操作之前清除整個臨時清單。

參數

沒有參數。

傳回值

void - 沒有結果。清除後,GListSize()返回0。

行為

  • 此清單屬於運行時實例。其他腳本運行有自己的清單。 GList不是共用的跨設定檔儲存空間;這些指令不會寫入文件,也不會進入已儲存的設定檔狀態。新的運行時得到一個空列表。它也不是var/變數聲明,也不是UO.SetGlobal。
  • 新名稱添加到末尾。重複不區分大小寫的名稱會取代其原始位置的含義和拼字。閱讀不會刪除任何內容。如果您需要穩定的索引,則無法在搜尋過程中清除或新增記錄。
  • 操作是本地的:沒有資料包、沒有物件搜尋、沒有延遲。 Set/Get 依序找出名稱;對於較大的集合,請使用字典。沒有單獨的命令用於刪除該系列中的一個鍵;清除會清除所有條目。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。 GListClear - 1 - 直接脚本

參數與執行流程:

  • Clear 消除了這兩個規則,Size 確認了空性。角色的物品保留在原處。
UO.GListClear();
UO.GListSet("bandage", 0x0E21);
UO.GListSet("gold", 0x0EED);
UO.GListClear();
if (Truth(UO.GListSize() == 0))
{
    UO.Print("Batch rules cleared");
}

bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

2。 GListClear — 2 — 腳本函數

參數與執行流程:

  • 在新增礦石之前刪除舊規則;搜尋僅顯示帶有 graphic 0x19B9 的新規則。
return  RunScenario();
 object? RunScenario()
{
    UO.GListClear();
    UO.GListSet("bandage", 0x0E21);
    UO.GListSet("gold", 0x0EED);
    UO.GListClear();
    UO.GListSet("ore", 0x19B9);
    var i = 0;
    while (Truth(i < UO.GListSize()))
    {
        var name = UO.GListPosName(i);
        var graphic = UO.GListPosValue(i);
        UO.Print(name + " | graphic: " + Convert.ToString(graphic));
        i = i + 1;
    }

    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。 GListClear - 3 - 場景類

參數與執行流程:

  • 清除清單後,先前讀入保留的數字仍然可用。此清單已包含 0 條目。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        UO.GListClear();
        UO.GListSet("bandage", 0x0E21);
        UO.GListSet("gold", 0x0EED);
        var retained = UO.GListGet("bandage");
        UO.GListClear();
        UO.Print("Retained graphic: " + Convert.ToString(retained));
        UO.Print("Remaining entries: " + Convert.ToString(UO.GListSize()));
        return null;
    }
}

命令實作

C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。

UO.GListClear() — UO.GListClear()

參數: 沒有參數。

結果: void / Unit.

呼叫時:

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

public void GListClear() => globalList.Clear();

UO.GListGet

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

C# 簽章

dynamic UO.GListGet(object? nameValue);

按規則或計數器名稱從臨時清單中讀取值。

參數

  • nameValue — object?被轉換為字串。名稱的比較不區分大小寫:「bandage」和「BANDAGE」是一個鍵。建議使用非空字串名稱;空名稱也是可以接受的。

傳回值

object? — 相同類型的保存值。如果沒有鑰匙,int0。保留的0與缺失的GListGet無法區分;檢查名字。

行為

  • 此清單屬於運行時實例。其他腳本運行有自己的清單。 GList不是共用的跨設定檔儲存空間;這些指令不會寫入文件,也不會進入已儲存的設定檔狀態。新的運行時得到一個空列表。它也不是var/變數聲明,也不是UO.SetGlobal。
  • 新名稱添加到末尾。重複不區分大小寫的名稱會取代其原始位置的含義和拼字。閱讀不會刪除任何內容。如果您需要穩定的索引,則無法在搜尋過程中清除或新增記錄。
  • 操作是本地的:沒有資料包、沒有物件搜尋、沒有延遲。 Set/Get 依序找出名稱;對於較大的集合,請使用字典。沒有單獨的命令用於刪除該系列中的一個鍵;清除會清除所有條目。

獨立的 C# 腳本

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

簡單範例

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

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

UO.GListSet("simple_value", 42);
object? result = UO.GListGet("simple_value");
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));

1。 GListGet - 1 - 直接脚本

參數與執行流程:

  • BANDAGE找到繃帶鑰匙。 0x0E21 - graphic繃帶,不是他獨有的serial。
UO.GListClear();
UO.GListSet("bandage", 0x0E21);
UO.GListSet("gold", 0x0EED);
var graphic = UO.GListGet("BANDAGE");
if (Truth(graphic == 0x0E21))
{
    UO.Print("Bandage rule selected");
}

bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

2。 GListGet — 2 — 腳本函數

參數與執行流程:

  • 完整的函數HasEntry迭代名稱;所以已處理的0與缺失是不同的。對於自己的金鑰,此處使用ASCII-名稱。
return  RunScenario();
 object? RunScenario()
{
    UO.GListClear();
    UO.GListSet("processed", 0);
    if (Truth(HasEntry("processed")))
    {
        var count = UO.GListGet("processed");
        UO.Print("Recorded count: " + Convert.ToString(count));
    }

    if (!(Truth(HasEntry("missing"))))
    {
        UO.Print("No entry named missing");
    }

    return null;
}

dynamic HasEntry(dynamic name)
{
    var i = 0;
    while (Truth(i < UO.GListSize()))
    {
        if (Truth(Convert.ToString(UO.GListPosName(i)) == Convert.ToString(name)))
        {
            return true;
        }

        i = i + 1;
    }

    return false;
}

bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

3。 GListGet - 3 - 場景類

參數與執行流程:

  • 延遲 — 毫秒數;僅當值在 50–5000 範圍內時才呼叫 UO.Wait。該範例等待 350 毫秒。
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.GListClear();
        UO.GListSet("delay", 350);
        var delayMs = UO.GListGet("delay");
        if (Truth(delayMs >= 50) && Truth(delayMs <= 5000))
        {
            await Delay(delayMs);
        }
        else
        {
            UO.Print("Delay outside the accepted range");
        }

        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.GListGet(nameValue) — UO.GListGet(Any)

參數: nameValue (Any)

結果: dynamic / Any.

呼叫時:

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

public InjectionValue GListGet(InjectionValue nameValue)

        {

            string name = nameValue.ToString();

            int index = globalList.FindIndex(pair => pair.Key.Equals(name, StringComparison.OrdinalIgnoreCase));

            return index >= 0 ? globalList[index].Value : InjectionValue.Zero;

        }

UO.GListPosName

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

C# 簽章

string UO.GListPosName(object? index);

按位置讀取記錄名稱以枚舉規則。

參數

  • index - int:從 0 到 GListSize()-1 的索引。它不是 serial、graphic 或堆疊中的單元數。

傳回值

string 是暫存器最後記錄形式的名稱。無效索引傳回“”;空鍵也會回傳“”。

行為

  • 此清單屬於運行時實例。其他腳本運行有自己的清單。 GList不是共用的跨設定檔儲存空間;這些指令不會寫入文件,也不會進入已儲存的設定檔狀態。新的運行時得到一個空列表。它也不是var/變數聲明,也不是UO.SetGlobal。
  • 新名稱添加到末尾。重複不區分大小寫的名稱會取代其原始位置的含義和拼字。閱讀不會刪除任何內容。如果您需要穩定的索引,則無法在搜尋過程中清除或新增記錄。
  • 操作是本地的:沒有資料包、沒有物件搜尋、沒有延遲。 Set/Get 依序找出名稱;對於較大的集合,請使用字典。沒有單獨的命令用於刪除該系列中的一個鍵;清除會清除所有條目。

獨立的 C# 腳本

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

簡單範例

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

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

UO.GListClear();
UO.GListSet("simple_value", 42);
var result = UO.GListPosName(0);
UO.Print("GListPosName: " + Convert.ToString(result));

1。 GListPosName - 1 - 直接脚本

參數與執行流程:

  • 索引0表示第一條規則。在讀取之前,先檢查清單是否為空。
UO.GListClear();
UO.GListSet("bandage", 0x0E21);
UO.GListSet("gold", 0x0EED);
if (Truth(UO.GListSize() > 0))
{
    var first = UO.GListPosName(0);
    UO.Print("First rule: " + first);
}

bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

2。 GListPosName — 2 — 腳本函數

參數與執行流程:

  • HasEntry 對於寫入的空計數器會傳回 true,對於遺失的名稱傳回 false。
return  RunScenario();
 object? RunScenario()
{
    UO.GListClear();
    UO.GListSet("processed", 0);
    if (Truth(HasEntry("processed")))
    {
        var count = UO.GListGet("processed");
        UO.Print("Recorded count: " + Convert.ToString(count));
    }

    if (!(Truth(HasEntry("missing"))))
    {
        UO.Print("No entry named missing");
    }

    return null;
}

dynamic HasEntry(dynamic name)
{
    var i = 0;
    while (Truth(i < UO.GListSize()))
    {
        if (Truth(Convert.ToString(UO.GListPosName(i)) == Convert.ToString(name)))
        {
            return true;
        }

        i = i + 1;
    }

    return false;
}

bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

3。 GListPosName - 3 - 場景類

參數與執行流程:

  • 重複BANDAGE改變第一個位置的名字拼法;黃金仍位居第二。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        UO.GListClear();
        UO.GListSet("bandage", 0x0E21);
        UO.GListSet("gold", 0x0EED);
        UO.GListSet("BANDAGE", 0x0E21);
        var i = 0;
        while (Truth(i < UO.GListSize()))
        {
            var name = UO.GListPosName(i);
            var graphic = UO.GListPosValue(i);
            UO.Print(name + " | graphic: " + Convert.ToString(graphic));
            i = i + 1;
        }

        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.GListPosName(index) — UO.GListPosName(Integer)

參數: index (Integer)

結果: string / String.

呼叫時:

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

public string GListPosName(int index) => index >= 0 && index < globalList.Count ? globalList[index].Key : string.Empty;

UO.GListPosValue

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

C# 簽章

dynamic UO.GListPosValue(object? index);

從預先填入的清單中按位置讀取條目的值,例如 graphic。

參數

  • index - int:從 0 到 GListSize()-1 的索引。它不是 serial、graphic 或堆疊中的單元數。

傳回值

object? — 具有保留類型的值;無效索引傳回int0。檢查邊界,因為正確的0是可以接受的。

行為

  • 此清單屬於運行時實例。其他腳本運行有自己的清單。 GList不是共用的跨設定檔儲存空間;這些指令不會寫入文件,也不會進入已儲存的設定檔狀態。新的運行時得到一個空列表。它也不是var/變數聲明,也不是UO.SetGlobal。
  • 新名稱添加到末尾。重複不區分大小寫的名稱會取代其原始位置的含義和拼字。閱讀不會刪除任何內容。如果您需要穩定的索引,則無法在搜尋過程中清除或新增記錄。
  • 操作是本地的:沒有資料包、沒有物件搜尋、沒有延遲。 Set/Get 依序找出名稱;對於較大的集合,請使用字典。沒有單獨的命令用於刪除該系列中的一個鍵;清除會清除所有條目。

獨立的 C# 腳本

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

簡單範例

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

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

UO.GListClear();
UO.GListSet("simple_value", 42);
object? result = UO.GListPosValue(0);
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));

1。 GListPosValue - 1 - 直接脚本

參數與執行流程:

  • 索引1選擇第二條黃金法則。在讀取值之前進行邊界檢查。
UO.GListClear();
UO.GListSet("bandage", 0x0E21);
UO.GListSet("gold", 0x0EED);
var index = 1;
if (Truth(index >= 0) && Truth(index < UO.GListSize()))
{
    var graphic = UO.GListPosValue(index);
    UO.Print("Second rule graphic: " + Convert.ToString(graphic));
}

bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

2。 GListPosValue — 2 — 腳本函數

參數與執行流程:

  • 暴力搜索規則中的graphic繃帶,而不是世界中的物品;沒有發送遊戲請求。
return  RunScenario();
 object? RunScenario()
{
    UO.GListClear();
    UO.GListSet("bandage", 0x0E21);
    UO.GListSet("gold", 0x0EED);
    var total = UO.GListSize();
    var i = 0;
    while (Truth(i < total))
    {
        var graphic = UO.GListPosValue(i);
        if (Truth(graphic == 0x0E21))
        {
            UO.Print("Bandage rule at index " + Convert.ToString(i));
        }

        i = i + 1;
    }

    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。 GListPosValue - 3 - 場景類

參數與執行流程:

  • 索引0存在,因此值0是一個有效的計數器;此處檢查值是否為非空將出現錯誤。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        UO.GListClear();
        UO.GListSet("processed", 0);
        var index = 0;
        if (Truth(index < UO.GListSize()))
        {
            var count = UO.GListPosValue(index);
            UO.Print("Valid zero count: " + Convert.ToString(count));
        }

        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.GListPosValue(index) — UO.GListPosValue(Integer)

參數: index (Integer)

結果: dynamic / Any.

呼叫時:

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

public InjectionValue GListPosValue(int index) => index >= 0 && index < globalList.Count ? globalList[index].Value : InjectionValue.Zero;

UO.GListSet

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

C# 簽章

void UO.GListSet(object? nameValue, object? value);

將命名值寫入臨時清單:例如,graphic 戰利品規則或已處理物品計數器。

參數

  • nameValue — object?被轉換為字串。名稱的比較不區分大小寫:「bandage」和「BANDAGE」是一個鍵。建議使用非空字串名稱;空名稱也是可以接受的。

傳回值

void - 沒有結果;一個單獨的指令,沒有分配。

行為

  • 此清單屬於運行時實例。其他腳本運行有自己的清單。 GList不是共用的跨設定檔儲存空間;這些指令不會寫入文件,也不會進入已儲存的設定檔狀態。新的運行時得到一個空列表。它也不是var/變數聲明,也不是UO.SetGlobal。
  • 新名稱添加到末尾。重複不區分大小寫的名稱會取代其原始位置的含義和拼字。閱讀不會刪除任何內容。如果您需要穩定的索引,則無法在搜尋過程中清除或新增記錄。
  • 操作是本地的:沒有資料包、沒有物件搜尋、沒有延遲。 Set/Get 依序找出名稱;對於較大的集合,請使用字典。沒有單獨的命令用於刪除該系列中的一個鍵;清除會清除所有條目。

獨立的 C# 腳本

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

簡單範例

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

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

UO.Print("Calling UO.GListSet");
UO.GListSet("gold", 0x0EED);

1。 GListSet - 1 - 直接脚本

參數與執行流程:

  • 繃帶和黃金是規則的名稱,編號是graphic。 BANDAGE 取代第一個條目,不建立第三個;輸出顯示順序。
UO.GListClear();
UO.GListSet("bandage", 0x0E21);
UO.GListSet("gold", 0x0EED);
UO.GListSet("BANDAGE", 0x0E21);
var i = 0;
while (Truth(i < UO.GListSize()))
{
    var name = UO.GListPosName(i);
    var graphic = UO.GListPosValue(i);
    UO.Print(name + " | graphic: " + Convert.ToString(graphic));
    i = i + 1;
}

bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

2。 GListSet — 2 — 腳本函數

參數與執行流程:

  • 處理從0開始。三步驟將儲存的計數器增加到3;遊戲物品不會在這裡移動。
return  RunScenario();
 object? RunScenario()
{
    UO.GListClear();
    UO.GListSet("processed", 0);
    for (int i = (int)(1); i <= 3; i += (int)(1))
    {
        UO.GListSet("processed", UO.GListGet("processed") + 1);
    }

    UO.Print("Recorded count: " + Convert.ToString(UO.GListGet("processed")));
    return null;
}

3。 GListSet - 3 - 場景類

參數與執行流程:

  • mode — 字串,limit — 數字2。模式選擇分支,數量將處理限制為兩個步驟。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        UO.GListClear();
        UO.GListSet("mode", "inspect");
        UO.GListSet("limit", 2);
        if (Truth(UO.GListGet("mode") == "inspect"))
        {
            for (int i = (int)(1); i <= UO.GListGet("limit"); i += (int)(1))
            {
                UO.Print("Inspect batch: " + Convert.ToString(i));
            }
        }

        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.GListSet(nameValue, value) — UO.GListSet(Any,Any)

參數: nameValue (Any), value (Any)

結果: void / Unit.

呼叫時:

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

public void GListSet(InjectionValue nameValue, InjectionValue value)

        {

            string name = nameValue.ToString();

            int index = globalList.FindIndex(pair => pair.Key.Equals(name, StringComparison.OrdinalIgnoreCase));

            var entry = new KeyValuePair<string, InjectionValue>(name, value);

            if (index >= 0)

                globalList[index] = entry;

            else

                globalList.Add(entry);

        }

UO.GListSize

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

C# 簽章

int UO.GListSize();

計算臨時清單中的命名條目以檢查是否為空或限制暴力。

參數

沒有參數。

傳回值

int >= 0 — 唯一名稱的數量,而不是堆疊中的項目或單元的數量。

行為

  • 此清單屬於運行時實例。其他腳本運行有自己的清單。 GList不是共用的跨設定檔儲存空間;這些指令不會寫入文件,也不會進入已儲存的設定檔狀態。新的運行時得到一個空列表。它也不是var/變數聲明,也不是UO.SetGlobal。
  • 新名稱添加到末尾。重複不區分大小寫的名稱會取代其原始位置的含義和拼字。閱讀不會刪除任何內容。如果您需要穩定的索引,則無法在搜尋過程中清除或新增記錄。
  • 操作是本地的:沒有資料包、沒有物件搜尋、沒有延遲。 Set/Get 依序找出名稱;對於較大的集合,請使用字典。沒有單獨的命令用於刪除該系列中的一個鍵;清除會清除所有條目。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。 GListSize - 1 - 直接脚本

參數與執行流程:

  • 空集會在處理規則之前停止該程序。
UO.GListClear();
if (Truth(UO.GListSize() == 0))
{
    UO.Print("No batch rules; stop here");
    return null;
}

bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

2。 GListSize — 2 — 腳本函數

參數與執行流程:

  • 這兩個規則在索引0和1上迭代;條件 i < Size 不允許存取索引 2。
return  RunScenario();
 object? RunScenario()
{
    UO.GListClear();
    UO.GListSet("bandage", 0x0E21);
    UO.GListSet("gold", 0x0EED);
    var i = 0;
    while (Truth(i < UO.GListSize()))
    {
        var name = UO.GListPosName(i);
        var graphic = UO.GListPosValue(i);
        UO.Print(name + " | graphic: " + Convert.ToString(graphic));
        i = i + 1;
    }

    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。 GListSize - 3 - 場景類

參數與執行流程:

  • 替換BANDAGE不會增加名稱數量;前後尺寸為2。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        UO.GListClear();
        UO.GListSet("bandage", 0x0E21);
        UO.GListSet("gold", 0x0EED);
        var before = UO.GListSize();
        UO.GListSet("BANDAGE", 0x0E21);
        if (Truth(UO.GListSize() == before))
        {
            UO.Print("Existing rule updated without an extra entry");
        }

        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.GListSize() — UO.GListSize()

參數: 沒有參數。

結果: int / Integer.

呼叫時:

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

public int GListSize() => globalList.Count;

UO.GetEasyUO

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

C# 簽章

string UO.GetEasyUO(object? number);

從使用者的 Windows 登錄檔 EasyUO 讀取字串。

參數

  • number - int/NumberConversions.ToInt 轉換的值。形成十進制名稱註冊表值。

傳回值

string — 值HKCU\Software\EasyUO<數字>;如果不存在,則檢查名稱 *。如果鍵/值遺失或位於 Windows 之外,則傳回空字串。

行為

  • 閱讀不會創造鑰匙或進入遊戲世界。舊版註冊表介面與GetGlobal不同。系統註冊表存取錯誤可能會蔓延;橋上沒有單獨的掛鉤。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。閱讀條目1 - 直接腳本

參數與執行流程:

  • 先讀取名稱1,然後讀取*1。
var value = UO.GetEasyUO(1);
UO.Print(value);

2。檢查空結果 - 腳本函數

參數與執行流程:

  • 空字串可以是沒有值或儲存的空文字。
return  RunScenario();
 object? RunScenario()
{
    var value = UO.GetEasyUO(999);
    if (Truth(Len(value) == 0))
    {
        UO.Print("empty");
    }

    return null;
}

int Len(object? value) => Convert.ToString(value)?.Length ?? 0;
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

3。已存號碼-腳本類

參數與執行流程:

  • 該數字定義註冊表值,而不是物件的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 number = 2;
        var value = UO.GetEasyUO(number);
        UO.Print(value);
        return null;
    }
}

命令實作

C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。

UO.GetEasyUO(number) — UO.GetEasyUO(Any)

參數: number (Any)

結果: string / String.

呼叫時:

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

public string GetEasyUO(InjectionValue number) => bridge.GetEasyUO(NumberConversions.ToInt(number));

UO.GetGlobal

C# 簽章

string UO.GetGlobal(object? name);
dynamic UO.GetGlobal(object? globalRegion, object? varName);

行為與結果

SetGlobal 與 GetGlobal 在所有腳本、設定檔及 Full Client/Client 處理程序之間共用。值為字串;不存在的鍵回傳 "N/A",鍵區分大小寫;region 形式使用 region/name。Manager/Game Manager/CSharp/globals.json 持久保存,並在跨程序鎖定下重新讀取。Shared 形式使用同一儲存區。

參數

  • globalRegion — 與鍵名組合的命名空間。
  • name — 區分大小寫的共用鍵名。
  • varName — 區分大小寫的共用鍵名。

每個程式碼區塊都是完整的獨立 .csx。請替換範例 serial、type 與座標;參數順序及 C# 具名參數依照簽章。

聊天指令

#getglobal team.target
#get global team.message

完整 C# 範例

每個程式碼區塊都是完整的獨立 .csx。請替換範例 serial、type 與座標;參數順序及 C# 具名參數依照簽章。

1

string value = UO.GetGlobal("team.target");
UO.Print(value);

2

string value = UO.GetGlobal("team.delay");
if (int.TryParse(value, out int milliseconds))
    UO.Print(milliseconds.ToString());

3

UO.Print(Convert.ToString(UO.GetGlobal("team", "delay")));

4

new CommandSample().Execute(UO);

sealed class CommandSample
{
    public void Execute(global::ClassicUO.CSharp.CSharpGameApi api)
    {
        string value = api.GetGlobal("team.target");
        api.Print(value);
    }
}

內部呼叫

CSharpGameApi.GetGlobal
  -> CSharpScriptGlobals
  -> InjectionScript.Runtime.InjectionApiUO.RegisterClientApiCompatibility
  -> InjectionScript.Runtime.State.Globals.GetGlobal
Globals -> SharedGlobalStore -> named mutex -> atomic JSON replacement


UO.GetProfile

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

C# 簽章

string UO.GetProfile(object? serial);

讀取伺服器為設定檔視窗發送的公共字元描述。對於閱讀註釋或搜尋所選字元的描述中的文字很有用。這些不是經理設定檔設定。

參數

  • serial — 字元序列:一個數字、帶有 ID 0x... 的字串或物件選擇器,例如「self」或「lasttarget」。這不是正文類型、檔案名稱或經理設定檔。

傳回值

string — 主要描述文本,無標題和簽名。空描述是合法的;如果在 3 秒內沒有回應,也可能出現空白結果。這不是true/false。每次呼叫都會傳送請求;如果描述已儲存在會話中,則立即傳回該描述,包括開啟視窗的草稿。這並不能保證新的伺服器回應。

行為

  • 描述及其草稿屬於會議。關閉遊戲視窗會儲存它們而不發布它們,打開它們會恢復設定檔視窗。明確關閉您自己的個人資料會發送一次修改後的文字;別人的簡訊沒有發送。新的伺服器回應將替換舊數據,斷開連接會將其清除。 GetProfile 本身不編輯任何內容。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。直接應用-直接腳本

參數與執行流程:

  • 「self」-你的角色描述;不是帳戶配置。顯示從伺服器接收的文字或已儲存在會話中的文字。
var note = UO.GetProfile("self");
if (Truth(note != ""))
{
    UO.Print(note);
}

bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

2。遊戲條件-場景功能

參數與執行流程:

  • 需要現有的lasttarget。 FindText 在自由文字中搜尋區分大小寫的單字「Healer」。如果匹配,AddObject 將所選的 serial 保存在名稱 healerNote 下。這是用戶備註,不是職業證明NPC。
return  RunScenario();
 object? RunScenario()
{
    if (!(Truth(UO.Exists("lasttarget"))))
    {
        return null;
    }

    var note = UO.GetProfile("lasttarget");
    if (Truth(FindText(note, "Healer") > 0))
    {
        UO.AddObject("healerNote", "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;
int FindText(object? text, object? value) => (Convert.ToString(text) ?? "").IndexOf(Convert.ToString(value) ?? "", StringComparison.Ordinal) + 1;
int FindText(int start, object? text, object? value)
{
    string input = Convert.ToString(text) ?? "";
    return input.IndexOf(Convert.ToString(value) ?? "", Math.Clamp(start - 1, 0, input.Length), StringComparison.Ordinal) + 1;
}

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

參數與執行流程:

  • 整個函數HasPublicNote如下圖所示。检查对象和子字符串是否存在,返回 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(HasPublicNote("lasttarget", "Guild")))
        {
            UO.AddObject("guildNote", "lasttarget");
        }

        return null;
    }

    dynamic HasPublicNote(dynamic serial, dynamic phrase)
    {
        if (!(Truth(UO.Exists(serial))))
        {
            return false;
        }

        return FindText(UO.GetProfile(serial), phrase) > 0;
    }

    bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
    int FindText(object? text, object? value) => (Convert.ToString(text) ?? "").IndexOf(Convert.ToString(value) ?? "", StringComparison.Ordinal) + 1;
    int FindText(int start, object? text, object? value)
    {
        string input = Convert.ToString(text) ?? "";
        return input.IndexOf(Convert.ToString(value) ?? "", Math.Clamp(start - 1, 0, input.Length), StringComparison.Ordinal) + 1;
    }
}

命令實作

C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。

UO.GetProfile(serial) — UO.GetProfile(Any)

參數: serial (Any)

結果: string / String.

呼叫時:

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

public string GetProfile(InjectionValue serial) => bridge.GetProfile(GetObject(serial));

UO.LoadHotkeys

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

C# 簽章

void UO.LoadHotkeys();

載入已儲存的巨集和熱鍵。

參數

沒有參數。

傳回值

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

行為

  • LoadHotkeys 透過 Invoke 呼叫 _world.Macros.Load。當前巨集表被本機設定檔資料取代。
  • 僅修改或顯示指定的本機資料。該命令沒有伺服器確認。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。直接呼叫-直接腳本

參數與執行流程:

  • 載入已儲存的巨集和熱鍵。
UO.LoadHotkeys();

2。明確選項 - 腳本函數

參數與執行流程:

  • LoadHotkeys 透過 Invoke 呼叫 _world.Macros.Load。當前巨集表被本機設定檔資料取代。
return  RunScenario();
 object? RunScenario()
{
    UO.Print(UO.ProfileName());
    UO.LoadHotkeys();
    return null;
}

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

參數與執行流程:

  • 僅修改或顯示指定的本機資料。該命令沒有伺服器確認。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        UO.LoadHotkeys();
        UO.Print("Macros loaded");
        return null;
    }
}

命令實作

C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。

UO.LoadHotkeys() — UO.LoadHotkeys()

參數: 沒有參數。

結果: void / Unit.

呼叫時:

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

case "loadhotkeys": bridge.LoadHotkeys(); break;

UO.ProfileName

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

C# 簽章

dynamic UO.ProfileName();

讀取目前設定檔的名稱。

參數

沒有參數。

傳回值

string — 橋接欄位的文字。 ProfileName;如果沒有可用數據,則可能會出現空字串。這不是連接符號,也不是數字ID。

行為

  • ExecuteClientApiCompatibility 返回網橋。 ProfileName 不更改設定檔或伺服器選擇。
  • 讀取目前本地狀態。沒有軟體包、目標或自動更新;個別讀取可能會看到不同的狀態。

獨立的 C# 腳本

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

簡單範例

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

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

object? result = UO.ProfileName();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));

1。直接呼叫-直接腳本

參數與執行流程:

  • 讀取目前設定檔的名稱。
var value = UO.ProfileName();
UO.Print(value);

2。明確選項 - 腳本函數

參數與執行流程:

  • ExecuteClientApiCompatibility 返回網橋。 ProfileName 不更改設定檔或伺服器選擇。
return  RunScenario();
 object? RunScenario()
{
    var value = UO.ProfileName();
    if (Truth(Len(value) > 0))
    {
        UO.TextPrint(value);
    }

    return null;
}

int Len(object? value) => Convert.ToString(value)?.Length ?? 0;
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

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

參數與執行流程:

  • 讀取目前本地狀態。沒有軟體包、目標或自動更新;個別讀取可能會看到不同的狀態。
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.ProfileName();
        UO.Wait(500);
        var after = UO.ProfileName();
        UO.Print(before = after);
        return null;
    }
}

命令實作

C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。

UO.ProfileName() — UO.ProfileName()

參數: 沒有參數。

結果: dynamic / Any.

呼叫時:

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

case "profilename": return new InjectionValue(bridge.ProfileName);

UO.ProfileShardName

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

C# 簽章

dynamic UO.ProfileShardName();

讀取分片名稱。

參數

沒有參數。

傳回值

string — 橋接欄位的文字。 ShardName;如果沒有可用數據,則可能會出現空字串。這不是連接符號,也不是數字ID。

行為

  • ExecuteClientApiCompatibility 返回網橋。 ShardName 不更改設定檔或伺服器選擇。
  • 讀取目前本地狀態。沒有軟體包、目標或自動更新;個別讀取可能會看到不同的狀態。

獨立的 C# 腳本

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

簡單範例

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

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

object? result = UO.ProfileShardName();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));

1。直接呼叫-直接腳本

參數與執行流程:

  • 讀取分片名稱。
var value = UO.ProfileShardName();
UO.Print(value);

2。明確選項 - 腳本函數

參數與執行流程:

  • ExecuteClientApiCompatibility 返回網橋。 ShardName 不更改設定檔或伺服器選擇。
return  RunScenario();
 object? RunScenario()
{
    var value = UO.ProfileShardName();
    if (Truth(Len(value) > 0))
    {
        UO.TextPrint(value);
    }

    return null;
}

int Len(object? value) => Convert.ToString(value)?.Length ?? 0;
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

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

參數與執行流程:

  • 讀取目前本地狀態。沒有軟體包、目標或自動更新;個別讀取可能會看到不同的狀態。
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.ProfileShardName();
        UO.Wait(500);
        var after = UO.ProfileShardName();
        UO.Print(before = after);
        return null;
    }
}

命令實作

C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。

UO.ProfileShardName() — UO.ProfileShardName()

參數: 沒有參數。

結果: dynamic / Any.

呼叫時:

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

case "shardname":

                case "profileshardname": return new InjectionValue(bridge.ShardName);

UO.ReqProfile

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

C# 簽章

void UO.ReqProfile();
void UO.ReqProfile(object? mobile);

列印角色的已知個人資料文字。

參數

  • mobile - 可選serial/別名。沒有參數 - “lasttarget”。這不是本地設定設定檔ClassicUO。

傳回值

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

行為

  • ExecuteLegacyManualAlias 呼叫GetProfile,然後呼叫SystemMessage。 Bridge.GetProfile 發送 RequestProfile,然後最多 3 秒檢查 CharacterPanels.Profile.CurrentText,並暫停 25 毫秒。已經存在的文字可以立即返回;超時後,它會顯示一條訊息並給出一個空白行。此命令列印文字但不返回它。
  • 對於 string 的值,請使用 UO.GetProfile。文字的存在並不能證明成功重命名或角色狀態。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。直接呼叫-直接腳本

參數與執行流程:

  • 列印角色的已知個人資料文字。
UO.ReqProfile();

2。明確選項 - 腳本函數

參數與執行流程:

  • ExecuteLegacyManualAlias 呼叫GetProfile,然後呼叫SystemMessage。 Bridge.GetProfile 發送 RequestProfile,然後最多 3 秒檢查 CharacterPanels.Profile.CurrentText,並暫停 25 毫秒。已經存在的文字可以立即返回;超時後,它會顯示一條訊息並給出一個空白行。此命令列印文字但不返回它。
return  RunScenario();
 object? RunScenario()
{
    UO.ReqProfile("self");
    return null;
}

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

參數與執行流程:

  • 對於 string 的值,請使用 UO.GetProfile。文字的存在並不能證明成功重命名或角色狀態。
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.ReqProfile(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.ReqProfile() — UO.ReqProfile()

參數: 沒有參數。

結果: void / Unit.

呼叫時:

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

case "reqprofile":

                    SystemMessage(GetProfile(arguments.Length > 0 ? arguments[0] : new InjectionValue("lasttarget")));

                    break;

UO.ReqProfile(mobile) — UO.ReqProfile(Any)

參數: mobile (Any)

結果: void / Unit.

呼叫時:

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

case "reqprofile":

                    SystemMessage(GetProfile(arguments.Length > 0 ? arguments[0] : new InjectionValue("lasttarget")));

                    break;

UO.ResetProfile

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

C# 簽章

void UO.ResetProfile();

將活動設定檔重設為預設值。

參數

沒有參數。

傳回值

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

行為

  • ResetProfile 原因 ProfileManager.ResetCurrentProfileToDefault;如果沒有活動的設定文件,則會顯示錯誤。更改本地設置,因此保存的用戶值可能會遺失。
  • 僅修改或顯示指定的本機資料。該命令沒有伺服器確認。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。直接呼叫-直接腳本

參數與執行流程:

  • 將活動設定檔重設為預設值。
UO.ResetProfile();

2。明確選項 - 腳本函數

參數與執行流程:

  • ResetProfile 原因 ProfileManager.ResetCurrentProfileToDefault;如果沒有活動的設定文件,則會顯示錯誤。更改本地設置,因此保存的用戶值可能會遺失。
return  RunScenario();
 object? RunScenario()
{
    UO.Print(UO.ProfileName());
    UO.ResetProfile();
    return null;
}

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

參數與執行流程:

  • 僅修改或顯示指定的本機資料。該命令沒有伺服器確認。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        UO.ResetProfile();
        UO.SaveConfig();
        return null;
    }
}

命令實作

C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。

UO.ResetProfile() — UO.ResetProfile()

參數: 沒有參數。

結果: void / Unit.

呼叫時:

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

case "resetprofile": bridge.ResetProfile(); break;

UO.SaveConfig

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

C# 簽章

void UO.SaveConfig();

儲存目前的 ClassicUO 設定檔。

參數

沒有參數。

傳回值

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

行為

  • SaveConfig 透過 Invoke 呼叫 ProfileManager.SaveCurrentProfile。此指令寫入本機設定檔設定;該路徑取自ProfileManager。
  • 僅修改或顯示指定的本機資料。該命令沒有伺服器確認。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。直接呼叫-直接腳本

參數與執行流程:

  • 儲存目前的 ClassicUO 設定檔。
UO.SaveConfig();

2。明確選項 - 腳本函數

參數與執行流程:

  • SaveConfig 透過 Invoke 呼叫 ProfileManager.SaveCurrentProfile。此指令寫入本機設定檔設定;該路徑取自ProfileManager。
return  RunScenario();
 object? RunScenario()
{
    UO.Print(UO.ProfileName());
    UO.SaveConfig();
    return null;
}

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

參數與執行流程:

  • 僅修改或顯示指定的本機資料。該命令沒有伺服器確認。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        UO.SaveConfig();
        UO.Print(UO.ShardPath());
        return null;
    }
}

命令實作

C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。

UO.SaveConfig() — UO.SaveConfig()

參數: 沒有參數。

結果: void / Unit.

呼叫時:

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

public void SaveConfig() => bridge.SaveConfig();

UO.SaveHotkeys

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

C# 簽章

void UO.SaveHotkeys();

保存巨集和熱鍵。

參數

沒有參數。

傳回值

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

行為

  • SaveHotkeys 透過 Invoke 呼叫 _world.Macros.Save。儲存目前設定檔的本機巨集表。
  • 僅修改或顯示指定的本機資料。該命令沒有伺服器確認。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。直接呼叫-直接腳本

參數與執行流程:

  • 保存巨集和熱鍵。
UO.SaveHotkeys();

2。明確選項 - 腳本函數

參數與執行流程:

  • SaveHotkeys 透過 Invoke 呼叫 _world.Macros.Save。儲存目前設定檔的本機巨集表。
return  RunScenario();
 object? RunScenario()
{
    UO.Print(UO.ProfileName());
    UO.SaveHotkeys();
    return null;
}

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

參數與執行流程:

  • 僅修改或顯示指定的本機資料。該命令沒有伺服器確認。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        UO.SaveHotkeys();
        UO.LoadHotkeys();
        return null;
    }
}

命令實作

C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。

UO.SaveHotkeys() — UO.SaveHotkeys()

參數: 沒有參數。

結果: void / Unit.

呼叫時:

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

case "savehotkeys": bridge.SaveHotkeys(); break;

UO.Set

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

C# 簽章

void UO.Set(object? name, object? value);

更改三個舊設定之一。

參數

  • name — 不區分大小寫的字串:「finddistance」、「grabdelay」或「equipfordress」。未知的名字被默默無視。
  • value - int 或 double/0x-文本。对于字符串形式TryStr2Int;不正确的文本变成0,而不是错误。

傳回值

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

行為

  • finddistance調用bridge。 SetFindDistance,grabdelay呼叫bridge。 SetGrabDelay,equipfordress分配狀態。 UseEquipForDress。這是三個獨立的設定;對於任意屬性,沒有通用的設定器。
  • 字串值先轉換為TryStr2Int,並使用fallback=0。因此,拼字錯誤可能會將0寫入識別的設定中。 Set本人不找東西,也不換衣服。

獨立的 C# 腳本

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

簡單範例

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

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

UO.Print("Calling UO.Set");
UO.Set("finddistance", 10);

1。直接呼叫-直接腳本

參數與執行流程:

  • 更改三個舊設定之一。
UO.Set("finddistance", 10);

2。明確選項 - 腳本函數

參數與執行流程:

  • finddistance調用bridge。 SetFindDistance,grabdelay呼叫bridge。 SetGrabDelay,equipfordress分配狀態。 UseEquipForDress。這是三個獨立的設定;對於任意屬性,沒有通用的設定器。
return  RunScenario();
 object? RunScenario()
{
    UO.Set("grabdelay", "250");
    return null;
}

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

參數與執行流程:

  • 字串值先轉換為TryStr2Int,並使用fallback=0。因此,拼字錯誤可能會將0寫入識別的設定中。 Set本人不找東西,也不換衣服。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        UO.Set("equipfordress", 1);
        UO.Print(UO.FindDistance());
        return null;
    }
}

命令實作

C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。

UO.Set(name, value) — UO.Set(String,Integer)

參數: name (String), value (Integer/String)

結果: void / Unit.

呼叫時:

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

public void Set(string name, int value)

        {

            if (name.Equals("finddistance", StringComparison.OrdinalIgnoreCase))

            {

                bridge.SetFindDistance(value);

            }

            else if (name.Equals("grabdelay", StringComparison.OrdinalIgnoreCase))

            {

                bridge.SetGrabDelay(value);

            }

            else if (name.Equals("equipfordress", StringComparison.OrdinalIgnoreCase))

            {

                state.UseEquipForDress = value;

            }

        }

UO.Set(name, value) — UO.Set(String,String)

參數: name (String), value (Integer/String)

結果: void / Unit.

呼叫時:

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

public void Set(string name, string valueStr)

        {

            int valueInt = NumberConversions.TryStr2Int(valueStr, out var value) ? value : 0;

            Set(name, valueInt);

        }

UO.SetDefault

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

C# 簽章

void UO.SetDefault(object? name, object? @object);

在運行時狀態儲存命名別名serial。

參數

  • name — 將別名命名為文本,大小寫處理物件字典。
  • object — 透過 Arg/GetObject 的串列/別名。名稱和 serial 按此順序排列。

傳回值

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

行為

  • ExecuteLegacyManualAlias 呼叫 state.Objects.Set(Text(0),Arg(1))。沒有互動選擇; serial的存在尚未被驗證。
  • 這是記錄物件名稱,而不是重置設定檔或將所有設定更改為預設值。在後續呼叫中,別名將再次解析。
  • 在常規用戶端主機中,此狀態資料取自GetPersistentState管理器,並且對於同一世界/設定檔的腳本/聊天/巨集是通用的,且不屬於一個腳本。另一個進程或明顯獨立的InjectionRuntimeState具有不同的狀態。載入/清除設定檔可以取代它;已儲存的serial仍然會根據載入的世界進行檢查。

獨立的 C# 腳本

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

簡單範例

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

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

UO.Print("Calling UO.SetDefault");
UO.SetDefault("manualObject", UO.Self());

1。直接呼叫-直接腳本

參數與執行流程:

  • 在運行時狀態儲存命名別名serial。
UO.SetDefault("manualObject", UO.Self());

2。明確選項 - 腳本函數

參數與執行流程:

  • ExecuteLegacyManualAlias 呼叫 state.Objects.Set(Text(0),Arg(1))。沒有互動選擇; serial的存在尚未被驗證。
return  RunScenario();
 object? RunScenario()
{
    UO.SetDefault("manualBag", UO.Backpack());
    UO.Print(UO.GetSerial("manualBag"));
    return null;
}

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

參數與執行流程:

  • 這是記錄物件名稱,而不是重置設定檔或將所有設定更改為預設值。在後續呼叫中,別名將再次解析。
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.SetDefault("manualTarget", id);
            UO.Print(UO.GetName("manualTarget"));
        }

        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.SetDefault(name, object) — UO.SetDefault(Any,Any)

參數: name (Any), object (Any)

結果: void / Unit.

呼叫時:

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

case "setdefault":

                    if (arguments.Length > 1) state.Objects.Set(Text(0), Arg(1));

                    break;

UO.SetEasyUO

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

C# 簽章

void UO.SetEasyUO(object? number, object? value);

將字串值寫入 Windows 登錄檔 EasyUO。

參數

  • number — int 值編號,格式為double,不含 * 字首。
  • value — 透過 ToString 發送文字;儲存為已傳送。

傳回值

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

行為

  • 在 Windows 上,開啟/建立具有寫入權限的 HKCU\Software\EasyUO,SetValue(decimalNumber,value,RegistryValueKind.string)。在其他作業系統上,它會顯示一則訊息但不會記錄它。
  • 這是目前使用者註冊表中的外部永久條目,不是作用域全域運行時,也不是遊戲serial。此功能不會隱藏註冊表存取錯誤。

獨立的 C# 腳本

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

簡單範例

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

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

UO.Print("Calling UO.SetEasyUO");
UO.SetEasyUO(9001, "manual-example");

1。直接呼叫-直接腳本

參數與執行流程:

  • 將字串值寫入 Windows 登錄檔 EasyUO。
UO.SetEasyUO(9001, "manual-example");

2。明確選項 - 腳本函數

參數與執行流程:

  • 在 Windows 上,開啟/建立具有寫入權限的 HKCU\Software\EasyUO,SetValue(decimalNumber,value,RegistryValueKind.String)。在其他作業系統上,它會顯示一則訊息但不會記錄它。
return  RunScenario();
 object? RunScenario()
{
    UO.SetEasyUO(9001, "");
    return null;
}

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

參數與執行流程:

  • 這是目前使用者註冊表中的外部永久條目,不是作用域全域運行時,也不是遊戲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()
    {
        UO.SetEasyUO(9001, "manual-example");
        UO.Print(UO.GetEasyUO(9001));
        return null;
    }
}

命令實作

C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。

UO.SetEasyUO(number, value) — UO.SetEasyUO(Any,Any)

參數: number (Any), value (Any)

結果: void / Unit.

呼叫時:

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

public void SetEasyUO(InjectionValue number, InjectionValue value)

            => bridge.SetEasyUO(NumberConversions.ToInt(number), value.ToString());

UO.SetGlobal

C# 簽章

void UO.SetGlobal(object? name, object? value);
void UO.SetGlobal(object? globalRegion, object? varName, object? varValue);

行為與結果

SetGlobal 與 GetGlobal 在所有腳本、設定檔及 Full Client/Client 處理程序之間共用。值為字串;不存在的鍵回傳 "N/A",鍵區分大小寫;region 形式使用 region/name。Manager/Game Manager/CSharp/globals.json 持久保存,並在跨程序鎖定下重新讀取。Shared 形式使用同一儲存區。

參數

  • globalRegion — 與鍵名組合的命名空間。
  • name — 區分大小寫的共用鍵名。
  • value — 以文字儲存的值。
  • varName — 區分大小寫的共用鍵名。
  • varValue — 以文字儲存的值。

每個程式碼區塊都是完整的獨立 .csx。請替換範例 serial、type 與座標;參數順序及 C# 具名參數依照簽章。

聊天指令

#setglobal team.target 0x40001234
#set global team.message Привіт усім

完整 C# 範例

每個程式碼區塊都是完整的獨立 .csx。請替換範例 serial、type 與座標;參數順序及 C# 具名參數依照簽章。

1

UO.SetGlobal("team.target", 0x40001234);
UO.Print(UO.GetGlobal("team.target"));

2

UO.SetGlobal("team.message", "Привіт");
UO.Print(UO.GetGlobal("team.message"));

3

UO.SetGlobal("team", "delay", "350");
UO.Print(Convert.ToString(UO.GetGlobal("team", "delay")));

4

new CommandSample().Execute(UO);

sealed class CommandSample
{
    public void Execute(global::ClassicUO.CSharp.CSharpGameApi api)
    {
        api.SetGlobal("team.target", 0x40001234);
        api.Print(api.GetGlobal("team.target"));
    }
}

內部呼叫

CSharpGameApi.SetGlobal
  -> CSharpScriptGlobals
  -> InjectionScript.Runtime.InjectionApiUO.RegisterClientApiCompatibility
  -> InjectionScript.Runtime.State.Globals.SetGlobal
Globals -> SharedGlobalStore -> named mutex -> atomic JSON replacement


UO.SetMulPath

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

C# 簽章

void UO.SetMulPath(object? pathValue);

在運行時保存路徑字串mulPath。

參數

  • pathValue — 透過 ToString 發送文字;儲存為已傳送。

傳回值

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

行為

  • 分配 mulPath = ToString 或空字串。該函數不會開啟文件,不會重新載入地圖數據,也不會檢查路徑可用性。
  • 這是目前運行時的兼容性儲存。項目私有mulPath/showZ沒有消費者;該更改不會重新載入資源或更改高度顯示。

獨立的 C# 腳本

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

簡單範例

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

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

UO.Print("Calling UO.SetMulPath");
UO.SetMulPath("C:\\Ultima Online");

1。直接呼叫-直接腳本

參數與執行流程:

  • 在運行時保存路徑字串mulPath。
UO.SetMulPath("C:\\Ultima Online");

2。明確選項 - 腳本函數

參數與執行流程:

  • 分配 mulPath = ToString 或空字串。該函數不會開啟文件,不會重新載入地圖數據,也不會檢查路徑可用性。
return  RunScenario();
 object? RunScenario()
{
    UO.SetMulPath("");
    return null;
}

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

參數與執行流程:

  • 這是目前運行時的兼容性儲存。項目私有mulPath/showZ沒有消費者;該更改不會重新載入資源或更改高度顯示。
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()
    {
        ApplyValue("C:\\Ultima Online");
        return null;
    }

    void ApplyValue(dynamic value)
    {
        UO.SetMulPath(value);
    }
}

命令實作

C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。

UO.SetMulPath(pathValue) — UO.SetMulPath(Any)

參數: pathValue (Any)

結果: void / Unit.

呼叫時:

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

public void SetMulPath(InjectionValue pathValue) => mulPath = pathValue.ToString() ?? string.Empty;
⚠️ **GitHub.com Fallback** ⚠️