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

關於該主題的範例

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

UO.GetQuestArrow

參數、結果及所有場景

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.UseVirtue

參數、結果及所有場景

UO.Print(UO.UseVirtue("Honor"));

完整指令說明


UO.GetQuestArrow

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

C# 簽章

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() 及其返回數組。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。直接應用-直接腳本

參數與執行流程:

  • 首先,檢查[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;

2。遊戲條件-場景功能

參數與執行流程:

  • 將伺服器箭頭的座標複製到本地標記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;

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

參數與執行流程:

  • 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。

UO.GetQuestArrow() — UO.GetQuestArrow()

參數: 沒有參數。

結果: dynamic / Array.

呼叫時:

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

case "getquestarrow":

                    return new InjectionValue(bridge.GetQuestArrow().Select(value => new InjectionValue(value)).ToArray());

UO.GetQuestArrow(point) — UO.GetQuestArrow(Any)

參數: point (Any)

結果: dynamic / Array.

呼叫時:

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

case "getquestarrow":

                    return new InjectionValue(bridge.GetQuestArrow().Select(value => new InjectionValue(value)).ToArray());

UO.QuestRequest

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

C# 簽章

void UO.QuestRequest();

請求伺服器任務選單。

參數

沒有參數。

傳回值

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

行為

  • QuestRequest 將 GameActions.RequestQuestMenu(_world) 傳遞到遊戲串流。團隊不讀取或建立任務。
  • 在範例中,UO.Wait僅指定腳本暫停;暫停的結束並不能證明伺服器已經完成了請求。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。直接呼叫-直接腳本

參數與執行流程:

  • 請求伺服器任務選單。
UO.QuestRequest();

2。明確選項 - 腳本函數

參數與執行流程:

  • 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;

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.QuestRequest();
        UO.Wait(500);
        UO.Print(UO.GetGumpsCount());
        return null;
    }
}

命令實作

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

UO.QuestRequest() — UO.QuestRequest()

參數: 沒有參數。

結果: void / Unit.

呼叫時:

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

case "questrequest": bridge.QuestRequest(); return InjectionValue.Unit;

UO.ReqVirtuesGump

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

C# 簽章

void UO.ReqVirtuesGump();

請求角色的美德視窗。

參數

沒有參數。

傳回值

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

行為

  • RequestVirtuesGump,若有玩家,則用gumpID=0x1CD,按鈕=1和serial字元呼叫ReplyGump。沒有玩家就沒有請求。
  • 在範例中,UO.Wait僅指定腳本暫停;暫停的結束並不能證明伺服器已經完成了請求。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。直接呼叫-直接腳本

參數與執行流程:

  • 請求角色的美德視窗。
UO.ReqVirtuesGump();

2。明確選項 - 腳本函數

參數與執行流程:

  • 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;

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.ReqVirtuesGump();
        UO.Wait(500);
        UO.Print(UO.GetGumpsCount());
        return null;
    }
}

命令實作

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

UO.ReqVirtuesGump() — UO.ReqVirtuesGump()

參數: 沒有參數。

結果: void / Unit.

呼叫時:

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

case "reqvirtuesgump": bridge.RequestVirtuesGump(); return InjectionValue.Unit;

UO.UseVirtue

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

C# 簽章

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 轉換。
  • 團隊本身不設定後續目標或檢查美德點/可用性;這是由伺服器決定的。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。直接呼叫-直接腳本

參數與執行流程:

  • 要求運用美德。
UO.Print(UO.UseVirtue("Honor"));

2。明確選項 - 腳本函數

參數與執行流程:

  • 名字匹配 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;
}

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

參數與執行流程:

  • 團隊本身不設定後續目標或檢查美德點/可用性;這是由伺服器決定的。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var 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。

UO.UseVirtue(virtueName) — UO.UseVirtue(Any)

參數: virtueName (Any)

結果: dynamic / Any.

呼叫時:

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

case "usevirtue": return new InjectionValue(bridge.UseVirtue(Text(0)));
⚠️ **GitHub.com Fallback** ⚠️