ZH TW UO Topic journal - LIHACHTETAN/ClassicUO-Bad-Newbie-CSharp-Scripts-IDE GitHub Wiki
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
家 · C# · IDE · UO API · A–Z · 範例 · Languages
搜尋並等待訊息、線路索引、時間、顏色和serial作者。將舊日誌行與操作後預期的訊息分開。
| 主題 | 命令與解釋 |
|---|---|
| Journal | UO.Journal |
| InJournal | UO.InJournal |
| InJournalBetweenTimes | UO.InJournalBetweenTimes |
| WaitJournalLine | UO.WaitJournalLine |
| System Journal | UO.AddToSystemJournal · UO.AddToSystemJournalEx · UO.ClearSystemJournal · UO.WaitJournalLineSystem |
| Journal Ignore | UO.AddJournalIgnore · UO.ClearJournalIgnore |
| Journal Color | UO.JournalColor · UO.GetJournalColor |
| Journal Serial | UO.JournalSerial · UO.GetJournalSerial |
| Journal Timer | UO.JournalTimer |
| Found Text | UO.GetFoundedText · UO.GetFoundedTextColor · UO.GetFoundedTextID · UO.GetFoundedTextIndex · UO.GetFoundedTextSerial · UO.GetFoundedTextTimer |
UO.Journal · UO.GetJournal · UO.InJournal · UO.InJournalBetweenTimes · UO.LowJournal · UO.HighJournal · UO.ClearJournal · UO.DeleteJournal · UO.ChangeJournalLength · UO.SetJournalLine · UO.AddToJournal · UO.LastJournalMessage · UO.LastMessage
UO.WaitJournalLine · UO.WaitJournalLineSystem · UO.WaitingForJournalText
UO.AddToSystemJournal · UO.AddToSystemJournalEx · UO.ClearSystemJournal
UO.AddJournalIgnore · UO.ClearJournalIgnore
UO.JournalColor · UO.GetJournalColor · UO.JournalSerial · UO.GetJournalSerial · UO.JournalTimer · UO.LineCount · UO.LineID · UO.LineIndex · UO.LineMsgType · UO.LineName · UO.LineTextColor · UO.LineTextFont · UO.LineTime · UO.LineType
UO.FoundedParamId · UO.GetFoundedText · UO.GetFoundedTextColor · UO.GetFoundedTextID · UO.GetFoundedTextIndex · UO.GetFoundedTextSerial · UO.GetFoundedTextTimer
每個命令卡都有幾個獨立的場景:直接程式碼、函數和類別。以下是精選的簡短場景;限制和全面分析是有可能的。
var found = UO.InJournal("You see");
if (Truth(found > 0))
{
var text = UO.GetFoundedText();
UO.Print(text);
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;var started = Now();
var found = UO.WaitJournalLine(started, "success|failed", 3000);
if (Truth(found))
{
UO.Print(UO.GetFoundedText());
}
else
{
UO.Print("Timeout");
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.AddJournalIgnore(object? str);為 ClassicUO 遊戲日誌條目新增本機文字篩選器。
-
str- 要在日記條目文字中搜尋的非空白文字片段。
void。該命令不傳回匹配數。
- 文字的邊緣被切斷;不添加空行。檢查記錄時,以不區分大小寫的方式搜尋子字串。匹配的條目本地隱藏在客戶端日誌中;伺服器未收到過濾器。
UO.ClearJournalIgnore()清除所有新增的文字過濾器。已顯示的項目在清除後不會恢復。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
指令是獨立的陳述式。前面的訊息表示呼叫開始,並非伺服器已完成動作的確認。
UO.Print("Calling UO.AddJournalIgnore");
UO.AddJournalIgnore("You see");參數與執行流程:
- 隱藏包含此短語的新貼文。
UO.AddJournalIgnore("You see");參數與執行流程:
- 過濾器搜尋不區分大小寫的子字串。
return RunScenario();
object? RunScenario()
{
var phrase = "vendor";
UO.AddJournalIgnore(phrase);
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()
{
UO.AddJournalIgnore("You see");
UO.AddJournalIgnore("vendor");
return null;
}
}C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。
參數: str (Any)
結果: void / Unit.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.AddJournalIgnore:bridge.AddJournalIgnore(Text(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(0).
內部實作程式碼,不能作為獨立腳本執行。
case "addjournalignore": bridge.AddJournalIgnore(Text(0)); return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.AddToJournal(object? text);顯示有關腳本進度或停止條件的本機訊息。你可以看到它,而不是其他玩家。
對返回類型為void的方法的呼叫被編寫為獨立語句C#;無法分配或檢查結果。完成聲明並不構成遊戲伺服器的確認。
- 該訊息將發送到遊戲視窗的左下區域和本地日誌。輸出 IDE 中提供了副本。在管理員的常規日誌中,啟用腳本訊息過濾器:該條目在沒有遊戲視窗的情況下可用。伺服器系統訊息過濾器不會選擇此類記錄。網路語音包不傳送。頭部上方的銘文是UO.CharPrint。
-
UO.Print在遊戲訊息日誌中新增一個條目:先讀取或儲存所需的搜尋字串/結果,然後記錄診斷訊息。在快速循環中,在發生變更時而不是每次迭代時記錄訊息。 - 使用此腳本運行時的系統訊息的顏色:最初 0x0440, 變化 UO.ConColor。這是本地條目;命令名稱並不意味著發送到伺服器。
- UO.Print · UO.CharPrint · UO.Say · UO.ConColor
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
指令是獨立的陳述式。前面的訊息表示呼叫開始,並非伺服器已完成動作的確認。
UO.Print("Calling UO.AddToJournal");
UO.AddToJournal("Script started");參數與執行流程:
- processed=12 — 已處理項目的演示數量。 Convert.ToString 將其轉換為字串。這個例子只報告了一個數字;它不傳送物件本身。
var processed = 12;
UO.AddToJournal("Processed item entries: " + Convert.ToString(processed));參數與執行流程:
- 讀取角色的體重和最大值。零/未知的最大值不被視為過載。如果重量 >= 最大值,則列印一行並 Main 結束;物品不會被丟棄。
return RunScenario();
object? RunScenario()
{
var weight = UO.Weight();
var maximum = UO.MaxWeight();
if (Truth(maximum > 0) && Truth(weight >= maximum))
{
UO.AddToJournal("Too heavy: " + Convert.ToString(weight) + "/" + Convert.ToString(maximum));
return null;
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;參數與執行流程:
- Main 記住重量,等待 1000 毫秒,並呼叫完全宣告的 ReportWeight。助手僅在重量變化時進行列印,並返回新的重量以供下一次檢查。它本身不會創建無限循環。
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.Weight();
UO.Wait(1000);
previous = ReportWeight(previous, UO.Weight());
return null;
}
dynamic ReportWeight(dynamic previous, dynamic current)
{
if (Truth(previous != current))
{
UO.AddToJournal("Weight changed: " + Convert.ToString(current));
}
return current;
}
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。
參數: text (Any)
結果: void / Unit.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.SystemMessage:SystemMessage(Text(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(0).
內部實作程式碼,不能作為獨立腳本執行。
case "addtojournal":
case "addtosystemjournal":
case "clientprint":
SystemMessage(Text(0)); return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.AddToSystemJournal(object? text);顯示有關腳本進度或停止條件的本機訊息。你可以看到它,而不是其他玩家。
對返回類型為void的方法的呼叫被編寫為獨立語句C#;無法分配或檢查結果。完成聲明並不構成遊戲伺服器的確認。
- 該訊息將發送到遊戲視窗的左下區域和本地日誌。輸出 IDE 中提供了副本。在管理員的常規日誌中,啟用腳本訊息過濾器:該條目在沒有遊戲視窗的情況下可用。伺服器系統訊息過濾器不會選擇此類記錄。網路語音包不傳送。頭部上方的銘文是UO.CharPrint。
-
UO.Print在遊戲訊息日誌中新增一個條目:先讀取或儲存所需的搜尋字串/結果,然後記錄診斷訊息。在快速循環中,在發生變更時而不是每次迭代時記錄訊息。 - 使用此腳本運行時的系統訊息的顏色:最初 0x0440, 變化 UO.ConColor。這是本地條目;命令名稱並不意味著發送到伺服器。
- UO.Print · UO.CharPrint · UO.Say · UO.ConColor
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
指令是獨立的陳述式。前面的訊息表示呼叫開始,並非伺服器已完成動作的確認。
UO.Print("Calling UO.AddToSystemJournal");
UO.AddToSystemJournal("Script started");參數與執行流程:
- processed=12 — 已處理項目的演示數量。 Convert.ToString 將其轉換為字串。這個例子只報告了一個數字;它不傳送物件本身。
var processed = 12;
UO.AddToSystemJournal("Processed item entries: " + Convert.ToString(processed));參數與執行流程:
- 讀取角色的體重和最大值。零/未知的最大值不被視為過載。如果重量 >= 最大值,則列印一行並 Main 結束;物品不會被丟棄。
return RunScenario();
object? RunScenario()
{
var weight = UO.Weight();
var maximum = UO.MaxWeight();
if (Truth(maximum > 0) && Truth(weight >= maximum))
{
UO.AddToSystemJournal("Too heavy: " + Convert.ToString(weight) + "/" + Convert.ToString(maximum));
return null;
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;參數與執行流程:
- Main 記住重量,等待 1000 毫秒,並呼叫完全宣告的 ReportWeight。助手僅在重量變化時進行列印,並返回新的重量以供下一次檢查。它本身不會創建無限循環。
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.Weight();
UO.Wait(1000);
previous = ReportWeight(previous, UO.Weight());
return null;
}
dynamic ReportWeight(dynamic previous, dynamic current)
{
if (Truth(previous != current))
{
UO.AddToSystemJournal("Weight changed: " + Convert.ToString(current));
}
return current;
}
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。
參數: text (Any)
結果: void / Unit.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.SystemMessage:SystemMessage(Text(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(0).
內部實作程式碼,不能作為獨立腳本執行。
case "addtojournal":
case "addtosystemjournal":
case "clientprint":
SystemMessage(Text(0)); return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.AddToSystemJournalEx(object? text, object? textColor, object? bgColor, object? fontSize, object? fontName);將本機行輸出到遊戲視窗並記錄指定設計的近似顯示。對於可區分的腳本診斷訊息很有用。
-
textColor— 0xRRGGBB 格式的文字顏色,而非 UO hue。不使用 Alpha 通道。範例 0xFF8800 - 橘色;引擎從UO調色盤中選擇最接近的顏色。 -
bgColor- 負數 - 預設背景;非負 - RGB 0xRRGGBB。請求的背景被寫入IDE的輸出,但線後面的單獨彩色矩形不會在遊戲視窗中繪製。 -
fontSize— 請求的大小(以點為單位):值 <= 0 替換為 10,然後套用範圍 4..72。遊戲字體數量以整數計算:(size + 1) / 3;遊戲視窗中沒有確切的桌面尺寸。 -
fontName— 用於寫入設計資訊以輸出 IDE 的字體名稱。邊緣周圍的空白被刪除;空值表示 Consolas。此命令不會將任意 Windows 字型載入到遊戲視窗中。
對返回類型為void的方法的呼叫被編寫為獨立語句C#;無法分配或檢查結果。完成聲明並不構成遊戲伺服器的確認。
- 所有五個參數都是必需的:Text、TextColor、BGColor、FontSize、FontName。文字在本地可見;在IDE中,額外保存了請求的設計。背景顏色和字體名稱是設計提示,不能保證準確重現。 ConColor 不會改變顯式傳遞的RGB。
- 該訊息將發送到遊戲視窗的左下區域和本地日誌。輸出 IDE 中提供了副本。在管理員的常規日誌中,啟用腳本訊息過濾器:該條目在沒有遊戲視窗的情況下可用。伺服器系統訊息過濾器不會選擇此類記錄。網路語音包不傳送。頭部上方的銘文是UO.CharPrint。
- UO.Print · UO.CharPrint · UO.ClientPrintEx · UO.AddToSystemJournalEx
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
指令是獨立的陳述式。前面的訊息表示呼叫開始,並非伺服器已完成動作的確認。
UO.Print("Calling UO.AddToSystemJournalEx");
UO.AddToSystemJournalEx("Route started", 0xFF8800, -1, 12, "Consolas");參數與執行流程:
- 橘色訊息,預設背景 - 1,大小12:這使得遊戲字體4。 Consolas 儲存在IDE資訊中。由於遊戲調色板的原因,顏色可能與確切的RGB有所不同。
UO.AddToSystemJournalEx("Route started", 0xFF8800, -1, 12, "Consolas");參數與執行流程:
- 0x112233 的正 BGColor 值將後台請求儲存在IDE 中。使用FontSize=0 10時,空的FontName就變成Consolas。在遊戲視窗中,背景不會根據此參數被繪製。
return RunScenario();
object? RunScenario()
{
UO.AddToSystemJournalEx("Formatting details", 0x33AAFF, 0x112233, 0, "");
return null;
}參數與執行流程:
- ReportCount是一個完全聲明的過程。它僅報告數量的變化,選擇綠色RGB表示增加,選擇紅色表示減少。傳回新數量以供下次比較;結果屬於ReportCount,而不是AddToSystemJournalEx。
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 = 10;
previous = ReportCount(previous, 12);
return null;
}
dynamic ReportCount(dynamic previous, dynamic current)
{
if (Truth(previous != current))
{
var textColor = 0xCC3333;
if (Truth(current > previous))
{
textColor = 0x33AA66;
}
UO.AddToSystemJournalEx("Count: " + Convert.ToString(current), textColor, -1, 10, "Consolas");
}
return current;
}
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.AddToSystemJournalEx(text, textColor, bgColor, fontSize, fontName) — UO.AddToSystemJournalEx(Any,Any,Any,Any,Any)
參數: text (Any), textColor (Any), bgColor (Any), fontSize (Any), fontName (Any)
結果: void / Unit.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.PrintFormattedJournal:bridge.PrintFormattedJournal(Text(0), Arg(1), Arg(2), Arg(3), Text(4)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(0). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(1).
內部實作程式碼,不能作為獨立腳本執行。
case "addtosystemjournalex":
bridge.PrintFormattedJournal(Text(0), Arg(1), Arg(2), Arg(3), Text(4)); return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.ChangeJournalLength(object? newLength);變更保留的客戶端日誌歷史記錄限制。
-
newLength— 要轉換為 int 的記錄數。運轉時間限制低於1; JournalManager 受上述常數限制。 MAX_JOURNAL_HISTORY_COUNT。
void - 無回傳值。
- 保存狀態。 JournalLength,然後呼叫SetJournalLength。 JournalManager 通过将最旧的条目删除到新的限制来减少现有历史记录。過濾條目和日誌顯示是獨立的機制。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
指令是獨立的陳述式。前面的訊息表示呼叫開始,並非伺服器已完成動作的確認。
UO.Print("Calling UO.ChangeJournalLength");
UO.ChangeJournalLength(100);參數與執行流程:
- 新的限制限制了保存的記錄數量。
UO.ChangeJournalLength(100);參數與執行流程:
- 當限制減少時,舊條目將被刪除。
return RunScenario();
object? RunScenario()
{
UO.ChangeJournalLength(1);
return null;
}參數與執行流程:
- 零被歸一化為1,而不是清除日誌。
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.ChangeJournalLength(0);
return null;
}
}C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。
參數: newLength (Any)
結果: void / Unit.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Arg:Arg(0, 100). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetJournalLength:bridge.SetJournalLength(state.JournalLength).
內部實作程式碼,不能作為獨立腳本執行。
case "changejournallength": state.JournalLength = Math.Max(1, Arg(0, 100)); bridge.SetJournalLength(state.JournalLength); break;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.ClearJournal();從共用本機日誌中刪除行。
沒有參數。
void - 無回傳值。不傳回刪除的行數。重置點擊計數器和當前腳本選擇。
- 共用緩衝區可供所有腳本使用:已刪除的行不再存在。先前由其他腳本保存的快照可能會保留,但它們的索引將變為-1。
- 如果沒有文字過濾器,整個 Classic UO 緩衝區都會被清除,包括 System.本地日誌檔案和伺服器訊息不會被刪除。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
指令是獨立的陳述式。前面的訊息表示呼叫開始,並非伺服器已完成動作的確認。
UO.Print("Calling UO.ClearJournal");
UO.ClearJournal();參數與執行流程:
- 沒有爭論。共享緩衝區的所有行都被刪除。
- 最後的搜尋計數器變成0; Print 清除後可以新增一行。
UO.ClearJournal();
var count = UO.LineCount();
UO.Print("Search matches after clear: " + Convert.ToString(count));參數與執行流程:
- 清除發生在保存時間戳之前。 1000 - 以毫秒為單位的有限等待。
- 時間戳通常足以排除舊訊息;清理也會影響其他腳本。
return RunScenario();
object? RunScenario()
{
UO.ClearJournal();
var started = Now();
var found = UO.WaitJournalLine(started, "notice", 1000);
UO.Print(Convert.ToString(found));
return null;
}參數與執行流程:
- 透過目前腳本清理後index=-1,即使只刪除了部分緩衝區。
- 文字變數儲存了先前讀取的副本,而GetFoundedText已經被清除。
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 text = UO.Journal(0);
UO.ClearJournal();
var index = UO.LineIndex();
UO.Print(Convert.ToString(index));
return null;
}
}C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。
參數: 沒有參數。
結果: void / Unit.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.DeleteJournal:DeleteJournal().
內部實作程式碼,不能作為獨立腳本執行。
case "clearjournal": DeleteJournal(); return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.ClearJournalIgnore();刪除所有文字過濾器JournalManager。
沒有參數。
void - 無回傳值。
- 刪除過濾器不會刪除歷史記錄或取消AddChatUserIgnore名稱過濾器。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
指令是獨立的陳述式。前面的訊息表示呼叫開始,並非伺服器已完成動作的確認。
UO.Print("Calling UO.ClearJournalIgnore");
UO.ClearJournalIgnore();參數與執行流程:
- 刪除所有文字過濾器JournalManager。
UO.ClearJournalIgnore();參數與執行流程:
- 允許再次顯示“您看到”文字。
return RunScenario();
object? RunScenario()
{
UO.AddJournalIgnore("You see");
UO.ClearJournalIgnore();
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()
{
UO.ClearJournalIgnore();
UO.ClearJournalIgnore();
return null;
}
}C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。
參數: 沒有參數。
結果: void / Unit.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.ClearJournalIgnore:bridge.ClearJournalIgnore().
內部實作程式碼,不能作為獨立腳本執行。
case "clearjournalignore": bridge.ClearJournalIgnore(); return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.ClearSystemJournal();刪除帶有作者姓名 System 的行。
沒有參數。
void - 無回傳值。不傳回刪除的行數。重置點擊計數器和當前腳本選擇。
- 共用緩衝區可供所有腳本使用:已刪除的行不再存在。先前由其他腳本保存的快照可能會保留,但它們的索引將變為-1。
- 系統以作者姓名識別,不區分大小寫;這是通用日誌過濾器ClassicUO。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
指令是獨立的陳述式。前面的訊息表示呼叫開始,並非伺服器已完成動作的確認。
UO.Print("Calling UO.ClearSystemJournal");
UO.ClearSystemJournal();參數與執行流程:
- 沒有爭論。僅刪除系統行。
- 最後的搜尋計數器變成0; Print 清除後可以新增一行。
UO.ClearSystemJournal();
var count = UO.LineCount();
UO.Print("Search matches after clear: " + Convert.ToString(count));參數與執行流程:
- 清除發生在保存時間戳之前。 1000 - 以毫秒為單位的有限等待。
- 時間戳通常足以排除舊訊息;清理也會影響其他腳本。
return RunScenario();
object? RunScenario()
{
UO.ClearSystemJournal();
var started = Now();
var found = UO.WaitJournalLine(started, "notice", 1000);
UO.Print(Convert.ToString(found));
return null;
}參數與執行流程:
- 透過目前腳本清理後index=-1,即使只刪除了部分緩衝區。
- 文字變數儲存了先前讀取的副本,而GetFoundedText已經被清除。
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 text = UO.Journal(0);
UO.ClearSystemJournal();
var index = UO.LineIndex();
UO.Print(Convert.ToString(index));
return null;
}
}C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。
參數: 沒有參數。
結果: void / Unit.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.DeleteSystemJournal:bridge.DeleteSystemJournal(). -
InjectionScript.Runtime.InjectionApiUO.SelectJournalEntry:SelectJournalEntry(null).
內部實作程式碼,不能作為獨立腳本執行。
case "clearsystemjournal": bridge.DeleteSystemJournal(); SelectJournalEntry(null); return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.DeleteJournal();
void UO.DeleteJournal(object? text);從共用本機日誌中刪除行。
-
text— 透過 | 搜尋到的子字串或多個替代項,例如 success|failed。每個替代項邊緣的空格將被刪除,空替代項將被跳過。這是純文本,而不是正規表示式。使用非空模板。僅對DeleteJournal可選:傳輸時,以不區分大小寫的方式刪除匹配的字串;如果沒有參數,整個緩衝區將被刪除。
void - 無回傳值。不傳回刪除的行數。重置點擊計數器和當前腳本選擇。
- 共用緩衝區可供所有腳本使用:已刪除的行不再存在。先前由其他腳本保存的快照可能會保留,但它們的索引將變為-1。
- 如果沒有文字過濾器,整個 Classic UO 緩衝區都會被清除,包括 System.本地日誌檔案和伺服器訊息不會被刪除。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
指令是獨立的陳述式。前面的訊息表示呼叫開始,並非伺服器已完成動作的確認。
UO.Print("Calling UO.DeleteJournal");
UO.DeleteJournal();參數與執行流程:
- 沒有爭論。共享緩衝區的所有行都被刪除。
- 最後的搜尋計數器變成0; Print 清除後可以新增一行。
UO.DeleteJournal();
var count = UO.LineCount();
UO.Print("Search matches after clear: " + Convert.ToString(count));參數與執行流程:
- 清除發生在保存時間戳之前。 1000 - 以毫秒為單位的有限等待。
- 時間戳通常足以排除舊訊息;清理也會影響其他腳本。
return RunScenario();
object? RunScenario()
{
UO.DeleteJournal();
var started = Now();
var found = UO.WaitJournalLine(started, "notice", 1000);
UO.Print(Convert.ToString(found));
return null;
}參數與執行流程:
- 透過目前腳本清理後index=-1,即使只刪除了部分緩衝區。
- 文字變數儲存了先前讀取的副本,而GetFoundedText已經被清除。
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 text = UO.Journal(0);
UO.DeleteJournal();
var index = UO.LineIndex();
UO.Print(Convert.ToString(index));
return null;
}
}參數與執行流程:
- 文字包含兩個子字串。其中任何行都會被刪除,而不考慮大小寫;其餘訊息仍然存在。
- 如果刪除後沒有新的符合訊息,found=0。此實作中的空模式會匹配所有字串。
UO.DeleteJournal("notice|warning");
var found = UO.InJournal("notice|warning", -1);
UO.Print(Convert.ToString(found));C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。
參數: 沒有參數。
結果: void / Unit.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.DeleteJournal. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.DeleteJournal:bridge.DeleteJournal(). -
InjectionScript.Runtime.InjectionApiUO.SelectJournalEntry:SelectJournalEntry(null).
內部實作程式碼,不能作為獨立腳本執行。
public void DeleteJournal()
{
bridge.DeleteJournal();
SelectJournalEntry(null);
}參數: text (Any)
結果: void / Unit.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.DeleteJournal. -
InjectionScript.Runtime.InjectionApiUO.DeleteJournal:DeleteJournal((string)text).
內部實作程式碼,不能作為獨立腳本執行。
public void DeleteJournal(InjectionValue text) => DeleteJournal((string)text);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.FoundedParamId();傳回符合的搜尋模式替代項的編號。
沒有參數。
int 是非空替代清單中0 到 |: success|failed 的索引,給出 0 表示成功,1 表示失敗。如果有多個合適的替代方案,則採用範本中的第一個。沒有匹配或直接Journal之後也0。這不是作者的serial,也不是行號,也不是訊息的type。
- 搜尋並Journal/GetJournal/LastJournalMessage儲存目前腳本中單一條目的文字和欄位。新訊息不會取代這些欄位。如果一筆記錄被從有限日誌中逐出,則保留的欄位仍然存在,但LineIndex/GetFoundedTextIndex返回-1。下一次搜尋或讀取會選擇另一個條目;不成功的搜尋、無效的索引以及透過此腳本清除都會重設選擇。
- 首先查看搜尋結果>0。 0 的值本身並不能確認成功。在編號之前刪除邊緣空格和空的替代項。
- https://forum.yoko.com.ua/viewtopic.php?p=27633; 。在此改編中,ID代表替代,作者和類型欄位可透過LineID/LineMsgType單獨取得。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
object? result = UO.FoundedParamId();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));參數與執行流程:
- 成功是0的替代,失敗是1的替代。單獨檢查搜尋是否成功。
- 這是文字分析,而不是伺服器對遊戲操作的確認。
if (Truth(UO.InJournal("success|failed") > 0))
{
var outcome = UO.FoundedParamId();
if (Truth(outcome == 0))
{
UO.Print("Success text");
}
else
{
UO.Print("Failure text");
}
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;參數與執行流程:
- -1 禁用暫存器。結果0、1、2 對應於備選方案的順序。
- 如果字串包含多個選項,則依序傳回第一個符合模式。
return RunScenario();
object? RunScenario()
{
if (Truth(UO.InJournal("mining|ore|empty", -1) > 0))
{
var kind = UO.FoundedParamId();
UO.Print("Alternative: " + Convert.ToString(kind));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;參數與執行流程:
- Journal(0)改變選擇並重設ID替代方案,因此結果被提前儲存。
- Journal 之後的新 getter 呼叫不再描述先前的模式。
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
if (Truth(UO.InJournal("success|failed") > 0))
{
var outcome = UO.FoundedParamId();
var latest = UO.Journal(0);
UO.Print("Saved outcome: " + Convert.ToString(outcome));
}
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。
參數: 沒有參數。
結果: dynamic / Any.
呼叫時:
內部實作程式碼,不能作為獨立腳本執行。
case "foundedparamid":
return new InjectionValue(foundedTextId >= 0 ? foundedTextId : 0);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
string UO.GetFoundedText();傳回所選日誌條目的文字。
沒有參數。
string — 所選條目的文字;沒有選擇的空白行。現有條目可以接受空白文字。
- 搜尋並Journal/GetJournal/LastJournalMessage儲存目前腳本中單一條目的文字和欄位。新訊息不會取代這些欄位。如果一筆記錄被從有限日誌中逐出,則保留的欄位仍然存在,但LineIndex/GetFoundedTextIndex返回-1。下一次搜尋或讀取會選擇另一個條目;不成功的搜尋、無效的索引以及透過此腳本清除都會重設選擇。
- Getter 不會執行搜尋並選擇最新行。 Null/空值可能是有效資料;考慮搜尋結果。
- 主目錄: https://forum.yoko.com.ua/viewtopic.php?p=27633 .
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
var result = UO.GetFoundedText();
UO.Print("GetFoundedText: " + Convert.ToString(result));參數與執行流程:
- 通知 - 搜尋文字的範例。僅在成功搜尋後才會呼叫不帶參數的 Getter。
- string — 所選條目的文字;沒有選擇的空白行。現有條目可以接受空白文字。
if (Truth(UO.InJournal("notice") > 0))
{
var value = UO.GetFoundedText();
UO.Print("Text: " + Convert.ToString(value));
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;參數與執行流程:
- Journal(0) 選擇一個新條目。索引和值讀取到Print。
- 索引檢查可讓您區分不存在記錄和有效的 null 或空白欄位。
return RunScenario();
object? RunScenario()
{
var text = UO.Journal(0);
var index = UO.LineIndex();
var value = UO.GetFoundedText();
if (Truth(index >= 0))
{
UO.Print(Convert.ToString(value));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;參數與執行流程:
- 第一次搜尋選擇成功,第二次搜尋取代或重置選擇。已儲存已包含必填欄位的副本。
- 儲存的var不會隨著新的搜尋、清除或接收訊息而改變。
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
if (Truth(UO.InJournal("success") > 0))
{
var saved = UO.GetFoundedText();
var nextMatch = UO.InJournal("failed");
UO.Print("Saved: " + Convert.ToString(saved));
}
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。
參數: 沒有參數。
結果: string / String.
呼叫時:
內部實作程式碼,不能作為獨立腳本執行。
public string GetFoundedText() => selectedJournalEntry?.Text ?? string.Empty;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
string UO.GetFoundedTextColor();傳回所選日誌條目的顏色。
沒有參數。
string - UO hue 採用 0x0044 格式(4 十六進位數字)。別無選擇 - 0x0000; hue=0 對於訊息也是可以接受的。這不是RGB。
- 搜尋並Journal/GetJournal/LastJournalMessage儲存目前腳本中單一條目的文字和欄位。新訊息不會取代這些欄位。如果一筆記錄被從有限日誌中逐出,則保留的欄位仍然存在,但LineIndex/GetFoundedTextIndex返回-1。下一次搜尋或讀取會選擇另一個條目;不成功的搜尋、無效的索引以及透過此腳本清除都會重設選擇。
- Getter 不會執行搜尋並選擇最新行。 Null/空值可能是有效資料;考慮搜尋結果。
- 主目錄: https://forum.yoko.com.ua/viewtopic.php?p=27633 .
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
var result = UO.GetFoundedTextColor();
UO.Print("GetFoundedTextColor: " + Convert.ToString(result));參數與執行流程:
- 通知 - 搜尋文字的範例。僅在成功搜尋後才會呼叫不帶參數的 Getter。
- string - UO hue 採用 0x0044 格式(4 十六進位數字)。別無選擇 - 0x0000; hue=0 對於訊息也是可以接受的。這不是RGB。
if (Truth(UO.InJournal("notice") > 0))
{
var value = UO.GetFoundedTextColor();
UO.Print("Hue: " + Convert.ToString(value));
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;參數與執行流程:
- Journal(0) 選擇一個新條目。索引和值讀取到Print。
- 索引檢查可讓您區分不存在記錄和有效的 null 或空白欄位。
return RunScenario();
object? RunScenario()
{
var text = UO.Journal(0);
var index = UO.LineIndex();
var value = UO.GetFoundedTextColor();
if (Truth(index >= 0))
{
UO.Print(Convert.ToString(value));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;參數與執行流程:
- 第一次搜尋選擇成功,第二次搜尋取代或重置選擇。已儲存已包含必填欄位的副本。
- 儲存的var不會隨著新的搜尋、清除或接收訊息而改變。
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
if (Truth(UO.InJournal("success") > 0))
{
var saved = UO.GetFoundedTextColor();
var nextMatch = UO.InJournal("failed");
UO.Print("Saved: " + Convert.ToString(saved));
}
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。
參數: 沒有參數。
結果: string / String.
呼叫時:
內部實作程式碼,不能作為獨立腳本執行。
public string GetFoundedTextColor() => selectedJournalEntry != null ? $"0x{selectedJournalEntry.Color:X4}" : "0x0000";Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.GetFoundedTextID();傳回符合的搜尋模式替代項的編號。
沒有參數。
int 是非空替代清單中0 到 |: success|failed 的索引,給出 0 表示成功,1 表示失敗。如果有多個合適的替代方案,則採用範本中的第一個。沒有匹配或直接Journal之後也0。這不是作者的serial,也不是行號,也不是訊息的type。
- 搜尋並Journal/GetJournal/LastJournalMessage儲存目前腳本中單一條目的文字和欄位。新訊息不會取代這些欄位。如果一筆記錄被從有限日誌中逐出,則保留的欄位仍然存在,但LineIndex/GetFoundedTextIndex返回-1。下一次搜尋或讀取會選擇另一個條目;不成功的搜尋、無效的索引以及透過此腳本清除都會重設選擇。
- 首先查看搜尋結果>0。 0 的值本身並不能確認成功。在編號之前刪除邊緣空格和空的替代項。
- https://forum.yoko.com.ua/viewtopic.php?p=27633; 。在此改編中,ID代表替代,作者和類型欄位可透過LineID/LineMsgType單獨取得。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
var result = UO.GetFoundedTextID();
UO.Print("GetFoundedTextID: " + Convert.ToString(result));參數與執行流程:
- 成功是0的替代,失敗是1的替代。單獨檢查搜尋是否成功。
- 這是文字分析,而不是伺服器對遊戲操作的確認。
if (Truth(UO.InJournal("success|failed") > 0))
{
var outcome = UO.GetFoundedTextID();
if (Truth(outcome == 0))
{
UO.Print("Success text");
}
else
{
UO.Print("Failure text");
}
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;參數與執行流程:
- -1 禁用暫存器。結果0、1、2 對應於備選方案的順序。
- 如果字串包含多個選項,則依序傳回第一個符合模式。
return RunScenario();
object? RunScenario()
{
if (Truth(UO.InJournal("mining|ore|empty", -1) > 0))
{
var kind = UO.GetFoundedTextID();
UO.Print("Alternative: " + Convert.ToString(kind));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;參數與執行流程:
- Journal(0)改變選擇並重設ID替代方案,因此結果被提前儲存。
- Journal 之後的新 getter 呼叫不再描述先前的模式。
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
if (Truth(UO.InJournal("success|failed") > 0))
{
var outcome = UO.GetFoundedTextID();
var latest = UO.Journal(0);
UO.Print("Saved outcome: " + Convert.ToString(outcome));
}
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。
參數: 沒有參數。
結果: int / Integer.
呼叫時:
內部實作程式碼,不能作為獨立腳本執行。
public int GetFoundedTextID() => foundedTextId >= 0 ? foundedTextId : 0;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.GetFoundedTextIndex();如果所選條目仍儲存在日誌中,則傳回該條目的目前索引。
沒有參數。
int 是0(最新行)的目前索引。 -1表示沒有選擇或所選條目已被刪除/驅逐。這不是InJournal的結果:1不需要從索引中減去。
- 搜尋並Journal/GetJournal/LastJournalMessage儲存目前腳本中單一條目的文字和欄位。新訊息不會取代這些欄位。如果一筆記錄被從有限日誌中逐出,則保留的欄位仍然存在,但LineIndex/GetFoundedTextIndex返回-1。下一次搜尋或讀取會選擇另一個條目;不成功的搜尋、無效的索引以及透過此腳本清除都會重設選擇。
- 索引是根據記錄的身份重新計算的。新消息會增加它。舊存儲的索引不是常數ID;對於文本,GetFoundedText更安全。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
var result = UO.GetFoundedTextIndex();
UO.Print("GetFoundedTextIndex: " + Convert.ToString(result));參數與執行流程:
- 不含參數的 Getter 會讀取目前腳本的選擇。 0 — 新行,-1 — 目前緩衝區中沒有行。
- 該文字取自已儲存的條目,因此新訊息不會取代它。
if (Truth(UO.InJournal("notice") > 0))
{
var index = UO.GetFoundedTextIndex();
var text = UO.GetFoundedText();
UO.Print(Convert.ToString(index) + ": " + text);
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;參數與執行流程:
- Journal(0)選擇最後一條;檢查排除空日誌。
- 有效條目允許使用空白文字。
return RunScenario();
object? RunScenario()
{
var text = UO.Journal(0);
if (Truth(UO.GetFoundedTextIndex() >= 0))
{
UO.Print(text);
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;參數與執行流程:
- 等待 100 毫秒允許新訊息到達。再次找到相同的條目後。
- 刪除後可能會增加或變為-1; GetFoundedText 仍包含已儲存的文字。
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
if (Truth(UO.InJournal("needle") > 0))
{
var before = UO.GetFoundedTextIndex();
UO.Wait(100);
var after = UO.GetFoundedTextIndex();
UO.Print(Convert.ToString(before) + " -> " + Convert.ToString(after));
}
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。
參數: 沒有參數。
結果: int / Integer.
呼叫時:
內部實作程式碼,不能作為獨立腳本執行。
public int GetFoundedTextIndex() => selectedJournalEntry != null && bridge is IApiJournalReader reader
? reader.FindJournalEntryIndex(selectedJournalEntry.Identity) : foundedTextIndex;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
string UO.GetFoundedTextSerial();返回所選日記條目的作者serial。
沒有參數。
作者的string - serial,格式為0x00001234(8 十六進位數字)。別無選擇 - 0x00000000。這不是主題的 type 或期刊索引。
- 搜尋並Journal/GetJournal/LastJournalMessage儲存目前腳本中單一條目的文字和欄位。新訊息不會取代這些欄位。如果一筆記錄被從有限日誌中逐出,則保留的欄位仍然存在,但LineIndex/GetFoundedTextIndex返回-1。下一次搜尋或讀取會選擇另一個條目;不成功的搜尋、無效的索引以及透過此腳本清除都會重設選擇。
- Getter 不會執行搜尋並選擇最新行。 Null/空值可能是有效資料;考慮搜尋結果。
- 主目錄: https://forum.yoko.com.ua/viewtopic.php?p=27633 .
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
var result = UO.GetFoundedTextSerial();
UO.Print("GetFoundedTextSerial: " + Convert.ToString(result));參數與執行流程:
- 通知 - 搜尋文字的範例。僅在成功搜尋後才會呼叫不帶參數的 Getter。
- 作者的string - serial,格式為0x00001234(8 十六進位數字)。別無選擇 - 0x00000000。這不是主題的 type 或期刊索引。
if (Truth(UO.InJournal("notice") > 0))
{
var value = UO.GetFoundedTextSerial();
UO.Print("Speaker serial: " + Convert.ToString(value));
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;參數與執行流程:
- Journal(0) 選擇一個新條目。索引和值讀取到Print。
- 索引檢查可讓您區分不存在記錄和有效的 null 或空白欄位。
return RunScenario();
object? RunScenario()
{
var text = UO.Journal(0);
var index = UO.LineIndex();
var value = UO.GetFoundedTextSerial();
if (Truth(index >= 0))
{
UO.Print(Convert.ToString(value));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;參數與執行流程:
- 第一次搜尋選擇成功,第二次搜尋取代或重置選擇。已儲存已包含必填欄位的副本。
- 儲存的var不會隨著新的搜尋、清除或接收訊息而改變。
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
if (Truth(UO.InJournal("success") > 0))
{
var saved = UO.GetFoundedTextSerial();
var nextMatch = UO.InJournal("failed");
UO.Print("Saved: " + Convert.ToString(saved));
}
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。
參數: 沒有參數。
結果: string / String.
呼叫時:
內部實作程式碼,不能作為獨立腳本執行。
public string GetFoundedTextSerial() => selectedJournalEntry != null
? $"0x{unchecked((uint)selectedJournalEntry.Serial):X8}" : "0x00000000";Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.GetFoundedTextTimer();傳回所選日誌條目的毫秒時間戳記。
沒有參數。
int — 從運行時開始記錄時刻(以毫秒為單位),與 Now() 相容。開始前的條目給出0。沒有選擇也0;不正確的日曆標記給出 -1。它不是過去式或十分之一秒UO.Timer()。
- 搜尋並Journal/GetJournal/LastJournalMessage儲存目前腳本中單一條目的文字和欄位。新訊息不會取代這些欄位。如果一筆記錄被從有限日誌中逐出,則保留的欄位仍然存在,但LineIndex/GetFoundedTextIndex返回-1。下一次搜尋或讀取會選擇另一個條目;不成功的搜尋、無效的索引以及透過此腳本清除都會重設選擇。
- Getter 不會執行搜尋並選擇最新行。 Null/空值可能是有效資料;考慮搜尋結果。
- 主目錄: https://forum.yoko.com.ua/viewtopic.php?p=27633 .
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
var result = UO.GetFoundedTextTimer();
UO.Print("GetFoundedTextTimer: " + Convert.ToString(result));參數與執行流程:
- 通知 - 搜尋文字的範例。僅在成功搜尋後才會呼叫不帶參數的 Getter。
- int — 從運行時開始記錄時刻(以毫秒為單位),與 Now() 相容。開始前的條目給出0。沒有選擇也0;不正確的日曆標記給出 -1。它不是過去式或十分之一秒UO.Timer()。
if (Truth(UO.InJournal("notice") > 0))
{
var value = UO.GetFoundedTextTimer();
UO.Print("Timestamp ms: " + Convert.ToString(value));
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;參數與執行流程:
- Journal(0) 選擇一個新條目。索引和值讀取到Print。
- 索引檢查可讓您區分不存在記錄和有效的 null 或空白欄位。
return RunScenario();
object? RunScenario()
{
var text = UO.Journal(0);
var index = UO.LineIndex();
var value = UO.GetFoundedTextTimer();
if (Truth(index >= 0))
{
UO.Print(Convert.ToString(value));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;參數與執行流程:
- 第一次搜尋選擇成功,第二次搜尋取代或重置選擇。已儲存已包含必填欄位的副本。
- 儲存的var不會隨著新的搜尋、清除或接收訊息而改變。
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
if (Truth(UO.InJournal("success") > 0))
{
var saved = UO.GetFoundedTextTimer();
var nextMatch = UO.InJournal("failed");
UO.Print("Saved: " + Convert.ToString(saved));
}
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。
參數: 沒有參數。
結果: int / Integer.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.GetFoundedTextTimer. -
InjectionScript.Runtime.InjectionApiUO.JournalEntryTime:JournalEntryTime(selectedJournalEntry.Timestamp).
內部實作程式碼,不能作為獨立腳本執行。
public int GetFoundedTextTimer() => selectedJournalEntry != null ? JournalEntryTime(selectedJournalEntry.Timestamp) : 0;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
string UO.GetJournal(object? index);讀取目前索引處的行文本,並為 GetFoundedText/Line* 選擇該條目。
-
index- 必填 int - 目前索引:0 表示最新行,1 - 上一行。當訊息到達時索引會移動。這不是serial,也不是ID模式的變體,也不是InJournal的正結果。
string — 字串的文本,如果索引不正確/日誌為空,則為空字串。現有行也可以有空文字:讀取後,LineIndex >= 0 確認該條目已被選取。這不是行數。
- 搜尋並Journal/GetJournal/LastJournalMessage儲存目前腳本中單一條目的文字和欄位。新訊息不會取代這些欄位。如果一筆記錄被從有限日誌中逐出,則保留的欄位仍然存在,但LineIndex/GetFoundedTextIndex返回-1。下一次搜尋或讀取會選擇另一個條目;不成功的搜尋、無效的索引以及透過此腳本清除都會重設選擇。
- 直讀復位ID替代方案;GetFoundedTextID/FoundedParamId 之後是0。 Journal本身不會重新計算LineCount。
- https://forum.yoko.com.ua/viewtopic.php?p=27633 ; .
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
var result = UO.GetJournal(0);
UO.Print("GetJournal: " + Convert.ToString(result));參數與執行流程:
- 0 是最新的線路。首先,讀取文字和作者,然後顯示結果。
- Print可以新增留言;已儲存的文字/作者是指先前選取的條目。
var text = UO.GetJournal(0);
var author = UO.LineName();
UO.Print(author + ": " + text);參數與執行流程:
- 1 是前一個條目,HighJournal 是最大可用索引。
- 日誌可能會在呼叫之間發生變化。對於已經找到的行數據,使用GetFoundedText。
return RunScenario();
object? RunScenario()
{
if (Truth(UO.HighJournal() >= 1))
{
var text = UO.GetJournal(1);
UO.Print(text);
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;參數與執行流程:
- LineIndex=-1 表示所選條目遺失/刪除。 Len(text)=0 本身並不意味著這一點。
- 儲存測試結果,直到診斷輸出加入到日誌中。
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
var text = UO.GetJournal(0);
var index = UO.LineIndex();
if (Truth(index < 0))
{
UO.Print("No record");
}
else
{
UO.Print("Text length: " + Convert.ToString(Len(text)));
}
return null;
}
int Len(object? value) => Convert.ToString(value)?.Length ?? 0;
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。
參數: index (Integer)
結果: string / String.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.GetJournalText. -
InjectionScript.Runtime.InjectionApiUO.SelectJournalEntry:SelectJournalEntry(ReadJournalSnapshot(index)). -
InjectionScript.Runtime.InjectionApiUO.ReadJournalSnapshot:ReadJournalSnapshot(index).
內部實作程式碼,不能作為獨立腳本執行。
public string GetJournalText(int index)
{
SelectJournalEntry(ReadJournalSnapshot(index));
return selectedJournalEntry?.Text ?? string.Empty;
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
string UO.GetJournalColor(object? index);讀取目前索引處行的 hue 字段,而不更改所選條目。
-
index- 必填 int - 目前索引:0 表示最新行,1 - 上一行。當訊息到達時索引會移動。這不是serial,也不是ID模式的變體,也不是InJournal的正結果。
string - UO hue 為 0x0044;若索引0x0000不正確。這不是RGB。
- 每次呼叫都會讀取目前位置。為了使相同記錄的文字和欄位保持一致,首先是 Journal(index),然後是 GetFoundedText/Line*。空值可能是真實資料。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
var result = UO.GetJournalColor(0);
UO.Print("GetJournalColor: " + Convert.ToString(result));參數與執行流程:
- 0 是新行的索引。檢查緩衝區是否存在。
- string - UO hue 為 0x0044;若索引0x0000不正確。這不是RGB。
if (Truth(UO.HighJournal() >= 0))
{
var value = UO.GetJournalColor(0);
UO.Print(Convert.ToString(value));
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;參數與執行流程:
- 1是上一行,不是serial=1。
- 搜尋選擇的條目GetFoundedText/Line* 不會更改。
return RunScenario();
object? RunScenario()
{
if (Truth(UO.HighJournal() >= 1))
{
var value = UO.GetJournalColor(1);
UO.Print(Convert.ToString(value));
}
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 在呼叫時複製該欄位。等待不會更新變數。
- 如需再次讀取目前行0,請再次呼叫該指令;這可能已經是另一個條目了。
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
var value = UO.GetJournalColor(0);
UO.Wait(100);
UO.Print("Saved value: " + Convert.ToString(value));
return null;
}
}C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。
參數: index (Integer)
結果: string / String.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.JournalColor. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.JournalColor:bridge.JournalColor(index).
內部實作程式碼,不能作為獨立腳本執行。
public string JournalColor(int index) => bridge.JournalColor(index);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
string UO.GetJournalSerial(object? index);讀取目前索引處行的 serial 字段,而不更改所選條目。
-
index- 必填 int - 目前索引:0 表示最新行,1 - 上一行。當訊息到達時索引會移動。這不是serial,也不是ID模式的變體,也不是InJournal的正結果。
作者的string - serial 為0x00001234;若索引0x00000000不正確。
- 每次呼叫都會讀取目前位置。為了使相同記錄的文字和欄位保持一致,首先是 Journal(index),然後是 GetFoundedText/Line*。空值可能是真實資料。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
var result = UO.GetJournalSerial(0);
UO.Print("GetJournalSerial: " + Convert.ToString(result));參數與執行流程:
- 0 是新行的索引。檢查緩衝區是否存在。
- 作者的string - serial 為0x00001234;若索引0x00000000不正確。
if (Truth(UO.HighJournal() >= 0))
{
var value = UO.GetJournalSerial(0);
UO.Print(Convert.ToString(value));
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;參數與執行流程:
- 1是上一行,不是serial=1。
- 搜尋選擇的條目GetFoundedText/Line* 不會更改。
return RunScenario();
object? RunScenario()
{
if (Truth(UO.HighJournal() >= 1))
{
var value = UO.GetJournalSerial(1);
UO.Print(Convert.ToString(value));
}
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 在呼叫時複製該欄位。等待不會更新變數。
- 如需再次讀取目前行0,請再次呼叫該指令;這可能已經是另一個條目了。
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
var value = UO.GetJournalSerial(0);
UO.Wait(100);
UO.Print("Saved value: " + Convert.ToString(value));
return null;
}
}C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。
參數: index (Integer)
結果: string / String.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.JournalSerial. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.JournalSerial:bridge.JournalSerial(index).
內部實作程式碼,不能作為獨立腳本執行。
public string JournalSerial(int index) => bridge.JournalSerial(index);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.HighJournal();傳回最大可用日誌索引。
沒有參數。
int:-1當彈匣空時;否則儲存的記錄數減去1就是最舊的可用記錄的索引。 Journal/GetJournal從新記錄到舊記錄使用零索引;陽性結果 InJournal 使用不同的單次計數。
- 新消息和清潔改變了界限。這裡的順序是從新條目到舊條目的 Journal(0)。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
object? result = UO.HighJournal();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));參數與執行流程:
- 負邊界意味著緩衝區為空。
- 如果緩衝區不為空,Journal(0) 會讀取一個新條目。
if (Truth(UO.HighJournal() >= 0))
{
var text = UO.Journal(0);
UO.Print(text);
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;參數與執行流程:
- 當日誌為空時HighJournal=-1,所以total=0。 LowJournal 描述下界,而不是行數。
- 這是本地儲存的行總數; LineCount指的是最後一次搜尋。
return RunScenario();
object? RunScenario()
{
var total = UO.HighJournal() + 1;
UO.Print("Rows: " + Convert.ToString(total));
return null;
}參數與執行流程:
- index 直接傳遞給 Journal,不減一。
- 此索引可能會隨著傳入訊息而變化;緩衝區在呼叫之間不會凍結。
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 index = UO.HighJournal();
if (Truth(index >= 0))
{
var text = UO.Journal(index);
UO.Print(text);
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。
參數: 沒有參數。
結果: dynamic / Any.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.JournalEntryCount:bridge.JournalEntryCount().
內部實作程式碼,不能作為獨立腳本執行。
case "highjournal": return new InjectionValue(bridge.JournalEntryCount() == 0 ? -1 : bridge.JournalEntryCount() - 1);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.InJournal(object? pattern);
int UO.InJournal(object? pattern, object? maxLinesOrIgnoreCase);
int UO.InJournal(object? pattern, object? serial, object? color);
int UO.InJournal(object? pattern, object? serial, object? color, object? startTime);
int UO.InJournal(object? pattern, object? serial, object? color, object? startTime, object? endTime);
int UO.InJournal(object? pattern, object? serial, object? color, object? startTime, object? endTime, object? newestOnly);
int UO.InJournal(object? pattern, object? serial, object? color, object? startTime, object? endTime, object? newestOnly, object? caseSensitive);在本機日誌中搜尋訊息並儲存找到的記錄及其欄位。
-
pattern— 透過 | 搜尋到的子字串或多個替代項,例如 success|failed。每個替代項邊緣的空格將被刪除,空替代項將被跳過。這是純文本,而不是正規表示式。使用非空模板。 -
maxLinesOrIgnoreCase— 僅兩個參數的形式: -1 — 整個可用日誌,不區分大小寫; 0 - 不檢查任何線路;正數 - 檢查最後一行的數量不超過此數量,區分大小寫。其他負值僅限於0。 -
serial— 第三個及後續參數包括擴展形式。這種形式的第二個參數是訊息作者的數字serial,而不是graphic/type。 -1禁用過濾器;0選擇serial=0。包含數字的十六進位字串也會轉換為數字;這裡不允許使用物件別名。 -
color— 擴充形式的第三個參數是數字 UO hue; -1或0xFFFF停用過濾器。 0選擇hue=0。這不是RGB。 -
startTime— Now() 的可選開始標籤,int 以毫秒為單位。給定一個正的endTime,值startTime=0意味著開始執行。如果兩個標記都缺失/非正,則沒有時間過濾器。 -
endTime— 可選的結束標籤 Now(),int 以毫秒為單位。缺席或 0 - 當前時間。正邊界的順序並不重要。未來標籤僅限於當前時間。 -
newestOnly- 可選bool,預設false。 true 第一個匹配後停止搜尋; LineCount 然後0 或1。 false 統計所有符合行,仍然選擇最新的。 -
caseSensitive- 可選bool擴展形式,預設false。 true 區分大小寫。另一方面,僅模式形式始終區分大小寫。
int: 0 – 沒有合適的線路;正數是最新匹配條目的位置,從整個日誌的末尾開始計算,從1開始。這不是匹配數或模式替代數。對於零索引,使用LineIndex/GetFoundedTextIndex,對於匹配數,使用LineCount,對於替代數,使用GetFoundedTextID。後續的新訊息可能會變更索引,但所選記錄的已儲存欄位仍然可用。
- 搜尋並Journal/GetJournal/LastJournalMessage儲存目前腳本中單一條目的文字和欄位。新訊息不會取代這些欄位。如果一筆記錄被從有限日誌中逐出,則保留的欄位仍然存在,但LineIndex/GetFoundedTextIndex返回-1。下一次搜尋或讀取會選擇另一個條目;不成功的搜尋、無效的索引以及透過此腳本清除都會重設選擇。
- 搜尋不需要新文字。目前模板為空 InJournal 匹配任何字串,但不指定 ID 替代方案;檢查是否存在字串使用 HighJournal/LowJournal.
- 兩個參數形式指定限制/情況,而不是serial。對於serial,也必須傳遞顏色。單參數SetJournalLine可以限制搜尋區域。
- https://forum.yoko.com.ua/viewtopic.php?p=27633 ; .
Now() 提供目前執行的主機:這是日誌使用的相同本機時鐘的整數毫秒數。不要將其替換為環境。 TickCount、Unix 時間或您自己的碼錶:來源會有所不同。在正常的 .cs/.csproj 程式中,對傳遞的 CSharpScriptGlobals 呼叫 context.Now() 。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
var result = UO.InJournal("You see");
UO.Print("InJournal: " + Convert.ToString(result));參數與執行流程:
- pattern=你看到的是子字串,大小寫很重要。 found=0表示不存在。
- 文字是從找到的條目中複製的;新訊息的到來不會取代它。
var found = UO.InJournal("You see");
if (Truth(found > 0))
{
var text = UO.GetFoundedText();
UO.Print(text);
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;參數與執行流程:
- 第二個參數 -1 刪除行限制並停用區分大小寫。
- 結果=0成功,1失敗;這是替代的數字,而不是說話者的ID。
return RunScenario();
object? RunScenario()
{
var found = UO.InJournal("success|failed", -1);
if (Truth(found > 0))
{
var outcome = UO.GetFoundedTextID();
UO.Print("Alternative: " + Convert.ToString(outcome));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;參數與執行流程:
- 20 - 要檢查的最大行數,大小寫很重要。 matches - 選取區域中符合行的數量。
- 找到包含位置加上1,不符。寫入診斷文字也可以加入到日誌中。
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 found = UO.InJournal("bank", 20);
var matches = UO.LineCount();
UO.Print("Matches: " + Convert.ToString(matches));
return null;
}
}參數與執行流程:
- serial=0x00001234 — 作者示例,颜色=0x0044 — hue。替換為實際值。開始/endTime — 毫秒標記。
- true 在第一行停止搜尋; false 不區分大小寫。單獨等待350毫秒,InJournal本身不等待。
var started = Now();
UO.Wait(350);
var found = UO.InJournal("hello", 0x00001234, 0x0044, started, Now(), true, false);
if (Truth(found > 0))
{
UO.Print(UO.GetFoundedText());
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;參數與執行流程:
- serial=-1 和 color=-1 禁用這兩個過濾器。兩個標記限制時間。
- 省略newestOnly和caseSensitive:false和false。如果沒有匹配,則返回0。
return RunScenario();
object? RunScenario()
{
var started = Now();
UO.Wait(100);
var found = UO.InJournal("notice", -1, -1, started, Now());
if (Truth(found == 0))
{
UO.Print("No matching message");
}
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。
參數: pattern (Any/String)
結果: int / Any.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.InJournal:InJournal(Text(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(0).
內部實作程式碼,不能作為獨立腳本執行。
case "injournal": return new InjectionValue(InJournal(Text(0)));參數: pattern (Any/String)
結果: int / Integer.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.InJournal. -
InjectionScript.Runtime.InjectionApiUO.InJournalCore:InJournalCore(pattern, -1, ignoreCase: false).
內部實作程式碼,不能作為獨立腳本執行。
public int InJournal(string pattern)
=> InJournalCore(pattern, -1, ignoreCase: false);參數: pattern (String), maxLinesOrIgnoreCase (Integer)
結果: int / Integer.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.InJournal. -
InjectionScript.Runtime.InjectionApiUO.InJournalCore:InJournalCore(pattern, maxLinesOrIgnoreCase == -1 ? -1 : Math.Max(0, maxLinesOrIgnoreCase), ignoreCase: maxLinesOrIgnoreCase == -1).
內部實作程式碼,不能作為獨立腳本執行。
public int InJournal(string pattern, int maxLinesOrIgnoreCase)
=> InJournalCore(pattern,
maxLinesOrIgnoreCase == -1 ? -1 : Math.Max(0, maxLinesOrIgnoreCase),
ignoreCase: maxLinesOrIgnoreCase == -1);參數: pattern (Any), serial (Any), color (Any)
結果: int / Integer.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.Register [InJournal]. -
InjectionScript.Runtime.InjectionApiUO.CompactInJournal:CompactInJournal(values).
呼叫時執行已儲存的處理函式 delegate。註冊方法在建立 API 時建立此 delegate。
內部實作程式碼,不能作為獨立腳本執行。
values => new InjectionValue(CompactInJournal(values))參數: pattern (Any), serial (Any), color (Any), startTime (Any)
結果: int / Integer.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.Register [InJournal]. -
InjectionScript.Runtime.InjectionApiUO.CompactInJournal:CompactInJournal(values).
呼叫時執行已儲存的處理函式 delegate。註冊方法在建立 API 時建立此 delegate。
內部實作程式碼,不能作為獨立腳本執行。
values => new InjectionValue(CompactInJournal(values))參數: pattern (Any), serial (Any), color (Any), startTime (Any), endTime (Any)
結果: int / Integer.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.Register [InJournal]. -
InjectionScript.Runtime.InjectionApiUO.CompactInJournal:CompactInJournal(values).
呼叫時執行已儲存的處理函式 delegate。註冊方法在建立 API 時建立此 delegate。
內部實作程式碼,不能作為獨立腳本執行。
values => new InjectionValue(CompactInJournal(values))
UO.InJournal(pattern, serial, color, startTime, endTime, newestOnly) — UO.InJournal(Any,Any,Any,Any,Any,Any)
參數: pattern (Any), serial (Any), color (Any), startTime (Any), endTime (Any), newestOnly (Any)
結果: int / Integer.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.Register [InJournal]. -
InjectionScript.Runtime.InjectionApiUO.CompactInJournal:CompactInJournal(values).
呼叫時執行已儲存的處理函式 delegate。註冊方法在建立 API 時建立此 delegate。
內部實作程式碼,不能作為獨立腳本執行。
values => new InjectionValue(CompactInJournal(values))
UO.InJournal(pattern, serial, color, startTime, endTime, newestOnly, caseSensitive) — UO.InJournal(Any,Any,Any,Any,Any,Any,Any)
參數: pattern (Any), serial (Any), color (Any), startTime (Any), endTime (Any), newestOnly (Any), caseSensitive (Any)
結果: int / Integer.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.Register [InJournal]. -
InjectionScript.Runtime.InjectionApiUO.CompactInJournal:CompactInJournal(values).
呼叫時執行已儲存的處理函式 delegate。註冊方法在建立 API 時建立此 delegate。
內部實作程式碼,不能作為獨立腳本執行。
values => new InjectionValue(CompactInJournal(values))Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.InJournalBetweenTimes(object? pattern, object? startTime);
int UO.InJournalBetweenTimes(object? pattern, object? startTime, object? endTime);
int UO.InJournalBetweenTimes(object? pattern, object? startTime, object? endTime, object? limit);搜尋兩個執行時間戳之間的字串並儲存最新的匹配條目。
-
pattern— 透過 | 搜尋到的子字串或多個替代項,例如 success|failed。每個替代項邊緣的空格將被刪除,空替代項將被跳過。這是純文本,而不是正規表示式。使用非空模板。 -
startTime— 强制标签 Now():从运行时开始算起的 int 毫秒数。 0 - 開始執行。这不是记录的年龄或小数日期LineTime。 -
endTime— 可選的 Now() 結束標籤。如果省略或非正數,則使用目前時間。正邊界可以以相反的順序傳達;未來的邊界僅限於當前時間。 -
limit- 可選的第四個參數: -1 - 無限制且不區分大小寫;正數 — 區間內的最大行數,區分大小寫; 0 和除 -1 之外的負值 - 不檢查字串。
int: 0 – 沒有合適的線路;正數是最新匹配條目的位置,從整個日誌的末尾開始計算,從1開始。這不是匹配數或模式替代數。對於零索引,使用LineIndex/GetFoundedTextIndex,對於匹配數,使用LineCount,對於替代數,使用GetFoundedTextID。後續的新訊息可能會變更索引,但所選記錄的已儲存欄位仍然可用。
- 搜尋並Journal/GetJournal/LastJournalMessage儲存目前腳本中單一條目的文字和欄位。新訊息不會取代這些欄位。如果一筆記錄被從有限日誌中逐出,則保留的欄位仍然存在,但LineIndex/GetFoundedTextIndex返回-1。下一次搜尋或讀取會選擇另一個條目;不成功的搜尋、無效的索引以及透過此腳本清除都會重設選擇。
- 具有兩個或三個參數的表單區分大小寫。包括邊框。計算間隔不會暫停腳本。
- 在這裡,將整個標籤傳遞給 Now()。 LineTime 返回另一個單位。主目錄: .
Now() 提供目前執行的主機:這是日誌使用的相同本機時鐘的整數毫秒數。不要將其替換為環境。 TickCount、Unix 時間或您自己的碼錶:來源會有所不同。在正常的 .cs/.csproj 程式中,對傳遞的 CSharpScriptGlobals 呼叫 context.Now() 。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
var result = UO.InJournalBetweenTimes("You see", 0, Now());
UO.Print("InJournalBetweenTimes: " + Convert.ToString(result));參數與執行流程:
- 開始保存到UseSkill。 endTime省略-截至目前時間;隱藏是伺服器端文字的範例。
- 考慮案例。該訊息並未證明目前狀態; UO.Hidden() 讀取角色的狀態。
var started = Now();
UO.UseSkill("Hiding");
UO.Wait(500);
if (Truth(UO.InJournalBetweenTimes("hidden", started) > 0))
{
UO.Print(UO.GetFoundedText());
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;參數與執行流程:
- startTime=0 — 開始執行;結束 — 以毫秒為單位儲存結束標籤。
- 結束後的新訊息不包括在內。運行之前的舊記錄也在區間之外。
return RunScenario();
object? RunScenario()
{
var ended = Now();
var found = UO.InJournalBetweenTimes("notice", 0, ended);
UO.Print("Search result: " + Convert.ToString(found));
return null;
}參數與執行流程:
- 最後一個 -1 刪除行限制並停用大小寫。第三個參數是結束標籤,而不是延遲。
- 結果ID:0為成功,1為失敗。需檢查發現 > 0。
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
var started = Now();
UO.Wait(350);
var found = UO.InJournalBetweenTimes("success|failed", started, Now(), -1);
if (Truth(found > 0))
{
UO.Print(Convert.ToString(UO.GetFoundedTextID()));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
private int Now() => global::ClassicUO.CSharp.CSharpScriptContext.Current.Now();
}C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。
參數: pattern (Any/String), startTime (Any/Integer)
結果: int / Any.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.InJournalBetweenTimes:InJournalBetweenTimes(Text(0), Arg(1), Arg(2), Arg(3)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(0). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(1). -
InjectionScript.Runtime.InjectionApiUO.InJournalBetweenTimes:InJournalBetweenTimes(Text(0), Arg(1), Arg(2)). -
InjectionScript.Runtime.InjectionApiUO.InJournalBetweenTimes:InJournalBetweenTimes(Text(0), Arg(1)).
內部實作程式碼,不能作為獨立腳本執行。
case "injournalbetweentimes":
if (arguments.Length > 3)
return new InjectionValue(InJournalBetweenTimes(Text(0), Arg(1), Arg(2), Arg(3)));
if (arguments.Length > 2)
return new InjectionValue(InJournalBetweenTimes(Text(0), Arg(1), Arg(2)));
return new InjectionValue(InJournalBetweenTimes(Text(0), Arg(1)));參數: pattern (Any/String), startTime (Any/Integer)
結果: int / Integer.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.InJournalBetweenTimes. -
InjectionScript.Runtime.InjectionApiUO.InJournalBetweenTimesCore:InJournalBetweenTimesCore(pattern, startTime, CurrentJournalTime(), -1, ignoreCase: false). -
InjectionScript.Runtime.InjectionApiUO.CurrentJournalTime:CurrentJournalTime().
內部實作程式碼,不能作為獨立腳本執行。
public int InJournalBetweenTimes(string pattern, int startTime)
=> InJournalBetweenTimesCore(pattern, startTime, CurrentJournalTime(), -1, ignoreCase: false);參數: pattern (Any/String), startTime (Any/Integer), endTime (Any/Integer)
結果: int / Any.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.InJournalBetweenTimes:InJournalBetweenTimes(Text(0), Arg(1), Arg(2), Arg(3)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(0). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(1). -
InjectionScript.Runtime.InjectionApiUO.InJournalBetweenTimes:InJournalBetweenTimes(Text(0), Arg(1), Arg(2)). -
InjectionScript.Runtime.InjectionApiUO.InJournalBetweenTimes:InJournalBetweenTimes(Text(0), Arg(1)).
內部實作程式碼,不能作為獨立腳本執行。
case "injournalbetweentimes":
if (arguments.Length > 3)
return new InjectionValue(InJournalBetweenTimes(Text(0), Arg(1), Arg(2), Arg(3)));
if (arguments.Length > 2)
return new InjectionValue(InJournalBetweenTimes(Text(0), Arg(1), Arg(2)));
return new InjectionValue(InJournalBetweenTimes(Text(0), Arg(1)));
UO.InJournalBetweenTimes(pattern, startTime, endTime) — UO.InJournalBetweenTimes(String,Integer,Integer)
參數: pattern (Any/String), startTime (Any/Integer), endTime (Any/Integer)
結果: int / Integer.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.InJournalBetweenTimes. -
InjectionScript.Runtime.InjectionApiUO.InJournalBetweenTimesCore:InJournalBetweenTimesCore(pattern, startTime, endTime, -1, ignoreCase: false).
內部實作程式碼,不能作為獨立腳本執行。
public int InJournalBetweenTimes(string pattern, int startTime, int endTime)
=> InJournalBetweenTimesCore(pattern, startTime, endTime, -1, ignoreCase: false);
UO.InJournalBetweenTimes(pattern, startTime, endTime, limit) — UO.InJournalBetweenTimes(Any,Any,Any,Any)
參數: pattern (Any/String), startTime (Any/Integer), endTime (Any/Integer), limit (Any/Integer)
結果: int / Any.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.InJournalBetweenTimes:InJournalBetweenTimes(Text(0), Arg(1), Arg(2), Arg(3)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(0). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(1). -
InjectionScript.Runtime.InjectionApiUO.InJournalBetweenTimes:InJournalBetweenTimes(Text(0), Arg(1), Arg(2)). -
InjectionScript.Runtime.InjectionApiUO.InJournalBetweenTimes:InJournalBetweenTimes(Text(0), Arg(1)).
內部實作程式碼,不能作為獨立腳本執行。
case "injournalbetweentimes":
if (arguments.Length > 3)
return new InjectionValue(InJournalBetweenTimes(Text(0), Arg(1), Arg(2), Arg(3)));
if (arguments.Length > 2)
return new InjectionValue(InJournalBetweenTimes(Text(0), Arg(1), Arg(2)));
return new InjectionValue(InJournalBetweenTimes(Text(0), Arg(1)));
UO.InJournalBetweenTimes(pattern, startTime, endTime, limit) — UO.InJournalBetweenTimes(String,Integer,Integer,Integer)
參數: pattern (Any/String), startTime (Any/Integer), endTime (Any/Integer), limit (Any/Integer)
結果: int / Integer.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.InJournalBetweenTimes. -
InjectionScript.Runtime.InjectionApiUO.InJournalBetweenTimesCore:InJournalBetweenTimesCore(pattern, startTime, endTime, limit == -1 ? -1 : Math.Max(0, limit), ignoreCase: limit == -1).
內部實作程式碼,不能作為獨立腳本執行。
public int InJournalBetweenTimes(string pattern, int startTime, int endTime, int limit)
=> InJournalBetweenTimesCore(pattern, startTime, endTime,
limit == -1 ? -1 : Math.Max(0, limit), ignoreCase: limit == -1);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
string UO.Journal(object? index);讀取目前索引處的行文本,並為 GetFoundedText/Line* 選擇該條目。
-
index- 必填 int - 目前索引:0 表示最新行,1 - 上一行。當訊息到達時索引會移動。這不是serial,也不是ID模式的變體,也不是InJournal的正結果。
string — 字串的文本,如果索引不正確/日誌為空,則為空字串。現有行也可以有空文字:讀取後,LineIndex >= 0 確認該條目已被選取。這不是行數。
- 搜尋並Journal/GetJournal/LastJournalMessage儲存目前腳本中單一條目的文字和欄位。新訊息不會取代這些欄位。如果一筆記錄被從有限日誌中逐出,則保留的欄位仍然存在,但LineIndex/GetFoundedTextIndex返回-1。下一次搜尋或讀取會選擇另一個條目;不成功的搜尋、無效的索引以及透過此腳本清除都會重設選擇。
- 直讀復位ID替代方案;GetFoundedTextID/FoundedParamId 之後是0。 Journal本身不會重新計算LineCount。
- https://forum.yoko.com.ua/viewtopic.php?p=27633 ; .
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
var result = UO.Journal(0);
UO.Print("Journal: " + Convert.ToString(result));參數與執行流程:
- 0 是最新的線路。首先,讀取文字和作者,然後顯示結果。
- Print可以新增留言;已儲存的文字/作者是指先前選取的條目。
var text = UO.Journal(0);
var author = UO.LineName();
UO.Print(author + ": " + text);參數與執行流程:
- 1 是前一個條目,HighJournal 是最大可用索引。
- 日誌可能會在呼叫之間發生變化。對於已經找到的行數據,使用GetFoundedText。
return RunScenario();
object? RunScenario()
{
if (Truth(UO.HighJournal() >= 1))
{
var text = UO.Journal(1);
UO.Print(text);
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;參數與執行流程:
- LineIndex=-1 表示所選條目遺失/刪除。 Len(text)=0 本身並不意味著這一點。
- 儲存測試結果,直到診斷輸出加入到日誌中。
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
var text = UO.Journal(0);
var index = UO.LineIndex();
if (Truth(index < 0))
{
UO.Print("No record");
}
else
{
UO.Print("Text length: " + Convert.ToString(Len(text)));
}
return null;
}
int Len(object? value) => Convert.ToString(value)?.Length ?? 0;
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。
參數: index (Any/Integer)
結果: string / Any.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.GetJournalText:GetJournalText(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
內部實作程式碼,不能作為獨立腳本執行。
case "journal": return new InjectionValue(GetJournalText(Arg(0)));參數: index (Any/Integer)
結果: string / String.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.GetJournalText. -
InjectionScript.Runtime.InjectionApiUO.SelectJournalEntry:SelectJournalEntry(ReadJournalSnapshot(index)). -
InjectionScript.Runtime.InjectionApiUO.ReadJournalSnapshot:ReadJournalSnapshot(index).
內部實作程式碼,不能作為獨立腳本執行。
public string GetJournalText(int index)
{
SelectJournalEntry(ReadJournalSnapshot(index));
return selectedJournalEntry?.Text ?? string.Empty;
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
string UO.JournalColor(object? index);讀取目前索引處行的 hue 字段,而不更改所選條目。
-
index- 必填 int - 目前索引:0 表示最新行,1 - 上一行。當訊息到達時索引會移動。這不是serial,也不是ID模式的變體,也不是InJournal的正結果。
string - UO hue 為 0x0044;若索引0x0000不正確。這不是RGB。
- 每次呼叫都會讀取目前位置。為了使相同記錄的文字和欄位保持一致,首先是 Journal(index),然後是 GetFoundedText/Line*。空值可能是真實資料。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
var result = UO.JournalColor(0);
UO.Print("JournalColor: " + Convert.ToString(result));參數與執行流程:
- 0 是新行的索引。檢查緩衝區是否存在。
- string - UO hue 為 0x0044;若索引0x0000不正確。這不是RGB。
if (Truth(UO.HighJournal() >= 0))
{
var value = UO.JournalColor(0);
UO.Print(Convert.ToString(value));
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;參數與執行流程:
- 1是上一行,不是serial=1。
- 搜尋選擇的條目GetFoundedText/Line* 不會更改。
return RunScenario();
object? RunScenario()
{
if (Truth(UO.HighJournal() >= 1))
{
var value = UO.JournalColor(1);
UO.Print(Convert.ToString(value));
}
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 在呼叫時複製該欄位。等待不會更新變數。
- 如需再次讀取目前行0,請再次呼叫該指令;這可能已經是另一個條目了。
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
var value = UO.JournalColor(0);
UO.Wait(100);
UO.Print("Saved value: " + Convert.ToString(value));
return null;
}
}C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。
參數: index (Integer)
結果: string / String.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.JournalColor. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.JournalColor:bridge.JournalColor(index).
內部實作程式碼,不能作為獨立腳本執行。
public string JournalColor(int index) => bridge.JournalColor(index);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
string UO.JournalSerial(object? index);讀取目前索引處行的 serial 字段,而不更改所選條目。
-
index- 必填 int - 目前索引:0 表示最新行,1 - 上一行。當訊息到達時索引會移動。這不是serial,也不是ID模式的變體,也不是InJournal的正結果。
作者的string - serial 為0x00001234;若索引0x00000000不正確。
- 每次呼叫都會讀取目前位置。為了使相同記錄的文字和欄位保持一致,首先是 Journal(index),然後是 GetFoundedText/Line*。空值可能是真實資料。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
var result = UO.JournalSerial(0);
UO.Print("JournalSerial: " + Convert.ToString(result));參數與執行流程:
- 0 是新行的索引。檢查緩衝區是否存在。
- 作者的string - serial 為0x00001234;若索引0x00000000不正確。
if (Truth(UO.HighJournal() >= 0))
{
var value = UO.JournalSerial(0);
UO.Print(Convert.ToString(value));
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;參數與執行流程:
- 1是上一行,不是serial=1。
- 搜尋選擇的條目GetFoundedText/Line* 不會更改。
return RunScenario();
object? RunScenario()
{
if (Truth(UO.HighJournal() >= 1))
{
var value = UO.JournalSerial(1);
UO.Print(Convert.ToString(value));
}
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 在呼叫時複製該欄位。等待不會更新變數。
- 如需再次讀取目前行0,請再次呼叫該指令;這可能已經是另一個條目了。
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
var value = UO.JournalSerial(0);
UO.Wait(100);
UO.Print("Saved value: " + Convert.ToString(value));
return null;
}
}C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。
參數: index (Integer)
結果: string / String.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.JournalSerial. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.JournalSerial:bridge.JournalSerial(index).
內部實作程式碼,不能作為獨立腳本執行。
public string JournalSerial(int index) => bridge.JournalSerial(index);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.JournalTimer(object? index);讀取目前索引處的行的時間戳字段,而不更改所選條目。
-
index- 必填 int - 目前索引:0 表示最新行,1 - 上一行。當訊息到達時索引會移動。這不是serial,也不是ID模式的變體,也不是InJournal的正結果。
int — 從運行時開始以毫秒為單位記錄標籤,與 Now() 相容。 0 用於運行前錄製; -1 無效索引/時間。這不是記錄的時代,也不是十分之一秒UO.Timer()。
- 每次呼叫都會讀取目前位置。為了使相同記錄的文字和欄位保持一致,首先是 Journal(index),然後是 GetFoundedText/Line*。空值可能是真實資料。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
var result = UO.JournalTimer(0);
UO.Print("JournalTimer: " + Convert.ToString(result));參數與執行流程:
- 0 是新行的索引。檢查緩衝區是否存在。
- int — 從運行時開始以毫秒為單位記錄標籤,與 Now() 相容。 0 用於運行前錄製; -1 無效索引/時間。這不是記錄的時代,也不是十分之一秒UO.Timer()。
if (Truth(UO.HighJournal() >= 0))
{
var value = UO.JournalTimer(0);
UO.Print(Convert.ToString(value));
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;參數與執行流程:
- 1是上一行,不是serial=1。
- 搜尋選擇的條目GetFoundedText/Line* 不會更改。
return RunScenario();
object? RunScenario()
{
if (Truth(UO.HighJournal() >= 1))
{
var value = UO.JournalTimer(1);
UO.Print(Convert.ToString(value));
}
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 在呼叫時複製該欄位。等待不會更新變數。
- 如需再次讀取目前行0,請再次呼叫該指令;這可能已經是另一個條目了。
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
var value = UO.JournalTimer(0);
UO.Wait(100);
UO.Print("Saved value: " + Convert.ToString(value));
return null;
}
}C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。
參數: index (Integer)
結果: int / Integer.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.JournalTimer. -
InjectionScript.Runtime.InjectionApiUO.JournalEntryTime:JournalEntryTime(index).
內部實作程式碼,不能作為獨立腳本執行。
public int JournalTimer(int index) => JournalEntryTime(index);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.LastJournalMessage();讀取最新本機日誌條目的文字。
沒有參數。
string — 新條目的文本;如果沒有日誌或條目本身包含空文本,則為空字串。
- 搜尋並Journal/GetJournal/LastJournalMessage儲存目前腳本中單一條目的文字和欄位。新訊息不會取代這些欄位。如果一筆記錄被從有限日誌中逐出,則保留的欄位仍然存在,但LineIndex/GetFoundedTextIndex返回-1。下一次搜尋或讀取會選擇另一個條目;不成功的搜尋、無效的索引以及透過此腳本清除都會重設選擇。
- 以與 Journal(0) 相同的方式更新行* 選擇和欄位。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
object? result = UO.LastJournalMessage();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));參數與執行流程:
- 沒有爭論; text 複製目前的最後一行。
- 閱讀後的列印本身可能成為最後一條訊息。
var text = UO.LastJournalMessage();
UO.Print(text);參數與執行流程:
- FindText 回傳1 或0 的位置。僅檢查最後一行。
- 若要搜尋整個日誌,請使用InJournal。
return RunScenario();
object? RunScenario()
{
var text = UO.LastJournalMessage();
if (Truth(FindText(text, "bank") > 0))
{
UO.Print("Text contains bank");
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
int FindText(object? text, object? value) => (Convert.ToString(text) ?? "").IndexOf(Convert.ToString(value) ?? "", StringComparison.Ordinal) + 1;
int FindText(int start, object? text, object? value)
{
string input = Convert.ToString(text) ?? "";
return input.IndexOf(Convert.ToString(value) ?? "", Math.Clamp(start - 1, 0, input.Length), StringComparison.Ordinal) + 1;
}參數與執行流程:
- 匹配的內容會保存到最新的讀取為止,因此它不會隨著新的選擇而改變。
- 最後一則訊息可能與找到的訊息不同; found > 0 表示尋找成功。
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
var found = UO.InJournal("needle");
var matched = UO.GetFoundedText();
var latest = UO.LastJournalMessage();
UO.Print("Found: " + matched);
UO.Print("Latest: " + latest);
return null;
}
}C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。
參數: 沒有參數。
結果: dynamic / Any.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.GetJournalText:GetJournalText(0).
內部實作程式碼,不能作為獨立腳本執行。
case "lastjournalmessage": return new InjectionValue(GetJournalText(0));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
string UO.LastMessage();讀取最新本機日誌條目的文字。
沒有參數。
string — 新條目的文本;如果沒有日誌或條目本身包含空文本,則為空字串。
- 該 getter 讀取新條目,但保留舊選擇 GetFoundedText/Line*。若要選擇最後一個條目,請使用 LastJournalMessage 或 Journal(0)。
- 主目錄: https://forum.yoko.com.ua/viewtopic.php?p=27633 .
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
var result = UO.LastMessage();
UO.Print("LastMessage: " + Convert.ToString(result));參數與執行流程:
- 沒有爭論; text 複製目前的最後一行。
- 閱讀後的列印本身可能成為最後一條訊息。
var text = UO.LastMessage();
UO.Print(text);參數與執行流程:
- FindText 回傳1 或0 的位置。僅檢查最後一行。
- 若要搜尋整個日誌,請使用InJournal。
return RunScenario();
object? RunScenario()
{
var text = UO.LastMessage();
if (Truth(FindText(text, "bank") > 0))
{
UO.Print("Text contains bank");
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
int FindText(object? text, object? value) => (Convert.ToString(text) ?? "").IndexOf(Convert.ToString(value) ?? "", StringComparison.Ordinal) + 1;
int FindText(int start, object? text, object? value)
{
string input = Convert.ToString(text) ?? "";
return input.IndexOf(Convert.ToString(value) ?? "", Math.Clamp(start - 1, 0, input.Length), StringComparison.Ordinal) + 1;
}參數與執行流程:
- 匹配的內容會保存到最新的讀取為止,因此它不會隨著新的選擇而改變。
- 最後一則訊息可能與找到的訊息不同; found > 0 表示尋找成功。
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
var found = UO.InJournal("needle");
var matched = UO.GetFoundedText();
var latest = UO.LastMessage();
UO.Print("Found: " + matched);
UO.Print("Latest: " + latest);
return null;
}
}C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。
參數: 沒有參數。
結果: string / String.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.LastMessage. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.LastMessage:bridge.LastMessage().
內部實作程式碼,不能作為獨立腳本執行。
public string LastMessage() => bridge.LastMessage();Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.LineCount();讀取上次搜尋中符合的行數。
沒有參數。
int是最後檢查區域中匹配記錄的數量。 0 如果沒有匹配項;對於newestOnly=true不超過1。這不是整個日誌中的行數,也不是一則訊息中子字串出現的次數,也不是找到的文字的位置。
- 搜尋考慮限制、時間、serial、hue 和單一參數SetJournalLine。直接Journal/GetJournal不會重新計算計數器。清潔會重置它。該計數器屬於目前腳本的橋。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
object? result = UO.LineCount();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));參數與執行流程:
- 無限制搜尋並註冊。計算的是線數,而不是線內礦石的數量。
- 結果-位置加上1;匹配 - 單獨的數量。
var result = UO.InJournal("ore", -1);
var matches = UO.LineCount();
UO.Print(Convert.ToString(matches));參數與執行流程:
- 10-要檢查的最大行數;情況被考慮。
- 計數範圍可以從 0 到 10,即使還有更多較舊的匹配。
return RunScenario();
object? RunScenario()
{
var result = UO.InJournal("ore", 10);
UO.Print(Convert.ToString(UO.LineCount()));
return null;
}參數與執行流程:
- serial/color=-1, time=0/0 — 過濾器已停用。 true 在第一個符合行處停止搜尋。
- checkedMatches等於0或1,並不表示整個日誌中的總匹配。
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 result = UO.InJournal("ore", -1, -1, 0, 0, true, false);
var checkedMatches = UO.LineCount();
UO.Print(Convert.ToString(checkedMatches));
return null;
}
}C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。
參數: 沒有參數。
結果: dynamic / Any.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.JournalMatchCount:bridge.JournalMatchCount().
內部實作程式碼,不能作為獨立腳本執行。
case "linecount": return new InjectionValue(bridge.JournalMatchCount());Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.LineID();返回所選日記條目作者的數字 serial。
沒有參數。
作者的int - 32位serial。別無選擇 - 0。由於有符號int,最高有效位可能會導致負數; GetFoundedTextSerial 保留完整的十六進位表示。這不是graphic/type。
- 搜尋並Journal/GetJournal/LastJournalMessage儲存目前腳本中單一條目的文字和欄位。新訊息不會取代這些欄位。如果一筆記錄被從有限日誌中逐出,則保留的欄位仍然存在,但LineIndex/GetFoundedTextIndex返回-1。下一次搜尋或讀取會選擇另一個條目;不成功的搜尋、無效的索引以及透過此腳本清除都會重設選擇。
- Getter 不會執行搜尋並選擇最新行。 Null/空值可能是有效資料;考慮搜尋結果。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
object? result = UO.LineID();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));參數與執行流程:
- 通知 - 搜尋文字的範例。僅在成功搜尋後才會呼叫不帶參數的 Getter。
- 作者的int - 32位serial。別無選擇 - 0。由於有符號int,最高有效位可能會導致負數; GetFoundedTextSerial 保留完整的十六進位表示。這不是graphic/type。
if (Truth(UO.InJournal("notice") > 0))
{
var value = UO.LineID();
UO.Print("Speaker serial: " + Convert.ToString(value));
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;參數與執行流程:
- Journal(0) 選擇一個新條目。索引和值讀取到Print。
- 索引檢查可讓您區分不存在記錄和有效的 null 或空白欄位。
return RunScenario();
object? RunScenario()
{
var text = UO.Journal(0);
var index = UO.LineIndex();
var value = UO.LineID();
if (Truth(index >= 0))
{
UO.Print(Convert.ToString(value));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;參數與執行流程:
- 第一次搜尋選擇成功,第二次搜尋取代或重置選擇。已儲存已包含必填欄位的副本。
- 儲存的var不會隨著新的搜尋、清除或接收訊息而改變。
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
if (Truth(UO.InJournal("success") > 0))
{
var saved = UO.LineID();
var nextMatch = UO.InJournal("failed");
UO.Print("Saved: " + Convert.ToString(saved));
}
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。
參數: 沒有參數。
結果: dynamic / Any.
呼叫時:
內部實作程式碼,不能作為獨立腳本執行。
case "lineid": return new InjectionValue(selectedJournalEntry?.Serial ?? 0);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.LineIndex();如果所選條目仍儲存在日誌中,則傳回該條目的目前索引。
沒有參數。
int 是0(最新行)的目前索引。 -1表示沒有選擇或所選條目已被刪除/驅逐。這不是InJournal的結果:1不需要從索引中減去。
- 搜尋並Journal/GetJournal/LastJournalMessage儲存目前腳本中單一條目的文字和欄位。新訊息不會取代這些欄位。如果一筆記錄被從有限日誌中逐出,則保留的欄位仍然存在,但LineIndex/GetFoundedTextIndex返回-1。下一次搜尋或讀取會選擇另一個條目;不成功的搜尋、無效的索引以及透過此腳本清除都會重設選擇。
- 索引是根據記錄的身份重新計算的。新消息會增加它。舊存儲的索引不是常數ID;對於文本,GetFoundedText更安全。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
object? result = UO.LineIndex();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));參數與執行流程:
- 不含參數的 Getter 會讀取目前腳本的選擇。 0 — 新行,-1 — 目前緩衝區中沒有行。
- 該文字取自已儲存的條目,因此新訊息不會取代它。
if (Truth(UO.InJournal("notice") > 0))
{
var index = UO.LineIndex();
var text = UO.GetFoundedText();
UO.Print(Convert.ToString(index) + ": " + text);
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;參數與執行流程:
- Journal(0)選擇最後一條;檢查排除空日誌。
- 有效條目允許使用空白文字。
return RunScenario();
object? RunScenario()
{
var text = UO.Journal(0);
if (Truth(UO.LineIndex() >= 0))
{
UO.Print(text);
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;參數與執行流程:
- 等待 100 毫秒允許新訊息到達。再次找到相同的條目後。
- 刪除後可能會增加或變為-1; GetFoundedText 仍包含已儲存的文字。
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
if (Truth(UO.InJournal("needle") > 0))
{
var before = UO.LineIndex();
UO.Wait(100);
var after = UO.LineIndex();
UO.Print(Convert.ToString(before) + " -> " + Convert.ToString(after));
}
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。
參數: 沒有參數。
結果: dynamic / Any.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.GetFoundedTextIndex:GetFoundedTextIndex().
內部實作程式碼,不能作為獨立腳本執行。
case "lineindex": return new InjectionValue(GetFoundedTextIndex());Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.LineMsgType();傳回所選日誌條目的網路訊息類型。
沒有參數。
int — 程式碼 MessageType: 0 Regular, 1 System, 2 Emote, 3 Limit3Spell, 6 Label, 7 Focus, 8 Whisper, 9 Yell, 10 Spell, 13 Guild, 14 Alliance, 15 Command, 16 GmChat, 192 Encoded, 255 派對。別無選擇 0。這些是經典代碼 UO;請勿使用第三方範例中的不同數字來取代它們。
- 搜尋並Journal/GetJournal/LastJournalMessage儲存目前腳本中單一條目的文字和欄位。新訊息不會取代這些欄位。如果一筆記錄被從有限日誌中逐出,則保留的欄位仍然存在,但LineIndex/GetFoundedTextIndex返回-1。下一次搜尋或讀取會選擇另一個條目;不成功的搜尋、無效的索引以及透過此腳本清除都會重設選擇。
- Getter 不會執行搜尋並選擇最新行。 Null/空值可能是有效資料;考慮搜尋結果。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
object? result = UO.LineMsgType();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));參數與執行流程:
- 通知 - 搜尋文字的範例。僅在成功搜尋後才會呼叫不帶參數的 Getter。
- int — 程式碼 MessageType: 0 Regular, 1 System, 2 Emote, 3 Limit3Spell, 6 Label, 7 Focus, 8 Whisper, 9 Yell, 10 Spell, 13 Guild, 14 Alliance, 15 Command, 16 GmChat, 192 Encoded, 255 派對。別無選擇 0。這些是經典代碼 UO;請勿使用第三方範例中的不同數字來取代它們。
if (Truth(UO.InJournal("notice") > 0))
{
var value = UO.LineMsgType();
UO.Print("Message type: " + Convert.ToString(value));
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;參數與執行流程:
- Journal(0) 選擇一個新條目。索引和值讀取到Print。
- 索引檢查可讓您區分不存在記錄和有效的 null 或空白欄位。
return RunScenario();
object? RunScenario()
{
var text = UO.Journal(0);
var index = UO.LineIndex();
var value = UO.LineMsgType();
if (Truth(index >= 0))
{
UO.Print(Convert.ToString(value));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;參數與執行流程:
- 第一次搜尋選擇成功,第二次搜尋取代或重置選擇。已儲存已包含必填欄位的副本。
- 儲存的var不會隨著新的搜尋、清除或接收訊息而改變。
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
if (Truth(UO.InJournal("success") > 0))
{
var saved = UO.LineMsgType();
var nextMatch = UO.InJournal("failed");
UO.Print("Saved: " + Convert.ToString(saved));
}
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。
參數: 沒有參數。
結果: dynamic / Any.
呼叫時:
內部實作程式碼,不能作為獨立腳本執行。
case "linemsgtype": return new InjectionValue(selectedJournalEntry?.MessageType ?? 0);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.LineName();返回所選日記條目的作者姓名。
沒有參數。
string — 所選條目的作者姓名,例如 System 或角色的姓名;沒有選擇/沒有名稱的空字串。名稱並不能保證角色的唯一性。
- 搜尋並Journal/GetJournal/LastJournalMessage儲存目前腳本中單一條目的文字和欄位。新訊息不會取代這些欄位。如果一筆記錄被從有限日誌中逐出,則保留的欄位仍然存在,但LineIndex/GetFoundedTextIndex返回-1。下一次搜尋或讀取會選擇另一個條目;不成功的搜尋、無效的索引以及透過此腳本清除都會重設選擇。
- Getter 不會執行搜尋並選擇最新行。 Null/空值可能是有效資料;考慮搜尋結果。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
object? result = UO.LineName();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));參數與執行流程:
- 通知 - 搜尋文字的範例。僅在成功搜尋後才會呼叫不帶參數的 Getter。
- string — 所選條目的作者姓名,例如 System 或角色的姓名;沒有選擇/沒有名稱的空字串。名稱並不能保證角色的唯一性。
if (Truth(UO.InJournal("notice") > 0))
{
var value = UO.LineName();
UO.Print("Speaker: " + Convert.ToString(value));
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;參數與執行流程:
- Journal(0) 選擇一個新條目。索引和值讀取到Print。
- 索引檢查可讓您區分不存在記錄和有效的 null 或空白欄位。
return RunScenario();
object? RunScenario()
{
var text = UO.Journal(0);
var index = UO.LineIndex();
var value = UO.LineName();
if (Truth(index >= 0))
{
UO.Print(Convert.ToString(value));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;參數與執行流程:
- 第一次搜尋選擇成功,第二次搜尋取代或重置選擇。已儲存已包含必填欄位的副本。
- 儲存的var不會隨著新的搜尋、清除或接收訊息而改變。
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
if (Truth(UO.InJournal("success") > 0))
{
var saved = UO.LineName();
var nextMatch = UO.InJournal("failed");
UO.Print("Saved: " + Convert.ToString(saved));
}
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。
參數: 沒有參數。
結果: dynamic / Any.
呼叫時:
內部實作程式碼,不能作為獨立腳本執行。
case "linename": return new InjectionValue(selectedJournalEntry?.Name ?? string.Empty);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.LineTextColor();傳回所選日誌條目的數字顏色。
沒有參數。
所選條目的int - UO hue(0…65535);沒有選擇0。零作為顏色是可以接受的。這不是作者的RGB或ID。
- 搜尋並Journal/GetJournal/LastJournalMessage儲存目前腳本中單一條目的文字和欄位。新訊息不會取代這些欄位。如果一筆記錄被從有限日誌中逐出,則保留的欄位仍然存在,但LineIndex/GetFoundedTextIndex返回-1。下一次搜尋或讀取會選擇另一個條目;不成功的搜尋、無效的索引以及透過此腳本清除都會重設選擇。
- Getter 不會執行搜尋並選擇最新行。 Null/空值可能是有效資料;考慮搜尋結果。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
object? result = UO.LineTextColor();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));參數與執行流程:
- 通知 - 搜尋文字的範例。僅在成功搜尋後才會呼叫不帶參數的 Getter。
- 所選條目的int - UO hue(0…65535);沒有選擇0。零作為顏色是可以接受的。這不是作者的RGB或ID。
if (Truth(UO.InJournal("notice") > 0))
{
var value = UO.LineTextColor();
UO.Print("Hue: " + Convert.ToString(value));
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;參數與執行流程:
- Journal(0) 選擇一個新條目。索引和值讀取到Print。
- 索引檢查可讓您區分不存在記錄和有效的 null 或空白欄位。
return RunScenario();
object? RunScenario()
{
var text = UO.Journal(0);
var index = UO.LineIndex();
var value = UO.LineTextColor();
if (Truth(index >= 0))
{
UO.Print(Convert.ToString(value));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;參數與執行流程:
- 第一次搜尋選擇成功,第二次搜尋取代或重置選擇。已儲存已包含必填欄位的副本。
- 儲存的var不會隨著新的搜尋、清除或接收訊息而改變。
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
if (Truth(UO.InJournal("success") > 0))
{
var saved = UO.LineTextColor();
var nextMatch = UO.InJournal("failed");
UO.Print("Saved: " + Convert.ToString(saved));
}
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。
參數: 沒有參數。
結果: dynamic / Any.
呼叫時:
內部實作程式碼,不能作為獨立腳本執行。
case "linetextcolor":
return new InjectionValue(selectedJournalEntry?.Color ?? 0);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.LineTextFont();傳回所選日誌條目的字型。
沒有參數。
int — 所選記錄的UO字體ID(客戶端中為0…255);沒有選擇0。這是ID遊戲字體,而不是IDE字體大小。
- 搜尋並Journal/GetJournal/LastJournalMessage儲存目前腳本中單一條目的文字和欄位。新訊息不會取代這些欄位。如果一筆記錄被從有限日誌中逐出,則保留的欄位仍然存在,但LineIndex/GetFoundedTextIndex返回-1。下一次搜尋或讀取會選擇另一個條目;不成功的搜尋、無效的索引以及透過此腳本清除都會重設選擇。
- Getter 不會執行搜尋並選擇最新行。 Null/空值可能是有效資料;考慮搜尋結果。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
object? result = UO.LineTextFont();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));參數與執行流程:
- 通知 - 搜尋文字的範例。僅在成功搜尋後才會呼叫不帶參數的 Getter。
- int — 所選記錄的UO字體ID(客戶端中為0…255);沒有選擇0。這是ID遊戲字體,而不是IDE字體大小。
if (Truth(UO.InJournal("notice") > 0))
{
var value = UO.LineTextFont();
UO.Print("Font ID: " + Convert.ToString(value));
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;參數與執行流程:
- Journal(0) 選擇一個新條目。索引和值讀取到Print。
- 索引檢查可讓您區分不存在記錄和有效的 null 或空白欄位。
return RunScenario();
object? RunScenario()
{
var text = UO.Journal(0);
var index = UO.LineIndex();
var value = UO.LineTextFont();
if (Truth(index >= 0))
{
UO.Print(Convert.ToString(value));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;參數與執行流程:
- 第一次搜尋選擇成功,第二次搜尋取代或重置選擇。已儲存已包含必填欄位的副本。
- 儲存的var不會隨著新的搜尋、清除或接收訊息而改變。
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
if (Truth(UO.InJournal("success") > 0))
{
var saved = UO.LineTextFont();
var nextMatch = UO.InJournal("failed");
UO.Print("Saved: " + Convert.ToString(saved));
}
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。
參數: 沒有參數。
結果: dynamic / Any.
呼叫時:
內部實作程式碼,不能作為獨立腳本執行。
case "linetextfont": return new InjectionValue(selectedJournalEntry?.Font ?? 0);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.LineTime();傳回所選日誌條目的日曆時間戳記。
沒有參數。
double — OLE 自動化 Date,距離 30.12.1899 的天數,小數部分指定一天中的時間。沒得選0。它不是 Now() 毫秒或整個 Unix 時間戳。兩個這樣的標記差乘以86400000,即毫秒。
- 搜尋並Journal/GetJournal/LastJournalMessage儲存目前腳本中單一條目的文字和欄位。新訊息不會取代這些欄位。如果一筆記錄被從有限日誌中逐出,則保留的欄位仍然存在,但LineIndex/GetFoundedTextIndex返回-1。下一次搜尋或讀取會選擇另一個條目;不成功的搜尋、無效的索引以及透過此腳本清除都會重設選擇。
- Getter 不會執行搜尋並選擇最新行。 Null/空值可能是有效資料;考慮搜尋結果。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
object? result = UO.LineTime();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));參數與執行流程:
- 通知 - 搜尋文字的範例。僅在成功搜尋後才會呼叫不帶參數的 Getter。
- double — OLE 自動化 Date,距離 30.12.1899 的天數,小數部分指定一天中的時間。沒得選0。它不是 Now() 毫秒或整個 Unix 時間戳。兩個這樣的標記差乘以86400000,即毫秒。
if (Truth(UO.InJournal("notice") > 0))
{
var value = UO.LineTime();
UO.Print("OLE date: " + Convert.ToString(value));
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;參數與執行流程:
- Journal(0) 選擇一個新條目。索引和值讀取到Print。
- 索引檢查可讓您區分不存在記錄和有效的 null 或空白欄位。
return RunScenario();
object? RunScenario()
{
var text = UO.Journal(0);
var index = UO.LineIndex();
var value = UO.LineTime();
if (Truth(index >= 0))
{
UO.Print(Convert.ToString(value));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;參數與執行流程:
- 第一次搜尋選擇成功,第二次搜尋取代或重置選擇。已儲存已包含必填欄位的副本。
- 儲存的var不會隨著新的搜尋、清除或接收訊息而改變。
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
if (Truth(UO.InJournal("success") > 0))
{
var saved = UO.LineTime();
var nextMatch = UO.InJournal("failed");
UO.Print("Saved: " + Convert.ToString(saved));
}
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。
參數: 沒有參數。
結果: dynamic / Any.
呼叫時:
內部實作程式碼,不能作為獨立腳本執行。
case "linetime": return new InjectionValue(selectedJournalEntry?.Timestamp ?? 0d);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.LineType();傳回所選日誌條目的文字類別。
沒有參數。
int - 類別 TextType 客戶: 0 CLIENT, 1 SYSTEM, 2 OBJECT, 3 GUILD_ALLY。別無選擇 0。這是一個顯示類別,而不是 serial, 不是 graphic 沒有 MessageType.
- 搜尋並Journal/GetJournal/LastJournalMessage儲存目前腳本中單一條目的文字和欄位。新訊息不會取代這些欄位。如果一筆記錄被從有限日誌中逐出,則保留的欄位仍然存在,但LineIndex/GetFoundedTextIndex返回-1。下一次搜尋或讀取會選擇另一個條目;不成功的搜尋、無效的索引以及透過此腳本清除都會重設選擇。
- Getter 不會執行搜尋並選擇最新行。 Null/空值可能是有效資料;考慮搜尋結果。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
object? result = UO.LineType();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));參數與執行流程:
- 通知 - 搜尋文字的範例。僅在成功搜尋後才會呼叫不帶參數的 Getter。
- int - 類別 TextType 客戶: 0 CLIENT, 1 SYSTEM, 2 OBJECT, 3 GUILD_ALLY。別無選擇 0。這是一個顯示類別,而不是 serial, 不是 graphic 沒有 MessageType.
if (Truth(UO.InJournal("notice") > 0))
{
var value = UO.LineType();
UO.Print("Text category: " + Convert.ToString(value));
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;參數與執行流程:
- Journal(0) 選擇一個新條目。索引和值讀取到Print。
- 索引檢查可讓您區分不存在記錄和有效的 null 或空白欄位。
return RunScenario();
object? RunScenario()
{
var text = UO.Journal(0);
var index = UO.LineIndex();
var value = UO.LineType();
if (Truth(index >= 0))
{
UO.Print(Convert.ToString(value));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;參數與執行流程:
- 第一次搜尋選擇成功,第二次搜尋取代或重置選擇。已儲存已包含必填欄位的副本。
- 儲存的var不會隨著新的搜尋、清除或接收訊息而改變。
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
if (Truth(UO.InJournal("success") > 0))
{
var saved = UO.LineType();
var nextMatch = UO.InJournal("failed");
UO.Print("Saved: " + Convert.ToString(saved));
}
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。
參數: 沒有參數。
結果: dynamic / Any.
呼叫時:
內部實作程式碼,不能作為獨立腳本執行。
case "linetype": return new InjectionValue(selectedJournalEntry?.TextType ?? 0);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.LowJournal();傳回最小可用日誌索引。
沒有參數。
int:-1當彈匣空時;否則0是最新可用記錄的索引。 Journal/GetJournal從新記錄到舊記錄使用零索引;陽性結果 InJournal 使用不同的單次計數。
- 新消息和清潔改變了界限。這裡的順序是從新條目到舊條目的 Journal(0)。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
object? result = UO.LowJournal();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));參數與執行流程:
- 負邊界意味著緩衝區為空。
- 如果緩衝區不為空,Journal(0) 會讀取一個新條目。
if (Truth(UO.LowJournal() >= 0))
{
var text = UO.Journal(0);
UO.Print(text);
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;參數與執行流程:
- index 直接傳遞給 Journal,不減一。
- 此索引可能會隨著傳入訊息而變化;緩衝區在呼叫之間不會凍結。
return RunScenario();
object? RunScenario()
{
var index = UO.LowJournal();
if (Truth(index >= 0))
{
var text = UO.Journal(index);
UO.Print(text);
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;參數與執行流程:
- LowJournal 和 HighJournal 形成索引的邊界。這不是行數;而是行數。日誌內容可能會在呼叫之間發生變化。
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()
{
int first = UO.LowJournal();
int last = UO.HighJournal();
if (first > last)
return null;
for (int index = first; index <= last; index++)
UO.Print($"{index}: {UO.Journal(index)}");
return null;
}
}C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。
參數: 沒有參數。
結果: dynamic / Any.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.JournalEntryCount:bridge.JournalEntryCount().
內部實作程式碼,不能作為獨立腳本執行。
case "lowjournal": return new InjectionValue(bridge.JournalEntryCount() == 0 ? -1 : 0);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.SetJournalLine(object? index);
void UO.SetJournalLine(object? stringIndex, object? text);更改一行文字;一種單獨的單一參數形式指定搜尋的下限。
-
index— 對於表單(索引,文字):0 中的目前索引,其中 0 是新行。對於表單(索引):從內部緩衝區開頭跳過的舊行數,而不是索引Journal; 0 取消限制。負的單一參數界限僅限於 0。 -
stringIndex— 相容的雙參數日誌記錄中的索引名稱:0 中的目前索引 Journal。 -
text— 現有行的新文本,包括空白行。需採用文字替換形式。
void - 無回傳值。如果索引無效,則雙參數形式不會改變任何內容。單參數形式不會更改文字。
- 替換是本地的,沒有任何內容發送到伺服器。保留作者/時間欄位。已選擇的文字快照保持不變,直到Journal或重複搜尋。
- 單參數綁定是一種已棄用的擴展:當前緩衝區中舊行的數量;當記錄被驅逐/刪除時,其含義就會發生變化。對於操作之間的可靠邊界,請使用 InJournalBetweenTimes 現在()。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
指令是獨立的陳述式。前面的訊息表示呼叫開始,並非伺服器已完成動作的確認。
UO.Print("Calling UO.SetJournalLine");
UO.SetJournalLine(0);參數與執行流程:
- 0 — 新線;第二個參數是新的全文。
- 這會更改本地緩衝區。在讀取和寫入之間,可能會有新訊息到達;索引不是常數ID。
if (Truth(UO.HighJournal() >= 0))
{
var text = UO.Journal(0);
UO.SetJournalLine(0, "[read] " + text);
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;參數與執行流程:
- 空白行會取代文本,但不會刪除條目或其作者。
- 跳過無效索引。即使使用 text="",exists 也可以是 true。
return RunScenario();
object? RunScenario()
{
UO.SetJournalLine(0, "");
var text = UO.Journal(0);
var exists = UO.LineIndex() >= 0;
UO.Print(Convert.ToString(exists));
return null;
}參數與執行流程:
- 一個參數 0 表示不要跳過舊行;這是指令的另一種形式。
- 搜尋不受限制且不區分大小寫。此表格不取代任何文字。
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
UO.SetJournalLine(0);
var found = UO.InJournal("notice", -1);
UO.Print(Convert.ToString(found));
return null;
}
}C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。
參數: index (Integer)
結果: void / Unit.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.SetJournalLine. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetJournalLine:bridge.SetJournalLine(index).
內部實作程式碼,不能作為獨立腳本執行。
public void SetJournalLine(int index) => bridge.SetJournalLine(index);參數: stringIndex (Any/Integer), text (Any/String)
結果: void / Unit.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetJournalLine:bridge.SetJournalLine(Arg(0), Text(1)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(1). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetJournalLine:bridge.SetJournalLine(Arg(0)).
內部實作程式碼,不能作為獨立腳本執行。
case "setjournalline":
if (arguments.Length > 1) bridge.SetJournalLine(Arg(0), Text(1));
else bridge.SetJournalLine(Arg(0));
return InjectionValue.Unit;參數: stringIndex (Any/Integer), text (Any/String)
結果: void / Unit.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.SetJournalLine. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetJournalLine:bridge.SetJournalLine(index, text).
內部實作程式碼,不能作為獨立腳本執行。
public void SetJournalLine(int index, string text) => bridge.SetJournalLine(index, text);