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

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

物品

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

物件的屬性、使用和轉移。 Serial選擇一個特定的項目; type/graphic 選擇視圖。堆疊單元的傳輸和傳輸的項目數量具有不同的參數。

部分

主題 命令與解釋
Item Properties UO.GetSerial · UO.GetType · UO.GetGraphic · UO.GetColor · UO.GetQuantity · UO.GetName · UO.GetTooltip · UO.ContainerOf · UO.GetParent · UO.GetLayer · UO.IsMovable · UO.GetX · UO.GetY · UO.GetZ
尋找物品 UO.FindType · UO.FindTypeEx · UO.FindTypesArrayEx · UO.FindItem · UO.FindAnyType · UO.FindAtCoord · UO.FindList · UO.FindDistance · UO.FindVertical
使用物品 UO.UseObject · UO.UseType · UO.UseFromGround · UO.UseWorldObject · UO.UseItemOnMobile
Moving 項目 UO.Grab · UO.Drag · UO.Drop · UO.MoveItem · UO.MoveItems · UO.MassMove · UO.EmptyContainer
Ground 物品 UO.GetWorldItems · UO.FindType · UO.CountGround · UO.MoveItem
貨櫃專案 UO.GetContent · UO.FindTypeEx ​​· UO.OpenContainer
仿冒/顧客物品 UO.MakeFakeItem · UO.DeleteObject ​​
Dye UO.Dye

所有主題命令

項目屬性

UO.Exists · UO.IsObjectExists · UO.GetSerial · UO.GetType · UO.GetGraphic · UO.GetColor · UO.GetQuantity · UO.Name · UO.GetName · UO.GetAltName · UO.GetTooltip · UO.GetTooltipRec · UO.GetLayer · UO.GetLocked · UO.IsMovable · UO.GetFlags · UO.ReceiveObjectName · UO.UpdateObject

使用物品

UO.UseObject · UO.UseType · UO.UseFromGround · UO.UseWorldObject · UO.UseItemOnMobile · UO.ClickOnObject · UO.TicksUse

Moving 物品

UO.Grab · UO.Drag · UO.DragItem · UO.Drop · UO.DropHere · UO.DropItem · UO.MoveItem · UO.MoveItems · UO.MassMove · UO.EmptyContainer · UO.DropDelay · UO.DropCheckCoord · UO.Picking

假貨/顧客物品

UO.MakeFakeItem · UO.DeleteObject

Dye

UO.Dye

儲存的對象

UO.AddObject · UO.AddType · UO.EasyObject · UO.UserObject · UO.LastObject · UO.Forget

關於該主題的範例

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

UO.MoveItem

參數、結果及所有場景

var ok = UO.MoveItem("loot");
UO.Print("Move request: " + Convert.ToString(ok));

UO.MassMove

參數、結果及所有場景

UO.MassMove(350, 0);
UO.Print("Drag one sample item to the destination container");

參考章節

1 · 2

完整指令說明


UO.AddObject

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

C# 簽章

void UO.AddObject(object? name);
void UO.AddObject(object? name, object? objectRawId);

儲存命名的 serial 物件以供腳本稍後使用。雙參數形式立即指定物件;單參數觸發遊標對物件的選擇。

參數

  • name 是一個非空名稱,物件在運行時可用。
  • objectRawId - serial 或已儲存的物件名稱。單參數重載不接受此參數,而是請求選擇一個物件。

傳回值

void。透過按名稱讀取物件來檢查已儲存的綁定;該呼叫不會傳回 serial。

行為

  • 給定兩個參數,運行時解析 objectRawId 並將 serial 儲存在 name 下。透過一個參數,客戶端請求物件選擇:選擇項目或mobile,但不選擇卡片單元格。選擇前,先刪除先前的同名綁定;取消/遺失遊標不會恢復它。

獨立的 C# 腳本

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

簡單範例

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

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

UO.Print("Calling UO.AddObject");
UO.AddObject("target");

1。以方便的名稱保存已知項目的serial。 - 直接腳本

參數與執行流程:

  • 以方便的名稱保存已知項目的serial。
UO.AddObject("supplyBox", "0x40012345");

2。請求用遊標選擇一個項目或mobile並將其命名為目標。 - 腳本功能

參數與執行流程:

  • 請求用遊標選擇一個項目或mobile並將其命名為目標。
return  RunScenario();
 object? RunScenario()
{
    UO.AddObject("target");
    return null;
}

3。再次儲存名稱會將綁定替換為新的 serial。 - 腳本類

參數與執行流程:

  • 再次儲存名稱會將綁定替換為新的 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 selectedSerial = "0x40012345";
        UO.AddObject("supplyBox", selectedSerial);
        return null;
    }
}

命令實作

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

UO.AddObject(name) — UO.AddObject(String)

參數: name (String)

結果: void / Unit.

呼叫時:

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

public void AddObject(string name)

        {

            SystemMessage($"What is {name}");

            bridge.AddObject(name);

        }

UO.AddObject(name, objectRawId) — UO.AddObject(Any,Any)

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

結果: void / Unit.

呼叫時:

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

public void AddObject(InjectionValue name, InjectionValue objectRawId) 

            => ObjectChecked(objectRawId, id => AddObject((string)name, id));

UO.AddType

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

C# 簽章

void UO.AddType(object? name);
void UO.AddType(object? name, object? @type);

儲存項目或正文圖形類型mobile的友善名稱。例如,在UO.AddType("bandage", 0x0E21)之後,您可以透過名稱「bandage」搜尋或使用繃帶,而無需在每行重複數字type。這是設定一個名稱→圖形映射,而不是建立一個專案或記住一個特定的ID。

參數

  • name - 引號中必需的字串 - 您的型別名稱。邊緣空間被刪除,大小寫並不重要:「Bandage」和「bandage」是一個條目。空字串、數字名稱、任意單字、符號 |和控製字元是禁止的。這是參數值,而不是新變數或UO指令:後續呼叫也需要引號。
  • type - 可選int 0..65535:圖形/type,例如0x0E21或3617。帶有十進制/十六進制數字的字串或已保存類型的名稱是可接受的;後者複製其當前號碼,不會在名稱之間創建連接。不接受0x40001001形式的ID、負數、分數和未知名稱。如果沒有參數,則會出現選擇遊標:按一下載入的項目,包括容器內部,或mobile。保存所選物件的圖形;地面和靜電磁磚不適合。

傳回值

void - 無回傳值。單獨寫一行,不帶var結果=,也不與true/1比較。此指令不傳回所選的 type、serial 或成功標誌。用滑鼠取消時,保留舊條目;如果之前沒有名稱,則它仍然是未定義的。下一行腳本在正常取消後運行,因此假設使用者確實選擇了新項目,則不會自動觸發該操作。

行為

  • AddType(name, type) 形式立即儲存數字,無需遊標,也無需網路操作。具有相同名稱的重複會取代其類型。錯誤的值不會破壞先前的條目。表格AddType(姓名)正在等待選擇; Esc、用另一個操作替換遊標或不合適的目標使條目保持不變。強制停止腳本會中斷等待並僅釋放屬於它的遊標。
  • 類型名稱與AddObject分開:同一個單字可以代表FindType中的type和UseObject中的serial。 AddType("supply", 0x0E21) 本身並不會使 UseObject("supply") 有效。對於特定項目,使用AddObject/GetSerial;對於一系列項目 - AddType 和參數 type。
  • 名稱在參數中解析 type 在 FindType (所有形式), FindTypeEx, FindTypesArrayEx, FindList, FindNotoriety, GetWorldItems, UseType, UseFromGround, Count, CountGround, CountEx, EquipT, WaitTargetType, WaitTargetGround 和 WaitTargetObjectType。 In型掩模 GetMobiles/FindAnyType/WaitTarget 名稱可以透過組合 | 或數組;惡名規則仍然是分開的。單字“人類”/“接近”和其他過濾器 FindMobile 不被覆蓋。
  • 僅儲存圖形,不儲存顏色、數量、容器、項目名稱、圖層或屬性。同一類型不同顏色的兩個項目需要在搜尋中使用單獨的顏色。該條目並不確認該項目目前存在、可用,或伺服器將允許該操作。

獨立的 C# 腳本

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

簡單範例

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

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

UO.Print("Calling UO.AddType");
UO.AddType("my_tool");

1。舉起一堆發現的金子 - 直接腳本

參數與執行流程:

  • gold_stack - 名稱; 0x0EED – 圖形金。 FindType:-1 - 任何顏色,ground - 地球,2 - 搜尋半徑。傳回字串 serial 或空字串。
  • MoveItem接收找到的serial,整個堆疊的0,以及backpack作為目的地。這是一堆,而不是半徑內的所有堆疊。轉帳的可用性和實際結果取決於伺服器;類型定義本身不攜帶任何內容。
UO.AddType("gold_stack", 0x0EED);
var item = UO.FindType("gold_stack", -1, "ground", 2);
if (Truth(item == ""))
{
    UO.Print("No loaded gold stack within 2 tiles");
    return null;
}
var moved = UO.MoveItem(item, 0, "backpack");
if (Truth(moved == 0))
{
    UO.Print("Move request failed");
}

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

2。僅在生命值低時使用繃帶 - 腳本功能

參數與執行流程:

  • 字串編號0x0E21儲存為int圖形。 Life/MaxHP 比較HP 字元。 FindType遞歸查找背包中任意顏色; -1 距離使用標準搜尋行為。
  • self是應用的目的,FindType之後的繃帶是帶有serial的變數。目標的隊列在使用該項目之前準備好。腳本發送用法,並不斷言處理已經完成;治療計時器/規則取決於伺服器。
return  RunScenario();
 object? RunScenario()
{
    UO.AddType("bandage", "0x0E21");
    if (Truth(UO.Life() >= UO.MaxHP()))
    {
        return null;
    }

    var bandage = UO.FindType("bandage", -1, "backpack", -1, true);
    if (Truth(bandage == ""))
    {
        UO.Print("No loaded bandages in backpack");
        return null;
    }

    UO.WaitTargetObject("self");
    UO.UseObject(bandage);
    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 僅包含名稱,因此遊標開啟。保存的是工具類型,而不是其ID,也不是其顏色。 UseSavedTool 是一個正常的獨立程式C#,不是內建指令。
  • UseType 在背包中搜尋任意顏色的已儲存類型的實例並使用它;如果缺失,則傳回 int serial 或 0。如果該名稱從未定義過,則這是一個參數錯誤,而不是0的結果。取消分配後,Main 不會呼叫UseSavedTool。
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.AddType("my_tool");
        return null;
    }

    void UseSavedTool()
    {
        var used = UO.UseType("my_tool", -1, "backpack");
        if (Truth(used == 0))
        {
            UO.Print("No matching loaded tool in backpack");
        }
    }

    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.AddType(name) — UO.AddType(Any)

參數: name (Any)

結果: void / Unit.

呼叫時:

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

case "addtype":

                    AddType(arguments);

                    break;

UO.AddType(name, type) — UO.AddType(Any,Any)

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

結果: void / Unit.

呼叫時:

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

case "addtype":

                    AddType(arguments);

                    break;

UO.ClickOnObject

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

C# 簽章

void UO.ClickOnObject(object? objID);

透過 GameActions.SingleClick 發送物件的點選。

參數

  • objID — 物件的序號或支援的 self/backpack/lasttarget/saved 物件名稱;數字字串和 0x 字串由執行時間解析。

傳回值

void - 無回傳值。

行為

  • Click透過ObjectChecked解析連結。 ClickOnObject 首先使用serial 的Arg 并调用Click(int)。這是對物品簽名/資訊的請求,而不是 DoubleClick 或物品的使用。伺服器響應是異步的。

獨立的 C# 腳本

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

簡單範例

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

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

UO.Print("Calling UO.ClickOnObject");
UO.ClickOnObject("self");

1。點擊人物-直接腳本

參數與執行流程:

  • 點選一下就會傳送到self。
UO.ClickOnObject("self");

2。點擊最後一個目標-腳本功能

參數與執行流程:

  • 在發送之前,會檢查目標的本地存在性。
return  RunScenario();
 object? RunScenario()
{
    var target = UO.LastTarget();
    if (Truth(UO.Exists(target)))
    {
        UO.ClickOnObject(target);
    }

    return null;
}

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

3。他們會點擊背包-腳本類

參數與執行流程:

  • 點擊背包不會像雙擊那樣打開它。
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.Backpack();
        if (Truth(bag != 0))
        {
            UO.ClickOnObject(bag);
        }

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

參數: objID (Any)

結果: void / Unit.

呼叫時:

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

case "clickonobject": Click(Arg(0)); return InjectionValue.Unit;

UO.DeleteObject

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

C# 簽章

void UO.DeleteObject(object? name);

從運行時表中刪除儲存的物件名稱。

參數

  • name - string 物件表中的名稱;僅刪除此條目。

傳回值

void - 無回傳值。

行為

  • 當找到名稱時,刪除該條目並列印確認訊息;如果沒有名稱,則會列印未找到的訊息。伺服器物件及其內容不會被刪除。

獨立的 C# 腳本

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

簡單範例

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

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

UO.Print("Calling UO.DeleteObject");
UO.DeleteObject("temporary");

1。刪除已建立的名稱 - 直接腳本

參數與執行流程:

  • 僅刪除與角色serial的臨時連線。
UO.AddObject("temporary",UO.Self());
UO.DeleteObject("temporary");

2。缺少名稱 - 腳本函數

參數與執行流程:

  • 缺少名稱會導致出現診斷訊息。
return  RunScenario();
 object? RunScenario()
{
    UO.DeleteObject("missing-example-name");
    return null;
}

3。將名稱儲存在變數 - 腳本類別中

參數與執行流程:

  • string 變數指定要刪除的確切條目。
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 name = "temporary";
        UO.AddObject(name, UO.Self());
        UO.DeleteObject(name);
        return null;
    }
}

命令實作

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

UO.DeleteObject(name) — UO.DeleteObject(String)

參數: name (String)

結果: void / Unit.

呼叫時:

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

public void DeleteObject(string name)

        {

            if (objects.TryGet(name, out int value))

            {

                objects.Remove(name);

                SystemMessage($"Object {name} has been deleted");

            }

            else

                SystemMessage($"Object {name} not found");

        }

UO.Drag

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

C# 簽章

int UO.Drag(object? id);
int UO.Drag(object? id, object? amount);
int UO.Drag(object? id, object? amount, object? timeout);
void UO.Drag(object? fromX, object? fromY, object? toX, object? toY);

將特定項目提升到遊標處;一個單獨的四參數形式在 Windows 視窗中拖曳滑鼠。

參數

  • id — 特定項目/字元的序列:數字、十六進位/十進位字串、 self/backpack/lasttarget/lastobject/lastcontainer/lastcorpse/finditem/laststatus 或已儲存的名稱 AddObject。這不是 type。該物件必須已載入;行動前檢查 Exists.
  • amount — 一堆內的單元數。 0或負值表示整個堆疊;積極的一面受到可用數量的限制。限制MassMove的不是堆疊的數量。如果不存在,則等於0。
  • timeout - 可选的第三个参数:等待观察到的 Picking 直到指定的毫秒数;默认为0。負值相當於0。
  • fromX — 僅 4 個 int 形式:客戶端視窗像素中滑鼠的初始 X。
  • fromY — 客戶端視窗像素中的初始滑鼠 Y。
  • toX — 滑鼠的結束 X(以像素為單位)。
  • toY — 滑鼠的結束 Y(以像素為單位)。

傳回值

使用 1..3 int 參數: 1 — 提升請求已被客戶端接受(超時>0 也觀察到繁忙的遊標); 0 — 電梯被拒絕或超時已過。如果四個參數為 null:則沒有傳回值。這不是 ID 物品。

行為

  • 對於遊戲傳輸,首選形式是 id[,amount[,timeout]] 後面跟著 DropItem 或單一 MoveItem。
  • fromX/fromY/toX/toY表單使用Windows滑鼠事件:移動、按下、移動、釋放。它沒有伺服器確認,取決於視窗的實際內容/焦點。
  • 繁忙的遊標並不等於成功傳輸到目的地。捕獲和釋放是單獨的操作。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。拿起整个堆栈并将其放入背包中 - 直接脚本

參數與執行流程:

  • 戰利品 - serial 到 AddObject。 amount=0表示整個堆疊; -1/-1 設定甘蔗中的自動位置。
  • DropItem 完成捕獲相同的運行時間。一種表示請求已發送,而不是伺服器的確認。
if (Truth(UO.Drag("loot", 0)))
{
    var dropped = UO.DropItem("backpack", -1, -1, 0);
    UO.Print("Drop request: " + Convert.ToString(dropped));
}

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

2。取得具有有限等待的堆疊的一部分 - 腳本函數

參數與執行流程:

  • amount=10 — 一堆最多十個單位;超時=500毫秒。
  • 44/55 - 背包內的座標,而非地圖。如果無法取得該物品,則不會呼叫DropItem。
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.Drag("loot", 10, 500)))
    {
        var dropped = UO.DropItem("backpack", 44, 55, 0);
    }

    return null;
}

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

3。抓握前檢查忙碌的雙手 - 腳本課

參數與執行流程:

  • 一個 Drag 參數意味著整個堆疊,超時=0。
  • Picking 檢查客戶端的共用遊標。不要同時運行兩個獨立的遷移。
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.Picking() == 0))
        {
            if (Truth(UO.Drag("loot")))
            {
                var dropped = UO.DropItem("backpack", -1, -1, 0);
            }
        }

        return null;
    }

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

4。四個滑鼠座標-直接腳本

參數與執行流程:

  • 這些是視窗像素:開始 (100,120)、結束 (260,180)。沒有serial、金額或超時。
  • 僅當所需元素位於這些位置時才使用;對於物件來說,透過serial尋址更可靠。
UO.Drag(100, 120, 260, 180);

命令實作

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

UO.Drag(id) — UO.Drag(Any)

參數: id (Any)

結果: int / Integer.

呼叫時:

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

public int Drag(InjectionValue id) => Drag(id, InjectionValue.Zero, InjectionValue.Zero);

UO.Drag(id, amount) — UO.Drag(Any,Any)

參數: id (Any), amount (Any)

結果: int / Integer.

呼叫時:

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

public int Drag(InjectionValue id, InjectionValue amount) => Drag(id, amount, InjectionValue.Zero);

UO.Drag(id, amount, timeout) — UO.Drag(Any,Any,Any)

參數: id (Any), amount (Any), timeout (Any)

結果: int / Integer.

呼叫時:

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

public int Drag(InjectionValue id, InjectionValue amount, InjectionValue timeout)

        {

            int serial = GetObject(id);

            if (serial == 0)

                return 0;

            int requestedAmount = NumberConversions.ToInt(amount);

            int timeoutMs = Math.Max(0, NumberConversions.ToInt(timeout));

            int result = bridge.DragItem(serial, requestedAmount);

            if (result == 0 || timeoutMs <= 0)

                return result;



            DateTime deadline = DateTime.UtcNow.AddMilliseconds(timeoutMs);

            do

            {

                if (bridge.Picking() != 0)

                    return 1;

                if (DateTime.UtcNow >= deadline)

                    break;

                bridge.Wait(10);

            }

            while (true);



            SystemMessage($"UO.Drag: item pickup was not observable within {timeoutMs} ms.");

            return 0;

        }

UO.Drag(fromX, fromY, toX, toY) — UO.Drag(Integer,Integer,Integer,Integer)

參數: fromX (Integer), fromY (Integer), toX (Integer), toY (Integer)

結果: void / Unit.

呼叫時:

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

public void Drag(int fromX, int fromY, int toX, int toY) => bridge.Drag(fromX, fromY, toX, toY);

UO.DragItem

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

C# 簽章

dynamic UO.DragItem(object? objID, object? count);

拾取特定項目並在運行時記住 DropItem。

參數

  • objID — 特定項目/字元的序列:數字、十六進位/十進位字串、 self/backpack/lasttarget/lastobject/lastcontainer/lastcorpse/finditem/laststatus 或已儲存的名稱 AddObject。這不是 type。該物件必須已載入;行動前檢查 Exists.
  • count — 一堆內的單元數。 0或負值表示整個堆疊;積極的一面受到可用數量的限制。限制MassMove的不是堆疊的數量。

傳回值

int 1 — 顧客接受加價; 0 - 未找到物品或PickUp 被拒絕。相容性元資料object?並不意味著任意結果類型。這不是serial。

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

行為

  • 兩個參數都是必需的。沒有內建的等待確認; Drag(id,amount,timeout) 表單新增了本地 Picking 的等待。
  • 成功捕獲後,完成行動DropItem。滑鼠手動拾取的項目不會設定該運行時的DragItem記憶體。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。提升整個堆疊 - 直接腳本

參數與執行流程:

  • ObjID=透過AddObject掠奪,Count=0是整個堆疊。
  • 第二隊掉落相同的拾取物品。
if (Truth(UO.DragItem("loot", 0)))
{
    var ok = UO.DropItem("backpack", -1, -1, 0);
}

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

2。籌集五個單位 - 腳本功能

參數與執行流程:

  • 將 ObjID 替換為您的 serial。 Count=5指同一堆堆疊的單元。
  • 位置44/55位於阿甘背包內。
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.DragItem(0x40001234, 5)))
    {
        var ok = UO.DropItem("backpack", 44, 55, 0);
    }

    return null;
}

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

3。顯示失敗的捕獲 - 腳本類

參數與執行流程:

  • picked — int 1/0.
  • 捕獲失敗後不要呼叫DropItem:遊標可能屬於另一個活動。
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 picked = UO.DragItem("loot", 0);
        if (Truth(picked == 0))
        {
            UO.Print("Item was not picked up");
        }
        else
        {
            var ok = UO.DropItem("backpack", -1, -1, 0);
        }

        return null;
    }

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

命令實作

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

UO.DragItem(objID, count) — UO.DragItem(Any,Any)

參數: objID (Any), count (Any)

結果: dynamic / Any.

呼叫時:

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

case "dragitem": return new InjectionValue(bridge.DragItem(Arg(0), Arg(1)));

UO.Drop

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

C# 簽章

int UO.Drop(object? @object);
int UO.Drop(object? @object, object? count);
int UO.Drop(object? @object, object? count, object? destination);
dynamic UO.Drop(object? objID, object? count, object? x, object? y, object? z);

執行指定物品的完整傳送,預設傳送到角色下方的地面。

參數

  • object — 特定項目/字元的序列:數字、十六進位/十進位字串、 self/backpack/lasttarget/lastobject/lastcontainer/lastcorpse/finditem/laststatus 或已儲存的名稱 AddObject。這不是 type。該物件必須已載入;行動前檢查 Exists.
  • objID — 特定項目/字元的序列:數字、十六進位/十進位字串、 self/backpack/lasttarget/lastobject/lastcontainer/lastcorpse/finditem/laststatus 或已儲存的名稱 AddObject。這不是 type。該物件必須已載入;行動前檢查 Exists.
  • count — 一堆內的單元數。 0或負值表示整個堆疊;積極的一面受到可用數量的限制。限制MassMove的不是堆疊的數量。沒有計數的簡寫形式是0。
  • destination - 僅採用具有三個參數的形式:容器的序號或集名稱 AddObject; backpack/self/my 選擇背包, receiving/catchbag — SetCatchBag,沒有它的背包。 lastcontainer/lastobject/lasttarget/lastcorpse/finditem/laststatus 在解析到正確的容器時有效。 ground 或者 0 明確選擇土地; -1 — 相同的背包選擇器。未知或未指定的名稱會在捕獲項目之前導致錯誤。如果沒有目的地參數,則使用背包。
  • x - 僅採用五個參數形式:世界 X 地球上的目的地。
  • y — 五參數形式的 World Y。
  • z — 五參數形式的世界高度。

傳回值

int 1——客戶端接受全部轉帳請求; 0 - 失敗。五參數相容形式的元資料為object?,但實際上也回傳int1/0。這不是重置之前拍攝的DragItem:使用DropItem。

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

行為

  • 帶有 1、2、3 和 5 參數的表單已註冊。不存在具有四個參數的形式。
  • Drop(item) 將整個堆疊轉移到其下方的地面上;Drop(item,count) 指定單位;Drop(item,count,destination) 允許容器。
  • Drop(item,count,X,Y,Z) 總是表示土地。對於具有 Gump 座標的容器,請使用 MoveItem。
  • 提升、DropCheckCoord 和伺服器檢查限制適用。團隊不會等待單獨的交付確認。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。整個堆疊就在你的腳下 - 直接腳本

參數與執行流程:

  • object=透過AddObject搶劫,預設情況下count=0。
  • 目的地 - 角色目前在地面上的位置。
var ok = UO.Drop("loot");

2。背包中的五個單元 - 腳本函數

參數與執行流程:

  • count=5 一堆單位;目的地=backpack。
  • 這裡的第三個參數是一個容器,而不是 X。
return  RunScenario();
 object? RunScenario()
{
    var ok = UO.Drop("loot", 5, "backpack");
    return null;
}

3。地面上的顯點 - 場景類

參數與執行流程:

  • 將 ObjID 替換為您的 serial; Count=0 整個堆疊; X/Y/Z=1445/1690/0.
  • 對於這種形式,第三個值是X。不需要預備Drag。
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 ok = UO.Drop(0x40001234, 0, 1445, 1690, 0);
        return null;
    }
}

命令實作

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

UO.Drop(object) — UO.Drop(Any)

參數: object (Any)

結果: int / Integer.

呼叫時:

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

case "drop":

                    if (arguments.Length > 0)

                        return new InjectionValue(MoveItem(arguments[0], arguments.Length > 1 ? arguments[1] : InjectionValue.Zero, arguments.Length > 2 ? arguments[2] : new InjectionValue("ground")));

                    return InjectionValue.False;

UO.Drop(object, count) — UO.Drop(Any,Any)

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

結果: int / Integer.

呼叫時:

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

case "drop":

                    if (arguments.Length > 0)

                        return new InjectionValue(MoveItem(arguments[0], arguments.Length > 1 ? arguments[1] : InjectionValue.Zero, arguments.Length > 2 ? arguments[2] : new InjectionValue("ground")));

                    return InjectionValue.False;

UO.Drop(object, count, destination) — UO.Drop(Any,Any,Any)

參數: object (Any), count (Any), destination (Any)

結果: int / Integer.

呼叫時:

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

case "drop":

                    if (arguments.Length > 0)

                        return new InjectionValue(MoveItem(arguments[0], arguments.Length > 1 ? arguments[1] : InjectionValue.Zero, arguments.Length > 2 ? arguments[2] : new InjectionValue("ground")));

                    return InjectionValue.False;

UO.Drop(objID, count, x, y, z) — UO.Drop(Any,Any,Any,Any,Any)

參數: objID (Any), count (Any), x (Any), y (Any), z (Any)

結果: dynamic / Any.

呼叫時:

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

case "drop": return new InjectionValue(MoveItemChecked(Arg(0), Arg(1), 0, Arg(2), Arg(3), Arg(4)) ? 1 : 0);

UO.DropCheckCoord

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

C# 簽章

dynamic UO.DropCheckCoord();
dynamic UO.DropCheckCoord(object? value);

將物品掉落在地面上時讀取或更改座標範圍檢查。

參數

  • value — 可選值:0 停用,非零 int 啟用。如果沒有參數,則只能讀取狀態。

傳回值

int 0/1 — 可能記錄後的目前狀態;兩種形式都會傳回一個數字。

行為

  • MoveItemChecked 當分配到地面且標誌打開時,拒絕距離角色大於 2 個單元格的切比雪夫 X/Y 距離。檢查不改變座標,也不檢查伺服器是否允許傳輸。容器分配不限於此標誌。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。讀取標誌 - 直接腳本

參數與執行流程:

  • 讀取返回目前標準化設定。
var enabled = UO.DropCheckCoord();
UO.Print(Convert.ToString(enabled));

2。啟用範圍保護-腳本功能

參數與執行流程:

  • 通過 MoveItemChecked 的地面交通現在僅限於兩個方格。
return  RunScenario();
 object? RunScenario()
{
    var enabled = UO.DropCheckCoord(1);
    UO.Print(Convert.ToString(enabled));
    return null;
}

3。恢復設定 - 腳本類

參數與執行流程:

  • 明確保存和恢復原始值。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var old = UO.DropCheckCoord();
        var temporary = UO.DropCheckCoord(0);
        var restored = UO.DropCheckCoord(old);
        return null;
    }
}

命令實作

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

UO.DropCheckCoord() — UO.DropCheckCoord()

參數: 沒有參數。

結果: dynamic / Any.

呼叫時:

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

case "dropcheckcoord":

                    if (arguments.Length > 0) state.DropCheckCoord = Arg(0) != 0 ? 1 : 0;

                    return new InjectionValue(state.DropCheckCoord);

UO.DropCheckCoord(value) — UO.DropCheckCoord(Any)

參數: value (Any)

結果: dynamic / Any.

呼叫時:

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

case "dropcheckcoord":

                    if (arguments.Length > 0) state.DropCheckCoord = Arg(0) != 0 ? 1 : 0;

                    return new InjectionValue(state.DropCheckCoord);

UO.DropDelay

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

C# 簽章

dynamic UO.DropDelay();
dynamic UO.DropDelay(object? value);

讀取或更改專案傳輸使用的GrabDelay運行時延遲。

參數

  • value — 可選延遲(以毫秒為單位);橋接限制為50..10000。

傳回值

沒有目前 GrabDelay 的 int 參數。即使兩個表單的元資料都包含 object?,條目表單也會傳回 null。

行為

  • SetDropDelay和GetDropDelay使用狀態。 GrabDelay。此設定指定客戶端傳輸延遲,而不是由伺服器確認傳輸完成。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。讀取延遲 - 直接腳本

參數與執行流程:

  • 讀取返回毫秒。
var ms = UO.DropDelay();
UO.Print(Convert.ToString(ms));

2。設定延遲 - 腳本函數

參數與執行流程:

  • 該條目設定250毫秒。
return  RunScenario();
 object? RunScenario()
{
    UO.DropDelay(250);
    return null;
}

3。邊框底部 - 腳本類

參數與執行流程:

  • 歸零限制為50 ms,之後恢復為先前的值。
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 previous = UO.DropDelay();
        UO.DropDelay(0);
        UO.Print(Convert.ToString(UO.DropDelay()));
        UO.DropDelay(previous);
        return null;
    }
}

命令實作

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

UO.DropDelay() — UO.DropDelay()

參數: 沒有參數。

結果: dynamic / Any.

呼叫時:

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

case "dropdelay":

                    if (arguments.Length > 0) { bridge.SetDropDelay(Arg(0)); return InjectionValue.Unit; }

                    return new InjectionValue(bridge.GetDropDelay());

UO.DropDelay(value) — UO.DropDelay(Any)

參數: value (Any)

結果: dynamic / Any.

呼叫時:

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

case "dropdelay":

                    if (arguments.Length > 0) { bridge.SetDropDelay(Arg(0)); return InjectionValue.Unit; }

                    return new InjectionValue(bridge.GetDropDelay());

UO.DropHere

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

C# 簽章

int UO.DropHere(object? @object);

將整個指定的物品/堆疊轉移到角色目前位置的地面上。

參數

  • object — 特定項目/字元的序列:數字、十六進位/十進位字串、 self/backpack/lasttarget/lastobject/lastcontainer/lastcorpse/finditem/laststatus 或已儲存的名稱 AddObject。這不是 type。該物件必須已載入;行動前檢查 Exists.

傳回值

int 1 — 转账请求被客户端接受; 0 - 未完成。這不是serial或伺服器確認。

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

行為

  • 已使用一個參數註冊了一個表單。對於堆疊的一部分,請使用 Drop(item,count) 或 MoveItem。
  • X/Y/Z 是在呼叫過程中從角色取得的。不需要事先DragItem。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。拋出已知物品 - 直接腳本

參數與執行流程:

  • object - serial,替換為真實的。
  • 整個堆疊都傳送給字元。
var ok = UO.DropHere(0x40001234);

2。使用已儲存的名稱 - 腳本函數

參數與執行流程:

  • 戰利品是透過AddObject指定的。
  • Exists 檢查可用性而不是伺服器遷移權限。
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.Exists("loot")))
    {
        var ok = UO.DropHere("loot");
    }

    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。處理客戶端故障 - 腳本類

參數與執行流程:

  • ok — int 1/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 ok = UO.DropHere("loot");
        if (Truth(ok == 0))
        {
            UO.Print("Drop request was not accepted");
        }

        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.DropHere(object) — UO.DropHere(Any)

參數: object (Any)

結果: int / Integer.

呼叫時:

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

case "drophere":

                    if (arguments.Length > 0)

                        return new InjectionValue(MoveItem(arguments[0], arguments.Length > 1 ? arguments[1] : InjectionValue.Zero, new InjectionValue("ground"), new InjectionValue(GetX()), new InjectionValue(GetY()), new InjectionValue(GetZ())));

                    return InjectionValue.False;

UO.DropItem

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

C# 簽章

dynamic UO.DropItem(object? moveIntoID, object? x, object? y, object? z);

重置之前在同一運行時間內透過 Drag/DragItem 成功拾取的項目。

參數

  • moveIntoID — 序列目標、backpack 或設定名稱 AddObject。數字0代表地球。使用backpack而不是self:這個低階參數將self解析為角色的serial。
  • x — 對於容器 — 放置在口香糖內(自動 -1/65535);為了地球-世界X。
  • y — 對於容器 — 放置在口香糖內(自動 -1/65535);為了地球-世界Y。
  • z-重設高度;容器中通常是0,在地面上實際點是Z。

傳回值

int 1 - 重置已發送,遊標標記為 Dropped;0 - DragItem 不成功,遊標已更改/不可訪問或分配無效。元資料object?相容性不會改變這個結果。這不是一個數量或serial。

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

行為

  • 所有四個參數都是必需的。此選項不會重新取得該項目;Drop 和 MoveItem 執行完整的結轉serial。
  • 檢查是否是該運轉時所儲存的項目。他人拿取或用手拿取的物品不應意外掉落。
  • 發送後,捕獲記憶體被清除。設定 GrabDelay 會為腳本流程新增暫停。返回後伺服器可能會發生故障。

獨立的 C# 腳本

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

簡單範例

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

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

object? result = UO.DropItem("backpack", -1, -1, 0);
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));

1。自動背包空間-直接腳本

參數與執行流程:

  • MoveIntoID=backpack, X/Y=-1, Z=0.
  • 釋放前會驗證成功捕獲。
if (Truth(UO.DragItem("loot", 0)))
{
    var ok = UO.DropItem("backpack", -1, -1, 0);
}

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

2。箱子內的空間 - 腳本函數

參數與執行流程:

  • 胸部透過AddObject指定。 X=60/Y=70 — 阿甘的座標。
  • amount=10 指的是 Drag,DropItem 沒有自己的 amount。
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.Drag("loot", 10)))
    {
        var ok = UO.DropItem("chest", 60, 70, 0);
    }

    return null;
}

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

3。放置在角色下方的地面上 - 場景類

參數與執行流程:

  • MoveIntoID=0 明確選擇土地。
  • X/Y/Z 是世界點,而不是容器的座標。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var x = UO.GetX();
        var y = UO.GetY();
        var z = UO.GetZ();
        if (Truth(UO.DragItem("loot", 0)))
        {
            var ok = UO.DropItem(0, x, y, z);
        }

        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.DropItem(moveIntoID, x, y, z) — UO.DropItem(Any,Any,Any,Any)

參數: moveIntoID (Any), x (Any), y (Any), z (Any)

結果: dynamic / Any.

呼叫時:

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

case "dropitem": return new InjectionValue(bridge.DropDraggedItem(Arg(0), Arg(1), Arg(2), Arg(3)));

UO.Dye

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

C# 簽章

void UO.Dye(object? dyeObject);
void UO.Dye(object? dyeObject, object? target);

使用轉移的著色項;第二個參數預設物件UO.Wait-target。

參數

  • dyeObject — 物件的序號或支援的 self/backpack/lasttarget/saved 物件名稱;數字字串和 0x 字串由執行時間解析。
  • target - 可選物件/serial 下一個目標。如果沒有第二個參數,就不會設定新目標。

傳回值

void - 無回傳值。

行為

  • 雙參數形式先呼叫WaitTargetObject(target),然後呼叫UseObject(dyeObject)。單參數形式僅使用主詞。這是發送動作;顏色、著色權和總數由伺服器決定。

獨立的 C# 腳本

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

簡單範例

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

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

UO.Print("Calling UO.Dye");
UO.Dye(UO.LastObject());

1。使用染料項目 - 直接腳本

參數與執行流程:

  • 單參數呼叫不指定目標。
var dye = UO.LastObject();
if (Truth(UO.Exists(dye)))
{
    UO.Dye(dye);
}

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

2。顏色選擇目標 - 腳本功能

參數與執行流程:

  • Target 放置在雙擊染料之前。
return  RunScenario();
 object? RunScenario()
{
    var dye = UO.LastObject();
    var target = UO.LastTarget();
    if (Truth(UO.Exists(dye)) && Truth(UO.Exists(target)))
    {
        UO.Dye(dye, target);
    }

    return null;
}

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

3。儲存的名稱 - 腳本類

參數與執行流程:

  • 此範例使用先前儲存的名稱“染料”和“布料”。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        if (Truth(UO.Exists("dye")) && Truth(UO.Exists("cloth")))
        {
            UO.Dye("dye", "cloth");
        }

        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.Dye(dyeObject) — UO.Dye(Any)

參數: dyeObject (Any)

結果: void / Unit.

呼叫時:

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

case "dye":

                    if (arguments.Length > 1) bridge.WaitTargetObject(Arg(1));

                    bridge.UseObject(Arg(0, bridge.GetLastObject()));

                    break;

UO.Dye(dyeObject, target) — UO.Dye(Any,Any)

參數: dyeObject (Any), target (Any)

結果: void / Unit.

呼叫時:

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

case "dye":

                    if (arguments.Length > 1) bridge.WaitTargetObject(Arg(1));

                    bridge.UseObject(Arg(0, bridge.GetLastObject()));

                    break;

UO.EasyObject

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

C# 簽章

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

儲存物件名稱,無需互動式目標查詢。

參數

  • name — 運行時物件條目的名稱,解析為 string。
  • object - 可選serial/連結。沒有它,GetLastObject 會被保留。

傳回值

void - 無回傳值。

行為

  • State.Objects.Set 取代名稱條目。單參數形式使用最後使用的物件而不是LastTarget。該分支不會單獨檢查世界上物件的存在。

獨立的 C# 腳本

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

簡單範例

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

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

UO.Print("Calling UO.EasyObject");
UO.EasyObject("last-used");

1。儲存最後一個物件 - 直接腳本

參數與執行流程:

  • 該名稱被賦予當前的LastObject。
UO.EasyObject("last-used");

2。拯救自己——腳本功能

參數與執行流程:

  • 雙參數形式保留了傳遞的serial。
return  RunScenario();
 object? RunScenario()
{
    UO.EasyObject("me", UO.Self());
    return null;
}

3。刪除臨時條目 - 腳本類

參數與執行流程:

  • Forget 僅刪除已儲存的名稱關聯。
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.EasyObject("temporary", UO.Self());
        UO.Forget("temporary");
        return null;
    }
}

命令實作

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

UO.EasyObject(name) — UO.EasyObject(Any)

參數: name (Any)

結果: void / Unit.

呼叫時:

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

case "easyobject":

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

                    else if (arguments.Length > 0) state.Objects.Set(Text(0), bridge.GetLastObject());

                    break;

UO.EasyObject(name, object) — UO.EasyObject(Any,Any)

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

結果: void / Unit.

呼叫時:

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

case "easyobject":

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

                    else if (arguments.Length > 0) state.Objects.Set(Text(0), bridge.GetLastObject());

                    break;

UO.EmptyContainer

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

C# 簽章

int UO.EmptyContainer(object? delay);
int UO.EmptyContainer(object? delay, object? source);
int UO.EmptyContainer(object? delay, object? source, object? destination);

將箱子、袋子或屍體的所有直接內容物轉移到指定的容器中。第一個參數始終是延遲(以毫秒為單位)。如果未指定來源,則會出現本機範圍:選擇來源容器。預設目的地是當前角色的背包。

參數

  • delay — 第一個必需參數:傳輸之間的延遲,以毫秒為單位。例如 350 - 0,35 秒。使用整數值;負的則減少為0。 GrabDelay 沒有單獨加入此延遲。儲存最後的暫停,以便下一行不會超過最後的請求。
  • source — 第二個可選參數:來源容器的serial,數字/十六進位字串或已儲存的物件名稱。支援lastobject、lastcontainer、lasttarget、lastcorpse、backpack/my。如果參數缺失或等於0,則會出現十字準線。選擇容器物品或屍體; Esc 取消操作。
  • destination - 第三個可選參數是serial或目標容器的保存名稱。 backpack/self/my選擇角色的背包。 receiving/catchbag 選擇已安裝的SetCatchBag容器(如果未安裝則選擇背包)。如果 lastcontainer/lastobject/lasttarget/lastcorpse/finditem/laststatus 解析為可存取容器,則它們有效。未知或未設定的別名會產生錯誤。如果不指定該參數,則使用背包; receiving 容器設定不會變更此選擇。目標必須存在並且與來源不同。 Ground/0 在這裡不是有效的目標容器。

傳回值

int:1,如果來源非空且可為每個選取的直接項目傳送傳輸要求; 0 當來源為空、範圍取消、目標不正確、下載逾時或部分/完整傳送失敗時。這是客戶端請求的結果,不保證伺服器確認清空。

行為

  • 精確形式:EmptyContainer(延遲),EmptyContainer(延遲,來源),EmptyContainer(延遲,來源,目的地)。在遊戲聊天中使用標準前綴: ,emptycontainer 350;來自腳本:UO.EmptyContainer(350)。
  • 瞄準時,命令等待選擇、取消或緊急停止。客戶端持續更新鏡像和網路。 Esc不發送任何進位,不使用舊對象,並返回0。如果另一個瞄準器取代了此選擇,則該操作也會被取消。
  • 如果內容尚未下載,客戶端開啟來源並等待3000毫秒伺服器回應。如果不取得伺服器數據,則無法傳輸對客戶端隱藏的內容。無法訪問/太遠的箱子或伺服器禁令將導致失敗,而不是選擇另一個容器。
  • 收到資料後,將建立直接項目清單。每個堆疊都會完整遷移,一次有一個捕獲和重置請求。所附包完全攜帶;不單獨搜尋其內容。稍後新增的新項目不包含在目前清單中。
  • 在每次請求之前,都會重新檢查該項目是否仍在原始容器中。您不能將容器嵌套在其本身或其子容器中。如果遊標被其他項目佔據,則該指令不會代表您重置它。
  • 遺失的目的地容器不會被背包取代。 1的結果並不表示伺服器已接受所有操作:如有必要,請在更新伺服器後檢查內容。緊急停止會中斷等待;已發送的操作不會回滾。
  • 未知的儲存名稱或無效的參數格式會導致 API 錯誤,而不是 0 回傳。將此與有效的 serial 缺失物件區分開來:為此操作傳回 0。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。用瞄準器選擇一個箱子或屍體並將其轉移到背包中 - 直接腳本

參數與執行流程:

  • 唯一的參數delay=350指定間隔350毫秒。源遺失,因此出現十字準線。
  • 目的地也遺失了:內容物進入角色的背包。選擇容器/屍體本身,而不僅僅是其中的一件物品。
  • 發送接收1或0。 0的意思結合了取消、空虛和失敗;另請參閱雜誌以了解詳細資訊。
UO.Print("Select a chest or corpse");
var sent = UO.EmptyContainer(350);
if (Truth(sent == 0))
{
    UO.Print("Cancelled, empty, unavailable, or a transfer failed");
}

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

2。從著名的寶箱到沒有瞄準鏡的背包——腳本功能

參數與執行流程:

  • 延遲=350;來源是寶箱的真實serial,用你的替換近似的ID。景象沒有出現。
  • 第三個參數沒有指定,所以destination=backpack。所有類型的直接物品和整堆物品都包含在結轉中。
  • Print 顯示客戶端的提交結果,而不是項目數或伺服器的確認。
return  RunScenario();
 object? RunScenario()
{
    var source = "0x40001234";
    var sent = UO.EmptyContainer(350, source);
    UO.Print("Client request result: " + Convert.ToString(sent));
    return null;
}

3。兩個選定容器之間 - 腳本類

參數與執行流程:

  • AddObject 帶一個參數提示您選擇一個物件並儲存其名稱。這兩個選擇是按順序進行的。
  • U EmptyContainer delay=350;來源=來源包;目的地=目的地包。第三個參數指定特定的包而不是背包。
  • 這些名稱必須引用不同的容器。取消的AddObject去掉了它名字之前的含義,所以舊包包並不是意外使用的。
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.Print("Select source");
        UO.AddObject("source_bag");
        UO.Print("Select destination");
        UO.AddObject("destination_bag");
        var sent = UO.EmptyContainer(350, "source_bag", "destination_bag");
        UO.Print("Client request result: " + Convert.ToString(sent));
        return null;
    }
}

4。從最後打開的容器到給定的箱子 - 直接腳本

參數與執行流程:

  • 延遲=500 — 半秒間隔。 source=lastcontainer - 伺服器在此客戶端中開啟的最後一個容器。
  • 目的地 - 明確的ID你的胸部;替換範例。 lastcontainer 和 lastobject 有不同的意義:最後打開的容器和最後使用的物件。
  • 在開始之前,請確保您打開的最後一個來源是您需要的來源。攜帶不會遞歸地打開其嵌套的袋子。
var destination = "0x40005678";
UO.EmptyContainer(500, "lastcontainer", destination);

5。目視選擇來源,提前指定目的地-腳本功能

參數與執行流程:

  • 延遲 =350;source=0專門呼叫作用域,同時保留傳遞第三個參數的能力。
  • 目的地=存放指向以前保存的箱子。選擇來源後,內容就會傳輸到那裡。
  • Esc 返回已發送=0,不換行。如果儲存空間未知或不存在,則不會自動選擇另一個容器。
return  RunScenario();
 object? RunScenario()
{
    UO.AddObject("storage", "0x40005678");
    var sent = UO.EmptyContainer(350, 0, "storage");
    return null;
}

命令實作

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

UO.EmptyContainer(delay) — UO.EmptyContainer(Any)

參數: delay (Any)

結果: int / Integer.

呼叫時:

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

case "emptycontainer": return ExecuteEmptyContainer(arguments);

UO.EmptyContainer(delay, source) — UO.EmptyContainer(Any,Any)

參數: delay (Any), source (Any)

結果: int / Integer.

呼叫時:

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

case "emptycontainer": return ExecuteEmptyContainer(arguments);

UO.EmptyContainer(delay, source, destination) — UO.EmptyContainer(Any,Any,Any)

參數: delay (Any), source (Any), destination (Any)

結果: int / Integer.

呼叫時:

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

case "emptycontainer": return ExecuteEmptyContainer(arguments);

UO.Exists

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

C# 簽章

int UO.Exists(object? id);

檢查客戶端本地世界中是否存在未刪除的物件。

參數

  • id — 特定对象的强制 serial/ID:int,十六进制字符串或别名 self、backpack、lasttarget、lastobject、lastcontainer、laststatus、finditem、lastcorpse或名稱AddObject。這不是graphic/type。未指定的名稱解析為0;該指令不會開啟任何新目標。

傳回值

int 1 - serial 現在解析為已載入的項目或 mobile。 int 0 - 客戶端未知物件、已刪除或未設定別名。這不是關於物件存在的伺服器回應:可見區域之外的項目可能存在於伺服器上,並在此處給出0。

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

行為

  • 讀取本機用戶端模型;無需向伺服器發出請求,無需等待或移動。
  • 結果指的是閱讀的那一刻。在UO.Wait或其他操作之後,物件及其標誌可能會發生變化。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。檢查背包是否可用 - 直接腳本

參數與執行流程:

  • 參數 backpack 是您自己角色背包的別名 serial。
  • 1不代表背包裡的東西已經全部收到或已經打開。
var present = UO.Exists("backpack");
if (Truth(present))
{
    UO.Print("Backpack is loaded");
}
else
{
    UO.Print("Backpack is unavailable");
}

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

2。重新檢查已儲存的serial - 腳本功能

參數與執行流程:

  • target 儲存特定的serial。新值lasttarget不會取代它。
  • 暫停500毫秒後,物件可能已不再可見,因此再次執行檢查。
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var target = UO.GetSerial("lasttarget");
    await Delay(500);
    if (Truth(UO.Exists(target)))
    {
        UO.Print(UO.GetName(target));
    }
    else
    {
        UO.Print("Saved target is no longer loaded");
    }

    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。區分 ID 格式與物件存在 - 腳本類

參數與執行流程:

  • 即使沒有對象,GetSerial 也會將數字 1073746484 格式化為 0x40001234。
  • 只有下一次檢查才會報告該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 serial = UO.GetSerial("1073746484");
        UO.Print("Serial: " + serial);
        var present = UO.Exists(serial);
        UO.Print("Present 1/0: " + Convert.ToString(present));
        return null;
    }
}

命令實作

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

UO.Exists(id) — UO.Exists(Integer)

參數: id (Integer/String)

結果: int / Integer.

呼叫時:

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

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

UO.Exists(id) — UO.Exists(String)

參數: id (Integer/String)

結果: int / Integer.

呼叫時:

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

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

UO.Forget

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

C# 簽章

void UO.Forget(object? name);

如果沒有訊息,則從運行時物件中刪除儲存的名稱。

參數

  • name — 轉換為string 的條目名稱。

傳回值

void - 無回傳值。

行為

  • 該分支呼叫state.Objects.Remove。與DeleteObject不同,此表格不會列印確認資訊或報告缺失的姓名。遊戲世界物件不會被刪除。

獨立的 C# 腳本

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

簡單範例

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

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

UO.Print("Calling UO.Forget");
UO.Forget("temporary");

1。刪除臨時名稱-直接腳本

參數與執行流程:

  • 僅刪除名稱與 serial 的關聯。
UO.EasyObject("temporary",UO.Self());
UO.Forget("temporary");

2。缺少名稱 - 腳本函數

參數與執行流程:

  • 允許缺少名稱而不顯示訊息。
return  RunScenario();
 object? RunScenario()
{
    UO.Forget("missing-example-name");
    return null;
}

3。變數名稱 - 腳本類

參數與執行流程:

  • 刪除是指確切的名稱字串。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var name = "temporary";
        UO.EasyObject(name, UO.Self());
        UO.Forget(name);
        return null;
    }
}

命令實作

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

UO.Forget(name) — UO.Forget(Any)

參數: name (Any)

結果: void / Unit.

呼叫時:

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

case "forget": if (arguments.Length > 0) state.Objects.Remove(Text(0)); break;

UO.GetAltName

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

C# 簽章

dynamic UO.GetAltName(object? objID);

讀取客戶已知的角色頭銜:例如姓名後的職業或簽名。

參數

  • objID — 必需的 serial/ID 對象,而非 type 也不是 cliloc。接受 int、十進位/十六進位字串、self、backpack、lasttarget、finditem 或名稱 AddObject。 0表示沒有物體。

傳回值

string — 移动设备标题字段的文本。如果標題未知、物件不是字元或缺少 ID,則為空字串。它不是 serial、全名或屬性陣列。 GetAltName 使用與 GetTitle 相同的欄位。

行為

  • 呼叫本身讀取本地數據,不等待伺服器,也不發送單擊。要請求姓名/頭銜,請單獨使用ClickOnObject;回應是異步到來的。
  • 對於現有字符,空字串也是可接受的。 Exists 檢查回答了另一個問題:物件是否已載入。
  • 在此實作中,備用名稱被對應到角色的標題欄位。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。你的角色的標題 - 直接腳本

參數與執行流程:

  • ObjID=self — 目前客戶端的角色。
  • title 僅包含標題;空白欄位並不意味著腳本錯誤。
var title = UO.GetAltName("self");
UO.Print(title);

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

參數與執行流程:

  • ObjID=id — 最後一個目標的serial。 GetName和標題分開讀取。
  • 項目目標沒有標題字段,並且將給出空字串。
return  RunScenario();
 object? RunScenario()
{
    var id = UO.GetSerial("lasttarget");
    if (Truth(UO.Exists(id)))
    {
        var title = UO.GetAltName(id);
        if (Truth(title != ""))
        {
            UO.Print(UO.GetName(id) + " " + title);
        }
    }

    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。閱讀前提示輸入名稱 - 腳本類

參數與執行流程:

  • 350 — 點選後以毫秒為單位的暫停範例;這不是一個 getter 參數。
  • 伺服器可能會稍後回應,也可能不會傳輸標題。保留對空字串的處理。
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.ClickOnObject(id);
            UO.Wait(350);
            UO.Print(UO.GetAltName(id));
        }

        return null;
    }

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

命令實作

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

UO.GetAltName(objID) — UO.GetAltName(Any)

參數: objID (Any)

結果: dynamic / Any.

呼叫時:

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

case "getaltname": return new InjectionValue(bridge.GetAltName(Arg(0)));

UO.GetColor

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

C# 簽章

string UO.GetColor();
string UO.GetColor(object? id);

讀取 hue 物件並將其格式化為十六進位字串。

參數

  • id 是物件的 Serial/ID,而非 graphic/type。數字、十六進位字串、標準名稱 self/backpack/lasttarget/lastobject/lastcontainer/laststatus/finditem/lastcorpse 或名稱 AddObject。必須設定別名;存在性由Exists檢查。不含參數的註冊形式使用self。

傳回值

string 形式為「0x0481」 - 代碼hue/顏色,0x 後的四個十六進位數字。對於缺少的對象,傳回「0x0000」;未繪製的項目也會出現相同的程式碼。顏色不是graphic/type或獨特的serial。

行為

  • 讀取客戶端已知的最新資料;更新請求不會傳送到伺服器。
  • 未知物件和尚未檢索的屬性可以具有 null/空值。檢查Exists以及特定動作的條件。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。找出最後一項的顏色 - 直接腳本

參數與執行流程:

  • id=lastobject - 最後使用的物件。
  • 結果已經是十六進位字串,不需要 Int2Hex。
var hue = UO.GetColor("lastobject");
UO.Print(hue);

2。搜尋相同顏色的物件 - 腳本函數

參數與執行流程:

  • type和hue是樣本的不同特徵; FindType 接受兩種十六進位表示形式。
  • 匹配 - 找到 serial 或空字串。顏色不能取代type。
return  RunScenario();
 object? RunScenario()
{
    var sample = UO.GetSerial("lastobject");
    if (Truth(UO.Exists(sample)))
    {
        var type = UO.GetGraphic(sample);
        var hue = UO.GetColor(sample);
        var match = UO.FindType(type, hue, "backpack");
        UO.Print(match);
    }

    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。將hue轉換為整數進行比較 - 腳本類

參數與執行流程:

  • GetColor 讀取self; Hex2Int 將十六進位文字轉換為 int。
  • null hue 本身並不能判斷角色是否存在於世界中。
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 hue = UO.Hex2Int(UO.GetColor("self"));
        if (Truth(hue == 0))
        {
            UO.Print("Hue is zero");
        }

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

參數: 沒有參數。

結果: string / String.

呼叫時:

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

public string GetColor() => GetColor(new InjectionValue(bridge.Self));

UO.GetColor(id) — UO.GetColor(Any)

參數: id (Any)

結果: string / String.

呼叫時:

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

public string GetColor(InjectionValue id) => NumberConversions.ToHex((short)bridge.GetColor(GetObject(id)));

UO.GetFlags

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

C# 簽章

int UO.GetFlags(object? id);

從本地已知物件讀取 Entity.Flags 位元遮罩。

參數

  • id — 物件的序號或支援的 self/backpack/lasttarget/saved 物件名稱;數字字串和 0x 字串由執行時間解析。

傳回值

int - 原始Entity.Flags。未知/缺失實體返回0;它是一個面具,而不是一個邏輯結果。

行為

  • GetObject解析鏈接,然後bridge.World.Get讀取遊戲流上的Entity.Flags。空值可能意味著沒有標誌或沒有模型的物件; Exists 區分這些情況。該命令不請求狀態更新。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。標記自己 - 直接腳本

參數與執行流程:

  • 顯示目前角色的遮罩。
var flags = UO.GetFlags("self");
UO.Print(Convert.ToString(flags));

2。已知目標標誌 - 腳本功能

參數與執行流程:

  • Exists 測試區分缺失的模型。
return  RunScenario();
 object? RunScenario()
{
    var id = UO.LastTarget();
    if (Truth(UO.Exists(id)))
    {
        var flags = UO.GetFlags(id);
        UO.Print(Convert.ToString(flags));
    }

    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。缺少 serial - 腳本類

參數與執行流程:

  • null serial 通常與實體不符並傳回 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 flags = UO.GetFlags(0);
        UO.Print(Convert.ToString(flags));
        return null;
    }
}

命令實作

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

UO.GetFlags(id) — UO.GetFlags(Any)

參數: id (Any)

結果: int / Integer.

呼叫時:

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

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

UO.GetGraphic

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

C# 簽章

string UO.GetGraphic();
string UO.GetGraphic(object? id);

讀取項目的 graphic 或字元的 body 並以十六進位文字傳回。

參數

  • id — 特定物件的序列或可解析的別名,例如「self」、「backpack」、「lasttarget」或AddObject保存的名稱。圖文/type這裡就不轉了。無參形式使用self。

傳回值

“0x0EED”形式的string - 圖形type/body 物件。這不是一個獨特的ID/serial。對於未知對象,bridge 傳回graphic 0,其格式為「0x0000」。該指令不回傳true/false。

行為

  • 此命令讀取客戶端的本機資料。它不發送目標,也不更改伺服器上的物件。
  • 數字0可能是有效的數據值。透過 Exists(serial) 檢查物件是否不存在,而不僅僅是透過其屬性的值。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。檢查找到的項目的type - 直接腳本

參數與執行流程:

  • FindType收到type黃金並返還serial。
  • GetGraphic(serial) ​​傳回文字「0x0EED」;變數 item 和 graphic 具有不同的意義。
var item = UO.FindType(0x0EED, -1, "backpack");
if (Truth(item != ""))
{
    var graphic = UO.GetGraphic(item);
    UO.Print("Graphic: " + graphic);
}

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

2。讀取角色的body - 腳本函數

參數與執行流程:

  • 無參形式使用 self。
  • body是角色的外觀程式碼,而不是他的serial。
return  RunScenario();
 object? RunScenario()
{
    var body = UO.GetGraphic();
    UO.Print("Body graphic: " + body);
    return null;
}

3。將讀取的graphic傳遞給新的搜尋 - 腳本類

參數與執行流程:

  • lastobject——樣品;graphic 是FindType 接受為type 的十六進位字串。
  • -1允許任何顏色,backpack指定搜尋區域。 sameType又是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 graphic = UO.GetGraphic("lastobject");
        var sameType = UO.FindType(graphic, -1, "backpack");
        if (Truth(sameType != ""))
        {
            UO.Print("Matching serial: " + sameType);
        }

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

參數: 沒有參數。

結果: string / String.

呼叫時:

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

public string GetGraphics() => GetGraphics(bridge.Self);

UO.GetGraphic(id) — UO.GetGraphic(Integer)

參數: id (Integer/String)

結果: string / String.

呼叫時:

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

public string GetGraphics(int id) => $"0x{bridge.GetGraphics(id):X4}";

UO.GetGraphic(id) — UO.GetGraphic(String)

參數: id (Integer/String)

結果: string / String.

呼叫時:

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

public string GetGraphics(string id) => GetGraphics(GetObject(id));

UO.GetLayer

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

C# 簽章

string UO.GetLayer();
string UO.GetLayer(object? id);

參數

  • id — 特定物件的序列或可解析的別名,例如「self」、「backpack」、「lasttarget」或AddObject保存的名稱。圖文/type這裡就不轉了。無參形式使用self。

傳回值

string 是圖層的名稱,例如「Rhand」、「Lhand」、「Hat」、「Bpack」或「Mount」。傳回層編號的第一個規範名稱,因此 Helmet 輸出為“Hat”,Backpack 輸出為“Bpack”。第 0 層、未知項目或self給出「無效」。未知的非零數字的格式為“0xNN”。它不是serial,不是graphic,也不是Z高度。

行為

  • 此命令讀取客戶端的本機資料。它不發送目標,也不更改伺服器上的物件。
  • 數字0可能是有效的數據值。透過 Exists(serial) 檢查物件是否不存在,而不僅僅是透過其屬性的值。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。确定右手中对象的图层 - 直接脚本

參數與執行流程:

  • ObjAtLayer("Rhand") 選出右手上的項目; 0表示空槽​​。
  • GetLayer 接收找到的項目的 serial 並傳回字串「Rhand」。
object? item = UO.ObjAtLayer("Rhand");
if (item is string serial)
{
    var layer = UO.GetLayer(serial);
    UO.Print(layer);
}

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

2。檢查背包層名稱 - 腳本函數

參數與執行流程:

  • id="backpack" — 目前角色背包的serial。
  • 檢查規格名稱 Bpack,而不是別名 Backpack。
return  RunScenario();
 object? RunScenario()
{
    var layer = UO.GetLayer("backpack");
    if (Truth(layer == "Bpack"))
    {
        UO.Print("Player backpack layer");
    }
    else
    {
        UO.Print("Layer: " + layer);
    }

    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。處理設備不足 - 腳本類

參數與執行流程:

  • lastobject 必須是該物件的實際別名。
  • 無效意味著零層。這本身並不能證明該物品遺失:包包裡的物品也沒有配備。
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 layer = UO.GetLayer("lastobject");
        if (Truth(layer == "Invalid"))
        {
            UO.Print("No equipment layer");
        }
        else
        {
            UO.Print("Equipment layer: " + layer);
        }

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

參數: 沒有參數。

結果: string / String.

呼叫時:

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

public string GetLayer() => GetLayer(new InjectionValue(bridge.Self));

UO.GetLayer(id) — UO.GetLayer(Any)

參數: id (Any)

結果: string / String.

呼叫時:

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

public string GetLayer(InjectionValue id) => ConvertLayer(bridge.GetLayer(GetObject(id)));

UO.GetLocked

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

C# 簽章

int UO.GetLocked(object? id);

檢查mobile麻痺。

參數

  • id - 必需的 serial/ID 具體對象: int、十六進位字串或別名 self, backpack, lasttarget, lastobject, lastcontainer、laststatus、finitem、lastcorpse 或名稱 AddObject。這不是 graphic/type。未指定的名稱被解析為 0;該指令不會開啟任何新目標。參數是必需的;為自己傳遞 self.

傳回值

int 1 - 加载的mobile具有属性IsParalyzed。 int 0 - 属性丢失,对象不是 mobile、未知或已删除。儘管名稱為鎖定,但它不是胸部鎖、被固定的物品或任何無法移動的原因。讀取與Paralyzed相同的標誌。

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

行為

  • 讀取本機用戶端模型;無需向伺服器發出請求,無需等待或移動。
  • 結果指的是閱讀的那一刻。在UO.Wait或其他操作之後,物件及其標誌可能會發生變化。
  • 儘管名稱為鎖定,但它不是胸部鎖、被固定的物品或任何無法移動的原因。讀取與Paralyzed相同的標誌。

獨立的 C# 腳本

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

簡單範例

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

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

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

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

參數與執行流程:

  • self 參數明確選擇其字元。狀態 - 僅1/0。
  • 儘管名稱為鎖定,但它不是胸部鎖、被固定的物品或任何無法移動的原因。讀取與Paralyzed相同的標誌。
var state = UO.GetLocked("self");
var paralyzed = UO.Paralyzed();
UO.Print("GetLocked: " + Convert.ToString(state));
UO.Print("Paralyzed: " + Convert.ToString(paralyzed));

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

參數與執行流程:

  • IsNpc 排除主體和未知客體。 target 儲存單一serial,而不是對不斷變化的lasttarget 的即時引用。
  • 結果引用欄位IsParalyzed。僅在客戶端收到適當的狀態後才會更新資料。
return  RunScenario();
 object? RunScenario()
{
    var target = UO.GetSerial("lasttarget");
    if (Truth(UO.IsNPC(target)))
    {
        var state = UO.GetLocked(target);
        UO.Print("Selected mobile state 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。比較暫停前後的狀態 - 腳本類

參數與執行流程:

  • UO.Wait(500) — 以毫秒為單位暫停。之後,單獨檢查mobile是否仍然存在。
  • 比較兩個影像。可能會錯過中間的更改,並且這不是對伺服器事件的連續訂閱。
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 target = UO.GetSerial("lasttarget");
        if (Truth(UO.IsNPC(target)))
        {
            var before = UO.GetLocked(target);
            await Delay(500);
            if (Truth(UO.IsNPC(target)))
            {
                var after = UO.GetLocked(target);
                if (Truth(before != after))
                {
                    UO.Print("Flag changed: " + Convert.ToString(before) + " -> " + Convert.ToString(after));
                }
            }
            else
            {
                UO.Print("Mobile left the local world");
            }
        }

        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.GetLocked(id) — UO.GetLocked(Any)

參數: id (Any)

結果: int / Integer.

呼叫時:

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

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

UO.GetName

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

C# 簽章

string UO.GetName();
string UO.GetName(object? id);

讀取客戶已知的物品或角色的名稱。

參數

  • id 是物件的 Serial/ID,而非 graphic/type。數字、十六進位字串、標準名稱 self/backpack/lasttarget/lastobject/lastcontainer/laststatus/finditem/lastcorpse 或名稱 AddObject。必須設定別名;存在性由Exists檢查。不含參數的註冊形式使用self。

傳回值

string — 物件名稱。未知物件或尚未獲得的名稱會導致空字串“”。這不是 serial,不是 type,也不是工具提示中的完整屬性清單。

行為

  • 讀取客戶端已知的最新資料;更新請求不會傳送到伺服器。
  • 未知物件和尚未檢索的屬性可以具有 null/空值。檢查Exists以及特定動作的條件。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。列印角色名稱 - 直接腳本

參數與執行流程:

  • 如果沒有參數,則使用 self。
  • 結果是名稱的文本,可以直接顯示。
var name = UO.GetName();
UO.Print(name);

2。進程未知目標名稱 - 腳本函數

參數與執行流程:

  • lasttarget — 物件別名。 GetName 不開啟新目標。
  • 空名稱並不能證明物件不存在:關於沒有名稱的serial的資訊可能會先出現。
return  RunScenario();
 object? RunScenario()
{
    var name = UO.GetName("lasttarget");
    if (Truth(name == ""))
    {
        UO.Print("Name is not available");
    }
    else
    {
        UO.Print("Target: " + name);
    }

    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。比較名稱大小寫不敏感 - 腳本類

參數與執行流程:

  • ToLowerInvariant 將字串轉換為小寫以進行比較。
  • 該名稱由伺服器設定並且可以本地化。若要依圖形類型過濾,請使用FindType/GetGraphic。
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 name = UO.GetName("lastobject");
        if (Truth(Convert.ToString(name) == "gold"))
        {
            UO.Print("Known name matches");
        }

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

參數: 沒有參數。

結果: string / String.

呼叫時:

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

public string GetName() => GetName("self");

UO.GetName(id) — UO.GetName(Any)

參數: id (Any/Integer/String)

結果: string / Any.

呼叫時:

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

case "getname":

                case "charname": return new InjectionValue(bridge.GetName(Arg(0, bridge.Self)));

UO.GetName(id) — UO.GetName(Integer)

參數: id (Any/Integer/String)

結果: string / String.

呼叫時:

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

public string GetName(int id) => bridge.GetName(id);

UO.GetName(id) — UO.GetName(String)

參數: id (Any/Integer/String)

結果: string / String.

呼叫時:

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

public string GetName(string id) => GetName(GetObject(id));

UO.GetQuantity

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

C# 簽章

int UO.GetQuantity(object? id);

讀取一個項目堆疊中的單位數量。

參數

  • id 是物件的 Serial/ID,而非 graphic/type。數字、十六進位字串、標準名稱 self/backpack/lasttarget/lastobject/lastcontainer/laststatus/finditem/lastcorpse 或名稱 AddObject。必須設定別名;存在性由Exists檢查。不含參數的註冊形式使用self。對於此命令,需要 id。

傳回值

int — 特定項目的金額欄位。 1000 單元的堆疊通常回傳 1000;單品 - 1。對於未知的serial和角色,返回0。這不是箱子的子物品數量,也不是MassMove命令的物品限制。

行為

  • 讀取客戶端已知的最新資料;更新請求不會傳送到伺服器。
  • 未知物件和尚未檢索的屬性可以具有 null/空值。檢查Exists以及特定動作的條件。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。查看找到的堆疊大小-直接腳本

參數與執行流程:

  • FindType正在背包中尋找任意顏色的type金色。
  • 金幣含有一個serial,因此金額僅適用於找到的一堆。
var gold = UO.FindType(0x0EED, -1, "backpack");
if (Truth(gold != ""))
{
    var amount = UO.GetQuantity(gold);
    UO.Print("Units in this stack: " + Convert.ToString(amount));
}

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

2。檢查最少數量 - 腳本功能

參數與執行流程:

  • id=sample - 最後使用的項目。
  • 50 表示給定堆疊中的那些。 50 此處不計入個別項目。
return  RunScenario();
 object? RunScenario()
{
    var sample = UO.GetSerial("lastobject");
    if (Truth(UO.Exists(sample)))
    {
        if (Truth(UO.GetQuantity(sample) >= 50))
        {
            UO.Print("At least 50 units in this 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。區分堆疊數量 - 場景類

參數與執行流程:

  • FindCount指上次找到的結果; GetQuantity - 到 1 serial。
  • 數字可能相差很大。 MassMove 數量限制整個物品,包括堆疊。
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 item = UO.FindType(0x0EED, -1, "backpack");
        var stacks = UO.FindCount();
        if (Truth(item != ""))
        {
            var units = UO.GetQuantity(item);
            UO.Print("Matching items: " + Convert.ToString(stacks));
            UO.Print("Units in selected item: " + Convert.ToString(units));
        }

        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.GetQuantity(id) — UO.GetQuantity(Any)

參數: id (Any/Integer/String)

結果: int / Any.

呼叫時:

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

case "getquantity": return new InjectionValue(bridge.GetQuantity(Arg(0)));

UO.GetQuantity(id) — UO.GetQuantity(Integer)

參數: id (Any/Integer/String)

結果: int / Integer.

呼叫時:

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

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

UO.GetQuantity(id) — UO.GetQuantity(String)

參數: id (Any/Integer/String)

結果: int / Integer.

呼叫時:

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

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

UO.GetSerial

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

C# 簽章

string UO.GetSerial();
string UO.GetSerial(object? id);

將物件名稱解析為其 serial 並將 serial 格式化為十六進位字串。

參數

  • id - 可選字串:標準別名、名稱 AddObject 或數字文字(十進位/十六進位)。如果沒有參數,則使用目前字元的 serial。

傳回值

「0x40001234」形式的string是一個唯一的serial/ID對象,0x後的八個十六進位數字。未解析的名稱為“0x00000000”。這不是type。即使沒有載入此類對象,數位文字也會被格式化; GetSerial 本身並不檢查Exists。

行為

  • 別名是從目前的腳本/客戶端狀態讀取。如果別名隨後指向不同的對象,則已儲存的字串serial不會自動變更。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。取得你的角色的ID - 直接腳本

參數與執行流程:

  • 沒有參數,選擇self。
  • serial — 十六進位字串。值0x00000000表示沒有serial字元。
var serial = UO.GetSerial();
UO.Print(serial);

2。安全使用所選姓氏 - 腳本功能

參數與執行流程:

  • id="lasttarget" 解析為 serial 最後一個目標。
  • Exists 檢查物件是否存在,GetName 讀取客戶端已知的名稱。
return  RunScenario();
 object? RunScenario()
{
    var serial = UO.GetSerial("lasttarget");
    if (Truth(UO.Exists(serial)))
    {
        UO.Print(UO.GetName(serial));
    }
    else
    {
        UO.Print("Target is not loaded");
    }

    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。比較數字表示形式 - 腳本類

參數與執行流程:

  • id 是一個帶有十進制serial1073746484的字串。
  • 結果0x40001234顯示格式。這是一個數字的例子,它不會創造一個對象,也不保證它的存在。
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 serial = UO.GetSerial("1073746484");
        UO.Print(serial);
        return null;
    }
}

命令實作

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

UO.GetSerial() — UO.GetSerial()

參數: 沒有參數。

結果: string / String.

呼叫時:

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

public string GetSerial() => NumberConversions.ToHex(bridge.Self);

UO.GetSerial(id) — UO.GetSerial(String)

參數: id (String)

結果: string / String.

呼叫時:

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

public string GetSerial(string id) => NumberConversions.ToHex(GetObject(id));

UO.GetTooltip

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

C# 簽章

dynamic UO.GetTooltip(object? objID);

從OPL讀取完成的物件屬性文字。 GetTooltip 和 GetCliloc 是同義詞。

參數

  • objID — 必需的 serial/ID 對象,而非 type 也不是 cliloc。接受 int、十進位/十六進位字串、self、backpack、lasttarget、finditem 或名稱 AddObject。 0表示沒有物體。

傳回值

string — 屬性的名稱和文本,以換行符號分隔,或僅非空部分。如果 ObjID=0 或未收到屬性,則為空字串。這是現成的文字;數字ID cliloc 和參數由GetTooltipRec 傳回。

行為

  • 如果條目已經在 OPL,她的短信立即返回。如果沒有條目,則會發送屬性請求並預計會收到回應,直到 200 毫秒檢查每個 10 多發性硬化症。暫停並不能保證得到回應。
  • 我们需要一个可访问的对象并支持服务器的属性。空結果並不能證明該物件不存在:單獨使用 Exists。
  • 文本可能包含服务器标记。不要按行位置解析數字屬性;為此使用GetTooltipRec。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。背包中物品的屬性 - 直接腳本

參數與執行流程:

  • FindType:黃金0x0EED,任hue=-1,直接內容backpack。 ObjID=項目 - 找到serial。
  • getter 結果是文本,而不是金幣數量。對於數量,請使用FindCount(項目)。
var item = UO.FindType(0x0EED, -1, "backpack");
if (Truth(item != ""))
{
    UO.Print(UO.GetTooltip(item));
}

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

2。處理無回應 - 腳本函數

參數與執行流程:

  • ObjID=lasttarget 必須指向所需的物件。
  • 空字串單獨處理;不需要無限循環地自動重複請求。
return  RunScenario();
 object? RunScenario()
{
    var text = UO.GetTooltip("lasttarget");
    if (Truth(text == ""))
    {
        UO.Print("No properties received");
    }
    else
    {
        UO.Print(text);
    }

    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。儲存文字直到下一個操作 - 腳本類

參數與執行流程:

  • id 和 saving 是單獨的變數:物件的唯一 ID 及其文字的快照。
  • 如果伺服器上的屬性稍後發生更改,則儲存的內容不會自動更改。
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");
        var saved = UO.GetTooltip(id);
        UO.Print("Object: 0x" + Hex(id));
        UO.Print(saved);
        return null;
    }

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

命令實作

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

UO.GetTooltip(objID) — UO.GetTooltip(Any)

參數: objID (Any)

結果: dynamic / Any.

呼叫時:

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

case "getcliloc":

                case "gettooltip":

                    return new InjectionValue(bridge.GetTooltip(Arg(0)));

UO.GetTooltipRec

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

C# 簽章

dynamic UO.GetTooltipRec(object? objID);

讀取結構化屬性:cliloc ID 和每個條目的參數OPL。

參數

  • objID — 必需的 serial/ID 對象,而非 type 也不是 cliloc。接受 int、十進位/十六進位字串、self、backpack、lasttarget、finditem 或名稱 AddObject。 0表示沒有物體。

傳回值

Array 是屬性行的單一快照。每行等於 [clilocID:int,parameters:Array]。 rows[i][0]是本地化訊息的編號,rows[i][1]是參數數組。 ArrayLength(行) — 屬性數; ArrayLength(參數) — 一個屬性的參數數。如果 ObjID=0 或未收到記錄,則為空數組。這不是 ID 項目清單或完成的文字。

行為

  • 快取條目立即返回。如果缺少OPL,則查詢屬性最多等待120毫秒;取消該過程會中斷等待。已知的空OPL不會引起預期。
  • 如ClilocLoader 所示,會跳過初始服務選項卡。清空內部參數儲存位置; #將號碼儲存為字串,以便後續本地化。未知參數會產生空數組。
  • 更改傳回的數組不會更改客戶端的快取。對於文字使用GetTooltip/GetCliloc;翻譯一行 - GetClilocByID(clilocID, 參數)。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。查看所有房產號碼 - 直接腳本

參數與執行流程:

  • ObjID=lasttarget — 物件。 rows 包含屬性,i 是0 的索引。 row[0] 是 cliloc,不是 serial。
  • 循環在空數組上失敗。每筆記錄都被處理一次。
var rows = UO.GetTooltipRec("lasttarget");
var i = 0;
while (Truth(i < ArrayLength(rows)))
{
    var row = rows[i];
    UO.Print("Cliloc: " + Convert.ToString(row[0]));
    i = i + 1;
}

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。翻譯每筆記錄及其參數 - 腳本函數

參數與執行流程:

  • GetClilocByID接收clilocID=row[0]並替換數組=row[1]。
  • 參數保持有序。不要傳遞整行而不是參數數組。
return  RunScenario();
 object? RunScenario()
{
    var rows = UO.GetTooltipRec("lasttarget");
    var i = 0;
    while (Truth(i < ArrayLength(rows)))
    {
        var row = rows[i];
        var text = UO.GetClilocByID(row[0], row[1]);
        UO.Print(text);
        i = 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。取得已知屬性的數字參數 - 腳本類

參數與執行流程:

  • 想要 - ID 財產的範例;替換為所需的 cliloc。 args[0] 是第一個參數,最初是string。
  • 在Val之前,檢查參數的數量和數字格式。此參數可以是文字或#cliloc 連結。
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 rows = UO.GetTooltipRec("lasttarget");
        var wanted = 1060401;
        var i = 0;
        while (Truth(i < ArrayLength(rows)))
        {
            var row = rows[i];
            var args = row[1];
            if (Truth(row[0] == wanted) && Truth(ArrayLength(args) > 0))
            {
                if (Truth(IsNumeric(args[0])))
                {
                    UO.Print("Value: " + Convert.ToString(Val(args[0])));
                }
            }

            i = i + 1;
        }

        return null;
    }

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

命令實作

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

UO.GetTooltipRec(objID) — UO.GetTooltipRec(Any)

參數: objID (Any)

結果: dynamic / Array.

呼叫時:

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

case "gettooltiprec":

                    return new InjectionValue(bridge.GetTooltipRecords(Arg(0)).Select(entry =>

                        new InjectionValue(new[]

                        {

                            new InjectionValue(entry.ClilocID),

                            new InjectionValue(entry.Parameters.Select(value => new InjectionValue(value)).ToArray())

                        })).ToArray());

UO.GetType

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

C# 簽章

dynamic UO.GetType(object? objID);

讀取項目的數字 graphic 或字元的 body。

參數

傳回值

物品的int - graphic/type 或角色的body,例如0x0EED (3821) 代表金幣。如果未找到對象,則傳回值0。 GetType 不回傳 serial 或文字「0x...」;字串形式由GetGraphic給出。

行為

  • 此命令讀取客戶端的本機資料。它不發送目標,也不更改伺服器上的物件。
  • 數字0可能是有效的數據值。透過 Exists(serial) 檢查物件是否不存在,而不僅僅是透過其屬性的值。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。比較數字 type 與常數 - 直接腳本

參數與執行流程:

  • ObjID="lastobject" - 特定物件的別名。
  • 0x0EED是graphic的個數;比較不會尋找具有此類 serial 的物件。
var graphic = UO.GetType("lastobject");
if (Truth(graphic == 0x0EED))
{
    UO.Print("Gold graphic");
}

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

2。取得type自己的背包-腳本函數

參數與執行流程:

  • ObjID="backpack" - 目前背包。
  • Convert.ToString 格式化傳回的數字以進行輸出。
return  RunScenario();
 object? RunScenario()
{
    var graphic = UO.GetType("backpack");
    UO.Print("Backpack type: " + Convert.ToString(graphic));
    return null;
}

3。在讀取type之前檢查物件是否存在 - 腳本類

參數與執行流程:

  • 在 Exists 之前檢查空字串 FindType。
  • Exists 返回布林值1/0;GetType 返回數字graphic。
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 item = UO.FindType(0x0EED, -1, "backpack");
        if (Truth(item != ""))
        {
            if (Truth(UO.Exists(item)))
            {
                UO.Print("Type: " + Convert.ToString(UO.GetType(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;
}

命令實作

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

UO.GetType(objID) — UO.GetType(Any)

參數: objID (Any)

結果: dynamic / Any.

呼叫時:

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

case "gettype": return new InjectionValue(bridge.GetGraphics(Arg(0)));

UO.Grab

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

C# 簽章

int UO.Grab();
int UO.Grab(object? id);
int UO.Grab(object? amount, object? id);
int UO.Grab(object? amount, object? item, object? container);
int UO.Grab(object? amount, object? item, object? container, object? timeout);

將項目傳輸到指定/接收容器,或開啟項目選擇。

參數

  • id — 項目的序號/別名。沒有參數,互動式選擇就開始了;只要有一個參數1,就採用該項目的單位。
  • item — 項目的序號/別名。沒有參數,互動式選擇就開始了;只要有一個參數1,就採用該項目的單位。
  • id / item — 項目的序號/別名。沒有參數,互動式選擇就開始了;只要有一個參數1,就採用該項目的單位。
  • amount — 在表格中 2..4 — 數量作為第一個參數,然後是項目。 0 根據規則表示整個堆疊 MoveItem;不要使用 Grab(item) 表單更改訂單。
  • container - 僅表格 3/4:明確賦值。沒有它 - 狀態。 ReceivingContainer,如果>0,否則backpack。目的地中的self/my/backpack線表示背包; ground - 接地。
  • timeout - 4 僅形式,毫秒。發送至CompactMoveItem等待確認;座標ground取自self,容器 - 0xFFFF/0xFFFF/0。

傳回值

數位標誌int:1-接受互動選擇,或依照選擇的形式接受/確認轉帳;0 - 失敗/沒有適當的物品。無爭議結果並不意味著該項目已被轉移。

行為

  • CompactGrab保留歷史形式Grab(item)=1單位。沒有超時的表單使用CompactMoveItem,無需強制確認等待;超時的形式指定UO.Wait=true。
  • 串行0立即給出0。未解決/不適當的物件由MoveItem進一步檢查。伺服器規則、堆疊數量和目前容器會影響結果。三/四個參數不是放置座標。
  • amount<=0 請求整個堆疊。在有超時的表單中,負暫停變為0,但至少執行一次本地檢查;檢查UO.Wait(10)之間。部分轉移透過初始數量的減少來確認,完全轉移透過分配來確認,對於groundX/Y/Z。這是對世界狀況的觀察,而不是來自 ID 請求的新協定回應;已經合適的狀態可以立即給出1。即使請求可能已經發送,超時也會給出0。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。直接呼叫-直接腳本

參數與執行流程:

  • 將項目傳輸到指定/接收容器,或開啟項目選擇。
var accepted = UO.Grab();
UO.Print(accepted);

2。明確選項 - 腳本函數

參數與執行流程:

  • CompactGrab保留歷史形式Grab(item)=1單位。沒有超時的表單使用CompactMoveItem,無需強制確認等待;超時的形式指定UO.Wait=true。
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.Exists("lastobject")))
    {
        UO.Print(UO.Grab("lastobject"));
    }

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

參數與執行流程:

  • 串行0立即給出0。未解決/不適當的物件由MoveItem進一步檢查。伺服器規則、堆疊數量和目前容器會影響結果。三/四個參數不是放置座標。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        if (Truth(UO.Exists("lastobject")))
        {
            UO.Print(UO.Grab(0, "lastobject", "backpack", 2000));
        }

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

參數: 沒有參數。

結果: int / Integer.

呼叫時:

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

public int Grab() => bridge.RequestInteractiveGrabTarget();

UO.Grab(id) — UO.Grab(Any)

參數: id (Any)

結果: int / Integer.

呼叫時:

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

public int Grab(InjectionValue id) => CompactGrab(new[] { id });

UO.Grab(amount, id) — UO.Grab(Any,Any)

參數: amount (Any/Integer/String), id (Any/Integer/String)

結果: int / Any.

呼叫時:

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

case "grab": return new InjectionValue(CompactGrab(arguments));

UO.Grab(amount, id) — UO.Grab(Integer,Integer)

參數: amount (Any/Integer/String), id (Any/Integer/String)

結果: int / Integer.

呼叫時:

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

public int Grab(int amount, int id) => CompactGrab(new[] { new InjectionValue(amount), new InjectionValue(id) });

UO.Grab(amount, id) — UO.Grab(Integer,String)

參數: amount (Any/Integer/String), id (Any/Integer/String)

結果: int / Integer.

呼叫時:

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

public int Grab(int amount, string id) => CompactGrab(new[] { new InjectionValue(amount), new InjectionValue(id) });

UO.Grab(amount, id) — UO.Grab(String,String)

參數: amount (Any/Integer/String), id (Any/Integer/String)

結果: int / Integer.

呼叫時:

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

public int Grab(string amount, string id) => CompactGrab(new[] { new InjectionValue(amount), new InjectionValue(id) });

UO.Grab(amount, item, container) — UO.Grab(Any,Any,Any)

參數: amount (Any), item (Any), container (Any)

結果: int / Integer.

呼叫時:

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

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

values => new InjectionValue(CompactGrab(values))

UO.Grab(amount, item, container, timeout) — UO.Grab(Any,Any,Any,Any)

參數: amount (Any), item (Any), container (Any), timeout (Any)

結果: int / Integer.

呼叫時:

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

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

values => new InjectionValue(CompactGrab(values))

UO.IsMovable

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

C# 簽章

int UO.IsMovable(object? objID);

使用經典 UO 選擇規則檢查已知項目的可移植性的本地跡象。

參數

  • objID — 特定对象的强制 serial/ID:int,十六进制字符串或别名 self、backpack、lasttarget、lastobject、lastcontainer、laststatus、finditem、lastcorpse或名稱AddObject。這不是graphic/type。未指定的名稱解析為0;該指令不會開啟任何新目標。

傳回值

int 1 - 物品沒有被移除,不是多件,也沒有被當地重量/地面物品的可移動規則阻擋。 int 0 - mobile,地面上有多個未知/移除的物體或被阻擋的物體。 1 不保證成功Drag/MoveItem:範圍、存取、遊標狀態和最終伺服器決策將單獨檢查。

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

行為

  • 讀取本機用戶端模型;無需向伺服器發出請求,無需等待或移動。
  • 結果指的是閱讀的那一刻。在UO.Wait或其他操作之後,物件及其標誌可能會發生變化。
  • 在地面上,當某個項目的tiledata條目的權重大於90並且缺少可移動伺服器標誌時,該項目被視為已鎖定。权重 90 及更小不需要此标志。
  • 在容器內,阻擋地面物品的規則不適用。這裡tiledata的權重是一個服務屬性,不是GetQuantity,也不是角色目前的權重。
  • 其他客戶文件可能有不同的重量描述。這描述了該客戶端的實際規則GameActions.PickUp。

獨立的 C# 腳本

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

簡單範例

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

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

var result = UO.IsMovable(UO.GetSerial("lastobject"));
UO.Print("IsMovable: " + Convert.ToString(result));

1。檢查最後一項,無需移動 - 直接腳本

參數與執行流程:

  • item — 最後使用的項目的serial。可動產的數量並不是其數量。
  • 此範例不會取得任何內容,也不會將任何內容傳送到伺服器。
var item = UO.GetSerial("lastobject");
var movable = UO.IsMovable(item);
UO.Print("Locally movable 1/0: " + Convert.ToString(movable));

2。分別估計符號和距離 - 腳本函數

參數與執行流程:

  • 對於地面上的物體,GetDistance 顯示客戶的已知範圍。
  • 即使可移動=1,該專案也可能離得太遠。肯定的結果並不表示伺服器允許傳輸。
return  RunScenario();
 object? RunScenario()
{
    var item = UO.GetSerial("lasttarget");
    if (Truth(UO.Exists(item)))
    {
        var movable = UO.IsMovable(item);
        var distance = UO.GetDistance(item);
        UO.Print("Movable: " + Convert.ToString(movable));
        UO.Print("Distance: " + Convert.ToString(distance));
    }

    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。檢查整個找到的堆疊 - 腳本類

參數與執行流程:

  • FindType選擇背包中任一顏色的serial金色。
  • IsMovable 檢查整個專案。 GetQuantity分別讀取單元數;結果 IsMovable 不會取代該計數器。
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 item = UO.FindType(0x0EED, -1, "backpack");
        if (Truth(item != ""))
        {
            if (Truth(UO.IsMovable(item)))
            {
                var units = UO.GetQuantity(item);
                UO.Print("Selected stack units: " + Convert.ToString(units));
            }
        }

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

參數: objID (Any)

結果: int / Integer.

呼叫時:

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

case "ismovable": return new InjectionValue(bridge.IsMovable(Arg(0)));

UO.IsObjectExists

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

C# 簽章

int UO.IsObjectExists(object? objID);

檢查客戶端本地世界中是否存在未刪除的物件。

參數

  • objID — 特定对象的强制 serial/ID:int,十六进制字符串或别名 self、backpack、lasttarget、lastobject、lastcontainer、laststatus、finditem、lastcorpse或名稱AddObject。這不是graphic/type。未指定的名稱解析為0;該指令不會開啟任何新目標。

傳回值

int 1 - serial 現在解析為已載入的項目或 mobile。 int 0 - 客戶端未知物件、已刪除或未設定別名。這不是關於物件存在的伺服器回應:可見區域之外的項目可能存在於伺服器上,並在此處給出0。

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

行為

  • 讀取本機用戶端模型;無需向伺服器發出請求,無需等待或移動。
  • 結果指的是閱讀的那一刻。在UO.Wait或其他操作之後,物件及其標誌可能會發生變化。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。檢查背包是否可用 - 直接腳本

參數與執行流程:

  • 參數 backpack 是您自己角色背包的別名 serial。
  • 1不代表背包裡的東西已經全部收到或已經打開。
var present = UO.IsObjectExists("backpack");
if (Truth(present))
{
    UO.Print("Backpack is loaded");
}
else
{
    UO.Print("Backpack is unavailable");
}

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

2。重新檢查已儲存的serial - 腳本功能

參數與執行流程:

  • target 儲存特定的serial。新值lasttarget不會取代它。
  • 暫停500毫秒後,物件可能已不再可見,因此再次執行檢查。
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var target = UO.GetSerial("lasttarget");
    await Delay(500);
    if (Truth(UO.IsObjectExists(target)))
    {
        UO.Print(UO.GetName(target));
    }
    else
    {
        UO.Print("Saved target is no longer loaded");
    }

    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。區分 ID 格式與物件存在 - 腳本類

參數與執行流程:

  • 即使沒有對象,GetSerial 也會將數字 1073746484 格式化為 0x40001234。
  • 只有下一次檢查才會報告該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 serial = UO.GetSerial("1073746484");
        UO.Print("Serial: " + serial);
        var present = UO.IsObjectExists(serial);
        UO.Print("Present 1/0: " + Convert.ToString(present));
        return null;
    }
}

命令實作

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

UO.IsObjectExists(objID) — UO.IsObjectExists(Any)

參數: objID (Any)

結果: int / Integer.

呼叫時:

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

case "isobjectexists": return new InjectionValue(bridge.Exists(Arg(0)));

UO.LastObject

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

C# 簽章

dynamic UO.LastObject();

讀取上次使用的物件的serial。

參數

沒有參數。

傳回值

int — 已儲存serial; 0 表示未安裝serial。它不是bool,也不是graphic/type;非零的ID可能不再存在於世界上。

行為

  • 欄位來源:_world.LastObject。該指令不會選擇、使用或攻擊該物件。
  • 讀取目前本地狀態。沒有軟體包、目標或自動更新;個別讀取可能會看到不同的狀態。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。直接呼叫-直接腳本

參數與執行流程:

  • 讀取上次使用的物件的serial。
var id = UO.LastObject();
UO.Print(Hex(id));

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

2。明確選項 - 腳本函數

參數與執行流程:

  • 欄位來源:_world.LastObject。該指令不會選擇、使用或攻擊該物件。
return  RunScenario();
 object? RunScenario()
{
    var id = UO.LastObject();
    if (Truth(id != 0) && Truth(UO.Exists(id)))
    {
        UO.Print(UO.GetName(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。完整的輔助函數 - 腳本類

參數與執行流程:

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

命令實作

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

UO.LastObject() — UO.LastObject()

參數: 沒有參數。

結果: dynamic / Any.

呼叫時:

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

case "lastobject": return new InjectionValue(bridge.GetLastObject());

UO.MakeFakeItem

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

C# 簽章

void UO.MakeFakeItem(object? @type);
void UO.MakeFakeItem(object? @type, object? serial);
void UO.MakeFakeItem(object? @type, object? serial, object? count);
void UO.MakeFakeItem(object? @type, object? serial, object? count, object? color);
void UO.MakeFakeItem(object? @type, object? serial, object? count, object? color, object? x);
void UO.MakeFakeItem(object? @type, object? serial, object? count, object? color, object? x, object? y);

僅建立或修改本機客戶端專案。

參數

  • type - 強制graphic 1..65535;未命名 type 到 ResolveType:此遺留分支使用 Arg/int。
  • serial - 可選的serial 項目。 0(預設)從0x7FFEFFFF周圍的本地範圍分配一個空閒的ID;顯式項目serial可以匹配已加載的項目並更改其本地模型。
  • count - 可選數量,預設1。非正數變為1;最大65535。
  • color - 可選hue,預設0;僅限0..65535。
  • x — 可選世界座標,預設為self;消極的使用self,然後將自己限制在0..65535。 Z 始終是當前玩家。 Z。
  • y — 可選世界座標,預設為self;消極的使用self,然後將自己限制在0..65535。 Z 始終是當前玩家。 Z。

傳回值

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

行為

  • CreateFakeItem 需要玩家且有效 graphic/item serial. GetOrCreateItem 返回本地模型;如果它在容器中,則刪除連接。任命 ground container 0xFFFFFFFF, graphic/amount/hue/X/Y/Z, Layer.Invalid, AllowedToDraw=true, IsDamageable=false 和 IsMulti=false.
  • Legacy 指令丟棄回傳的 serial。當0顯示錯誤訊息時。伺服器不創建物品:此操作不提供真實物品、戰利品或轉讓權。例如,保留serial=0。

獨立的 C# 腳本

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

簡單範例

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

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

UO.Print("Calling UO.MakeFakeItem");
UO.MakeFakeItem(0x0E21);

1。直接呼叫-直接腳本

參數與執行流程:

  • 僅建立或修改本機客戶端專案。
UO.MakeFakeItem(0x0E21);

2。明確選項 - 腳本函數

參數與執行流程:

  • CreateFakeItem 需要玩家且有效 graphic/item serial. GetOrCreateItem 返回本地模型;如果它在容器中,則刪除連接。任命 ground container 0xFFFFFFFF, graphic/amount/hue/X/Y/Z, Layer.Invalid, AllowedToDraw=true, IsDamageable=false 和 IsMulti=false.
return  RunScenario();
 object? RunScenario()
{
    UO.MakeFakeItem(0x0E21, 0, 5, 0);
    return null;
}

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

參數與執行流程:

  • Legacy 指令丟棄回傳的 serial。當0顯示錯誤訊息時。伺服器不創建物品:此操作不提供真實物品、戰利品或轉讓權。例如,保留serial=0。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        UO.MakeFakeItem(0x0E21, 0, 1, 0, UO.GetX(), UO.GetY());
        return null;
    }
}

命令實作

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

UO.MakeFakeItem(type) — UO.MakeFakeItem(Any)

參數: type (Any)

結果: void / Unit.

呼叫時:

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

case "makefakeitem":

                {

                    int graphic = Arg(0);

                    int serial = Arg(1, 0);

                    int amount = Arg(2, 1);

                    int hue = Arg(3, 0);

                    int x = Arg(4, bridge.GetX(bridge.Self));

                    int y = Arg(5, bridge.GetY(bridge.Self));

                    int createdSerial = bridge.CreateFakeItem(graphic, serial, amount, hue, x, y);

                    if (createdSerial == 0)

                        SystemMessage("MakeFakeItem: invalid graphic/serial or no active player.");

                    break;

                }

UO.MakeFakeItem(type, serial) — UO.MakeFakeItem(Any,Any)

參數: type (Any), serial (Any)

結果: void / Unit.

呼叫時:

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

case "makefakeitem":

                {

                    int graphic = Arg(0);

                    int serial = Arg(1, 0);

                    int amount = Arg(2, 1);

                    int hue = Arg(3, 0);

                    int x = Arg(4, bridge.GetX(bridge.Self));

                    int y = Arg(5, bridge.GetY(bridge.Self));

                    int createdSerial = bridge.CreateFakeItem(graphic, serial, amount, hue, x, y);

                    if (createdSerial == 0)

                        SystemMessage("MakeFakeItem: invalid graphic/serial or no active player.");

                    break;

                }

UO.MakeFakeItem(type, serial, count) — UO.MakeFakeItem(Any,Any,Any)

參數: type (Any), serial (Any), count (Any)

結果: void / Unit.

呼叫時:

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

case "makefakeitem":

                {

                    int graphic = Arg(0);

                    int serial = Arg(1, 0);

                    int amount = Arg(2, 1);

                    int hue = Arg(3, 0);

                    int x = Arg(4, bridge.GetX(bridge.Self));

                    int y = Arg(5, bridge.GetY(bridge.Self));

                    int createdSerial = bridge.CreateFakeItem(graphic, serial, amount, hue, x, y);

                    if (createdSerial == 0)

                        SystemMessage("MakeFakeItem: invalid graphic/serial or no active player.");

                    break;

                }

UO.MakeFakeItem(type, serial, count, color) — UO.MakeFakeItem(Any,Any,Any,Any)

參數: type (Any), serial (Any), count (Any), color (Any)

結果: void / Unit.

呼叫時:

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

case "makefakeitem":

                {

                    int graphic = Arg(0);

                    int serial = Arg(1, 0);

                    int amount = Arg(2, 1);

                    int hue = Arg(3, 0);

                    int x = Arg(4, bridge.GetX(bridge.Self));

                    int y = Arg(5, bridge.GetY(bridge.Self));

                    int createdSerial = bridge.CreateFakeItem(graphic, serial, amount, hue, x, y);

                    if (createdSerial == 0)

                        SystemMessage("MakeFakeItem: invalid graphic/serial or no active player.");

                    break;

                }

UO.MakeFakeItem(type, serial, count, color, x) — UO.MakeFakeItem(Any,Any,Any,Any,Any)

參數: type (Any), serial (Any), count (Any), color (Any), x (Any)

結果: void / Unit.

呼叫時:

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

case "makefakeitem":

                {

                    int graphic = Arg(0);

                    int serial = Arg(1, 0);

                    int amount = Arg(2, 1);

                    int hue = Arg(3, 0);

                    int x = Arg(4, bridge.GetX(bridge.Self));

                    int y = Arg(5, bridge.GetY(bridge.Self));

                    int createdSerial = bridge.CreateFakeItem(graphic, serial, amount, hue, x, y);

                    if (createdSerial == 0)

                        SystemMessage("MakeFakeItem: invalid graphic/serial or no active player.");

                    break;

                }

UO.MakeFakeItem(type, serial, count, color, x, y) — UO.MakeFakeItem(Any,Any,Any,Any,Any,Any)

參數: type (Any), serial (Any), count (Any), color (Any), x (Any), y (Any)

結果: void / Unit.

呼叫時:

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

case "makefakeitem":

                {

                    int graphic = Arg(0);

                    int serial = Arg(1, 0);

                    int amount = Arg(2, 1);

                    int hue = Arg(3, 0);

                    int x = Arg(4, bridge.GetX(bridge.Self));

                    int y = Arg(5, bridge.GetY(bridge.Self));

                    int createdSerial = bridge.CreateFakeItem(graphic, serial, amount, hue, x, y);

                    if (createdSerial == 0)

                        SystemMessage("MakeFakeItem: invalid graphic/serial or no active player.");

                    break;

                }

UO.MassMove

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

C# 簽章

void UO.MassMove();
void UO.MassMove(object? delay);
void UO.MassMove(object? delay, object? quantity);
void UO.MassMove(object? delay, object? quantity, object? @type);
void UO.MassMove(object? delay, object? quantity, object? @type, object? destination);
void UO.MassMove(object? delay, object? quantity, object? @type, object? destination, object? x, object? y, object? z);

啟用所選類型的項目的一次性批次傳輸。啟動MassMove後,用滑鼠拖曳一個適當的項目:來源容器由此確定。來自同一來源的此類其他項目將自動跟隨。第三個參數是TYPE/Graphic,而不是專案的ID。所有表格均包含等待首次人工轉帳;明確的目的地指定了它將前往的地方。

參數

  • delay — 第一個參數是傳輸請求之間的延遲(以毫秒為單位),是從 0 到 2147483647 的整數。 350 表示0,35 秒。對於0,每個遊戲幀發送的下一個進位不超過一個。 GrabDelay 不新增延遲。負值會停用該模式並清除佇列;對於關閉,最好使用清晰的UO.MassMove()符號。
  • quantity - 第二個參數是單一物品(items)的TOTAL限制,包括第一次手動傳輸。無論裡面的數量多少,一疊/一疊都被視為一件物品。 50 表示最多50 整個堆疊或50 單一項目。在此限制下堆疊不會分裂。 0 或無參數 - 所有合適的項目。不允許使用負值。
  • type - 第三個參數是物品類型代碼(Graphic/Type),整數0..65535,例如0x0EED或字串「0x0EED」代表黃金。這不是 serial/ID,也不是名稱 AddObject。 0 或缺席由第一次手動傳輸確定類型。對於顯式類型,拖曳另一個類型不會啟動佇列;該模式繼續等待合適的項目。
  • destination — 第四個參數是目的。箱子的序號(數字/十六進位字串)或儲存的名稱AddObject選擇容器; X/Y是其視窗內的一個地方。 backpack、self、my 選擇目前角色的背包,以及背包內的座標。 ground 或 0 選擇土地: X/Y/Z - 地圖上的絕對位置,三個參數皆為必填。 lastcontainer — 最後開啟的容器; lastobject、lasttarget、lastcorpse、finitem、laststatus 如果指向可用容器,則它們有效。 receiving和catchbag選擇已安裝的SetCatchBag容器,若未安裝則選擇背包。 self/my這裡指的是背包,雖然GetX(self)讀取角色的位置。名稱以不區分大小寫的方式進行比較;未知或尚未設定的名稱會給出錯誤,而不是將項目扔到地上。如果沒有目的地,則從第一次手動重置時就會記住該位置:您可以將樣品放在容器內或地面上。對地球來說,第一次重置的世界X/Y/Z被記住。
  • x——第五個參數。對於容器,是容器內部的座標; -1或65535表示自動放置。對於陸地,絕對地圖座標,從0到65535。對於沒有 X/Y/Z 的表單,-1 用於明確容器中。
  • y——第六個參數。對於容器 - 容器內部的座標,-1/65535用於自動放置;對於地面 - 絕對地圖座標0..65535。對於在明確容器中沒有座標的表單,請使用 -1。
  • z — 第七個參數是目標高度,整數 -128..127。容器通常含有0;地面上的高度表示實際高度。在簡短的形式中,高度和 X/Y 取自手動傳輸。

傳回值

void:沒有價值。啟動MassMove表示開啟手動轉接等待。總行報告已發送請求的單一項目的數量,包括第一個項目。堆疊被視為一項;結果並不確認伺服器是否接受每個請求。

行為

  • 帶有 0、1、2、3、4 和 7 參數的表單已註冊。 X/Y/Z 僅一起指定。不支援帶有 5、6 或 8 參數的表單。訂單:延誤、數量、type、目的地、x、y、z。
  • 啟動 BEFORE 滑鼠捕捉模式。第一次手動傳輸被視為一項:1000 中的堆疊被完全傳輸,並且僅佔用限制 50 中的一個空間。啟用模式採用完整堆疊,無需拆分對話框。如果在包含之前獲取了堆疊的一部分,則傳輸將被拒絕:將部分放回並重新開始。
  • 一次啟動是指一次手動轉移。選擇樣本後,選擇模式關閉;剩餘隊列將自動處理。從另一個腳本正常呼叫MoveItem不算手動樣本選擇。
  • 比較的是 Graphic 類型。此命令中不過濾顏色。僅處理來源容器的直接內容;封閉的袋子打不開。建立隊列後出現的新項目不會加入其中。如果樣本位於地面上,則考慮捕獲半徑內相同類型的負載物體。
  • 數量是請求的上限。該命令不會自動重試伺服器拒絕的傳輸。如果伺服器發生故障、目的地不可用、角色死亡或無法取得下一個物品,則操作將終止。當遊標繁忙時,隊列將等待 5 秒才能空閒。
  • UO.MassMove() 關閉模式並取消剩餘隊列。 UO.TerminateAll() 離開角色也會取消它。已發送的請求不會因取消而回滾。命令返回後,隊列由客戶端執行;腳本的下一行並不意味著伺服器已經完成傳輸。
  • 若要完全遷移不同類型的內容,請使用EmptyContainer。攜帶一件特定物品 - MoveItem。八個參數源、type、顏色、目的地、x、y、z、延遲指的是MoveItems,而不是MassMove。
  • 正確地重複呼叫相同的命令,當模式仍在等待第一次滑鼠拖曳時,關閉等待:Deactivate MassMove/MassPriceMove 直接出現在遊戲視窗中。下一次呼叫將重新開啟該模式。第一次傳輸後,使用無參形式停止剩餘隊列。已經發送的請求不會被回滾。

獨立的 C# 腳本

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

簡單範例

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

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

UO.Print("Calling UO.MassMove");
UO.MassMove(350, 0);

1。啟用滑鼠傳輸不限制數量-直接腳本

參數與執行流程:

  • 延遲=350:接下來的請求間隔至少350毫秒。數量=0:無用戶上限。
  • 不傳輸type、目的地和X/Y/Z。啟動MassMove後,將樣本從袋子拖曳到箱子中:從中取得類型和來源,目的地是從放置位置。
  • 如果樣品是黃金,則移動同一原始容器中裝載的金堆。其他類型的物品仍然存在。 Print僅說明後續手動操作。
UO.MassMove(350, 0);
UO.Print("Drag one sample item to the destination container");

2。從 100 傳送 50 整個堆疊 - 腳本函數

參數與執行流程:

  • 延遲設定350毫秒。總計傳遞給第二個數量參數,並將整個操作 50 限制為單一項目。
  • 如果來源包含相同類型的100堆疊,則50整個堆疊將被傳輸:第一個手動堆疊和另一個49。每疊可能包含不同的數量;它不會影響計數器。如果這些是單一項目,則轉移50單一項目。
  • 沒有其他選項:呼叫後透過滑鼠選擇第一次捕獲和分配。
return  RunScenario();
 object? RunScenario()
{
    var delay = 350;
    var total = 50;
    UO.MassMove(delay, total);
    return null;
}

3。選擇黃金類型並提前設定寶箱-場景類

參數與執行流程:

  • goldType - TYPE 金幣,而非 ID 單獨的堆疊。 AddObject將寶箱的serial保存在寶箱中;將 0x40005678 替換為您的 ID。
  • 延遲=350毫秒,數量=50單一物品,type=0x0EED,目的地=寶箱。限額包含第一堆且不超過49;整件事情。
  • x=-1 和 y=-1 設定自動放置在胸部,z=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 goldType = "0x0EED";
        UO.AddObject("chest", "0x40005678");
        UO.MassMove(350, 50, goldType, "chest", -1, -1, 0);
        UO.Print("Now drag one gold stack from the source bag");
        return null;
    }
}

4。用滑鼠選擇一個樣本,但提前設定地面 - 直接腳本

參數與執行流程:

  • 延遲=350毫秒,數量=0 — 所有適當的項目。 type=0 取未來手動傳輸的型別。
  • 目的地 =0 表示陸地,因此給出了完整的三重 x,y,z。 GetX/GetY/GetZ 此處傳回角色的目前位置。
  • 呼叫後,用滑鼠拾起並放下樣品。該命令會將其和其他匹配項傳送到指定的座標,即使滑鼠位於容器上方也是如此。伺服器檢查土地的可用性。
var x = UO.GetX();
var y = UO.GetY();
var z = UO.GetZ();
UO.MassMove(350, 0, 0, 0, x, y, z);

5。將最多十個已知類型的物品移入背包 - 腳本功能

參數與執行流程:

  • 延遲=500 — 半秒;數量=10 - 整個操作的十個單獨的物品/堆疊。
  • type=0x0F7A — 項目的圖形類型。請註明您的類型;此處不允許使用 0x40001234 形式的序號。
  • 目的地=backpack — 角色的背包。座標不傳輸,所以裡面使用了x=-1,y=-1,z=0。
  • 透過先手動傳輸合適的項目來選擇來源。如果來源已經是背包,請選擇不同的來源包以方便攜帶。
return  RunScenario();
 object? RunScenario()
{
    UO.MassMove(500, 10, "0x0F7A", "backpack");
    UO.Print("Drag one matching item from the source chest");
    return null;
}

6。根據已放置的物品選擇箱子內的位置 - 場景類

參數與執行流程:

  • 首先,手動將物品放置在箱子中的所需位置。第一個AddObject選擇箱子本身並將其存放在箱子中ID。第二個選擇其中的項目並將ID儲存在position_sample中。
  • 容器內的項目的 GetX/GetY 傳回其在該容器內的座標。它們不依賴胸部視窗在螢幕上的位置。
  • 延遲=350毫秒,數量=50整數物品,type=0由未來手動從來源轉移確定,目的地=寶箱。
  • x 和 y 定義箱子內選定的位置,最後一個 z=0。 position_sample物件僅用於讀取座標;遷移的來源和類型由後續手動遷移決定。
  • 對於背包,將箱子替換為backpack或self。對於陸地,使用 ground 和地圖座標,例如 UO.GetX()、UO.GetY()、UO.GetZ(),不含角色目前位置參數。
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.Print("Select the destination chest");
        UO.AddObject("chest");
        UO.Print("Select an item already at the desired position inside that chest");
        UO.AddObject("position_sample");
        var x = UO.GetX("position_sample");
        var y = UO.GetY("position_sample");
        UO.MassMove(350, 50, 0, "chest", x, y, 0);
        UO.Print("Drag one source item to start the transfer");
        return null;
    }
}

7。從箱子到地面:用滑鼠選擇一個地方-直接腳本

參數與執行流程:

  • 延遲=350 — 後續請求之間至少有350 毫秒。數量=50 - 最多50單一物品/整個堆疊,包括樣品;這些不是來自同一堆堆疊的 50 單位。
  • 啟動MassMove後,拿起打開的箱子中的物品並用滑鼠將其放在地上。其類型和原寶箱是由圖案決定的;世界 X/Y/Z 目的地將被記住在此重置的位置。
  • 該箱子中剩餘的相同類型的裝載物品將被發送到地面上的同一點。嵌套袋和其他類型的內容不受影響。對於所有匹配項,將 50 替換為 0。
  • MassMove沒有回傳值。模式啟用後流程結束,佇列繼續在客戶端工作。最終訊息計算發送的請求,而不是伺服器確認。若要取消剩餘佇列,請呼叫UO.MassMove()。
UO.MassMove(350, 50);
UO.Print("Drag one item from the chest onto the ground");

命令實作

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

UO.MassMove() — UO.MassMove()

參數: 沒有參數。

結果: void / Unit.

呼叫時:

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

case "massmove":

                    if (arguments.Length == 0) bridge.MassMove(-1, 0, 0, -1, -1, -1, 0);

                    else bridge.MassMove(NumberConversions.ToInt(arguments[0]),

                        arguments.Length > 1 ? NumberConversions.ToInt(arguments[1]) : 0,

                        arguments.Length > 2 ? ResolveType(arguments[2]) : 0,

                        arguments.Length > 3 ? ResolveTransferDestination(arguments[3], true) : -1,

                        arguments.Length > 4 ? NumberConversions.ToInt(arguments[4]) : -1,

                        arguments.Length > 5 ? NumberConversions.ToInt(arguments[5]) : -1,

                        arguments.Length > 6 ? NumberConversions.ToInt(arguments[6]) : 0);

                    break;

UO.MassMove(delay) — UO.MassMove(Any)

參數: delay (Any)

結果: void / Unit.

呼叫時:

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

case "massmove":

                    if (arguments.Length == 0) bridge.MassMove(-1, 0, 0, -1, -1, -1, 0);

                    else bridge.MassMove(NumberConversions.ToInt(arguments[0]),

                        arguments.Length > 1 ? NumberConversions.ToInt(arguments[1]) : 0,

                        arguments.Length > 2 ? ResolveType(arguments[2]) : 0,

                        arguments.Length > 3 ? ResolveTransferDestination(arguments[3], true) : -1,

                        arguments.Length > 4 ? NumberConversions.ToInt(arguments[4]) : -1,

                        arguments.Length > 5 ? NumberConversions.ToInt(arguments[5]) : -1,

                        arguments.Length > 6 ? NumberConversions.ToInt(arguments[6]) : 0);

                    break;

UO.MassMove(delay, quantity) — UO.MassMove(Any,Any)

參數: delay (Any), quantity (Any)

結果: void / Unit.

呼叫時:

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

case "massmove":

                    if (arguments.Length == 0) bridge.MassMove(-1, 0, 0, -1, -1, -1, 0);

                    else bridge.MassMove(NumberConversions.ToInt(arguments[0]),

                        arguments.Length > 1 ? NumberConversions.ToInt(arguments[1]) : 0,

                        arguments.Length > 2 ? ResolveType(arguments[2]) : 0,

                        arguments.Length > 3 ? ResolveTransferDestination(arguments[3], true) : -1,

                        arguments.Length > 4 ? NumberConversions.ToInt(arguments[4]) : -1,

                        arguments.Length > 5 ? NumberConversions.ToInt(arguments[5]) : -1,

                        arguments.Length > 6 ? NumberConversions.ToInt(arguments[6]) : 0);

                    break;

UO.MassMove(delay, quantity, type) — UO.MassMove(Any,Any,Any)

參數: delay (Any), quantity (Any), type (Any)

結果: void / Unit.

呼叫時:

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

case "massmove":

                    if (arguments.Length == 0) bridge.MassMove(-1, 0, 0, -1, -1, -1, 0);

                    else bridge.MassMove(NumberConversions.ToInt(arguments[0]),

                        arguments.Length > 1 ? NumberConversions.ToInt(arguments[1]) : 0,

                        arguments.Length > 2 ? ResolveType(arguments[2]) : 0,

                        arguments.Length > 3 ? ResolveTransferDestination(arguments[3], true) : -1,

                        arguments.Length > 4 ? NumberConversions.ToInt(arguments[4]) : -1,

                        arguments.Length > 5 ? NumberConversions.ToInt(arguments[5]) : -1,

                        arguments.Length > 6 ? NumberConversions.ToInt(arguments[6]) : 0);

                    break;

UO.MassMove(delay, quantity, type, destination) — UO.MassMove(Any,Any,Any,Any)

參數: delay (Any), quantity (Any), type (Any), destination (Any)

結果: void / Unit.

呼叫時:

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

case "massmove":

                    if (arguments.Length == 0) bridge.MassMove(-1, 0, 0, -1, -1, -1, 0);

                    else bridge.MassMove(NumberConversions.ToInt(arguments[0]),

                        arguments.Length > 1 ? NumberConversions.ToInt(arguments[1]) : 0,

                        arguments.Length > 2 ? ResolveType(arguments[2]) : 0,

                        arguments.Length > 3 ? ResolveTransferDestination(arguments[3], true) : -1,

                        arguments.Length > 4 ? NumberConversions.ToInt(arguments[4]) : -1,

                        arguments.Length > 5 ? NumberConversions.ToInt(arguments[5]) : -1,

                        arguments.Length > 6 ? NumberConversions.ToInt(arguments[6]) : 0);

                    break;

UO.MassMove(delay, quantity, type, destination, x, y, z) — UO.MassMove(Any,Any,Any,Any,Any,Any,Any)

參數: delay (Any), quantity (Any), type (Any), destination (Any), x (Any), y (Any), z (Any)

結果: void / Unit.

呼叫時:

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

case "massmove":

                    if (arguments.Length == 0) bridge.MassMove(-1, 0, 0, -1, -1, -1, 0);

                    else bridge.MassMove(NumberConversions.ToInt(arguments[0]),

                        arguments.Length > 1 ? NumberConversions.ToInt(arguments[1]) : 0,

                        arguments.Length > 2 ? ResolveType(arguments[2]) : 0,

                        arguments.Length > 3 ? ResolveTransferDestination(arguments[3], true) : -1,

                        arguments.Length > 4 ? NumberConversions.ToInt(arguments[4]) : -1,

                        arguments.Length > 5 ? NumberConversions.ToInt(arguments[5]) : -1,

                        arguments.Length > 6 ? NumberConversions.ToInt(arguments[6]) : 0);

                    break;
⚠️ **GitHub.com Fallback** ⚠️