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

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

移動 — 2

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

參考章節

1 · 2

完整指令說明


UO.NewMoveXY

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

C# 簽章

int UO.NewMoveXY(object? xdst, object? ydst, object? optimized, object? accuracy, object? running);
int UO.NewMoveXY(object? xdst, object? ydst, object? optimized, object? accuracy, object? running, object? stepCallback);
int UO.NewMoveXY(object? xdst, object? ydst, object? optimized, object? accuracy, object? running, object? stepCallback, object? timeout);
int UO.NewMoveXY(object? xdst, object? ydst, object? optimized, object? accuracy, object? running, object? stepCallback, object? timeout, object? maxSteps);
int UO.NewMoveXY(object? xdst, object? ydst, object? optimized, object? accuracy, object? running, object? stepCallback, object? timeout, object? maxSteps, object? maxDistance);
int UO.NewMoveXY(object? xdst, object? ydst, object? optimized, object? accuracy, object? running, object? stepCallback, object? timeout, object? maxSteps, object? maxDistance, object? accuracyZ);
int UO.NewMoveXY(object? xdst, object? ydst, object? optimized, object? accuracy, object? running, object? stepCallback, object? timeout, object? maxSteps, object? maxDistance, object? accuracyZ, object? avoidMobiles);
int UO.NewMoveXY(object? xdst, object? ydst, object? optimized, object? accuracy, object? running, object? stepCallback, object? timeout, object? maxSteps, object? maxDistance, object? accuracyZ, object? avoidMobiles, object? openDoors);
int UO.NewMoveXY(object? xdst, object? ydst, object? optimized, object? accuracy, object? running, object? stepCallback, object? timeout, object? maxSteps, object? maxDistance, object? accuracyZ, object? avoidMobiles, object? openDoors, object? stopOnStuck);

將角色移到X/Y,等待結束並檢查目標達成;支援額外的限制和回調。

參數

  • xdst — 目的地世界座標X,0..65535。這不是 serial 或阿甘內的位置。
  • ydst — 目的地的世界 Y 座標,0..65535。
  • optimized - true - 搜尋和檢查前進路徑的普通模式; false - 減少啟發式和最近步驟檢查。 false 不会禁用避障功能。
  • accuracy — 單元格中 X 和 Y 的公差:兩個偏差都必須在其中。值限制在0..20範圍內; 0 需要精確的 X/Y。
  • running - true/1 - 運行請求,false/0 - 步驟。伺服器運動延遲仍然存在;這不是速度倍增器。
  • timeout — 可選的等待限制(以毫秒為單位);缺少參數 0 和負值表示不存在此附加限制。
  • maxSteps — 觀察到的位置變化的可選限制,而不是網路封包。 0/負/缺席 - 無此限制。輪詢之間可能有幾個步驟,因此這不是準確的細胞計數器。
  • maxDistance — 到目標的初始距離 max(abs(dx),abs(dy)) 的可選限制。 0/缺席會禁用它。這不是遍歷過程中允許的偏差,也不是找到的路徑的長度。
  • accuracyZ — 高度公差:abs(實際Z - 所需Z),受0..255限制。零需要精確的高度; 255 實際上禁用了Z 的限制。對於NewMoveXY,目標Z等於角色召喚時的Z;預設容差為255。
  • avoidMobiles — 可選標誌:true 禁止通過正在考慮的字元; false 允許嘗試。如果沒有參數,則使用 moveThroughNPC。伺服器可能仍會拒絕存取。
  • openDoors — 用於沿途開門的選購標誌。如果沒有參數,則使用moveOpenDoor; true 不提供進入上鎖的門的通道。
  • 若計劃後約 1000 毫秒 X/Y/Z 沒有改變,則stopOnStuck - true 與0 一起完成運動。主動搜尋和重新計算部分重置此計時器;單獨的超時繼續運行。預設為false。

傳回值

int 1 - 在檢查結束時,角色處於給定容差 X/Y/Z 內,包括當他在挑戰之前已經在那裡時。 int 0 - 座標無效、發射失敗、未到達點或觸發停止條件。不是步數或serial;如果緊急取消,程序將中止而不是正常返回0。

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

行為

  • 完整的 A* 路線是在第一步之前建立的,在客戶端更新之間的一小部分中建構。當Optimized=true時,檢查路徑的下一個4單元格;當false是最近的步驟時。這是對已經計算出的路徑的檢查,而不是整個路線的距離,也不是移動滑鼠時的繞行滑塊。
  • 伺服器故障DenyWalk或新的障礙物要求在完成步驟佇列後從目前位置重新計算。重複次數和重新計算頻率受到限制;沒有路徑可以以0結束運動。
  • 路線屬於啟動它的程序:其緊急停止會取消剩餘的自動路徑。如果另一個跑步或用戶已經替換了該路線,則取消前所有者不會影響新路線。已發送的步驟不會被撤銷。
  • SetBadLocation和SetBadObject用作路徑啟動時當前運行時間禁止的快照。它們在內部重新計算期間被保存。更改或清除清單會影響下一條路線,而不是覆蓋已經在進行中的路線。
  • UO.LimitMove 控制目的地距離:預設 2000,0 無限制。沒有隱藏的 4096 步/節點或 10000 節點上限。工作分批執行並可停止。GetPathArray 會套用 moveThroughNPC 的體力門檻與 moveOpenDoor。
  • 超時在請求被接受後計算,包括搜尋和重新計算的後續部分。 stopOnStuck 不認為正在運行的搜尋是字元卡住的;規劃完成後,不再考慮位置變化。最後的1/0檢查實際座標,而不僅僅是路徑的準備。
  • 結果考慮了客戶的本地位置;後續伺服器修正仍然是可能的。從不同的例程運行競爭的運動命令會改變角色的整體路線。
  • 設定moveCheckStamina、moveExitOnDisconnect、moveOpenDoor、moveThroughCorner、moveThroughNPC、moveHeuristicMult、moveTurnCost 和 moveBetweenTwoCorners 會影響性能。顯式的avoidMobiles/openDoors會覆寫本次呼叫的對應值。
  • 結果0並不能顯示確切的原因。檢查座標、連結、體力和日誌;不要在沒有 UO.Wait 和嘗試次數限制的情況下無休止地重複該動作。
  • 主橋記錄請求編號、玩家/探路者/地圖實例和地圖索引。新請求、上下文變更或最終拒絕都會給予 0;在讀取座標和最後一次回調後重複檢查。超時、maxSteps和callback=0僅停止已儲存的請求,而不是新的外部路由。臨時封鎖,雖然恢復仍然有效,但不會失去控球權:等待繼續。對於沒有IApiMovementOwnershipBridge的外部legacy-bridge,保留先前的相容機制。
  • 僅當相應活動請求被拒絕時,通用探路者最多可儲存 8 2000 毫秒的暫時 X/Y/Z 方向禁止。輪換、未知順序、重新同步和舊/外來請求不會產生此類禁止。新的外部請求和地圖/玩家上下文的遺失會清除它們。載入的幾何搜尋嘗試繞過過渡;它不知道所有伺服器障礙。在不更改玩家 X/Y/Z 的情況下,允許最多 8 內部重新計算,並暫停至少 40 毫秒。沒有完整的路徑或預算已用完 - 路線結束。處理完提交的步驟後,協調任務完成; mobile-Follow 可能會因延遲而重試。

回調步驟進入 C# 明確註冊透過 RegisterStepCallback(name, Func<int,int,int,bool>) 或函數<int,int,int,int>。 x/y/z 座標傳輸為 int; false/0 停止路線, true/非零數字繼續。該註冊在當前執行中有效,並隨之釋放。

獨立的 C# 腳本

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

簡單範例

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

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

var result = UO.NewMoveXY((UO.GetX() + 3), UO.GetY(), true, 0, false);
UO.Print("NewMoveXY: " + Convert.ToString(result));

1。到達下一點並檢查結果-直接腳本

參數與執行流程:

  • x/y——世界目標; Optimized=true,Accuracy=0 要求精確的 X/Y,Running=false 指定步行。
  • 好的 - int 1 或 0,不是通過的細胞數。目標必須在當前地圖上可用。
var x = UO.GetX() + 3;
var y = UO.GetY();
var ok = UO.NewMoveXY(x, y, true, 0, false);
if (Truth(ok))
{
    UO.Print("Destination reached");
}
else
{
    UO.Print("Destination not reached");
}

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

2。有時間和距離限制的跑步 - 腳本功能

參數與執行流程:

  • 1445/1690 - 目标示例;精度=1允许在附近停车。跑步=true。 StepCallback=0 禁用回呼。
  • 超時 =5000毫秒;maxSteps=100 觀察到的運動;maxDistance=30 從原點檢查。
  • AccuracyZ=255不需要底板;avoidMobiles=true、openDoors=true、stopOnStuck=true 包含這些條件。
return  RunScenario();
 object? RunScenario()
{
    var ok = UO.NewMoveXY(1445, 1690, true, 1, true, 0, 5000, 100, 30, 255, true, true, true);
    UO.Print("Move result: " + Convert.ToString(ok));
    return null;
}

3。在回呼中測試耐久性 - 腳本類

參數與執行流程:

  • StepCallback="AfterStep" 接收三個座標。 RegisterStepCallback 註冊將名稱與 bool 委託關聯起來。當Stamina <= 10時返回false並停止移動;true 繼續路線。
  • timeout=5000 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 stepRegistration = RegisterStepCallback("AfterStep", AfterStep);
        var ok = UO.NewMoveXY(UO.GetX() + 5, UO.GetY(), true, 0, false, "AfterStep", 5000);
        UO.Print("Move result: " + Convert.ToString(ok));
        return null;
    }

    bool AfterStep(int x, int y, int z)
    {
        UO.Print("Position: " + Convert.ToString(x) + "," + Convert.ToString(y) + "," + Convert.ToString(z));
        return UO.Stamina() > 10;
    }

    private IDisposable RegisterStepCallback(string name, Func<int, int, int, bool> handler) => global::ClassicUO.CSharp.CSharpScriptContext.Current.RegisterStepCallback(name, handler);
    private IDisposable RegisterStepCallback(string name, Func<int, int, int, int> handler) => global::ClassicUO.CSharp.CSharpScriptContext.Current.RegisterStepCallback(name, handler);
}

4。 GoToPoint:完整的輔助函數程式碼和Main - 直接腳本

參數與執行流程:

  • GoToPoint 僅是此範例的輔助函數。它的四個參數x/y/accuracy/running在函數宣告上面有描述;函數的完整主體位於同一個複製區塊中。
  • Main 評估目標並呼叫GoToPoint。它加入了optimized=true、callback=0、timeout=8000和maxSteps=100,呼叫一次NewMoveXY並將返回的int傳傳回Main。
  • NewMoveXY 是內建的客戶端指令。它的 A* 搜尋、通暢性檢查和伺服器步驟處理是在客戶端中實現的,而不是在該腳本的附加隱藏過程中實現的。
  • 在此範例中,回調被停用。如果另一個範例指定回呼名稱或呼叫其他腳本函數,則也必須完整給出其定義。
  • 在C#中檢查是否(達到!=0);0的數值結果表示失敗。 int 與 bool 的直接比較是不可接受的。緊急取消會中斷執行,且不需要返回false。
var x = UO.GetX() + 3;
var y = UO.GetY();
var reached = GoToPoint(x, y, 0, true);
if (Truth(Truth(reached) == true))
{
    UO.Print("Destination reached");
}
else
{
    UO.Print("Destination not reached");
}

dynamic GoToPoint(dynamic x, dynamic y, dynamic accuracy, dynamic running)
{
    dynamic optimized = true;
    var callback = 0;
    var timeout = 8000;
    var maxSteps = 100;
    var reached = UO.NewMoveXY(x, y, optimized, accuracy, running, callback, timeout, maxSteps);
    return reached;
}

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.NewMoveXY(xdst, ydst, optimized, accuracy, running) — UO.NewMoveXY(Any,Any,Any,Any,Any)

參數: xdst (Any), ydst (Any), optimized (Any), accuracy (Any), running (Any)

結果: int / Integer.

呼叫時:

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

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

values => new InjectionValue(CompactNewMoveXY(values))

UO.NewMoveXY(xdst, ydst, optimized, accuracy, running, stepCallback) — UO.NewMoveXY(Any,Any,Any,Any,Any,Any)

參數: xdst (Any), ydst (Any), optimized (Any), accuracy (Any), running (Any), stepCallback (Any)

結果: int / Integer.

呼叫時:

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

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

values => new InjectionValue(CompactNewMoveXY(values))

UO.NewMoveXY(xdst, ydst, optimized, accuracy, running, stepCallback, timeout) — UO.NewMoveXY(Any,Any,Any,Any,Any,Any,Any)

參數: xdst (Any), ydst (Any), optimized (Any), accuracy (Any), running (Any), stepCallback (Any), timeout (Any)

結果: int / Integer.

呼叫時:

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

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

values => new InjectionValue(CompactNewMoveXY(values))

UO.NewMoveXY(xdst, ydst, optimized, accuracy, running, stepCallback, timeout, maxSteps) — UO.NewMoveXY(Any,Any,Any,Any,Any,Any,Any,Any)

參數: xdst (Any), ydst (Any), optimized (Any), accuracy (Any), running (Any), stepCallback (Any), timeout (Any), maxSteps (Any)

結果: int / Integer.

呼叫時:

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

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

values => new InjectionValue(CompactNewMoveXY(values))

UO.NewMoveXY(xdst, ydst, optimized, accuracy, running, stepCallback, timeout, maxSteps, maxDistance) — UO.NewMoveXY(Any,Any,Any,Any,Any,Any,Any,Any,Any)

參數: xdst (Any), ydst (Any), optimized (Any), accuracy (Any), running (Any), stepCallback (Any), timeout (Any), maxSteps (Any), maxDistance (Any)

結果: int / Integer.

呼叫時:

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

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

values => new InjectionValue(CompactNewMoveXY(values))

UO.NewMoveXY(xdst, ydst, optimized, accuracy, running, stepCallback, timeout, maxSteps, maxDistance, accuracyZ) — UO.NewMoveXY(Any,Any,Any,Any,Any,Any,Any,Any,Any,Any)

參數: xdst (Any), ydst (Any), optimized (Any), accuracy (Any), running (Any), stepCallback (Any), timeout (Any), maxSteps (Any), maxDistance (Any), accuracyZ (Any)

結果: int / Integer.

呼叫時:

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

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

values => new InjectionValue(CompactNewMoveXY(values))

UO.NewMoveXY(xdst, ydst, optimized, accuracy, running, stepCallback, timeout, maxSteps, maxDistance, accuracyZ, avoidMobiles) — UO.NewMoveXY(Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any)

參數: xdst (Any), ydst (Any), optimized (Any), accuracy (Any), running (Any), stepCallback (Any), timeout (Any), maxSteps (Any), maxDistance (Any), accuracyZ (Any), avoidMobiles (Any)

結果: int / Integer.

呼叫時:

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

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

values => new InjectionValue(CompactNewMoveXY(values))

UO.NewMoveXY(xdst, ydst, optimized, accuracy, running, stepCallback, timeout, maxSteps, maxDistance, accuracyZ, avoidMobiles, openDoors) — UO.NewMoveXY(Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any)

參數: xdst (Any), ydst (Any), optimized (Any), accuracy (Any), running (Any), stepCallback (Any), timeout (Any), maxSteps (Any), maxDistance (Any), accuracyZ (Any), avoidMobiles (Any), openDoors (Any)

結果: int / Integer.

呼叫時:

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

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

values => new InjectionValue(CompactNewMoveXY(values))

UO.NewMoveXY(xdst, ydst, optimized, accuracy, running, stepCallback, timeout, maxSteps, maxDistance, accuracyZ, avoidMobiles, openDoors, stopOnStuck) — UO.NewMoveXY(Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any)

參數: xdst (Any), ydst (Any), optimized (Any), accuracy (Any), running (Any), stepCallback (Any), timeout (Any), maxSteps (Any), maxDistance (Any), accuracyZ (Any), avoidMobiles (Any), openDoors (Any), stopOnStuck (Any)

結果: int / Integer.

呼叫時:

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

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

values => new InjectionValue(CompactNewMoveXY(values))

UO.OpenDoor

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

C# 簽章

void UO.OpenDoor();

請求為角色打開門。

參數

沒有參數。

傳回值

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

行為

  • OpenDoor 透過 Invoke 呼叫 GameActions.OpenDoor。不接受串列閘門;搜尋和發現規則屬於GameActions/server。
  • 在範例中,UO.Wait僅指定腳本暫停;暫停的結束並不能證明伺服器已經完成了請求。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。直接呼叫-直接腳本

參數與執行流程:

  • 請求為角色打開門。
UO.OpenDoor();

2。明確選項 - 腳本函數

參數與執行流程:

  • OpenDoor 透過 Invoke 呼叫 GameActions.OpenDoor。不接受串列閘門;搜尋和發現規則屬於GameActions/server。
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.IsOnline()))
    {
        UO.OpenDoor();
    }

    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僅指定腳本暫停;暫停的結束並不能證明伺服器已經完成了請求。
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.OpenDoor();
        UO.Wait(250);
        UO.Print("Door request sent");
        return null;
    }
}

命令實作

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

UO.OpenDoor() — UO.OpenDoor()

參數: 沒有參數。

結果: void / Unit.

呼叫時:

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

case "opendoor": bridge.OpenDoor(); break;

UO.PMove

PMove 等待尋路與移動完成。XY 形式要求精確 XY,XYZ 也要求指定高度。傳回 void;請比較實際座標判斷結果。需要數值結果時使用 NewMoveXY 或 MoveXYZ。不再有隱含的 30 秒期限。

UO.PMove

UO.PredictedDirection

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

C# 簽章

int UO.PredictedDirection();

在角色已排隊的步驟之後讀取預測方向側。

參數

沒有參數。

傳回值

int 方向 0..7,無運行位。 0 - 北方或缺乏性格。

行為

  • 只有語法中顯示的函數是不帶參數的UO。沒有目標、serial、type、目標、距離或逾時參數。不是bool、ID或平鋪符號:1的數字並不意味著實現目標。
  • GetEndPosition 讀取最後一個已新增的 Mobile.Step 的 X/Y/Z/方向。當佇列為空時,讀取角色的目前位置/方向。這是一次 O(1) ​​讀取:不檢索步驟、不發送運動和資料包、不計算路線、命令不等待成就。
  • 世界目的地: 0 北, 1 東北, 2 東方, 3 東南, 4 南, 5 西南, 6 西方, 7 西北。螢幕是等距的。 Direction.Mask 移除運作標誌;速度不回。
  • 這是當地的預測,而不是確認的抵達。新的/已完成的步驟、伺服器故障、佇列清理或傳送都可以改變它。單一元件呼叫不是原子的; X 匹配不能證明 Y/Z 匹配或伺服器確認。
  • Invoke 在遊戲執行緒上執行讀取;工作執行緒正在等待管理器處理請求。取消腳本會中斷等待。不會新增暫停和額外的網路請求。
  • 不含 IPredictedMovementBridge 的 IApiBridge 外部實作保留目前座標/方向的回退讀數。經典UO實現了隊列感知介面。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。讀取一個元件 - 直接腳本

參數與執行流程:

  • 預測儲存一次無參數呼叫; Convert.ToString 格式化日誌的數字。
var predicted = UO.PredictedDirection();
UO.Print("Predicted: " + Convert.ToString(predicted));

2。觀察預測變化 - 腳本函數

參數與執行流程:

  • UO.Wait(100) 將範例暫停100 毫秒。即使有中間運動,前後也可以重疊;這些讀數不會引發運動。
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var before = UO.PredictedDirection();
    await Delay(100);
    var after = UO.PredictedDirection();
    if (Truth(before != after))
    {
        UO.Print("Prediction changed: " + Convert.ToString(before) + " -> " + Convert.ToString(after));
    }

    return null;
}

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

3。完整的比較功能-腳本類

參數與執行流程:

  • 預期 - 座標/高度/方向的範例,而不是本機指令的參數。 PredictionEquals 檢查UO.Self(),讀取一次值,若相等則回傳1(滿足條件),否則回傳0(不滿足條件)。整個函數程式碼如下Main所示。一個組成部分的巧合並不意味著到達。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        if (Truth(Truth(PredictionEquals(4)) == true))
        {
            UO.Print("Queued endpoint matches this component");
        }
        else
        {
            UO.Print("Different component or no player");
        }

        return null;
    }

    dynamic PredictionEquals(dynamic expected)
    {
        if (Truth(UO.Self() == 0))
        {
            return false;
        }

        var predicted = UO.PredictedDirection();
        return Truth(predicted == expected);
    }

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

參數: 沒有參數。

結果: int / Integer.

呼叫時:

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

case "predicteddirection": return new InjectionValue(ReadPredictedCoordinate(3));

UO.PredictedX

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

C# 簽章

int UO.PredictedX();

在角色已排隊的步驟之後讀取預測的 X 座標。

參數

沒有參數。

傳回值

地圖單元格中的 int X。 0 - 有效座標或缺少字元。

行為

  • 只有語法中顯示的函數是不帶參數的UO。沒有目標、serial、type、目標、距離或逾時參數。不是bool、ID或平鋪符號:1的數字並不意味著實現目標。
  • GetEndPosition 讀取最後一個已新增的 Mobile.Step 的 X/Y/Z/方向。當佇列為空時,讀取角色的目前位置/方向。這是一次 O(1) ​​讀取:不檢索步驟、不發送運動和資料包、不計算路線、命令不等待成就。
  • X 和 Y 是世界/地圖座標,而不是容器 Gump 像素。 Z 是高度,而不是樓層數。傳回單一元件,而不是陣列或整個路線的最終目的地。
  • 這是當地的預測,而不是確認的抵達。新的/已完成的步驟、伺服器故障、佇列清理或傳送都可以改變它。單一元件呼叫不是原子的; X 匹配不能證明 Y/Z 匹配或伺服器確認。
  • Invoke 在遊戲執行緒上執行讀取;工作執行緒正在等待管理器處理請求。取消腳本會中斷等待。不會新增暫停和額外的網路請求。
  • 不含 IPredictedMovementBridge 的 IApiBridge 外部實作保留目前座標/方向的回退讀數。經典UO實現了隊列感知介面。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。讀取一個元件 - 直接腳本

參數與執行流程:

  • 預測儲存一次無參數呼叫; Convert.ToString 格式化日誌的數字。
var predicted = UO.PredictedX();
UO.Print("Predicted: " + Convert.ToString(predicted));

2。觀察預測變化 - 腳本函數

參數與執行流程:

  • UO.Wait(100) 將範例暫停100 毫秒。即使有中間運動,前後也可以重疊;這些讀數不會引發運動。
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var before = UO.PredictedX();
    await Delay(100);
    var after = UO.PredictedX();
    if (Truth(before != after))
    {
        UO.Print("Prediction changed: " + Convert.ToString(before) + " -> " + Convert.ToString(after));
    }

    return null;
}

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

3。完整的比較功能-腳本類

參數與執行流程:

  • 預期 - 座標/高度/方向的範例,而不是本機指令的參數。 PredictionEquals 檢查UO.Self(),讀取一次值,若相等則回傳1(滿足條件),否則回傳0(不滿足條件)。整個函數程式碼如下Main所示。一個組成部分的巧合並不意味著到達。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        if (Truth(Truth(PredictionEquals(1445)) == true))
        {
            UO.Print("Queued endpoint matches this component");
        }
        else
        {
            UO.Print("Different component or no player");
        }

        return null;
    }

    dynamic PredictionEquals(dynamic expected)
    {
        if (Truth(UO.Self() == 0))
        {
            return false;
        }

        var predicted = UO.PredictedX();
        return Truth(predicted == expected);
    }

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

參數: 沒有參數。

結果: int / Integer.

呼叫時:

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

case "predictedx": return new InjectionValue(ReadPredictedCoordinate(0));

UO.PredictedY

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

C# 簽章

int UO.PredictedY();

在角色已排隊的步驟之後讀取預測的 Y 座標。

參數

沒有參數。

傳回值

地圖單元格中的 int Y。 0 - 有效座標或缺少字元。

行為

  • 只有語法中顯示的函數是不帶參數的UO。沒有目標、serial、type、目標、距離或逾時參數。不是bool、ID或平鋪符號:1的數字並不意味著實現目標。
  • GetEndPosition 讀取最後一個已新增的 Mobile.Step 的 X/Y/Z/方向。當佇列為空時,讀取角色的目前位置/方向。這是一次 O(1) ​​讀取:不檢索步驟、不發送運動和資料包、不計算路線、命令不等待成就。
  • X 和 Y 是世界/地圖座標,而不是容器 Gump 像素。 Z 是高度,而不是樓層數。傳回單一元件,而不是陣列或整個路線的最終目的地。
  • 這是當地的預測,而不是確認的抵達。新的/已完成的步驟、伺服器故障、佇列清理或傳送都可以改變它。單一元件呼叫不是原子的; X 匹配不能證明 Y/Z 匹配或伺服器確認。
  • Invoke 在遊戲執行緒上執行讀取;工作執行緒正在等待管理器處理請求。取消腳本會中斷等待。不會新增暫停和額外的網路請求。
  • 不含 IPredictedMovementBridge 的 IApiBridge 外部實作保留目前座標/方向的回退讀數。經典UO實現了隊列感知介面。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。讀取一個元件 - 直接腳本

參數與執行流程:

  • 預測儲存一次無參數呼叫; Convert.ToString 格式化日誌的數字。
var predicted = UO.PredictedY();
UO.Print("Predicted: " + Convert.ToString(predicted));

2。觀察預測變化 - 腳本函數

參數與執行流程:

  • UO.Wait(100) 將範例暫停100 毫秒。即使有中間運動,前後也可以重疊;這些讀數不會引發運動。
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var before = UO.PredictedY();
    await Delay(100);
    var after = UO.PredictedY();
    if (Truth(before != after))
    {
        UO.Print("Prediction changed: " + Convert.ToString(before) + " -> " + Convert.ToString(after));
    }

    return null;
}

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

3。完整的比較功能-腳本類

參數與執行流程:

  • 預期 - 座標/高度/方向的範例,而不是本機指令的參數。 PredictionEquals 檢查UO.Self(),讀取一次值,若相等則回傳1(滿足條件),否則回傳0(不滿足條件)。整個函數程式碼如下Main所示。一個組成部分的巧合並不意味著到達。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        if (Truth(Truth(PredictionEquals(1690)) == true))
        {
            UO.Print("Queued endpoint matches this component");
        }
        else
        {
            UO.Print("Different component or no player");
        }

        return null;
    }

    dynamic PredictionEquals(dynamic expected)
    {
        if (Truth(UO.Self() == 0))
        {
            return false;
        }

        var predicted = UO.PredictedY();
        return Truth(predicted == expected);
    }

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

參數: 沒有參數。

結果: int / Integer.

呼叫時:

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

case "predictedy": return new InjectionValue(ReadPredictedCoordinate(1));

UO.PredictedZ

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

C# 簽章

int UO.PredictedZ();

在角色已經排隊的步驟之後讀取預測的 Z 高度。

參數

沒有參數。

傳回值

int Z,有符號高度 -128..127;保留負值。 0 - 可接受的高度或角色缺失。

行為

  • 只有語法中顯示的函數是不帶參數的UO。沒有目標、serial、type、目標、距離或逾時參數。不是bool、ID或平鋪符號:1的數字並不意味著實現目標。
  • GetEndPosition 讀取最後一個已新增的 Mobile.Step 的 X/Y/Z/方向。當佇列為空時,讀取角色的目前位置/方向。這是一次 O(1) ​​讀取:不檢索步驟、不發送運動和資料包、不計算路線、命令不等待成就。
  • X 和 Y 是世界/地圖座標,而不是容器 Gump 像素。 Z 是高度,而不是樓層數。傳回單一元件,而不是陣列或整個路線的最終目的地。
  • 這是當地的預測,而不是確認的抵達。新的/已完成的步驟、伺服器故障、佇列清理或傳送都可以改變它。單一元件呼叫不是原子的; X 匹配不能證明 Y/Z 匹配或伺服器確認。
  • Invoke 在遊戲執行緒上執行讀取;工作執行緒正在等待管理器處理請求。取消腳本會中斷等待。不會新增暫停和額外的網路請求。
  • 不含 IPredictedMovementBridge 的 IApiBridge 外部實作保留目前座標/方向的回退讀數。經典UO實現了隊列感知介面。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。讀取一個元件 - 直接腳本

參數與執行流程:

  • 預測儲存一次無參數呼叫; Convert.ToString 格式化日誌的數字。
var predicted = UO.PredictedZ();
UO.Print("Predicted: " + Convert.ToString(predicted));

2。觀察預測變化 - 腳本函數

參數與執行流程:

  • UO.Wait(100) 將範例暫停100 毫秒。即使有中間運動,前後也可以重疊;這些讀數不會引發運動。
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var before = UO.PredictedZ();
    await Delay(100);
    var after = UO.PredictedZ();
    if (Truth(before != after))
    {
        UO.Print("Prediction changed: " + Convert.ToString(before) + " -> " + Convert.ToString(after));
    }

    return null;
}

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

3。完整的比較功能-腳本類

參數與執行流程:

  • 預期 - 座標/高度/方向的範例,而不是本機指令的參數。 PredictionEquals 檢查UO.Self(),讀取一次值,若相等則回傳1(滿足條件),否則回傳0(不滿足條件)。整個函數程式碼如下Main所示。一個組成部分的巧合並不意味著到達。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        if (Truth(Truth(PredictionEquals(-4)) == true))
        {
            UO.Print("Queued endpoint matches this component");
        }
        else
        {
            UO.Print("Different component or no player");
        }

        return null;
    }

    dynamic PredictionEquals(dynamic expected)
    {
        if (Truth(UO.Self() == 0))
        {
            return false;
        }

        var predicted = UO.PredictedZ();
        return Truth(predicted == expected);
    }

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

參數: 沒有參數。

結果: int / Integer.

呼叫時:

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

case "predictedz": return new InjectionValue(ReadPredictedCoordinate(2));

UO.SetRunMountTimer

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

C# 簽章

void UO.SetRunMountTimer(object? value);

設定騎馬跑步的步數間隔。用於故意減慢或恢復到標準速度。您無法使用此命令將移動速度加快到超出標準速度。

參數

  • value — 所需的整數毫秒數。範圍100..2000;較小的值,包括0和負值,上升到100,較大的值下降到2000。

傳回值

void - 沒有值。使用單獨的線路撥打電話。若要讀取應用的間距,請使用 UO.GetRunMountTimer()。這不是伺服器對步驟的確認。

行為

  • 此設定適用於騎乘模式。標準和最小允許值為100 ms;上限為2000毫秒。其他三種模式有單獨的設定。
  • 這是角色的本地移動間隔,而不是 ping、FPS、尋路超時或測量的伺服器步驟持續時間。增加數量會減慢移動速度;低於標準間隔不會加快資料包的發送速度。
  • 隊伍本身不會開始移動,不會登上坐騎,也不會改變步行/跑步模式。駕駛時選擇模式;客戶端也會考慮伺服器指定的速度模式和航班。
  • 此設定對於該客戶端的移動是通用的:可以透過手動控制、地圖路線和其他腳本來使用。暫時更改,保留先前的值,操作結束後恢復;不要同時從多個程式更改一種模式。
  • 轉身和斜步與正常動作不同。伺服器確認、通訊延遲和障礙可能會增加實際時間。客戶端不會發送一系列加速步驟來彌補遺失的幀。
  • 在常規用戶端主機中,此狀態資料取自GetPersistentState管理器,並且對於同一世界/設定檔的腳本/聊天/巨集是通用的,且不屬於一個腳本。另一個進程或明顯獨立的InjectionRuntimeState具有不同的狀態。載入/清除設定檔可以取代它;已儲存的serial仍然會根據載入的世界進行檢查。

獨立的 C# 腳本

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

簡單範例

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

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

UO.Print("Calling UO.SetRunMountTimer");
UO.SetRunMountTimer(100);

1。恢復標準節奏 - 直接腳本

參數與執行流程:

  • 值=100 — 毫秒。該呼叫設定後續移動,但不啟動路線。
UO.SetRunMountTimer(100);

2。暫時減慢一個動作請求 - 腳本功能

參數與執行流程:

  • 值=200 將 100 毫秒加到標準間隔。這項變更僅適用於騎馬跑步。例如,選擇一個自由方向。
  • UO.Step 得到 Direction=2 且正在運行=true。代碼7只能表示轉彎;其他代碼不是true/false。 finally 在正常關機或錯誤處理時恢復先前的設定。
return  RunScenario();
 object? RunScenario()
{
    var previous = UO.GetRunMountTimer();
    try
    {
        UO.SetRunMountTimer(200);
        var stepResult = UO.Step(2, true);
        if (Truth(stepResult != 7))
        {
            UO.Print("Step was not confirmed: " + Convert.ToString(stepResult));
        }
    }
    finally
    {
        UO.SetRunMountTimer(previous);
    }

    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。檢查防止值過低的保護 - 腳本類

參數與執行流程:

  • 應用 Value=1 後等於100。此範例不移動字元並恢復原始間距。
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.GetRunMountTimer();
        try
        {
            UO.SetRunMountTimer(1);
            var applied = UO.GetRunMountTimer();
            UO.Print("Applied delay, ms: " + Convert.ToString(applied));
        }
        finally
        {
            UO.SetRunMountTimer(previous);
        }

        return null;
    }
}

命令實作

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

UO.SetRunMountTimer(value) — UO.SetRunMountTimer(Any)

參數: value (Any)

結果: void / Unit.

呼叫時:

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

case "setrunmounttimer":

                    state.RunMountTimer = ClampMoveTimer(Arg(0), 100);

                    bridge.SetMovementTimers(state.RunMountTimer, state.RunUnmountTimer, state.WalkMountTimer, state.WalkUnmountTimer);

                    return InjectionValue.Unit;

UO.SetRunUnmountTimer

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

C# 簽章

void UO.SetRunUnmountTimer(object? value);

設定步行步幅間隔。用於故意減慢或恢復到標準速度。您無法使用此命令將移動速度加快到超出標準速度。

參數

  • value — 所需的整數毫秒數。範圍200..2000;較小的值,包括0和負值,上升到200,較大的值下降到2000。

傳回值

void - 沒有值。使用單獨的線路撥打電話。若要讀取應用的間距,請使用 UO.GetRunUnmountTimer()。這不是伺服器對步驟的確認。

行為

  • 此設定適用於步行模式。標準和最小允許值為200 ms;上限為2000毫秒。其他三種模式有單獨的設定。
  • 這是角色的本地移動間隔,而不是 ping、FPS、尋路超時或測量的伺服器步驟持續時間。增加數量會減慢移動速度;低於標準間隔不會加快資料包的發送速度。
  • 隊伍本身不會開始移動,不會登上坐騎,也不會改變步行/跑步模式。駕駛時選擇模式;客戶端也會考慮伺服器指定的速度模式和航班。
  • 此設定對於該客戶端的移動是通用的:可以透過手動控制、地圖路線和其他腳本來使用。暫時更改,保留先前的值,操作結束後恢復;不要同時從多個程式更改一種模式。
  • 轉身和斜步與正常動作不同。伺服器確認、通訊延遲和障礙可能會增加實際時間。客戶端不會發送一系列加速步驟來彌補遺失的幀。
  • 在常規用戶端主機中,此狀態資料取自GetPersistentState管理器,並且對於同一世界/設定檔的腳本/聊天/巨集是通用的,且不屬於一個腳本。另一個進程或明顯獨立的InjectionRuntimeState具有不同的狀態。載入/清除設定檔可以取代它;已儲存的serial仍然會根據載入的世界進行檢查。

獨立的 C# 腳本

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

簡單範例

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

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

UO.Print("Calling UO.SetRunUnmountTimer");
UO.SetRunUnmountTimer(200);

1。恢復標準節奏 - 直接腳本

參數與執行流程:

  • 值=200 — 毫秒。該呼叫設定後續移動,但不啟動路線。
UO.SetRunUnmountTimer(200);

2。暫時減慢一個動作請求 - 腳本功能

參數與執行流程:

  • 值=300 將 100 毫秒加到標準間隔。這項變更僅適用於步行跑步。例如,選擇一個自由方向。
  • UO.Step 得到 Direction=2 且正在運行=true。代碼7只能表示轉彎;其他代碼不是true/false。 finally 在正常關機或錯誤處理時恢復先前的設定。
return  RunScenario();
 object? RunScenario()
{
    var previous = UO.GetRunUnMountTimer();
    try
    {
        UO.SetRunUnmountTimer(300);
        var stepResult = UO.Step(2, true);
        if (Truth(stepResult != 7))
        {
            UO.Print("Step was not confirmed: " + Convert.ToString(stepResult));
        }
    }
    finally
    {
        UO.SetRunUnmountTimer(previous);
    }

    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。檢查防止值過低的保護 - 腳本類

參數與執行流程:

  • 應用 Value=1 後等於200。此範例不移動字元並恢復原始間距。
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.GetRunUnMountTimer();
        try
        {
            UO.SetRunUnmountTimer(1);
            var applied = UO.GetRunUnMountTimer();
            UO.Print("Applied delay, ms: " + Convert.ToString(applied));
        }
        finally
        {
            UO.SetRunUnmountTimer(previous);
        }

        return null;
    }
}

命令實作

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

UO.SetRunUnmountTimer(value) — UO.SetRunUnmountTimer(Any)

參數: value (Any)

結果: void / Unit.

呼叫時:

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

case "setrununmounttimer":

                    state.RunUnmountTimer = ClampMoveTimer(Arg(0), 200);

                    bridge.SetMovementTimers(state.RunMountTimer, state.RunUnmountTimer, state.WalkMountTimer, state.WalkUnmountTimer);

                    return InjectionValue.Unit;

UO.SetWalkMountTimer

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

C# 簽章

void UO.SetWalkMountTimer(object? value);

設定騎馬行走的步數間隔。用於故意減慢或恢復到標準速度。您無法使用此命令將移動速度加快到超出標準速度。

參數

  • value — 所需的整數毫秒數。範圍200..2000;較小的值,包括0和負值,上升到200,較大的值下降到2000。

傳回值

void - 沒有值。使用單獨的線路撥打電話。若要讀取應用的間距,請使用 UO.GetWalkMountTimer()。這不是伺服器對步驟的確認。

行為

  • 此設定適用於騎乘模式。標準和最小允許值為200 ms;上限為2000毫秒。其他三種模式有單獨的設定。
  • 這是角色的本地移動間隔,而不是 ping、FPS、尋路超時或測量的伺服器步驟持續時間。增加數量會減慢移動速度;低於標準間隔不會加快資料包的發送速度。
  • 隊伍本身不會開始移動,不會登上坐騎,也不會改變步行/跑步模式。駕駛時選擇模式;客戶端也會考慮伺服器指定的速度模式和航班。
  • 此設定對於該客戶端的移動是通用的:可以透過手動控制、地圖路線和其他腳本來使用。暫時更改,保留先前的值,操作結束後恢復;不要同時從多個程式更改一種模式。
  • 轉身和斜步與正常動作不同。伺服器確認、通訊延遲和障礙可能會增加實際時間。客戶端不會發送一系列加速步驟來彌補遺失的幀。
  • 在常規用戶端主機中,此狀態資料取自GetPersistentState管理器,並且對於同一世界/設定檔的腳本/聊天/巨集是通用的,且不屬於一個腳本。另一個進程或明顯獨立的InjectionRuntimeState具有不同的狀態。載入/清除設定檔可以取代它;已儲存的serial仍然會根據載入的世界進行檢查。

獨立的 C# 腳本

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

簡單範例

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

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

UO.Print("Calling UO.SetWalkMountTimer");
UO.SetWalkMountTimer(200);

1。恢復標準節奏 - 直接腳本

參數與執行流程:

  • 值=200 — 毫秒。該呼叫設定後續移動,但不啟動路線。
UO.SetWalkMountTimer(200);

2。暫時減慢一個動作請求 - 腳本功能

參數與執行流程:

  • 值=300 將 100 毫秒加到標準間隔。這項變更僅適用於騎馬。例如,選擇一個自由方向。
  • UO.Step 得到 Direction=2 且正在運行=false。代碼7只能表示轉彎;其他代碼不是true/false。 finally 在正常關機或錯誤處理時恢復先前的設定。
return  RunScenario();
 object? RunScenario()
{
    var previous = UO.GetWalkMountTimer();
    try
    {
        UO.SetWalkMountTimer(300);
        var stepResult = UO.Step(2, false);
        if (Truth(stepResult != 7))
        {
            UO.Print("Step was not confirmed: " + Convert.ToString(stepResult));
        }
    }
    finally
    {
        UO.SetWalkMountTimer(previous);
    }

    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。檢查防止值過低的保護 - 腳本類

參數與執行流程:

  • 應用 Value=1 後等於200。此範例不移動字元並恢復原始間距。
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.GetWalkMountTimer();
        try
        {
            UO.SetWalkMountTimer(1);
            var applied = UO.GetWalkMountTimer();
            UO.Print("Applied delay, ms: " + Convert.ToString(applied));
        }
        finally
        {
            UO.SetWalkMountTimer(previous);
        }

        return null;
    }
}

命令實作

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

UO.SetWalkMountTimer(value) — UO.SetWalkMountTimer(Any)

參數: value (Any)

結果: void / Unit.

呼叫時:

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

case "setwalkmounttimer":

                    state.WalkMountTimer = ClampMoveTimer(Arg(0), 200);

                    bridge.SetMovementTimers(state.RunMountTimer, state.RunUnmountTimer, state.WalkMountTimer, state.WalkUnmountTimer);

                    return InjectionValue.Unit;

UO.SetWalkUnmountTimer

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

C# 簽章

void UO.SetWalkUnmountTimer(object? value);

設定行走步數間隔。用於故意減慢或恢復到標準速度。您無法使用此命令將移動速度加快到超出標準速度。

參數

  • value — 所需的整數毫秒數。範圍400..2000;較小的值,包括0和負值,上升到400,較大的值下降到2000。

傳回值

void - 沒有值。使用單獨的線路撥打電話。若要讀取應用的間距,請使用 UO.GetWalkUnmountTimer()。這不是伺服器對步驟的確認。

行為

  • 此設定適用於步行模式。標準和最小允許值為400 ms;上限為2000毫秒。其他三種模式有單獨的設定。
  • 這是角色的本地移動間隔,而不是 ping、FPS、尋路超時或測量的伺服器步驟持續時間。增加數量會減慢移動速度;低於標準間隔不會加快資料包的發送速度。
  • 隊伍本身不會開始移動,不會登上坐騎,也不會改變步行/跑步模式。駕駛時選擇模式;客戶端也會考慮伺服器指定的速度模式和航班。
  • 此設定對於該客戶端的移動是通用的:可以透過手動控制、地圖路線和其他腳本來使用。暫時更改,保留先前的值,操作結束後恢復;不要同時從多個程式更改一種模式。
  • 轉身和斜步與正常動作不同。伺服器確認、通訊延遲和障礙可能會增加實際時間。客戶端不會發送一系列加速步驟來彌補遺失的幀。
  • 在常規用戶端主機中,此狀態資料取自GetPersistentState管理器,並且對於同一世界/設定檔的腳本/聊天/巨集是通用的,且不屬於一個腳本。另一個進程或明顯獨立的InjectionRuntimeState具有不同的狀態。載入/清除設定檔可以取代它;已儲存的serial仍然會根據載入的世界進行檢查。

獨立的 C# 腳本

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

簡單範例

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

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

UO.Print("Calling UO.SetWalkUnmountTimer");
UO.SetWalkUnmountTimer(400);

1。恢復標準節奏 - 直接腳本

參數與執行流程:

  • 值=400 — 毫秒。該呼叫設定後續移動,但不啟動路線。
UO.SetWalkUnmountTimer(400);

2。暫時減慢一個動作請求 - 腳本功能

參數與執行流程:

  • 值=500 將 100 毫秒加到標準間隔。此變更僅適用於步行。例如,選擇一個自由方向。
  • UO.Step 得到 Direction=2 且正在運行=false。代碼7只能表示轉彎;其他代碼不是true/false。 finally 在正常關機或錯誤處理時恢復先前的設定。
return  RunScenario();
 object? RunScenario()
{
    var previous = UO.GetWalkUnmountTimer();
    try
    {
        UO.SetWalkUnmountTimer(500);
        var stepResult = UO.Step(2, false);
        if (Truth(stepResult != 7))
        {
            UO.Print("Step was not confirmed: " + Convert.ToString(stepResult));
        }
    }
    finally
    {
        UO.SetWalkUnmountTimer(previous);
    }

    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。檢查防止值過低的保護 - 腳本類

參數與執行流程:

  • 應用 Value=1 後等於400。此範例不移動字元並恢復原始間距。
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.GetWalkUnmountTimer();
        try
        {
            UO.SetWalkUnmountTimer(1);
            var applied = UO.GetWalkUnmountTimer();
            UO.Print("Applied delay, ms: " + Convert.ToString(applied));
        }
        finally
        {
            UO.SetWalkUnmountTimer(previous);
        }

        return null;
    }
}

命令實作

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

UO.SetWalkUnmountTimer(value) — UO.SetWalkUnmountTimer(Any)

參數: value (Any)

結果: void / Unit.

呼叫時:

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

case "setwalkunmounttimer":

                    state.WalkUnmountTimer = ClampMoveTimer(Arg(0), 400);

                    bridge.SetMovementTimers(state.RunMountTimer, state.RunUnmountTimer, state.WalkMountTimer, state.WalkUnmountTimer);

                    return InjectionValue.Unit;

UO.Step

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

C# 簽章

dynamic UO.Step(object? direction, object? running);

請求單步/旋轉,如果發送了一步,則等待伺服器確認。

參數

  • direction - 方向 0=N, 1=NE, 2=E, 3=SE, 4=S, 5=SW, 6=W, 7=NW。此實作適用於按位 &7;使用 0..7 為了清楚起見。
  • running - true/1 - 運行請求,false/0 - 步驟。伺服器運動延遲仍然存在;這不是速度倍增器。

傳回值

int: 7 — 此步驟已確認或僅執行轉彎; 5 — 伺服器拒絕了該步驟; 4 — 確認逾時(直到 10000 多發性硬化症); 3 — 該步驟被客戶端阻止; 2 — 隊列已滿; 0 - 一般故障、關機或缺乏耐力。這不是 true/false:例如非零代碼 5 意味著拒絕。

行為

  • 一支隊伍可以先輪換角色;這並不一定意味著要移動到下一個方塊。
  • 考慮moveCheckStamina、moveExitOnDisconnect 和moveOpenDoor。伺服器封禁和本地封禁是不同的。
  • 不要在沒有分析結果的情況下循環重複該命令,並且UO.Wait:運動隊列和伺服器速度受到限制。
  • 遊戲串流上的QueueStep檢查玩家、連接、方向、隊列、節奏和本地流量。在Player.Walk之前,每次呼叫分別記錄其序列和Walker的Confirm/Deny代;然後傳回 Result 以及此快照。 Step和pending StepControlled只檢查這個存儲的對,而不檢查下一個請求的公共字段;替補球員/沃克以普遍拒絕結束了等待。確認另一個常規命令不會確認此步驟。沒有移動的旋轉仍然是一個單獨的情況。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。向東邁進 - 直接腳本

參數與執行流程:

  • Direction=2 — E,跑步=false — 步驟。
  • 檢查確切的代碼7;要確認移動,請比較前後的 X/Y。
var result = UO.Step(2, false);
if (Truth(result == 7))
{
    UO.Print("Step accepted or turn completed");
}
else
{
    UO.Print("Movement status: " + Convert.ToString(result));
}

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

2。區分旋轉和平移 - 腳本函數

參數與執行流程:

  • Direction=0 — N. 在呼叫之前和之後讀取座標。
  • 旋轉或故障時可能位置不變,因此單獨需要結果。
return  RunScenario();
 object? RunScenario()
{
    var x = UO.GetX();
    var y = UO.GetY();
    var result = UO.Step(0, false);
    if (Truth(UO.GetX() == x) && Truth(UO.GetY() == y))
    {
        UO.Print("Position unchanged; status=" + Convert.ToString(result));
    }

    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。運行時處理伺服器故障 - 腳本類

參數與執行流程:

  • Direction=4 — S, Running=true.
  • 代碼5—伺服器故障。 UO.Wait=250 ms 指定腳本暫停,不保證下次嘗試會成功。

標準行駛速度

最小步數間隔:步行-步行400毫秒,跑步200毫秒;騎乘-步行200毫秒,跑步100毫秒。

這些是標準客戶端限制,而不是為您的分片自動定義的設定。伺服器速度和飛行模式是分開計算的。腳本計時器可以減慢移動速度,但不會減少這些限制。

步骤、路线、Follow、鼠标/按键控制和地图使用角色的共享队列。伺服器替換路線、轉彎或調整位置不會取消步驟請求後剩餘的暫停。延遲之後,沒有快速突發來補償遺失的幀。等待確認、障礙和溝通不良可能會減慢行動速度。

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 result = UO.Step(4, true);
        if (Truth(result == 5))
        {
            UO.Print("Server denied the step");
            await Delay(250);
        }

        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.Step(direction, running) — UO.Step(Any,Any)

參數: direction (Any), running (Any)

結果: dynamic / Any.

呼叫時:

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

case "step":

                    if (state.MoveExitOnDisconnect != 0 && bridge.IsOnline() == 0)

                        return new InjectionValue(0);

                    if (state.MoveCheckStamina > 0 && bridge.Stamina < state.MoveCheckStamina)

                        return new InjectionValue(0);

                    if (state.MoveOpenDoor != 0)

                        bridge.OpenDoor();

                    return new InjectionValue(bridge.Step(Arg(0) & 7, Arg(1) != 0));

UO.StepQ

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

C# 簽章

int UO.StepQ(object? direction, object? run);
int UO.StepQ(object? direction, object? run, object? timeout);
int UO.StepQ(object? direction, object? run, object? timeout, object? queue);
int UO.StepQ(object? direction, object? run, object? timeout, object? queue, object? waitForAck);

請求通過隊列一步;附加表格可以等待隊列空閒並確認。

參數

  • direction - 方向 0=N, 1=NE, 2=E, 3=SE, 4=S, 5=SW, 6=W, 7=NW。此實作適用於按位 &7;使用 0..7 為了清楚起見。
  • run - true/1 - 運行請求,false/0 - 步驟。伺服器運動延遲仍然存在;這不是速度倍增器。
  • timeout — 可選的佇列等待時間(以毫秒為單位)。 0/負數不等待釋放;waitForAck=true 且超時 =0 預計在 10000 毫秒前確認。如果值為正數,則等待確認會收到相同持續時間的單獨時間段。
  • queue — 可選標誌,預設true。請求步驟時,false傳輸forcePacket;不會覆寫伺服器限製或清除累積的佇列。
  • waitForAck - false/缺席 - 立即回傳語句的結果。 true — 對於發送的步驟,等待確認/拒絕。

傳回值

int 沒有 waitForAck: 0..255 — 發送請求的序列,包括有效的 0; 256 - 僅轉彎; -2 ——對顧客造成的障礙; -1 - 一般故障/佇列已滿/關閉/耐力。和 waitForAck=true: 7 - 確認, 5 - 伺服器故障, 4 - 暫停; -1/-2/256 保留之前的意思。數位 7 以一種無需等待的形式 - 順序,而不是確認。檢查具體的數字代碼;如果(結果)為 int V C# 不可接受的。

行為

  • 一支隊伍可以先輪換角色;這並不一定意味著要移動到下一個方塊。
  • 考慮moveCheckStamina、moveExitOnDisconnect 和moveOpenDoor。伺服器封禁和本地封禁是不同的。
  • 不要在沒有分析結果的情況下循環重複該命令,並且UO.Wait:運動隊列和伺服器速度受到限制。
  • 如果不等待,則命令不會確認位置變更。 LastStepQUsedDoor 表示嘗試開門,而不是該步驟的結果。
  • 遊戲串流上的QueueStep檢查玩家、連接、方向、隊列、節奏和本地流量。在Player.Walk之前,每次呼叫分別記錄其序列和Walker的Confirm/Deny代;然後傳回 Result 以及此快照。 Step和pending StepControlled只檢查這個存儲的對,而不檢查下一個請求的公共字段;替補球員/沃克以普遍拒絕結束了等待。確認另一個常規命令不會確認此步驟。沒有移動的旋轉仍然是一個單獨的情況。

獨立的 C# 腳本

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

簡單範例

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

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

var result = UO.StepQ(2, false);
UO.Print("StepQ: " + Convert.ToString(result));

1。無需等待即可取得序列 - 直接腳本

參數與執行流程:

  • 方向=2 — E,跑=false。兩個參數表示正常設置,無需等待確認。
  • 序列=0是有效的分階段成功;序列=256表示旋轉。
var sequence = UO.StepQ(2, false);
if (Truth(sequence >= 0) && Truth(sequence <= 255))
{
    UO.Print("Queued sequence: " + Convert.ToString(sequence));
}
else
{
    UO.Print("Queue status: " + Convert.ToString(sequence));
}

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

2。等待確認-腳本功能

參數與執行流程:

  • direction=4 — S, run=true, timeout=1500 多發性硬化症。隊列=true, waitForAck=true.
  • 等待座位然後確認可能需要最多兩個 1500 毫秒的時間間隔。 256需要單獨考慮旋轉。
return  RunScenario();
 object? RunScenario()
{
    var status = UO.StepQ(4, true, 1500, true, true);
    if (Truth(status == 7))
    {
        UO.Print("Server confirmed");
    }
    else
    {
        UO.Print("Step status: " + Convert.ToString(status));
    }

    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。單獨處理本地wall-script類

參數與執行流程:

  • 方向 =6 — W,跑=false;timeout=0不排隊等待;隊列=false請求forcePacket,waitForAck=false。
  • ForcePacket不賦予穿牆的權利。對於-2,計算不同的路由,而不是再次發送到相同的小區。

標準行駛速度

最小步數間隔:步行-步行400毫秒,跑步200毫秒;騎乘-步行200毫秒,跑步100毫秒。

這些是標準客戶端限制,而不是為您的分片自動定義的設定。伺服器速度和飛行模式是分開計算的。腳本計時器可以減慢移動速度,但不會減少這些限制。

步骤、路线、Follow、鼠标/按键控制和地图使用角色的共享队列。伺服器替換路線、轉彎或調整位置不會取消步驟請求後剩餘的暫停。延遲之後,沒有快速突發來補償遺失的幀。等待確認、障礙和溝通不良可能會減慢行動速度。

return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var status = UO.StepQ(6, false, 0, false, false);
        if (Truth(status == -2))
        {
            UO.Print("Local obstacle; calculate another route");
        }

        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.StepQ(direction, run) — UO.StepQ(Any,Any)

參數: direction (Any), run (Any)

結果: int / Integer.

呼叫時:

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

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

values => new InjectionValue(CompactStepQ(values))

UO.StepQ(direction, run, timeout) — UO.StepQ(Any,Any,Any)

參數: direction (Any), run (Any), timeout (Any)

結果: int / Integer.

呼叫時:

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

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

values => new InjectionValue(CompactStepQ(values))

UO.StepQ(direction, run, timeout, queue) — UO.StepQ(Any,Any,Any,Any)

參數: direction (Any), run (Any), timeout (Any), queue (Any)

結果: int / Integer.

呼叫時:

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

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

values => new InjectionValue(CompactStepQ(values))

UO.StepQ(direction, run, timeout, queue, waitForAck) — UO.StepQ(Any,Any,Any,Any,Any)

參數: direction (Any), run (Any), timeout (Any), queue (Any), waitForAck (Any)

結果: int / Integer.

呼叫時:

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

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

values => new InjectionValue(CompactStepQ(values))

UO.moveBetweenTwoCorners

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

C# 簽章

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

兩側方塊被遮蔽的對角線解析度。

參數

  • value — 可選的新值。 0 禁止,非零變為1。無論客戶端的配置如何,伺服器都可能拒絕此類傳遞。

傳回值

int 是目前儲存的值。不帶參數僅讀取;帶參數傳回應用上述規則後的值。這是一種設置,而不是運動的結果。

行為

  • 此設定儲存在運行時狀態中,並在啟動時由相應命令使用;變更不會自動覆蓋已建置的路徑。
  • 傳回原始值顯示為正常完成。崩潰後,不會執行以下恢復行。
  • 在常規用戶端主機中,此狀態資料取自GetPersistentState管理器,並且對於同一世界/設定檔的腳本/聊天/巨集是通用的,且不屬於一個腳本。另一個進程或明顯獨立的InjectionRuntimeState具有不同的狀態。載入/清除設定檔可以取代它;已儲存的serial仍然會根據載入的世界進行檢查。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。讀取設定-直接腳本

參數與執行流程:

  • 沒有爭論,狀態就不會改變。
  • value 是該設定的數值。
var value = UO.moveBetweenTwoCorners();
UO.Print(Convert.ToString(value));

2。設定顯式值 - 腳本函數

參數與執行流程:

  • 值=0。 0 禁止,非零變為1。無論客戶端的配置如何,伺服器都可能拒絕此類傳遞。
  • 應用程式顯示的是節省的價值,而不是目標的成功實現。
return  RunScenario();
 object? RunScenario()
{
    var applied = UO.moveBetweenTwoCorners(0);
    UO.Print("Applied: " + Convert.ToString(applied));
    return null;
}

3。應用於腳本的某一部分 - 腳本類

參數與執行流程:

  • previous 儲存初始設定; NewMoveXY 僅限於 3000 毫秒。
  • 最後一條指令在正常運動返回後恢復設定。
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.moveBetweenTwoCorners();
        UO.moveBetweenTwoCorners(0);
        var ok = UO.NewMoveXY(UO.GetX() + 2, UO.GetY(), true, 0, false, 0, 3000);
        UO.moveBetweenTwoCorners(previous);
        UO.Print(Convert.ToString(ok));
        return null;
    }
}

命令實作

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

UO.moveBetweenTwoCorners() — UO.moveBetweenTwoCorners()

參數: 沒有參數。

結果: dynamic / Any.

呼叫時:

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

case "movebetweentwocorners":

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

                    return new InjectionValue(state.MoveBetweenTwoCorners);

UO.moveBetweenTwoCorners(value) — UO.moveBetweenTwoCorners(Any)

參數: value (Any)

結果: dynamic / Any.

呼叫時:

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

case "movebetweentwocorners":

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

                    return new InjectionValue(state.MoveBetweenTwoCorners);

UO.moveCheckStamina

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

C# 簽章

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

移動指令的最低耐力。

參數

  • value — 可選的新值。整數>=0;負數變成0。零關閉閾值檢查。

傳回值

int 是目前儲存的值。不帶參數僅讀取;帶參數傳回應用上述規則後的值。這是一種設置,而不是運動的結果。

行為

  • 此設定儲存在運行時狀態中,並在啟動時由相應命令使用;變更不會自動覆蓋已建置的路徑。
  • 傳回原始值顯示為正常完成。崩潰後,不會執行以下恢復行。
  • 預設為1。值0禁用此本地檢查;正值設定最小耐力。低於閾值時,發射將被拒絕或停止移動,而不是等待耐力恢復。
  • 在常規用戶端主機中,此狀態資料取自GetPersistentState管理器,並且對於同一世界/設定檔的腳本/聊天/巨集是通用的,且不屬於一個腳本。另一個進程或明顯獨立的InjectionRuntimeState具有不同的狀態。載入/清除設定檔可以取代它;已儲存的serial仍然會根據載入的世界進行檢查。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。讀取設定-直接腳本

參數與執行流程:

  • 沒有爭論,狀態就不會改變。
  • value 是該設定的數值。
var value = UO.moveCheckStamina();
UO.Print(Convert.ToString(value));

2。設定顯式值 - 腳本函數

參數與執行流程:

  • 值=15。整數>=0;負數變成0。零關閉閾值檢查。
  • 應用程式顯示的是節省的價值,而不是目標的成功實現。
return  RunScenario();
 object? RunScenario()
{
    var applied = UO.moveCheckStamina(15);
    UO.Print("Applied: " + Convert.ToString(applied));
    return null;
}

3。應用於腳本的某一部分 - 腳本類

參數與執行流程:

  • previous 儲存初始設定; NewMoveXY 僅限於 3000 毫秒。
  • 最後一條指令在正常運動返回後恢復設定。
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.moveCheckStamina();
        UO.moveCheckStamina(15);
        var ok = UO.NewMoveXY(UO.GetX() + 2, UO.GetY(), true, 0, false, 0, 3000);
        UO.moveCheckStamina(previous);
        UO.Print(Convert.ToString(ok));
        return null;
    }
}

命令實作

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

UO.moveCheckStamina() — UO.moveCheckStamina()

參數: 沒有參數。

結果: dynamic / Any.

呼叫時:

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

case "movecheckstamina": if (arguments.Length > 0) state.MoveCheckStamina = Math.Max(0, Arg(0)); return new InjectionValue(state.MoveCheckStamina);

UO.moveCheckStamina(value) — UO.moveCheckStamina(Any)

參數: value (Any)

結果: dynamic / Any.

呼叫時:

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

case "movecheckstamina": if (arguments.Length > 0) state.MoveCheckStamina = Math.Max(0, Arg(0)); return new InjectionValue(state.MoveCheckStamina);

UO.moveExitOnDisconnect

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

C# 簽章

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

連線中斷時停止/拒絕移動。

參數

  • value — 可選的新值。 0 關閉,非零變成1。停用驗證可防止您在沒有連線的情況下在伺服器上移動。

傳回值

int 是目前儲存的值。不帶參數僅讀取;帶參數傳回應用上述規則後的值。這是一種設置,而不是運動的結果。

行為

  • 此設定儲存在運行時狀態中,並在啟動時由相應命令使用;變更不會自動覆蓋已建置的路徑。
  • 傳回原始值顯示為正常完成。崩潰後,不會執行以下恢復行。
  • 在常規用戶端主機中,此狀態資料取自GetPersistentState管理器,並且對於同一世界/設定檔的腳本/聊天/巨集是通用的,且不屬於一個腳本。另一個進程或明顯獨立的InjectionRuntimeState具有不同的狀態。載入/清除設定檔可以取代它;已儲存的serial仍然會根據載入的世界進行檢查。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。讀取設定-直接腳本

參數與執行流程:

  • 沒有爭論,狀態就不會改變。
  • value 是該設定的數值。
var value = UO.moveExitOnDisconnect();
UO.Print(Convert.ToString(value));

2。設定顯式值 - 腳本函數

參數與執行流程:

  • 值=1。 0 關閉,非零變成1。停用驗證可防止您在沒有連線的情況下在伺服器上移動。
  • 應用程式顯示的是節省的價值,而不是目標的成功實現。
return  RunScenario();
 object? RunScenario()
{
    var applied = UO.moveExitOnDisconnect(1);
    UO.Print("Applied: " + Convert.ToString(applied));
    return null;
}

3。應用於腳本的某一部分 - 腳本類

參數與執行流程:

  • previous 儲存初始設定; NewMoveXY 僅限於 3000 毫秒。
  • 最後一條指令在正常運動返回後恢復設定。
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.moveExitOnDisconnect();
        UO.moveExitOnDisconnect(1);
        var ok = UO.NewMoveXY(UO.GetX() + 2, UO.GetY(), true, 0, false, 0, 3000);
        UO.moveExitOnDisconnect(previous);
        UO.Print(Convert.ToString(ok));
        return null;
    }
}

命令實作

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

UO.moveExitOnDisconnect() — UO.moveExitOnDisconnect()

參數: 沒有參數。

結果: dynamic / Any.

呼叫時:

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

case "moveexitondisconnect": if (arguments.Length > 0) state.MoveExitOnDisconnect = Arg(0) != 0 ? 1 : 0; return new InjectionValue(state.MoveExitOnDisconnect);

UO.moveExitOnDisconnect(value) — UO.moveExitOnDisconnect(Any)

參數: value (Any)

結果: dynamic / Any.

呼叫時:

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

case "moveexitondisconnect": if (arguments.Length > 0) state.MoveExitOnDisconnect = Arg(0) != 0 ? 1 : 0; return new InjectionValue(state.MoveExitOnDisconnect);

UO.moveHeuristicMult

路徑搜尋初始設定

在新的指令碼執行環境中,UO.moveHeuristicMult() 為 120,UO.moveTurnCost() 為 14。指令碼明確設定的數值會保留供其後續移動命令使用。乘數 100 使用包含對角線的普通距離估計;較高的乘數通常加快搜尋,但不保證最短路徑。較低的值可能大幅增加計算時間。轉向成本 0 會停用改變方向的額外懲罰。這些設定影響路徑搜尋,不影響角色速度或 UO.LimitMove 的範圍限制。

int previousHeuristic = (int)UO.moveHeuristicMult();
int previousTurnCost = (int)UO.moveTurnCost();
try
{
    UO.moveHeuristicMult(120);
    UO.moveTurnCost(14);
    UO.Print($"Heuristic: {UO.moveHeuristicMult()}, turn cost: {UO.moveTurnCost()}");
}
finally
{
    UO.moveHeuristicMult(previousHeuristic);
    UO.moveTurnCost(previousTurnCost);
}

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

C# 簽章

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

探路者啟發式乘數以百分比表示。

參數

  • value — 可選的新值。整數 >=0 被保留;在搜尋至少1之前。 100值對應於通常的估計; >100可能更喜歡更快的搜索,而沒有最低成本保證。當Optimized=false時,使用1。

傳回值

int 是目前儲存的值。不帶參數僅讀取;帶參數傳回應用上述規則後的值。這是一種設置,而不是運動的結果。

行為

  • 此設定儲存在運行時狀態中,並在啟動時由相應命令使用;變更不會自動覆蓋已建置的路徑。
  • 傳回原始值顯示為正常完成。崩潰後,不會執行以下恢復行。
  • 在常規用戶端主機中,此狀態資料取自GetPersistentState管理器,並且對於同一世界/設定檔的腳本/聊天/巨集是通用的,且不屬於一個腳本。另一個進程或明顯獨立的InjectionRuntimeState具有不同的狀態。載入/清除設定檔可以取代它;已儲存的serial仍然會根據載入的世界進行檢查。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。讀取設定-直接腳本

參數與執行流程:

  • 沒有爭論,狀態就不會改變。
  • value 是該設定的數值。
var value = UO.moveHeuristicMult();
UO.Print(Convert.ToString(value));

2。設定顯式值 - 腳本函數

參數與執行流程:

  • 值=100。整數 >=0 被保留;在搜尋至少1之前。 100值對應於通常的估計; >100可能更喜歡更快的搜索,而沒有最低成本保證。當 Optimized=false 時,使用1。
  • 應用程式顯示的是節省的價值,而不是目標的成功實現。
return  RunScenario();
 object? RunScenario()
{
    var applied = UO.moveHeuristicMult(100);
    UO.Print("Applied: " + Convert.ToString(applied));
    return null;
}

3。應用於腳本的某一部分 - 腳本類

參數與執行流程:

  • previous 儲存初始設定; NewMoveXY 僅限於 3000 毫秒。
  • 最後一條指令在正常運動返回後恢復設定。
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.moveHeuristicMult();
        UO.moveHeuristicMult(100);
        var ok = UO.NewMoveXY(UO.GetX() + 2, UO.GetY(), true, 0, false, 0, 3000);
        UO.moveHeuristicMult(previous);
        UO.Print(Convert.ToString(ok));
        return null;
    }
}

命令實作

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

UO.moveHeuristicMult() — UO.moveHeuristicMult()

參數: 沒有參數。

結果: dynamic / Any.

呼叫時:

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

case "moveheuristicmult": if (arguments.Length > 0) state.MoveHeuristicMultiplier = Math.Max(0, Arg(0)); return new InjectionValue(state.MoveHeuristicMultiplier);

UO.moveHeuristicMult(value) — UO.moveHeuristicMult(Any)

參數: value (Any)

結果: dynamic / Any.

呼叫時:

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

case "moveheuristicmult": if (arguments.Length > 0) state.MoveHeuristicMultiplier = Math.Max(0, Arg(0)); return new InjectionValue(state.MoveHeuristicMultiplier);

UO.moveOpenDoor

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

C# 簽章

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

嘗試打開行進方向的門。

參數

  • value — 可選的新值。 0 關閉,非零變成1。 NewMoveXY/MoveXYZ 中的明確 openDoors 在呼叫期間取代此標誌。

傳回值

int 是目前儲存的值。不帶參數僅讀取;帶參數傳回應用上述規則後的值。這是一種設置,而不是運動的結果。

行為

  • 此設定儲存在運行時狀態中,並在啟動時由相應命令使用;變更不會自動覆蓋已建置的路徑。
  • 傳回原始值顯示為正常完成。崩潰後,不會執行以下恢復行。
  • 預設為0。在1,門禁單元在 A* 期間被認為可以通過;在該步驟之前嘗試打開特定的相鄰門。如果沒有已知的門對象,則使用OpenDoor查詢。
  • 該標誌本身不會關閉門。關閉由角色打開的門是一個單獨的客戶端設定;鎖上的門或伺服器禁令可能會擾亂路線。
  • 在常規用戶端主機中,此狀態資料取自GetPersistentState管理器,並且對於同一世界/設定檔的腳本/聊天/巨集是通用的,且不屬於一個腳本。另一個進程或明顯獨立的InjectionRuntimeState具有不同的狀態。載入/清除設定檔可以取代它;已儲存的serial仍然會根據載入的世界進行檢查。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。讀取設定-直接腳本

參數與執行流程:

  • 沒有爭論,狀態就不會改變。
  • value 是該設定的數值。
var value = UO.moveOpenDoor();
UO.Print(Convert.ToString(value));

2。設定顯式值 - 腳本函數

參數與執行流程:

  • 值=1。 0 關閉,非零變成1。 NewMoveXY/MoveXYZ 中的明確 openDoors 在呼叫期間取代此標誌。
  • 應用程式顯示的是節省的價值,而不是目標的成功實現。
return  RunScenario();
 object? RunScenario()
{
    var applied = UO.moveOpenDoor(1);
    UO.Print("Applied: " + Convert.ToString(applied));
    return null;
}

3。應用於腳本的某一部分 - 腳本類

參數與執行流程:

  • previous 儲存初始設定; NewMoveXY 僅限於 3000 毫秒。
  • 最後一條指令在正常運動返回後恢復設定。
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.moveOpenDoor();
        UO.moveOpenDoor(1);
        var ok = UO.NewMoveXY(UO.GetX() + 2, UO.GetY(), true, 0, false, 0, 3000);
        UO.moveOpenDoor(previous);
        UO.Print(Convert.ToString(ok));
        return null;
    }
}

命令實作

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

UO.moveOpenDoor() — UO.moveOpenDoor()

參數: 沒有參數。

結果: dynamic / Any.

呼叫時:

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

case "moveopendoor": if (arguments.Length > 0) state.MoveOpenDoor = Arg(0) != 0 ? 1 : 0; return new InjectionValue(state.MoveOpenDoor);

UO.moveOpenDoor(value) — UO.moveOpenDoor(Any)

參數: value (Any)

結果: dynamic / Any.

呼叫時:

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

case "moveopendoor": if (arguments.Length > 0) state.MoveOpenDoor = Arg(0) != 0 ? 1 : 0; return new InjectionValue(state.MoveOpenDoor);

UO.moveThroughCorner

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

C# 簽章

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

一側單元被阻擋時單元間對角線的解析度。

參數

  • value — 可選的新值。 0禁止,非零變為1。如果兩邊的方塊都被阻擋,則塗抹moveBetweenTwoCorners。

傳回值

int 是目前儲存的值。不帶參數僅讀取;帶參數傳回應用上述規則後的值。這是一種設置,而不是運動的結果。

行為

  • 此設定儲存在運行時狀態中,並在啟動時由相應命令使用;變更不會自動覆蓋已建置的路徑。
  • 傳回原始值顯示為正常完成。崩潰後,不會執行以下恢復行。
  • 在常規用戶端主機中,此狀態資料取自GetPersistentState管理器,並且對於同一世界/設定檔的腳本/聊天/巨集是通用的,且不屬於一個腳本。另一個進程或明顯獨立的InjectionRuntimeState具有不同的狀態。載入/清除設定檔可以取代它;已儲存的serial仍然會根據載入的世界進行檢查。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。讀取設定-直接腳本

參數與執行流程:

  • 沒有爭論,狀態就不會改變。
  • value 是該設定的數值。
var value = UO.moveThroughCorner();
UO.Print(Convert.ToString(value));

2。設定顯式值 - 腳本函數

參數與執行流程:

  • 值=0。 0禁止,非零變為1。如果兩邊的方塊都被阻擋,則塗抹moveBetweenTwoCorners。
  • 應用程式顯示的是節省的價值,而不是目標的成功實現。
return  RunScenario();
 object? RunScenario()
{
    var applied = UO.moveThroughCorner(0);
    UO.Print("Applied: " + Convert.ToString(applied));
    return null;
}

3。應用於腳本的某一部分 - 腳本類

參數與執行流程:

  • previous 儲存初始設定; NewMoveXY 僅限於 3000 毫秒。
  • 最後一條指令在正常運動返回後恢復設定。
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.moveThroughCorner();
        UO.moveThroughCorner(0);
        var ok = UO.NewMoveXY(UO.GetX() + 2, UO.GetY(), true, 0, false, 0, 3000);
        UO.moveThroughCorner(previous);
        UO.Print(Convert.ToString(ok));
        return null;
    }
}

命令實作

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

UO.moveThroughCorner() — UO.moveThroughCorner()

參數: 沒有參數。

結果: dynamic / Any.

呼叫時:

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

case "movethroughcorner": if (arguments.Length > 0) state.MoveThroughCorner = Arg(0) != 0 ? 1 : 0; return new InjectionValue(state.MoveThroughCorner);

UO.moveThroughCorner(value) — UO.moveThroughCorner(Any)

參數: value (Any)

結果: dynamic / Any.

呼叫時:

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

case "movethroughcorner": if (arguments.Length > 0) state.MoveThroughCorner = Arg(0) != 0 ? 1 : 0; return new InjectionValue(state.MoveThroughCorner);

UO.moveThroughNPC

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

C# 簽章

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

允許嘗試穿過字元。

參數

  • 數值體力門檻:目前 Stamina >= 門檻時才允許嘗試穿過角色。預設 1000;0 允許在任何體力下嘗試。伺服器仍可拒絕移動。

傳回值

int 是目前儲存的值。不帶參數僅讀取;帶參數傳回應用上述規則後的值。這是一種設置,而不是運動的結果。

行為

  • 此設定儲存在運行時狀態中,並在啟動時由相應命令使用;變更不會自動覆蓋已建置的路徑。
  • 傳回原始值顯示為正常完成。崩潰後,不會執行以下恢復行。
  • 數值體力門檻:目前 Stamina >= 門檻時才允許嘗試穿過角色。預設 1000;0 允許在任何體力下嘗試。伺服器仍可拒絕移動。
  • 在常規用戶端主機中,此狀態資料取自GetPersistentState管理器,並且對於同一世界/設定檔的腳本/聊天/巨集是通用的,且不屬於一個腳本。另一個進程或明顯獨立的InjectionRuntimeState具有不同的狀態。載入/清除設定檔可以取代它;已儲存的serial仍然會根據載入的世界進行檢查。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。讀取設定-直接腳本

參數與執行流程:

  • 沒有爭論,狀態就不會改變。
  • value 是該設定的數值。
var value = UO.moveThroughNPC();
UO.Print(Convert.ToString(value));

2。設定顯式值 - 腳本函數

參數與執行流程:

  • 值=0。整數>=0,負數變成0;積極允許嘗試。顯式 avoidMobiles 指定單一呼叫的反向約束。
  • 應用程式顯示的是節省的價值,而不是目標的成功實現。
return  RunScenario();
 object? RunScenario()
{
    var applied = UO.moveThroughNPC(0);
    UO.Print("Applied: " + Convert.ToString(applied));
    return null;
}

3。應用於腳本的某一部分 - 腳本類

參數與執行流程:

  • previous 儲存初始設定; NewMoveXY 僅限於 3000 毫秒。
  • 最後一條指令在正常運動返回後恢復設定。
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.moveThroughNPC();
        UO.moveThroughNPC(0);
        var ok = UO.NewMoveXY(UO.GetX() + 2, UO.GetY(), true, 0, false, 0, 3000);
        UO.moveThroughNPC(previous);
        UO.Print(Convert.ToString(ok));
        return null;
    }
}

命令實作

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

UO.moveThroughNPC() — UO.moveThroughNPC()

參數: 沒有參數。

結果: dynamic / Any.

呼叫時:

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

case "movethroughnpc": if (arguments.Length > 0) state.MoveThroughNpc = Math.Max(0, Arg(0)); return new InjectionValue(state.MoveThroughNpc);

UO.moveThroughNPC(value) — UO.moveThroughNPC(Any)

參數: value (Any)

結果: dynamic / Any.

呼叫時:

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

case "movethroughnpc": if (arguments.Length > 0) state.MoveThroughNpc = Math.Max(0, Arg(0)); return new InjectionValue(state.MoveThroughNpc);

UO.moveTurnCost

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

C# 簽章

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

尋找路徑時改變方向的額外成本。

參數

  • value — 可選的新值。整數>=0,負數變成0。這是路線的權重,而不是毫秒:直步花費 10,對角線花費 14,這是每轉的附加價值。

傳回值

int 是目前儲存的值。不帶參數僅讀取;帶參數傳回應用上述規則後的值。這是一種設置,而不是運動的結果。

行為

  • 此設定儲存在運行時狀態中,並在啟動時由相應命令使用;變更不會自動覆蓋已建置的路徑。
  • 傳回原始值顯示為正常完成。崩潰後,不會執行以下恢復行。
  • 在常規用戶端主機中,此狀態資料取自GetPersistentState管理器,並且對於同一世界/設定檔的腳本/聊天/巨集是通用的,且不屬於一個腳本。另一個進程或明顯獨立的InjectionRuntimeState具有不同的狀態。載入/清除設定檔可以取代它;已儲存的serial仍然會根據載入的世界進行檢查。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。讀取設定-直接腳本

參數與執行流程:

  • 沒有爭論,狀態就不會改變。
  • value 是該設定的數值。
var value = UO.moveTurnCost();
UO.Print(Convert.ToString(value));

2。設定顯式值 - 腳本函數

參數與執行流程:

  • 值=14。整數>=0,負數變成0。這是路線的權重,而不是毫秒:直步花費 10,對角線花費 14,這是每轉的附加價值。
  • 應用程式顯示的是節省的價值,而不是目標的成功實現。
return  RunScenario();
 object? RunScenario()
{
    var applied = UO.moveTurnCost(14);
    UO.Print("Applied: " + Convert.ToString(applied));
    return null;
}

3。應用於腳本的某一部分 - 腳本類

參數與執行流程:

  • previous 儲存初始設定; NewMoveXY 僅限於 3000 毫秒。
  • 最後一條指令在正常運動返回後恢復設定。
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.moveTurnCost();
        UO.moveTurnCost(14);
        var ok = UO.NewMoveXY(UO.GetX() + 2, UO.GetY(), true, 0, false, 0, 3000);
        UO.moveTurnCost(previous);
        UO.Print(Convert.ToString(ok));
        return null;
    }
}

命令實作

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

UO.moveTurnCost() — UO.moveTurnCost()

參數: 沒有參數。

結果: dynamic / Any.

呼叫時:

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

case "moveturncost": if (arguments.Length > 0) state.MoveTurnCost = Math.Max(0, Arg(0)); return new InjectionValue(state.MoveTurnCost);

UO.moveTurnCost(value) — UO.moveTurnCost(Any)

參數: value (Any)

結果: dynamic / Any.

呼叫時:

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

case "moveturncost": if (arguments.Length > 0) state.MoveTurnCost = Math.Max(0, Arg(0)); return new InjectionValue(state.MoveTurnCost);

UO.LimitMove — 移動距離上限. UO.LimitMove 控制目的地距離:預設 2000,0 無限制。沒有隱藏的 4096 步/節點或 10000 節點上限。工作分批執行並可停止。GetPathArray 會套用 moveThroughNPC 的體力門檻與 moveOpenDoor。

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