ZH TW UO Topic character Part 2 - LIHACHTETAN/ClassicUO-Bad-Newbie-CSharp-Scripts-IDE GitHub Wiki

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

特點 — 2

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

參考章節

1 · 2 · 3 · 4 · 5

完整指令說明


UO.GetEquipment

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

C# 簽章

dynamic UO.GetEquipment(object? id);

讀取非零物件層上的設備清單。

參數

  • id — Serial/ID 具體對象: int、十進制/十六進位字串或已建立的別名 self, backpack, lasttarget, lastobject 或姓名 AddObject。這不是 graphic/type。條款 my/backpack 選擇背包。僅明確 0, "0“ 或者 ”ground「選擇土地。別名未知,背包遺失,負面 ID 或不適當的值類型會導致空數組。

傳回值

Array - Container 為 ID 且 Layer 不等於 Invalid 的每個項目的 serial。對於ground/0,傳回一個空數組。如果沒有條目,則傳回空數組。此清單包含 ID,不包含 type,且沒有圖層。

行為

  • 讀取客戶端已經下載的資料。該命令不會開啟容器、移動項目或從整個伺服器下載物件。
  • 陣列 - 索引從 0 開始的陣列。保存在var,訪問前檢查ArrayLength。拍攝快照後,元素可能會從世界中消失:在採取行動之前檢查Exists(serial)。
  • 沒有嵌套袋的遞歸遍歷、距離排序、Ignore或FindDistance/FindVertical過濾器。常規的FindType快照保持不變。
  • GetEquipment(self) 包括背包和其他已知的非零層;僅僅一層的事實並不意味著穿戴了武器或盔甲。 GetContent(self) 可以包含裝備,因為它的父級是角色。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。取得清單大小 - 直接腳本

參數與執行流程:

  • ID="self" - 當前角色,選擇他的非零層的直接項目。
  • 長度 - 記錄數/ID。這不是堆疊中的金額數量。空列表給出0。
var items = UO.GetEquipment("self");
UO.Print(Convert.ToString(ArrayLength(items)));

int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;

2。遍歷所有找到的ID——腳本函數

參數與執行流程:

  • ID="self" - 當前角色,選擇他的非零層的直接項目。
  • items[i] — 數字 serial。十六進制僅用於輸出。循環不存取最後一個索引。
return  RunScenario();
 object? RunScenario()
{
    var items = UO.GetEquipment("self");
    var i = 0;
    while (Truth(i < ArrayLength(items)))
    {
        UO.Print("0x" + Hex(items[i]));
        i = i + 1;
    }

    return null;
}

int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;
string Hex(object? value) => Convert.ToInt64(value).ToString("X");
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

3。讀取前檢查第一筆記錄 - 腳本類

參數與執行流程:

  • ID="self" - 當前角色,選擇他的非零層的直接項目。
  • 檢查兩個不同的事情:快照中的記錄和物件現在是否存在。沒有明確排序的順序並不意味著接近。
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 items = UO.GetEquipment("self");
        if (Truth(ArrayLength(items) > 0))
        {
            var first = items[0];
            if (Truth(UO.Exists(first)))
            {
                UO.Print(UO.GetName(first));
            }
        }
        else
        {
            UO.Print("Empty list");
        }

        return null;
    }

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

命令實作

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

UO.GetEquipment(id) — UO.GetEquipment(Any)

參數: id (Any)

結果: dynamic / Any.

呼叫時:

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

case "getcontent":

                case "getequipment":

                {

                    InjectionValue selection = arguments[0];

                    bool ground = false, explicitZero;

                    int container;

                    if (selection.Kind == InjectionValueKind.String)

                    {

                        string text = Text(0).Trim();

                        ground = text.Equals("ground", StringComparison.OrdinalIgnoreCase);

                        explicitZero = NumberConversions.TryStr2Int(text, out int literal) && literal == 0;

                        container = ground ? 0 : text.Equals("my", StringComparison.OrdinalIgnoreCase)

                            ? bridge.Backpack : GetObject(text);

                    }

                    else

                    {

                        if (selection.Kind != InjectionValueKind.Integer && selection.Kind != InjectionValueKind.Decimal)

                            return new InjectionValue(Array.Empty<InjectionValue>());

                        container = Arg(0);

                        explicitZero = selection.Kind == InjectionValueKind.Integer ? selection.Integer == 0 : selection.Decimal == 0d;

                    }

                    // Only an explicit ground/zero selector may query world items.

                    if (container < 0 || container == 0 && !ground && !explicitZero)

                        return new InjectionValue(Array.Empty<InjectionValue>());

                    bool equipment = name.Equals("GetEquipment", StringComparison.OrdinalIgnoreCase);

                    int[] items = equipment

                        ? container == 0 ? Array.Empty<int>() : bridge.GetEquipment(container)

                        : bridge.GetContent(container);

                    return new InjectionValue(items.Select(serial => new InjectionValue(serial)).ToArray());

                }

UO.GetFireResist

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

C# 簽章

int UO.GetFireResist();

讀取目前角色的抵抗力場:火。

參數

沒有參數。

傳回值

int 是簽章狀態值,客戶端模型中的 -32768..32767。負值被保留。 0可以是真正的抵抗,缺乏數據或失踪/被毀壞的玩家;對於未知選擇器,GetResist 還給出 0。這不是bool、ID、技能或阻力極限。 1表示一分,不是成功。

行為

  • 此指令不帶參數。使用上面的確切簽名。
  • 如果目前Player存在且尚未被銷毀,則在遊戲執行緒上讀取需要Player.FireResistance;否則0。設備不排序,獎金不重新計算,狀態不要求,並且沒有等待更新。存在的鬼魂不等於被摧毀的玩家。
  • 元素場有擴展 CharacterStatus (0x11)、type >= 4。該命令本身不檢查伺服器紀元。沒有這些欄位的 Compact/old 狀態會離開先前的快取;新玩家原本是0。抗毒不是Poisoned標誌;這也不是抵抗法術的技能。
  • CharacterStatus在更改名字、健康狀況和自身特徵之前檢查所需的身體,然後將每個抵抗詞翻譯成帶符號的Int16。修剪後的強制主體不會改變先前的資料。可選尾部type6保留相同的規則;電阻指令不會從中讀取最大限制。
  • 每次呼叫都會重新讀取本地資料。變數儲存快照;各個讀取可能會收到不同的伺服器更新。非零結果不會測試連線。零可以是一個值,也可以沒有資料。
  • 這些函式負責註冊 API,不會在每次命令呼叫時重新執行。 C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。列印已儲存的值 - 直接腳本

參數與執行流程:

  • value 儲存一次呼叫的結果。 Convert.ToString 格式化日誌的數字。沒有任何爭論:你可以讀懂自己的個性。
var value = UO.GetFireResist();
UO.Print("FireResistance: " + Convert.ToString(value));

2。比較兩個圖像 - 腳本函數

參數與執行流程:

  • 前後有UO.Wait(500)毫秒;差異可以是負數。可能會錯過臨時更新。暫停指的是範例,而不是延遲API。
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var before = UO.GetFireResist();
    await Delay(500);
    var after = UO.GetFireResist();
    var difference = after - before;
    UO.Print("Resistance change: " + Convert.ToString(difference));
    return null;
}

Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));

3。完整的最小電阻測試功能-腳本類

參數與執行流程:

  • 最小值 =50 是要求的範例,而不是客戶端限制。 ResistanceAtLeast 拒絕遺失的玩家,讀取一個值並回傳 bool: true 或 false 如果值 >= 最小值。电阻本身不是bool。該函數的完整聲明如下。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        if (Truth(Truth(ResistanceAtLeast(50)) == true))
        {
            UO.Print("Local resistance requirement met");
        }
        else
        {
            UO.Print("Requirement not met or no player");
        }

        return null;
    }

    dynamic ResistanceAtLeast(dynamic minimum)
    {
        if (Truth(UO.Self() == 0))
        {
            return false;
        }

        var value = UO.GetFireResist();
        return value >= minimum;
    }

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

命令實作

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

UO.GetFireResist() — UO.GetFireResist()

參數: 沒有參數。

結果: int / Integer.

呼叫時:

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

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

() => bridge.FireResistance

建立 API: 這些函式負責註冊 API,不會在每次命令呼叫時重新執行。


UO.GetFlying

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

C# 簽章

int UO.GetFlying();
int UO.GetFlying(object? value);

檢查角色當前是否正在飛行。 Gargoyle 通常需要這樣做:例如,在開始航線之前或要求啟用航班之前。回答「我的角色現在在飛嗎?」的問題沒有爭論。此命令僅讀取狀態:它不會啟用角色飛行、著陸或移動。

參數

  • value - 可選的 serial 字元:數字、十六進位字串、self、lasttarget 或透過 UO.AddObject 儲存的名稱。不用爭論,你的個性就會被使用。這是特定mobile的ID,而不是graphic/type,也不是Z的座標。未知名稱、遺失/刪除 mobile 或物品給出 0。

傳回值

數字標誌int:1(滿足條件),0(不滿足條件)。這是一個數字標誌:在 C# 中檢查結果 != 0 或結果 == 0。 int 與 true/false 和 if(結果)的直接比較是不允許的。 1 - mobile 有 IsFlying,0 沒有標誌或 mobile 缺失。海拔Z本身並不意味著飛行。

該命令的結果是一個數字標誌: 1 表示滿足條件, 0 - 未實現。後 var 結果=命令(...)檢查是否(結果!= 0) 或 if (結果 == 0)。儲存一次呼叫的結果:重複呼叫可以再次執行該操作或讀取已經變更的狀態。

行為

  • 主要的遊戲應用是石像鬼的飛行。但是,getter 不會檢查競爭:在此客戶端中,它使用協定版本 7.0.0.0 及更高版本從 mobile 讀取 0x04 位元。在舊協議上它返回0。站在屋頂上、高Z、翅膀動畫或石像鬼競賽本身都無法證明飛行。
  • 有一個單獨的UO.ToggleFly()用於更改狀態:它發送切換請求而不是“打開”命令。如果您已經在飛行中,重複呼叫會要求著陸。伺服器可能發生故障;出現提示後,在有限的等待時間內再次閱讀Flying。 false 在沒有可用角色/數據的情況下也是可能的,所以在玩遊戲之前檢查Connected。
  • 讀取本機模型:不開啟目標、不要求狀態、不更改標誌、不發送資料包。即使在從字典中刪除條目之前,被破壞的物件也被視為遺失。
  • 結果是單獨閱讀。从Exists到下一个挑战,世界可能会发生变化;多个查询不形成原子快照。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。在下一個腳本步驟之前檢查模式 - 直接腳本

參數與執行流程:

  • 空括號表示self。 true等於1,false等於0;如果 UO.Flying() { ... } 是可以接受的。這個例子沒有改變任何東西。
var active = UO.GetFlying();
if (Truth(Truth(active) == true))
{
    UO.Print("Flying mode active");
}
else
{
    UO.Print("Ground mode or character data unavailable");
}

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

2。檢查先前選擇的字元 - 腳本功能

參數與執行流程:

  • ReadState(obj) 採用 serial/別名並傳回狀態。完整的定義如下;在讀取之前處理物件不存在的情況。也會根據客戶端已收到的資料檢查其他人的性格。
return  RunScenario();
 object? RunScenario()
{
    var target = Asc(UO.GetSerial("lasttarget"), 0);
    if (Truth(target != 0) && Truth(UO.Exists(target)))
    {
        if (Truth(ReadState(target)))
        {
            UO.AddObject("flying_mobile", target);
        }
    }

    return null;
}

dynamic ReadState(dynamic obj)
{
    if (!(Truth(UO.Exists(obj))))
    {
        return false;
    }

    return UO.GetFlying(obj);
}

int Asc(object? value, int fallback = 0)
{
    string text = Convert.ToString(value) ?? "";
    if (text.StartsWith("0x", StringComparison.OrdinalIgnoreCase))
        return int.TryParse(text[2..], System.Globalization.NumberStyles.HexNumber, System.Globalization.CultureInfo.InvariantCulture, out int hex) ? hex : fallback;
    return int.TryParse(text, out int number) ? number : fallback;
}

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

3。請求一次航班並等待結果-場景類

參數與執行流程:

  • 此範例適用於支援飛行的伺服器上的 Gargoyle。如果觀察到飛行,則EnsureFlight(timeoutMs) ​​回傳1/true,否則回傳0/false。 2000 — 等待限制(以毫秒為單位);每 50 毫秒檢查一次。如果您已經在飛行,則不會呼叫 ToggleFly。最多發送一個請求,然後檢查回應狀態。腳本暫停/調度程序延遲可以增加即時性。
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

    async public Task<object?> RunScenarioAsync()
    {
        if (Truth(await EnsureFlight(2000)))
        {
            UO.Print("Flight confirmed; ready for the next stage");
        }
        else
        {
            UO.Print("Flight not confirmed; route was not started");
        }

        return null;
    }

    async Task<dynamic> EnsureFlight(dynamic timeoutMs)
    {
        if (!(Truth(UO.Connected())) || Truth(UO.Dead()))
        {
            return false;
        }

        if (Truth(UO.GetFlying()))
        {
            return true;
        }

        UO.ToggleFly();
        var waited = 0;
        while (Truth(waited < timeoutMs))
        {
            if (!(Truth(UO.Connected())))
            {
                return false;
            }

            if (Truth(UO.GetFlying()))
            {
                return true;
            }

            await Delay(50);
            waited += 50;
        }

        return UO.GetFlying();
    }

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

參數: 沒有參數。

結果: int / Integer.

呼叫時:

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

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

serial => bridge.Flying(serial)

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

() => getter(bridge.Self)

建立 API: 這些函式負責註冊 API,不會在每次命令呼叫時重新執行。

UO.GetFlying(value) — UO.GetFlying(Any)

參數: value (Any)

結果: int / Integer.

呼叫時:

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

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

serial => bridge.Flying(serial)

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

value => getter(GetObject(value))

建立 API: 這些函式負責註冊 API,不會在每次命令呼叫時重新執行。


UO.GetFrozen

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

C# 簽章

int UO.GetFrozen();
int UO.GetFrozen(object? value);

檢查客戶端已知的角色麻痺標誌。

參數

  • value - 可選 serial/ID mobile:數字、十六進位字串、self、lasttarget 或其他標準物件名稱或 AddObject 名稱。這不是graphic/type。如果沒有參數,則使用 self。未知名稱在0中解析;目標未開啟。

傳回值

數字標誌int:1(滿足條件)-加載mobile具有標誌IsParalyzed;0(不滿足條件)- 無標誌、mobile 未知、已刪除或該物件為項目。這不是癱瘓時間,並且不保證能夠以0的結果移動。

行為

  • 使用 Paralyzed 檢查癱瘓標誌。變體 Is/Get、GetParalisa、Frozen 和 GetLocked 讀取相同的標誌。
  • 該命令僅讀取本地資料。它不會應用或消除癱瘓,不會等待其結束,也不會向伺服器發送更新請求。
  • 此指令的結果是int型別:使用 if (value != 0) 或 if (value == 0)。不允許與true/false以及C#中的if(值)直接比較。該值保留標誌的含義,而不是數量或ID。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。透過 true 測試自己 - 直接腳本

參數與執行流程:

  • 空括號選擇 self。 state 儲存標誌的一個快照; true — 數值常數 1。
  • false 的結果並不排除因牆壁、缺乏耐力或其他原因而停止。
var state = UO.GetFrozen();
if (Truth(Truth(state) == true))
{
    UO.Print("Paralysis flag is set");
}
else
{
    UO.Print("Paralysis flag is absent or unavailable");
}

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

2。檢查選定的mobile - 腳本功能

參數與執行流程:

  • target 儲存最後一個目標的十六進位字串serial。 IsNpc 檢查是否是已載入的mobile,包括玩家。
  • 帶參數的命令讀取目標。她沒有選擇新角色或改變lasttarget。
return  RunScenario();
 object? RunScenario()
{
    var target = UO.GetSerial("lasttarget");
    if (Truth(UO.IsNPC(target)))
    {
        var state = UO.GetFrozen(target);
        UO.Print("Selected mobile paralysis 1/0: " + Convert.ToString(state));
    }
    else
    {
        UO.Print("No loaded mobile selected");
    }

    return null;
}

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

3。有限等待消除麻痹 - 场景类

參數與執行流程:

  • 暫停時間不超過 10 100 毫秒。每次不帶參數的呼叫都會再次讀取 self 。
  • 循環之後,單獨檢查 self 是否存在。這是大約一秒鐘的觀察加上命令的執行,並不能保證消除癱瘓。
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

    async public Task<object?> RunScenarioAsync()
    {
        var attempts = 0;
        while (Truth(Truth(UO.GetFrozen()) == true) && Truth(attempts < 10))
        {
            await Delay(100);
            attempts = attempts + 1;
        }

        if (Truth(UO.IsNPC("self")))
        {
            if (Truth(Truth(UO.GetFrozen()) == false))
            {
                UO.Print("Paralysis flag is clear");
            }
            else
            {
                UO.Print("Still paralyzed");
            }
        }
        else
        {
            UO.Print("Self is unavailable");
        }

        return null;
    }

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

命令實作

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

UO.GetFrozen() — UO.GetFrozen()

參數: 沒有參數。

結果: int / Integer.

呼叫時:

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

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

serial => bridge.GetLocked(serial)

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

() => getter(bridge.Self)

建立 API: 這些函式負責註冊 API,不會在每次命令呼叫時重新執行。

UO.GetFrozen(value) — UO.GetFrozen(Any)

參數: value (Any)

結果: int / Integer.

呼叫時:

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

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

serial => bridge.GetLocked(serial)

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

value => getter(GetObject(value))

建立 API: 這些函式負責註冊 API,不會在每次命令呼叫時重新執行。


UO.GetGold

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

C# 簽章

dynamic UO.GetGold();

從目前角色的狀態讀取金幣數量。

參數

沒有參數。

傳回值

int/double 是非負和0..4294967295。返回並包含2147483647int,高於double(Double),精確表示任何32位無符號整數。 0 也表示目前沒有未刪除的玩家或收到的金額。這不是bool、ID、堆疊數量或背包/銀行旁路。

行為

  • 沒有參數。從 CharacterStatus (0x11) ​​讀取 Player.Gold 快取。伺服器決定其計數器中包含哪些金幣;該團隊不會檢查袋子或索取銀行餘額。沒有/被摧毀的玩家 - 0;幽靈存在可以維持一定的狀態量。
  • ReadGoldValue 讀取橋接一次。 Gold。舊的C#橋保留Int32簽章並傳送UInt32位元。未经检查的转换恢复未签名的总和;少量变成int,大量变成double。最高有效位元不再使餘額變成負值。轉換是本地的,沒有包。
  • 每次呼叫都會重新讀取本地資料。變數儲存快照;各個讀取可能會收到不同的伺服器更新。非零結果不會測試連線。零可以是一個值,也可以沒有資料。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。提取收到的金額 - 直接腳本

參數與執行流程:

  • amount 儲存一個結果;轉換。 ToString 將其格式化為雜誌。黃金不會被尋找、攜帶或花費。
var amount = UO.GetGold();
UO.Print("Status gold: " + Convert.ToString(amount));

2。功能全CanAfford價格大-腳本功能

參數與執行流程:

  • Price=3000000000.0 是價格範例,而不是限制。 CanAfford(price) 拒絕負價格或沒有玩家,讀取一次金額並回傳 bool: true 或 false 如果金額 >= 價格。金额本身并不是bool。此函數的完整定義如下。
return  RunScenario();
 object? RunScenario()
{
    var price = 3000000000.0;
    if (Truth(Truth(CanAfford(price)) == true))
    {
        UO.Print("Local balance is sufficient");
    }
    else
    {
        UO.Print("Local check failed");
    }

    return null;
}

dynamic CanAfford(dynamic price)
{
    if (Truth(price < 0) || Truth(UO.Self() == 0))
    {
        return false;
    }

    var amount = UO.GetGold();
    return amount >= price;
}

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

3。觀察餘額變動 - 腳本類

參數與執行流程:

  • 之前/之后分隔 UO.Wait(500) 毫秒。當餘額減少時,difference=after-before 可以為負數;這不是固定的無符號計數器溢位。可能会错过临时更新和角色更改。
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

    async public Task<object?> RunScenarioAsync()
    {
        var before = UO.GetGold();
        await Delay(500);
        var after = UO.GetGold();
        var difference = after - before;
        UO.Print("Balance change: " + Convert.ToString(difference));
        return null;
    }

    Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
}

命令實作

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

UO.GetGold() — UO.GetGold()

參數: 沒有參數。

結果: dynamic / Any.

呼叫時:

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

private InjectionValue ReadGoldValue()

        {

            // The existing bridge carries all 32 unsigned status-counter bits in

            // an Int32. Keep small results Integer; Double exactly represents

            // every UInt32 and avoids returning a negative large gold amount.

            uint amount = unchecked((uint)bridge.Gold);

            return amount <= int.MaxValue ? new InjectionValue((int)amount)

                : new InjectionValue((double)amount);

        }

UO.GetHP

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

C# 簽章

int UO.GetHP();
int UO.GetHP(object? id);

從本機模型讀取目前的運行狀況。

參數

  • id — 所示形式的可選物件:serial 由數字/十六進位字串、self、lasttarget 或註冊名稱 AddObject。這不是type。没有争论,请阅读self。某些形式的未知文字會導致轉換錯誤;打電話前檢查名字。

傳回值

int 是「Hits」欄位的值,不是百分比,也不是bool。 0 可以是實值或缺失資料的指示。零最大值不能用作除數。對別人的mobile來說,其意義可能是未知的。 HP/HitsMax 可能包含相對伺服器比例而不是精確點。 HP=0並不能證明死亡;為此有Dead/IsDead。

行為

  • 該命令不會開啟狀態,也不會請求伺服器更新。客户端只读取已经加载的数据。不改变特性,也不发送数据包。
  • 結果是單獨閱讀。从Exists到下一个挑战,世界可能会发生变化;多个查询不形成原子快照。
  • 讀取物件時,World.Get 會拒絕缺少的或 IsDestroyed 並產生 0。 HP/HitsMax從實體中讀取,包括具有這些欄位的項目; Mana/Stamina - 僅適用於行動裝置。沒有爭論,請閱讀self。不帶參數的同名變體不一定有ID的變體:請參閱簽名。
  • 對於遺失或損壞的 Player,不帶參數的讀取也會回傳 0。這適用於直接 Mana/Stamina 及其最大值,而不僅僅是透過 World.Get 的表格。存在的死亡角色可以保留價值。

範例.csx

int hp = UO.GetHP();
UO.Print($"HP = {hp}");

獨立的 C# 腳本

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

簡單範例

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

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

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

1。列印你的角色的值 - 直接腳本

參數與執行流程:

  • 不帶參數的呼叫讀取為self。 value 儲存一個數字,Convert.ToString 僅將其轉換為訊息。
var value = UO.GetHP();
UO.Print("GetHP: " + Convert.ToString(value));

2。在檢查或計算中應用值 - 腳本函數

參數與執行流程:

  • 顯示該欄位應用的閾值或計算。條件中的數字是範例設置,而不是伺服器限制。在除以最大值之前,檢查其正值。
return  RunScenario();
 object? RunScenario()
{
    var value = UO.GetHP();
    var maximum = UO.GetMaxHP();
    if (Truth(maximum > 0) && Truth(value * 100 / maximum < 50))
    {
        UO.Print("Health below half of the known maximum");
    }

    return null;
}

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

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

參數與執行流程:

  • lasttarget — 先前選擇的物件; Exists 檢查可用性。 obj 是ReadValue 的唯一參數。此函數傳回命令編號不變,並且是完整給出的。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        if (Truth(UO.Exists("lasttarget")))
        {
            var value = ReadValue("lasttarget");
            UO.Print("Selected value: " + Convert.ToString(value));
        }

        return null;
    }

    dynamic ReadValue(dynamic obj)
    {
        return UO.GetHP(obj);
    }

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

命令實作

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

UO.GetHP() — UO.GetHP()

參數: 沒有參數。

結果: int / Integer.

呼叫時:

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

public int GetHP() => GetHP("self");

UO.GetHP(id) — UO.GetHP(Any)

參數: id (Any/Integer/String)

結果: int / Any.

呼叫時:

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

case "gethp": return new InjectionValue(bridge.GetHP(Arg(0, bridge.Self)));

UO.GetHP(id) — UO.GetHP(Integer)

參數: id (Any/Integer/String)

結果: int / Integer.

呼叫時:

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

public int GetHP(int id) => bridge.GetHP(id);

UO.GetHP(id) — UO.GetHP(String)

參數: id (Any/Integer/String)

結果: int / Integer.

呼叫時:

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

public int GetHP(string id) => GetHP(GetObject(id));

UO.GetHidden

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

C# 簽章

int UO.GetHidden();
int UO.GetHidden(object? value);

測試角色的隱身能力。

參數

  • value — 所示形式的可選物件:serial 由數字/十六進位字串、self、lasttarget 或註冊名稱 AddObject。這不是type。没有争论,请阅读self。某些形式的未知文字會導致轉換錯誤;打電話前檢查名字。

傳回值

數字標誌int:1(滿足條件),0(不滿足條件)。這是一個數字標誌:在 C# 中檢查結果 != 0 或結果 == 0。 int 與 true/false 和 if(結果)的直接比較是不允許的。 1 - mobile 有 IsHidden,0 沒有標誌或 mobile 缺失。這是一個伺服器標誌,而不是牆後的可見性。

該命令的結果是一個數字標誌: 1 表示滿足條件, 0 - 未實現。後 var 結果=命令(...)檢查是否(結果!= 0) 或 if (結果 == 0)。儲存一次呼叫的結果:重複呼叫可以再次執行該操作或讀取已經變更的狀態。

行為

  • 讀取本機模型:不開啟目標、不要求狀態、不更改標誌、不發送資料包。即使在從字典中刪除條目之前,被破壞的物件也被視為遺失。
  • 結果是單獨閱讀。从Exists到下一个挑战,世界可能会发生变化;多个查询不形成原子快照。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。檢查自己的狀態-直接腳本

參數與執行流程:

  • 空括號讀作self。 active 保存一次結果;true和 false定義了兩個分支。 Print 僅顯示範例訊息。
var active = UO.GetHidden();
if (Truth(Truth(active) == true))
{
    UO.Print("State is active");
}
else
{
    UO.Print("State is inactive or unavailable");
}

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

2。選定的物件和完整功能ReadState - 腳本功能

參數與執行流程:

  • lasttarget – 先前選擇的物件。 Exists 檢查其存在。 obj是唯一參數ReadState;此函數不加修改地傳回指令的結果。它的定義包含在複製的程式碼中。
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.Exists("lasttarget")))
    {
        var observed = ReadState("lasttarget");
        UO.Print("State 1/0: " + Convert.ToString(observed));
    }

    return null;
}

dynamic ReadState(dynamic obj)
{
    return UO.GetHidden(obj);
}

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

3。注意半秒的變化——腳本類

參數與執行流程:

  • 兩個不帶參數的呼叫讀取self,UO.Wait(500)設定500毫秒。比較兩個影像;可以跳過中間轉換。沒有無盡的等待。
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

    async public Task<object?> RunScenarioAsync()
    {
        var before = UO.GetHidden();
        await Delay(500);
        var after = UO.GetHidden();
        if (Truth(before != after))
        {
            UO.Print("State changed: " + Convert.ToString(before) + " -> " + Convert.ToString(after));
        }

        return null;
    }

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

命令實作

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

UO.GetHidden() — UO.GetHidden()

參數: 沒有參數。

結果: int / Integer.

呼叫時:

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

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

serial => bridge.Hidden(serial)

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

() => getter(bridge.Self)

建立 API: 這些函式負責註冊 API,不會在每次命令呼叫時重新執行。

UO.GetHidden(value) — UO.GetHidden(Any)

參數: value (Any)

結果: int / Integer.

呼叫時:

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

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

serial => bridge.Hidden(serial)

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

value => getter(GetObject(value))

建立 API: 這些函式負責註冊 API,不會在每次命令呼叫時重新執行。


UO.GetInt

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

C# 簽章

int UO.GetInt();
int UO.GetInt(object? objID);

讀取角色當前智力(Intelligence,INT)。

參數

  • objID — 僅顯示形式的 ObjID,帶有一個參數:serial 字元數、十進位/0x 十六進位字串、「self」、「lasttarget」或名稱 AddObject。選擇 graphic/type 以外的物件。如果沒有參數,則讀取目前字元。

傳回值

int — 當前統計點,客戶端模型中的0..65535;不是百分比、ID、技能、鎖定模式或bool。 0 也意味著遺失/刪除的字元或無法存取的物件。與數值要求比較,不==true。這不是統計上限或沒有修飾符的保證基值。

行為

  • 支援用於 self 的 () 和用於明確物件的 (ObjID)。沒有其他可選參數。
  • 如果 Player 存在且尚未被銷毀,則讀取 Player.Intelligence;否則0。存在的死亡角色並不是被移除的物體。此統計數據不是根據HP、法力或耐力計算的。
  • GetStr/GetInt/GetDex 接受 ObjID。 PlayerMobile数据仅适用于self;对于另一个serial - 0,甚至对于加载的mobile。別人的特徵不能被取代或猜測。
  • 呼叫遊戲流上的讀取,並能夠透過腳本取消等待。不查詢狀態、不開啟目標、不發送資料包、不改變特性、不新增延遲。
  • 每次呼叫都會重新讀取本地資料。變數儲存快照;各個讀取可能會收到不同的伺服器更新。非零結果不會測試連線。零可以是一個值,也可以沒有資料。
  • C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。 UO.Int(), UO.Intelligence(), UO.GetInt(), UO.GetIntelligence().
  • ExecuteClientApiCompatibility.Arg 先解析物件名稱,然後轉換數字。未知的非數字字串會導致轉換錯誤,而不是目標。 double 縮減為int,Array/void 縮減為0。要選擇字符,請使用正確的 serial,而不是此類轉換。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。讀取並顯示點 - 直接腳本

參數與執行流程:

  • value 儲存數值結果;轉換。 ToString 只是將其格式化為雜誌。沒有爭論或角色動作。
var value = UO.GetInt();
UO.Print("Intelligence: " + Convert.ToString(value));

2。比較兩個圖像 - 腳本函數

參數與執行流程:

  • 前後分別1000 ms; UO.Wait 加入範例。 Change=after-before 可以是正數、零或負數。就其本身而言,它並不區分所有中間更新和退出世界。
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var before = UO.GetInt();
    await Delay(1000);
    var after = UO.GetInt();
    var change = after - before;
    UO.Print("Change: " + Convert.ToString(change));
    return null;
}

Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));

3。完整的需求驗證功能-腳本類

參數與執行流程:

  • 最小值 =80 是要求的範例,而不是客戶端限制。 AttributeAtLeast(最小值) 拒絕遺失的字符,讀取一次特徵並傳回 bool: true 或 false 如果 >= 最小值。邏輯意義是透過比較給出的,而不是特徵本身。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        if (Truth(Truth(AttributeAtLeast(80)) == true))
        {
            UO.Print("Requirement met");
        }
        else
        {
            UO.Print("Requirement not met or no player");
        }

        return null;
    }

    dynamic AttributeAtLeast(dynamic minimum)
    {
        if (Truth(UO.Self() == 0))
        {
            return false;
        }

        var value = UO.GetInt();
        return value >= minimum;
    }

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

4。透過serial和物件名稱選擇角色 - 直接腳本

參數與執行流程:

  • id 是UO.Self()的結果,而不是type。 AddObject 將 ID 儲存為 statSubject,沒有範圍,因為指定了第二個參數。兩次調用都選擇相同的字符,但讀數不是原子的。
var id = UO.Self();
if (Truth(id != 0))
{
    UO.AddObject("statSubject", id);
    var direct = UO.GetInt(id);
    var byName = UO.GetInt("statSubject");
    UO.Print("Direct: " + Convert.ToString(direct) + "; alias: " + Convert.ToString(byName));
}

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

命令實作

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

UO.GetInt() — UO.GetInt()

參數: 沒有參數。

結果: int / Integer.

呼叫時:

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

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

() => bridge.Intelligence

建立 API: 這些函式負責註冊 API,不會在每次命令呼叫時重新執行。

UO.GetInt(objID) — UO.GetInt(Any)

參數: objID (Any)

結果: int / Integer.

呼叫時:

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

case "getint": return new InjectionValue(arguments.Length > 0 ? bridge.GetIntelligence(Arg(0)) : bridge.Intelligence);

UO.GetIntelligence

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

C# 簽章

int UO.GetIntelligence();

讀取角色當前智力(Intelligence,INT)。

參數

沒有參數。

傳回值

int — 當前統計點,客戶端模型中的0..65535;不是百分比、ID、技能、鎖定模式或bool。 0 也意味著遺失/刪除的字元或無法存取的物件。與數值要求比較,不==true。這不是統計上限或沒有修飾符的保證基值。

行為

  • 此指令不帶參數。使用上面的確切簽名。
  • 如果 Player 存在且尚未被銷毀,則讀取 Player.Intelligence;否則0。存在的死亡角色並不是被移除的物體。此統計數據不是根據HP、法力或耐力計算的。
  • GetStr/GetInt/GetDex 接受 ObjID。 PlayerMobile数据仅适用于self;对于另一个serial - 0,甚至对于加载的mobile。別人的特徵不能被取代或猜測。
  • 呼叫遊戲流上的讀取,並能夠透過腳本取消等待。不查詢狀態、不開啟目標、不發送資料包、不改變特性、不新增延遲。
  • 每次呼叫都會重新讀取本地資料。變數儲存快照;各個讀取可能會收到不同的伺服器更新。非零結果不會測試連線。零可以是一個值,也可以沒有資料。
  • C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。 UO.Int(), UO.Intelligence(), UO.GetInt(), UO.GetIntelligence().

獨立的 C# 腳本

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

簡單範例

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

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

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

1。讀取並顯示點 - 直接腳本

參數與執行流程:

  • value 儲存數值結果;轉換。 ToString 只是將其格式化為雜誌。沒有爭論或角色動作。
var value = UO.GetIntelligence();
UO.Print("Intelligence: " + Convert.ToString(value));

2。比較兩個圖像 - 腳本函數

參數與執行流程:

  • 前後分別1000 ms; UO.Wait 加入範例。 Change=after-before 可以是正數、零或負數。就其本身而言,它並不區分所有中間更新和退出世界。
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var before = UO.GetIntelligence();
    await Delay(1000);
    var after = UO.GetIntelligence();
    var change = after - before;
    UO.Print("Change: " + Convert.ToString(change));
    return null;
}

Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));

3。完整的需求驗證功能-腳本類

參數與執行流程:

  • 最小值 =80 是要求的範例,而不是客戶端限制。 AttributeAtLeast(最小值) 拒絕遺失的字符,讀取一次特徵並傳回 bool: true 或 false 如果 >= 最小值。邏輯意義是透過比較給出的,而不是特徵本身。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        if (Truth(Truth(AttributeAtLeast(80)) == true))
        {
            UO.Print("Requirement met");
        }
        else
        {
            UO.Print("Requirement not met or no player");
        }

        return null;
    }

    dynamic AttributeAtLeast(dynamic minimum)
    {
        if (Truth(UO.Self() == 0))
        {
            return false;
        }

        var value = UO.GetIntelligence();
        return value >= minimum;
    }

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

命令實作

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

UO.GetIntelligence() — UO.GetIntelligence()

參數: 沒有參數。

結果: int / Integer.

呼叫時:

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

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

() => bridge.Intelligence

建立 API: 這些函式負責註冊 API,不會在每次命令呼叫時重新執行。


UO.GetLife

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

C# 簽章

int UO.GetLife();

從本機模型讀取目前的運行狀況。

參數

沒有參數。

傳回值

int 是「Hits」欄位的值,不是百分比,也不是bool。 0 可以是實值或缺失資料的指示。零最大值不能用作除數。對別人的mobile來說,其意義可能是未知的。 HP/HitsMax 可能包含相對伺服器比例而不是精確點。 HP=0並不能證明死亡;為此有Dead/IsDead。

行為

  • 該命令不會開啟狀態,也不會請求伺服器更新。客户端只读取已经加载的数据。不改变特性,也不发送数据包。
  • 結果是單獨閱讀。从Exists到下一个挑战,世界可能会发生变化;多个查询不形成原子快照。
  • 讀取物件時,World.Get 會拒絕缺少的或 IsDestroyed 並產生 0。 HP/HitsMax從實體中讀取,包括具有這些欄位的項目; Mana/Stamina - 僅適用於行動裝置。沒有爭論,請閱讀self。不帶參數的同名變體不一定有ID的變體:請參閱簽名。
  • 對於遺失或損壞的 Player,不帶參數的讀取也會回傳 0。這適用於直接 Mana/Stamina 及其最大值,而不僅僅是透過 World.Get 的表格。存在的死亡角色可以保留價值。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。列印你的角色的值 - 直接腳本

參數與執行流程:

  • 不帶參數的呼叫讀取為self。 value 儲存一個數字,Convert.ToString 僅將其轉換為訊息。
var value = UO.GetLife();
UO.Print("GetLife: " + Convert.ToString(value));

2。在檢查或計算中應用值 - 腳本函數

參數與執行流程:

  • 顯示該欄位應用的閾值或計算。條件中的數字是範例設置,而不是伺服器限制。在除以最大值之前,檢查其正值。
return  RunScenario();
 object? RunScenario()
{
    var value = UO.GetLife();
    var maximum = UO.GetMaxHP();
    if (Truth(maximum > 0) && Truth(value * 100 / maximum < 50))
    {
        UO.Print("Health below half of the known maximum");
    }

    return null;
}

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

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

參數與執行流程:

  • 該名稱沒有 ID 的形式。不含參數的ReadValue讀取self;兩個呼叫由 UO.Wait(1000) 分隔。比較兩個快照可能會錯過中間更改。
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

    async public Task<object?> RunScenarioAsync()
    {
        var before = ReadValue();
        await Delay(1000);
        var after = ReadValue();
        UO.Print("Before: " + Convert.ToString(before) + "; after: " + Convert.ToString(after));
        return null;
    }

    dynamic ReadValue()
    {
        return UO.GetLife();
    }

    Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
}

命令實作

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

UO.GetLife() — UO.GetLife()

參數: 沒有參數。

結果: int / Integer.

呼叫時:

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

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

() => bridge.GetHP(bridge.Self)

建立 API: 這些函式負責註冊 API,不會在每次命令呼叫時重新執行。


UO.GetLuck

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

C# 簽章

int UO.GetLuck();

讀取角色的狀態計數器:運氣點。

參數

沒有參數。

傳回值

int — 運氣點,客戶端模型中的0..65535。 0 可以是真實值、無資料或遺失/損壞的播放器。這是一個數量,不是bool、ID或type:1表示一個單位,而不是成功。該指令不會迭代對象,也不傳回數組。

行為

  • 此指令不帶參數。使用上面的確切簽名。
  • 如果目前Player存在且尚未被銷毀,則在遊戲執行緒上讀取需要Player.Luck;否則0。設備不排序,獎金不重新計算,狀態不要求,並且沒有等待更新。存在的鬼魂不等於被摧毀的玩家。
  • Luck從狀態type>=4讀取儲存為UInt16的伺服器幸運值。這不是百分比、隨機數,也不是戰利品品質的保證。客戶端讀取時不計算掉落率,也不添加裝備加成。
  • CharacterStatus 在更新之前檢查所需的主體。 Weight 可用其自己的擴展狀態,插槽 - 與 type 3, Luck - 和 type 4, 伺服器 WeightMax - 和 type 5。沒有可選計數器的緊湊/舊包會留下其先前的快取。新玩家從頭開始;該通話並未證明收到新狀態。
  • 這些函式負責註冊 API,不會在每次命令呼叫時重新執行。 C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。
  • 每次呼叫都會重新讀取本地資料。變數儲存快照;各個讀取可能會收到不同的伺服器更新。非零結果不會測試連線。零可以是一個值,也可以沒有資料。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。顯示已儲存的計數器 - 直接腳本

參數與執行流程:

  • value 儲存對其自身字元的一次無參數呼叫; Convert.ToString 格式化日誌中的數字而不改變其意義。
var value = UO.GetLuck();
UO.Print("Luck: " + Convert.ToString(value));

2。觀察變化 - 腳本函數

參數與執行流程:

  • UO.Wait(500)前後間隔500毫秒。差值可以是正數、零或負數;暫時更新和角色變更可能會被跳過。暫停就是一個例子。
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var before = UO.GetLuck();
    await Delay(500);
    var after = UO.GetLuck();
    var difference = after - before;
    UO.Print("Counter change: " + Convert.ToString(difference));
    return null;
}

Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));

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

參數與執行流程:

  • LuckAtLeast(最小值)收到數值要求; 1000 是一個範例,而不是限製或百分比。拒絕玩家缺席,讀取一次運氣並按值 >= 最小值返回 bool: true 或 false。運氣本身不是bool。比較緩存點並且不會預測戰利品掉落。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        if (Truth(Truth(LuckAtLeast(1000)) == true))
        {
            UO.Print("Local check passed");
        }
        else
        {
            UO.Print("Local check failed or data unavailable");
        }

        return null;
    }

    dynamic LuckAtLeast(dynamic minimum)
    {
        if (Truth(UO.Self() == 0))
        {
            return false;
        }

        var value = UO.GetLuck();
        return value >= minimum;
    }

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

命令實作

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

UO.GetLuck() — UO.GetLuck()

參數: 沒有參數。

結果: int / Integer.

呼叫時:

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

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

() => bridge.Luck

建立 API: 這些函式負責註冊 API,不會在每次命令呼叫時重新執行。


UO.GetMana

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

C# 簽章

int UO.GetMana();
dynamic UO.GetMana(object? objID);

從本地模型讀取目前的法力值。

參數

  • objID — 所示形式的可選物件:serial 由數字/十六進位字串、self、lasttarget 或註冊名稱 AddObject。這不是type。没有争论,请阅读self。某些形式的未知文字會導致轉換錯誤;打電話前檢查名字。

傳回值

int 是Mana 欄位的值,而不是百分比或bool。 0 可以是實值或缺失資料的指示。零最大值不能用作除數。對別人的mobile來說,其意義可能是未知的。 HP/HitsMax 可能包含相對伺服器比例而不是精確點。 HP=0並不能證明死亡;為此有Dead/IsDead。

行為

  • 該命令不會開啟狀態,也不會請求伺服器更新。客户端只读取已经加载的数据。不改变特性,也不发送数据包。
  • 結果是單獨閱讀。从Exists到下一个挑战,世界可能会发生变化;多个查询不形成原子快照。
  • 讀取物件時,World.Get 會拒絕缺少的或 IsDestroyed 並產生 0。 HP/HitsMax從實體中讀取,包括具有這些欄位的項目; Mana/Stamina - 僅適用於行動裝置。沒有爭論,請閱讀self。不帶參數的同名變體不一定有ID的變體:請參閱簽名。
  • 對於遺失或損壞的 Player,不帶參數的讀取也會回傳 0。這適用於直接 Mana/Stamina 及其最大值,而不僅僅是透過 World.Get 的表格。存在的死亡角色可以保留價值。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。列印你的角色的值 - 直接腳本

參數與執行流程:

  • 不帶參數的呼叫讀取為self。 value 儲存一個數字,Convert.ToString 僅將其轉換為訊息。
var value = UO.GetMana();
UO.Print("GetMana: " + Convert.ToString(value));

2。在檢查或計算中應用值 - 腳本函數

參數與執行流程:

  • 顯示該欄位應用的閾值或計算。條件中的數字是範例設置,而不是伺服器限制。在除以最大值之前,檢查其正值。
return  RunScenario();
 object? RunScenario()
{
    var value = UO.GetMana();
    if (Truth(value >= 10))
    {
        UO.Print("At least ten mana points are known");
    }

    return null;
}

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

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

參數與執行流程:

  • lasttarget — 先前選擇的物件; Exists 檢查可用性。 obj 是ReadValue 的唯一參數。此函數傳回命令編號不變,並且是完整給出的。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        if (Truth(UO.Exists("lasttarget")))
        {
            var value = ReadValue("lasttarget");
            UO.Print("Selected value: " + Convert.ToString(value));
        }

        return null;
    }

    dynamic ReadValue(dynamic obj)
    {
        return UO.GetMana(obj);
    }

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

命令實作

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

UO.GetMana() — UO.GetMana()

參數: 沒有參數。

結果: int / Integer.

呼叫時:

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

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

() => bridge.Mana

建立 API: 這些函式負責註冊 API,不會在每次命令呼叫時重新執行。

UO.GetMana(objID) — UO.GetMana(Any)

參數: objID (Any)

結果: dynamic / Any.

呼叫時:

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

case "getmana": return new InjectionValue(arguments.Length > 0 ? bridge.GetMana(Arg(0)) : bridge.Mana);

UO.GetMaxHP

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

C# 簽章

int UO.GetMaxHP();
int UO.GetMaxHP(object? id);

從本地模型讀取最大健康狀況。

參數

  • id — 所示形式的可選物件:serial 由數字/十六進位字串、self、lasttarget 或註冊名稱 AddObject。這不是type。没有争论,请阅读self。某些形式的未知文字會導致轉換錯誤;打電話前檢查名字。

傳回值

int 是HitsMax 欄位的值,而不是百分比或bool。 0 可以是實值或缺失資料的指示。零最大值不能用作除數。對別人的mobile來說,其意義可能是未知的。 HP/HitsMax 可能包含相對伺服器規模而不是精確點。 HP=0並不能證明死亡;為此有Dead/IsDead。

行為

  • 該命令不會開啟狀態,也不會請求伺服器更新。客户端只读取已经加载的数据。不改变特性,也不发送数据包。
  • 結果是單獨閱讀。从Exists到下一个挑战,世界可能会发生变化;多个查询不形成原子快照。
  • 讀取物件時,World.Get 會拒絕缺少的或 IsDestroyed 並產生 0。 HP/HitsMax從實體中讀取,包括具有這些欄位的項目; Mana/Stamina - 僅適用於行動裝置。沒有爭論,請閱讀self。不帶參數的同名變體不一定有ID的變體:請參閱簽名。
  • 對於遺失或損壞的 Player,不帶參數的讀取也會回傳 0。這適用於直接 Mana/Stamina 及其最大值,而不僅僅是透過 World.Get 的表格。存在的死亡角色可以保留價值。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。列印你的角色的值 - 直接腳本

參數與執行流程:

  • 不帶參數的呼叫讀取為self。 value 儲存一個數字,Convert.ToString 僅將其轉換為訊息。
var value = UO.GetMaxHP();
UO.Print("GetMaxHP: " + Convert.ToString(value));

2。在檢查或計算中應用值 - 腳本函數

參數與執行流程:

  • 顯示該欄位應用的閾值或計算。條件中的數字是範例設置,而不是伺服器限制。在除以最大值之前,檢查其正值。
return  RunScenario();
 object? RunScenario()
{
    var value = UO.GetMaxHP();
    if (Truth(value > 0))
    {
        UO.Print("Known HP percent: " + Convert.ToString(UO.GetHP() * 100 / value));
    }
    else
    {
        UO.Print("HP maximum unavailable");
    }

    return null;
}

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

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

參數與執行流程:

  • lasttarget — 先前選擇的物件; Exists 檢查可用性。 obj 是ReadValue 的唯一參數。此函數傳回命令編號不變,並且是完整給出的。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        if (Truth(UO.Exists("lasttarget")))
        {
            var value = ReadValue("lasttarget");
            UO.Print("Selected value: " + Convert.ToString(value));
        }

        return null;
    }

    dynamic ReadValue(dynamic obj)
    {
        return UO.GetMaxHP(obj);
    }

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

命令實作

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

UO.GetMaxHP() — UO.GetMaxHP()

參數: 沒有參數。

結果: int / Integer.

呼叫時:

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

public int GetMaxHP() => GetMaxHP("self");

UO.GetMaxHP(id) — UO.GetMaxHP(Any)

參數: id (Any/Integer/String)

結果: int / Any.

呼叫時:

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

case "getmaxhp": return new InjectionValue(bridge.GetMaxHP(Arg(0, bridge.Self)));

UO.GetMaxHP(id) — UO.GetMaxHP(Integer)

參數: id (Any/Integer/String)

結果: int / Integer.

呼叫時:

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

public int GetMaxHP(int id) => bridge.GetMaxHP(id);

UO.GetMaxHP(id) — UO.GetMaxHP(String)

參數: id (Any/Integer/String)

結果: int / Integer.

呼叫時:

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

public int GetMaxHP(string id) => GetMaxHP(GetObject(id));

UO.GetMaxLife

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

C# 簽章

int UO.GetMaxLife();

從本地模型讀取最大健康狀況。

參數

沒有參數。

傳回值

int 是HitsMax 欄位的值,而不是百分比或bool。 0 可以是實值或缺失資料的指示。零最大值不能用作除數。對別人的mobile來說,其意義可能是未知的。 HP/HitsMax 可能包含相對伺服器規模而不是精確點。 HP=0並不能證明死亡;為此有Dead/IsDead。

行為

  • 該命令不會開啟狀態,也不會請求伺服器更新。客户端只读取已经加载的数据。不改变特性,也不发送数据包。
  • 結果是單獨閱讀。从Exists到下一个挑战,世界可能会发生变化;多个查询不形成原子快照。
  • 讀取物件時,World.Get 會拒絕缺少的或 IsDestroyed 並產生 0。 HP/HitsMax從實體中讀取,包括具有這些欄位的項目; Mana/Stamina - 僅適用於行動裝置。沒有爭論,請閱讀self。不帶參數的同名變體不一定有ID的變體:請參閱簽名。
  • 對於遺失或損壞的 Player,不帶參數的讀取也會回傳 0。這適用於直接 Mana/Stamina 及其最大值,而不僅僅是透過 World.Get 的表格。存在的死亡角色可以保留價值。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。列印你的角色的值 - 直接腳本

參數與執行流程:

  • 不帶參數的呼叫讀取為self。 value 儲存一個數字,Convert.ToString 僅將其轉換為訊息。
var value = UO.GetMaxLife();
UO.Print("GetMaxLife: " + Convert.ToString(value));

2。在檢查或計算中應用值 - 腳本函數

參數與執行流程:

  • 顯示該欄位應用的閾值或計算。條件中的數字是範例設置,而不是伺服器限制。在除以最大值之前,檢查其正值。
return  RunScenario();
 object? RunScenario()
{
    var value = UO.GetMaxLife();
    if (Truth(value > 0))
    {
        UO.Print("Known HP percent: " + Convert.ToString(UO.GetHP() * 100 / value));
    }
    else
    {
        UO.Print("HP maximum unavailable");
    }

    return null;
}

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

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

參數與執行流程:

  • 該名稱沒有 ID 的形式。不含參數的ReadValue讀取self;兩個呼叫由 UO.Wait(1000) 分隔。比較兩個快照可能會錯過中間更改。
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

    async public Task<object?> RunScenarioAsync()
    {
        var before = ReadValue();
        await Delay(1000);
        var after = ReadValue();
        UO.Print("Before: " + Convert.ToString(before) + "; after: " + Convert.ToString(after));
        return null;
    }

    dynamic ReadValue()
    {
        return UO.GetMaxLife();
    }

    Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
}

命令實作

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

UO.GetMaxLife() — UO.GetMaxLife()

參數: 沒有參數。

結果: int / Integer.

呼叫時:

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

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

() => bridge.GetMaxHP(bridge.Self)

建立 API: 這些函式負責註冊 API,不會在每次命令呼叫時重新執行。


UO.GetMaxMana

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

C# 簽章

int UO.GetMaxMana();
dynamic UO.GetMaxMana(object? objID);

從本地模型讀取最大法力值。

參數

  • objID — 所示形式的可選物件:serial 由數字/十六進位字串、self、lasttarget 或註冊名稱 AddObject。這不是type。没有争论,请阅读self。某些形式的未知文字會導致轉換錯誤;打電話前檢查名字。

傳回值

int 是ManaMax 欄位的值,而不是百分比或bool。 0 可以是實值或缺失資料的指示。零最大值不能用作除數。對別人的mobile來說,其意義可能是未知的。 HP/HitsMax 可能包含相對伺服器規模而不是精確點。 HP=0並不能證明死亡;為此有Dead/IsDead。

行為

  • 該命令不會開啟狀態,也不會請求伺服器更新。客户端只读取已经加载的数据。不改变特性,也不发送数据包。
  • 結果是單獨閱讀。从Exists到下一个挑战,世界可能会发生变化;多个查询不形成原子快照。
  • 讀取物件時,World.Get 會拒絕缺少的或 IsDestroyed 並產生 0。 HP/HitsMax從實體中讀取,包括具有這些欄位的項目; Mana/Stamina - 僅適用於行動裝置。沒有爭論,請閱讀self。不帶參數的同名變體不一定有ID的變體:請參閱簽名。
  • 對於遺失或損壞的 Player,不帶參數的讀取也會回傳 0。這適用於直接 Mana/Stamina 及其最大值,而不僅僅是透過 World.Get 的表格。存在的死亡角色可以保留價值。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。列印你的角色的值 - 直接腳本

參數與執行流程:

  • 不帶參數的呼叫讀取為self。 value 儲存一個數字,Convert.ToString 僅將其轉換為訊息。
var value = UO.GetMaxMana();
UO.Print("GetMaxMana: " + Convert.ToString(value));

2。在檢查或計算中應用值 - 腳本函數

參數與執行流程:

  • 顯示該欄位應用的閾值或計算。條件中的數字是範例設置,而不是伺服器限制。在除以最大值之前,檢查其正值。
return  RunScenario();
 object? RunScenario()
{
    var value = UO.GetMaxMana();
    if (Truth(value > 0))
    {
        UO.Print("Mana percent: " + Convert.ToString(UO.Mana() * 100 / value));
    }

    return null;
}

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

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

參數與執行流程:

  • lasttarget — 先前選擇的物件; Exists 檢查可用性。 obj 是ReadValue 的唯一參數。此函數傳回命令編號不變,並且是完整給出的。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        if (Truth(UO.Exists("lasttarget")))
        {
            var value = ReadValue("lasttarget");
            UO.Print("Selected value: " + Convert.ToString(value));
        }

        return null;
    }

    dynamic ReadValue(dynamic obj)
    {
        return UO.GetMaxMana(obj);
    }

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

命令實作

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

UO.GetMaxMana() — UO.GetMaxMana()

參數: 沒有參數。

結果: int / Integer.

呼叫時:

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

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

() => bridge.MaxMana

建立 API: 這些函式負責註冊 API,不會在每次命令呼叫時重新執行。

UO.GetMaxMana(objID) — UO.GetMaxMana(Any)

參數: objID (Any)

結果: dynamic / Any.

呼叫時:

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

case "getmaxmana": return new InjectionValue(bridge.GetMaxMana(Arg(0, bridge.Self)));

UO.GetMaxStam

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

C# 簽章

int UO.GetMaxStam();
dynamic UO.GetMaxStam(object? objID);

從本地模型讀取最大耐久性。

參數

  • objID — 所示形式的可選物件:serial 由數字/十六進位字串、self、lasttarget 或註冊名稱 AddObject。這不是type。没有争论,请阅读self。某些形式的未知文字會導致轉換錯誤;打電話前檢查名字。

傳回值

int 是StaminaMax 欄位的值,而不是百分比或bool。 0 可以是實值或缺失資料的指示。零最大值不能用作除數。對別人的mobile來說,其意義可能是未知的。 HP/HitsMax 可能包含相對伺服器規模而不是精確點。 HP=0並不能證明死亡;為此有Dead/IsDead。

行為

  • 該命令不會開啟狀態,也不會請求伺服器更新。客户端只读取已经加载的数据。不改变特性,也不发送数据包。
  • 結果是單獨閱讀。从Exists到下一个挑战,世界可能会发生变化;多个查询不形成原子快照。
  • 讀取物件時,World.Get 會拒絕缺少的或 IsDestroyed 並產生 0。 HP/HitsMax從實體中讀取,包括具有這些欄位的項目; Mana/Stamina - 僅適用於行動裝置。沒有爭論,請閱讀self。不帶參數的同名變體不一定有ID的變體:請參閱簽名。
  • 對於遺失或損壞的 Player,不帶參數的讀取也會回傳 0。這適用於直接 Mana/Stamina 及其最大值,而不僅僅是透過 World.Get 的表格。存在的死亡角色可以保留價值。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。列印你的角色的值 - 直接腳本

參數與執行流程:

  • 不帶參數的呼叫讀取為self。 value 儲存一個數字,Convert.ToString 僅將其轉換為訊息。
var value = UO.GetMaxStam();
UO.Print("GetMaxStam: " + Convert.ToString(value));

2。在檢查或計算中應用值 - 腳本函數

參數與執行流程:

  • 顯示該欄位應用的閾值或計算。條件中的數字是範例設置,而不是伺服器限制。在除以最大值之前,檢查其正值。
return  RunScenario();
 object? RunScenario()
{
    var value = UO.GetMaxStam();
    if (Truth(value > 0))
    {
        UO.Print("Stamina percent: " + Convert.ToString(UO.Stamina() * 100 / value));
    }

    return null;
}

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

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

參數與執行流程:

  • lasttarget — 先前選擇的物件; Exists 檢查可用性。 obj 是ReadValue 的唯一參數。此函數傳回命令編號不變,並且是完整給出的。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        if (Truth(UO.Exists("lasttarget")))
        {
            var value = ReadValue("lasttarget");
            UO.Print("Selected value: " + Convert.ToString(value));
        }

        return null;
    }

    dynamic ReadValue(dynamic obj)
    {
        return UO.GetMaxStam(obj);
    }

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

命令實作

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

UO.GetMaxStam() — UO.GetMaxStam()

參數: 沒有參數。

結果: int / Integer.

呼叫時:

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

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

() => bridge.MaxStamina

建立 API: 這些函式負責註冊 API,不會在每次命令呼叫時重新執行。

UO.GetMaxStam(objID) — UO.GetMaxStam(Any)

參數: objID (Any)

結果: dynamic / Any.

呼叫時:

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

case "getmaxstam": return new InjectionValue(bridge.GetMaxStamina(Arg(0, bridge.Self)));

UO.GetMaxStamina

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

C# 簽章

int UO.GetMaxStamina();

從本地模型讀取最大耐久性。

參數

沒有參數。

傳回值

int 是StaminaMax 欄位的值,而不是百分比或bool。 0 可以是實值或缺失資料的指示。零最大值不能用作除數。對別人的mobile來說,其意義可能是未知的。 HP/HitsMax 可能包含相對伺服器規模而不是精確點。 HP=0並不能證明死亡;為此有Dead/IsDead。

行為

  • 該命令不會開啟狀態,也不會請求伺服器更新。客户端只读取已经加载的数据。不改变特性,也不发送数据包。
  • 結果是單獨閱讀。从Exists到下一个挑战,世界可能会发生变化;多个查询不形成原子快照。
  • 讀取物件時,World.Get 會拒絕缺少的或 IsDestroyed 並產生 0。 HP/HitsMax從實體中讀取,包括具有這些欄位的項目; Mana/Stamina - 僅適用於行動裝置。沒有爭論,請閱讀self。不帶參數的同名變體不一定有ID的變體:請參閱簽名。
  • 對於遺失或損壞的 Player,不帶參數的讀取也會回傳 0。這適用於直接 Mana/Stamina 及其最大值,而不僅僅是透過 World.Get 的表格。存在的死亡角色可以保留價值。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。列印你的角色的值 - 直接腳本

參數與執行流程:

  • 不帶參數的呼叫讀取為self。 value 儲存一個數字,Convert.ToString 僅將其轉換為訊息。
var value = UO.GetMaxStamina();
UO.Print("GetMaxStamina: " + Convert.ToString(value));

2。在檢查或計算中應用值 - 腳本函數

參數與執行流程:

  • 顯示該欄位應用的閾值或計算。條件中的數字是範例設置,而不是伺服器限制。在除以最大值之前,檢查其正值。
return  RunScenario();
 object? RunScenario()
{
    var value = UO.GetMaxStamina();
    if (Truth(value > 0))
    {
        UO.Print("Stamina percent: " + Convert.ToString(UO.Stamina() * 100 / value));
    }

    return null;
}

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

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

參數與執行流程:

  • 該名稱沒有 ID 的形式。不含參數的ReadValue讀取self;兩個呼叫由 UO.Wait(1000) 分隔。比較兩個快照可能會錯過中間更改。
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

    async public Task<object?> RunScenarioAsync()
    {
        var before = ReadValue();
        await Delay(1000);
        var after = ReadValue();
        UO.Print("Before: " + Convert.ToString(before) + "; after: " + Convert.ToString(after));
        return null;
    }

    dynamic ReadValue()
    {
        return UO.GetMaxStamina();
    }

    Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
}

命令實作

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

UO.GetMaxStamina() — UO.GetMaxStamina()

參數: 沒有參數。

結果: int / Integer.

呼叫時:

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

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

() => bridge.MaxStamina

建立 API: 這些函式負責註冊 API,不會在每次命令呼叫時重新執行。


UO.GetMaxWeight

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

C# 簽章

int UO.GetMaxWeight();

讀取角色的狀態計數器:最大重量(以石頭為單位)。

參數

沒有參數。

傳回值

int — 石頭的最大重量,客戶端模型中的0..65535。 0 可以是真實值、無資料或遺失/損壞的播放器。這是一個數量,不是bool、ID或type:1表示一個單位,而不是成功。該指令不會迭代對象,也不傳回數組。

行為

  • 此指令不帶參數。使用上面的確切簽名。
  • 如果目前Player存在且尚未被銷毀,則在遊戲執行緒上讀取需要Player.WeightMax;否則0。設備不排序,獎金不重新計算,狀態不要求,並且沒有等待更新。存在的鬼魂不等於被摧毀的玩家。
  • MaxWeight 讀取快取 WeightMax。自身狀況 type >= 5 將伺服器限制設為 UInt16,即使它等於 0。舊的擴展狀態在接收時計算一次:協議 UO >= 5.0.0a — 7 * floor(Strength / 2) + 40;較舊的一個是轉換。ToString * 4 + 25。結果儲存為UInt16;極值以模包裹 65536. Strength=101 相應地給出 390 或者 429。對轉換進行單獨更改。ToString getter 本身不會重新計算限制。
  • CharacterStatus 在更新之前檢查所需的主體。 Weight 可用其自己的擴展狀態,插槽 - 與 type 3, Luck - 和 type 4, 伺服器 WeightMax - 和 type 5。沒有可選計數器的緊湊/舊包會留下其先前的快取。新玩家從頭開始;該通話並未證明收到新狀態。
  • 這些函式負責註冊 API,不會在每次命令呼叫時重新執行。 C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。
  • 每次呼叫都會重新讀取本地資料。變數儲存快照;各個讀取可能會收到不同的伺服器更新。非零結果不會測試連線。零可以是一個值,也可以沒有資料。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。顯示已儲存的計數器 - 直接腳本

參數與執行流程:

  • value 儲存對其自身字元的一次無參數呼叫; Convert.ToString 格式化日誌中的數字而不改變其意義。
var value = UO.GetMaxWeight();
UO.Print("WeightMax: " + Convert.ToString(value));

2。觀察變化 - 腳本函數

參數與執行流程:

  • UO.Wait(500)前後間隔500毫秒。差值可以是正數、零或負數;暫時更新和角色變更可能會被跳過。暫停就是一個例子。
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var before = UO.GetMaxWeight();
    await Delay(500);
    var after = UO.GetMaxWeight();
    var difference = after - before;
    UO.Print("Counter change: " + Convert.ToString(difference));
    return null;
}

Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));

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

參數與執行流程:

  • CanCarry(額外)獲得額外的石頭重量; 10是一個例子,不是堆疊的數量。拒絕負額外、無玩家或最大值 <= 0,讀取當前重量和限制,然後按額外 <= 最大值 - 目前返回 bool: true 或 false。減法避免了當前+額外的溢出。過載時,即使額外=0,結果也是false。這是本地評估,不是伺服器解析;讀取不是原子的,並且零權重可能是未知的。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        if (Truth(Truth(CanCarry(10)) == true))
        {
            UO.Print("Local check passed");
        }
        else
        {
            UO.Print("Local check failed or data unavailable");
        }

        return null;
    }

    dynamic CanCarry(dynamic extra)
    {
        if (Truth(extra < 0) || Truth(UO.Self() == 0))
        {
            return false;
        }

        var current = UO.Weight();
        var maximum = UO.GetMaxWeight();
        if (Truth(maximum <= 0))
        {
            return false;
        }

        return extra <= maximum - current;
    }

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

命令實作

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

UO.GetMaxWeight() — UO.GetMaxWeight()

參數: 沒有參數。

結果: int / Integer.

呼叫時:

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

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

() => bridge.MaxWeight

建立 API: 這些函式負責註冊 API,不會在每次命令呼叫時重新執行。


UO.GetParalisa

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

C# 簽章

int UO.GetParalisa();
int UO.GetParalisa(object? value);

檢查客戶端已知的角色麻痺標誌。

參數

  • value - 可選 serial/ID mobile:數字、十六進位字串、self、lasttarget 或其他標準物件名稱或 AddObject 名稱。這不是graphic/type。如果沒有參數,則使用 self。未知名稱在0中解析;目標未開啟。

傳回值

數字標誌int:1(滿足條件)-加載mobile具有標誌IsParalyzed;0(不滿足條件)- 無標誌、mobile 未知、已刪除或該物件為項目。這不是癱瘓時間,並且不保證能夠以0的結果移動。

行為

  • 使用 Paralyzed 檢查癱瘓標誌。變體 Is/Get、GetParalisa、Frozen 和 GetLocked 讀取相同的標誌。
  • 該命令僅讀取本地資料。它不會應用或消除癱瘓,不會等待其結束,也不會向伺服器發送更新請求。
  • 此指令的結果是int型別:使用 if (value != 0) 或 if (value == 0)。不允許與true/false以及C#中的if(值)直接比較。該值保留標誌的含義,而不是數量或ID。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。透過 true 測試自己 - 直接腳本

參數與執行流程:

  • 空括號選擇 self。 state 儲存標誌的一個快照; true — 數值常數 1。
  • false 的結果並不排除因牆壁、缺乏耐力或其他原因而停止。
var state = UO.GetParalisa();
if (Truth(Truth(state) == true))
{
    UO.Print("Paralysis flag is set");
}
else
{
    UO.Print("Paralysis flag is absent or unavailable");
}

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

2。檢查選定的mobile - 腳本功能

參數與執行流程:

  • target 儲存最後一個目標的十六進位字串serial。 IsNpc 檢查是否是已載入的mobile,包括玩家。
  • 帶參數的命令讀取目標。她沒有選擇新角色或改變lasttarget。
return  RunScenario();
 object? RunScenario()
{
    var target = UO.GetSerial("lasttarget");
    if (Truth(UO.IsNPC(target)))
    {
        var state = UO.GetParalisa(target);
        UO.Print("Selected mobile paralysis 1/0: " + Convert.ToString(state));
    }
    else
    {
        UO.Print("No loaded mobile selected");
    }

    return null;
}

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

3。有限等待消除麻痹 - 场景类

參數與執行流程:

  • 暫停時間不超過 10 100 毫秒。每次不帶參數的呼叫都會再次讀取 self 。
  • 循環之後,單獨檢查 self 是否存在。這是大約一秒鐘的觀察加上命令的執行,並不能保證消除癱瘓。
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

    async public Task<object?> RunScenarioAsync()
    {
        var attempts = 0;
        while (Truth(Truth(UO.GetParalisa()) == true) && Truth(attempts < 10))
        {
            await Delay(100);
            attempts = attempts + 1;
        }

        if (Truth(UO.IsNPC("self")))
        {
            if (Truth(Truth(UO.GetParalisa()) == false))
            {
                UO.Print("Paralysis flag is clear");
            }
            else
            {
                UO.Print("Still paralyzed");
            }
        }
        else
        {
            UO.Print("Self is unavailable");
        }

        return null;
    }

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

命令實作

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

UO.GetParalisa() — UO.GetParalisa()

參數: 沒有參數。

結果: int / Integer.

呼叫時:

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

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

serial => bridge.GetLocked(serial)

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

() => getter(bridge.Self)

建立 API: 這些函式負責註冊 API,不會在每次命令呼叫時重新執行。

UO.GetParalisa(value) — UO.GetParalisa(Any)

參數: value (Any)

結果: int / Integer.

呼叫時:

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

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

serial => bridge.GetLocked(serial)

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

value => getter(GetObject(value))

建立 API: 這些函式負責註冊 API,不會在每次命令呼叫時重新執行。


UO.GetParalysed

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

C# 簽章

int UO.GetParalysed();
int UO.GetParalysed(object? value);

檢查客戶端已知的角色麻痺標誌。

參數

  • value - 可選 serial/ID mobile:數字、十六進位字串、self、lasttarget 或其他標準物件名稱或 AddObject 名稱。這不是graphic/type。如果沒有參數,則使用 self。未知名稱在0中解析;目標未開啟。

傳回值

數字標誌int:1(滿足條件)-加載mobile具有標誌IsParalyzed;0(不滿足條件)- 無標誌、mobile 未知、已刪除或該物件為項目。這不是癱瘓時間,並且不保證能夠以0的結果移動。

行為

  • 使用 Paralyzed 檢查癱瘓標誌。變體 Is/Get、GetParalisa、Frozen 和 GetLocked 讀取相同的標誌。
  • 該命令僅讀取本地資料。它不會應用或消除癱瘓,不會等待其結束,也不會向伺服器發送更新請求。
  • 此指令的結果是int型別:使用 if (value != 0) 或 if (value == 0)。不允許與true/false以及C#中的if(值)直接比較。該值保留標誌的含義,而不是數量或ID。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。透過 true 測試自己 - 直接腳本

參數與執行流程:

  • 空括號選擇 self。 state 儲存標誌的一個快照; true — 數值常數 1。
  • false 的結果並不排除因牆壁、缺乏耐力或其他原因而停止。
var state = UO.GetParalysed();
if (Truth(Truth(state) == true))
{
    UO.Print("Paralysis flag is set");
}
else
{
    UO.Print("Paralysis flag is absent or unavailable");
}

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

2。檢查選定的mobile - 腳本功能

參數與執行流程:

  • target 儲存最後一個目標的十六進位字串serial。 IsNpc 檢查是否是已載入的mobile,包括玩家。
  • 帶參數的命令讀取目標。她沒有選擇新角色或改變lasttarget。
return  RunScenario();
 object? RunScenario()
{
    var target = UO.GetSerial("lasttarget");
    if (Truth(UO.IsNPC(target)))
    {
        var state = UO.GetParalysed(target);
        UO.Print("Selected mobile paralysis 1/0: " + Convert.ToString(state));
    }
    else
    {
        UO.Print("No loaded mobile selected");
    }

    return null;
}

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

3。有限等待消除麻痹 - 场景类

參數與執行流程:

  • 暫停時間不超過 10 100 毫秒。每次不帶參數的呼叫都會再次讀取 self 。
  • 循環之後,單獨檢查 self 是否存在。這是大約一秒鐘的觀察加上命令的執行,並不能保證消除癱瘓。
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

    async public Task<object?> RunScenarioAsync()
    {
        var attempts = 0;
        while (Truth(Truth(UO.GetParalysed()) == true) && Truth(attempts < 10))
        {
            await Delay(100);
            attempts = attempts + 1;
        }

        if (Truth(UO.IsNPC("self")))
        {
            if (Truth(Truth(UO.GetParalysed()) == false))
            {
                UO.Print("Paralysis flag is clear");
            }
            else
            {
                UO.Print("Still paralyzed");
            }
        }
        else
        {
            UO.Print("Self is unavailable");
        }

        return null;
    }

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

命令實作

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

UO.GetParalysed() — UO.GetParalysed()

參數: 沒有參數。

結果: int / Integer.

呼叫時:

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

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

serial => bridge.GetLocked(serial)

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

() => getter(bridge.Self)

建立 API: 這些函式負責註冊 API,不會在每次命令呼叫時重新執行。

UO.GetParalysed(value) — UO.GetParalysed(Any)

參數: value (Any)

結果: int / Integer.

呼叫時:

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

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

serial => bridge.GetLocked(serial)

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

value => getter(GetObject(value))

建立 API: 這些函式負責註冊 API,不會在每次命令呼叫時重新執行。


UO.GetParalyzed

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

C# 簽章

int UO.GetParalyzed();
int UO.GetParalyzed(object? value);

檢查客戶端已知的角色麻痺標誌。

參數

  • value - 可選 serial/ID mobile:數字、十六進位字串、self、lasttarget 或其他標準物件名稱或 AddObject 名稱。這不是graphic/type。如果沒有參數,則使用 self。未知名稱在0中解析;目標未開啟。

傳回值

數字標誌int:1(滿足條件)-加載mobile具有標誌IsParalyzed;0(不滿足條件)- 無標誌、mobile 未知、已刪除或該物件為項目。這不是癱瘓時間,並且不保證能夠以0的結果移動。

行為

  • 使用 Paralyzed 檢查癱瘓標誌。變體 Is/Get、GetParalisa、Frozen 和 GetLocked 讀取相同的標誌。
  • 該命令僅讀取本地資料。它不會應用或消除癱瘓,不會等待其結束,也不會向伺服器發送更新請求。
  • 此指令的結果是int型別:使用 if (value != 0) 或 if (value == 0)。不允許與true/false以及C#中的if(值)直接比較。該值保留標誌的含義,而不是數量或ID。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。透過 true 測試自己 - 直接腳本

參數與執行流程:

  • 空括號選擇 self。 state 儲存標誌的一個快照; true — 數值常數 1。
  • false 的結果並不排除因牆壁、缺乏耐力或其他原因而停止。
var state = UO.GetParalyzed();
if (Truth(Truth(state) == true))
{
    UO.Print("Paralysis flag is set");
}
else
{
    UO.Print("Paralysis flag is absent or unavailable");
}

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

2。檢查選定的mobile - 腳本功能

參數與執行流程:

  • target 儲存最後一個目標的十六進位字串serial。 IsNpc 檢查是否是已載入的mobile,包括玩家。
  • 帶參數的命令讀取目標。她沒有選擇新角色或改變lasttarget。
return  RunScenario();
 object? RunScenario()
{
    var target = UO.GetSerial("lasttarget");
    if (Truth(UO.IsNPC(target)))
    {
        var state = UO.GetParalyzed(target);
        UO.Print("Selected mobile paralysis 1/0: " + Convert.ToString(state));
    }
    else
    {
        UO.Print("No loaded mobile selected");
    }

    return null;
}

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

3。有限等待消除麻痹 - 场景类

參數與執行流程:

  • 暫停時間不超過 10 100 毫秒。每次不帶參數的呼叫都會再次讀取 self 。
  • 循環之後,單獨檢查 self 是否存在。這是大約一秒鐘的觀察加上命令的執行,並不能保證消除癱瘓。
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

    async public Task<object?> RunScenarioAsync()
    {
        var attempts = 0;
        while (Truth(Truth(UO.GetParalyzed()) == true) && Truth(attempts < 10))
        {
            await Delay(100);
            attempts = attempts + 1;
        }

        if (Truth(UO.IsNPC("self")))
        {
            if (Truth(Truth(UO.GetParalyzed()) == false))
            {
                UO.Print("Paralysis flag is clear");
            }
            else
            {
                UO.Print("Still paralyzed");
            }
        }
        else
        {
            UO.Print("Self is unavailable");
        }

        return null;
    }

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

命令實作

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

UO.GetParalyzed() — UO.GetParalyzed()

參數: 沒有參數。

結果: int / Integer.

呼叫時:

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

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

serial => bridge.GetLocked(serial)

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

() => getter(bridge.Self)

建立 API: 這些函式負責註冊 API,不會在每次命令呼叫時重新執行。

UO.GetParalyzed(value) — UO.GetParalyzed(Any)

參數: value (Any)

結果: int / Integer.

呼叫時:

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

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

serial => bridge.GetLocked(serial)

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

value => getter(GetObject(value))

建立 API: 這些函式負責註冊 API,不會在每次命令呼叫時重新執行。


UO.GetPhysicalResist

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

C# 簽章

int UO.GetPhysicalResist();

讀取目前角色的抵抗力場:物理護甲/抵抗力。

參數

沒有參數。

傳回值

int 是簽章狀態值,客戶端模型中的 -32768..32767。負值被保留。 0可以是真正的抵抗,缺乏數據或失踪/被毀壞的玩家;對於未知選擇器,GetResist 還給出 0。這不是bool、ID、技能或阻力極限。 1表示一分,不是成功。

行為

  • 此指令不帶參數。使用上面的確切簽名。
  • 如果目前Player存在且尚未被銷毀,則在遊戲執行緒上讀取需要Player.PhysicalResistance;否則0。設備不排序,獎金不重新計算,狀態不要求,並且沒有等待更新。存在的鬼魂不等於被摧毀的玩家。
  • PhysicalResistance - 伺服器護甲/狀態列:經典伺服器可以傳送護甲等級,有抗性的規則可以傳送物理抗性。 API 不會從一種轉換為另一種,也不會計算傷害減免的百分比。 Armor 和實體別名讀取相同的欄位。
  • CharacterStatus在更改名字、健康狀況和自身特徵之前檢查所需的身體,然後將每個抵抗詞翻譯成帶符號的Int16。修剪後的強制主體不會改變先前的資料。可選尾部type6保留相同的規則;電阻指令不會從中讀取最大限制。
  • 每次呼叫都會重新讀取本地資料。變數儲存快照;各個讀取可能會收到不同的伺服器更新。非零結果不會測試連線。零可以是一個值,也可以沒有資料。
  • 這些函式負責註冊 API,不會在每次命令呼叫時重新執行。 C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。列印已儲存的值 - 直接腳本

參數與執行流程:

  • value 儲存一次呼叫的結果。 Convert.ToString 格式化日誌的數字。沒有任何爭論:你可以讀懂自己的個性。
var value = UO.GetPhysicalResist();
UO.Print("PhysicalResistance: " + Convert.ToString(value));

2。比較兩個圖像 - 腳本函數

參數與執行流程:

  • 前後有UO.Wait(500)毫秒;差異可以是負數。可能會錯過臨時更新。暫停指的是範例,而不是延遲API。
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var before = UO.GetPhysicalResist();
    await Delay(500);
    var after = UO.GetPhysicalResist();
    var difference = after - before;
    UO.Print("Resistance change: " + Convert.ToString(difference));
    return null;
}

Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));

3。完整的最小電阻測試功能-腳本類

參數與執行流程:

  • 最小值 =50 是要求的範例,而不是客戶端限制。 ResistanceAtLeast 拒絕遺失的玩家,讀取一個值並回傳 bool: true 或 false 如果值 >= 最小值。电阻本身不是bool。該函數的完整聲明如下。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        if (Truth(Truth(ResistanceAtLeast(50)) == true))
        {
            UO.Print("Local resistance requirement met");
        }
        else
        {
            UO.Print("Requirement not met or no player");
        }

        return null;
    }

    dynamic ResistanceAtLeast(dynamic minimum)
    {
        if (Truth(UO.Self() == 0))
        {
            return false;
        }

        var value = UO.GetPhysicalResist();
        return value >= minimum;
    }

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

命令實作

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

UO.GetPhysicalResist() — UO.GetPhysicalResist()

參數: 沒有參數。

結果: int / Integer.

呼叫時:

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

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

() => bridge.Armor

建立 API: 這些函式負責註冊 API,不會在每次命令呼叫時重新執行。


UO.GetPlayerStatusText

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

C# 簽章

dynamic UO.GetPlayerStatusText(object? objID);

產生物件名稱和健康狀況的簡短文字。

參數

  • objID — 特定对象的串行/ID:int、十进制/十六进制字符串或设置别名self、backpack、lasttarget、lastobject 或名称AddObject。這不是graphic/type。

傳回值

string,格式為「名稱HP/MaxHP」。例如「烏鴉75/100」。對於未知對象,通常為“0/0”,並帶有前導空格。這是文本,而不是結構,bool 或開放狀態指南。

行為

  • GetName/GetHP/GetMaxHP 無需更新即可讀取。不要透過空格解析文字來取得 ID 或 HP:名稱可能包含空格,對數字使用單獨的 getter 指令。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。顯示你的健康 - 直接腳本

參數與執行流程:

  • ObjID=self — 目前角色。
  • Print 顯示日誌中已完成的文字。
UO.Print(UO.GetPlayerStatusText("self"));

2。顯示前檢查目標 - 腳本功能

參數與執行流程:

  • 最後一個目標的 ObjID=serial。
  • Exists 阻止輸出未知對象,如 0/0。
return  RunScenario();
 object? RunScenario()
{
    var target = UO.GetSerial("lasttarget");
    if (Truth(UO.Exists(target)))
    {
        UO.Print(UO.GetPlayerStatusText(target));
    }

    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。儲存兩個快照 - 腳本類

參數與執行流程:

  • 500 - 讀數之間的毫秒數。
  • 比較的是名字/HP的文字,不是角色的所有特徵。
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

    async public Task<object?> RunScenarioAsync()
    {
        var before = UO.GetPlayerStatusText("self");
        await Delay(500);
        var after = UO.GetPlayerStatusText("self");
        if (Truth(before != after))
        {
            UO.Print(after);
        }

        return null;
    }

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

命令實作

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

UO.GetPlayerStatusText(objID) — UO.GetPlayerStatusText(Any)

參數: objID (Any)

結果: dynamic / Any.

呼叫時:

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

case "getplayerstatustext": return new InjectionValue(bridge.GetName(Arg(0)) + " " + bridge.GetHP(Arg(0)) + "/" + bridge.GetMaxHP(Arg(0)));

UO.GetPoisonResist

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

C# 簽章

int UO.GetPoisonResist();

讀取目前角色的抗性場:毒。

參數

沒有參數。

傳回值

int 是簽章狀態值,客戶端模型中的 -32768..32767。負值被保留。 0可以是真正的抵抗,缺乏數據或失踪/被毀壞的玩家;對於未知選擇器,GetResist 還給出 0。這不是bool、ID、技能或阻力極限。 1表示一分,不是成功。

行為

  • 此指令不帶參數。使用上面的確切簽名。
  • 如果目前Player存在且尚未被銷毀,則在遊戲執行緒上讀取需要Player.PoisonResistance;否則0。設備不排序,獎金不重新計算,狀態不要求,並且沒有等待更新。存在的鬼魂不等於被摧毀的玩家。
  • 元素場有擴展 CharacterStatus (0x11)、type >= 4。該命令本身不檢查伺服器紀元。沒有這些欄位的 Compact/old 狀態會離開先前的快取;新玩家原本是0。抗毒不是Poisoned標誌;這也不是抵抗法術的技能。
  • CharacterStatus在更改名字、健康狀況和自身特徵之前檢查所需的身體,然後將每個抵抗詞翻譯成帶符號的Int16。修剪後的強制主體不會改變先前的資料。可選尾部type6保留相同的規則;電阻指令不會從中讀取最大限制。
  • 每次呼叫都會重新讀取本地資料。變數儲存快照;各個讀取可能會收到不同的伺服器更新。非零結果不會測試連線。零可以是一個值,也可以沒有資料。
  • 這些函式負責註冊 API,不會在每次命令呼叫時重新執行。 C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。列印已儲存的值 - 直接腳本

參數與執行流程:

  • value 儲存一次呼叫的結果。 Convert.ToString 格式化日誌的數字。沒有任何爭論:你可以讀懂自己的個性。
var value = UO.GetPoisonResist();
UO.Print("PoisonResistance: " + Convert.ToString(value));

2。比較兩個圖像 - 腳本函數

參數與執行流程:

  • 前後有UO.Wait(500)毫秒;差異可以是負數。可能會錯過臨時更新。暫停指的是範例,而不是延遲API。
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var before = UO.GetPoisonResist();
    await Delay(500);
    var after = UO.GetPoisonResist();
    var difference = after - before;
    UO.Print("Resistance change: " + Convert.ToString(difference));
    return null;
}

Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));

3。完整的最小電阻測試功能-腳本類

參數與執行流程:

  • 最小值 =50 是要求的範例,而不是客戶端限制。 ResistanceAtLeast 拒絕遺失的玩家,讀取一個值並回傳 bool: true 或 false 如果值 >= 最小值。电阻本身不是bool。該函數的完整聲明如下。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        if (Truth(Truth(ResistanceAtLeast(50)) == true))
        {
            UO.Print("Local resistance requirement met");
        }
        else
        {
            UO.Print("Requirement not met or no player");
        }

        return null;
    }

    dynamic ResistanceAtLeast(dynamic minimum)
    {
        if (Truth(UO.Self() == 0))
        {
            return false;
        }

        var value = UO.GetPoisonResist();
        return value >= minimum;
    }

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

命令實作

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

UO.GetPoisonResist() — UO.GetPoisonResist()

參數: 沒有參數。

結果: int / Integer.

呼叫時:

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

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

() => bridge.PoisonResistance

建立 API: 這些函式負責註冊 API,不會在每次命令呼叫時重新執行。


UO.GetPoisoned

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

C# 簽章

int UO.GetPoisoned();
int UO.GetPoisoned(object? value);

檢查角色中毒情況。

參數

  • value — 所示形式的可選物件:serial 由數字/十六進位字串、self、lasttarget 或註冊名稱 AddObject。這不是type。没有争论,请阅读self。某些形式的未知文字會導致轉換錯誤;打電話前檢查名字。

傳回值

數字標誌int:1(滿足條件),0(不滿足條件)。這是一個數字標誌:在 C# 中檢查結果 != 0 或結果 == 0。 int 與 true/false 和 if(結果)的直接比較是不允許的。 1 - mobile 有 IsPoisoned,0 沒有標誌或 mobile 缺失。中毒程度和剩餘時間不返回。

該命令的結果是一個數字標誌: 1 表示滿足條件, 0 - 未實現。後 var 結果=命令(...)檢查是否(結果!= 0) 或 if (結果 == 0)。儲存一次呼叫的結果:重複呼叫可以再次執行該操作或讀取已經變更的狀態。

行為

  • 讀取本機模型:不開啟目標、不要求狀態、不更改標誌、不發送資料包。即使在從字典中刪除條目之前,被破壞的物件也被視為遺失。
  • 結果是單獨閱讀。从Exists到下一个挑战,世界可能会发生变化;多个查询不形成原子快照。
  • 對於Poisoned/Flying,考慮協議版本:直到7.0.0.0,0x04位表示有毒; 7.0.0.0開頭表示飛行,毒藥單獨存放。航班不是根據Z計算的。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。檢查自己的狀態-直接腳本

參數與執行流程:

  • 空括號讀作self。 active 保存一次結果;true和 false定義了兩個分支。 Print 僅顯示範例訊息。
var active = UO.GetPoisoned();
if (Truth(Truth(active) == true))
{
    UO.Print("State is active");
}
else
{
    UO.Print("State is inactive or unavailable");
}

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

2。選定的物件和完整功能ReadState - 腳本功能

參數與執行流程:

  • lasttarget – 先前選擇的物件。 Exists 檢查其存在。 obj是唯一參數ReadState;此函數不加修改地傳回指令的結果。它的定義包含在複製的程式碼中。
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.Exists("lasttarget")))
    {
        var observed = ReadState("lasttarget");
        UO.Print("State 1/0: " + Convert.ToString(observed));
    }

    return null;
}

dynamic ReadState(dynamic obj)
{
    return UO.GetPoisoned(obj);
}

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

3。注意半秒的變化——腳本類

參數與執行流程:

  • 兩個不帶參數的呼叫讀取self,UO.Wait(500)設定500毫秒。比較兩個影像;可以跳過中間轉換。沒有無盡的等待。
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

    async public Task<object?> RunScenarioAsync()
    {
        var before = UO.GetPoisoned();
        await Delay(500);
        var after = UO.GetPoisoned();
        if (Truth(before != after))
        {
            UO.Print("State changed: " + Convert.ToString(before) + " -> " + Convert.ToString(after));
        }

        return null;
    }

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

命令實作

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

UO.GetPoisoned() — UO.GetPoisoned()

參數: 沒有參數。

結果: int / Integer.

呼叫時:

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

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

serial => bridge.Poisoned(serial)

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

() => getter(bridge.Self)

建立 API: 這些函式負責註冊 API,不會在每次命令呼叫時重新執行。

UO.GetPoisoned(value) — UO.GetPoisoned(Any)

參數: value (Any)

結果: int / Integer.

呼叫時:

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

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

serial => bridge.Poisoned(serial)

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

value => getter(GetObject(value))

建立 API: 這些函式負責註冊 API,不會在每次命令呼叫時重新執行。


UO.GetRace

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

C# 簽章

int UO.GetRace();

從客戶端模型讀取角色的種族。

參數

沒有參數。

傳回值

int — 1=人類,2=精靈,3=石像鬼(依照客戶模型)。 0表示没有加载角色。它不是body/graphic,也不是serial。

行為

  • 讀取已經接收到的本地資料。該請求不會開啟狀態,也不會強制伺服器發送更新。死亡、地圖轉換或物件刪除後,兩次呼叫之間的值可能會改變。
  • C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。顯示你的角色的目前值 - 直接腳本

參數與執行流程:

  • 不帶參數的呼叫指的是 self。角色的種族被儲存在值中。
  • Convert.ToString 轉換要輸出的數字,不改變結果的意義。
var value = UO.GetRace();
UO.Print("GetRace: " + Convert.ToString(value));

2。在應用程式驗證中使用值 - 腳本函數

參數與執行流程:

  • 該值在沒有任何參數的情況下被讀取一次。角色的種族用於顯示的計算或條件。
  • 數字閾值是腳本條件的範例,而不是新的客戶端限制。此欄位儲存上述伺服器單元和限制。
return  RunScenario();
 object? RunScenario()
{
    var value = UO.GetRace();
    if (Truth(value == 3))
    {
        UO.Print("Player race is gargoyle");
    }

    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。一秒看變化——腳本類

參數與執行流程:

  • 兩個不帶參數的呼叫都會讀取它們的目前值。 UO.Wait(1000) 在兩次拍攝之間提供以毫秒為單位的暫停。
  • 變化比較:性格種族。榜樣不會改變世界上的任何事情,也不會無止盡地等待。這一秒鐘內的事件可能會被錯過。
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

    async public Task<object?> RunScenarioAsync()
    {
        var before = UO.GetRace();
        await Delay(1000);
        var after = UO.GetRace();
        if (Truth(before != after))
        {
            UO.Print("Before: " + Convert.ToString(before) + "; after: " + Convert.ToString(after));
        }

        return null;
    }

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

命令實作

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

UO.GetRace() — UO.GetRace()

參數: 沒有參數。

結果: int / Integer.

呼叫時:

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

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

() => bridge.Race

建立 API: 這些函式負責註冊 API,不會在每次命令呼叫時重新執行。


UO.GetResist

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

C# 簽章

int UO.GetResist(object? resistance);

使用數字或字串選擇器讀取角色的阻力之一。

參數

  • resistance — 需要電阻。數字:0=物理,1=火,2=寒冷,3=毒,4=能量。線:物理/物理/裝甲,火,冷,毒,能量。大小寫和尾隨空格將被忽略。沒有serial、type、hue、視線或第二個參數。

傳回值

int 是簽章狀態值,客戶端模型中的 -32768..32767。負值被保留。 0可以是真正的抵抗,缺乏數據或失踪/被毀壞的玩家;對於未知選擇器,GetResist 還給出 0。這不是bool、ID、技能或阻力極限。 1表示一分,不是成功。

行為

  • GetResistance首先區分值類型:字串「1」和「0」是未知名稱,給出0且不是數字選擇器。非字串 double 將分數丟棄為零:1.9 -> fire,-0.9 -> 物理。 true=1選擇火,false=0選擇物理;陣列/null也轉換為0。使用顯式整數或有效名稱。不允許使用名稱 AddObject。
  • GetResistance 剛好選擇一個橋接欄位。未知數字/名稱給出 int 0 而不讀取該欄位。此指令不會自動刪除五個值,也不會更改電阻。
  • PhysicalResistance - 伺服器護甲/狀態列:經典伺服器可以傳送護甲等級,有抗性的規則可以傳送物理抗性。 API 不會從一種轉換為另一種,也不會計算傷害減免的百分比。 Armor 和實體別名讀取相同的欄位。
  • 元素場有擴展 CharacterStatus (0x11)、type >= 4。該命令本身不檢查伺服器紀元。沒有這些欄位的 Compact/old 狀態會離開先前的快取;新玩家原本是0。抗毒不是Poisoned標誌;這也不是抵抗法術的技能。
  • CharacterStatus在更改名字、健康狀況和自身特徵之前檢查所需的身體,然後將每個抵抗詞翻譯成帶符號的Int16。修剪後的強制主體不會改變先前的資料。可選尾部type6保留相同的規則;電阻指令不會從中讀取最大限制。
  • 呼叫遊戲流上的讀取,並能夠透過腳本取消等待。不查詢狀態、不開啟目標、不發送資料包、不改變特性、不新增延遲。
  • 每次呼叫都會重新讀取本地資料。變數儲存快照;各個讀取可能會收到不同的伺服器更新。非零結果不會測試連線。零可以是一個值,也可以沒有資料。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。按不同大小寫的名稱選擇 - 直接腳本

參數與執行流程:

  • sistance=" FiRe " 刪除尾隨空格後選擇火,且不區分大小寫。值還是有符號數;景象沒有出現。
var value = UO.GetResist(" FiRe ");
UO.Print("Fire resistance: " + Convert.ToString(value));

2。比較數字和字串選擇器 - 腳本函數

參數與執行流程:

  • 2選擇冷; 「毒」-毒藥。這些是選擇器,而不是serial。比較兩個快照回傳bool;中毒抗性並不能判斷角色是否中毒。
return  RunScenario();
 object? RunScenario()
{
    var cold = UO.GetResist(2);
    var poison = UO.GetResist("poison");
    if (Truth(cold < poison))
    {
        UO.Print("Cold resistance is lower");
    }
    else
    {
        UO.Print("Cold resistance is equal or higher");
    }

    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。完整的最小電阻測試功能-腳本類

參數與執行流程:

  • 最小值 =50 是要求的範例,而不是客戶端限制。 ResistanceAtLeast 拒絕遺失的玩家,讀取一個值並回傳 bool: true 或 false 如果值 >= 最小值。电阻本身不是bool。該函數的完整聲明如下。
  • 選擇器從函數傳遞到GetResist,沒有任何改變;此範例使用「火」。此函數檢查 Player 是否存在,但不驗證任意選擇器,也不確認狀態的新鮮度。使用上面列表中的選擇器。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        if (Truth(Truth(ResistanceAtLeast("fire", 50)) == true))
        {
            UO.Print("Local fire resistance requirement met");
        }
        else
        {
            UO.Print("Requirement not met or no player");
        }

        return null;
    }

    dynamic ResistanceAtLeast(dynamic selector, dynamic minimum)
    {
        if (Truth(UO.Self() == 0))
        {
            return false;
        }

        var value = UO.GetResist(selector);
        return value >= minimum;
    }

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

命令實作

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

UO.GetResist(resistance) — UO.GetResist(Any)

參數: resistance (Any)

結果: int / Integer.

呼叫時:

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

private int GetResistance(InjectionValue resistance)

        {

            if (resistance.Kind != InjectionValueKind.String)

            {

                switch (NumberConversions.ToInt(resistance))

                {

                    case 0: return bridge.Armor;

                    case 1: return bridge.FireResistance;

                    case 2: return bridge.ColdResistance;

                    case 3: return bridge.PoisonResistance;

                    case 4: return bridge.EnergyResistance;

                    default: return 0;

                }

            }



            switch ((resistance.String ?? string.Empty).Trim().ToLowerInvariant())

            {

                case "physical":

                case "phys":

                case "armor": return bridge.Armor;

                case "fire": return bridge.FireResistance;

                case "cold": return bridge.ColdResistance;

                case "poison": return bridge.PoisonResistance;

                case "energy": return bridge.EnergyResistance;

                default: return 0;

            }

        }

UO.GetResistCold

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

C# 簽章

int UO.GetResistCold();

讀取目前角色的抵抗力場:冷。

參數

沒有參數。

傳回值

int 是簽章狀態值,客戶端模型中的 -32768..32767。負值被保留。 0可以是真正的抵抗,缺乏數據或失踪/被毀壞的玩家;對於未知選擇器,GetResist 還給出 0。這不是bool、ID、技能或阻力極限。 1表示一分,不是成功。

行為

  • 此指令不帶參數。使用上面的確切簽名。
  • 如果目前Player存在且尚未被銷毀,則在遊戲執行緒上讀取需要Player.ColdResistance;否則0。設備不排序,獎金不重新計算,狀態不要求,並且沒有等待更新。存在的鬼魂不等於被摧毀的玩家。
  • 元素場有擴展 CharacterStatus (0x11)、type >= 4。該命令本身不檢查伺服器紀元。沒有這些欄位的 Compact/old 狀態會離開先前的快取;新玩家原本是0。抗毒不是Poisoned標誌;這也不是抵抗法術的技能。
  • CharacterStatus在更改名字、健康狀況和自身特徵之前檢查所需的身體,然後將每個抵抗詞翻譯成帶符號的Int16。修剪後的強制主體不會改變先前的資料。可選尾部type6保留相同的規則;電阻指令不會從中讀取最大限制。
  • 每次呼叫都會重新讀取本地資料。變數儲存快照;各個讀取可能會收到不同的伺服器更新。非零結果不會測試連線。零可以是一個值,也可以沒有資料。
  • 這些函式負責註冊 API,不會在每次命令呼叫時重新執行。 C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。列印已儲存的值 - 直接腳本

參數與執行流程:

  • value 儲存一次呼叫的結果。 Convert.ToString 格式化日誌的數字。沒有任何爭論:你可以讀懂自己的個性。
var value = UO.GetResistCold();
UO.Print("ColdResistance: " + Convert.ToString(value));

2。比較兩個圖像 - 腳本函數

參數與執行流程:

  • 前後有UO.Wait(500)毫秒;差異可以是負數。可能會錯過臨時更新。暫停指的是範例,而不是延遲API。
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var before = UO.GetResistCold();
    await Delay(500);
    var after = UO.GetResistCold();
    var difference = after - before;
    UO.Print("Resistance change: " + Convert.ToString(difference));
    return null;
}

Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));

3。完整的最小電阻測試功能-腳本類

參數與執行流程:

  • 最小值 =50 是要求的範例,而不是客戶端限制。 ResistanceAtLeast 拒絕遺失的玩家,讀取一個值並回傳 bool: true 或 false 如果值 >= 最小值。电阻本身不是bool。該函數的完整聲明如下。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        if (Truth(Truth(ResistanceAtLeast(50)) == true))
        {
            UO.Print("Local resistance requirement met");
        }
        else
        {
            UO.Print("Requirement not met or no player");
        }

        return null;
    }

    dynamic ResistanceAtLeast(dynamic minimum)
    {
        if (Truth(UO.Self() == 0))
        {
            return false;
        }

        var value = UO.GetResistCold();
        return value >= minimum;
    }

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

命令實作

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

UO.GetResistCold() — UO.GetResistCold()

參數: 沒有參數。

結果: int / Integer.

呼叫時:

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

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

() => bridge.ColdResistance

建立 API: 這些函式負責註冊 API,不會在每次命令呼叫時重新執行。


UO.GetResistEnergy

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

C# 簽章

int UO.GetResistEnergy();

讀取目前角色的阻力場:能量。

參數

沒有參數。

傳回值

int 是簽章狀態值,客戶端模型中的 -32768..32767。負值被保留。 0可以是真正的抵抗,缺乏數據或失踪/被毀壞的玩家;對於未知選擇器,GetResist 還給出 0。這不是bool、ID、技能或阻力極限。 1表示一分,不是成功。

行為

  • 此指令不帶參數。使用上面的確切簽名。
  • 如果目前Player存在且尚未被銷毀,則在遊戲執行緒上讀取需要Player.EnergyResistance;否則0。設備不排序,獎金不重新計算,狀態不要求,並且沒有等待更新。存在的鬼魂不等於被摧毀的玩家。
  • 元素場有擴展 CharacterStatus (0x11)、type >= 4。該命令本身不檢查伺服器紀元。沒有這些欄位的 Compact/old 狀態會離開先前的快取;新玩家原本是0。抗毒不是Poisoned標誌;這也不是抵抗法術的技能。
  • CharacterStatus在更改名字、健康狀況和自身特徵之前檢查所需的身體,然後將每個抵抗詞翻譯成帶符號的Int16。修剪後的強制主體不會改變先前的資料。可選尾部type6保留相同的規則;電阻指令不會從中讀取最大限制。
  • 每次呼叫都會重新讀取本地資料。變數儲存快照;各個讀取可能會收到不同的伺服器更新。非零結果不會測試連線。零可以是一個值,也可以沒有資料。
  • 這些函式負責註冊 API,不會在每次命令呼叫時重新執行。 C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。列印已儲存的值 - 直接腳本

參數與執行流程:

  • value 儲存一次呼叫的結果。 Convert.ToString 格式化日誌的數字。沒有任何爭論:你可以讀懂自己的個性。
var value = UO.GetResistEnergy();
UO.Print("EnergyResistance: " + Convert.ToString(value));

2。比較兩個圖像 - 腳本函數

參數與執行流程:

  • 前後有UO.Wait(500)毫秒;差異可以是負數。可能會錯過臨時更新。暫停指的是範例,而不是延遲API。
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var before = UO.GetResistEnergy();
    await Delay(500);
    var after = UO.GetResistEnergy();
    var difference = after - before;
    UO.Print("Resistance change: " + Convert.ToString(difference));
    return null;
}

Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));

3。完整的最小電阻測試功能-腳本類

參數與執行流程:

  • 最小值 =50 是要求的範例,而不是客戶端限制。 ResistanceAtLeast 拒絕遺失的玩家,讀取一個值並回傳 bool: true 或 false 如果值 >= 最小值。电阻本身不是bool。該函數的完整聲明如下。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        if (Truth(Truth(ResistanceAtLeast(50)) == true))
        {
            UO.Print("Local resistance requirement met");
        }
        else
        {
            UO.Print("Requirement not met or no player");
        }

        return null;
    }

    dynamic ResistanceAtLeast(dynamic minimum)
    {
        if (Truth(UO.Self() == 0))
        {
            return false;
        }

        var value = UO.GetResistEnergy();
        return value >= minimum;
    }

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

命令實作

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

UO.GetResistEnergy() — UO.GetResistEnergy()

參數: 沒有參數。

結果: int / Integer.

呼叫時:

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

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

() => bridge.EnergyResistance

建立 API: 這些函式負責註冊 API,不會在每次命令呼叫時重新執行。


UO.GetResistFire

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

C# 簽章

int UO.GetResistFire();

讀取目前角色的抵抗力場:火。

參數

沒有參數。

傳回值

int 是簽章狀態值,客戶端模型中的 -32768..32767。負值被保留。 0可以是真正的抵抗,缺乏數據或失踪/被毀壞的玩家;對於未知選擇器,GetResist 還給出 0。這不是bool、ID、技能或阻力極限。 1表示一分,不是成功。

行為

  • 此指令不帶參數。使用上面的確切簽名。
  • 如果目前Player存在且尚未被銷毀,則在遊戲執行緒上讀取需要Player.FireResistance;否則0。設備不排序,獎金不重新計算,狀態不要求,並且沒有等待更新。存在的鬼魂不等於被摧毀的玩家。
  • 元素場有擴展 CharacterStatus (0x11)、type >= 4。該命令本身不檢查伺服器紀元。沒有這些欄位的 Compact/old 狀態會離開先前的快取;新玩家原本是0。抗毒不是Poisoned標誌;這也不是抵抗法術的技能。
  • CharacterStatus在更改名字、健康狀況和自身特徵之前檢查所需的身體,然後將每個抵抗詞翻譯成帶符號的Int16。修剪後的強制主體不會改變先前的資料。可選尾部type6保留相同的規則;電阻指令不會從中讀取最大限制。
  • 每次呼叫都會重新讀取本地資料。變數儲存快照;各個讀取可能會收到不同的伺服器更新。非零結果不會測試連線。零可以是一個值,也可以沒有資料。
  • 這些函式負責註冊 API,不會在每次命令呼叫時重新執行。 C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。列印已儲存的值 - 直接腳本

參數與執行流程:

  • value 儲存一次呼叫的結果。 Convert.ToString 格式化日誌的數字。沒有任何爭論:你可以讀懂自己的個性。
var value = UO.GetResistFire();
UO.Print("FireResistance: " + Convert.ToString(value));

2。比較兩個圖像 - 腳本函數

參數與執行流程:

  • 前後有UO.Wait(500)毫秒;差異可以是負數。可能會錯過臨時更新。暫停指的是範例,而不是延遲API。
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var before = UO.GetResistFire();
    await Delay(500);
    var after = UO.GetResistFire();
    var difference = after - before;
    UO.Print("Resistance change: " + Convert.ToString(difference));
    return null;
}

Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));

3。完整的最小電阻測試功能-腳本類

參數與執行流程:

  • 最小值 =50 是要求的範例,而不是客戶端限制。 ResistanceAtLeast 拒絕遺失的玩家,讀取一個值並回傳 bool: true 或 false 如果值 >= 最小值。电阻本身不是bool。該函數的完整聲明如下。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        if (Truth(Truth(ResistanceAtLeast(50)) == true))
        {
            UO.Print("Local resistance requirement met");
        }
        else
        {
            UO.Print("Requirement not met or no player");
        }

        return null;
    }

    dynamic ResistanceAtLeast(dynamic minimum)
    {
        if (Truth(UO.Self() == 0))
        {
            return false;
        }

        var value = UO.GetResistFire();
        return value >= minimum;
    }

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

命令實作

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

UO.GetResistFire() — UO.GetResistFire()

參數: 沒有參數。

結果: int / Integer.

呼叫時:

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

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

() => bridge.FireResistance

建立 API: 這些函式負責註冊 API,不會在每次命令呼叫時重新執行。


UO.GetResistPhysical

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

C# 簽章

int UO.GetResistPhysical();

讀取目前角色的抵抗力場:物理護甲/抵抗力。

參數

沒有參數。

傳回值

int 是簽章狀態值,客戶端模型中的 -32768..32767。負值被保留。 0可以是真正的抵抗,缺乏數據或失踪/被毀壞的玩家;對於未知選擇器,GetResist 還給出 0。這不是bool、ID、技能或阻力極限。 1表示一分,不是成功。

行為

  • 此指令不帶參數。使用上面的確切簽名。
  • 如果目前Player存在且尚未被銷毀,則在遊戲執行緒上讀取需要Player.PhysicalResistance;否則0。設備不排序,獎金不重新計算,狀態不要求,並且沒有等待更新。存在的鬼魂不等於被摧毀的玩家。
  • PhysicalResistance - 伺服器護甲/狀態列:經典伺服器可以傳送護甲等級,有抗性的規則可以傳送物理抗性。 API 不會從一種轉換為另一種,也不會計算傷害減免的百分比。 Armor 和實體別名讀取相同的欄位。
  • CharacterStatus在更改名字、健康狀況和自身特徵之前檢查所需的身體,然後將每個抵抗詞翻譯成帶符號的Int16。修剪後的強制主體不會改變先前的資料。可選尾部type6保留相同的規則;電阻指令不會從中讀取最大限制。
  • 每次呼叫都會重新讀取本地資料。變數儲存快照;各個讀取可能會收到不同的伺服器更新。非零結果不會測試連線。零可以是一個值,也可以沒有資料。
  • 這些函式負責註冊 API,不會在每次命令呼叫時重新執行。 C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。列印已儲存的值 - 直接腳本

參數與執行流程:

  • value 儲存一次呼叫的結果。 Convert.ToString 格式化日誌的數字。沒有任何爭論:你可以讀懂自己的個性。
var value = UO.GetResistPhysical();
UO.Print("PhysicalResistance: " + Convert.ToString(value));

2。比較兩個圖像 - 腳本函數

參數與執行流程:

  • 前後有UO.Wait(500)毫秒;差異可以是負數。可能會錯過臨時更新。暫停指的是範例,而不是延遲API。
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var before = UO.GetResistPhysical();
    await Delay(500);
    var after = UO.GetResistPhysical();
    var difference = after - before;
    UO.Print("Resistance change: " + Convert.ToString(difference));
    return null;
}

Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));

3。完整的最小電阻測試功能-腳本類

參數與執行流程:

  • 最小值 =50 是要求的範例,而不是客戶端限制。 ResistanceAtLeast 拒絕遺失的玩家,讀取一個值並回傳 bool: true 或 false 如果值 >= 最小值。电阻本身不是bool。該函數的完整聲明如下。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        if (Truth(Truth(ResistanceAtLeast(50)) == true))
        {
            UO.Print("Local resistance requirement met");
        }
        else
        {
            UO.Print("Requirement not met or no player");
        }

        return null;
    }

    dynamic ResistanceAtLeast(dynamic minimum)
    {
        if (Truth(UO.Self() == 0))
        {
            return false;
        }

        var value = UO.GetResistPhysical();
        return value >= minimum;
    }

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

命令實作

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

UO.GetResistPhysical() — UO.GetResistPhysical()

參數: 沒有參數。

結果: int / Integer.

呼叫時:

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

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

() => bridge.Armor

建立 API: 這些函式負責註冊 API,不會在每次命令呼叫時重新執行。


UO.GetResistPoison

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

C# 簽章

int UO.GetResistPoison();

讀取目前角色的抗性場:毒。

參數

沒有參數。

傳回值

int 是簽章狀態值,客戶端模型中的 -32768..32767。負值被保留。 0可以是真正的抵抗,缺乏數據或失踪/被毀壞的玩家;對於未知選擇器,GetResist 還給出 0。這不是bool、ID、技能或阻力極限。 1表示一分,不是成功。

行為

  • 此指令不帶參數。使用上面的確切簽名。
  • 如果目前Player存在且尚未被銷毀,則在遊戲執行緒上讀取需要Player.PoisonResistance;否則0。設備不排序,獎金不重新計算,狀態不要求,並且沒有等待更新。存在的鬼魂不等於被摧毀的玩家。
  • 元素場有擴展 CharacterStatus (0x11)、type >= 4。該命令本身不檢查伺服器紀元。沒有這些欄位的 Compact/old 狀態會離開先前的快取;新玩家原本是0。抗毒不是Poisoned標誌;這也不是抵抗法術的技能。
  • CharacterStatus在更改名字、健康狀況和自身特徵之前檢查所需的身體,然後將每個抵抗詞翻譯成帶符號的Int16。修剪後的強制主體不會改變先前的資料。可選尾部type6保留相同的規則;電阻指令不會從中讀取最大限制。
  • 每次呼叫都會重新讀取本地資料。變數儲存快照;各個讀取可能會收到不同的伺服器更新。非零結果不會測試連線。零可以是一個值,也可以沒有資料。
  • 這些函式負責註冊 API,不會在每次命令呼叫時重新執行。 C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。列印已儲存的值 - 直接腳本

參數與執行流程:

  • value 儲存一次呼叫的結果。 Convert.ToString 格式化日誌的數字。沒有任何爭論:你可以讀懂自己的個性。
var value = UO.GetResistPoison();
UO.Print("PoisonResistance: " + Convert.ToString(value));

2。比較兩個圖像 - 腳本函數

參數與執行流程:

  • 前後有UO.Wait(500)毫秒;差異可以是負數。可能會錯過臨時更新。暫停指的是範例,而不是延遲API。
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var before = UO.GetResistPoison();
    await Delay(500);
    var after = UO.GetResistPoison();
    var difference = after - before;
    UO.Print("Resistance change: " + Convert.ToString(difference));
    return null;
}

Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));

3。完整的最小電阻測試功能-腳本類

參數與執行流程:

  • 最小值 =50 是要求的範例,而不是客戶端限制。 ResistanceAtLeast 拒絕遺失的玩家,讀取一個值並回傳 bool: true 或 false 如果值 >= 最小值。电阻本身不是bool。該函數的完整聲明如下。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        if (Truth(Truth(ResistanceAtLeast(50)) == true))
        {
            UO.Print("Local resistance requirement met");
        }
        else
        {
            UO.Print("Requirement not met or no player");
        }

        return null;
    }

    dynamic ResistanceAtLeast(dynamic minimum)
    {
        if (Truth(UO.Self() == 0))
        {
            return false;
        }

        var value = UO.GetResistPoison();
        return value >= minimum;
    }

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

命令實作

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

UO.GetResistPoison() — UO.GetResistPoison()

參數: 沒有參數。

結果: int / Integer.

呼叫時:

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

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

() => bridge.PoisonResistance

建立 API: 這些函式負責註冊 API,不會在每次命令呼叫時重新執行。

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