ZH TW UO Topic quests virtues - LIHACHTETAN/ClassicUO-Bad-Newbie-CSharp-Scripts-IDE GitHub Wiki
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
家 · C# · IDE · UO API · A–Z · 範例 · Languages
一般客戶對任務和美德的要求。伺服器任務 Age of Power 在 Wiki 的單獨部分中進行了描述。
| 主題 | 命令與解釋 |
|---|---|
| QuestRequest | UO.QuestRequest |
| Quest Arrow | UO.GetQuestArrow |
| Virtues Gump | UO.ReqVirtuesGump |
| UseVirtue | UO.UseVirtue |
UO.QuestRequest · UO.GetQuestArrow · UO.ReqVirtuesGump · UO.UseVirtue
每個命令卡都有幾個獨立的場景:直接程式碼、函數和類別。以下是精選的簡短場景;限制和全面分析是有可能的。
var arrow = UO.GetQuestArrow();
if (Truth(Truth(arrow[0]) == true))
{
UO.Print(Convert.ToString(arrow[1]) + ", " + Convert.ToString(arrow[2]));
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;UO.Print(UO.UseVirtue("Honor"));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.GetQuestArrow();
dynamic UO.GetQuestArrow(object? point);讀取伺服器任務箭頭的位置。允許腳本知道從伺服器接收的箭頭指向哪裡;它不讀取命令Track。
-
point- 已棄用的可選佔位符。為了相容,保留了UO.GetQuestArrow(point)形式;該參數未被讀取或修改。使用 UO.GetQuestArrow() 及其返回數組。
数组[exists, x, y],正好三个整数。 [0] - 1 (true),如果有伺服器箭頭,否則0 (false); [1] - X,[2] - Y。没有箭头 [0,0,0]。只有[0]欄位是邏輯屬性;整個陣列不是 bool。如果有多個箭頭,則讀取第一個已儲存的箭頭,ID無選擇。
- 伺服器和本地箭頭是分開儲存的。 Track(0) 不會移除伺服器箭頭。如果沒有圖形,標記將被儲存並在視窗開啟時出現。關閉遊戲視窗不會刪除標記;斷開連接會清除它們。伺服器可以移動或移除其箭頭。座標並不能證明目標是可以實現的。
- 目前地圖上的單元座標,而不是視窗像素。不接受 Z 和卡號。選擇地圖上的現有點;該團隊不會檢查地形、繪製路線或追蹤移動目標。
- 已棄用的可選佔位符。為了相容,保留了UO.GetQuestArrow(point)形式;該參數未被讀取或修改。使用 UO.GetQuestArrow() 及其返回數組。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
object? result = UO.GetQuestArrow();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));參數與執行流程:
- 首先,檢查[0];那麼[1]/[2]可以讀作X/Y。不要將整個數組當作 serial 或 bool 傳遞。
var arrow = UO.GetQuestArrow();
if (Truth(Truth(arrow[0]) == true))
{
UO.Print(Convert.ToString(arrow[1]) + ", " + Convert.ToString(arrow[2]));
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;參數與執行流程:
- 將伺服器箭頭的座標複製到本地標記Track。這不是一場運動。如果伺服器稍後移動箭頭,則本機箭頭將保持在同一點。
return RunScenario();
object? RunScenario()
{
var arrow = UO.GetQuestArrow();
if (Truth(arrow[0] == 1))
{
UO.Track(1, arrow[1], arrow[2]);
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;參數與執行流程:
- ArrowDistance 回傳UO.GetDistance(x,y) 到伺服器點的距離,如果沒有箭頭,則回傳 −1。在最多兩個單元格的距離處,僅移除本地Track,伺服器箭頭保留。
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 distance = ArrowDistance();
if (Truth(distance >= 0) && Truth(distance <= 2))
{
UO.Track(0);
}
return null;
}
dynamic ArrowDistance()
{
var arrow = UO.GetQuestArrow();
if (Truth(arrow[0] == 0))
{
return -1;
}
return UO.GetDistance(arrow[1], arrow[2]);
}
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。
參數: 沒有參數。
結果: dynamic / Array.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetQuestArrow:bridge.GetQuestArrow().
內部實作程式碼,不能作為獨立腳本執行。
case "getquestarrow":
return new InjectionValue(bridge.GetQuestArrow().Select(value => new InjectionValue(value)).ToArray());參數: point (Any)
結果: dynamic / Array.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetQuestArrow:bridge.GetQuestArrow().
內部實作程式碼,不能作為獨立腳本執行。
case "getquestarrow":
return new InjectionValue(bridge.GetQuestArrow().Select(value => new InjectionValue(value)).ToArray());Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.QuestRequest();請求伺服器任務選單。
沒有參數。
void - 沒有值。使用單獨的線路撥打電話;完成並不確認伺服器的操作。
- QuestRequest 將 GameActions.RequestQuestMenu(_world) 傳遞到遊戲串流。團隊不讀取或建立任務。
- 在範例中,UO.Wait僅指定腳本暫停;暫停的結束並不能證明伺服器已經完成了請求。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
指令是獨立的陳述式。前面的訊息表示呼叫開始,並非伺服器已完成動作的確認。
UO.Print("Calling UO.QuestRequest");
UO.QuestRequest();參數與執行流程:
- 請求伺服器任務選單。
UO.QuestRequest();參數與執行流程:
- QuestRequest 將 GameActions.RequestQuestMenu(_world) 傳遞到遊戲串流。團隊不讀取或建立任務。
return RunScenario();
object? RunScenario()
{
if (Truth(UO.IsOnline()))
{
UO.QuestRequest();
}
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.QuestRequest();
UO.Wait(500);
UO.Print(UO.GetGumpsCount());
return null;
}
}C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。
參數: 沒有參數。
結果: void / Unit.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.QuestRequest:bridge.QuestRequest().
內部實作程式碼,不能作為獨立腳本執行。
case "questrequest": bridge.QuestRequest(); return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.ReqVirtuesGump();請求角色的美德視窗。
沒有參數。
void - 沒有值。使用單獨的線路撥打電話;完成並不確認伺服器的操作。
- RequestVirtuesGump,若有玩家,則用gumpID=0x1CD,按鈕=1和serial字元呼叫ReplyGump。沒有玩家就沒有請求。
- 在範例中,UO.Wait僅指定腳本暫停;暫停的結束並不能證明伺服器已經完成了請求。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
指令是獨立的陳述式。前面的訊息表示呼叫開始,並非伺服器已完成動作的確認。
UO.Print("Calling UO.ReqVirtuesGump");
UO.ReqVirtuesGump();參數與執行流程:
- 請求角色的美德視窗。
UO.ReqVirtuesGump();參數與執行流程:
- RequestVirtuesGump,若有玩家,則用gumpID=0x1CD,按鈕=1和serial字元呼叫ReplyGump。沒有玩家就沒有請求。
return RunScenario();
object? RunScenario()
{
if (Truth(UO.Self() != 0))
{
UO.ReqVirtuesGump();
}
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.ReqVirtuesGump();
UO.Wait(500);
UO.Print(UO.GetGumpsCount());
return null;
}
}C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。
參數: 沒有參數。
結果: void / Unit.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.RequestVirtuesGump:bridge.RequestVirtuesGump().
內部實作程式碼,不能作為獨立腳本執行。
case "reqvirtuesgump": bridge.RequestVirtuesGump(); return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.UseVirtue(object? virtueName);要求運用美德。
-
virtueName— 名稱榮譽/犧牲/勇敢/同情/誠實/謙遜/正義/靈性,不區分大小寫,刪除外部空格,或double-文本ID1..8。
數位標誌 int: 1 - 透過 Send_InvokeVirtueRequest 發送的有效 ID 1..8; 0 - 未知名稱/無效 ⟦1⟧;ID⧟。這不是對伺服器效果的確認。
- 名字匹配 ID: Honor=1, Sacrifice=2, Valor=3, Compassion=4, Honesty=5, Humility=6, Justice=7, Spirituality=8。此函數的數字解析使用 int.TryParse,不是 0x 轉換。
- 團隊本身不設定後續目標或檢查美德點/可用性;這是由伺服器決定的。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
object? result = UO.UseVirtue("Honor");
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));參數與執行流程:
- 要求運用美德。
UO.Print(UO.UseVirtue("Honor"));參數與執行流程:
- 名字匹配 ID: Honor=1, Sacrifice=2, Valor=3, Compassion=4, Honesty=5, Humility=6, Justice=7, Spirituality=8。此函數的數字解析使用 int.TryParse,不是 0x 轉換。
return RunScenario();
object? RunScenario()
{
UO.Print(UO.UseVirtue("1"));
return null;
}參數與執行流程:
- 團隊本身不設定後續目標或檢查美德點/可用性;這是由伺服器決定的。
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 accepted = UO.UseVirtue("Honor");
if (Truth(accepted))
{
UO.Print("Virtue request sent");
}
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。
參數: virtueName (Any)
結果: dynamic / Any.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.UseVirtue:bridge.UseVirtue(Text(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(0).
內部實作程式碼,不能作為獨立腳本執行。
case "usevirtue": return new InjectionValue(bridge.UseVirtue(Text(0)));