ZH TW UO Topic movement Part 2 - LIHACHTETAN/ClassicUO-Bad-Newbie-CSharp-Scripts-IDE GitHub Wiki
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
家 · C# · IDE · UO API · A–Z · 範例 · Languages
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
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/非零數字繼續。該註冊在當前執行中有效,並隨之釋放。
每個範例都可以儲存為單獨的檔案.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));參數與執行流程:
- 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;參數與執行流程:
- 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;
}參數與執行流程:
- 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);
}參數與執行流程:
- 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。
參數: xdst (Any), ydst (Any), optimized (Any), accuracy (Any), running (Any)
結果: int / Integer.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.Register [NewMoveXY]. -
InjectionScript.Runtime.InjectionApiUO.CompactNewMoveXY:CompactNewMoveXY(values).
呼叫時執行已儲存的處理函式 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.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.Register [NewMoveXY]. -
InjectionScript.Runtime.InjectionApiUO.CompactNewMoveXY:CompactNewMoveXY(values).
呼叫時執行已儲存的處理函式 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.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.Register [NewMoveXY]. -
InjectionScript.Runtime.InjectionApiUO.CompactNewMoveXY:CompactNewMoveXY(values).
呼叫時執行已儲存的處理函式 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.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.Register [NewMoveXY]. -
InjectionScript.Runtime.InjectionApiUO.CompactNewMoveXY:CompactNewMoveXY(values).
呼叫時執行已儲存的處理函式 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.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.Register [NewMoveXY]. -
InjectionScript.Runtime.InjectionApiUO.CompactNewMoveXY:CompactNewMoveXY(values).
呼叫時執行已儲存的處理函式 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.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.Register [NewMoveXY]. -
InjectionScript.Runtime.InjectionApiUO.CompactNewMoveXY:CompactNewMoveXY(values).
呼叫時執行已儲存的處理函式 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.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.Register [NewMoveXY]. -
InjectionScript.Runtime.InjectionApiUO.CompactNewMoveXY:CompactNewMoveXY(values).
呼叫時執行已儲存的處理函式 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.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.Register [NewMoveXY]. -
InjectionScript.Runtime.InjectionApiUO.CompactNewMoveXY:CompactNewMoveXY(values).
呼叫時執行已儲存的處理函式 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.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.Register [NewMoveXY]. -
InjectionScript.Runtime.InjectionApiUO.CompactNewMoveXY:CompactNewMoveXY(values).
呼叫時執行已儲存的處理函式 delegate。註冊方法在建立 API 時建立此 delegate。
內部實作程式碼,不能作為獨立腳本執行。
values => new InjectionValue(CompactNewMoveXY(values))Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.OpenDoor();請求為角色打開門。
沒有參數。
void - 沒有值。使用單獨的線路撥打電話;完成並不確認伺服器的操作。
- OpenDoor 透過 Invoke 呼叫 GameActions.OpenDoor。不接受串列閘門;搜尋和發現規則屬於GameActions/server。
- 在範例中,UO.Wait僅指定腳本暫停;暫停的結束並不能證明伺服器已經完成了請求。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
指令是獨立的陳述式。前面的訊息表示呼叫開始,並非伺服器已完成動作的確認。
UO.Print("Calling UO.OpenDoor");
UO.OpenDoor();參數與執行流程:
- 請求為角色打開門。
UO.OpenDoor();參數與執行流程:
- 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;參數與執行流程:
- 在範例中,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。
參數: 沒有參數。
結果: void / Unit.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.OpenDoor:bridge.OpenDoor().
內部實作程式碼,不能作為獨立腳本執行。
case "opendoor": bridge.OpenDoor(); break;PMove 等待尋路與移動完成。XY 形式要求精確 XY,XYZ 也要求指定高度。傳回 void;請比較實際座標判斷結果。需要數值結果時使用 NewMoveXY 或 MoveXYZ。不再有隱含的 30 秒期限。
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
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實現了隊列感知介面。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
var result = UO.PredictedDirection();
UO.Print("PredictedDirection: " + Convert.ToString(result));參數與執行流程:
- 預測儲存一次無參數呼叫; Convert.ToString 格式化日誌的數字。
var predicted = UO.PredictedDirection();
UO.Print("Predicted: " + Convert.ToString(predicted));參數與執行流程:
- 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;參數與執行流程:
- 預期 - 座標/高度/方向的範例,而不是本機指令的參數。 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。
參數: 沒有參數。
結果: int / Integer.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ReadPredictedCoordinate:ReadPredictedCoordinate(3).
內部實作程式碼,不能作為獨立腳本執行。
case "predicteddirection": return new InjectionValue(ReadPredictedCoordinate(3));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
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實現了隊列感知介面。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
var result = UO.PredictedX();
UO.Print("PredictedX: " + Convert.ToString(result));參數與執行流程:
- 預測儲存一次無參數呼叫; Convert.ToString 格式化日誌的數字。
var predicted = UO.PredictedX();
UO.Print("Predicted: " + Convert.ToString(predicted));參數與執行流程:
- 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;參數與執行流程:
- 預期 - 座標/高度/方向的範例,而不是本機指令的參數。 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。
參數: 沒有參數。
結果: int / Integer.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ReadPredictedCoordinate:ReadPredictedCoordinate(0).
內部實作程式碼,不能作為獨立腳本執行。
case "predictedx": return new InjectionValue(ReadPredictedCoordinate(0));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
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實現了隊列感知介面。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
var result = UO.PredictedY();
UO.Print("PredictedY: " + Convert.ToString(result));參數與執行流程:
- 預測儲存一次無參數呼叫; Convert.ToString 格式化日誌的數字。
var predicted = UO.PredictedY();
UO.Print("Predicted: " + Convert.ToString(predicted));參數與執行流程:
- 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;參數與執行流程:
- 預期 - 座標/高度/方向的範例,而不是本機指令的參數。 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。
參數: 沒有參數。
結果: int / Integer.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ReadPredictedCoordinate:ReadPredictedCoordinate(1).
內部實作程式碼,不能作為獨立腳本執行。
case "predictedy": return new InjectionValue(ReadPredictedCoordinate(1));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
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實現了隊列感知介面。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
var result = UO.PredictedZ();
UO.Print("PredictedZ: " + Convert.ToString(result));參數與執行流程:
- 預測儲存一次無參數呼叫; Convert.ToString 格式化日誌的數字。
var predicted = UO.PredictedZ();
UO.Print("Predicted: " + Convert.ToString(predicted));參數與執行流程:
- 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;參數與執行流程:
- 預期 - 座標/高度/方向的範例,而不是本機指令的參數。 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。
參數: 沒有參數。
結果: int / Integer.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ReadPredictedCoordinate:ReadPredictedCoordinate(2).
內部實作程式碼,不能作為獨立腳本執行。
case "predictedz": return new InjectionValue(ReadPredictedCoordinate(2));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.SetRunMountTimer(object? value);設定騎馬跑步的步數間隔。用於故意減慢或恢復到標準速度。您無法使用此命令將移動速度加快到超出標準速度。
-
value— 所需的整數毫秒數。範圍100..2000;較小的值,包括0和負值,上升到100,較大的值下降到2000。
void - 沒有值。使用單獨的線路撥打電話。若要讀取應用的間距,請使用 UO.GetRunMountTimer()。這不是伺服器對步驟的確認。
- 此設定適用於騎乘模式。標準和最小允許值為100 ms;上限為2000毫秒。其他三種模式有單獨的設定。
- 這是角色的本地移動間隔,而不是 ping、FPS、尋路超時或測量的伺服器步驟持續時間。增加數量會減慢移動速度;低於標準間隔不會加快資料包的發送速度。
- 隊伍本身不會開始移動,不會登上坐騎,也不會改變步行/跑步模式。駕駛時選擇模式;客戶端也會考慮伺服器指定的速度模式和航班。
- 此設定對於該客戶端的移動是通用的:可以透過手動控制、地圖路線和其他腳本來使用。暫時更改,保留先前的值,操作結束後恢復;不要同時從多個程式更改一種模式。
- 轉身和斜步與正常動作不同。伺服器確認、通訊延遲和障礙可能會增加實際時間。客戶端不會發送一系列加速步驟來彌補遺失的幀。
- 在常規用戶端主機中,此狀態資料取自GetPersistentState管理器,並且對於同一世界/設定檔的腳本/聊天/巨集是通用的,且不屬於一個腳本。另一個進程或明顯獨立的InjectionRuntimeState具有不同的狀態。載入/清除設定檔可以取代它;已儲存的serial仍然會根據載入的世界進行檢查。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
指令是獨立的陳述式。前面的訊息表示呼叫開始,並非伺服器已完成動作的確認。
UO.Print("Calling UO.SetRunMountTimer");
UO.SetRunMountTimer(100);參數與執行流程:
- 值=100 — 毫秒。該呼叫設定後續移動,但不啟動路線。
UO.SetRunMountTimer(100);參數與執行流程:
- 值=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;參數與執行流程:
- 應用 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。
參數: value (Any)
結果: void / Unit.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ClampMoveTimer:ClampMoveTimer(Arg(0), 100). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetMovementTimers:bridge.SetMovementTimers(state.RunMountTimer, state.RunUnmountTimer, state.WalkMountTimer, state.WalkUnmountTimer).
內部實作程式碼,不能作為獨立腳本執行。
case "setrunmounttimer":
state.RunMountTimer = ClampMoveTimer(Arg(0), 100);
bridge.SetMovementTimers(state.RunMountTimer, state.RunUnmountTimer, state.WalkMountTimer, state.WalkUnmountTimer);
return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.SetRunUnmountTimer(object? value);設定步行步幅間隔。用於故意減慢或恢復到標準速度。您無法使用此命令將移動速度加快到超出標準速度。
-
value— 所需的整數毫秒數。範圍200..2000;較小的值,包括0和負值,上升到200,較大的值下降到2000。
void - 沒有值。使用單獨的線路撥打電話。若要讀取應用的間距,請使用 UO.GetRunUnmountTimer()。這不是伺服器對步驟的確認。
- 此設定適用於步行模式。標準和最小允許值為200 ms;上限為2000毫秒。其他三種模式有單獨的設定。
- 這是角色的本地移動間隔,而不是 ping、FPS、尋路超時或測量的伺服器步驟持續時間。增加數量會減慢移動速度;低於標準間隔不會加快資料包的發送速度。
- 隊伍本身不會開始移動,不會登上坐騎,也不會改變步行/跑步模式。駕駛時選擇模式;客戶端也會考慮伺服器指定的速度模式和航班。
- 此設定對於該客戶端的移動是通用的:可以透過手動控制、地圖路線和其他腳本來使用。暫時更改,保留先前的值,操作結束後恢復;不要同時從多個程式更改一種模式。
- 轉身和斜步與正常動作不同。伺服器確認、通訊延遲和障礙可能會增加實際時間。客戶端不會發送一系列加速步驟來彌補遺失的幀。
- 在常規用戶端主機中,此狀態資料取自GetPersistentState管理器,並且對於同一世界/設定檔的腳本/聊天/巨集是通用的,且不屬於一個腳本。另一個進程或明顯獨立的InjectionRuntimeState具有不同的狀態。載入/清除設定檔可以取代它;已儲存的serial仍然會根據載入的世界進行檢查。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
指令是獨立的陳述式。前面的訊息表示呼叫開始,並非伺服器已完成動作的確認。
UO.Print("Calling UO.SetRunUnmountTimer");
UO.SetRunUnmountTimer(200);參數與執行流程:
- 值=200 — 毫秒。該呼叫設定後續移動,但不啟動路線。
UO.SetRunUnmountTimer(200);參數與執行流程:
- 值=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;參數與執行流程:
- 應用 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。
參數: value (Any)
結果: void / Unit.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ClampMoveTimer:ClampMoveTimer(Arg(0), 200). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetMovementTimers:bridge.SetMovementTimers(state.RunMountTimer, state.RunUnmountTimer, state.WalkMountTimer, state.WalkUnmountTimer).
內部實作程式碼,不能作為獨立腳本執行。
case "setrununmounttimer":
state.RunUnmountTimer = ClampMoveTimer(Arg(0), 200);
bridge.SetMovementTimers(state.RunMountTimer, state.RunUnmountTimer, state.WalkMountTimer, state.WalkUnmountTimer);
return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.SetWalkMountTimer(object? value);設定騎馬行走的步數間隔。用於故意減慢或恢復到標準速度。您無法使用此命令將移動速度加快到超出標準速度。
-
value— 所需的整數毫秒數。範圍200..2000;較小的值,包括0和負值,上升到200,較大的值下降到2000。
void - 沒有值。使用單獨的線路撥打電話。若要讀取應用的間距,請使用 UO.GetWalkMountTimer()。這不是伺服器對步驟的確認。
- 此設定適用於騎乘模式。標準和最小允許值為200 ms;上限為2000毫秒。其他三種模式有單獨的設定。
- 這是角色的本地移動間隔,而不是 ping、FPS、尋路超時或測量的伺服器步驟持續時間。增加數量會減慢移動速度;低於標準間隔不會加快資料包的發送速度。
- 隊伍本身不會開始移動,不會登上坐騎,也不會改變步行/跑步模式。駕駛時選擇模式;客戶端也會考慮伺服器指定的速度模式和航班。
- 此設定對於該客戶端的移動是通用的:可以透過手動控制、地圖路線和其他腳本來使用。暫時更改,保留先前的值,操作結束後恢復;不要同時從多個程式更改一種模式。
- 轉身和斜步與正常動作不同。伺服器確認、通訊延遲和障礙可能會增加實際時間。客戶端不會發送一系列加速步驟來彌補遺失的幀。
- 在常規用戶端主機中,此狀態資料取自GetPersistentState管理器,並且對於同一世界/設定檔的腳本/聊天/巨集是通用的,且不屬於一個腳本。另一個進程或明顯獨立的InjectionRuntimeState具有不同的狀態。載入/清除設定檔可以取代它;已儲存的serial仍然會根據載入的世界進行檢查。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
指令是獨立的陳述式。前面的訊息表示呼叫開始,並非伺服器已完成動作的確認。
UO.Print("Calling UO.SetWalkMountTimer");
UO.SetWalkMountTimer(200);參數與執行流程:
- 值=200 — 毫秒。該呼叫設定後續移動,但不啟動路線。
UO.SetWalkMountTimer(200);參數與執行流程:
- 值=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;參數與執行流程:
- 應用 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。
參數: value (Any)
結果: void / Unit.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ClampMoveTimer:ClampMoveTimer(Arg(0), 200). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetMovementTimers:bridge.SetMovementTimers(state.RunMountTimer, state.RunUnmountTimer, state.WalkMountTimer, state.WalkUnmountTimer).
內部實作程式碼,不能作為獨立腳本執行。
case "setwalkmounttimer":
state.WalkMountTimer = ClampMoveTimer(Arg(0), 200);
bridge.SetMovementTimers(state.RunMountTimer, state.RunUnmountTimer, state.WalkMountTimer, state.WalkUnmountTimer);
return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.SetWalkUnmountTimer(object? value);設定行走步數間隔。用於故意減慢或恢復到標準速度。您無法使用此命令將移動速度加快到超出標準速度。
-
value— 所需的整數毫秒數。範圍400..2000;較小的值,包括0和負值,上升到400,較大的值下降到2000。
void - 沒有值。使用單獨的線路撥打電話。若要讀取應用的間距,請使用 UO.GetWalkUnmountTimer()。這不是伺服器對步驟的確認。
- 此設定適用於步行模式。標準和最小允許值為400 ms;上限為2000毫秒。其他三種模式有單獨的設定。
- 這是角色的本地移動間隔,而不是 ping、FPS、尋路超時或測量的伺服器步驟持續時間。增加數量會減慢移動速度;低於標準間隔不會加快資料包的發送速度。
- 隊伍本身不會開始移動,不會登上坐騎,也不會改變步行/跑步模式。駕駛時選擇模式;客戶端也會考慮伺服器指定的速度模式和航班。
- 此設定對於該客戶端的移動是通用的:可以透過手動控制、地圖路線和其他腳本來使用。暫時更改,保留先前的值,操作結束後恢復;不要同時從多個程式更改一種模式。
- 轉身和斜步與正常動作不同。伺服器確認、通訊延遲和障礙可能會增加實際時間。客戶端不會發送一系列加速步驟來彌補遺失的幀。
- 在常規用戶端主機中,此狀態資料取自GetPersistentState管理器,並且對於同一世界/設定檔的腳本/聊天/巨集是通用的,且不屬於一個腳本。另一個進程或明顯獨立的InjectionRuntimeState具有不同的狀態。載入/清除設定檔可以取代它;已儲存的serial仍然會根據載入的世界進行檢查。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
指令是獨立的陳述式。前面的訊息表示呼叫開始,並非伺服器已完成動作的確認。
UO.Print("Calling UO.SetWalkUnmountTimer");
UO.SetWalkUnmountTimer(400);參數與執行流程:
- 值=400 — 毫秒。該呼叫設定後續移動,但不啟動路線。
UO.SetWalkUnmountTimer(400);參數與執行流程:
- 值=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;參數與執行流程:
- 應用 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。
參數: value (Any)
結果: void / Unit.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ClampMoveTimer:ClampMoveTimer(Arg(0), 400). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetMovementTimers:bridge.SetMovementTimers(state.RunMountTimer, state.RunUnmountTimer, state.WalkMountTimer, state.WalkUnmountTimer).
內部實作程式碼,不能作為獨立腳本執行。
case "setwalkunmounttimer":
state.WalkUnmountTimer = ClampMoveTimer(Arg(0), 400);
bridge.SetMovementTimers(state.RunMountTimer, state.RunUnmountTimer, state.WalkMountTimer, state.WalkUnmountTimer);
return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
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只檢查這個存儲的對,而不檢查下一個請求的公共字段;替補球員/沃克以普遍拒絕結束了等待。確認另一個常規命令不會確認此步驟。沒有移動的旋轉仍然是一個單獨的情況。
每個範例都可以儲存為單獨的檔案.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));參數與執行流程:
- 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;參數與執行流程:
- 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;參數與執行流程:
- 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。
參數: direction (Any), running (Any)
結果: dynamic / Any.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.IsOnline:bridge.IsOnline(). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.OpenDoor:bridge.OpenDoor(). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Step:bridge.Step(Arg(0) & 7, Arg(1) != 0). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Stamina:bridge.Stamina.
內部實作程式碼,不能作為獨立腳本執行。
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));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
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只檢查這個存儲的對,而不檢查下一個請求的公共字段;替補球員/沃克以普遍拒絕結束了等待。確認另一個常規命令不會確認此步驟。沒有移動的旋轉仍然是一個單獨的情況。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
var result = UO.StepQ(2, false);
UO.Print("StepQ: " + Convert.ToString(result));參數與執行流程:
- 方向=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;參數與執行流程:
- 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;參數與執行流程:
- 方向 =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。
參數: direction (Any), run (Any)
結果: int / Integer.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.Register [StepQ]. -
InjectionScript.Runtime.InjectionApiUO.CompactStepQ:CompactStepQ(values).
呼叫時執行已儲存的處理函式 delegate。註冊方法在建立 API 時建立此 delegate。
內部實作程式碼,不能作為獨立腳本執行。
values => new InjectionValue(CompactStepQ(values))參數: direction (Any), run (Any), timeout (Any)
結果: int / Integer.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.Register [StepQ]. -
InjectionScript.Runtime.InjectionApiUO.CompactStepQ:CompactStepQ(values).
呼叫時執行已儲存的處理函式 delegate。註冊方法在建立 API 時建立此 delegate。
內部實作程式碼,不能作為獨立腳本執行。
values => new InjectionValue(CompactStepQ(values))參數: direction (Any), run (Any), timeout (Any), queue (Any)
結果: int / Integer.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.Register [StepQ]. -
InjectionScript.Runtime.InjectionApiUO.CompactStepQ:CompactStepQ(values).
呼叫時執行已儲存的處理函式 delegate。註冊方法在建立 API 時建立此 delegate。
內部實作程式碼,不能作為獨立腳本執行。
values => new InjectionValue(CompactStepQ(values))參數: direction (Any), run (Any), timeout (Any), queue (Any), waitForAck (Any)
結果: int / Integer.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.Register [StepQ]. -
InjectionScript.Runtime.InjectionApiUO.CompactStepQ:CompactStepQ(values).
呼叫時執行已儲存的處理函式 delegate。註冊方法在建立 API 時建立此 delegate。
內部實作程式碼,不能作為獨立腳本執行。
values => new InjectionValue(CompactStepQ(values))Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.moveBetweenTwoCorners();
dynamic UO.moveBetweenTwoCorners(object? value);兩側方塊被遮蔽的對角線解析度。
-
value— 可選的新值。 0 禁止,非零變為1。無論客戶端的配置如何,伺服器都可能拒絕此類傳遞。
int 是目前儲存的值。不帶參數僅讀取;帶參數傳回應用上述規則後的值。這是一種設置,而不是運動的結果。
- 此設定儲存在運行時狀態中,並在啟動時由相應命令使用;變更不會自動覆蓋已建置的路徑。
- 傳回原始值顯示為正常完成。崩潰後,不會執行以下恢復行。
- 在常規用戶端主機中,此狀態資料取自GetPersistentState管理器,並且對於同一世界/設定檔的腳本/聊天/巨集是通用的,且不屬於一個腳本。另一個進程或明顯獨立的InjectionRuntimeState具有不同的狀態。載入/清除設定檔可以取代它;已儲存的serial仍然會根據載入的世界進行檢查。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
object? result = UO.moveBetweenTwoCorners();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));參數與執行流程:
- 沒有爭論,狀態就不會改變。
- value 是該設定的數值。
var value = UO.moveBetweenTwoCorners();
UO.Print(Convert.ToString(value));參數與執行流程:
- 值=0。 0 禁止,非零變為1。無論客戶端的配置如何,伺服器都可能拒絕此類傳遞。
- 應用程式顯示的是節省的價值,而不是目標的成功實現。
return RunScenario();
object? RunScenario()
{
var applied = UO.moveBetweenTwoCorners(0);
UO.Print("Applied: " + Convert.ToString(applied));
return null;
}參數與執行流程:
- 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。
參數: 沒有參數。
結果: dynamic / Any.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
內部實作程式碼,不能作為獨立腳本執行。
case "movebetweentwocorners":
if (arguments.Length > 0) state.MoveBetweenTwoCorners = Arg(0) != 0 ? 1 : 0;
return new InjectionValue(state.MoveBetweenTwoCorners);參數: value (Any)
結果: dynamic / Any.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
內部實作程式碼,不能作為獨立腳本執行。
case "movebetweentwocorners":
if (arguments.Length > 0) state.MoveBetweenTwoCorners = Arg(0) != 0 ? 1 : 0;
return new InjectionValue(state.MoveBetweenTwoCorners);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.moveCheckStamina();
dynamic UO.moveCheckStamina(object? value);移動指令的最低耐力。
-
value— 可選的新值。整數>=0;負數變成0。零關閉閾值檢查。
int 是目前儲存的值。不帶參數僅讀取;帶參數傳回應用上述規則後的值。這是一種設置,而不是運動的結果。
- 此設定儲存在運行時狀態中,並在啟動時由相應命令使用;變更不會自動覆蓋已建置的路徑。
- 傳回原始值顯示為正常完成。崩潰後,不會執行以下恢復行。
- 預設為1。值0禁用此本地檢查;正值設定最小耐力。低於閾值時,發射將被拒絕或停止移動,而不是等待耐力恢復。
- 在常規用戶端主機中,此狀態資料取自GetPersistentState管理器,並且對於同一世界/設定檔的腳本/聊天/巨集是通用的,且不屬於一個腳本。另一個進程或明顯獨立的InjectionRuntimeState具有不同的狀態。載入/清除設定檔可以取代它;已儲存的serial仍然會根據載入的世界進行檢查。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
object? result = UO.moveCheckStamina();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));參數與執行流程:
- 沒有爭論,狀態就不會改變。
- value 是該設定的數值。
var value = UO.moveCheckStamina();
UO.Print(Convert.ToString(value));參數與執行流程:
- 值=15。整數>=0;負數變成0。零關閉閾值檢查。
- 應用程式顯示的是節省的價值,而不是目標的成功實現。
return RunScenario();
object? RunScenario()
{
var applied = UO.moveCheckStamina(15);
UO.Print("Applied: " + Convert.ToString(applied));
return null;
}參數與執行流程:
- 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。
參數: 沒有參數。
結果: dynamic / Any.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
內部實作程式碼,不能作為獨立腳本執行。
case "movecheckstamina": if (arguments.Length > 0) state.MoveCheckStamina = Math.Max(0, Arg(0)); return new InjectionValue(state.MoveCheckStamina);參數: value (Any)
結果: dynamic / Any.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
內部實作程式碼,不能作為獨立腳本執行。
case "movecheckstamina": if (arguments.Length > 0) state.MoveCheckStamina = Math.Max(0, Arg(0)); return new InjectionValue(state.MoveCheckStamina);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.moveExitOnDisconnect();
dynamic UO.moveExitOnDisconnect(object? value);連線中斷時停止/拒絕移動。
-
value— 可選的新值。 0 關閉,非零變成1。停用驗證可防止您在沒有連線的情況下在伺服器上移動。
int 是目前儲存的值。不帶參數僅讀取;帶參數傳回應用上述規則後的值。這是一種設置,而不是運動的結果。
- 此設定儲存在運行時狀態中,並在啟動時由相應命令使用;變更不會自動覆蓋已建置的路徑。
- 傳回原始值顯示為正常完成。崩潰後,不會執行以下恢復行。
- 在常規用戶端主機中,此狀態資料取自GetPersistentState管理器,並且對於同一世界/設定檔的腳本/聊天/巨集是通用的,且不屬於一個腳本。另一個進程或明顯獨立的InjectionRuntimeState具有不同的狀態。載入/清除設定檔可以取代它;已儲存的serial仍然會根據載入的世界進行檢查。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
object? result = UO.moveExitOnDisconnect();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));參數與執行流程:
- 沒有爭論,狀態就不會改變。
- value 是該設定的數值。
var value = UO.moveExitOnDisconnect();
UO.Print(Convert.ToString(value));參數與執行流程:
- 值=1。 0 關閉,非零變成1。停用驗證可防止您在沒有連線的情況下在伺服器上移動。
- 應用程式顯示的是節省的價值,而不是目標的成功實現。
return RunScenario();
object? RunScenario()
{
var applied = UO.moveExitOnDisconnect(1);
UO.Print("Applied: " + Convert.ToString(applied));
return null;
}參數與執行流程:
- 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。
參數: 沒有參數。
結果: dynamic / Any.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
內部實作程式碼,不能作為獨立腳本執行。
case "moveexitondisconnect": if (arguments.Length > 0) state.MoveExitOnDisconnect = Arg(0) != 0 ? 1 : 0; return new InjectionValue(state.MoveExitOnDisconnect);參數: value (Any)
結果: dynamic / Any.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
內部實作程式碼,不能作為獨立腳本執行。
case "moveexitondisconnect": if (arguments.Length > 0) state.MoveExitOnDisconnect = Arg(0) != 0 ? 1 : 0; return new InjectionValue(state.MoveExitOnDisconnect);在新的指令碼執行環境中,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 · 繁體中文 · 日本語 · 한국어
dynamic UO.moveHeuristicMult();
dynamic UO.moveHeuristicMult(object? value);探路者啟發式乘數以百分比表示。
-
value— 可選的新值。整數 >=0 被保留;在搜尋至少1之前。 100值對應於通常的估計; >100可能更喜歡更快的搜索,而沒有最低成本保證。當Optimized=false時,使用1。
int 是目前儲存的值。不帶參數僅讀取;帶參數傳回應用上述規則後的值。這是一種設置,而不是運動的結果。
- 此設定儲存在運行時狀態中,並在啟動時由相應命令使用;變更不會自動覆蓋已建置的路徑。
- 傳回原始值顯示為正常完成。崩潰後,不會執行以下恢復行。
- 在常規用戶端主機中,此狀態資料取自GetPersistentState管理器,並且對於同一世界/設定檔的腳本/聊天/巨集是通用的,且不屬於一個腳本。另一個進程或明顯獨立的InjectionRuntimeState具有不同的狀態。載入/清除設定檔可以取代它;已儲存的serial仍然會根據載入的世界進行檢查。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
object? result = UO.moveHeuristicMult();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));參數與執行流程:
- 沒有爭論,狀態就不會改變。
- value 是該設定的數值。
var value = UO.moveHeuristicMult();
UO.Print(Convert.ToString(value));參數與執行流程:
- 值=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;
}參數與執行流程:
- 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。
參數: 沒有參數。
結果: dynamic / Any.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
內部實作程式碼,不能作為獨立腳本執行。
case "moveheuristicmult": if (arguments.Length > 0) state.MoveHeuristicMultiplier = Math.Max(0, Arg(0)); return new InjectionValue(state.MoveHeuristicMultiplier);參數: value (Any)
結果: dynamic / Any.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
內部實作程式碼,不能作為獨立腳本執行。
case "moveheuristicmult": if (arguments.Length > 0) state.MoveHeuristicMultiplier = Math.Max(0, Arg(0)); return new InjectionValue(state.MoveHeuristicMultiplier);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.moveOpenDoor();
dynamic UO.moveOpenDoor(object? value);嘗試打開行進方向的門。
-
value— 可選的新值。 0 關閉,非零變成1。 NewMoveXY/MoveXYZ 中的明確 openDoors 在呼叫期間取代此標誌。
int 是目前儲存的值。不帶參數僅讀取;帶參數傳回應用上述規則後的值。這是一種設置,而不是運動的結果。
- 此設定儲存在運行時狀態中,並在啟動時由相應命令使用;變更不會自動覆蓋已建置的路徑。
- 傳回原始值顯示為正常完成。崩潰後,不會執行以下恢復行。
- 預設為0。在1,門禁單元在 A* 期間被認為可以通過;在該步驟之前嘗試打開特定的相鄰門。如果沒有已知的門對象,則使用OpenDoor查詢。
- 該標誌本身不會關閉門。關閉由角色打開的門是一個單獨的客戶端設定;鎖上的門或伺服器禁令可能會擾亂路線。
- 在常規用戶端主機中,此狀態資料取自GetPersistentState管理器,並且對於同一世界/設定檔的腳本/聊天/巨集是通用的,且不屬於一個腳本。另一個進程或明顯獨立的InjectionRuntimeState具有不同的狀態。載入/清除設定檔可以取代它;已儲存的serial仍然會根據載入的世界進行檢查。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
object? result = UO.moveOpenDoor();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));參數與執行流程:
- 沒有爭論,狀態就不會改變。
- value 是該設定的數值。
var value = UO.moveOpenDoor();
UO.Print(Convert.ToString(value));參數與執行流程:
- 值=1。 0 關閉,非零變成1。 NewMoveXY/MoveXYZ 中的明確 openDoors 在呼叫期間取代此標誌。
- 應用程式顯示的是節省的價值,而不是目標的成功實現。
return RunScenario();
object? RunScenario()
{
var applied = UO.moveOpenDoor(1);
UO.Print("Applied: " + Convert.ToString(applied));
return null;
}參數與執行流程:
- 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。
參數: 沒有參數。
結果: dynamic / Any.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
內部實作程式碼,不能作為獨立腳本執行。
case "moveopendoor": if (arguments.Length > 0) state.MoveOpenDoor = Arg(0) != 0 ? 1 : 0; return new InjectionValue(state.MoveOpenDoor);參數: value (Any)
結果: dynamic / Any.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
內部實作程式碼,不能作為獨立腳本執行。
case "moveopendoor": if (arguments.Length > 0) state.MoveOpenDoor = Arg(0) != 0 ? 1 : 0; return new InjectionValue(state.MoveOpenDoor);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.moveThroughCorner();
dynamic UO.moveThroughCorner(object? value);一側單元被阻擋時單元間對角線的解析度。
-
value— 可選的新值。 0禁止,非零變為1。如果兩邊的方塊都被阻擋,則塗抹moveBetweenTwoCorners。
int 是目前儲存的值。不帶參數僅讀取;帶參數傳回應用上述規則後的值。這是一種設置,而不是運動的結果。
- 此設定儲存在運行時狀態中,並在啟動時由相應命令使用;變更不會自動覆蓋已建置的路徑。
- 傳回原始值顯示為正常完成。崩潰後,不會執行以下恢復行。
- 在常規用戶端主機中,此狀態資料取自GetPersistentState管理器,並且對於同一世界/設定檔的腳本/聊天/巨集是通用的,且不屬於一個腳本。另一個進程或明顯獨立的InjectionRuntimeState具有不同的狀態。載入/清除設定檔可以取代它;已儲存的serial仍然會根據載入的世界進行檢查。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
object? result = UO.moveThroughCorner();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));參數與執行流程:
- 沒有爭論,狀態就不會改變。
- value 是該設定的數值。
var value = UO.moveThroughCorner();
UO.Print(Convert.ToString(value));參數與執行流程:
- 值=0。 0禁止,非零變為1。如果兩邊的方塊都被阻擋,則塗抹moveBetweenTwoCorners。
- 應用程式顯示的是節省的價值,而不是目標的成功實現。
return RunScenario();
object? RunScenario()
{
var applied = UO.moveThroughCorner(0);
UO.Print("Applied: " + Convert.ToString(applied));
return null;
}參數與執行流程:
- 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。
參數: 沒有參數。
結果: dynamic / Any.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
內部實作程式碼,不能作為獨立腳本執行。
case "movethroughcorner": if (arguments.Length > 0) state.MoveThroughCorner = Arg(0) != 0 ? 1 : 0; return new InjectionValue(state.MoveThroughCorner);參數: value (Any)
結果: dynamic / Any.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
內部實作程式碼,不能作為獨立腳本執行。
case "movethroughcorner": if (arguments.Length > 0) state.MoveThroughCorner = Arg(0) != 0 ? 1 : 0; return new InjectionValue(state.MoveThroughCorner);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.moveThroughNPC();
dynamic UO.moveThroughNPC(object? value);允許嘗試穿過字元。
- 數值體力門檻:目前 Stamina >= 門檻時才允許嘗試穿過角色。預設 1000;0 允許在任何體力下嘗試。伺服器仍可拒絕移動。
int 是目前儲存的值。不帶參數僅讀取;帶參數傳回應用上述規則後的值。這是一種設置,而不是運動的結果。
- 此設定儲存在運行時狀態中,並在啟動時由相應命令使用;變更不會自動覆蓋已建置的路徑。
- 傳回原始值顯示為正常完成。崩潰後,不會執行以下恢復行。
- 數值體力門檻:目前 Stamina >= 門檻時才允許嘗試穿過角色。預設 1000;0 允許在任何體力下嘗試。伺服器仍可拒絕移動。
- 在常規用戶端主機中,此狀態資料取自GetPersistentState管理器,並且對於同一世界/設定檔的腳本/聊天/巨集是通用的,且不屬於一個腳本。另一個進程或明顯獨立的InjectionRuntimeState具有不同的狀態。載入/清除設定檔可以取代它;已儲存的serial仍然會根據載入的世界進行檢查。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
object? result = UO.moveThroughNPC();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));參數與執行流程:
- 沒有爭論,狀態就不會改變。
- value 是該設定的數值。
var value = UO.moveThroughNPC();
UO.Print(Convert.ToString(value));參數與執行流程:
- 值=0。整數>=0,負數變成0;積極允許嘗試。顯式 avoidMobiles 指定單一呼叫的反向約束。
- 應用程式顯示的是節省的價值,而不是目標的成功實現。
return RunScenario();
object? RunScenario()
{
var applied = UO.moveThroughNPC(0);
UO.Print("Applied: " + Convert.ToString(applied));
return null;
}參數與執行流程:
- 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。
參數: 沒有參數。
結果: dynamic / Any.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
內部實作程式碼,不能作為獨立腳本執行。
case "movethroughnpc": if (arguments.Length > 0) state.MoveThroughNpc = Math.Max(0, Arg(0)); return new InjectionValue(state.MoveThroughNpc);參數: value (Any)
結果: dynamic / Any.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
內部實作程式碼,不能作為獨立腳本執行。
case "movethroughnpc": if (arguments.Length > 0) state.MoveThroughNpc = Math.Max(0, Arg(0)); return new InjectionValue(state.MoveThroughNpc);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.moveTurnCost();
dynamic UO.moveTurnCost(object? value);尋找路徑時改變方向的額外成本。
-
value— 可選的新值。整數>=0,負數變成0。這是路線的權重,而不是毫秒:直步花費 10,對角線花費 14,這是每轉的附加價值。
int 是目前儲存的值。不帶參數僅讀取;帶參數傳回應用上述規則後的值。這是一種設置,而不是運動的結果。
- 此設定儲存在運行時狀態中,並在啟動時由相應命令使用;變更不會自動覆蓋已建置的路徑。
- 傳回原始值顯示為正常完成。崩潰後,不會執行以下恢復行。
- 在常規用戶端主機中,此狀態資料取自GetPersistentState管理器,並且對於同一世界/設定檔的腳本/聊天/巨集是通用的,且不屬於一個腳本。另一個進程或明顯獨立的InjectionRuntimeState具有不同的狀態。載入/清除設定檔可以取代它;已儲存的serial仍然會根據載入的世界進行檢查。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
object? result = UO.moveTurnCost();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));參數與執行流程:
- 沒有爭論,狀態就不會改變。
- value 是該設定的數值。
var value = UO.moveTurnCost();
UO.Print(Convert.ToString(value));參數與執行流程:
- 值=14。整數>=0,負數變成0。這是路線的權重,而不是毫秒:直步花費 10,對角線花費 14,這是每轉的附加價值。
- 應用程式顯示的是節省的價值,而不是目標的成功實現。
return RunScenario();
object? RunScenario()
{
var applied = UO.moveTurnCost(14);
UO.Print("Applied: " + Convert.ToString(applied));
return null;
}參數與執行流程:
- 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。
參數: 沒有參數。
結果: dynamic / Any.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
內部實作程式碼,不能作為獨立腳本執行。
case "moveturncost": if (arguments.Length > 0) state.MoveTurnCost = Math.Max(0, Arg(0)); return new InjectionValue(state.MoveTurnCost);參數: value (Any)
結果: dynamic / Any.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
內部實作程式碼,不能作為獨立腳本執行。
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。