Repository navigation
UO Topic journal
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
Головна · C# · IDE · Команди UO · За абеткою · Приклади · Мови
Пошук і очікування повідомлень у журналі, читання тексту, кольору, часу й автора рядка. Перед очікуваною дією позначайте початок потрібного інтервалу, щоб не прийняти старе повідомлення за новий результат.
| Тема | Команди та пояснення |
|---|---|
| Журнал | UO.Journal |
| Пошук у журналі | UO.InJournal |
| Пошук за інтервалом часу | UO.InJournalBetweenTimes |
| Очікування рядка | UO.WaitJournalLine |
| Системний журнал | UO.AddToSystemJournal · UO.AddToSystemJournalEx · UO.ClearSystemJournal · UO.WaitJournalLineSystem |
| Ігнорування повідомлень | UO.AddJournalIgnore · UO.ClearJournalIgnore |
| Колір рядка | UO.JournalColor · UO.GetJournalColor |
| Ідентифікатор автора | UO.JournalSerial · UO.GetJournalSerial |
| Час рядка | UO.JournalTimer |
| Знайдений текст | 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 та функції очікування надає host поточної ігрової сесії. Демонстраційні 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. У загальному журналі менеджера увімкніть фільтр повідомлень скриптів (script): запис доступний і без вікна. Фільтр серверних системних повідомлень (system) такі записи не вибирає. Мережевий пакет мови не надсилається. Для напису над головою є UO.CharPrint.
-
UO.Printдодає новий запис до журналу ігрових повідомлень: спочатку прочитайте або збережіть потрібний рядок/результат пошуку, а потім запишіть діагностичне повідомлення. У швидкому циклі записуйте повідомлення за змін, а не на кожній ітерації. - Використовується колір системних повідомлень даного скриптового runtime: спочатку 0x0440, змінюється UO.ConColor. Це локальний запис; Ім'я команди не означає надсилання серверу.
- UO.Print · UO.CharPrint · UO.Say · UO.ConColor
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні 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));Параметри та порядок виконання:
- Читаються вага та максимум персонажа. Нульовий/невідомий максимум не вважається перевантаженням. При weight >= maximum друкується один рядок та 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. У загальному журналі менеджера увімкніть фільтр повідомлень скриптів (script): запис доступний і без вікна. Фільтр серверних системних повідомлень (system) такі записи не вибирає. Мережевий пакет мови не надсилається. Для напису над головою є UO.CharPrint.
-
UO.Printдодає новий запис до журналу ігрових повідомлень: спочатку прочитайте або збережіть потрібний рядок/результат пошуку, а потім запишіть діагностичне повідомлення. У швидкому циклі записуйте повідомлення за змін, а не на кожній ітерації. - Використовується колір системних повідомлень даного скриптового runtime: спочатку 0x0440, змінюється UO.ConColor. Це локальний запис; Ім'я команди не означає надсилання серверу.
- UO.Print · UO.CharPrint · UO.Say · UO.ConColor
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні 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));Параметри та порядок виконання:
- Читаються вага та максимум персонажа. Нульовий/невідомий максимум не вважається перевантаженням. При weight >= maximum друкується один рядок та 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. Альфа-канал не використовується. Приклад 0xFF8800 - помаранчевий; двигун вибирає найближчий колір з палітри UO. -
bgColor- Негативне число - фон за замовчуванням; невід'ємне - RGB 0xRRGGBB. Запрошений фон записується у виведення IDE, але окремий кольоровий прямокутник за рядком у вікні не малюється. -
fontSize— Запитаний розмір у пунктах: значення <= 0 замінюється на 10, потім застосовується діапазон 4..72. Ігровий номер шрифту обчислюється цілочислово як (розмір + 1) / 3; Точного настільного розміру у вікні гри немає. -
fontName— Назва шрифту для запису відомостей про оформлення у висновок IDE. Прогалини по краях видаляються; порожнє значення означає Consolas. Довільний Windows-шрифт у вікно гри ця команда не завантажує.
Виклик методу з типом, що повертається void пишеться як самостійний оператор C#; привласнювати чи перевіряти результат не можна. Завершення оператора не є підтвердженням сервера.
- Усі п'ять аргументів обов'язкові: Text, TextColor, BGColor, ?FontSize?, ?FontName?. Текст видно локально, у IDE додатково зберігається запитане оформлення. Колір фону та ім'я шрифту є відомостями про оформлення, а не гарантією їх точного відтворення. ConColor не змінює явно переданий RGB.
- Повідомлення йде в нижню ліву область ігрового вікна та локальний журнал. Копія доступна у виведенні IDE. У загальному журналі менеджера увімкніть фільтр повідомлень скриптів (script): запис доступний і без вікна. Фільтр серверних системних повідомлень (system) такі записи не вибирає. Мережевий пакет мови не надсилається. Для напису над головою є UO.CharPrint.
- UO.Print · UO.CharPrint · UO.ClientPrintEx · UO.AddToSystemJournalEx
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні 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");Параметри та порядок виконання:
- Позитивне значення BGColor 0x112233 зберігає запит фону в 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. Runtime обмежує знизу до 1; JournalManager обмежує зверху Constants.MAX_JOURNAL_HISTORY_COUNT.
void - значення, що повертається немає.
- Зберігає state.JournalLength, потім викликає SetJournalLength. JournalManager зменшує існуючу історію, видаляючи найстаріші записи до нового ліміту. Відфільтровані записи та відображення журналу – окремі механізми.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні 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 та функції очікування надає host поточної ігрової сесії. Демонстраційні 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 та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Команда викликається окремим рядком. Повідомлення перед нею показує початок виклику, а не підтвердження дії сервера.
UO.Print("Calling UO.ClearJournalIgnore");
UO.ClearJournalIgnore();Параметри та порядок виконання:
- Видаляє всі текстові фільтри JournalManager.
UO.ClearJournalIgnore();Параметри та порядок виконання:
- Знову дозволити відображати текст You see.
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.
- System розпізнається на ім'я автора без урахування регістру; це фільтр загального журналу ClassicUO.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Команда викликається окремим рядком. Повідомлення перед нею показує початок виклику, а не підтвердження дії сервера.
UO.Print("Calling UO.ClearSystemJournal");
UO.ClearSystemJournal();Параметри та порядок виконання:
- Аргументів немає. Видаляються лише рядки System.
- Лічильник останнього пошуку стає 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 та функції очікування надає host поточної ігрової сесії. Демонстраційні 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;
}
}Параметри та порядок виконання:
- text містить два підрядки. Видаляються рядки з будь-якої з них без урахування регістру; решта повідомлень залишаються.
- 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 для success та 1 для failed. За кількох відповідних альтернатив береться перша в шаблоні. Без збігу або після прямого 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 та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
object? result = UO.FoundedParamId();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Параметри та порядок виконання:
- success - альтернатива 0, failed - альтернатива 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 альтернативи, тому outcome зберігається заздалегідь.
- Новий виклик getter після 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()
{
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 не запускає пошук і не вибирає найновіший рядок. Нульові/порожні значення можуть бути діючими даними; враховуйте результат пошуку.
- Первинний довідник: https://forum.yoko.com.ua/viewtopic.php?p=27633 .
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
var result = UO.GetFoundedText();
UO.Print("GetFoundedText: " + Convert.ToString(result));Параметри та порядок виконання:
- notice - приклад шуканого тексту. 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) вибирає новий запис. index та value читаються до Print.
- Перевірка index дозволяє відрізнити відсутність запису від допустимого нульового чи порожнього поля.
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;Параметри та порядок виконання:
- Перший пошук вибирає success, другий замінює чи скидає вибір. saved вже містить копію потрібного поля.
- Збережена 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 hex-цифри). Без вибору - 0x0000; hue=0 також допустимо у повідомлення. Це не RGB.
- Пошук та Journal/GetJournal/LastJournalMessage зберігають текст і поля одного запису в поточному скрипті. Нові повідомлення не підміняють ці поля. Якщо запис витіснено з обмеженого журналу, збережені поля залишаються, але LineIndex/GetFoundedTextIndex повертають -1. Наступний пошук чи читання вибирає інший запис; невдалий пошук, неправильний індекс та очищення через цей скрипт скидають вибір.
- Getter не запускає пошук і не вибирає найновіший рядок. Нульові/порожні значення можуть бути діючими даними; враховуйте результат пошуку.
- Первинний довідник: https://forum.yoko.com.ua/viewtopic.php?p=27633 .
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
var result = UO.GetFoundedTextColor();
UO.Print("GetFoundedTextColor: " + Convert.ToString(result));Параметри та порядок виконання:
- notice - приклад шуканого тексту. Getter викликається без параметрів лише після успішного пошуку.
- string — UO hue у форматі 0x0044 (4 hex-цифри). Без вибору - 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) вибирає новий запис. index та value читаються до Print.
- Перевірка index дозволяє відрізнити відсутність запису від допустимого нульового чи порожнього поля.
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;Параметри та порядок виконання:
- Перший пошук вибирає success, другий замінює чи скидає вибір. saved вже містить копію потрібного поля.
- Збережена 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 для success та 1 для failed. За кількох відповідних альтернатив береться перша в шаблоні. Без збігу або після прямого 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 та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
var result = UO.GetFoundedTextID();
UO.Print("GetFoundedTextID: " + Convert.ToString(result));Параметри та порядок виконання:
- success - альтернатива 0, failed - альтернатива 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 альтернативи, тому outcome зберігається заздалегідь.
- Новий виклик getter після 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()
{
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 та функції очікування надає host поточної ігрової сесії. Демонстраційні 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) вибирає останній запис; перевірка виключає пустий журнал.
- Порожній text допускається у запису, що діє.
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 мс дозволяє прийти до нових повідомлень. after заново знаходить той самий запис.
- after може збільшитись або стати -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 hex-цифр). Без вибору - 0x00000000. Це не type предмета і не індекс журналу.
- Пошук та Journal/GetJournal/LastJournalMessage зберігають текст і поля одного запису в поточному скрипті. Нові повідомлення не підміняють ці поля. Якщо запис витіснено з обмеженого журналу, збережені поля залишаються, але LineIndex/GetFoundedTextIndex повертають -1. Наступний пошук чи читання вибирає інший запис; невдалий пошук, неправильний індекс та очищення через цей скрипт скидають вибір.
- Getter не запускає пошук і не вибирає найновіший рядок. Нульові/порожні значення можуть бути діючими даними; враховуйте результат пошуку.
- Первинний довідник: https://forum.yoko.com.ua/viewtopic.php?p=27633 .
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
var result = UO.GetFoundedTextSerial();
UO.Print("GetFoundedTextSerial: " + Convert.ToString(result));Параметри та порядок виконання:
- notice - приклад шуканого тексту. Getter викликається без параметрів лише після успішного пошуку.
- string — serial автора у форматі 0x00001234 (8 hex-цифр). Без вибору - 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) вибирає новий запис. index та value читаються до Print.
- Перевірка index дозволяє відрізнити відсутність запису від допустимого нульового чи порожнього поля.
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;Параметри та порядок виконання:
- Перший пошук вибирає success, другий замінює чи скидає вибір. saved вже містить копію потрібного поля.
- Збережена 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 - момент запису в мілісекундах від початку runtime, сумісний з Now (). Записи на початок дають 0. Без вибору також 0; неправильна календарна мітка дає -1. Це не час і не десяті частки секунди UO.Timer().
- Пошук та Journal/GetJournal/LastJournalMessage зберігають текст і поля одного запису в поточному скрипті. Нові повідомлення не підміняють ці поля. Якщо запис витіснено з обмеженого журналу, збережені поля залишаються, але LineIndex/GetFoundedTextIndex повертають -1. Наступний пошук чи читання вибирає інший запис; невдалий пошук, неправильний індекс та очищення через цей скрипт скидають вибір.
- Getter не запускає пошук і не вибирає найновіший рядок. Нульові/порожні значення можуть бути діючими даними; враховуйте результат пошуку.
- Первинний довідник: https://forum.yoko.com.ua/viewtopic.php?p=27633 .
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
var result = UO.GetFoundedTextTimer();
UO.Print("GetFoundedTextTimer: " + Convert.ToString(result));Параметри та порядок виконання:
- notice - приклад шуканого тексту. Getter викликається без параметрів лише після успішного пошуку.
- int - момент запису в мілісекундах від початку runtime, сумісний з 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) вибирає новий запис. index та value читаються до Print.
- Перевірка index дозволяє відрізнити відсутність запису від допустимого нульового чи порожнього поля.
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;Параметри та порядок виконання:
- Перший пошук вибирає success, другий замінює чи скидає вибір. saved вже містить копію потрібного поля.
- Збережена 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 та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
var result = UO.GetJournal(0);
UO.Print("GetJournal: " + Convert.ToString(result));Параметри та порядок виконання:
- 0 — найновіший рядок. Спочатку читаються текст та автор, потім виводиться результат.
- Print може додати повідомлення; збережені text/author відносяться до попереднього вибраного запису.
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 та функції очікування надає host поточної ігрової сесії. Демонстраційні 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 та функції очікування надає host поточної ігрової сесії. Демонстраційні 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 та функції очікування надає host поточної ігрової сесії. Демонстраційні 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. Hex-рядок з числом також перетворюється на число; ім'я аліасу об'єкта тут не дозволяється. -
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 враховує регістр. Форма тільки з pattern, навпаки, завжди враховує регістр.
int: 0 — відповідного рядка немає; позитивне число — позиція найновішого відповідного запису, рахуючи від кінця всього журналу, починаючи з 1. Це не кількість збігів і не номер альтернативи шаблону. Для нульового індексу використовуйте LineIndex/GetFoundedTextIndex, для кількості збігів - LineCount, для номера альтернативи - GetFoundedTextID. Наступні нові повідомлення можуть змінити індекс, але збережені поля вибраного запису залишаються доступними.
- Пошук та Journal/GetJournal/LastJournalMessage зберігають текст і поля одного запису в поточному скрипті. Нові повідомлення не підміняють ці поля. Якщо запис витіснено з обмеженого журналу, збережені поля залишаються, але LineIndex/GetFoundedTextIndex повертають -1. Наступний пошук чи читання вибирає інший запис; невдалий пошук, неправильний індекс та очищення через цей скрипт скидають вибір.
- Пошук не очікує на новий текст. Порожній шаблон у поточному InJournal підходить будь-якому рядку, але не задає ID альтернативи; для перевірки наявності рядків використовуйте HighJournal/LowJournal.
- Форма з двох аргументів задає ліміт/реєстр, а не serial. Для serial обов'язково передати також color. Одноаргументний SetJournalLine може обмежити область пошуку.
- https://forum.yoko.com.ua/viewtopic.php?p=27633 ; .
Now() надає host поточного виконання: це ціле число мілісекунд тих же native-годин, які використовує журнал. Не замінюйте його Environment.TickCount, Unix-часом або власним Stopwatch: початок відліку буде іншим. У звичайній програмі .cs/.csproj викликайте context.Now() у переданого CSharpScriptGlobals.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
var result = UO.InJournal("You see");
UO.Print("InJournal: " + Convert.ToString(result));Параметри та порядок виконання:
- pattern = You see - підрядок, регістр важливий. 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 знімає ліміт рядків та відключає облік регістру.
- outcome=0 для success, 1 для failed; це номер альтернативи, що не 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 - кількість відповідних рядків у перевіреній області.
- found містить позицію плюс 1, а не matches. Запис діагностичного тексту також може поповнити журнал.
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 - приклад автора, color = 0x0044 - hue. Замініть реальні значення. started/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 обробника. Метод реєстрації створює цей delegate під час побудови API.
Внутрішній код реалізації, не самостійний скрипт.
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 обробника. Метод реєстрації створює цей delegate під час побудови API.
Внутрішній код реалізації, не самостійний скрипт.
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 обробника. Метод реєстрації створює цей delegate під час побудови API.
Внутрішній код реалізації, не самостійний скрипт.
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 обробника. Метод реєстрації створює цей delegate під час побудови API.
Внутрішній код реалізації, не самостійний скрипт.
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 обробника. Метод реєстрації створює цей delegate під час побудови API.
Внутрішній код реалізації, не самостійний скрипт.
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 мілісекунд від початку runtime. 0 - початок виконання. Це не вік запису та не дробова дата LineTime. -
endTime— Необов'язкова кінцева мітка Now(). Якщо опущена або непозитивна, використовується поточний час. Позитивні межі можна передати у зворотному порядку; майбутній кордон обмежується поточним часом. -
limit— Необов'язковий четвертий аргумент: -1 — без ліміту та без урахування регістру; позитивне число - максимум рядків в інтервалі з урахуванням регістру; 0 та негативні значення крім -1 — не перевіряти рядки.
int: 0 — відповідного рядка немає; позитивне число — позиція найновішого відповідного запису, рахуючи від кінця всього журналу, починаючи з 1. Це не кількість збігів і не номер альтернативи шаблону. Для нульового індексу використовуйте LineIndex/GetFoundedTextIndex, для кількості збігів - LineCount, для номера альтернативи - GetFoundedTextID. Наступні нові повідомлення можуть змінити індекс, але збережені поля вибраного запису залишаються доступними.
- Пошук та Journal/GetJournal/LastJournalMessage зберігають текст і поля одного запису в поточному скрипті. Нові повідомлення не підміняють ці поля. Якщо запис витіснено з обмеженого журналу, збережені поля залишаються, але LineIndex/GetFoundedTextIndex повертають -1. Наступний пошук чи читання вибирає інший запис; невдалий пошук, неправильний індекс та очищення через цей скрипт скидають вибір.
- У формах із двох або трьох аргументів регістр враховується. Кордони включаються. Обчислення інтервалу не зупиняє скрипт.
- Тут передавайте цілі мітки Now(). LineTime повертає іншу одиницю. Первинний довідник: .
Now() надає host поточного виконання: це ціле число мілісекунд тих же native-годин, які використовує журнал. Не замінюйте його Environment.TickCount, Unix-часом або власним Stopwatch: початок відліку буде іншим. У звичайній програмі .cs/.csproj викликайте context.Now() у переданого CSharpScriptGlobals.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
var result = UO.InJournalBetweenTimes("You see", 0, Now());
UO.Print("InJournalBetweenTimes: " + Convert.ToString(result));Параметри та порядок виконання:
- started зберігається до UseSkill. endTime опущено - до поточного часу; hidden – приклад серверного тексту.
- Регістр враховується. Повідомлення не доводить поточного статусу; 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 - початок виконання; ended - збережена кінцева мітка в мілісекундах.
- Нові повідомлення після ended не включаються. Старі записи до запуску runtime також поза інтервалом.
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 для success, 1 для failed. Перевірка 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 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 та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
var result = UO.Journal(0);
UO.Print("Journal: " + Convert.ToString(result));Параметри та порядок виконання:
- 0 — найновіший рядок. Спочатку читаються текст та автор, потім виводиться результат.
- Print може додати повідомлення; збережені text/author відносяться до попереднього вибраного запису.
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 та функції очікування надає host поточної ігрової сесії. Демонстраційні 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 та функції очікування надає host поточної ігрової сесії. Демонстраційні 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);Читає поле timestamp рядка за поточним індексом, не змінюючи вибраний запис.
-
index— Обов'язковий int — поточний індекс: 0 означає найновіший рядок, 1 — попередній. Індекси зсуваються при надходженні повідомлень. Це не serial, не ID варіант шаблону і не позитивний результат InJournal.
int — позначка запису в мілісекундах від початку runtime, сумісна з Now(). 0 для запису до запуску runtime; -1 для неправильного індексу/часу. Це не вік запису та не десяті секунди UO.Timer().
- Кожен дзвінок читає поточну позицію. Для узгодженого тексту та полів одного запису спочатку Journal(index), потім GetFoundedText/Line*. Нульові значення можуть бути реальними даними.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
var result = UO.JournalTimer(0);
UO.Print("JournalTimer: " + Convert.ToString(result));Параметри та порядок виконання:
- 0 - індекс нового рядка. Перевіряється наявність буфера.
- int — позначка запису в мілісекундах від початку runtime, сумісна з Now(). 0 для запису до запуску runtime; -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. Наступний пошук чи читання вибирає інший запис; невдалий пошук, неправильний індекс та очищення через цей скрипт скидають вибір.
- Оновлює вибір і поля Line* так само, як Journal (0 ⟧).
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні 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;
}Параметри та порядок виконання:
- matched зберігається до читання latest, тому не змінюється при новому виборі.
- Останнє повідомлення може відрізнятись від знайденого; 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 та функції очікування надає host поточної ігрової сесії. Демонстраційні 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;
}Параметри та порядок виконання:
- matched зберігається до читання latest, тому не змінюється при новому виборі.
- Останнє повідомлення може відрізнятись від знайденого; 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 та функції очікування надає host поточної ігрової сесії. Демонстраційні 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, час=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. Старший біт може дати негативне число через signed int; GetFoundedTextSerial зберігає повне hex-подання. Це не graphic/type.
- Пошук та Journal/GetJournal/LastJournalMessage зберігають текст і поля одного запису в поточному скрипті. Нові повідомлення не підміняють ці поля. Якщо запис витіснено з обмеженого журналу, збережені поля залишаються, але LineIndex/GetFoundedTextIndex повертають -1. Наступний пошук чи читання вибирає інший запис; невдалий пошук, неправильний індекс та очищення через цей скрипт скидають вибір.
- Getter не запускає пошук і не вибирає найновіший рядок. Нульові/порожні значення можуть бути діючими даними; враховуйте результат пошуку.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
object? result = UO.LineID();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Параметри та порядок виконання:
- notice - приклад шуканого тексту. Getter викликається без параметрів лише після успішного пошуку.
- int - 32-бітний serial автора. Без вибору - 0. Старший біт може дати негативне число через signed int; GetFoundedTextSerial зберігає повне hex-подання. Це не 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) вибирає новий запис. index та value читаються до Print.
- Перевірка index дозволяє відрізнити відсутність запису від допустимого нульового чи порожнього поля.
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;Параметри та порядок виконання:
- Перший пошук вибирає success, другий замінює чи скидає вибір. saved вже містить копію потрібного поля.
- Збережена 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 та функції очікування надає host поточної ігрової сесії. Демонстраційні 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) вибирає останній запис; перевірка виключає пустий журнал.
- Порожній text допускається у запису, що діє.
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 мс дозволяє прийти до нових повідомлень. after заново знаходить той самий запис.
- after може збільшитись або стати -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 Party. Без вибору 0. Це коди Classic UO; не замінюйте їх різними числами зі сторонніх прикладів.
- Пошук та Journal/GetJournal/LastJournalMessage зберігають текст і поля одного запису в поточному скрипті. Нові повідомлення не підміняють ці поля. Якщо запис витіснено з обмеженого журналу, збережені поля залишаються, але LineIndex/GetFoundedTextIndex повертають -1. Наступний пошук чи читання вибирає інший запис; невдалий пошук, неправильний індекс та очищення через цей скрипт скидають вибір.
- Getter не запускає пошук і не вибирає найновіший рядок. Нульові/порожні значення можуть бути діючими даними; враховуйте результат пошуку.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
object? result = UO.LineMsgType();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Параметри та порядок виконання:
- notice - приклад шуканого тексту. 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 Party. Без вибору 0. Це коди Classic 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) вибирає новий запис. index та value читаються до Print.
- Перевірка index дозволяє відрізнити відсутність запису від допустимого нульового чи порожнього поля.
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;Параметри та порядок виконання:
- Перший пошук вибирає success, другий замінює чи скидає вибір. saved вже містить копію потрібного поля.
- Збережена 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 не запускає пошук і не вибирає найновіший рядок. Нульові/порожні значення можуть бути діючими даними; враховуйте результат пошуку.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
object? result = UO.LineName();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Параметри та порядок виконання:
- notice - приклад шуканого тексту. 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) вибирає новий запис. index та value читаються до Print.
- Перевірка index дозволяє відрізнити відсутність запису від допустимого нульового чи порожнього поля.
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;Параметри та порядок виконання:
- Перший пошук вибирає success, другий замінює чи скидає вибір. saved вже містить копію потрібного поля.
- Збережена 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 не запускає пошук і не вибирає найновіший рядок. Нульові/порожні значення можуть бути діючими даними; враховуйте результат пошуку.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
object? result = UO.LineTextColor();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Параметри та порядок виконання:
- notice - приклад шуканого тексту. 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) вибирає новий запис. index та value читаються до Print.
- Перевірка index дозволяє відрізнити відсутність запису від допустимого нульового чи порожнього поля.
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;Параметри та порядок виконання:
- Перший пошук вибирає success, другий замінює чи скидає вибір. saved вже містить копію потрібного поля.
- Збережена 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 font ID вибраного запису (0…255 у клієнті); без вибору 0. Це ID ігрового шрифту, не розмір шрифту IDE.
- Пошук та Journal/GetJournal/LastJournalMessage зберігають текст і поля одного запису в поточному скрипті. Нові повідомлення не підміняють ці поля. Якщо запис витіснено з обмеженого журналу, збережені поля залишаються, але LineIndex/GetFoundedTextIndex повертають -1. Наступний пошук чи читання вибирає інший запис; невдалий пошук, неправильний індекс та очищення через цей скрипт скидають вибір.
- Getter не запускає пошук і не вибирає найновіший рядок. Нульові/порожні значення можуть бути діючими даними; враховуйте результат пошуку.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
object? result = UO.LineTextFont();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Параметри та порядок виконання:
- notice - приклад шуканого тексту. Getter викликається без параметрів лише після успішного пошуку.
- int — UO font 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) вибирає новий запис. index та value читаються до Print.
- Перевірка index дозволяє відрізнити відсутність запису від допустимого нульового чи порожнього поля.
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;Параметри та порядок виконання:
- Перший пошук вибирає success, другий замінює чи скидає вибір. saved вже містить копію потрібного поля.
- Збережена 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 Automation Date, число днів від 30.12.1899, дробова частина задає час доби. Без вибору 0. Це не мілісекунди Now() і не цілий Unix timestamp. Різниця двох таких міток множиться на 86400000 для мілісекунд.
- Пошук та Journal/GetJournal/LastJournalMessage зберігають текст і поля одного запису в поточному скрипті. Нові повідомлення не підміняють ці поля. Якщо запис витіснено з обмеженого журналу, збережені поля залишаються, але LineIndex/GetFoundedTextIndex повертають -1. Наступний пошук чи читання вибирає інший запис; невдалий пошук, неправильний індекс та очищення через цей скрипт скидають вибір.
- Getter не запускає пошук і не вибирає найновіший рядок. Нульові/порожні значення можуть бути діючими даними; враховуйте результат пошуку.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
object? result = UO.LineTime();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Параметри та порядок виконання:
- notice - приклад шуканого тексту. Getter викликається без параметрів лише після успішного пошуку.
- double — OLE Automation Date, число днів від 30.12.1899, дробова частина задає час доби. Без вибору 0. Це не мілісекунди Now() і не цілий Unix timestamp. Різниця двох таких міток множиться на 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) вибирає новий запис. index та value читаються до Print.
- Перевірка index дозволяє відрізнити відсутність запису від допустимого нульового чи порожнього поля.
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;Параметри та порядок виконання:
- Перший пошук вибирає success, другий замінює чи скидає вибір. saved вже містить копію потрібного поля.
- Збережена 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 не запускає пошук і не вибирає найновіший рядок. Нульові/порожні значення можуть бути діючими даними; враховуйте результат пошуку.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
object? result = UO.LineType();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Параметри та порядок виконання:
- notice - приклад шуканого тексту. 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) вибирає новий запис. index та value читаються до Print.
- Перевірка index дозволяє відрізнити відсутність запису від допустимого нульового чи порожнього поля.
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;Параметри та порядок виконання:
- Перший пошук вибирає success, другий замінює чи скидає вибір. saved вже містить копію потрібного поля.
- Збережена 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 та функції очікування надає host поточної ігрової сесії. Демонстраційні 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— Для форми (index,text): поточний індекс від 0, де 0 — новий рядок. Для форми (index): кількість старих рядків, що пропускаються від початку внутрішнього буфера, не індекс Journal; 0 знімає обмеження. Негативна одноаргументна межа обмежується 0. -
stringIndex— Ім'я index у сумісній двоаргументній реєстрації: поточний індекс Journal від 0. -
text— Новий текст існуючого рядка, включаючи пустий рядок. Обов'язковий у вигляді заміни тексту.
void - немає значення, що повертається. За неправильного індексу двоаргументна форма нічого не змінює. Одноаргументна форма не змінює тексту.
- Заміна локальна, сервер нічого не відправляється. Поля автора/часу зберігаються. Вже вибраний знімок тексту залишається незмінним до повторного Journal або пошуку.
- Одноаргументна межа - застаріле розширення: кількість старих рядків у поточному буфері; при витісненні/видаленні записів його зміст зсувається. Для надійного кордону між діями використовуйте InJournalBetweenTimes з Now().
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні 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;Параметри та порядок виконання:
- Порожній рядок замінює текст, але не видаляє запис та його автора.
- Неправильний індекс пропускається. exists може бути true навіть за text="".
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);ClassicUO — Bad Newbie & C# Scripts IDE