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

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

特點 — 4

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

參考章節

1 · 2 · 3 · 4 · 5

完整指令說明


UO.MaxStamina

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

C# 簽章

int UO.MaxStamina();

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

參數

沒有參數。

傳回值

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.MaxStamina();
UO.Print("MaxStamina: " + Convert.ToString(result));

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

參數與執行流程:

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

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

參數與執行流程:

  • 顯示該欄位應用的閾值或計算。條件中的數字是範例設置,而不是伺服器限制。在除以最大值之前,檢查其正值。
return  RunScenario();
 object? RunScenario()
{
    var value = UO.MaxStamina();
    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.MaxStamina();
    }

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

命令實作

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

UO.MaxStamina() — UO.MaxStamina()

參數: 沒有參數。

結果: int / Integer.

呼叫時:

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

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

() => bridge.MaxStamina

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


UO.MaxWeight

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

C# 簽章

int UO.MaxWeight();

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

參數

沒有參數。

傳回值

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.MaxWeight();
UO.Print("MaxWeight: " + Convert.ToString(result));

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

參數與執行流程:

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

2。觀察變化 - 腳本函數

參數與執行流程:

  • UO.Wait(500)前後間隔500毫秒。差值可以是正數、零或負數;暫時更新和角色變更可能會被跳過。暫停就是一個例子。
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var before = UO.MaxWeight();
    await Delay(500);
    var after = UO.MaxWeight();
    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.MaxWeight();
        if (Truth(maximum <= 0))
        {
            return false;
        }

        return extra <= maximum - current;
    }

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

命令實作

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

UO.MaxWeight() — UO.MaxWeight()

參數: 沒有參數。

結果: int / Integer.

呼叫時:

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

public int MaxWeight() => bridge.MaxWeight;

UO.Mount

C# 簽章

int UO.Mount();
int UO.Mount(object? mount);

行為與結果

Mount 與 Dismount 直接傳送使用物件請求,不需要手動雙擊,也不會套用戰鬥模式攻擊行為。int 是 Mount 層目前物品的 serial,並非成功旗標。伺服器回覆是非同步的:Mount 可能仍回傳 0,Dismount 可能回傳移除前的 serial。請在回覆後檢查 ObjAtLayer("Mount")。

參數

  • mount — 坐騎序號;省略時使用最後目標。

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

聊天指令

#mount 0x00001234
#mount

完整 C# 範例

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

1

int mountLayerSerial = UO.Mount(0x00001234);
UO.Print(UO.Int2Hex(mountLayerSerial));

2

int currentSerial = UO.Mount();
UO.Print(UO.Int2Hex(currentSerial));

3

UO.Mount(0x00001234);
for (int attempt = 0; attempt < 40; attempt++)
{
    var serial = UO.ObjAtLayer("Mount");
    if (Convert.ToString(serial) != "0" && Convert.ToString(serial) != "0x00000000")
    {
        UO.Print(Convert.ToString(serial));
        break;
    }
    await WaitAsync(50);
}

4

new CommandSample().Execute(UO);

sealed class CommandSample
{
    public void Execute(global::ClassicUO.CSharp.CSharpGameApi api)
    {
        int mountLayerSerial = api.Mount(0x00001234);
        api.Print(api.Int2Hex(mountLayerSerial));
    }
}

內部呼叫

CSharpGameApi.Mount
  -> CSharpScriptGlobals
  -> InjectionScript.Runtime.InjectionApiUO.Mount
ClassicUOInjectionApiBridge -> NativeMountController.Request
  -> OutgoingPackets.Send_UseObjectRequest (0x06)
  -> MountedLayerSerialUnsafe -> Player.FindItemByLayer(Layer.Mount)

來源

ClassicUO · ServUO BaseMount


UO.ObjAtLayer

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

C# 簽章

dynamic UO.ObjAtLayer(object? layer);

尋找您自己角色裝備的指定層上的物品。

參數

  • layer — 一個必需參數:圖層編號 1..29 或下面列表中的字串名稱。號碼0和名字無效給0。名稱的大小寫和尾隨空格將被忽略。未知的字串名稱會導致腳本錯誤;數字字串「1」不會替換數字1。

傳回值

對於該項目,數字形式傳回 int - serial,對於空/無效層返回 0。如果找到該項目,則字串形式傳回「0x40001001」形式的string,否則傳回int0。這是商品的 ID,而非層數、graphic/type 或數量。元資料object?字串形式反映了兩種可能的結果類型。

行為

  • 讀取本機用戶端模型;無需向伺服器發出請求,無需等待或移動。
  • 結果指的是閱讀的那一刻。在UO.Wait或其他操作之後,物件及其標誌可能會發生變化。
  • 檢查設備資料self。團隊不會打開袋子、穿上物品或發送檢查請求。
  • 1..29 以外的數字給出0,無需模轉換256;例如,257無法選擇右手。
  • 所有支援的數字圖層和字串名稱:
  • 1 OneHanded/Rhand/RightHand; 2 TwoHanded/Lhand/LeftHand; 3 Shoes; 4 Pants; 5 Shirt; 6 Helmet/Hat; 7 Gloves; 8 Ring; 9 Talisman; 10 Necklace/Neck.
  • 11 Hair; 12 Waist; 13 Torso; 14 Bracelet/Brace; 15 Face; 16 Beard; 17 Tunic; 18 Earrings/Ear; 19 Arms; 20 Cloak.
  • 21 Backpack/Bpack/BackpackLayer; 22 Robe; 23 Skirt; 24 Legs; 25 Mount; 26 ShopBuyRestock/Rstk; 27 ShopBuy/NRstk; 28 ShopSell/Sell; 29 Bank.

獨立的 C# 腳本

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

簡單範例

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

object? item = UO.ObjAtLayer("Rhand");
if (item is string serial) UO.Print("Equipped serial: " + serial);
else UO.Print("The layer is empty");

1。右手邊的項目按圖層名稱 - 直接腳本

參數與執行流程:

  • Rhand 選擇圖層1。如果成功,hand是一個十六進位字串;如果不存在,則編號0。
  • Convert.ToString 允許您輸出兩種可能的類型。結果不能作為武器的graphic。
object? hand = UO.ObjAtLayer("Rhand");
if (hand is string serial)
{
    UO.Print("Right hand serial: " + serial);
}
else
{
    UO.Print("Right hand is empty 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。數字圖層和項目屬性 - 腳本功能

參數與執行流程:

  • 數字2選擇TwoHanded。此形式始終回傳int。
  • Exists 檢查該項目是否可用於讀取其屬性。 GetGraphic 回傳一個單獨的type。
return  RunScenario();
 object? RunScenario()
{
    var item = UO.ObjAtLayer(2);
    if (Truth(UO.Exists(item)))
    {
        UO.Print("Two-handed layer serial: " + Convert.ToString(item));
        UO.Print("Graphic: " + UO.GetGraphic(item));
    }

    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。取得背包並檢查無效圖層 - 腳本類

參數與執行流程:

  • 21—層Backpack;在裝載設備之前,結果0是可能的。
  • 257 在列表之外,並且始終給出 0。這不是 1 層的替代名稱。
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 bag = UO.ObjAtLayer(21);
        var invalid = UO.ObjAtLayer(257);
        UO.Print("Backpack serial: " + Convert.ToString(bag));
        UO.Print("Invalid layer: " + Convert.ToString(invalid));
        return null;
    }
}

命令實作

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

UO.ObjAtLayer(layer) — UO.ObjAtLayer(Any)

參數: layer (Any/String)

結果: dynamic / Integer.

呼叫時:

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

case "objatlayer":

                    return new InjectionValue(arguments[0].Kind == InjectionValueKind.String

                        ? GetObject(ObjAtLayer(Text(0))) : bridge.ObjAtLayer(Arg(0)));

UO.ObjAtLayer(layer) — UO.ObjAtLayer(String)

參數: layer (Any/String)

結果: dynamic / Any.

呼叫時:

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

public InjectionValue ObjAtLayer(string layer)

        {

            var id = bridge.ObjAtLayer(ConvertLayer(layer));

            if (id == 0)

                return InjectionValue.Zero;



            return new InjectionValue("0x" + id.ToString("X8"));

        }

UO.ObjAtLayerEx

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

C# 簽章

int UO.ObjAtLayerEx(object? layerType, object? playerID);

讀取指定層中指定載入角色的項目/容器。

參數

  • layerType — 層的編號1..29。接受整數或數字字串,例如 26 或“0x1A”。字串名稱 Rhand/ShopBuyRestock 和裸層常數此處不轉換為數字。使用一個號碼。
  • playerID — 字元序列/mobile,數字、十六進位字串或可解析的物件名稱,例如「self」/「lasttarget」。物品的圖形/type或容器本身的ID不合適。

傳回值

int:圖層上的項目/容器的serial,或0(如果圖層為空/未知、編號無效或沒有載入行動裝置)。這不是 bool 或層數。

行為

  • 讀取是本地的,無目標、無購買、無開箱、無網路請求。
  • 檢查範圍 1..29。轉換不合適的字串參數可能會導致錯誤;不應傳遞任意圖層名稱來取代數字。
  • 單獨的UO.ObjAtLayer可用於具有字串圖層名稱的自訂字元。不要將圖層與worldZ、靜態索引或阿甘座標混淆。

獨立的 C# 腳本

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

簡單範例

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

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

var result = UO.ObjAtLayerEx(26, UO.GetSerial("lasttarget"));
UO.Print("ObjAtLayerEx: " + Convert.ToString(result));

1。接收商店容器並列出產品 - 直接腳本

參數與執行流程:

  • LayerType=26;玩家ID=供應商;商店 — serial 貨櫃。對於GetContent,傳遞的是店鋪,而不是層數。
  • 此數組的索引從0到長度減去1。每個元素都是serial。空數組意味著沒有立即載入元素;購買未完成。
var vendor = UO.GetSerial("lasttarget");
if (Truth(vendor == "0x00000000"))
{
    UO.Print("Vendor not selected");
    return null;
}
var shop = UO.ObjAtLayerEx(26, vendor);
if (Truth(shop == 0))
{
    UO.Print("ShopBuyRestock container is not loaded");
    return null;
}
UO.Print("Shop container ID: " + Convert.ToString(shop));
var items = UO.GetContent(shop);
var i = 0;
while (Truth(i < ArrayLength(items)))
{
    var item = items[i];
    UO.Print(UO.GetName(item) + " | ID: " + Convert.ToString(item));
    UO.Print("Graphic: " + Convert.ToString(UO.GetType(item)));
    i = i + 1;
}
UO.Print("Loaded entries: " + Convert.ToString(ArrayLength(items)));

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;

2。選擇所需graphic的商品並統計個數 - 腳本功能

參數與執行流程:

  • wantedType是graphic,item是單一item的ID。堆疊計數記錄/堆疊;單位將其中的數字相加。
  • 這是已收到數量的讀數,而不是未來購買所保證的餘額。這裡沒有指定價格。
return  RunScenario();
 object? RunScenario()
{
    var vendor = UO.GetSerial("lasttarget");
    if (Truth(vendor == "0x00000000"))
    {
        UO.Print("Vendor not selected");
        return null;
    }

    var shop = UO.ObjAtLayerEx(26, vendor);
    if (Truth(shop == 0))
    {
        UO.Print("Shop layer is not loaded");
        return null;
    }

    var wantedType = 0x1766;
    var stacks = 0;
    var units = 0;
    var items = UO.GetContent(shop);
    var i = 0;
    while (Truth(i < ArrayLength(items)))
    {
        var item = items[i];
        if (Truth(UO.GetType(item) == wantedType))
        {
            stacks = stacks + 1;
            units = units + UO.GetQuantity(item);
        }

        i = i + 1;
    }

    UO.Print("Stacks: " + Convert.ToString(stacks) + " | Units: " + Convert.ToString(units));
    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;

3。透過完整的過程比較三個商店層 - 腳本類

參數與執行流程:

  • ShowVendorLayer 被完整聲明。供應商 - ID NPC、layerNumber - 26/27/28,標題 - 僅簽名。
  • 客戶端可能不知道容器。 0 在 GetContent 之前檢查:明確的 GetContent(0) 意味著要求地面上的物品,這裡不需要。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var vendor = UO.GetSerial("lasttarget");
        if (Truth(vendor == "0x00000000"))
        {
            UO.Print("Vendor not selected");
            return null;
        }

        ShowVendorLayer(vendor, 26, "ShopBuyRestock / Rstk");
        ShowVendorLayer(vendor, 27, "ShopBuy / NRstk");
        ShowVendorLayer(vendor, 28, "ShopSell / Sell");
        return null;
    }

    void ShowVendorLayer(dynamic vendor, dynamic layerNumber, dynamic caption)
    {
        var container = UO.ObjAtLayerEx(layerNumber, vendor);
        if (Truth(container == 0))
        {
            UO.Print(caption + ": not loaded");
            return;
        }

        var items = UO.GetContent(container);
        UO.Print(caption + " | Container ID: " + Convert.ToString(container));
        UO.Print("Loaded entries: " + Convert.ToString(ArrayLength(items)));
    }

    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.ObjAtLayerEx(layerType, playerID) — UO.ObjAtLayerEx(Any,Any)

參數: layerType (Any), playerID (Any)

結果: int / Integer.

呼叫時:

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

case "objatlayerex": return new InjectionValue(bridge.ObjAtLayerEx(Arg(0), Arg(1)));

UO.Paralyzed

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

C# 簽章

int UO.Paralyzed();
int UO.Paralyzed(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.Paralyzed();
UO.Print("Paralyzed: " + Convert.ToString(result));

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

參數與執行流程:

  • 空括號選擇 self。 state 儲存標誌的一個快照; true — 數值常數 1。
  • false 的結果並不排除因牆壁、缺乏耐力或其他原因而停止。
var state = UO.Paralyzed();
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.Paralyzed(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.Paralyzed()) == true) && Truth(attempts < 10))
        {
            await Delay(100);
            attempts = attempts + 1;
        }

        if (Truth(UO.IsNPC("self")))
        {
            if (Truth(Truth(UO.Paralyzed()) == 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.Paralyzed() — UO.Paralyzed()

參數: 沒有參數。

結果: int / Integer.

呼叫時:

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

case "paralyzed": return new InjectionValue(bridge.GetLocked(bridge.Self));

UO.Paralyzed(value) — UO.Paralyzed(Any)

參數: value (Any)

結果: int / Integer.

呼叫時:

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

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

serial => bridge.GetLocked(serial)

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

value => getter(GetObject(value))

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


UO.PhysicalResist

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

C# 簽章

int UO.PhysicalResist();

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

參數

沒有參數。

傳回值

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.PhysicalResist();
UO.Print("PhysicalResist: " + Convert.ToString(result));

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

參數與執行流程:

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

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

參數與執行流程:

  • 前後有UO.Wait(500)毫秒;差異可以是負數。可能會錯過臨時更新。暫停指的是範例,而不是延遲API。
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var before = UO.PhysicalResist();
    await Delay(500);
    var after = UO.PhysicalResist();
    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.PhysicalResist();
        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.PhysicalResist() — UO.PhysicalResist()

參數: 沒有參數。

結果: int / Integer.

呼叫時:

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

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

() => bridge.Armor

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


UO.Poison

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

C# 簽章

void UO.Poison();
void UO.Poison(object? target);

如有必要,對給定目標使用中毒技能。

參數

  • target - 可選的serial/目標別名。沒有參數 - 只有UseSkill(「中毒」)。帶參數 - UseSkillAtTarget(“中毒”,目標)。

傳回值

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

行為

  • 註冊的舊命令不是中毒抵抗或中毒狀態的吸氣劑。分支召喚技能並丟棄它1/0。
  • 在有目標的形式中,UseSkillAtTarget檢查serial是否為正,在請求技能之前準備好目標;如果不接受該技能,則取消目標。不保證目標會被伺服器中毒。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。直接呼叫-直接腳本

參數與執行流程:

  • 如有必要,對給定目標使用中毒技能。
UO.Poison();

2。明確選項 - 腳本函數

參數與執行流程:

  • 註冊的舊命令不是中毒抵抗或中毒狀態的吸氣劑。分支召喚技能並丟棄它1/0。
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.Exists("lasttarget")))
    {
        UO.Poison("lasttarget");
    }

    return null;
}

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

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

參數與執行流程:

  • 在有目標的形式中,UseSkillAtTarget檢查serial是否為正,在請求技能之前準備好目標;如果不接受該技能,則取消目標。不保證目標會被伺服器中毒。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var id = UO.GetSerial("lasttarget");
        if (Truth(UO.Exists(id)))
        {
            UO.Poison(id);
            UO.Print(UO.Waiting());
        }

        return null;
    }

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

命令實作

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

UO.Poison() — UO.Poison()

參數: 沒有參數。

結果: void / Unit.

呼叫時:

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

case "poison":

                    if (arguments.Length > 0) UseSkillAtTarget(new InjectionValue("Poisoning"), arguments[0]);

                    else UseSkill("Poisoning");

                    break;

UO.Poison(target) — UO.Poison(Any)

參數: target (Any)

結果: void / Unit.

呼叫時:

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

case "poison":

                    if (arguments.Length > 0) UseSkillAtTarget(new InjectionValue("Poisoning"), arguments[0]);

                    else UseSkill("Poisoning");

                    break;

UO.PoisonResist

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

C# 簽章

int UO.PoisonResist();

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

參數

沒有參數。

傳回值

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.PoisonResist();
UO.Print("PoisonResist: " + Convert.ToString(result));

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

參數與執行流程:

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

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

參數與執行流程:

  • 前後有UO.Wait(500)毫秒;差異可以是負數。可能會錯過臨時更新。暫停指的是範例,而不是延遲API。
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var before = UO.PoisonResist();
    await Delay(500);
    var after = UO.PoisonResist();
    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.PoisonResist();
        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.PoisonResist() — UO.PoisonResist()

參數: 沒有參數。

結果: int / Integer.

呼叫時:

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

case "poisonresist": return new InjectionValue(bridge.PoisonResistance);

UO.Poisoned

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

C# 簽章

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

檢查角色中毒情況。

參數

  • id — 所示形式的可選物件: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.Poisoned();
UO.Print("Poisoned: " + Convert.ToString(result));

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

參數與執行流程:

  • 空括號讀作self。 active 保存一次結果;true和 false定義了兩個分支。 Print 僅顯示範例訊息。
var active = UO.Poisoned();
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.Poisoned(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.Poisoned();
        await Delay(500);
        var after = UO.Poisoned();
        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.Poisoned() — UO.Poisoned()

參數: 沒有參數。

結果: int / Integer.

呼叫時:

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

public int Poisoned() => bridge.Poisoned(bridge.Self);

UO.Poisoned(id) — UO.Poisoned(Any)

參數: id (Any)

結果: int / Integer.

呼叫時:

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

public int Poisoned(InjectionValue id) => bridge.Poisoned(GetObject(id));

UO.Race

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

C# 簽章

dynamic UO.Race();

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

參數

沒有參數。

傳回值

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

行為

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

獨立的 C# 腳本

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

簡單範例

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

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

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

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

參數與執行流程:

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

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

參數與執行流程:

  • 該值在沒有任何參數的情況下被讀取一次。角色的種族用於顯示的計算或條件。
  • 數字閾值是腳本條件的範例,而不是新的客戶端限制。此欄位儲存上述伺服器單元和限制。
return  RunScenario();
 object? RunScenario()
{
    var value = UO.Race();
    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.Race();
        await Delay(1000);
        var after = UO.Race();
        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.Race() — UO.Race()

參數: 沒有參數。

結果: dynamic / Any.

呼叫時:

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

case "race": return new InjectionValue(bridge.Race);

UO.RemoveEarrings

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

C# 簽章

void UO.RemoveEarrings();

請求從 Ear 層移除一個項目。

參數

沒有參數。

傳回值

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

行為

  • ExecuteLegacyManualAlias 呼叫 Unequip(“Ear”)。 ConvertLayer 選擇數字層、橋。 Unequip請求轉移到背包。
  • 舊指令內部 Unequip (1/0) 的結果被丟棄;撥打單獨的線路。如果沒有物品/背包,則請求可能不會被執行。呼叫後的ObjAtLayer檢查僅讀取本地狀態。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。直接呼叫-直接腳本

參數與執行流程:

  • 請求從 Ear 層移除一個項目。
UO.RemoveEarrings();

2。明確選項 - 腳本函數

參數與執行流程:

  • ExecuteLegacyManualAlias 呼叫 Unequip(“Ear”)。 ConvertLayer 選擇數字層、橋。 Unequip請求轉移到背包。
return  RunScenario();
 object? RunScenario()
{
    UO.Print(UO.ObjAtLayer("Ear"));
    UO.RemoveEarrings();
    return null;
}

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

參數與執行流程:

  • 舊指令內部 Unequip (1/0) 的結果被丟棄;撥打單獨的線路。如果沒有物品/背包,則請求可能不會被執行。呼叫後的ObjAtLayer檢查僅讀取本地狀態。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        UO.RemoveEarrings();
        UO.Wait(500);
        UO.Print(UO.ObjAtLayer("Ear"));
        return null;
    }
}

命令實作

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

UO.RemoveEarrings() — UO.RemoveEarrings()

參數: 沒有參數。

結果: void / Unit.

呼叫時:

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

case "removeearrings": Unequip("Ear"); break;

UO.RemoveHat

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

C# 簽章

void UO.RemoveHat();

請求從 Hat 層移除項目。

參數

沒有參數。

傳回值

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

行為

  • ExecuteLegacyManualAlias 呼叫Unequip(「帽子」)。 ConvertLayer 選擇數字層、橋。 Unequip請求轉移到背包。
  • 舊指令內部 Unequip (1/0) 的結果被丟棄;撥打單獨的線路。如果沒有物品/背包,則請求可能不會被執行。呼叫後的ObjAtLayer檢查僅讀取本地狀態。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。直接呼叫-直接腳本

參數與執行流程:

  • 請求從 Hat 層移除項目。
UO.RemoveHat();

2。明確選項 - 腳本函數

參數與執行流程:

  • ExecuteLegacyManualAlias 呼叫Unequip(「帽子」)。 ConvertLayer 選擇數字層、橋。 Unequip請求轉移到背包。
return  RunScenario();
 object? RunScenario()
{
    UO.Print(UO.ObjAtLayer("Hat"));
    UO.RemoveHat();
    return null;
}

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

參數與執行流程:

  • 舊指令內部 Unequip (1/0) 的結果被丟棄;撥打單獨的線路。如果沒有物品/背包,則請求可能不會被執行。呼叫後的ObjAtLayer檢查僅讀取本地狀態。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        UO.RemoveHat();
        UO.Wait(500);
        UO.Print(UO.ObjAtLayer("Hat"));
        return null;
    }
}

命令實作

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

UO.RemoveHat() — UO.RemoveHat()

參數: 沒有參數。

結果: void / Unit.

呼叫時:

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

case "removehat": Unequip("Hat"); break;

UO.RemoveNeckless

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

C# 簽章

void UO.RemoveNeckless();

請求從 Neck 層移除一個項目。

參數

沒有參數。

傳回值

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

行為

  • ExecuteLegacyManualAlias 呼叫 Unequip(“Neck”)。 ConvertLayer 選擇數字層、橋。 Unequip請求轉移到背包。
  • 舊指令內部 Unequip (1/0) 的結果被丟棄;撥打單獨的線路。如果沒有物品/背包,則請求可能不會被執行。呼叫後的ObjAtLayer檢查僅讀取本地狀態。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。直接呼叫-直接腳本

參數與執行流程:

  • 請求從 Neck 層移除一個項目。
UO.RemoveNeckless();

2。明確選項 - 腳本函數

參數與執行流程:

  • ExecuteLegacyManualAlias 呼叫 Unequip(“Neck”)。 ConvertLayer 選擇數字層、橋。 Unequip請求轉移到背包。
return  RunScenario();
 object? RunScenario()
{
    UO.Print(UO.ObjAtLayer("Neck"));
    UO.RemoveNeckless();
    return null;
}

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

參數與執行流程:

  • 舊指令內部 Unequip (1/0) 的結果被丟棄;撥打單獨的線路。如果沒有物品/背包,則請求可能不會被執行。呼叫後的ObjAtLayer檢查僅讀取本地狀態。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        UO.RemoveNeckless();
        UO.Wait(500);
        UO.Print(UO.ObjAtLayer("Neck"));
        return null;
    }
}

命令實作

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

UO.RemoveNeckless() — UO.RemoveNeckless()

參數: 沒有參數。

結果: void / Unit.

呼叫時:

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

case "removeneckless": Unequip("Neck"); break;

UO.RemoveRing

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

C# 簽章

void UO.RemoveRing();

請求從 Ring 層移除一個項目。

參數

沒有參數。

傳回值

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

行為

  • ExecuteLegacyManualAlias 呼叫Unequip(「響鈴」)。 ConvertLayer 選擇數字層、橋。 Unequip請求轉移到背包。
  • 舊指令內部 Unequip (1/0) 的結果被丟棄;撥打單獨的線路。如果沒有物品/背包,則請求可能不會被執行。呼叫後的ObjAtLayer檢查僅讀取本地狀態。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。直接呼叫-直接腳本

參數與執行流程:

  • 請求從 Ring 層移除一個項目。
UO.RemoveRing();

2。明確選項 - 腳本函數

參數與執行流程:

  • ExecuteLegacyManualAlias 呼叫Unequip(「響鈴」)。 ConvertLayer 選擇數字層、橋。 Unequip請求轉移到背包。
return  RunScenario();
 object? RunScenario()
{
    UO.Print(UO.ObjAtLayer("Ring"));
    UO.RemoveRing();
    return null;
}

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

參數與執行流程:

  • 舊指令內部 Unequip (1/0) 的結果被丟棄;撥打單獨的線路。如果沒有物品/背包,則請求可能不會被執行。呼叫後的ObjAtLayer檢查僅讀取本地狀態。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        UO.RemoveRing();
        UO.Wait(500);
        UO.Print(UO.ObjAtLayer("Ring"));
        return null;
    }
}

命令實作

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

UO.RemoveRing() — UO.RemoveRing()

參數: 沒有參數。

結果: void / Unit.

呼叫時:

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

case "removering": Unequip("Ring"); break;

UO.RequestStats

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

C# 簽章

void UO.RequestStats(object? objID);

透過serial請求角色狀態。

參數

  • objID — 序列/ID 物件:int,數字/十六進位字串或已建立的別名,例如「lasttarget」。這不是graphic/type。在採取行動之前檢查裝載的物體。

傳回值

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

行為

  • RequestStats 呼叫RequestMobileStatus(_world,serial,true)。呼叫不會傳回特徵數組,也不會等待回應; GetHP/GetStr 接下來是讀取本地模型。
  • Bridge 在遊戲串流上發送請求。伺服器規則適用;沒有內建的等待確認。

獨立的 C# 腳本

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

簡單範例

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

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

UO.Print("Calling UO.RequestStats");
UO.RequestStats(UO.GetSerial("lasttarget"));

1。直接呼叫-直接腳本

參數與執行流程:

  • 透過serial請求角色狀態。
var id = UO.GetSerial("lasttarget");
if (Truth(UO.Exists(id)))
{
    UO.RequestStats(id);
}

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

2。明確選項 - 腳本函數

參數與執行流程:

  • RequestStats 呼叫RequestMobileStatus(_world,serial,true)。呼叫不會傳回特徵數組,也不會等待回應; GetHP/GetStr 接下來是讀取本地模型。
return  RunScenario();
 object? RunScenario()
{
    var id = UO.GetSerial("self");
    if (Truth(UO.Exists(id)))
    {
        UO.RequestStats(id);
    }

    return null;
}

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

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

參數與執行流程:

  • Bridge 在遊戲串流上發送請求。伺服器規則適用;沒有內建的等待確認。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        ApplyToLoaded(UO.GetSerial("lasttarget"));
        return null;
    }

    void ApplyToLoaded(dynamic id)
    {
        if (Truth(UO.Exists(id)))
        {
            UO.RequestStats(id);
        }
    }

    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.RequestStats(objID) — UO.RequestStats(Any)

參數: objID (Any)

結果: void / Unit.

呼叫時:

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

case "requeststats": bridge.RequestStats(Arg(0)); return InjectionValue.Unit;

UO.ResistCold

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

C# 簽章

int UO.ResistCold();

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

參數

沒有參數。

傳回值

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.ResistCold();
UO.Print("ResistCold: " + Convert.ToString(result));

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

參數與執行流程:

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

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

參數與執行流程:

  • 前後有UO.Wait(500)毫秒;差異可以是負數。可能會錯過臨時更新。暫停指的是範例,而不是延遲API。
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var before = UO.ResistCold();
    await Delay(500);
    var after = UO.ResistCold();
    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.ResistCold();
        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.ResistCold() — UO.ResistCold()

參數: 沒有參數。

結果: int / Integer.

呼叫時:

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

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

() => bridge.ColdResistance

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


UO.ResistEnergy

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

C# 簽章

int UO.ResistEnergy();

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

參數

沒有參數。

傳回值

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.ResistEnergy();
UO.Print("ResistEnergy: " + Convert.ToString(result));

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

參數與執行流程:

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

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

參數與執行流程:

  • 前後有UO.Wait(500)毫秒;差異可以是負數。可能會錯過臨時更新。暫停指的是範例,而不是延遲API。
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var before = UO.ResistEnergy();
    await Delay(500);
    var after = UO.ResistEnergy();
    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.ResistEnergy();
        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.ResistEnergy() — UO.ResistEnergy()

參數: 沒有參數。

結果: int / Integer.

呼叫時:

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

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

() => bridge.EnergyResistance

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


UO.ResistFire

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

C# 簽章

int UO.ResistFire();

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

參數

沒有參數。

傳回值

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.ResistFire();
UO.Print("ResistFire: " + Convert.ToString(result));

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

參數與執行流程:

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

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

參數與執行流程:

  • 前後有UO.Wait(500)毫秒;差異可以是負數。可能會錯過臨時更新。暫停指的是範例,而不是延遲API。
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var before = UO.ResistFire();
    await Delay(500);
    var after = UO.ResistFire();
    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.ResistFire();
        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.ResistFire() — UO.ResistFire()

參數: 沒有參數。

結果: int / Integer.

呼叫時:

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

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

() => bridge.FireResistance

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


UO.ResistPhysical

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

C# 簽章

int UO.ResistPhysical();

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

參數

沒有參數。

傳回值

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.ResistPhysical();
UO.Print("ResistPhysical: " + Convert.ToString(result));

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

參數與執行流程:

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

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

參數與執行流程:

  • 前後有UO.Wait(500)毫秒;差異可以是負數。可能會錯過臨時更新。暫停指的是範例,而不是延遲API。
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var before = UO.ResistPhysical();
    await Delay(500);
    var after = UO.ResistPhysical();
    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.ResistPhysical();
        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.ResistPhysical() — UO.ResistPhysical()

參數: 沒有參數。

結果: int / Integer.

呼叫時:

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

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

() => bridge.Armor

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


UO.ResistPoison

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

C# 簽章

int UO.ResistPoison();

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

參數

沒有參數。

傳回值

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.ResistPoison();
UO.Print("ResistPoison: " + Convert.ToString(result));

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

參數與執行流程:

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

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

參數與執行流程:

  • 前後有UO.Wait(500)毫秒;差異可以是負數。可能會錯過臨時更新。暫停指的是範例,而不是延遲API。
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var before = UO.ResistPoison();
    await Delay(500);
    var after = UO.ResistPoison();
    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.ResistPoison();
        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.ResistPoison() — UO.ResistPoison()

參數: 沒有參數。

結果: int / Integer.

呼叫時:

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

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

() => bridge.PoisonResistance

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


UO.Self

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

C# 簽章

int UO.Self();

傳回目前字元的ID。

參數

沒有參數。

傳回值

int - serial/ID,而非 graphic/type、圖層、項目數或 bool。 0—當前沒有物件。所有32位serial均被保存;檢查 != 0,而不是 == true 或 > 0。儲存的結果不會自行更新。讀取 World.Player.Serial;失蹤或被摧毀的玩家給予0。死亡與移除不同:存在的鬼魂保留了角色的ID。

行為

  • 沒有參數。通过游戏流上的Invoke读取本地数据;取消脚本会中断对该线程的等待。不发送包裹,不打开容器/目标,也不转移物品。
  • 除非被腳本變數覆蓋,否則將再次讀取不含括號的內建self/backpack。字串名稱由接收命令處理。在攜帶目的地中,「self」表示背包,UO.Self()返回角色的serial。對於 ID 容器,明確使用 UO.Backpack()。
  • World.Clear 移除玩家;隨後的讀數產生0。進入世界或更換裝備包都可以改變ID。單獨的讀取不是原子的。非零 ID 不證明連線、伺服器解析或內容載入。

獨立的 C# 腳本

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

簡單範例

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

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

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

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

參數與執行流程:

  • id 儲存一次呼叫的結果; HEX 將 serial 格式化為日誌。此範例沒有選擇或使用任何內容。
var id = UO.Self();
UO.Print("ID: " + Hex(id));

string Hex(object? value) => Convert.ToInt64(value).ToString("X");

2。檢測變化ID - 腳本函數

參數與執行流程:

  • before/after 以250 ms 的間隔讀取。 UO.Wait 僅作為範例添加。相等意味著最終的ID相同;中間的變化可能會被錯過。
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var before = UO.Self();
    await Delay(250);
    var after = UO.Self();
    if (Truth(before != after))
    {
        UO.Print("ID changed: " + Hex(after));
    }

    return null;
}

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

3。全功能IsOwnSerial——腳本類

參數與執行流程:

  • 候選人 - 已保存IDLastTarget。 IsOwnSerial(候選者)取 1 serial 並回傳 bool:true 為目前非零自己的 ID,否則為 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()
    {
        var candidate = UO.LastTarget();
        if (Truth(Truth(IsOwnSerial(candidate)) == true))
        {
            UO.Print("Own object selected");
        }
        else
        {
            UO.Print("Different object or no own object");
        }

        return null;
    }

    dynamic IsOwnSerial(dynamic candidate)
    {
        var current = UO.Self();
        return Truth(current != 0) && Truth(current == candidate);
    }

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

參數: 沒有參數。

結果: int / Integer.

呼叫時:

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

case "self": return new InjectionValue(bridge.Self);

UO.SetARExtParams

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

C# 簽章

void UO.SetARExtParams();
void UO.SetARExtParams(object? shardName);
void UO.SetARExtParams(object? shardName, object? charName);
void UO.SetARExtParams(object? shardName, object? charName, object? useAtEveryConnect);

指定分片清單中的伺服器和用於後續登入的字元。當腳本需要由同一帳戶的某個角色重新連結時很有用。

參數

  • shardName — 登入清單中伺服器的選用顯示名稱,而非 IP 或連接埠。目前 ShardName 取空值或缺失值。邊緣周圍的空白被刪除。
  • charName - 現有帳戶角色的可選名稱。若已知,空值或缺失值的名稱為 self。這是名稱,不是槽號或serial;非空名稱優先於設定檔槽。
  • useAtEveryConnect - 可選標誌:預設為false/0 - 一次性選擇;true/1 或其他非零整數 - 儲存選擇以供將來在此會話中登入。

傳回值

void - 沒有值。這是設定下一個輸入,而不是確認角色的連接或存在。

行為

  • 在管理器中,隨機數在失敗的網路嘗試中保存,並且僅在進入世界後才被消耗。下一次連線將返回設定檔設定。持久選擇將持續到新設定或會話擁有者結束為止;管理員設定檔不會被覆蓋。登入時的新設定適用於下次登錄,並且在目前登入完成後不會遺失。
  • 在單獨的圖形客戶端中,伺服器儲存為LastServerName,角色儲存為LastCharacterManager。成功登入後,該角色也將成為最後使用的角色:可處置並不意味著自動返回前一個角色。永久覆蓋存在於目前進程中。
  • 該命令本身不會啟用自動重新連接,也不會中斷連接。為此,分別使用 SetARStatus、Connect 和 Disconnect。名稱必須出現在伺服器清單中;比較不區分大小寫。如果在管理員中停用自動字元輸入,則仍保留手動選擇。離線時可能無法辨識名稱 self:明確指定名稱。此指令不會改變帳號、密碼、IP、連接埠和加密方式;沒有可用目前名稱的空值不會清除先前設定的選擇。

獨立的 C# 腳本

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

簡單範例

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

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

UO.Print("Calling UO.SetARExtParams");
UO.SetARExtParams("", "", true);

1。 SetARExtParams - 1 - 直接脚本

參數與執行流程:

  • 第一個範例僅適用於線上。兩個空白行採用目前名稱; true 儲存它們以供重複登錄,SetARStatus(true) 啟用自動重新連接策略。不會立即重新連線。
if (!(Truth(UO.Connected())))
{
    return null;
}
UO.SetARExtParams("", "", true);
UO.SetARStatus(true);

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

2。 SetARExtParams — 2 — 腳本函數

參數與執行流程:

  • 僅當該名稱位於真實的 GetCharsListForShard 中時,第二個範例才選擇範例字元。此數組的索引為0; ToLowerInvariant 以不區分大小寫的方式比較名稱。 false表示一次輸入成功,配置後自動重連,呼叫Disconnect。將名稱替換為您的名稱。如果沒有名稱,則保留連線。自動暫停可能會延遲返回,直到連線恢復。
return  RunScenario();
 object? RunScenario()
{
    if (!(Truth(UO.Connected())))
    {
        return null;
    }

    var wanted = "Example Character";
    var names = UO.GetCharsListForShard();
    var i = 0;
    while (Truth(i < ArrayLength(names)))
    {
        if (Truth(Convert.ToString(names[i]) == Convert.ToString(wanted)))
        {
            UO.SetARExtParams("", names[i], false);
            UO.SetARStatus(true);
            UO.Disconnect();
            return null;
        }

        i += 1;
    }

    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;

3。 SetARExtParams - 3 - 場景類

參數與執行流程:

  • 第三個範例是從執行的離線腳本啟動的。明確指定範例碎片和範例字元;將其替換為真實姓名。 true 保留選擇,SetARStatus 中的 false 停用自動重試,Connect 要求一個輸入。您需要儲存的帳戶詳細資料。 Connect 不會等待世界準備好;而是會等待世界準備好。自動暫停的腳本在不恢復的情況下不會到達這些行。
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.Connected()))
        {
            return null;
        }

        UO.SetARExtParams("Example Shard", "Example Character", true);
        UO.SetARStatus(false);
        UO.Connect();
        return null;
    }

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

命令實作

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

UO.SetARExtParams() — UO.SetARExtParams()

參數: 沒有參數。

結果: void / Unit.

呼叫時:

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

case "setarextparams":

                {

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

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

                    state.AutoReconnectShard = string.IsNullOrWhiteSpace(requestedShard)

                        ? bridge.ShardName

                        : requestedShard;

                    state.AutoReconnectCharacter = string.IsNullOrWhiteSpace(requestedCharacter)

                        ? bridge.GetName(bridge.Self) ?? string.Empty

                        : requestedCharacter;

                    int useAtEveryConnect = arguments.Length > 2 ? Arg(2) : 0;

                    bridge.SetReconnectSelection(state.AutoReconnectShard, state.AutoReconnectCharacter, useAtEveryConnect);

                    return InjectionValue.Unit;

                }

UO.SetARExtParams(shardName) — UO.SetARExtParams(Any)

參數: shardName (Any)

結果: void / Unit.

呼叫時:

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

case "setarextparams":

                {

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

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

                    state.AutoReconnectShard = string.IsNullOrWhiteSpace(requestedShard)

                        ? bridge.ShardName

                        : requestedShard;

                    state.AutoReconnectCharacter = string.IsNullOrWhiteSpace(requestedCharacter)

                        ? bridge.GetName(bridge.Self) ?? string.Empty

                        : requestedCharacter;

                    int useAtEveryConnect = arguments.Length > 2 ? Arg(2) : 0;

                    bridge.SetReconnectSelection(state.AutoReconnectShard, state.AutoReconnectCharacter, useAtEveryConnect);

                    return InjectionValue.Unit;

                }

UO.SetARExtParams(shardName, charName) — UO.SetARExtParams(Any,Any)

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

結果: void / Unit.

呼叫時:

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

case "setarextparams":

                {

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

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

                    state.AutoReconnectShard = string.IsNullOrWhiteSpace(requestedShard)

                        ? bridge.ShardName

                        : requestedShard;

                    state.AutoReconnectCharacter = string.IsNullOrWhiteSpace(requestedCharacter)

                        ? bridge.GetName(bridge.Self) ?? string.Empty

                        : requestedCharacter;

                    int useAtEveryConnect = arguments.Length > 2 ? Arg(2) : 0;

                    bridge.SetReconnectSelection(state.AutoReconnectShard, state.AutoReconnectCharacter, useAtEveryConnect);

                    return InjectionValue.Unit;

                }

UO.SetARExtParams(shardName, charName, useAtEveryConnect) — UO.SetARExtParams(Any,Any,Any)

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

結果: void / Unit.

呼叫時:

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

case "setarextparams":

                {

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

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

                    state.AutoReconnectShard = string.IsNullOrWhiteSpace(requestedShard)

                        ? bridge.ShardName

                        : requestedShard;

                    state.AutoReconnectCharacter = string.IsNullOrWhiteSpace(requestedCharacter)

                        ? bridge.GetName(bridge.Self) ?? string.Empty

                        : requestedCharacter;

                    int useAtEveryConnect = arguments.Length > 2 ? Arg(2) : 0;

                    bridge.SetReconnectSelection(state.AutoReconnectShard, state.AutoReconnectCharacter, useAtEveryConnect);

                    return InjectionValue.Unit;

                }

UO.SetARStatus

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

C# 簽章

void UO.SetARStatus(object? value);

啟用或停用自動重新連線。

參數

  • value - 0 關閉;任何非零整數包括。

傳回值

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

行為

  • Bridge.SetAutoReconnect 更改自動重連設定。該值被解釋為啟用! = 0;沒有立即登入/登出伺服器。
  • 更改客戶端設定。該值不是連接測試的結果,並且不確認伺服器的處理。

獨立的 C# 腳本

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

簡單範例

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

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

UO.Print("Calling UO.SetARStatus");
UO.SetARStatus(1);

1。直接呼叫-直接腳本

參數與執行流程:

  • 啟用或停用自動重新連線。
UO.SetARStatus(1);

2。明確選項 - 腳本函數

參數與執行流程:

  • Bridge.SetAutoReconnect 更改自動重連設定。該值被解釋為啟用! = 0;沒有立即登入/登出伺服器。
return  RunScenario();
 object? RunScenario()
{
    UO.SetARStatus(0);
    return null;
}

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

參數與執行流程:

  • 更改客戶端設定。該值不是連接測試的結果,並且不確認伺服器的處理。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        ApplyMode(1);
        return null;
    }

    void ApplyMode(dynamic mode)
    {
        UO.SetARStatus(mode);
    }
}

命令實作

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

UO.SetARStatus(value) — UO.SetARStatus(Any)

參數: value (Any)

結果: void / Unit.

呼叫時:

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

case "setarstatus": bridge.SetAutoReconnect(Arg(0)); return InjectionValue.Unit;

UO.SetArm

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

C# 簽章

void UO.SetArm(object? name);

記得命名集中當前的武器和盾牌。

參數

  • name — 集合的字串名稱,例如「旅行」或「戰鬥」。名稱不區分大小寫。服裝和武器套裝分開存放:兩者允許使用相同的名稱。這不是 ID 的東西或檔名。只有SetDress允許沒有名稱:然後為DressSavedSet/EquipDressSet記錄一個單獨的集合。

傳回值

void - 无值。使用單獨的線路撥打電話;不要分配結果或將其與true進行比較。儲存和刪除會更改條目,而不是設備。

行為

  • 服裝:層數3,4,5,6,7,8,10,12,13,14,17,18,19,20,22,23,24。武器:僅限1和2。頭髮、鬍鬚、背包、動物和銀行不包含在這些套裝中。
  • 具體的serial已經加載的東西都記錄在自己的層中。再次儲存相同的名稱會取代該條目。空層也有意義:當恢復時,相應的佔用層將被釋放到自己的背包中。因此,已儲存的完全空集會從其圖層中刪除內容。
  • 此集合儲存在運行時狀態中。呼叫本身不會建立文件,也不保證該集將被傳輸到另一個設定檔或新的運行時。首先,將所需的集合儲存為其使用狀態。載入/保存客戶端的一般狀態是一個單獨的機制。
  • UO.SetDress · UO.Dress · UO.DressSavedSet · UO.SetArm · UO.Arm · UO.DressSpeed
  • 在常規用戶端主機中,此狀態資料取自GetPersistentState管理器,並且對於同一世界/設定檔的腳本/聊天/巨集是通用的,且不屬於一個腳本。另一個進程或明顯獨立的InjectionRuntimeState具有不同的狀態。載入/清除設定檔可以取代它;已儲存的serial仍然會根據載入的世界進行檢查。

獨立的 C# 腳本

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

簡單範例

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

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

UO.Print("Calling UO.SetArm");
UO.SetArm("battle");

1。直接使用-直接腳本

參數與執行流程:

  • 照片是現在拍攝的,當時必要的東西已經穿上了。挑戰不裝備背包中的物品。
UO.SetArm("battle");

2。名稱和查詢模式 - 腳本功能

參數與執行流程:

  • 不同的儲存庫中使用相同的名稱。 SetDress()也单独存储未命名集合;它不是对以前记录的名称的选择。
return  RunScenario();
 object? RunScenario()
{
    UO.SetArm("battle");
    UO.SetDress("battle");
    return null;
}

3。完整的幫助程序腳本 - 腳本類

參數與執行流程:

  • SaveIfReady 檢查控制層:3 - 鞋子用於衣服,1 - 右手用於武器。如果為空,則不會覆蓋快照。回傳的1/0屬於助手,而非SetDress/SetArm。
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()
    {
        return SaveIfReady("battle");
        return null;
    }

    dynamic SaveIfReady(dynamic name)
    {
        if (Truth(UO.ObjAtLayerEx(1, UO.Self()) == 0))
        {
            return 0;
        }

        UO.SetArm(name);
        return 1;
    }

    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.SetArm(name) — UO.SetArm(String)

參數: name (String)

結果: void / Unit.

呼叫時:

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

public void SetArm(string name)

            => SetEquip(name, armSets, weaponLayers, "Arm set.");

UO.SetDress

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

C# 簽章

void UO.SetDress();
void UO.SetDress(object? name);

記住目前穿著的衣服和盔甲以供後續修復。

參數

  • name — 集合的字串名稱,例如「旅行」或「戰鬥」。名稱不區分大小寫。服裝和武器套裝分開存放:兩者允許使用相同的名稱。這不是 ID 的東西或檔名。只有SetDress允許沒有名稱:然後為DressSavedSet/EquipDressSet記錄一個單獨的集合。

傳回值

void - 无值。使用單獨的線路撥打電話;不要分配結果或將其與true進行比較。儲存和刪除會更改條目,而不是設備。

行為

  • 服裝:層數3,4,5,6,7,8,10,12,13,14,17,18,19,20,22,23,24。武器:僅限1和2。頭髮、鬍鬚、背包、動物和銀行不包含在這些套裝中。
  • 具體的serial已經加載的東西都記錄在自己的層中。再次儲存相同的名稱會取代該條目。空層也有意義:當恢復時,相應的佔用層將被釋放到自己的背包中。因此,已儲存的完全空集會從其圖層中刪除內容。
  • 此集合儲存在運行時狀態中。呼叫本身不會建立文件,也不保證該集將被傳輸到另一個設定檔或新的運行時。首先,將所需的集合儲存為其使用狀態。載入/保存客戶端的一般狀態是一個單獨的機制。
  • UO.SetDress · UO.Dress · UO.DressSavedSet · UO.SetArm · UO.Arm · UO.DressSpeed
  • 在常規用戶端主機中,此狀態資料取自GetPersistentState管理器,並且對於同一世界/設定檔的腳本/聊天/巨集是通用的,且不屬於一個腳本。另一個進程或明顯獨立的InjectionRuntimeState具有不同的狀態。載入/清除設定檔可以取代它;已儲存的serial仍然會根據載入的世界進行檢查。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。直接使用-直接腳本

參數與執行流程:

  • 照片是現在拍攝的,當時必要的東西已經穿上了。挑戰不裝備背包中的物品。
UO.SetDress("travel");

2。名稱和查詢模式 - 腳本功能

參數與執行流程:

  • 不同的儲存庫中使用相同的名稱。 SetDress()也单独存储未命名集合;它不是对以前记录的名称的选择。
return  RunScenario();
 object? RunScenario()
{
    UO.SetArm("battle");
    UO.SetDress("battle");
    UO.SetDress();
    return null;
}

3。完整的幫助程序腳本 - 腳本類

參數與執行流程:

  • SaveIfReady 檢查控制層:3 - 鞋子用於衣服,1 - 右手用於武器。如果為空,則不會覆蓋快照。回傳的1/0屬於助手,而非SetDress/SetArm。
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()
    {
        return SaveIfReady("travel");
        return null;
    }

    dynamic SaveIfReady(dynamic name)
    {
        if (Truth(UO.ObjAtLayerEx(3, UO.Self()) == 0))
        {
            return 0;
        }

        UO.SetDress(name);
        return 1;
    }

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

參數: 沒有參數。

結果: void / Unit.

呼叫時:

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

case "setdress": SetDress("__stealth_saved_set__"); return InjectionValue.Unit;

UO.SetDress(name) — UO.SetDress(String)

參數: name (String)

結果: void / Unit.

呼叫時:

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

public void SetDress(string name)

            => SetEquip(name, dressSets, dressLayers, "Clothing set.");

UO.SetDressSpeed

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

C# 簽章

void UO.SetDressSpeed(object? delayms);

在換衣服請求之間設定暫停。

參數

  • delayms - int,毫秒。該值僅限於10..10000(含)。

傳回值

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

行為

  • SetDressSpeed 保存狀態。 DressSpeed = max(10, min(10000, 延遲))。保存集的操作利用了這一點;伺服器允許的操作速度不會改變。
  • 小於10的值變為10,大於10000的值變為10000。團隊不穿脫物品。
  • 在常規用戶端主機中,此狀態資料取自GetPersistentState管理器,並且對於同一世界/設定檔的腳本/聊天/巨集是通用的,且不屬於一個腳本。另一個進程或明顯獨立的InjectionRuntimeState具有不同的狀態。載入/清除設定檔可以取代它;已儲存的serial仍然會根據載入的世界進行檢查。

獨立的 C# 腳本

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

簡單範例

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

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

UO.Print("Calling UO.SetDressSpeed");
UO.SetDressSpeed(250);

1。直接呼叫-直接腳本

參數與執行流程:

  • 在換衣服請求之間設定暫停。
UO.SetDressSpeed(250);

2。明確選項 - 腳本函數

參數與執行流程:

  • SetDressSpeed 保存狀態。 DressSpeed = max(10, min(10000, 延遲))。保存集的操作利用了這一點;伺服器允許的操作速度不會改變。
return  RunScenario();
 object? RunScenario()
{
    UO.SetDressSpeed(0);
    UO.Print(UO.DressSpeed());
    return null;
}

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

參數與執行流程:

  • 小於10的值變為10,大於10000的值變為10000。團隊不穿脫物品。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        UO.SetDressSpeed(20000);
        UO.Print(UO.DressSpeed());
        return null;
    }
}

命令實作

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

UO.SetDressSpeed(delayms) — UO.SetDressSpeed(Integer)

參數: delayms (Integer)

結果: void / Unit.

呼叫時:

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

public void SetDressSpeed(int delayms) => state.DressSpeed = Math.Max(10, Math.Min(10_000, delayms));

UO.SetStatLockState

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

C# 簽章

void UO.SetStatLockState(object? statNum, object? statState);

請求更改特徵模式。

參數

  • statNum - 強制特徵編號:0 - 轉換ToString、1 - DEX、2 - INT。這不是它的目前值,也不是字串的名稱。
  • statState — 強制模式:0 — 增加,1 — 減少,2 — 阻止。這是三個程式碼,不是 bool; true/false 不會取代所有模式的名稱。

傳回值

void - 無回傳值。結果不能用作成功/錯誤或與 true 進行比較。隨後的讀取顯示的是本機模型,而不是伺服器的確認。

行為

  • 有效請求透過GameActions發送一個資料包並立即更改本地模式。伺服器可以應用自己的限制;不能保證技能或統計資料的提高。如果沒有包,未知的技能、無效的索引/模式和遺失的字元將被忽略。
  • 強制特徵編號:0 - 轉換.ToString、1 - DEX、2 - INT。這不是它的目前值,也不是字串的名稱。
  • ExecuteClientApiCompatibility 選擇指令分支。 Text 讀取技能選擇器,Arg 讀取數字和模式。不可轉換的參數可能會使呼叫失敗並出現轉換錯誤。

獨立的 C# 腳本

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

簡單範例

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

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

UO.Print("Calling UO.SetStatLockState");
UO.SetStatLockState(0, 2);

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

參數與執行流程:

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

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

參數與執行流程:

  • 以閾值95.1和模式0/1/2為例。 −1 在改變模式之前被檢查。寫入後,只讀取本機副本;它不等待伺服器回應。
return  RunScenario();
 object? RunScenario()
{
    var selector = 0;
    var before = UO.GetStatLockState(selector);
    if (Truth(before >= 0) && Truth(before <= 2))
    {
        UO.SetStatLockState(selector, 0);
        UO.Print(Convert.ToString(UO.GetStatLockState(selector)));
    }

    return null;
}

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

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

參數與執行流程:

  • 所有幫助程序代碼都在 Main 下面給出。選擇器選擇技能/特性,模式設定錄製模式。 ReadValue/ReadMode 傳回原數; ApplyMode 檢查參數,執行操作,且不傳回值。閱讀範例中的UO.Wait(1000)將兩張圖片分開。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        ApplyMode(0, 2);
        return null;
    }

    void ApplyMode(dynamic selector, dynamic mode)
    {
        if (Truth(mode < 0) || Truth(mode > 2))
        {
            return;
        }

        if (Truth(UO.GetStatLockState(selector) < 0))
        {
            return;
        }

        UO.SetStatLockState(selector, mode);
    }

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

命令實作

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

UO.SetStatLockState(statNum, statState) — UO.SetStatLockState(Any,Any)

參數: statNum (Any), statState (Any)

結果: void / Unit.

呼叫時:

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

case "setstatlockstate":

                case "setstatstate": bridge.SetStatLockState(Arg(0), Arg(1)); return InjectionValue.Unit;

UO.SetStatState

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

C# 簽章

void UO.SetStatState(object? statNum, object? statState);

請求更改特徵模式。

參數

  • statNum - 強制特徵編號:0 - 轉換ToString、1 - DEX、2 - INT。這不是它的目前值,也不是字串的名稱。
  • statState — 強制模式:0 — 增加,1 — 減少,2 — 阻止。這是三個程式碼,不是 bool; true/false 不會取代所有模式的名稱。

傳回值

void - 無回傳值。結果不能用作成功/錯誤或與 true 進行比較。隨後的讀取顯示的是本機模型,而不是伺服器的確認。

行為

  • 有效請求透過GameActions發送一個資料包並立即更改本地模式。伺服器可以應用自己的限制;不能保證技能或統計資料的提高。如果沒有包,未知的技能、無效的索引/模式和遺失的字元將被忽略。
  • 強制特徵編號:0 - 轉換.ToString、1 - DEX、2 - INT。這不是它的目前值,也不是字串的名稱。
  • ExecuteClientApiCompatibility 選擇指令分支。 Text 讀取技能選擇器,Arg 讀取數字和模式。不可轉換的參數可能會使呼叫失敗並出現轉換錯誤。

獨立的 C# 腳本

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

簡單範例

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

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

UO.Print("Calling UO.SetStatState");
UO.SetStatState(0, 2);

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

參數與執行流程:

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

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

參數與執行流程:

  • 以閾值95.1和模式0/1/2為例。 −1 在改變模式之前被檢查。寫入後,只讀取本機副本;它不等待伺服器回應。
return  RunScenario();
 object? RunScenario()
{
    var selector = 0;
    var before = UO.GetStatLockState(selector);
    if (Truth(before >= 0) && Truth(before <= 2))
    {
        UO.SetStatState(selector, 0);
        UO.Print(Convert.ToString(UO.GetStatLockState(selector)));
    }

    return null;
}

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

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

參數與執行流程:

  • 所有幫助程序代碼都在 Main 下面給出。選擇器選擇技能/特性,模式設定錄製模式。 ReadValue/ReadMode 傳回原數; ApplyMode 檢查參數,執行操作,且不傳回值。閱讀範例中的UO.Wait(1000)將兩張圖片分開。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        ApplyMode(0, 2);
        return null;
    }

    void ApplyMode(dynamic selector, dynamic mode)
    {
        if (Truth(mode < 0) || Truth(mode > 2))
        {
            return;
        }

        if (Truth(UO.GetStatLockState(selector) < 0))
        {
            return;
        }

        UO.SetStatState(selector, mode);
    }

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

命令實作

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

UO.SetStatState(statNum, statState) — UO.SetStatState(Any,Any)

參數: statNum (Any), statState (Any)

結果: void / Unit.

呼叫時:

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

case "setstatlockstate":

                case "setstatstate": bridge.SetStatLockState(Arg(0), Arg(1)); return InjectionValue.Unit;

UO.Sex

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

C# 簽章

dynamic UO.Sex();

從客戶端模型中讀取性別和種族代碼。

參數

沒有參數。

傳回值

int - 相容代碼:0=人類男性,1=人類女性,2=精靈男性,3=精靈女性,4=石像鬼男性,5=精靈石女性。沒有字元也0,所以檢查Exists(self)是否可用。這不是一個簡單的bool女性。

行為

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

獨立的 C# 腳本

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

簡單範例

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

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

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

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

參數與執行流程:

  • 不帶參數的呼叫指的是 self。性别和种族代码存储在值中。
  • Convert.ToString 轉換要輸出的數字,不改變結果的意義。
var value = UO.Sex();
UO.Print("Sex: " + Convert.ToString(value));

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

參數與執行流程:

  • 該值在沒有任何參數的情況下被讀取一次。性別和種族代碼用於所示的計算或條件。
  • 數字閾值是腳本條件的範例,而不是新的客戶端限制。此欄位儲存上述伺服器單元和限制。
return  RunScenario();
 object? RunScenario()
{
    var value = UO.Sex();
    if (Truth(value == 4) || Truth(value == 5))
    {
        UO.Print("Gargoyle sex/race code");
    }

    return null;
}

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

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.Sex();
        await Delay(1000);
        var after = UO.Sex();
        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.Sex() — UO.Sex()

參數: 沒有參數。

結果: dynamic / Any.

呼叫時:

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

case "sex": return new InjectionValue(bridge.Sex);

UO.Stam

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

C# 簽章

dynamic UO.Stam();

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

參數

沒有參數。

傳回值

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

行為

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

獨立的 C# 腳本

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

簡單範例

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

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

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

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

參數與執行流程:

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

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

參數與執行流程:

  • 顯示該欄位應用的閾值或計算。條件中的數字是範例設置,而不是伺服器限制。在除以最大值之前,檢查其正值。
return  RunScenario();
 object? RunScenario()
{
    var value = UO.Stam();
    if (Truth(value < 15))
    {
        UO.Print("Known stamina is below the movement threshold of 15");
    }

    return null;
}

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

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.Stam();
    }

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

命令實作

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

UO.Stam() — UO.Stam()

參數: 沒有參數。

結果: dynamic / Any.

呼叫時:

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

case "stam": return new InjectionValue(bridge.Stamina);

UO.Stamina

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

C# 簽章

int UO.Stamina();

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

參數

沒有參數。

傳回值

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

行為

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

獨立的 C# 腳本

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

簡單範例

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

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

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

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

參數與執行流程:

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

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

參數與執行流程:

  • 顯示該欄位應用的閾值或計算。條件中的數字是範例設置,而不是伺服器限制。在除以最大值之前,檢查其正值。
return  RunScenario();
 object? RunScenario()
{
    var value = UO.Stamina();
    if (Truth(value < 15))
    {
        UO.Print("Known stamina is below the movement threshold of 15");
    }

    return null;
}

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

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.Stamina();
    }

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

命令實作

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

UO.Stamina() — UO.Stamina()

參數: 沒有參數。

結果: int / Integer.

呼叫時:

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

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

() => bridge.Stamina

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


UO.Str

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

C# 簽章

int UO.Str();

讀取角色目前的力量值(Strength)。

參數

沒有參數。

傳回值

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

行為

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

獨立的 C# 腳本

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

簡單範例

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

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

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

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

參數與執行流程:

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

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

參數與執行流程:

  • 前後分別1000 ms; UO.Wait 加入範例。 Change=after-before 可以是正數、零或負數。就其本身而言,它並不區分所有中間更新和退出世界。
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var before = UO.Str();
    await Delay(1000);
    var after = UO.Str();
    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.Str();
        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.Str() — UO.Str()

參數: 沒有參數。

結果: int / Integer.

呼叫時:

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

case "str": return new InjectionValue(bridge.Strength);

UO.Strength

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

C# 簽章

int UO.Strength();

讀取角色目前功率(Strength、Str)。

參數

沒有參數。

傳回值

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

行為

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

獨立的 C# 腳本

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

簡單範例

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

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

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

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

參數與執行流程:

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

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

參數與執行流程:

  • 前後分別1000 ms; UO.Wait 加入範例。 Change=after-before 可以是正數、零或負數。就其本身而言,它並不區分所有中間更新和退出世界。
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var before = UO.Strength();
    await Delay(1000);
    var after = UO.Strength();
    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.Strength();
        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.Strength() — UO.Strength()

參數: 沒有參數。

結果: int / Integer.

呼叫時:

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

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

() => bridge.Strength

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


UO.TicksDead

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

C# 簽章

int UO.TicksDead();

第一次讀取或標記注意到的死亡。

參數

沒有參數。

傳回值

int — UO.Timer 從運行時開始算起的十分之一秒,最初為 0。不是死亡人數,也不是死亡持續時間。

行為

  • 每次呼叫時,如果bridge.Dead()!=0且ticksDead==0,則儲存Timer()。否則返回前一個ticksDead。復活後,該欄位不會透過此方法重置。
  • 這是第一個呼叫標記 TicksDead 观察到的死亡时间,而不是服务器事件的确切时间。在前十分之一秒內的值 0 可以重新安裝。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。直接呼叫-直接腳本

參數與執行流程:

  • 第一次讀取或標記注意到的死亡。
UO.Print(UO.TicksDead());

2。明確選項 - 腳本函數

參數與執行流程:

  • 每次呼叫時,如果bridge.Dead()!=0且ticksDead==0,則儲存Timer()。否則返回前一個ticksDead。復活後,該欄位不會透過此方法重置。
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.IsDead()))
    {
        var stamp = UO.TicksDead();
        UO.Print(UO.Timer() - stamp);
    }

    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。完整的輔助函數 - 腳本類

參數與執行流程:

  • 這是第一個呼叫標記 TicksDead 观察到的死亡时间,而不是服务器事件的确切时间。在前十分之一秒內的值 0 可以重新安裝。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var before = UO.TicksDead();
        UO.Wait(500);
        UO.Print(before = UO.TicksDead());
        return null;
    }
}

命令實作

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

UO.TicksDead() — UO.TicksDead()

參數: 沒有參數。

結果: int / Integer.

呼叫時:

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

public int TicksDead()

        {

            if (bridge.Dead() != 0 && ticksDead == 0)

                ticksDead = Timer();

            return ticksDead;

        }

UO.ToggleFly

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

C# 簽章

void UO.ToggleFly();

請求切換您自己的石像鬼的飛行:從地面到飛行,從飛行到地面。這是一個動作,UO.Flying()只檢查狀態。該命令在需要某種模式的路由之前很有用。

參數

沒有參數。

傳回值

void - 沒有價值。這不是true/false或伺服器確認。處理完伺服器回應後,透過UO.Flying()查看實際結果。

行為

  • 唯一的形式是UO.ToggleFly(),沒有ID、座標和參數true/false。與你的個性有關;無法更改其他mobile的航班。
  • 使用子命令 0x0032 發送請求 0xBF。呼叫本身不會檢查種族、協議版本、伺服器權限或當前模式;在支援飛行的伺服器上為您自己的石像鬼選擇它。
  • 伺服器可能會發生故障,狀態更新會稍後出現。不要在等待循環中呼叫ToggleFly:再次呼叫可能會取消先前的切換。發送一個請求並讀取 Flying,直到逾時。
  • 高度Z和飛行標誌是不同的數據。 UO.Flying()回傳int1/true或0/false;如果沒有字元或舊協議,false也是可以的。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。如有必要,啟用飛行並檢查結果 - 直接腳本

參數與執行流程:

  • 此範例適用於支援飛行的伺服器上的 Gargoyle。如果觀察到飛行,則EnsureFlight(timeoutMs) ​​回傳1/true,否則回傳0/false。 2000 — 等待限制(以毫秒為單位);每 50 毫秒檢查一次。如果您已經在飛行,則不會呼叫 ToggleFly。最多發送一個請求,然後檢查回應狀態。腳本暫停/調度程序延遲可以增加即時性。
if (Truth(await EnsureFlight(2000)))
{
    UO.Print("Flight confirmed; ready for the next stage");
}
else
{
    UO.Print("Flight not confirmed; route was not started");
}

async Task<dynamic> EnsureFlight(dynamic timeoutMs)
{
    if (!(Truth(UO.Connected())) || Truth(UO.Dead()))
    {
        return false;
    }
    if (Truth(UO.Flying()))
    {
        return true;
    }
    UO.ToggleFly();
    var waited = 0;
    while (Truth(waited < timeoutMs))
    {
        if (!(Truth(UO.Connected())))
        {
            return false;
        }
        if (Truth(UO.Flying()))
        {
            return true;
        }
        await Delay(50);
        waited += 50;
    }
    return UO.Flying();
}

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

2。僅在飛行期間請求登機 - 腳本函數

參數與執行流程:

  • 最多40等待50毫秒,僅一個請求。 Connected 檢查可防止將關閉視為成功著陸。暫停腳本會增加實際時間。
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    if (Truth(UO.Connected()) && Truth(UO.Flying()))
    {
        UO.ToggleFly();
        var checks = 0;
        while (Truth(UO.Connected()) && Truth(UO.Flying()) && Truth(checks < 40))
        {
            await Delay(50);
            checks += 1;
        }

        if (Truth(UO.Connected()) && !(Truth(UO.Flying())))
        {
            UO.Print("Landing state observed");
        }
        else
        {
            UO.Print("Landing not confirmed");
        }
    }

    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;

3。熱鍵的手動切換命令 - 腳本類

參數與執行流程:

  • 將 Main 指派給一個鍵以進行一次切換請求。這不是EnsureFlight:在航班請求著陸時再次按下。一個按鍵重複或兩個並行腳本可以發送多個請求;這裡沒有安裝限制器。
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.Connected()) && !(Truth(UO.Dead())))
        {
            UO.ToggleFly();
        }

        return null;
    }

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

命令實作

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

UO.ToggleFly() — UO.ToggleFly()

參數: 沒有參數。

結果: void / Unit.

呼叫時:

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

case "togglefly": bridge.ToggleFly(); return InjectionValue.Unit;
⚠️ **GitHub.com Fallback** ⚠️