Skip to content

UO Topic journal

Codex edited this page Oct 12, 2026 · 6 revisions

Українська · Русский · 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

Приклади на тему

Нижче наведено короткі приклади. У повному описі кожної команди є параметри, результат, обмеження та кілька самостійних скриптів: прямий код, варіант із функцією та варіант із класом.

UO.InJournal

Параметри, результат та всі сценарії

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;

UO.WaitJournalLine

Параметри, результат та всі сценарії

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;

Частини довідника

1 · 2

Повний опис команд


UO.AddJournalIgnore

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

C#-сигнатури

void UO.AddJournalIgnore(object? str);

Додає локальний фільтр для записів ігрового журналу ClassicUO.

Параметри

  • str - непустий текстовий фрагмент для пошуку в тексті запису журналу.

Повернене значення

void. Команда не повертає кількість збігів.

Поведінка

  • Текст обрізається з обох боків; порожній рядок не додається. Під час перевірки запису пошук підрядка виконується без урахування регістру. Збіг записується локально в журналі клієнта; сервер не одержує фільтр. UO.ClearJournalIgnore() очищає всі додані текстові фільтри. Вже відображені записи не відновлюються під час очищення.

Самостійні C#-скрипти

Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.

Простий приклад

Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.

Команда викликається окремим рядком. Повідомлення перед нею показує початок виклику, а не підтвердження дії сервера.

UO.Print("Calling UO.AddJournalIgnore");
UO.AddJournalIgnore("You see");

1. Приховувати нові записи, які містять фразу. - Прямий скрипт

Параметри та порядок виконання:

  • Приховувати нові записи, які містять фразу.
UO.AddJournalIgnore("You see");

2. Фільтр шукає підрядок без урахування регістру. - Функція сценарію

Параметри та порядок виконання:

  • Фільтр шукає підрядок без урахування регістру.
return  RunScenario();
 object? RunScenario()
{
    var phrase = "vendor";
    UO.AddJournalIgnore(phrase);
    return null;
}

3. Кілька дзвінків додають незалежні текстові фільтри. - Клас сценарію

Параметри та порядок виконання:

  • Кілька дзвінків додають незалежні текстові фільтри.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        UO.AddJournalIgnore("You see");
        UO.AddJournalIgnore("vendor");
        return null;
    }
}

Реалізація команди

C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.

UO.AddJournalIgnore(str) — UO.AddJournalIgnore(Any)

Параметри: str (Any)

Результат: void / Unit.

Під час виклику:

Внутрішній код реалізації, не самостійний скрипт.

case "addjournalignore": bridge.AddJournalIgnore(Text(0)); return InjectionValue.Unit;

UO.AddToJournal

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

C#-сигнатури

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

Самостійні C#-скрипти

Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.

Простий приклад

Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.

Команда викликається окремим рядком. Повідомлення перед нею показує початок виклику, а не підтвердження дії сервера.

UO.Print("Calling UO.AddToJournal");
UO.AddToJournal("Script started");

1. Короткий звіт - прямий скрипт

Параметри та порядок виконання:

  • processed = 12 - демонстраційне число вже оброблених предметів. Convert.ToString перетворює його на рядок. Цей приклад лише повідомляє число, що сам предмети не переносить.
var processed = 12;
UO.AddToJournal("Processed item entries: " + Convert.ToString(processed));

2. Попередження про перевантаження – функція сценарію

Параметри та порядок виконання:

  • Читаються вага та максимум персонажа. Нульовий/невідомий максимум не вважається перевантаженням. При 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;

3. Повідомляти лише про зміну ваги – клас сценарію

Параметри та порядок виконання:

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

UO.AddToJournal(text) — UO.AddToJournal(Any)

Параметри: text (Any)

Результат: void / Unit.

Під час виклику:

Внутрішній код реалізації, не самостійний скрипт.

case "addtojournal":

                case "addtosystemjournal":

                case "clientprint":

                    SystemMessage(Text(0)); return InjectionValue.Unit;

UO.AddToSystemJournal

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

C#-сигнатури

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

Самостійні C#-скрипти

Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.

Простий приклад

Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.

Команда викликається окремим рядком. Повідомлення перед нею показує початок виклику, а не підтвердження дії сервера.

UO.Print("Calling UO.AddToSystemJournal");
UO.AddToSystemJournal("Script started");

1. Короткий звіт - прямий скрипт

Параметри та порядок виконання:

  • processed = 12 - демонстраційне число вже оброблених предметів. Convert.ToString перетворює його на рядок. Цей приклад лише повідомляє число, що сам предмети не переносить.
var processed = 12;
UO.AddToSystemJournal("Processed item entries: " + Convert.ToString(processed));

2. Попередження про перевантаження – функція сценарію

Параметри та порядок виконання:

  • Читаються вага та максимум персонажа. Нульовий/невідомий максимум не вважається перевантаженням. При 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;

3. Повідомляти лише про зміну ваги – клас сценарію

Параметри та порядок виконання:

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

UO.AddToSystemJournal(text) — UO.AddToSystemJournal(Any)

Параметри: text (Any)

Результат: void / Unit.

Під час виклику:

Внутрішній код реалізації, не самостійний скрипт.

case "addtojournal":

                case "addtosystemjournal":

                case "clientprint":

                    SystemMessage(Text(0)); return InjectionValue.Unit;

UO.AddToSystemJournalEx

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

C#-сигнатури

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

Самостійні C#-скрипти

Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.

Простий приклад

Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.

Команда викликається окремим рядком. Повідомлення перед нею показує початок виклику, а не підтвердження дії сервера.

UO.Print("Calling UO.AddToSystemJournalEx");
UO.AddToSystemJournalEx("Route started", 0xFF8800, -1, 12, "Consolas");

1. UO.AddToSystemJournalEx - 1 - прямий скрипт

Параметри та порядок виконання:

  • Помаранчеве повідомлення, фон -1 за замовчуванням, розмір 12: виходить ігровий шрифт 4. Consolas зберігається у відомостях IDE. Колір може відрізнятися від точного RGB через палітру гри.
UO.AddToSystemJournalEx("Route started", 0xFF8800, -1, 12, "Consolas");

2. UO.AddToSystemJournalEx — 2 — функція сценарію

Параметри та порядок виконання:

  • Позитивне значення BGColor 0x112233 зберігає запит фону в IDE. Для FontSize=0 використовується 10, порожній FontName стає Consolas. У ігровому вікні фон за цим параметром не забарвлюється.
return  RunScenario();
 object? RunScenario()
{
    UO.AddToSystemJournalEx("Formatting details", 0x33AAFF, 0x112233, 0, "");
    return null;
}

3. UO.AddToSystemJournalEx - 3 - клас сценарію

Параметри та порядок виконання:

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

Під час виклику:

Внутрішній код реалізації, не самостійний скрипт.

case "addtosystemjournalex":

                    bridge.PrintFormattedJournal(Text(0), Arg(1), Arg(2), Arg(3), Text(4)); return InjectionValue.Unit;

UO.ChangeJournalLength

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

C#-сигнатури

void UO.ChangeJournalLength(object? newLength);

Змінює межу історії журналів клієнта, що зберігається.

Параметри

  • newLength — Число записів, що перетворюється на int. Runtime обмежує знизу до 1; JournalManager обмежує зверху Constants.MAX_JOURNAL_HISTORY_COUNT.

Повернене значення

void - значення, що повертається немає.

Поведінка

  • Зберігає state.JournalLength, потім викликає SetJournalLength. JournalManager зменшує існуючу історію, видаляючи найстаріші записи до нового ліміту. Відфільтровані записи та відображення журналу – окремі механізми.

Самостійні C#-скрипти

Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.

Простий приклад

Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.

Команда викликається окремим рядком. Повідомлення перед нею показує початок виклику, а не підтвердження дії сервера.

UO.Print("Calling UO.ChangeJournalLength");
UO.ChangeJournalLength(100);

1. Історія на 100 записів - прямий скрипт

Параметри та порядок виконання:

  • Нова межа обмежує кількість записів, що зберігаються.
UO.ChangeJournalLength(100);

2. Мінімальна історія – функція сценарію

Параметри та порядок виконання:

  • При зменшенні ліміту старі записи видаляються.
return  RunScenario();
 object? RunScenario()
{
    UO.ChangeJournalLength(1);
    return null;
}

3. Нульове введення - клас сценарію

Параметри та порядок виконання:

  • Нуль нормалізується в 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.

UO.ChangeJournalLength(newLength) — UO.ChangeJournalLength(Any)

Параметри: newLength (Any)

Результат: void / Unit.

Під час виклику:

Внутрішній код реалізації, не самостійний скрипт.

case "changejournallength": state.JournalLength = Math.Max(1, Arg(0, 100)); bridge.SetJournalLength(state.JournalLength); break;

UO.ClearJournal

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

C#-сигнатури

void UO.ClearJournal();

Видаляє рядки із загального локального журналу.

Параметри

Параметрів немає.

Повернене значення

void - немає значення, що повертається. Чи не повертає кількість віддалених рядків. Лічильник збігів та вибір поточного скрипту скидаються.

Поведінка

  • Загальний буфер доступний усім скриптам: віддалені рядки перестають перебувати. Знімки, раніше збережені іншими скриптами, можуть залишитися, але їх індекс стане -1.
  • Без текстового фільтра очищається весь буфер Classic UO, включаючи System. Локальний файл журналу та повідомлення сервера не видаляються.

Самостійні C#-скрипти

Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.

Простий приклад

Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.

Команда викликається окремим рядком. Повідомлення перед нею показує початок виклику, а не підтвердження дії сервера.

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

1. Очистити вибрану область журналу – прямий скрипт

Параметри та порядок виконання:

  • Аргументів немає. Видаляються всі рядки загального буфера.
  • Лічильник останнього пошуку стає 0; Print після очищення може додати новий рядок.
UO.ClearJournal();
var count = UO.LineCount();
UO.Print("Search matches after clear: " + Convert.ToString(count));

2. Очистити перед очікуванням – функція сценарію

Параметри та порядок виконання:

  • Очищення виконується до збереження тимчасової мітки. 1000 - обмежене очікування в мілісекундах.
  • Для виключення старих повідомлень зазвичай достатньо мітки часу; очищення стосується і інших скриптів.
return  RunScenario();
 object? RunScenario()
{
    UO.ClearJournal();
    var started = Now();
    var found = UO.WaitJournalLine(started, "notice", 1000);
    UO.Print(Convert.ToString(found));
    return null;
}

3. Перевірити скидання вибраного запису – клас сценарію

Параметри та порядок виконання:

  • Після очищення через поточний скрипт 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.

UO.ClearJournal() — UO.ClearJournal()

Параметри: Немає параметрів.

Результат: void / Unit.

Під час виклику:

Внутрішній код реалізації, не самостійний скрипт.

case "clearjournal": DeleteJournal(); return InjectionValue.Unit;

UO.ClearJournalIgnore

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

C#-сигнатури

void UO.ClearJournalIgnore();

Видаляє всі текстові фільтри JournalManager.

Параметри

Параметрів немає.

Повернене значення

void - значення, що повертається немає.

Поведінка

  • Видалення фільтрів не видаляє історію та не скасовує фільтри імен AddChatUserIgnore.

Самостійні C#-скрипти

Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.

Простий приклад

Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.

Команда викликається окремим рядком. Повідомлення перед нею показує початок виклику, а не підтвердження дії сервера.

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

1. Очистити стан - прямий скрипт

Параметри та порядок виконання:

  • Видаляє всі текстові фільтри JournalManager.
UO.ClearJournalIgnore();

2. Очистити після налаштування – функція сценарію

Параметри та порядок виконання:

  • Знову дозволити відображати текст You see.
return  RunScenario();
 object? RunScenario()
{
    UO.AddJournalIgnore("You see");
    UO.ClearJournalIgnore();
    return null;
}

3. Повторне очищення – клас сценарію

Параметри та порядок виконання:

  • Очищення порожнього набору є прийнятним і не створює нового параметра.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        UO.ClearJournalIgnore();
        UO.ClearJournalIgnore();
        return null;
    }
}

Реалізація команди

C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.

UO.ClearJournalIgnore() — UO.ClearJournalIgnore()

Параметри: Немає параметрів.

Результат: void / Unit.

Під час виклику:

Внутрішній код реалізації, не самостійний скрипт.

case "clearjournalignore": bridge.ClearJournalIgnore(); return InjectionValue.Unit;

UO.ClearSystemJournal

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

C#-сигнатури

void UO.ClearSystemJournal();

Видаляє рядки з іменем автора System.

Параметри

Параметрів немає.

Повернене значення

void - немає значення, що повертається. Чи не повертає кількість віддалених рядків. Лічильник збігів та вибір поточного скрипту скидаються.

Поведінка

  • Загальний буфер доступний усім скриптам: віддалені рядки перестають перебувати. Знімки, раніше збережені іншими скриптами, можуть залишитися, але їх індекс стане -1.
  • System розпізнається на ім'я автора без урахування регістру; це фільтр загального журналу ClassicUO.

Самостійні C#-скрипти

Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.

Простий приклад

Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.

Команда викликається окремим рядком. Повідомлення перед нею показує початок виклику, а не підтвердження дії сервера.

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

1. Очистити вибрану область журналу – прямий скрипт

Параметри та порядок виконання:

  • Аргументів немає. Видаляються лише рядки System.
  • Лічильник останнього пошуку стає 0; Print після очищення може додати новий рядок.
UO.ClearSystemJournal();
var count = UO.LineCount();
UO.Print("Search matches after clear: " + Convert.ToString(count));

2. Очистити перед очікуванням – функція сценарію

Параметри та порядок виконання:

  • Очищення виконується до збереження тимчасової мітки. 1000 - обмежене очікування в мілісекундах.
  • Для виключення старих повідомлень зазвичай достатньо мітки часу; очищення стосується і інших скриптів.
return  RunScenario();
 object? RunScenario()
{
    UO.ClearSystemJournal();
    var started = Now();
    var found = UO.WaitJournalLine(started, "notice", 1000);
    UO.Print(Convert.ToString(found));
    return null;
}

3. Перевірити скидання вибраного запису – клас сценарію

Параметри та порядок виконання:

  • Після очищення через поточний скрипт 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.

UO.ClearSystemJournal() — UO.ClearSystemJournal()

Параметри: Немає параметрів.

Результат: void / Unit.

Під час виклику:

Внутрішній код реалізації, не самостійний скрипт.

case "clearsystemjournal": bridge.DeleteSystemJournal(); SelectJournalEntry(null); return InjectionValue.Unit;

UO.DeleteJournal

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

C#-сигнатури

void UO.DeleteJournal();
void UO.DeleteJournal(object? text);

Видаляє рядки із загального локального журналу.

Параметри

  • text - Шуканий підрядок або кілька альтернатив через |, наприклад success | failed. Прогалини з обох боків кожної альтернативи видаляються, порожні альтернативи пропускаються. Це звичайний текст, не регулярний вираз. Використовуйте непустий шаблон. Необов'язковий тільки у DeleteJournal: під час передачі видаляються відповідні рядки без урахування регістру; без аргументу видаляється весь буфер.

Повернене значення

void - немає значення, що повертається. Чи не повертає кількість віддалених рядків. Лічильник збігів та вибір поточного скрипту скидаються.

Поведінка

  • Загальний буфер доступний усім скриптам: віддалені рядки перестають перебувати. Знімки, раніше збережені іншими скриптами, можуть залишитися, але їх індекс стане -1.
  • Без текстового фільтра очищається весь буфер Classic UO, включаючи System. Локальний файл журналу та повідомлення сервера не видаляються.

Самостійні C#-скрипти

Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.

Простий приклад

Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.

Команда викликається окремим рядком. Повідомлення перед нею показує початок виклику, а не підтвердження дії сервера.

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

1. Очистити вибрану область журналу – прямий скрипт

Параметри та порядок виконання:

  • Аргументів немає. Видаляються всі рядки загального буфера.
  • Лічильник останнього пошуку стає 0; Print після очищення може додати новий рядок.
UO.DeleteJournal();
var count = UO.LineCount();
UO.Print("Search matches after clear: " + Convert.ToString(count));

2. Очистити перед очікуванням – функція сценарію

Параметри та порядок виконання:

  • Очищення виконується до збереження тимчасової мітки. 1000 - обмежене очікування в мілісекундах.
  • Для виключення старих повідомлень зазвичай достатньо мітки часу; очищення стосується і інших скриптів.
return  RunScenario();
 object? RunScenario()
{
    UO.DeleteJournal();
    var started = Now();
    var found = UO.WaitJournalLine(started, "notice", 1000);
    UO.Print(Convert.ToString(found));
    return null;
}

3. Перевірити скидання вибраного запису – клас сценарію

Параметри та порядок виконання:

  • Після очищення через поточний скрипт 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;
    }
}

4. Видалити лише відповідний текст — прямий скрипт

Параметри та порядок виконання:

  • text містить два підрядки. Видаляються рядки з будь-якої з них без урахування регістру; решта повідомлень залишаються.
  • found=0 за відсутності нових відповідних повідомлень після видалення. Порожній шаблон у цій реалізації підходить усім рядкам.
UO.DeleteJournal("notice|warning");
var found = UO.InJournal("notice|warning", -1);
UO.Print(Convert.ToString(found));

Реалізація команди

C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.

UO.DeleteJournal() — UO.DeleteJournal()

Параметри: Немає параметрів.

Результат: void / Unit.

Під час виклику:

Внутрішній код реалізації, не самостійний скрипт.

public void DeleteJournal()

        {

            bridge.DeleteJournal();

            SelectJournalEntry(null);

        }

UO.DeleteJournal(text) — UO.DeleteJournal(Any)

Параметри: text (Any)

Результат: void / Unit.

Під час виклику:

Внутрішній код реалізації, не самостійний скрипт.

public void DeleteJournal(InjectionValue text) => DeleteJournal((string)text);

UO.FoundedParamId

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

C#-сигнатури

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.

Самостійні C#-скрипти

Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.

Простий приклад

Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.

Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.

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

1. Два результати – прямий скрипт

Параметри та порядок виконання:

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

2. Три результати без регістру - функція сценарію

Параметри та порядок виконання:

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

3. Зберегти вихід перед читанням іншого рядка – клас сценарію

Параметри та порядок виконання:

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

UO.FoundedParamId() — UO.FoundedParamId()

Параметри: Немає параметрів.

Результат: dynamic / Any.

Під час виклику:

Внутрішній код реалізації, не самостійний скрипт.

case "foundedparamid":

                    return new InjectionValue(foundedTextId >= 0 ? foundedTextId : 0);

UO.GetFoundedText

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

C#-сигнатури

string UO.GetFoundedText();

Повертає текст вибраного запису журналу.

Параметри

Параметрів немає.

Повернене значення

string - текст вибраного запису; пустий рядок без вибору. Порожній текст допустимо у існуючого запису.

Поведінка

  • Пошук та Journal/GetJournal/LastJournalMessage зберігають текст і поля одного запису в поточному скрипті. Нові повідомлення не підміняють ці поля. Якщо запис витіснено з обмеженого журналу, збережені поля залишаються, але LineIndex/GetFoundedTextIndex повертають -1. Наступний пошук чи читання вибирає інший запис; невдалий пошук, неправильний індекс та очищення через цей скрипт скидають вибір.
  • Getter не запускає пошук і не вибирає найновіший рядок. Нульові/порожні значення можуть бути діючими даними; враховуйте результат пошуку.
  • Первинний довідник: https://forum.yoko.com.ua/viewtopic.php?p=27633 .

Самостійні C#-скрипти

Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.

Простий приклад

Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.

Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.

var result = UO.GetFoundedText();
UO.Print("GetFoundedText: " + Convert.ToString(result));

1. Читати поле після пошуку – прямий скрипт

Параметри та порядок виконання:

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

2. Прочитати поле конкретного рядка - функція сценарію

Параметри та порядок виконання:

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

3. Зберегти поле перед наступним пошуком – клас сценарію

Параметри та порядок виконання:

  • Перший пошук вибирає 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.

UO.GetFoundedText() — UO.GetFoundedText()

Параметри: Немає параметрів.

Результат: string / String.

Під час виклику:

Внутрішній код реалізації, не самостійний скрипт.

public string GetFoundedText() => selectedJournalEntry?.Text ?? string.Empty;

UO.GetFoundedTextColor

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

C#-сигнатури

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 .

Самостійні C#-скрипти

Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.

Простий приклад

Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.

Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.

var result = UO.GetFoundedTextColor();
UO.Print("GetFoundedTextColor: " + Convert.ToString(result));

1. Читати поле після пошуку – прямий скрипт

Параметри та порядок виконання:

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

2. Прочитати поле конкретного рядка - функція сценарію

Параметри та порядок виконання:

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

3. Зберегти поле перед наступним пошуком – клас сценарію

Параметри та порядок виконання:

  • Перший пошук вибирає 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.

UO.GetFoundedTextColor() — UO.GetFoundedTextColor()

Параметри: Немає параметрів.

Результат: string / String.

Під час виклику:

Внутрішній код реалізації, не самостійний скрипт.

public string GetFoundedTextColor() => selectedJournalEntry != null ? $"0x{selectedJournalEntry.Color:X4}" : "0x0000";

UO.GetFoundedTextID

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

C#-сигнатури

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.

Самостійні C#-скрипти

Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.

Простий приклад

Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.

Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.

var result = UO.GetFoundedTextID();
UO.Print("GetFoundedTextID: " + Convert.ToString(result));

1. Два результати – прямий скрипт

Параметри та порядок виконання:

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

2. Три результати без регістру - функція сценарію

Параметри та порядок виконання:

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

3. Зберегти вихід перед читанням іншого рядка – клас сценарію

Параметри та порядок виконання:

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

UO.GetFoundedTextID() — UO.GetFoundedTextID()

Параметри: Немає параметрів.

Результат: int / Integer.

Під час виклику:

Внутрішній код реалізації, не самостійний скрипт.

public int GetFoundedTextID() => foundedTextId >= 0 ? foundedTextId : 0;

UO.GetFoundedTextIndex

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

C#-сигнатури

int UO.GetFoundedTextIndex();

Повертає поточний індекс вибраного запису, якщо він зберігається в журналі.

Параметри

Параметрів немає.

Повернене значення

int — поточний індекс від 0 (найновіший рядок). -1 означає, що вибору немає або вибраний запис вже видалено/витіснено. Це не результат InJournal: з індексу не потрібно віднімати 1.

Поведінка

  • Пошук та Journal/GetJournal/LastJournalMessage зберігають текст і поля одного запису в поточному скрипті. Нові повідомлення не підміняють ці поля. Якщо запис витіснено з обмеженого журналу, збережені поля залишаються, але LineIndex/GetFoundedTextIndex повертають -1. Наступний пошук чи читання вибирає інший запис; невдалий пошук, неправильний індекс та очищення через цей скрипт скидають вибір.
  • Індекс перераховується з ідентичності запису. Нові повідомлення збільшують його. Старий збережений індекс не є постійним ID; для тексту безпечніше GetFoundedText.

Самостійні C#-скрипти

Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.

Простий приклад

Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.

Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.

var result = UO.GetFoundedTextIndex();
UO.Print("GetFoundedTextIndex: " + Convert.ToString(result));

1. Індекс знайденого запису – прямий скрипт

Параметри та порядок виконання:

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

2. Перевірити пряме читання – функція сценарію

Параметри та порядок виконання:

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

3. Оновити індекс після очікування – клас сценарію

Параметри та порядок виконання:

  • Очікування 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.

UO.GetFoundedTextIndex() — UO.GetFoundedTextIndex()

Параметри: Немає параметрів.

Результат: int / Integer.

Під час виклику:

Внутрішній код реалізації, не самостійний скрипт.

public int GetFoundedTextIndex() => selectedJournalEntry != null && bridge is IApiJournalReader reader

            ? reader.FindJournalEntryIndex(selectedJournalEntry.Identity) : foundedTextIndex;

UO.GetFoundedTextSerial

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

C#-сигнатури

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 .

Самостійні C#-скрипти

Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.

Простий приклад

Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.

Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.

var result = UO.GetFoundedTextSerial();
UO.Print("GetFoundedTextSerial: " + Convert.ToString(result));

1. Читати поле після пошуку – прямий скрипт

Параметри та порядок виконання:

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

2. Прочитати поле конкретного рядка - функція сценарію

Параметри та порядок виконання:

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

3. Зберегти поле перед наступним пошуком – клас сценарію

Параметри та порядок виконання:

  • Перший пошук вибирає 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.

UO.GetFoundedTextSerial() — UO.GetFoundedTextSerial()

Параметри: Немає параметрів.

Результат: string / String.

Під час виклику:

Внутрішній код реалізації, не самостійний скрипт.

public string GetFoundedTextSerial() => selectedJournalEntry != null

            ? $"0x{unchecked((uint)selectedJournalEntry.Serial):X8}" : "0x00000000";

UO.GetFoundedTextTimer

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

C#-сигнатури

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 .

Самостійні C#-скрипти

Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.

Простий приклад

Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.

Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.

var result = UO.GetFoundedTextTimer();
UO.Print("GetFoundedTextTimer: " + Convert.ToString(result));

1. Читати поле після пошуку – прямий скрипт

Параметри та порядок виконання:

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

2. Прочитати поле конкретного рядка - функція сценарію

Параметри та порядок виконання:

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

3. Зберегти поле перед наступним пошуком – клас сценарію

Параметри та порядок виконання:

  • Перший пошук вибирає 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.

UO.GetFoundedTextTimer() — UO.GetFoundedTextTimer()

Параметри: Немає параметрів.

Результат: int / Integer.

Під час виклику:

Внутрішній код реалізації, не самостійний скрипт.

public int GetFoundedTextTimer() => selectedJournalEntry != null ? JournalEntryTime(selectedJournalEntry.Timestamp) : 0;

UO.GetJournal

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

C#-сигнатури

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

Самостійні C#-скрипти

Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.

Простий приклад

Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.

Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.

var result = UO.GetJournal(0);
UO.Print("GetJournal: " + Convert.ToString(result));

1. Останній рядок та його автор — прямий скрипт

Параметри та порядок виконання:

  • 0 — найновіший рядок. Спочатку читаються текст та автор, потім виводиться результат.
  • Print може додати повідомлення; збережені text/author відносяться до попереднього вибраного запису.
var text = UO.GetJournal(0);
var author = UO.LineName();
UO.Print(author + ": " + text);

2. Попередній рядок, якщо він існує, — функція сценарію.

Параметри та порядок виконання:

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

3. Відрізнити порожній текст від відсутності рядка – клас сценарію

Параметри та порядок виконання:

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

UO.GetJournal(index) — UO.GetJournal(Integer)

Параметри: index (Integer)

Результат: string / String.

Під час виклику:

Внутрішній код реалізації, не самостійний скрипт.

public string GetJournalText(int index)

        {

            SelectJournalEntry(ReadJournalSnapshot(index));

            return selectedJournalEntry?.Text ?? string.Empty;

        }

UO.GetJournalColor

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

C#-сигнатури

string UO.GetJournalColor(object? index);

Читає поле hue рядка за поточним індексом, не змінюючи вибраний запис.

Параметри

  • index — Обов'язковий int — поточний індекс: 0 означає найновіший рядок, 1 — попередній. Індекси зсуваються при надходженні повідомлень. Це не serial, не ID варіант шаблону і не позитивний результат InJournal.

Повернене значення

string - UO hue як 0x0044; при неправильному індексі 0x0000. Це не RGB.

Поведінка

  • Кожен дзвінок читає поточну позицію. Для узгодженого тексту та полів одного запису спочатку Journal(index), потім GetFoundedText/Line*. Нульові значення можуть бути реальними даними.

Самостійні C#-скрипти

Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.

Простий приклад

Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.

Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.

var result = UO.GetJournalColor(0);
UO.Print("GetJournalColor: " + Convert.ToString(result));

1. Поле нового запису – прямий скрипт

Параметри та порядок виконання:

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

2. Поле попереднього запису – функція сценарію

Параметри та порядок виконання:

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

3. Зберегти значення перед наступною дією – клас сценарію

Параметри та порядок виконання:

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

UO.GetJournalColor(index) — UO.GetJournalColor(Integer)

Параметри: index (Integer)

Результат: string / String.

Під час виклику:

Внутрішній код реалізації, не самостійний скрипт.

public string JournalColor(int index) => bridge.JournalColor(index);

UO.GetJournalSerial

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

C#-сигнатури

string UO.GetJournalSerial(object? index);

Читає поле serial рядка за поточним індексом, не змінюючи вибраний запис.

Параметри

  • index — Обов'язковий int — поточний індекс: 0 означає найновіший рядок, 1 — попередній. Індекси зсуваються при надходженні повідомлень. Це не serial, не ID варіант шаблону і не позитивний результат InJournal.

Повернене значення

string - serial автора як 0x00001234; при неправильному індексі 0x00000000.

Поведінка

  • Кожен дзвінок читає поточну позицію. Для узгодженого тексту та полів одного запису спочатку Journal(index), потім GetFoundedText/Line*. Нульові значення можуть бути реальними даними.

Самостійні C#-скрипти

Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.

Простий приклад

Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.

Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.

var result = UO.GetJournalSerial(0);
UO.Print("GetJournalSerial: " + Convert.ToString(result));

1. Поле нового запису – прямий скрипт

Параметри та порядок виконання:

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

2. Поле попереднього запису – функція сценарію

Параметри та порядок виконання:

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

3. Зберегти значення перед наступною дією – клас сценарію

Параметри та порядок виконання:

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

UO.GetJournalSerial(index) — UO.GetJournalSerial(Integer)

Параметри: index (Integer)

Результат: string / String.

Під час виклику:

Внутрішній код реалізації, не самостійний скрипт.

public string JournalSerial(int index) => bridge.JournalSerial(index);

UO.HighJournal

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

C#-сигнатури

dynamic UO.HighJournal();

Повертає максимальний доступний індекс журналу.

Параметри

Параметрів немає.

Повернене значення

int: -1 при порожньому журналі; інакше число збережених записів мінус 1 — індекс найстарішого доступного запису. Journal/GetJournal використовують нульові індекси від нового запису до старого; позитивний результат InJournal використовує інший, одиничний відлік.

Поведінка

  • Нові повідомлення та очищення змінюють межі. Тут діє порядок Journal (0) від нового запису до старого.

Самостійні C#-скрипти

Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.

Простий приклад

Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.

Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.

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

1. Перевірити наявність записів – прямий скрипт

Параметри та порядок виконання:

  • Негативна межа означає порожній буфер.
  • При непустому буфері 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;

2. Кількість доступних рядків – функція сценарію

Параметри та порядок виконання:

  • HighJournal=-1 при порожньому журналі, тому total=0. LowJournal описує нижню межу, а не число рядків.
  • Це загальна кількість локально збережених рядків; LineCount відноситься до останнього пошуку.
return  RunScenario();
 object? RunScenario()
{
    var total = UO.HighJournal() + 1;
    UO.Print("Rows: " + Convert.ToString(total));
    return null;
}

3. Прочитати рядок на кордоні - клас сценарію

Параметри та порядок виконання:

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

UO.HighJournal() — UO.HighJournal()

Параметри: Немає параметрів.

Результат: dynamic / Any.

Під час виклику:

Внутрішній код реалізації, не самостійний скрипт.

case "highjournal": return new InjectionValue(bridge.JournalEntryCount() == 0 ? -1 : bridge.JournalEntryCount() - 1);

UO.InJournal

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

C#-сигнатури

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.

Самостійні C#-скрипти

Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.

Простий приклад

Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.

Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.

var result = UO.InJournal("You see");
UO.Print("InJournal: " + Convert.ToString(result));

1. Перевірити повідомлення з урахуванням регістру - прямий скрипт

Параметри та порядок виконання:

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

2. Декілька результатів без урахування регістру — функція сценарію

Параметри та порядок виконання:

  • Другий аргумент -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;

3. Перевірити лише двадцять останніх рядків – клас сценарію

Параметри та порядок виконання:

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

4. Усі розширені параметри – прямий скрипт

Параметри та порядок виконання:

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

5. Фільтр лише за часом – функція сценарію

Параметри та порядок виконання:

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

UO.InJournal(pattern) — UO.InJournal(Any)

Параметри: pattern (Any/String)

Результат: int / Any.

Під час виклику:

Внутрішній код реалізації, не самостійний скрипт.

case "injournal": return new InjectionValue(InJournal(Text(0)));

UO.InJournal(pattern) — UO.InJournal(String)

Параметри: pattern (Any/String)

Результат: int / Integer.

Під час виклику:

Внутрішній код реалізації, не самостійний скрипт.

public int InJournal(string pattern)

            => InJournalCore(pattern, -1, ignoreCase: false);

UO.InJournal(pattern, maxLinesOrIgnoreCase) — UO.InJournal(String,Integer)

Параметри: pattern (String), maxLinesOrIgnoreCase (Integer)

Результат: int / Integer.

Під час виклику:

Внутрішній код реалізації, не самостійний скрипт.

public int InJournal(string pattern, int maxLinesOrIgnoreCase)

            => InJournalCore(pattern,

                maxLinesOrIgnoreCase == -1 ? -1 : Math.Max(0, maxLinesOrIgnoreCase),

                ignoreCase: maxLinesOrIgnoreCase == -1);

UO.InJournal(pattern, serial, color) — UO.InJournal(Any,Any,Any)

Параметри: pattern (Any), serial (Any), color (Any)

Результат: int / Integer.

Під час виклику:

Виклик виконує збережений delegate обробника. Метод реєстрації створює цей delegate під час побудови API.

Внутрішній код реалізації, не самостійний скрипт.

values => new InjectionValue(CompactInJournal(values))

UO.InJournal(pattern, serial, color, startTime) — UO.InJournal(Any,Any,Any,Any)

Параметри: pattern (Any), serial (Any), color (Any), startTime (Any)

Результат: int / Integer.

Під час виклику:

Виклик виконує збережений delegate обробника. Метод реєстрації створює цей delegate під час побудови API.

Внутрішній код реалізації, не самостійний скрипт.

values => new InjectionValue(CompactInJournal(values))

UO.InJournal(pattern, serial, color, startTime, endTime) — UO.InJournal(Any,Any,Any,Any,Any)

Параметри: pattern (Any), serial (Any), color (Any), startTime (Any), endTime (Any)

Результат: int / Integer.

Під час виклику:

Виклик виконує збережений 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.

Під час виклику:

Виклик виконує збережений 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.

Під час виклику:

Виклик виконує збережений delegate обробника. Метод реєстрації створює цей delegate під час побудови API.

Внутрішній код реалізації, не самостійний скрипт.

values => new InjectionValue(CompactInJournal(values))

UO.InJournalBetweenTimes

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

C#-сигнатури

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.

Самостійні C#-скрипти

Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.

Простий приклад

Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.

Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.

var result = UO.InJournalBetweenTimes("You see", 0, Now());
UO.Print("InJournalBetweenTimes: " + Convert.ToString(result));

1. Перевірити повідомлення після дії – прямий скрипт

Параметри та порядок виконання:

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

2. Зафіксований інтервал від початку – функція сценарію

Параметри та порядок виконання:

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

3. Інтервал та альтернативи без урахування регістру – клас сценарію

Параметри та порядок виконання:

  • Останній -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.

UO.InJournalBetweenTimes(pattern, startTime) — UO.InJournalBetweenTimes(Any,Any)

Параметри: pattern (Any/String), startTime (Any/Integer)

Результат: int / Any.

Під час виклику:

Внутрішній код реалізації, не самостійний скрипт.

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) — UO.InJournalBetweenTimes(String,Integer)

Параметри: pattern (Any/String), startTime (Any/Integer)

Результат: int / Integer.

Під час виклику:

Внутрішній код реалізації, не самостійний скрипт.

public int InJournalBetweenTimes(string pattern, int startTime)

            => InJournalBetweenTimesCore(pattern, startTime, CurrentJournalTime(), -1, ignoreCase: false);

UO.InJournalBetweenTimes(pattern, startTime, endTime) — UO.InJournalBetweenTimes(Any,Any,Any)

Параметри: pattern (Any/String), startTime (Any/Integer), endTime (Any/Integer)

Результат: int / Any.

Під час виклику:

Внутрішній код реалізації, не самостійний скрипт.

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.

Під час виклику:

Внутрішній код реалізації, не самостійний скрипт.

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.

Під час виклику:

Внутрішній код реалізації, не самостійний скрипт.

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.

Під час виклику:

Внутрішній код реалізації, не самостійний скрипт.

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

UO.Journal

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

C#-сигнатури

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

Самостійні C#-скрипти

Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.

Простий приклад

Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.

Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.

var result = UO.Journal(0);
UO.Print("Journal: " + Convert.ToString(result));

1. Останній рядок та його автор — прямий скрипт

Параметри та порядок виконання:

  • 0 — найновіший рядок. Спочатку читаються текст та автор, потім виводиться результат.
  • Print може додати повідомлення; збережені text/author відносяться до попереднього вибраного запису.
var text = UO.Journal(0);
var author = UO.LineName();
UO.Print(author + ": " + text);

2. Попередній рядок, якщо він існує, — функція сценарію.

Параметри та порядок виконання:

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

3. Відрізнити порожній текст від відсутності рядка – клас сценарію

Параметри та порядок виконання:

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

UO.Journal(index) — UO.Journal(Any)

Параметри: index (Any/Integer)

Результат: string / Any.

Під час виклику:

Внутрішній код реалізації, не самостійний скрипт.

case "journal": return new InjectionValue(GetJournalText(Arg(0)));

UO.Journal(index) — UO.Journal(Integer)

Параметри: index (Any/Integer)

Результат: string / String.

Під час виклику:

Внутрішній код реалізації, не самостійний скрипт.

public string GetJournalText(int index)

        {

            SelectJournalEntry(ReadJournalSnapshot(index));

            return selectedJournalEntry?.Text ?? string.Empty;

        }

UO.JournalColor

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

C#-сигнатури

string UO.JournalColor(object? index);

Читає поле hue рядка за поточним індексом, не змінюючи вибраний запис.

Параметри

  • index — Обов'язковий int — поточний індекс: 0 означає найновіший рядок, 1 — попередній. Індекси зсуваються при надходженні повідомлень. Це не serial, не ID варіант шаблону і не позитивний результат InJournal.

Повернене значення

string - UO hue як 0x0044; при неправильному індексі 0x0000. Це не RGB.

Поведінка

  • Кожен дзвінок читає поточну позицію. Для узгодженого тексту та полів одного запису спочатку Journal(index), потім GetFoundedText/Line*. Нульові значення можуть бути реальними даними.

Самостійні C#-скрипти

Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.

Простий приклад

Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.

Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.

var result = UO.JournalColor(0);
UO.Print("JournalColor: " + Convert.ToString(result));

1. Поле нового запису – прямий скрипт

Параметри та порядок виконання:

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

2. Поле попереднього запису – функція сценарію

Параметри та порядок виконання:

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

3. Зберегти значення перед наступною дією – клас сценарію

Параметри та порядок виконання:

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

UO.JournalColor(index) — UO.JournalColor(Integer)

Параметри: index (Integer)

Результат: string / String.

Під час виклику:

Внутрішній код реалізації, не самостійний скрипт.

public string JournalColor(int index) => bridge.JournalColor(index);

UO.JournalSerial

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

C#-сигнатури

string UO.JournalSerial(object? index);

Читає поле serial рядка за поточним індексом, не змінюючи вибраний запис.

Параметри

  • index — Обов'язковий int — поточний індекс: 0 означає найновіший рядок, 1 — попередній. Індекси зсуваються при надходженні повідомлень. Це не serial, не ID варіант шаблону і не позитивний результат InJournal.

Повернене значення

string - serial автора як 0x00001234; при неправильному індексі 0x00000000.

Поведінка

  • Кожен дзвінок читає поточну позицію. Для узгодженого тексту та полів одного запису спочатку Journal(index), потім GetFoundedText/Line*. Нульові значення можуть бути реальними даними.

Самостійні C#-скрипти

Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.

Простий приклад

Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.

Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.

var result = UO.JournalSerial(0);
UO.Print("JournalSerial: " + Convert.ToString(result));

1. Поле нового запису – прямий скрипт

Параметри та порядок виконання:

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

2. Поле попереднього запису – функція сценарію

Параметри та порядок виконання:

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

3. Зберегти значення перед наступною дією – клас сценарію

Параметри та порядок виконання:

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

UO.JournalSerial(index) — UO.JournalSerial(Integer)

Параметри: index (Integer)

Результат: string / String.

Під час виклику:

Внутрішній код реалізації, не самостійний скрипт.

public string JournalSerial(int index) => bridge.JournalSerial(index);

UO.JournalTimer

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

C#-сигнатури

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*. Нульові значення можуть бути реальними даними.

Самостійні C#-скрипти

Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.

Простий приклад

Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.

Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.

var result = UO.JournalTimer(0);
UO.Print("JournalTimer: " + Convert.ToString(result));

1. Поле нового запису – прямий скрипт

Параметри та порядок виконання:

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

2. Поле попереднього запису – функція сценарію

Параметри та порядок виконання:

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

3. Зберегти значення перед наступною дією – клас сценарію

Параметри та порядок виконання:

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

UO.JournalTimer(index) — UO.JournalTimer(Integer)

Параметри: index (Integer)

Результат: int / Integer.

Під час виклику:

Внутрішній код реалізації, не самостійний скрипт.

public int JournalTimer(int index) => JournalEntryTime(index);

UO.LastJournalMessage

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

C#-сигнатури

dynamic UO.LastJournalMessage();

Читає текст нового запису локального журналу.

Параметри

Параметрів немає.

Повернене значення

string - текст нового запису; порожній рядок, якщо журналу немає або сам запис містить пустий текст.

Поведінка

  • Пошук та Journal/GetJournal/LastJournalMessage зберігають текст і поля одного запису в поточному скрипті. Нові повідомлення не підміняють ці поля. Якщо запис витіснено з обмеженого журналу, збережені поля залишаються, але LineIndex/GetFoundedTextIndex повертають -1. Наступний пошук чи читання вибирає інший запис; невдалий пошук, неправильний індекс та очищення через цей скрипт скидають вибір.
  • Оновлює вибір і поля Line* так само, як Journal (0 ⟧).

Самостійні C#-скрипти

Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.

Простий приклад

Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.

Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.

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

1. Прочитати та зберегти текст — прямий скрипт

Параметри та порядок виконання:

  • Аргументів немає; text копіює поточний останній рядок.
  • Друк після читання може стати останнім повідомленням.
var text = UO.LastJournalMessage();
UO.Print(text);

2. Перевірити підрядок - функція сценарію

Параметри та порядок виконання:

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

3. Порівняти з результатом пошуку - клас сценарію

Параметри та порядок виконання:

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

UO.LastJournalMessage() — UO.LastJournalMessage()

Параметри: Немає параметрів.

Результат: dynamic / Any.

Під час виклику:

Внутрішній код реалізації, не самостійний скрипт.

case "lastjournalmessage": return new InjectionValue(GetJournalText(0));

UO.LastMessage

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

C#-сигнатури

string UO.LastMessage();

Читає текст нового запису локального журналу.

Параметри

Параметрів немає.

Повернене значення

string - текст нового запису; порожній рядок, якщо журналу немає або сам запис містить пустий текст.

Поведінка

  • Цей getter читає новий запис, але зберігає попередній вибір GetFoundedText/Line*. Для вибору останнього запису використовуйте LastJournalMessage або Journal(0).
  • Первинний довідник: https://forum.yoko.com.ua/viewtopic.php?p=27633 .

Самостійні C#-скрипти

Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.

Простий приклад

Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.

Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.

var result = UO.LastMessage();
UO.Print("LastMessage: " + Convert.ToString(result));

1. Прочитати та зберегти текст — прямий скрипт

Параметри та порядок виконання:

  • Аргументів немає; text копіює поточний останній рядок.
  • Друк після читання може стати останнім повідомленням.
var text = UO.LastMessage();
UO.Print(text);

2. Перевірити підрядок - функція сценарію

Параметри та порядок виконання:

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

3. Порівняти з результатом пошуку - клас сценарію

Параметри та порядок виконання:

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

UO.LastMessage() — UO.LastMessage()

Параметри: Немає параметрів.

Результат: string / String.

Під час виклику:

Внутрішній код реалізації, не самостійний скрипт.

public string LastMessage() => bridge.LastMessage();

UO.LineCount

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

C#-сигнатури

dynamic UO.LineCount();

Читає кількість відповідних рядків останнього пошуку.

Параметри

Параметрів немає.

Повернене значення

int — кількість записів, що збіглися в останній перевіреній області. 0 за відсутності збігів; при newestOnly=true не більше 1. Це не число рядків всього журналу, не число підрядок в одному повідомленні і не позиція знайденого тексту.

Поведінка

  • Пошук враховує ліміт, час, serial, hue та одноаргументний SetJournalLine. Пряме Journal/GetJournal не перераховує лічильник. Очищення скидає його. Лічильник належить мосту поточного скрипту.

Самостійні C#-скрипти

Кожен приклад можна зберегти окремим файлом .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. Усі збіги – прямий скрипт

Параметри та порядок виконання:

  • Пошук без ліміту та регістру. Вважаються рядки, а не кількість або всередині рядка.
  • результат — позиція плюс 1; сірники - окрема кількість.
var result = UO.InJournal("ore", -1);
var matches = UO.LineCount();
UO.Print(Convert.ToString(matches));

2. Збіги серед останніх десяти рядків – функція сценарію

Параметри та порядок виконання:

  • 10 — максимум рядків, що перевіряються; регістр враховується.
  • Кількість може бути від 0 до 10, навіть якщо старіших збігів набагато більше.
return  RunScenario();
 object? RunScenario()
{
    var result = UO.InJournal("ore", 10);
    UO.Print(Convert.ToString(UO.LineCount()));
    return null;
}

3. Пошук із раннім завершенням — клас сценарію

Параметри та порядок виконання:

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

UO.LineCount() — UO.LineCount()

Параметри: Немає параметрів.

Результат: dynamic / Any.

Під час виклику:

Внутрішній код реалізації, не самостійний скрипт.

case "linecount": return new InjectionValue(bridge.JournalMatchCount());

UO.LineID

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

C#-сигнатури

dynamic UO.LineID();

Повертає числовий serial автора вибраного запису журналу.

Параметри

Параметрів немає.

Повернене значення

int - 32-бітний serial автора. Без вибору - 0. Старший біт може дати негативне число через signed int; GetFoundedTextSerial зберігає повне hex-подання. Це не graphic/type.

Поведінка

  • Пошук та Journal/GetJournal/LastJournalMessage зберігають текст і поля одного запису в поточному скрипті. Нові повідомлення не підміняють ці поля. Якщо запис витіснено з обмеженого журналу, збережені поля залишаються, але LineIndex/GetFoundedTextIndex повертають -1. Наступний пошук чи читання вибирає інший запис; невдалий пошук, неправильний індекс та очищення через цей скрипт скидають вибір.
  • Getter не запускає пошук і не вибирає найновіший рядок. Нульові/порожні значення можуть бути діючими даними; враховуйте результат пошуку.

Самостійні C#-скрипти

Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.

Простий приклад

Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.

Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.

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

1. Читати поле після пошуку – прямий скрипт

Параметри та порядок виконання:

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

2. Прочитати поле конкретного рядка - функція сценарію

Параметри та порядок виконання:

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

3. Зберегти поле перед наступним пошуком – клас сценарію

Параметри та порядок виконання:

  • Перший пошук вибирає 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.

UO.LineID() — UO.LineID()

Параметри: Немає параметрів.

Результат: dynamic / Any.

Під час виклику:

Внутрішній код реалізації, не самостійний скрипт.

case "lineid": return new InjectionValue(selectedJournalEntry?.Serial ?? 0);

UO.LineIndex

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

C#-сигнатури

dynamic UO.LineIndex();

Повертає поточний індекс вибраного запису, якщо він зберігається в журналі.

Параметри

Параметрів немає.

Повернене значення

int — поточний індекс від 0 (найновіший рядок). -1 означає, що вибору немає або вибраний запис вже видалено/витіснено. Це не результат InJournal: з індексу не потрібно віднімати 1.

Поведінка

  • Пошук та Journal/GetJournal/LastJournalMessage зберігають текст і поля одного запису в поточному скрипті. Нові повідомлення не підміняють ці поля. Якщо запис витіснено з обмеженого журналу, збережені поля залишаються, але LineIndex/GetFoundedTextIndex повертають -1. Наступний пошук чи читання вибирає інший запис; невдалий пошук, неправильний індекс та очищення через цей скрипт скидають вибір.
  • Індекс перераховується з ідентичності запису. Нові повідомлення збільшують його. Старий збережений індекс не є постійним ID; для тексту безпечніше GetFoundedText.

Самостійні C#-скрипти

Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.

Простий приклад

Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.

Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.

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

1. Індекс знайденого запису – прямий скрипт

Параметри та порядок виконання:

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

2. Перевірити пряме читання – функція сценарію

Параметри та порядок виконання:

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

3. Оновити індекс після очікування – клас сценарію

Параметри та порядок виконання:

  • Очікування 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.

UO.LineIndex() — UO.LineIndex()

Параметри: Немає параметрів.

Результат: dynamic / Any.

Під час виклику:

Внутрішній код реалізації, не самостійний скрипт.

case "lineindex": return new InjectionValue(GetFoundedTextIndex());

UO.LineMsgType

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

C#-сигнатури

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 не запускає пошук і не вибирає найновіший рядок. Нульові/порожні значення можуть бути діючими даними; враховуйте результат пошуку.

Самостійні C#-скрипти

Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.

Простий приклад

Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.

Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.

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

1. Читати поле після пошуку – прямий скрипт

Параметри та порядок виконання:

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

2. Прочитати поле конкретного рядка - функція сценарію

Параметри та порядок виконання:

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

3. Зберегти поле перед наступним пошуком – клас сценарію

Параметри та порядок виконання:

  • Перший пошук вибирає 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.

UO.LineMsgType() — UO.LineMsgType()

Параметри: Немає параметрів.

Результат: dynamic / Any.

Під час виклику:

Внутрішній код реалізації, не самостійний скрипт.

case "linemsgtype": return new InjectionValue(selectedJournalEntry?.MessageType ?? 0);

UO.LineName

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

C#-сигнатури

dynamic UO.LineName();

Повертає ім'я автора вибраного запису журналу.

Параметри

Параметрів немає.

Повернене значення

string — ім'я автора вибраного запису, наприклад, System або ім'я персонажа; пустий рядок без вибору/без імені. Ім'я не гарантує унікальність персонажа.

Поведінка

  • Пошук та Journal/GetJournal/LastJournalMessage зберігають текст і поля одного запису в поточному скрипті. Нові повідомлення не підміняють ці поля. Якщо запис витіснено з обмеженого журналу, збережені поля залишаються, але LineIndex/GetFoundedTextIndex повертають -1. Наступний пошук чи читання вибирає інший запис; невдалий пошук, неправильний індекс та очищення через цей скрипт скидають вибір.
  • Getter не запускає пошук і не вибирає найновіший рядок. Нульові/порожні значення можуть бути діючими даними; враховуйте результат пошуку.

Самостійні C#-скрипти

Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.

Простий приклад

Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.

Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.

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

1. Читати поле після пошуку – прямий скрипт

Параметри та порядок виконання:

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

2. Прочитати поле конкретного рядка - функція сценарію

Параметри та порядок виконання:

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

3. Зберегти поле перед наступним пошуком – клас сценарію

Параметри та порядок виконання:

  • Перший пошук вибирає 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.

UO.LineName() — UO.LineName()

Параметри: Немає параметрів.

Результат: dynamic / Any.

Під час виклику:

Внутрішній код реалізації, не самостійний скрипт.

case "linename": return new InjectionValue(selectedJournalEntry?.Name ?? string.Empty);

UO.LineTextColor

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

C#-сигнатури

dynamic UO.LineTextColor();

Повертає числовий колір вибраного запису журналу.

Параметри

Параметрів немає.

Повернене значення

int — UO hue обраного запису (0…65535); без вибору 0. Нуль допустимий як колір. Це не RGB і не ID автора.

Поведінка

  • Пошук та Journal/GetJournal/LastJournalMessage зберігають текст і поля одного запису в поточному скрипті. Нові повідомлення не підміняють ці поля. Якщо запис витіснено з обмеженого журналу, збережені поля залишаються, але LineIndex/GetFoundedTextIndex повертають -1. Наступний пошук чи читання вибирає інший запис; невдалий пошук, неправильний індекс та очищення через цей скрипт скидають вибір.
  • Getter не запускає пошук і не вибирає найновіший рядок. Нульові/порожні значення можуть бути діючими даними; враховуйте результат пошуку.

Самостійні C#-скрипти

Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.

Простий приклад

Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.

Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.

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

1. Читати поле після пошуку – прямий скрипт

Параметри та порядок виконання:

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

2. Прочитати поле конкретного рядка - функція сценарію

Параметри та порядок виконання:

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

3. Зберегти поле перед наступним пошуком – клас сценарію

Параметри та порядок виконання:

  • Перший пошук вибирає 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.

UO.LineTextColor() — UO.LineTextColor()

Параметри: Немає параметрів.

Результат: dynamic / Any.

Під час виклику:

Внутрішній код реалізації, не самостійний скрипт.

case "linetextcolor":

                    return new InjectionValue(selectedJournalEntry?.Color ?? 0);

UO.LineTextFont

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

C#-сигнатури

dynamic UO.LineTextFont();

Повертає шрифт вибраного запису журналу.

Параметри

Параметрів немає.

Повернене значення

int — UO font ID вибраного запису (0…255 у клієнті); без вибору 0. Це ID ігрового шрифту, не розмір шрифту IDE.

Поведінка

  • Пошук та Journal/GetJournal/LastJournalMessage зберігають текст і поля одного запису в поточному скрипті. Нові повідомлення не підміняють ці поля. Якщо запис витіснено з обмеженого журналу, збережені поля залишаються, але LineIndex/GetFoundedTextIndex повертають -1. Наступний пошук чи читання вибирає інший запис; невдалий пошук, неправильний індекс та очищення через цей скрипт скидають вибір.
  • Getter не запускає пошук і не вибирає найновіший рядок. Нульові/порожні значення можуть бути діючими даними; враховуйте результат пошуку.

Самостійні C#-скрипти

Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.

Простий приклад

Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.

Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.

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

1. Читати поле після пошуку – прямий скрипт

Параметри та порядок виконання:

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

2. Прочитати поле конкретного рядка - функція сценарію

Параметри та порядок виконання:

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

3. Зберегти поле перед наступним пошуком – клас сценарію

Параметри та порядок виконання:

  • Перший пошук вибирає 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.

UO.LineTextFont() — UO.LineTextFont()

Параметри: Немає параметрів.

Результат: dynamic / Any.

Під час виклику:

Внутрішній код реалізації, не самостійний скрипт.

case "linetextfont": return new InjectionValue(selectedJournalEntry?.Font ?? 0);

UO.LineTime

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

C#-сигнатури

dynamic UO.LineTime();

Повертає календарну позначку часу вибраного запису журналу.

Параметри

Параметрів немає.

Повернене значення

double — OLE Automation Date, число днів від 30.12.1899, дробова частина задає час доби. Без вибору 0. Це не мілісекунди Now() і не цілий Unix timestamp. Різниця двох таких міток множиться на 86400000 для мілісекунд.

Поведінка

  • Пошук та Journal/GetJournal/LastJournalMessage зберігають текст і поля одного запису в поточному скрипті. Нові повідомлення не підміняють ці поля. Якщо запис витіснено з обмеженого журналу, збережені поля залишаються, але LineIndex/GetFoundedTextIndex повертають -1. Наступний пошук чи читання вибирає інший запис; невдалий пошук, неправильний індекс та очищення через цей скрипт скидають вибір.
  • Getter не запускає пошук і не вибирає найновіший рядок. Нульові/порожні значення можуть бути діючими даними; враховуйте результат пошуку.

Самостійні C#-скрипти

Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.

Простий приклад

Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.

Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.

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

1. Читати поле після пошуку – прямий скрипт

Параметри та порядок виконання:

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

2. Прочитати поле конкретного рядка - функція сценарію

Параметри та порядок виконання:

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

3. Зберегти поле перед наступним пошуком – клас сценарію

Параметри та порядок виконання:

  • Перший пошук вибирає 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.

UO.LineTime() — UO.LineTime()

Параметри: Немає параметрів.

Результат: dynamic / Any.

Під час виклику:

Внутрішній код реалізації, не самостійний скрипт.

case "linetime": return new InjectionValue(selectedJournalEntry?.Timestamp ?? 0d);

UO.LineType

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

C#-сигнатури

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 не запускає пошук і не вибирає найновіший рядок. Нульові/порожні значення можуть бути діючими даними; враховуйте результат пошуку.

Самостійні C#-скрипти

Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.

Простий приклад

Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.

Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.

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

1. Читати поле після пошуку – прямий скрипт

Параметри та порядок виконання:

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

2. Прочитати поле конкретного рядка - функція сценарію

Параметри та порядок виконання:

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

3. Зберегти поле перед наступним пошуком – клас сценарію

Параметри та порядок виконання:

  • Перший пошук вибирає 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.

UO.LineType() — UO.LineType()

Параметри: Немає параметрів.

Результат: dynamic / Any.

Під час виклику:

Внутрішній код реалізації, не самостійний скрипт.

case "linetype": return new InjectionValue(selectedJournalEntry?.TextType ?? 0);

UO.LowJournal

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

C#-сигнатури

dynamic UO.LowJournal();

Повертає доступний мінімальний індекс журналу.

Параметри

Параметрів немає.

Повернене значення

int: -1 при порожньому журналі; інакше 0 — індекс найновішого доступного запису. Journal/GetJournal використовують нульові індекси від нового запису до старого; позитивний результат InJournal використовує інший, одиничний відлік.

Поведінка

  • Нові повідомлення та очищення змінюють межі. Тут діє порядок Journal (0) від нового запису до старого.

Самостійні C#-скрипти

Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.

Простий приклад

Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.

Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.

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

1. Перевірити наявність записів – прямий скрипт

Параметри та порядок виконання:

  • Негативна межа означає порожній буфер.
  • При непустому буфері 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;

2. Прочитати рядок на кордоні – функція сценарію

Параметри та порядок виконання:

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

3. Прочитати діапазон поточного журналу – клас сценарію

Параметри та порядок виконання:

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

UO.LowJournal() — UO.LowJournal()

Параметри: Немає параметрів.

Результат: dynamic / Any.

Під час виклику:

Внутрішній код реалізації, не самостійний скрипт.

case "lowjournal": return new InjectionValue(bridge.JournalEntryCount() == 0 ? -1 : 0);

UO.SetJournalLine

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

C#-сигнатури

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().

Самостійні C#-скрипти

Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.

Простий приклад

Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.

Команда викликається окремим рядком. Повідомлення перед нею показує початок виклику, а не підтвердження дії сервера.

UO.Print("Calling UO.SetJournalLine");
UO.SetJournalLine(0);

1. Позначити останній рядок — прямий скрипт

Параметри та порядок виконання:

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

2. Замінити текст порожнім рядком – функція сценарію

Параметри та порядок виконання:

  • Порожній рядок замінює текст, але не видаляє запис та його автора.
  • Неправильний індекс пропускається. 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;
}

3. Зняти обмеження пошуку – клас сценарію

Параметри та порядок виконання:

  • Один аргумент 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.

UO.SetJournalLine(index) — UO.SetJournalLine(Integer)

Параметри: index (Integer)

Результат: void / Unit.

Під час виклику:

Внутрішній код реалізації, не самостійний скрипт.

public void SetJournalLine(int index) => bridge.SetJournalLine(index);

UO.SetJournalLine(stringIndex, text) — UO.SetJournalLine(Any,Any)

Параметри: stringIndex (Any/Integer), text (Any/String)

Результат: void / Unit.

Під час виклику:

Внутрішній код реалізації, не самостійний скрипт.

case "setjournalline":

                    if (arguments.Length > 1) bridge.SetJournalLine(Arg(0), Text(1));

                    else bridge.SetJournalLine(Arg(0));

                    return InjectionValue.Unit;

UO.SetJournalLine(stringIndex, text) — UO.SetJournalLine(Integer,String)

Параметри: stringIndex (Any/Integer), text (Any/String)

Результат: void / Unit.

Під час виклику:

Внутрішній код реалізації, не самостійний скрипт.

public void SetJournalLine(int index, string text) => bridge.SetJournalLine(index, text);

Clone this wiki locally