Repository navigation
RU UO Topic journal
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
Главная · C# · IDE · UO API · A–Z · Примеры · Языки
Поиск и ожидание сообщений, индексы строк, время, цвет и serial автора. Отделяйте старые строки журнала от сообщения, которое ожидаете после действия.
| Тема | Команды и пояснения |
|---|---|
| Journal | UO.Journal |
| InJournal | UO.InJournal |
| InJournalBetweenTimes | UO.InJournalBetweenTimes |
| WaitJournalLine | UO.WaitJournalLine |
| System Journal | UO.AddToSystemJournal · UO.AddToSystemJournalEx · UO.ClearSystemJournal · UO.WaitJournalLineSystem |
| Journal Ignore | UO.AddJournalIgnore · UO.ClearJournalIgnore |
| Journal Color | UO.JournalColor · UO.GetJournalColor |
| Journal Serial | UO.JournalSerial · UO.GetJournalSerial |
| Journal Timer | UO.JournalTimer |
| Found Text | UO.GetFoundedText · UO.GetFoundedTextColor · UO.GetFoundedTextID · UO.GetFoundedTextIndex · UO.GetFoundedTextSerial · UO.GetFoundedTextTimer |
UO.Journal · UO.GetJournal · UO.InJournal · UO.InJournalBetweenTimes · UO.LowJournal · UO.HighJournal · UO.ClearJournal · UO.DeleteJournal · UO.ChangeJournalLength · UO.SetJournalLine · UO.AddToJournal · UO.LastJournalMessage · UO.LastMessage
UO.WaitJournalLine · UO.WaitJournalLineSystem · UO.WaitingForJournalText
UO.AddToSystemJournal · UO.AddToSystemJournalEx · UO.ClearSystemJournal
UO.AddJournalIgnore · UO.ClearJournalIgnore
UO.JournalColor · UO.GetJournalColor · UO.JournalSerial · UO.GetJournalSerial · UO.JournalTimer · UO.LineCount · UO.LineID · UO.LineIndex · UO.LineMsgType · UO.LineName · UO.LineTextColor · UO.LineTextFont · UO.LineTime · UO.LineType
UO.FoundedParamId · UO.GetFoundedText · UO.GetFoundedTextColor · UO.GetFoundedTextID · UO.GetFoundedTextIndex · UO.GetFoundedTextSerial · UO.GetFoundedTextTimer
В каждой карточке команды есть несколько самостоятельных сценариев: прямой код, функции и классы. Ниже приведены отдельные короткие сценарии; ограничения и полный разбор находятся в карточках.
Параметры, результат и все сценарии
var found = UO.InJournal("You see");
if (Truth(found > 0))
{
var text = UO.GetFoundedText();
UO.Print(text);
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметры, результат и все сценарии
var started = Now();
var found = UO.WaitJournalLine(started, "success|failed", 3000);
if (Truth(found))
{
UO.Print(UO.GetFoundedText());
}
else
{
UO.Print("Timeout");
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.AddJournalIgnore(object? arg0);Добавляет локальный текстовый фильтр для записей игрового журнала ClassicUO.
-
Convert.ToString— непустой текстовый фрагмент для поиска в тексте записи журнала.
void. Команда не возвращает число совпадений.
- Текст обрезается по краям; пустая строка не добавляется. При проверке записи поиск подстроки выполняется без учёта регистра. Совпавшая запись скрывается локально в журнале клиента; сервер не получает фильтр.
UO.ClearJournalIgnore()очищает все добавленные текстовые фильтры. Уже отображённые записи не восстанавливаются при очистке.
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Команда вызывается отдельной строкой. Сообщение перед ней показывает начало вызова, а не подтверждение действия сервера.
UO.Print("Calling UO.AddJournalIgnore");
UO.AddJournalIgnore("You see");Параметры и ход выполнения:
- Скрывать новые записи, содержащие эту фразу.
UO.AddJournalIgnore("You see");Параметры и ход выполнения:
- Фильтр ищет подстроку без учёта регистра.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var phrase = "vendor";
UO.AddJournalIgnore(phrase);
return null;
}Параметры и ход выполнения:
- Несколько вызовов добавляют независимые текстовые фильтры.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
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;
}
async public Task<object?> RunScenarioAsync()
{
UO.AddJournalIgnore("You see");
UO.AddJournalIgnore("vendor");
return null;
}
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.AddToJournal(object? arg0);Показывает локальное сообщение о ходе скрипта или условии остановки. Его видите вы, а не другие игроки.
Вызов метода с возвращаемым типом void пишется как самостоятельный оператор C#; присваивать или проверять результат нельзя. Завершение оператора не является подтверждением игрового сервера.
- Сообщение идёт в нижнюю левую область игрового окна и локальный журнал. Копия доступна в выводе IDE. В общем журнале менеджера включите фильтр сообщений скриптов (script): запись доступна и без игрового окна. Фильтр серверных системных сообщений (system) такие записи не выбирает. Сетевой пакет речи не отправляется. Для надписи над головой есть UO.CharPrint.
-
UO.Printдобавляет новую запись в журнал игровых сообщений: сначала прочитайте или сохраните нужную строку/результат поиска, затем запишите диагностическое сообщение. В быстром цикле записывайте сообщения при изменениях, а не на каждой итерации. - Используется цвет системных сообщений данного скриптового runtime: первоначально 0x0440, изменяется UO.ConColor. Это локальная запись; имя команды не означает отправку серверу.
- UO.Print · UO.CharPrint · UO.Say · UO.ConColor
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Команда вызывается отдельной строкой. Сообщение перед ней показывает начало вызова, а не подтверждение действия сервера.
UO.Print("Calling UO.AddToJournal");
UO.AddToJournal("Script started");Параметры и ход выполнения:
- processed=12 — демонстрационное число уже обработанных предметов. Convert.ToString превращает его в строку. Этот пример только сообщает число, сам предметы не переносит.
var processed = 12;
UO.AddToJournal("Processed item entries: " + Convert.ToString(processed));Параметры и ход выполнения:
- Читаются вес и максимум персонажа. Нулевой/неизвестный максимум не считается перегрузом. При weight >= maximum печатается одна строка и Main завершается; предметы не выбрасываются.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var weight = UO.Weight();
var maximum = UO.MaxWeight();
if (Truth(maximum > 0) && Truth(weight >= maximum))
{
UO.AddToJournal("Too heavy: " + Convert.ToString(weight) + "/" + Convert.ToString(maximum));
return null;
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметры и ход выполнения:
- Main запоминает вес, ждёт 1000 миллисекунд и вызывает полностью объявленный ReportWeight. Помощник печатает только если вес изменился и возвращает новый вес для следующей проверки. Сам он не создаёт бесконечный цикл.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
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;
}
async public Task<object?> RunScenarioAsync()
{
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;
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.AddToSystemJournal(object? arg0);Показывает локальное сообщение о ходе скрипта или условии остановки. Его видите вы, а не другие игроки.
Вызов метода с возвращаемым типом void пишется как самостоятельный оператор C#; присваивать или проверять результат нельзя. Завершение оператора не является подтверждением игрового сервера.
- Сообщение идёт в нижнюю левую область игрового окна и локальный журнал. Копия доступна в выводе IDE. В общем журнале менеджера включите фильтр сообщений скриптов (script): запись доступна и без игрового окна. Фильтр серверных системных сообщений (system) такие записи не выбирает. Сетевой пакет речи не отправляется. Для надписи над головой есть UO.CharPrint.
-
UO.Printдобавляет новую запись в журнал игровых сообщений: сначала прочитайте или сохраните нужную строку/результат поиска, затем запишите диагностическое сообщение. В быстром цикле записывайте сообщения при изменениях, а не на каждой итерации. - Используется цвет системных сообщений данного скриптового runtime: первоначально 0x0440, изменяется UO.ConColor. Это локальная запись; имя команды не означает отправку серверу.
- UO.Print · UO.CharPrint · UO.Say · UO.ConColor
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Команда вызывается отдельной строкой. Сообщение перед ней показывает начало вызова, а не подтверждение действия сервера.
UO.Print("Calling UO.AddToSystemJournal");
UO.AddToSystemJournal("Script started");Параметры и ход выполнения:
- processed=12 — демонстрационное число уже обработанных предметов. Convert.ToString превращает его в строку. Этот пример только сообщает число, сам предметы не переносит.
var processed = 12;
UO.AddToSystemJournal("Processed item entries: " + Convert.ToString(processed));Параметры и ход выполнения:
- Читаются вес и максимум персонажа. Нулевой/неизвестный максимум не считается перегрузом. При weight >= maximum печатается одна строка и Main завершается; предметы не выбрасываются.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var weight = UO.Weight();
var maximum = UO.MaxWeight();
if (Truth(maximum > 0) && Truth(weight >= maximum))
{
UO.AddToSystemJournal("Too heavy: " + Convert.ToString(weight) + "/" + Convert.ToString(maximum));
return null;
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметры и ход выполнения:
- Main запоминает вес, ждёт 1000 миллисекунд и вызывает полностью объявленный ReportWeight. Помощник печатает только если вес изменился и возвращает новый вес для следующей проверки. Сам он не создаёт бесконечный цикл.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
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;
}
async public Task<object?> RunScenarioAsync()
{
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;
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.AddToSystemJournalEx(object? arg0, object? arg1, object? arg2, object? arg3, object? arg4);Выводит локальную строку в игровое окно и журнал с приближённым отображением заданного оформления. Полезно для различимых диагностических сообщений скрипта.
-
TextColor— Цвет текста в формате 0xRRGGBB, не UO hue. Альфа-канал не используется. Пример 0xFF8800 — оранжевый; движок выбирает ближайший цвет из палитры UO. -
BGColor— Отрицательное число — фон по умолчанию; неотрицательное — RGB 0xRRGGBB. Запрошенный фон записывается в вывод IDE, но отдельный цветной прямоугольник за строкой в игровом окне не рисуется. -
FontSize— Запрошенный размер в пунктах: значение <= 0 заменяется на 10, затем применяется диапазон 4..72. Игровой номер шрифта вычисляется целочисленно как (размер + 1) / 3; точного настольного размера в окне игры нет. -
FontName— Название шрифта для записи сведений об оформлении в вывод IDE. Пробелы по краям удаляются; пустое значение означает Consolas. Произвольный Windows-шрифт в игровое окно эта команда не загружает.
Вызов метода с возвращаемым типом void пишется как самостоятельный оператор C#; присваивать или проверять результат нельзя. Завершение оператора не является подтверждением игрового сервера.
- Все пять аргументов обязательны: Text, TextColor, BGColor, FontSize, FontName. Текст виден локально, в IDE дополнительно сохраняется запрошенное оформление. Цвет фона и имя шрифта являются сведениями об оформлении, а не гарантией их точного воспроизведения. ConColor не меняет явно переданный RGB.
- Сообщение идёт в нижнюю левую область игрового окна и локальный журнал. Копия доступна в выводе IDE. В общем журнале менеджера включите фильтр сообщений скриптов (script): запись доступна и без игрового окна. Фильтр серверных системных сообщений (system) такие записи не выбирает. Сетевой пакет речи не отправляется. Для надписи над головой есть UO.CharPrint.
- UO.Print · UO.CharPrint · UO.ClientPrintEx · UO.AddToSystemJournalEx
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Команда вызывается отдельной строкой. Сообщение перед ней показывает начало вызова, а не подтверждение действия сервера.
UO.Print("Calling UO.AddToSystemJournalEx");
UO.AddToSystemJournalEx("Route started", 0xFF8800, -1, 12, "Consolas");Параметры и ход выполнения:
- Оранжевое сообщение, фон -1 по умолчанию, размер 12: получается игровой шрифт 4. Consolas сохраняется в сведениях IDE. Цвет может отличаться от точного RGB из-за палитры игры.
UO.AddToSystemJournalEx("Route started", 0xFF8800, -1, 12, "Consolas");Параметры и ход выполнения:
- Положительное значение BGColor 0x112233 сохраняет запрос фона в IDE. Для FontSize=0 используется 10, пустой FontName становится Consolas. В игровом окне фон по этому параметру не закрашивается.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
UO.AddToSystemJournalEx("Formatting details", 0x33AAFF, 0x112233, 0, "");
return null;
}Параметры и ход выполнения:
- ReportCount — полностью объявленная процедура. Она сообщает только об изменении количества, выбирая зелёный RGB при росте и красный при уменьшении. Возвращает новое количество для следующего сравнения; результат принадлежит ReportCount, а не AddToSystemJournalEx.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
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;
}
async public Task<object?> RunScenarioAsync()
{
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;
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.ChangeJournalLength(object? arg0);Меняет предел сохраняемой истории журналов клиента.
-
newLength— Число записей, преобразуемое в int. Runtime ограничивает снизу до 1; JournalManager ограничивает сверху Constants.MAX_JOURNAL_HISTORY_COUNT.
void — возвращаемого значения нет.
- Сохраняет state.JournalLength, затем вызывает SetJournalLength. JournalManager уменьшает существующую историю, удаляя самые старые записи до нового лимита. Отфильтрованные записи и отображение журнала — отдельные механизмы.
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Команда вызывается отдельной строкой. Сообщение перед ней показывает начало вызова, а не подтверждение действия сервера.
UO.Print("Calling UO.ChangeJournalLength");
UO.ChangeJournalLength(100);Параметры и ход выполнения:
- Новый предел ограничивает число сохраняемых записей.
UO.ChangeJournalLength(100);Параметры и ход выполнения:
- При уменьшении лимита старые записи удаляются.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
UO.ChangeJournalLength(1);
return null;
}Параметры и ход выполнения:
- Ноль нормализуется в 1, а не очищает журнал.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
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;
}
async public Task<object?> RunScenarioAsync()
{
UO.ChangeJournalLength(0);
return null;
}
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.ClearJournal();Удаляет строки из общего локального журнала.
Параметров нет.
void — нет возвращаемого значения. Не возвращает число удалённых строк. Счётчик совпадений и выбор текущего скрипта сбрасываются.
- Общий буфер доступен всем скриптам: удалённые строки перестают находиться. Снимки, ранее сохранённые другими скриптами, могут остаться, но их индекс станет -1.
- Без текстового фильтра очищается весь буфер Classic UO, включая System. Локальный файл журнала и сообщения сервера не удаляются.
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Команда вызывается отдельной строкой. Сообщение перед ней показывает начало вызова, а не подтверждение действия сервера.
UO.Print("Calling UO.ClearJournal");
UO.ClearJournal();Параметры и ход выполнения:
- Аргументов нет. Удаляются все строки общего буфера.
- Счётчик последнего поиска становится 0; Print после очистки может добавить новую строку.
UO.ClearJournal();
var count = UO.LineCount();
UO.Print("Search matches after clear: " + Convert.ToString(count));Параметры и ход выполнения:
- Очистка выполняется до сохранения временной метки. 1000 — ограниченное ожидание в миллисекундах.
- Для исключения старых сообщений обычно достаточно метки времени; очистка затрагивает и другие скрипты.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
UO.ClearJournal();
var started = Now();
var found = UO.WaitJournalLine(started, "notice", 1000);
UO.Print(Convert.ToString(found));
return null;
}Параметры и ход выполнения:
- После очистки через текущий скрипт index=-1, даже если удалялась только часть буфера.
- Переменная text сохраняет ранее прочитанную копию, а GetFoundedText уже очищен.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
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;
}
async public Task<object?> RunScenarioAsync()
{
var text = UO.Journal(0);
UO.ClearJournal();
var index = UO.LineIndex();
UO.Print(Convert.ToString(index));
return null;
}
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.ClearJournalIgnore();Удаляет все текстовые фильтры JournalManager.
Параметров нет.
void — возвращаемого значения нет.
- Удаление фильтров не удаляет историю и не отменяет фильтры имён AddChatUserIgnore.
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Команда вызывается отдельной строкой. Сообщение перед ней показывает начало вызова, а не подтверждение действия сервера.
UO.Print("Calling UO.ClearJournalIgnore");
UO.ClearJournalIgnore();Параметры и ход выполнения:
- Удаляет все текстовые фильтры JournalManager.
UO.ClearJournalIgnore();Параметры и ход выполнения:
- Снова разрешить отображение текста You see.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
UO.AddJournalIgnore("You see");
UO.ClearJournalIgnore();
return null;
}Параметры и ход выполнения:
- Очистка пустого набора допустима и не создаёт новую настройку.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
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;
}
async public Task<object?> RunScenarioAsync()
{
UO.ClearJournalIgnore();
UO.ClearJournalIgnore();
return null;
}
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.ClearSystemJournal();Удаляет строки с именем автора System.
Параметров нет.
void — нет возвращаемого значения. Не возвращает число удалённых строк. Счётчик совпадений и выбор текущего скрипта сбрасываются.
- Общий буфер доступен всем скриптам: удалённые строки перестают находиться. Снимки, ранее сохранённые другими скриптами, могут остаться, но их индекс станет -1.
- System распознаётся по имени автора без учёта регистра; это фильтр общего журнала ClassicUO.
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Команда вызывается отдельной строкой. Сообщение перед ней показывает начало вызова, а не подтверждение действия сервера.
UO.Print("Calling UO.ClearSystemJournal");
UO.ClearSystemJournal();Параметры и ход выполнения:
- Аргументов нет. Удаляются только строки System.
- Счётчик последнего поиска становится 0; Print после очистки может добавить новую строку.
UO.ClearSystemJournal();
var count = UO.LineCount();
UO.Print("Search matches after clear: " + Convert.ToString(count));Параметры и ход выполнения:
- Очистка выполняется до сохранения временной метки. 1000 — ограниченное ожидание в миллисекундах.
- Для исключения старых сообщений обычно достаточно метки времени; очистка затрагивает и другие скрипты.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
UO.ClearSystemJournal();
var started = Now();
var found = UO.WaitJournalLine(started, "notice", 1000);
UO.Print(Convert.ToString(found));
return null;
}Параметры и ход выполнения:
- После очистки через текущий скрипт index=-1, даже если удалялась только часть буфера.
- Переменная text сохраняет ранее прочитанную копию, а GetFoundedText уже очищен.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
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;
}
async public Task<object?> RunScenarioAsync()
{
var text = UO.Journal(0);
UO.ClearSystemJournal();
var index = UO.LineIndex();
UO.Print(Convert.ToString(index));
return null;
}
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.DeleteJournal();
void UO.DeleteJournal(object? arg0);Удаляет строки из общего локального журнала.
-
text— Искомая подстрока или несколько альтернатив через |, например success|failed. Пробелы по краям каждой альтернативы удаляются, пустые альтернативы пропускаются. Это обычный текст, не регулярное выражение. Используйте непустой шаблон. Необязателен только у DeleteJournal: при передаче удаляются подходящие строки без учёта регистра; без аргумента удаляется весь буфер.
void — нет возвращаемого значения. Не возвращает число удалённых строк. Счётчик совпадений и выбор текущего скрипта сбрасываются.
- Общий буфер доступен всем скриптам: удалённые строки перестают находиться. Снимки, ранее сохранённые другими скриптами, могут остаться, но их индекс станет -1.
- Без текстового фильтра очищается весь буфер Classic UO, включая System. Локальный файл журнала и сообщения сервера не удаляются.
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Команда вызывается отдельной строкой. Сообщение перед ней показывает начало вызова, а не подтверждение действия сервера.
UO.Print("Calling UO.DeleteJournal");
UO.DeleteJournal();Параметры и ход выполнения:
- Аргументов нет. Удаляются все строки общего буфера.
- Счётчик последнего поиска становится 0; Print после очистки может добавить новую строку.
UO.DeleteJournal();
var count = UO.LineCount();
UO.Print("Search matches after clear: " + Convert.ToString(count));Параметры и ход выполнения:
- Очистка выполняется до сохранения временной метки. 1000 — ограниченное ожидание в миллисекундах.
- Для исключения старых сообщений обычно достаточно метки времени; очистка затрагивает и другие скрипты.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
UO.DeleteJournal();
var started = Now();
var found = UO.WaitJournalLine(started, "notice", 1000);
UO.Print(Convert.ToString(found));
return null;
}Параметры и ход выполнения:
- После очистки через текущий скрипт index=-1, даже если удалялась только часть буфера.
- Переменная text сохраняет ранее прочитанную копию, а GetFoundedText уже очищен.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
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;
}
async public Task<object?> RunScenarioAsync()
{
var text = UO.Journal(0);
UO.DeleteJournal();
var index = UO.LineIndex();
UO.Print(Convert.ToString(index));
return null;
}
}Параметры и ход выполнения:
- text содержит две подстроки. Удаляются строки с любой из них без учёта регистра; остальные сообщения остаются.
- found=0 при отсутствии новых подходящих сообщений после удаления. Пустой шаблон в этой реализации подходит всем строкам.
UO.DeleteJournal("notice|warning");
var found = UO.InJournal("notice|warning", -1);
UO.Print(Convert.ToString(found));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.FoundedParamId();Возвращает номер совпавшей альтернативы поискового шаблона.
Параметров нет.
int — индекс от 0 в списке непустых альтернатив через |: success|failed даёт 0 для success и 1 для failed. При нескольких подходящих альтернативах берётся первая в шаблоне. Без совпадения или после прямого Journal также 0. Это не serial автора, не номер строки и не type сообщения.
- Поиск и Journal/GetJournal/LastJournalMessage сохраняют текст и поля одной записи в текущем скрипте. Новые сообщения не подменяют эти поля. Если запись вытеснена из ограниченного журнала, сохранённые поля остаются, но LineIndex/GetFoundedTextIndex возвращают -1. Следующий поиск или чтение выбирает другую запись; неудачный поиск, неверный индекс и очистка через этот скрипт сбрасывают выбор.
- Сначала проверяйте результат поиска > 0. Значение 0 само по себе не подтверждает успех. Пробелы по краям и пустые альтернативы удаляются до нумерации.
- https://forum.yoko.com.ua/viewtopic.php?p=27633 ; . В этой адаптации ID означает альтернативу, поля автора и типа доступны отдельно через LineID/LineMsgType.
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Результат одного вызова выводится в журнал. Число не преобразуется в bool; для массива показано количество элементов.
object? result = UO.FoundedParamId();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Параметры и ход выполнения:
- success — альтернатива 0, failed — альтернатива 1. Успех поиска проверяется отдельно.
- Это анализ текста, а не подтверждение игровой операции сервером.
if (Truth(UO.InJournal("success|failed") > 0))
{
var outcome = UO.FoundedParamId();
if (Truth(outcome == 0))
{
UO.Print("Success text");
}
else
{
UO.Print("Failure text");
}
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметры и ход выполнения:
- -1 отключает регистр. Результаты 0, 1, 2 соответствуют порядку альтернатив.
- Если строка содержит несколько вариантов, возвращается первый подходящий по порядку шаблона.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
if (Truth(UO.InJournal("mining|ore|empty", -1) > 0))
{
var kind = UO.FoundedParamId();
UO.Print("Alternative: " + Convert.ToString(kind));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметры и ход выполнения:
- Journal(0) меняет выбор и сбрасывает ID альтернативы, поэтому outcome сохраняется заранее.
- Новый вызов getter после Journal уже не описывает предыдущий шаблон.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
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;
}
async public Task<object?> RunScenarioAsync()
{
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;
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
string UO.GetFoundedText();Возвращает текст выбранной записи журнала.
Параметров нет.
string — текст выбранной записи; пустая строка без выбора. Пустой текст допустим у существующей записи.
- Поиск и Journal/GetJournal/LastJournalMessage сохраняют текст и поля одной записи в текущем скрипте. Новые сообщения не подменяют эти поля. Если запись вытеснена из ограниченного журнала, сохранённые поля остаются, но LineIndex/GetFoundedTextIndex возвращают -1. Следующий поиск или чтение выбирает другую запись; неудачный поиск, неверный индекс и очистка через этот скрипт сбрасывают выбор.
- Getter не запускает поиск и не выбирает самую новую строку. Нулевые/пустые значения могут быть действующими данными; учитывайте результат поиска.
- Первичный справочник: https://forum.yoko.com.ua/viewtopic.php?p=27633 .
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Результат одного вызова выводится в журнал. Число не преобразуется в bool; для массива показано количество элементов.
var result = UO.GetFoundedText();
UO.Print("GetFoundedText: " + Convert.ToString(result));Параметры и ход выполнения:
- notice — пример искомого текста. Getter вызывается без параметров только после успешного поиска.
- string — текст выбранной записи; пустая строка без выбора. Пустой текст допустим у существующей записи.
if (Truth(UO.InJournal("notice") > 0))
{
var value = UO.GetFoundedText();
UO.Print("Text: " + Convert.ToString(value));
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметры и ход выполнения:
- Journal(0) выбирает новую запись. index и value читаются до Print.
- Проверка index позволяет отличить отсутствие записи от допустимого нулевого или пустого поля.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var text = UO.Journal(0);
var index = UO.LineIndex();
var value = UO.GetFoundedText();
if (Truth(index >= 0))
{
UO.Print(Convert.ToString(value));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметры и ход выполнения:
- Первый поиск выбирает success, второй заменяет или сбрасывает выбор. saved уже содержит копию нужного поля.
- Сохранённая var не меняется при новом поиске, очистке или поступлении сообщений.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
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;
}
async public Task<object?> RunScenarioAsync()
{
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;
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
string UO.GetFoundedTextColor();Возвращает цвет выбранной записи журнала.
Параметров нет.
string — UO hue в формате 0x0044 (4 hex-цифры). Без выбора — 0x0000; hue=0 также допустим у сообщения. Это не RGB.
- Поиск и Journal/GetJournal/LastJournalMessage сохраняют текст и поля одной записи в текущем скрипте. Новые сообщения не подменяют эти поля. Если запись вытеснена из ограниченного журнала, сохранённые поля остаются, но LineIndex/GetFoundedTextIndex возвращают -1. Следующий поиск или чтение выбирает другую запись; неудачный поиск, неверный индекс и очистка через этот скрипт сбрасывают выбор.
- Getter не запускает поиск и не выбирает самую новую строку. Нулевые/пустые значения могут быть действующими данными; учитывайте результат поиска.
- Первичный справочник: https://forum.yoko.com.ua/viewtopic.php?p=27633 .
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Результат одного вызова выводится в журнал. Число не преобразуется в bool; для массива показано количество элементов.
var result = UO.GetFoundedTextColor();
UO.Print("GetFoundedTextColor: " + Convert.ToString(result));Параметры и ход выполнения:
- notice — пример искомого текста. Getter вызывается без параметров только после успешного поиска.
- string — UO hue в формате 0x0044 (4 hex-цифры). Без выбора — 0x0000; hue=0 также допустим у сообщения. Это не RGB.
if (Truth(UO.InJournal("notice") > 0))
{
var value = UO.GetFoundedTextColor();
UO.Print("Hue: " + Convert.ToString(value));
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметры и ход выполнения:
- Journal(0) выбирает новую запись. index и value читаются до Print.
- Проверка index позволяет отличить отсутствие записи от допустимого нулевого или пустого поля.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var text = UO.Journal(0);
var index = UO.LineIndex();
var value = UO.GetFoundedTextColor();
if (Truth(index >= 0))
{
UO.Print(Convert.ToString(value));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметры и ход выполнения:
- Первый поиск выбирает success, второй заменяет или сбрасывает выбор. saved уже содержит копию нужного поля.
- Сохранённая var не меняется при новом поиске, очистке или поступлении сообщений.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
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;
}
async public Task<object?> RunScenarioAsync()
{
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;
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.GetFoundedTextID();Возвращает номер совпавшей альтернативы поискового шаблона.
Параметров нет.
int — индекс от 0 в списке непустых альтернатив через |: success|failed даёт 0 для success и 1 для failed. При нескольких подходящих альтернативах берётся первая в шаблоне. Без совпадения или после прямого Journal также 0. Это не serial автора, не номер строки и не type сообщения.
- Поиск и Journal/GetJournal/LastJournalMessage сохраняют текст и поля одной записи в текущем скрипте. Новые сообщения не подменяют эти поля. Если запись вытеснена из ограниченного журнала, сохранённые поля остаются, но LineIndex/GetFoundedTextIndex возвращают -1. Следующий поиск или чтение выбирает другую запись; неудачный поиск, неверный индекс и очистка через этот скрипт сбрасывают выбор.
- Сначала проверяйте результат поиска > 0. Значение 0 само по себе не подтверждает успех. Пробелы по краям и пустые альтернативы удаляются до нумерации.
- https://forum.yoko.com.ua/viewtopic.php?p=27633 ; . В этой адаптации ID означает альтернативу, поля автора и типа доступны отдельно через LineID/LineMsgType.
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Результат одного вызова выводится в журнал. Число не преобразуется в bool; для массива показано количество элементов.
var result = UO.GetFoundedTextID();
UO.Print("GetFoundedTextID: " + Convert.ToString(result));Параметры и ход выполнения:
- success — альтернатива 0, failed — альтернатива 1. Успех поиска проверяется отдельно.
- Это анализ текста, а не подтверждение игровой операции сервером.
if (Truth(UO.InJournal("success|failed") > 0))
{
var outcome = UO.GetFoundedTextID();
if (Truth(outcome == 0))
{
UO.Print("Success text");
}
else
{
UO.Print("Failure text");
}
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметры и ход выполнения:
- -1 отключает регистр. Результаты 0, 1, 2 соответствуют порядку альтернатив.
- Если строка содержит несколько вариантов, возвращается первый подходящий по порядку шаблона.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
if (Truth(UO.InJournal("mining|ore|empty", -1) > 0))
{
var kind = UO.GetFoundedTextID();
UO.Print("Alternative: " + Convert.ToString(kind));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметры и ход выполнения:
- Journal(0) меняет выбор и сбрасывает ID альтернативы, поэтому outcome сохраняется заранее.
- Новый вызов getter после Journal уже не описывает предыдущий шаблон.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
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;
}
async public Task<object?> RunScenarioAsync()
{
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;
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.GetFoundedTextIndex();Возвращает текущий индекс выбранной записи, если она ещё хранится в журнале.
Параметров нет.
int — текущий индекс от 0 (самая новая строка). -1 означает, что выбора нет либо выбранная запись уже удалена/вытеснена. Это не результат InJournal: из индекса не нужно вычитать 1.
- Поиск и Journal/GetJournal/LastJournalMessage сохраняют текст и поля одной записи в текущем скрипте. Новые сообщения не подменяют эти поля. Если запись вытеснена из ограниченного журнала, сохранённые поля остаются, но LineIndex/GetFoundedTextIndex возвращают -1. Следующий поиск или чтение выбирает другую запись; неудачный поиск, неверный индекс и очистка через этот скрипт сбрасывают выбор.
- Индекс пересчитывается по идентичности записи. Новые сообщения увеличивают его. Старый сохранённый индекс не является постоянным ID; для текста безопаснее GetFoundedText.
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Результат одного вызова выводится в журнал. Число не преобразуется в bool; для массива показано количество элементов.
var result = UO.GetFoundedTextIndex();
UO.Print("GetFoundedTextIndex: " + Convert.ToString(result));Параметры и ход выполнения:
- Getter без аргументов читает выбор текущего скрипта. 0 — новая строка, -1 — нет строки в текущем буфере.
- Текст берётся из сохранённой записи, чтобы новые сообщения не подменили его.
if (Truth(UO.InJournal("notice") > 0))
{
var index = UO.GetFoundedTextIndex();
var text = UO.GetFoundedText();
UO.Print(Convert.ToString(index) + ": " + text);
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметры и ход выполнения:
- Journal(0) выбирает последнюю запись; проверка исключает пустой журнал.
- Пустой text допускается у действующей записи.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var text = UO.Journal(0);
if (Truth(UO.GetFoundedTextIndex() >= 0))
{
UO.Print(text);
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметры и ход выполнения:
- Ожидание 100 мс позволяет прийти новым сообщениям. after заново находит ту же запись.
- after может увеличиться или стать -1 при удалении; GetFoundedText всё ещё содержит сохранённый текст.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
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;
}
async public Task<object?> RunScenarioAsync()
{
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;
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
string UO.GetFoundedTextSerial();Возвращает serial автора выбранной записи журнала.
Параметров нет.
string — serial автора в формате 0x00001234 (8 hex-цифр). Без выбора — 0x00000000. Это не type предмета и не индекс журнала.
- Поиск и Journal/GetJournal/LastJournalMessage сохраняют текст и поля одной записи в текущем скрипте. Новые сообщения не подменяют эти поля. Если запись вытеснена из ограниченного журнала, сохранённые поля остаются, но LineIndex/GetFoundedTextIndex возвращают -1. Следующий поиск или чтение выбирает другую запись; неудачный поиск, неверный индекс и очистка через этот скрипт сбрасывают выбор.
- Getter не запускает поиск и не выбирает самую новую строку. Нулевые/пустые значения могут быть действующими данными; учитывайте результат поиска.
- Первичный справочник: https://forum.yoko.com.ua/viewtopic.php?p=27633 .
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Результат одного вызова выводится в журнал. Число не преобразуется в bool; для массива показано количество элементов.
var result = UO.GetFoundedTextSerial();
UO.Print("GetFoundedTextSerial: " + Convert.ToString(result));Параметры и ход выполнения:
- notice — пример искомого текста. Getter вызывается без параметров только после успешного поиска.
- string — serial автора в формате 0x00001234 (8 hex-цифр). Без выбора — 0x00000000. Это не type предмета и не индекс журнала.
if (Truth(UO.InJournal("notice") > 0))
{
var value = UO.GetFoundedTextSerial();
UO.Print("Speaker serial: " + Convert.ToString(value));
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметры и ход выполнения:
- Journal(0) выбирает новую запись. index и value читаются до Print.
- Проверка index позволяет отличить отсутствие записи от допустимого нулевого или пустого поля.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var text = UO.Journal(0);
var index = UO.LineIndex();
var value = UO.GetFoundedTextSerial();
if (Truth(index >= 0))
{
UO.Print(Convert.ToString(value));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметры и ход выполнения:
- Первый поиск выбирает success, второй заменяет или сбрасывает выбор. saved уже содержит копию нужного поля.
- Сохранённая var не меняется при новом поиске, очистке или поступлении сообщений.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
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;
}
async public Task<object?> RunScenarioAsync()
{
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;
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.GetFoundedTextTimer();Возвращает миллисекундную метку времени выбранной записи журнала.
Параметров нет.
int — момент записи в миллисекундах от начала runtime, совместимый с Now(). Записи до начала дают 0. Без выбора также 0; неверная календарная метка даёт -1. Это не прошедшее время и не десятые доли секунды UO.Timer().
- Поиск и Journal/GetJournal/LastJournalMessage сохраняют текст и поля одной записи в текущем скрипте. Новые сообщения не подменяют эти поля. Если запись вытеснена из ограниченного журнала, сохранённые поля остаются, но LineIndex/GetFoundedTextIndex возвращают -1. Следующий поиск или чтение выбирает другую запись; неудачный поиск, неверный индекс и очистка через этот скрипт сбрасывают выбор.
- Getter не запускает поиск и не выбирает самую новую строку. Нулевые/пустые значения могут быть действующими данными; учитывайте результат поиска.
- Первичный справочник: https://forum.yoko.com.ua/viewtopic.php?p=27633 .
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Результат одного вызова выводится в журнал. Число не преобразуется в bool; для массива показано количество элементов.
var result = UO.GetFoundedTextTimer();
UO.Print("GetFoundedTextTimer: " + Convert.ToString(result));Параметры и ход выполнения:
- notice — пример искомого текста. Getter вызывается без параметров только после успешного поиска.
- int — момент записи в миллисекундах от начала runtime, совместимый с Now(). Записи до начала дают 0. Без выбора также 0; неверная календарная метка даёт -1. Это не прошедшее время и не десятые доли секунды UO.Timer().
if (Truth(UO.InJournal("notice") > 0))
{
var value = UO.GetFoundedTextTimer();
UO.Print("Timestamp ms: " + Convert.ToString(value));
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметры и ход выполнения:
- Journal(0) выбирает новую запись. index и value читаются до Print.
- Проверка index позволяет отличить отсутствие записи от допустимого нулевого или пустого поля.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var text = UO.Journal(0);
var index = UO.LineIndex();
var value = UO.GetFoundedTextTimer();
if (Truth(index >= 0))
{
UO.Print(Convert.ToString(value));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметры и ход выполнения:
- Первый поиск выбирает success, второй заменяет или сбрасывает выбор. saved уже содержит копию нужного поля.
- Сохранённая var не меняется при новом поиске, очистке или поступлении сообщений.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
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;
}
async public Task<object?> RunScenarioAsync()
{
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;
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
string UO.GetJournal(object? arg0);Читает текст строки по текущему индексу и выбирает эту запись для GetFoundedText/Line*.
-
index— Обязательный int — текущий индекс: 0 означает самую новую строку, 1 — предыдущую. Индексы сдвигаются при приходе сообщений. Это не serial, не ID варианта шаблона и не положительный результат InJournal. -
StringIndex— Обязательный int — текущий индекс: 0 означает самую новую строку, 1 — предыдущую. Индексы сдвигаются при приходе сообщений. Это не serial, не ID варианта шаблона и не положительный результат InJournal.
string — текст строки, либо пустая строка при неверном индексе/пустом журнале. У существующей строки текст тоже может быть пустым: после чтения LineIndex >= 0 подтверждает, что запись была выбрана. Это не количество строк.
- Поиск и Journal/GetJournal/LastJournalMessage сохраняют текст и поля одной записи в текущем скрипте. Новые сообщения не подменяют эти поля. Если запись вытеснена из ограниченного журнала, сохранённые поля остаются, но LineIndex/GetFoundedTextIndex возвращают -1. Следующий поиск или чтение выбирает другую запись; неудачный поиск, неверный индекс и очистка через этот скрипт сбрасывают выбор.
- Прямое чтение сбрасывает ID альтернативы; GetFoundedTextID/FoundedParamId после него дают 0. Сам Journal не пересчитывает LineCount.
- https://forum.yoko.com.ua/viewtopic.php?p=27633 ; .
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Результат одного вызова выводится в журнал. Число не преобразуется в bool; для массива показано количество элементов.
var result = UO.GetJournal(0);
UO.Print("GetJournal: " + Convert.ToString(result));Параметры и ход выполнения:
- 0 — самая новая строка. Сначала читаются текст и автор, затем выводится результат.
- Print может добавить сообщение; сохранённые text/author относятся к прежней выбранной записи.
var text = UO.GetJournal(0);
var author = UO.LineName();
UO.Print(author + ": " + text);Параметры и ход выполнения:
- 1 — предыдущая запись, HighJournal — максимальный доступный индекс.
- Журнал может изменяться между вызовами. Для данных уже найденной строки используйте GetFoundedText.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
if (Truth(UO.HighJournal() >= 1))
{
var text = UO.GetJournal(1);
UO.Print(text);
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметры и ход выполнения:
- LineIndex=-1 означает отсутствие/удаление выбранной записи. Len(text)=0 само по себе этого не означает.
- Сохраняйте результат проверки до диагностического вывода, который пополняет журнал.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
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;
}
async public Task<object?> RunScenarioAsync()
{
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;
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
string UO.GetJournalColor(object? arg0);Читает поле hue строки по текущему индексу, не меняя выбранную запись.
-
index— Обязательный int — текущий индекс: 0 означает самую новую строку, 1 — предыдущую. Индексы сдвигаются при приходе сообщений. Это не serial, не ID варианта шаблона и не положительный результат InJournal.
string — UO hue как 0x0044; при неверном индексе 0x0000. Это не RGB.
- Каждый вызов читает текущую позицию. Для согласованного текста и полей одной записи сначала Journal(index), затем GetFoundedText/Line*. Нулевые значения могут быть настоящими данными.
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Результат одного вызова выводится в журнал. Число не преобразуется в bool; для массива показано количество элементов.
var result = UO.GetJournalColor(0);
UO.Print("GetJournalColor: " + Convert.ToString(result));Параметры и ход выполнения:
- 0 — индекс новой строки. Проверяется наличие буфера.
- string — UO hue как 0x0044; при неверном индексе 0x0000. Это не RGB.
if (Truth(UO.HighJournal() >= 0))
{
var value = UO.GetJournalColor(0);
UO.Print(Convert.ToString(value));
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметры и ход выполнения:
- 1 — предыдущая строка, не serial=1.
- Выбранная поиском запись GetFoundedText/Line* не изменяется.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
if (Truth(UO.HighJournal() >= 1))
{
var value = UO.GetJournalColor(1);
UO.Print(Convert.ToString(value));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметры и ход выполнения:
- value копирует поле на момент вызова. Ожидание не обновляет переменную.
- Чтобы снова читать текущую строку 0, вызовите команду ещё раз; это уже может быть другая запись.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
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;
}
async public Task<object?> RunScenarioAsync()
{
var value = UO.GetJournalColor(0);
UO.Wait(100);
UO.Print("Saved value: " + Convert.ToString(value));
return null;
}
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
string UO.GetJournalSerial(object? arg0);Читает поле serial строки по текущему индексу, не меняя выбранную запись.
-
index— Обязательный int — текущий индекс: 0 означает самую новую строку, 1 — предыдущую. Индексы сдвигаются при приходе сообщений. Это не serial, не ID варианта шаблона и не положительный результат InJournal.
string — serial автора как 0x00001234; при неверном индексе 0x00000000.
- Каждый вызов читает текущую позицию. Для согласованного текста и полей одной записи сначала Journal(index), затем GetFoundedText/Line*. Нулевые значения могут быть настоящими данными.
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Результат одного вызова выводится в журнал. Число не преобразуется в bool; для массива показано количество элементов.
var result = UO.GetJournalSerial(0);
UO.Print("GetJournalSerial: " + Convert.ToString(result));Параметры и ход выполнения:
- 0 — индекс новой строки. Проверяется наличие буфера.
- string — serial автора как 0x00001234; при неверном индексе 0x00000000.
if (Truth(UO.HighJournal() >= 0))
{
var value = UO.GetJournalSerial(0);
UO.Print(Convert.ToString(value));
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметры и ход выполнения:
- 1 — предыдущая строка, не serial=1.
- Выбранная поиском запись GetFoundedText/Line* не изменяется.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
if (Truth(UO.HighJournal() >= 1))
{
var value = UO.GetJournalSerial(1);
UO.Print(Convert.ToString(value));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметры и ход выполнения:
- value копирует поле на момент вызова. Ожидание не обновляет переменную.
- Чтобы снова читать текущую строку 0, вызовите команду ещё раз; это уже может быть другая запись.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
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;
}
async public Task<object?> RunScenarioAsync()
{
var value = UO.GetJournalSerial(0);
UO.Wait(100);
UO.Print("Saved value: " + Convert.ToString(value));
return null;
}
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.HighJournal();Возвращает максимальный доступный индекс журнала.
Параметров нет.
int: -1 при пустом журнале; иначе число сохранённых записей минус 1 — индекс самой старой доступной записи. Journal/GetJournal используют нулевые индексы от новой записи к старой; положительный результат InJournal использует другой, единичный отсчёт.
- Новые сообщения и очистка изменяют границы. Здесь действует порядок Journal(0) от новой записи к старой.
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Результат одного вызова выводится в журнал. Число не преобразуется в bool; для массива показано количество элементов.
object? result = UO.HighJournal();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Параметры и ход выполнения:
- Отрицательная граница означает пустой буфер.
- При непустом буфере Journal(0) читает новую запись.
if (Truth(UO.HighJournal() >= 0))
{
var text = UO.Journal(0);
UO.Print(text);
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметры и ход выполнения:
- HighJournal=-1 при пустом журнале, поэтому total=0. LowJournal описывает нижнюю границу, а не число строк.
- Это общее количество локально сохранённых строк; LineCount относится к последнему поиску.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var total = UO.HighJournal() + 1;
UO.Print("Rows: " + Convert.ToString(total));
return null;
}Параметры и ход выполнения:
- index передаётся непосредственно в Journal, без вычитания единицы.
- Индекс может сдвинуться при входящих сообщениях; буфер не замораживается между вызовами.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
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;
}
async public Task<object?> RunScenarioAsync()
{
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;
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.InJournal(object? arg0);
int UO.InJournal(object? arg0, object? arg1);
int UO.InJournal(object? arg0, object? arg1, object? arg2);
int UO.InJournal(object? arg0, object? arg1, object? arg2, object? arg3);
int UO.InJournal(object? arg0, object? arg1, object? arg2, object? arg3, object? arg4);
int UO.InJournal(object? arg0, object? arg1, object? arg2, object? arg3, object? arg4, object? arg5);
int UO.InJournal(object? arg0, object? arg1, object? arg2, object? arg3, object? arg4, object? arg5, object? arg6);Ищет сообщение в локальном журнале и сохраняет найденную запись с её полями.
-
pattern— Искомая подстрока или несколько альтернатив через |, например success|failed. Пробелы по краям каждой альтернативы удаляются, пустые альтернативы пропускаются. Это обычный текст, не регулярное выражение. Используйте непустой шаблон. -
Convert.ToString— Искомая подстрока или несколько альтернатив через |, например success|failed. Пробелы по краям каждой альтернативы удаляются, пустые альтернативы пропускаются. Это обычный текст, не регулярное выражение. Используйте непустой шаблон. -
maxLinesOrIgnoreCase— Только форма из двух аргументов: -1 — весь доступный журнал без учёта регистра; 0 — не проверять ни одной строки; положительное число — проверить не более этого числа последних строк с учётом регистра. Другие отрицательные значения ограничиваются 0. -
serial— Третий и последующие аргументы включают расширенную форму. Второй аргумент этой формы — числовой serial автора сообщения, не graphic/type. -1 отключает фильтр; 0 выбирает serial=0. Hex-строка с числом также преобразуется в число; имя алиаса объекта здесь не разрешается. -
color— Третий аргумент расширенной формы — числовой UO hue; -1 или 0xFFFF отключают фильтр. 0 выбирает hue=0. Это не RGB. -
startTime— Необязательная начальная метка Now(), int в миллисекундах. При заданном положительном endTime значение startTime=0 означает начало выполнения. Если обе метки отсутствуют/неположительные, фильтра времени нет. -
endTime— Необязательная конечная метка Now(), int в миллисекундах. Отсутствует или 0 — текущее время. Порядок положительных границ несущественен. Будущая метка ограничивается текущим временем. -
newestOnly— Необязательный bool, по умолчанию false. true прекращает поиск после первого совпадения; LineCount тогда 0 или 1. false подсчитывает все подходящие строки, выбирая всё равно самую новую. -
caseSensitive— Необязательный bool расширенной формы, по умолчанию false. true учитывает регистр. Форма только с pattern, напротив, всегда учитывает регистр.
int: 0 — подходящей строки нет; положительное число — позиция самой новой подходящей записи, считая от конца всего журнала, начиная с 1. Это не число совпадений и не номер альтернативы шаблона. Для нулевого индекса используйте LineIndex/GetFoundedTextIndex, для количества совпадений — LineCount, для номера альтернативы — GetFoundedTextID. Последующие новые сообщения могут изменить индекс, но сохранённые поля выбранной записи остаются доступны.
- Поиск и Journal/GetJournal/LastJournalMessage сохраняют текст и поля одной записи в текущем скрипте. Новые сообщения не подменяют эти поля. Если запись вытеснена из ограниченного журнала, сохранённые поля остаются, но LineIndex/GetFoundedTextIndex возвращают -1. Следующий поиск или чтение выбирает другую запись; неудачный поиск, неверный индекс и очистка через этот скрипт сбрасывают выбор.
- Поиск не ожидает нового текста. Пустой шаблон в текущем InJournal подходит любой строке, но не задаёт ID альтернативы; для проверки наличия строк используйте HighJournal/LowJournal.
- Форма из двух аргументов задаёт лимит/регистр, а не serial. Для serial обязательно передать также color. Одноаргументный SetJournalLine может ограничить область поиска.
- https://forum.yoko.com.ua/viewtopic.php?p=27633 ; .
Now() предоставляет host текущего выполнения: это целое число миллисекунд тех же native-часов, которые использует журнал. Не заменяйте его Environment.TickCount, Unix-временем или собственным Stopwatch: начало отсчёта будет другим. В обычной программе .cs/.csproj вызывайте context.Now() у переданного CSharpScriptGlobals.
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Результат одного вызова выводится в журнал. Число не преобразуется в bool; для массива показано количество элементов.
var result = UO.InJournal("You see");
UO.Print("InJournal: " + Convert.ToString(result));Параметры и ход выполнения:
- pattern=You see — подстрока, регистр важен. found=0 означает отсутствие.
- Текст копируется из найденной записи; приход нового сообщения не заменяет его.
var found = UO.InJournal("You see");
if (Truth(found > 0))
{
var text = UO.GetFoundedText();
UO.Print(text);
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметры и ход выполнения:
- Второй аргумент -1 снимает лимит строк и отключает учёт регистра.
- outcome=0 для success, 1 для failed; это номер альтернативы, не ID говорящего.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var found = UO.InJournal("success|failed", -1);
if (Truth(found > 0))
{
var outcome = UO.GetFoundedTextID();
UO.Print("Alternative: " + Convert.ToString(outcome));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметры и ход выполнения:
- 20 — максимум проверяемых строк, регистр важен. matches — количество подходящих строк в проверенной области.
- found содержит позицию плюс 1, а не matches. Запись диагностического текста тоже может пополнить журнал.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
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;
}
async public Task<object?> RunScenarioAsync()
{
var found = UO.InJournal("bank", 20);
var matches = UO.LineCount();
UO.Print("Matches: " + Convert.ToString(matches));
return null;
}
}Параметры и ход выполнения:
- serial=0x00001234 — пример автора, color=0x0044 — hue. Замените реальными значениями. started/endTime — миллисекундные метки.
- true останавливает поиск на первой строке; false не учитывает регистр. Ожидание 350 мс отдельно, InJournal сам не ждёт.
var started = Now();
UO.Wait(350);
var found = UO.InJournal("hello", 0x00001234, 0x0044, started, Now(), true, false);
if (Truth(found > 0))
{
UO.Print(UO.GetFoundedText());
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметры и ход выполнения:
- serial=-1 и color=-1 отключают оба фильтра. Две метки ограничивают время.
- newestOnly и caseSensitive опущены: false и false. Без совпадения возвращается 0.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
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;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.InJournalBetweenTimes(object? arg0, object? arg1);
int UO.InJournalBetweenTimes(object? arg0, object? arg1, object? arg2);
int UO.InJournalBetweenTimes(object? arg0, object? arg1, object? arg2, object? arg3);Ищет строку между двумя метками времени выполнения и сохраняет самую новую подходящую запись.
-
pattern— Искомая подстрока или несколько альтернатив через |, например success|failed. Пробелы по краям каждой альтернативы удаляются, пустые альтернативы пропускаются. Это обычный текст, не регулярное выражение. Используйте непустой шаблон. -
text— Искомая подстрока или несколько альтернатив через |, например success|failed. Пробелы по краям каждой альтернативы удаляются, пустые альтернативы пропускаются. Это обычный текст, не регулярное выражение. Используйте непустой шаблон. -
startTime— Обязательная метка Now(): int миллисекунд от начала runtime. 0 — начало выполнения. Это не возраст записи и не дробная дата LineTime. -
endTime— Необязательная конечная метка Now(). Если опущена или неположительна, используется текущее время. Положительные границы можно передать в обратном порядке; будущая граница ограничивается текущим временем. -
limit— Необязательный четвёртый аргумент: -1 — без лимита и без учёта регистра; положительное число — максимум строк в интервале с учётом регистра; 0 и отрицательные значения кроме -1 — не проверять строки. -
maxLinesOrIgnoreCase— Другое имя четвёртого аргумента limit в совместимой регистрации: -1 отключает лимит и учёт регистра, иначе неотрицательный лимит строк.
int: 0 — подходящей строки нет; положительное число — позиция самой новой подходящей записи, считая от конца всего журнала, начиная с 1. Это не число совпадений и не номер альтернативы шаблона. Для нулевого индекса используйте LineIndex/GetFoundedTextIndex, для количества совпадений — LineCount, для номера альтернативы — GetFoundedTextID. Последующие новые сообщения могут изменить индекс, но сохранённые поля выбранной записи остаются доступны.
- Поиск и Journal/GetJournal/LastJournalMessage сохраняют текст и поля одной записи в текущем скрипте. Новые сообщения не подменяют эти поля. Если запись вытеснена из ограниченного журнала, сохранённые поля остаются, но LineIndex/GetFoundedTextIndex возвращают -1. Следующий поиск или чтение выбирает другую запись; неудачный поиск, неверный индекс и очистка через этот скрипт сбрасывают выбор.
- В формах из двух или трёх аргументов регистр учитывается. Границы включаются. Вычисление интервала не приостанавливает скрипт.
- Здесь передавайте целые метки Now(). LineTime возвращает другую единицу. Первичный справочник: .
Now() предоставляет host текущего выполнения: это целое число миллисекунд тех же native-часов, которые использует журнал. Не заменяйте его Environment.TickCount, Unix-временем или собственным Stopwatch: начало отсчёта будет другим. В обычной программе .cs/.csproj вызывайте context.Now() у переданного CSharpScriptGlobals.
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Результат одного вызова выводится в журнал. Число не преобразуется в bool; для массива показано количество элементов.
var result = UO.InJournalBetweenTimes("You see", 0, Now());
UO.Print("InJournalBetweenTimes: " + Convert.ToString(result));Параметры и ход выполнения:
- started сохраняется до UseSkill. endTime опущено — до текущего времени; hidden — пример серверного текста.
- Регистр учитывается. Сообщение не доказывает текущий статус; UO.Hidden() читает состояние персонажа.
var started = Now();
UO.UseSkill("Hiding");
UO.Wait(500);
if (Truth(UO.InJournalBetweenTimes("hidden", started) > 0))
{
UO.Print(UO.GetFoundedText());
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметры и ход выполнения:
- startTime=0 — начало выполнения; ended — сохранённая конечная метка в миллисекундах.
- Новые сообщения после ended не включаются. Старые записи до запуска runtime также вне интервала.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var ended = Now();
var found = UO.InJournalBetweenTimes("notice", 0, ended);
UO.Print("Search result: " + Convert.ToString(found));
return null;
}Параметры и ход выполнения:
- Последний -1 снимает ограничение строк и отключает регистр. Третий аргумент — конечная метка, не задержка.
- Результат ID: 0 для success, 1 для failed. Проверка found > 0 обязательна.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
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;
}
async public Task<object?> RunScenarioAsync()
{
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();
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
string UO.Journal(object? arg0);Читает текст строки по текущему индексу и выбирает эту запись для GetFoundedText/Line*.
-
index— Обязательный int — текущий индекс: 0 означает самую новую строку, 1 — предыдущую. Индексы сдвигаются при приходе сообщений. Это не serial, не ID варианта шаблона и не положительный результат InJournal. -
StringIndex— Обязательный int — текущий индекс: 0 означает самую новую строку, 1 — предыдущую. Индексы сдвигаются при приходе сообщений. Это не serial, не ID варианта шаблона и не положительный результат InJournal.
string — текст строки, либо пустая строка при неверном индексе/пустом журнале. У существующей строки текст тоже может быть пустым: после чтения LineIndex >= 0 подтверждает, что запись была выбрана. Это не количество строк.
- Поиск и Journal/GetJournal/LastJournalMessage сохраняют текст и поля одной записи в текущем скрипте. Новые сообщения не подменяют эти поля. Если запись вытеснена из ограниченного журнала, сохранённые поля остаются, но LineIndex/GetFoundedTextIndex возвращают -1. Следующий поиск или чтение выбирает другую запись; неудачный поиск, неверный индекс и очистка через этот скрипт сбрасывают выбор.
- Прямое чтение сбрасывает ID альтернативы; GetFoundedTextID/FoundedParamId после него дают 0. Сам Journal не пересчитывает LineCount.
- https://forum.yoko.com.ua/viewtopic.php?p=27633 ; .
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Результат одного вызова выводится в журнал. Число не преобразуется в bool; для массива показано количество элементов.
var result = UO.Journal(0);
UO.Print("Journal: " + Convert.ToString(result));Параметры и ход выполнения:
- 0 — самая новая строка. Сначала читаются текст и автор, затем выводится результат.
- Print может добавить сообщение; сохранённые text/author относятся к прежней выбранной записи.
var text = UO.Journal(0);
var author = UO.LineName();
UO.Print(author + ": " + text);Параметры и ход выполнения:
- 1 — предыдущая запись, HighJournal — максимальный доступный индекс.
- Журнал может изменяться между вызовами. Для данных уже найденной строки используйте GetFoundedText.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
if (Truth(UO.HighJournal() >= 1))
{
var text = UO.Journal(1);
UO.Print(text);
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметры и ход выполнения:
- LineIndex=-1 означает отсутствие/удаление выбранной записи. Len(text)=0 само по себе этого не означает.
- Сохраняйте результат проверки до диагностического вывода, который пополняет журнал.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
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;
}
async public Task<object?> RunScenarioAsync()
{
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;
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
string UO.JournalColor(object? arg0);Читает поле hue строки по текущему индексу, не меняя выбранную запись.
-
index— Обязательный int — текущий индекс: 0 означает самую новую строку, 1 — предыдущую. Индексы сдвигаются при приходе сообщений. Это не serial, не ID варианта шаблона и не положительный результат InJournal.
string — UO hue как 0x0044; при неверном индексе 0x0000. Это не RGB.
- Каждый вызов читает текущую позицию. Для согласованного текста и полей одной записи сначала Journal(index), затем GetFoundedText/Line*. Нулевые значения могут быть настоящими данными.
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Результат одного вызова выводится в журнал. Число не преобразуется в bool; для массива показано количество элементов.
var result = UO.JournalColor(0);
UO.Print("JournalColor: " + Convert.ToString(result));Параметры и ход выполнения:
- 0 — индекс новой строки. Проверяется наличие буфера.
- string — UO hue как 0x0044; при неверном индексе 0x0000. Это не RGB.
if (Truth(UO.HighJournal() >= 0))
{
var value = UO.JournalColor(0);
UO.Print(Convert.ToString(value));
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметры и ход выполнения:
- 1 — предыдущая строка, не serial=1.
- Выбранная поиском запись GetFoundedText/Line* не изменяется.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
if (Truth(UO.HighJournal() >= 1))
{
var value = UO.JournalColor(1);
UO.Print(Convert.ToString(value));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметры и ход выполнения:
- value копирует поле на момент вызова. Ожидание не обновляет переменную.
- Чтобы снова читать текущую строку 0, вызовите команду ещё раз; это уже может быть другая запись.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
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;
}
async public Task<object?> RunScenarioAsync()
{
var value = UO.JournalColor(0);
UO.Wait(100);
UO.Print("Saved value: " + Convert.ToString(value));
return null;
}
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
string UO.JournalSerial(object? arg0);Читает поле serial строки по текущему индексу, не меняя выбранную запись.
-
index— Обязательный int — текущий индекс: 0 означает самую новую строку, 1 — предыдущую. Индексы сдвигаются при приходе сообщений. Это не serial, не ID варианта шаблона и не положительный результат InJournal.
string — serial автора как 0x00001234; при неверном индексе 0x00000000.
- Каждый вызов читает текущую позицию. Для согласованного текста и полей одной записи сначала Journal(index), затем GetFoundedText/Line*. Нулевые значения могут быть настоящими данными.
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Результат одного вызова выводится в журнал. Число не преобразуется в bool; для массива показано количество элементов.
var result = UO.JournalSerial(0);
UO.Print("JournalSerial: " + Convert.ToString(result));Параметры и ход выполнения:
- 0 — индекс новой строки. Проверяется наличие буфера.
- string — serial автора как 0x00001234; при неверном индексе 0x00000000.
if (Truth(UO.HighJournal() >= 0))
{
var value = UO.JournalSerial(0);
UO.Print(Convert.ToString(value));
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметры и ход выполнения:
- 1 — предыдущая строка, не serial=1.
- Выбранная поиском запись GetFoundedText/Line* не изменяется.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
if (Truth(UO.HighJournal() >= 1))
{
var value = UO.JournalSerial(1);
UO.Print(Convert.ToString(value));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметры и ход выполнения:
- value копирует поле на момент вызова. Ожидание не обновляет переменную.
- Чтобы снова читать текущую строку 0, вызовите команду ещё раз; это уже может быть другая запись.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
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;
}
async public Task<object?> RunScenarioAsync()
{
var value = UO.JournalSerial(0);
UO.Wait(100);
UO.Print("Saved value: " + Convert.ToString(value));
return null;
}
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.JournalTimer(object? arg0);Читает поле timestamp строки по текущему индексу, не меняя выбранную запись.
-
index— Обязательный int — текущий индекс: 0 означает самую новую строку, 1 — предыдущую. Индексы сдвигаются при приходе сообщений. Это не serial, не ID варианта шаблона и не положительный результат InJournal.
int — метка записи в миллисекундах от начала runtime, совместимая с Now(). 0 для записи до запуска runtime; -1 для неверного индекса/времени. Это не возраст записи и не десятые секунды UO.Timer().
- Каждый вызов читает текущую позицию. Для согласованного текста и полей одной записи сначала Journal(index), затем GetFoundedText/Line*. Нулевые значения могут быть настоящими данными.
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Результат одного вызова выводится в журнал. Число не преобразуется в bool; для массива показано количество элементов.
var result = UO.JournalTimer(0);
UO.Print("JournalTimer: " + Convert.ToString(result));Параметры и ход выполнения:
- 0 — индекс новой строки. Проверяется наличие буфера.
- int — метка записи в миллисекундах от начала runtime, совместимая с Now(). 0 для записи до запуска runtime; -1 для неверного индекса/времени. Это не возраст записи и не десятые секунды UO.Timer().
if (Truth(UO.HighJournal() >= 0))
{
var value = UO.JournalTimer(0);
UO.Print(Convert.ToString(value));
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметры и ход выполнения:
- 1 — предыдущая строка, не serial=1.
- Выбранная поиском запись GetFoundedText/Line* не изменяется.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
if (Truth(UO.HighJournal() >= 1))
{
var value = UO.JournalTimer(1);
UO.Print(Convert.ToString(value));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметры и ход выполнения:
- value копирует поле на момент вызова. Ожидание не обновляет переменную.
- Чтобы снова читать текущую строку 0, вызовите команду ещё раз; это уже может быть другая запись.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
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;
}
async public Task<object?> RunScenarioAsync()
{
var value = UO.JournalTimer(0);
UO.Wait(100);
UO.Print("Saved value: " + Convert.ToString(value));
return null;
}
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.LastJournalMessage();Читает текст самой новой записи локального журнала.
Параметров нет.
string — текст новой записи; пустая строка, если журнала нет или сама запись содержит пустой текст.
- Поиск и Journal/GetJournal/LastJournalMessage сохраняют текст и поля одной записи в текущем скрипте. Новые сообщения не подменяют эти поля. Если запись вытеснена из ограниченного журнала, сохранённые поля остаются, но LineIndex/GetFoundedTextIndex возвращают -1. Следующий поиск или чтение выбирает другую запись; неудачный поиск, неверный индекс и очистка через этот скрипт сбрасывают выбор.
- Обновляет выбор и поля Line* так же, как Journal(0).
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Результат одного вызова выводится в журнал. Число не преобразуется в bool; для массива показано количество элементов.
object? result = UO.LastJournalMessage();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Параметры и ход выполнения:
- Аргументов нет; text копирует текущую последнюю строку.
- Печать после чтения может сама стать последним сообщением.
var text = UO.LastJournalMessage();
UO.Print(text);Параметры и ход выполнения:
- FindText возвращает позицию от 1 либо 0. Проверяется только одна последняя строка.
- Для поиска по всему журналу используйте InJournal.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var text = UO.LastJournalMessage();
if (Truth(FindText(text, "bank") > 0))
{
UO.Print("Text contains bank");
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
int FindText(object? text, object? value) => (Convert.ToString(text) ?? "").IndexOf(Convert.ToString(value) ?? "", StringComparison.Ordinal) + 1;
int FindText(int start, object? text, object? value)
{
string input = Convert.ToString(text) ?? "";
return input.IndexOf(Convert.ToString(value) ?? "", Math.Clamp(start - 1, 0, input.Length), StringComparison.Ordinal) + 1;
}Параметры и ход выполнения:
- matched сохраняется до чтения latest, поэтому не меняется при новом выборе.
- Последнее сообщение может отличаться от найденного; found > 0 означает успешный поиск.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
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;
}
async public Task<object?> RunScenarioAsync()
{
var found = UO.InJournal("needle");
var matched = UO.GetFoundedText();
var latest = UO.LastJournalMessage();
UO.Print("Found: " + matched);
UO.Print("Latest: " + latest);
return null;
}
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
string UO.LastMessage();Читает текст самой новой записи локального журнала.
Параметров нет.
string — текст новой записи; пустая строка, если журнала нет или сама запись содержит пустой текст.
- Этот getter читает новую запись, но сохраняет прежний выбор GetFoundedText/Line*. Для выбора последней записи используйте LastJournalMessage или Journal(0).
- Первичный справочник: https://forum.yoko.com.ua/viewtopic.php?p=27633 .
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Результат одного вызова выводится в журнал. Число не преобразуется в bool; для массива показано количество элементов.
var result = UO.LastMessage();
UO.Print("LastMessage: " + Convert.ToString(result));Параметры и ход выполнения:
- Аргументов нет; text копирует текущую последнюю строку.
- Печать после чтения может сама стать последним сообщением.
var text = UO.LastMessage();
UO.Print(text);Параметры и ход выполнения:
- FindText возвращает позицию от 1 либо 0. Проверяется только одна последняя строка.
- Для поиска по всему журналу используйте InJournal.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var text = UO.LastMessage();
if (Truth(FindText(text, "bank") > 0))
{
UO.Print("Text contains bank");
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
int FindText(object? text, object? value) => (Convert.ToString(text) ?? "").IndexOf(Convert.ToString(value) ?? "", StringComparison.Ordinal) + 1;
int FindText(int start, object? text, object? value)
{
string input = Convert.ToString(text) ?? "";
return input.IndexOf(Convert.ToString(value) ?? "", Math.Clamp(start - 1, 0, input.Length), StringComparison.Ordinal) + 1;
}Параметры и ход выполнения:
- matched сохраняется до чтения latest, поэтому не меняется при новом выборе.
- Последнее сообщение может отличаться от найденного; found > 0 означает успешный поиск.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
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;
}
async public Task<object?> RunScenarioAsync()
{
var found = UO.InJournal("needle");
var matched = UO.GetFoundedText();
var latest = UO.LastMessage();
UO.Print("Found: " + matched);
UO.Print("Latest: " + latest);
return null;
}
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.LineCount();Читает количество подходящих строк последнего поиска.
Параметров нет.
int — число совпавших записей в последней проверенной области. 0 при отсутствии совпадений; при newestOnly=true не больше 1. Это не число строк всего журнала, не число вхождений подстроки в одном сообщении и не позиция найденного текста.
- Поиск учитывает лимит, время, serial, hue и одноаргументный SetJournalLine. Прямое Journal/GetJournal не пересчитывает счётчик. Очистка сбрасывает его. Счётчик принадлежит мосту текущего скрипта.
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Результат одного вызова выводится в журнал. Число не преобразуется в bool; для массива показано количество элементов.
object? result = UO.LineCount();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Параметры и ход выполнения:
- Поиск без лимита и регистра. Считаются строки, а не количество ore внутри строки.
- result — позиция плюс 1; matches — отдельное количество.
var result = UO.InJournal("ore", -1);
var matches = UO.LineCount();
UO.Print(Convert.ToString(matches));Параметры и ход выполнения:
- 10 — максимум проверяемых строк; регистр учитывается.
- Количество может быть от 0 до 10, даже если более старых совпадений намного больше.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var result = UO.InJournal("ore", 10);
UO.Print(Convert.ToString(UO.LineCount()));
return null;
}Параметры и ход выполнения:
- serial/color=-1, время=0/0 — фильтры отключены. true останавливает поиск на первой подходящей строке.
- checkedMatches равен 0 или 1 и не показывает общее число совпадений во всём журнале.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
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;
}
async public Task<object?> RunScenarioAsync()
{
var result = UO.InJournal("ore", -1, -1, 0, 0, true, false);
var checkedMatches = UO.LineCount();
UO.Print(Convert.ToString(checkedMatches));
return null;
}
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.LineID();Возвращает числовой serial автора выбранной записи журнала.
Параметров нет.
int — 32-битный serial автора. Без выбора — 0. Старший бит может дать отрицательное число из-за signed int; GetFoundedTextSerial сохраняет полное hex-представление. Это не graphic/type.
- Поиск и Journal/GetJournal/LastJournalMessage сохраняют текст и поля одной записи в текущем скрипте. Новые сообщения не подменяют эти поля. Если запись вытеснена из ограниченного журнала, сохранённые поля остаются, но LineIndex/GetFoundedTextIndex возвращают -1. Следующий поиск или чтение выбирает другую запись; неудачный поиск, неверный индекс и очистка через этот скрипт сбрасывают выбор.
- Getter не запускает поиск и не выбирает самую новую строку. Нулевые/пустые значения могут быть действующими данными; учитывайте результат поиска.
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Результат одного вызова выводится в журнал. Число не преобразуется в bool; для массива показано количество элементов.
object? result = UO.LineID();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Параметры и ход выполнения:
- notice — пример искомого текста. Getter вызывается без параметров только после успешного поиска.
- int — 32-битный serial автора. Без выбора — 0. Старший бит может дать отрицательное число из-за signed int; GetFoundedTextSerial сохраняет полное hex-представление. Это не graphic/type.
if (Truth(UO.InJournal("notice") > 0))
{
var value = UO.LineID();
UO.Print("Speaker serial: " + Convert.ToString(value));
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметры и ход выполнения:
- Journal(0) выбирает новую запись. index и value читаются до Print.
- Проверка index позволяет отличить отсутствие записи от допустимого нулевого или пустого поля.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var text = UO.Journal(0);
var index = UO.LineIndex();
var value = UO.LineID();
if (Truth(index >= 0))
{
UO.Print(Convert.ToString(value));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметры и ход выполнения:
- Первый поиск выбирает success, второй заменяет или сбрасывает выбор. saved уже содержит копию нужного поля.
- Сохранённая var не меняется при новом поиске, очистке или поступлении сообщений.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
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;
}
async public Task<object?> RunScenarioAsync()
{
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;
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.LineIndex();Возвращает текущий индекс выбранной записи, если она ещё хранится в журнале.
Параметров нет.
int — текущий индекс от 0 (самая новая строка). -1 означает, что выбора нет либо выбранная запись уже удалена/вытеснена. Это не результат InJournal: из индекса не нужно вычитать 1.
- Поиск и Journal/GetJournal/LastJournalMessage сохраняют текст и поля одной записи в текущем скрипте. Новые сообщения не подменяют эти поля. Если запись вытеснена из ограниченного журнала, сохранённые поля остаются, но LineIndex/GetFoundedTextIndex возвращают -1. Следующий поиск или чтение выбирает другую запись; неудачный поиск, неверный индекс и очистка через этот скрипт сбрасывают выбор.
- Индекс пересчитывается по идентичности записи. Новые сообщения увеличивают его. Старый сохранённый индекс не является постоянным ID; для текста безопаснее GetFoundedText.
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Результат одного вызова выводится в журнал. Число не преобразуется в bool; для массива показано количество элементов.
object? result = UO.LineIndex();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Параметры и ход выполнения:
- Getter без аргументов читает выбор текущего скрипта. 0 — новая строка, -1 — нет строки в текущем буфере.
- Текст берётся из сохранённой записи, чтобы новые сообщения не подменили его.
if (Truth(UO.InJournal("notice") > 0))
{
var index = UO.LineIndex();
var text = UO.GetFoundedText();
UO.Print(Convert.ToString(index) + ": " + text);
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметры и ход выполнения:
- Journal(0) выбирает последнюю запись; проверка исключает пустой журнал.
- Пустой text допускается у действующей записи.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var text = UO.Journal(0);
if (Truth(UO.LineIndex() >= 0))
{
UO.Print(text);
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметры и ход выполнения:
- Ожидание 100 мс позволяет прийти новым сообщениям. after заново находит ту же запись.
- after может увеличиться или стать -1 при удалении; GetFoundedText всё ещё содержит сохранённый текст.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
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;
}
async public Task<object?> RunScenarioAsync()
{
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;
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.LineMsgType();Возвращает тип сетевого сообщения выбранной записи журнала.
Параметров нет.
int — код MessageType: 0 Regular, 1 System, 2 Emote, 3 Limit3Spell, 6 Label, 7 Focus, 8 Whisper, 9 Yell, 10 Spell, 13 Guild, 14 Alliance, 15 Command, 16 GmChat, 192 Encoded, 255 Party. Без выбора 0. Это коды Classic UO; не заменяйте их отличающимися числами из сторонних примеров.
- Поиск и Journal/GetJournal/LastJournalMessage сохраняют текст и поля одной записи в текущем скрипте. Новые сообщения не подменяют эти поля. Если запись вытеснена из ограниченного журнала, сохранённые поля остаются, но LineIndex/GetFoundedTextIndex возвращают -1. Следующий поиск или чтение выбирает другую запись; неудачный поиск, неверный индекс и очистка через этот скрипт сбрасывают выбор.
- Getter не запускает поиск и не выбирает самую новую строку. Нулевые/пустые значения могут быть действующими данными; учитывайте результат поиска.
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Результат одного вызова выводится в журнал. Число не преобразуется в bool; для массива показано количество элементов.
object? result = UO.LineMsgType();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Параметры и ход выполнения:
- notice — пример искомого текста. Getter вызывается без параметров только после успешного поиска.
- int — код MessageType: 0 Regular, 1 System, 2 Emote, 3 Limit3Spell, 6 Label, 7 Focus, 8 Whisper, 9 Yell, 10 Spell, 13 Guild, 14 Alliance, 15 Command, 16 GmChat, 192 Encoded, 255 Party. Без выбора 0. Это коды Classic UO; не заменяйте их отличающимися числами из сторонних примеров.
if (Truth(UO.InJournal("notice") > 0))
{
var value = UO.LineMsgType();
UO.Print("Message type: " + Convert.ToString(value));
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметры и ход выполнения:
- Journal(0) выбирает новую запись. index и value читаются до Print.
- Проверка index позволяет отличить отсутствие записи от допустимого нулевого или пустого поля.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var text = UO.Journal(0);
var index = UO.LineIndex();
var value = UO.LineMsgType();
if (Truth(index >= 0))
{
UO.Print(Convert.ToString(value));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметры и ход выполнения:
- Первый поиск выбирает success, второй заменяет или сбрасывает выбор. saved уже содержит копию нужного поля.
- Сохранённая var не меняется при новом поиске, очистке или поступлении сообщений.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
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;
}
async public Task<object?> RunScenarioAsync()
{
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;
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.LineName();Возвращает имя автора выбранной записи журнала.
Параметров нет.
string — имя автора выбранной записи, например System или имя персонажа; пустая строка без выбора/без имени. Имя не гарантирует уникальность персонажа.
- Поиск и Journal/GetJournal/LastJournalMessage сохраняют текст и поля одной записи в текущем скрипте. Новые сообщения не подменяют эти поля. Если запись вытеснена из ограниченного журнала, сохранённые поля остаются, но LineIndex/GetFoundedTextIndex возвращают -1. Следующий поиск или чтение выбирает другую запись; неудачный поиск, неверный индекс и очистка через этот скрипт сбрасывают выбор.
- Getter не запускает поиск и не выбирает самую новую строку. Нулевые/пустые значения могут быть действующими данными; учитывайте результат поиска.
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Результат одного вызова выводится в журнал. Число не преобразуется в bool; для массива показано количество элементов.
object? result = UO.LineName();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Параметры и ход выполнения:
- notice — пример искомого текста. Getter вызывается без параметров только после успешного поиска.
- string — имя автора выбранной записи, например System или имя персонажа; пустая строка без выбора/без имени. Имя не гарантирует уникальность персонажа.
if (Truth(UO.InJournal("notice") > 0))
{
var value = UO.LineName();
UO.Print("Speaker: " + Convert.ToString(value));
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметры и ход выполнения:
- Journal(0) выбирает новую запись. index и value читаются до Print.
- Проверка index позволяет отличить отсутствие записи от допустимого нулевого или пустого поля.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var text = UO.Journal(0);
var index = UO.LineIndex();
var value = UO.LineName();
if (Truth(index >= 0))
{
UO.Print(Convert.ToString(value));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметры и ход выполнения:
- Первый поиск выбирает success, второй заменяет или сбрасывает выбор. saved уже содержит копию нужного поля.
- Сохранённая var не меняется при новом поиске, очистке или поступлении сообщений.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
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;
}
async public Task<object?> RunScenarioAsync()
{
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;
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.LineTextColor();Возвращает числовой цвет выбранной записи журнала.
Параметров нет.
int — UO hue выбранной записи (0…65535); без выбора 0. Ноль допустим как цвет. Это не RGB и не ID автора.
- Поиск и Journal/GetJournal/LastJournalMessage сохраняют текст и поля одной записи в текущем скрипте. Новые сообщения не подменяют эти поля. Если запись вытеснена из ограниченного журнала, сохранённые поля остаются, но LineIndex/GetFoundedTextIndex возвращают -1. Следующий поиск или чтение выбирает другую запись; неудачный поиск, неверный индекс и очистка через этот скрипт сбрасывают выбор.
- Getter не запускает поиск и не выбирает самую новую строку. Нулевые/пустые значения могут быть действующими данными; учитывайте результат поиска.
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Результат одного вызова выводится в журнал. Число не преобразуется в bool; для массива показано количество элементов.
object? result = UO.LineTextColor();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Параметры и ход выполнения:
- notice — пример искомого текста. Getter вызывается без параметров только после успешного поиска.
- int — UO hue выбранной записи (0…65535); без выбора 0. Ноль допустим как цвет. Это не RGB и не ID автора.
if (Truth(UO.InJournal("notice") > 0))
{
var value = UO.LineTextColor();
UO.Print("Hue: " + Convert.ToString(value));
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметры и ход выполнения:
- Journal(0) выбирает новую запись. index и value читаются до Print.
- Проверка index позволяет отличить отсутствие записи от допустимого нулевого или пустого поля.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var text = UO.Journal(0);
var index = UO.LineIndex();
var value = UO.LineTextColor();
if (Truth(index >= 0))
{
UO.Print(Convert.ToString(value));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметры и ход выполнения:
- Первый поиск выбирает success, второй заменяет или сбрасывает выбор. saved уже содержит копию нужного поля.
- Сохранённая var не меняется при новом поиске, очистке или поступлении сообщений.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
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;
}
async public Task<object?> RunScenarioAsync()
{
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;
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.LineTextFont();Возвращает шрифт выбранной записи журнала.
Параметров нет.
int — UO font ID выбранной записи (0…255 в клиенте); без выбора 0. Это ID игрового шрифта, не размер шрифта IDE.
- Поиск и Journal/GetJournal/LastJournalMessage сохраняют текст и поля одной записи в текущем скрипте. Новые сообщения не подменяют эти поля. Если запись вытеснена из ограниченного журнала, сохранённые поля остаются, но LineIndex/GetFoundedTextIndex возвращают -1. Следующий поиск или чтение выбирает другую запись; неудачный поиск, неверный индекс и очистка через этот скрипт сбрасывают выбор.
- Getter не запускает поиск и не выбирает самую новую строку. Нулевые/пустые значения могут быть действующими данными; учитывайте результат поиска.
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Результат одного вызова выводится в журнал. Число не преобразуется в bool; для массива показано количество элементов.
object? result = UO.LineTextFont();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Параметры и ход выполнения:
- notice — пример искомого текста. Getter вызывается без параметров только после успешного поиска.
- int — UO font ID выбранной записи (0…255 в клиенте); без выбора 0. Это ID игрового шрифта, не размер шрифта IDE.
if (Truth(UO.InJournal("notice") > 0))
{
var value = UO.LineTextFont();
UO.Print("Font ID: " + Convert.ToString(value));
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметры и ход выполнения:
- Journal(0) выбирает новую запись. index и value читаются до Print.
- Проверка index позволяет отличить отсутствие записи от допустимого нулевого или пустого поля.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var text = UO.Journal(0);
var index = UO.LineIndex();
var value = UO.LineTextFont();
if (Truth(index >= 0))
{
UO.Print(Convert.ToString(value));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметры и ход выполнения:
- Первый поиск выбирает success, второй заменяет или сбрасывает выбор. saved уже содержит копию нужного поля.
- Сохранённая var не меняется при новом поиске, очистке или поступлении сообщений.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
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;
}
async public Task<object?> RunScenarioAsync()
{
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;
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.LineTime();Возвращает календарную метку времени выбранной записи журнала.
Параметров нет.
double — OLE Automation Date, число дней от 30.12.1899, дробная часть задаёт время суток. Без выбора 0. Это не миллисекунды Now() и не целый Unix timestamp. Разность двух таких меток умножается на 86400000 для миллисекунд.
- Поиск и Journal/GetJournal/LastJournalMessage сохраняют текст и поля одной записи в текущем скрипте. Новые сообщения не подменяют эти поля. Если запись вытеснена из ограниченного журнала, сохранённые поля остаются, но LineIndex/GetFoundedTextIndex возвращают -1. Следующий поиск или чтение выбирает другую запись; неудачный поиск, неверный индекс и очистка через этот скрипт сбрасывают выбор.
- Getter не запускает поиск и не выбирает самую новую строку. Нулевые/пустые значения могут быть действующими данными; учитывайте результат поиска.
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Результат одного вызова выводится в журнал. Число не преобразуется в bool; для массива показано количество элементов.
object? result = UO.LineTime();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Параметры и ход выполнения:
- notice — пример искомого текста. Getter вызывается без параметров только после успешного поиска.
- double — OLE Automation Date, число дней от 30.12.1899, дробная часть задаёт время суток. Без выбора 0. Это не миллисекунды Now() и не целый Unix timestamp. Разность двух таких меток умножается на 86400000 для миллисекунд.
if (Truth(UO.InJournal("notice") > 0))
{
var value = UO.LineTime();
UO.Print("OLE date: " + Convert.ToString(value));
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметры и ход выполнения:
- Journal(0) выбирает новую запись. index и value читаются до Print.
- Проверка index позволяет отличить отсутствие записи от допустимого нулевого или пустого поля.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var text = UO.Journal(0);
var index = UO.LineIndex();
var value = UO.LineTime();
if (Truth(index >= 0))
{
UO.Print(Convert.ToString(value));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметры и ход выполнения:
- Первый поиск выбирает success, второй заменяет или сбрасывает выбор. saved уже содержит копию нужного поля.
- Сохранённая var не меняется при новом поиске, очистке или поступлении сообщений.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
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;
}
async public Task<object?> RunScenarioAsync()
{
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;
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.LineType();Возвращает категорию текста выбранной записи журнала.
Параметров нет.
int — категория TextType клиента: 0 CLIENT, 1 SYSTEM, 2 OBJECT, 3 GUILD_ALLY. Без выбора 0. Это категория отображения, не serial, не graphic и не MessageType.
- Поиск и Journal/GetJournal/LastJournalMessage сохраняют текст и поля одной записи в текущем скрипте. Новые сообщения не подменяют эти поля. Если запись вытеснена из ограниченного журнала, сохранённые поля остаются, но LineIndex/GetFoundedTextIndex возвращают -1. Следующий поиск или чтение выбирает другую запись; неудачный поиск, неверный индекс и очистка через этот скрипт сбрасывают выбор.
- Getter не запускает поиск и не выбирает самую новую строку. Нулевые/пустые значения могут быть действующими данными; учитывайте результат поиска.
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Результат одного вызова выводится в журнал. Число не преобразуется в bool; для массива показано количество элементов.
object? result = UO.LineType();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Параметры и ход выполнения:
- notice — пример искомого текста. Getter вызывается без параметров только после успешного поиска.
- int — категория TextType клиента: 0 CLIENT, 1 SYSTEM, 2 OBJECT, 3 GUILD_ALLY. Без выбора 0. Это категория отображения, не serial, не graphic и не MessageType.
if (Truth(UO.InJournal("notice") > 0))
{
var value = UO.LineType();
UO.Print("Text category: " + Convert.ToString(value));
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметры и ход выполнения:
- Journal(0) выбирает новую запись. index и value читаются до Print.
- Проверка index позволяет отличить отсутствие записи от допустимого нулевого или пустого поля.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var text = UO.Journal(0);
var index = UO.LineIndex();
var value = UO.LineType();
if (Truth(index >= 0))
{
UO.Print(Convert.ToString(value));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметры и ход выполнения:
- Первый поиск выбирает success, второй заменяет или сбрасывает выбор. saved уже содержит копию нужного поля.
- Сохранённая var не меняется при новом поиске, очистке или поступлении сообщений.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
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;
}
async public Task<object?> RunScenarioAsync()
{
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;
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.LowJournal();Возвращает минимальный доступный индекс журнала.
Параметров нет.
int: -1 при пустом журнале; иначе 0 — индекс самой новой доступной записи. Journal/GetJournal используют нулевые индексы от новой записи к старой; положительный результат InJournal использует другой, единичный отсчёт.
- Новые сообщения и очистка изменяют границы. Здесь действует порядок Journal(0) от новой записи к старой.
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Результат одного вызова выводится в журнал. Число не преобразуется в bool; для массива показано количество элементов.
object? result = UO.LowJournal();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Параметры и ход выполнения:
- Отрицательная граница означает пустой буфер.
- При непустом буфере Journal(0) читает новую запись.
if (Truth(UO.LowJournal() >= 0))
{
var text = UO.Journal(0);
UO.Print(text);
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметры и ход выполнения:
- index передаётся непосредственно в Journal, без вычитания единицы.
- Индекс может сдвинуться при входящих сообщениях; буфер не замораживается между вызовами.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var index = UO.LowJournal();
if (Truth(index >= 0))
{
var text = UO.Journal(index);
UO.Print(text);
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметры и ход выполнения:
- LowJournal и HighJournal образуют границы индексов. Это не число строк; содержимое журнала может меняться между вызовами.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
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;
}
async public Task<object?> RunScenarioAsync()
{
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;
}
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.SetJournalLine(object? arg0);
void UO.SetJournalLine(object? arg0, object? arg1);Изменяет текст строки; отдельная одноаргументная форма задаёт нижнюю границу поиска.
-
index— Для формы (index,text): текущий индекс от 0, где 0 — новая строка. Для формы (index): количество пропускаемых старых строк от начала внутреннего буфера, не индекс Journal; 0 снимает ограничение. Отрицательная одноаргументная граница ограничивается 0. -
StringIndex— Имя index в совместимой двухаргументной регистрации: текущий индекс Journal от 0. -
text— Новый текст существующей строки, включая пустую строку. Обязателен в форме замены текста. -
Text— То же значение text в совместимой регистрации.
void — нет возвращаемого значения. При неверном индексе двухаргументная форма ничего не меняет. Одноаргументная форма не изменяет текст.
- Замена локальная, серверу ничего не отправляется. Поля автора/времени сохраняются. Уже выбранный снимок текста остаётся прежним до повторного Journal или поиска.
- Одноаргументная граница — устаревшее расширение: число старых строк в текущем буфере; при вытеснении/удалении записей его смысл сдвигается. Для надёжной границы между действиями используйте InJournalBetweenTimes с Now().
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Команда вызывается отдельной строкой. Сообщение перед ней показывает начало вызова, а не подтверждение действия сервера.
UO.Print("Calling UO.SetJournalLine");
UO.SetJournalLine(0);Параметры и ход выполнения:
- 0 — новая строка; второй аргумент — её новый полный текст.
- Это меняет локальный буфер. Между чтением и записью могут приходить новые сообщения; индекс не является постоянным ID.
if (Truth(UO.HighJournal() >= 0))
{
var text = UO.Journal(0);
UO.SetJournalLine(0, "[read] " + text);
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметры и ход выполнения:
- Пустая строка заменяет текст, но не удаляет запись и её автора.
- Неверный индекс пропускается. exists может быть true даже при text="".
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
UO.SetJournalLine(0, "");
var text = UO.Journal(0);
var exists = UO.LineIndex() >= 0;
UO.Print(Convert.ToString(exists));
return null;
}Параметры и ход выполнения:
- Один аргумент 0 означает не пропускать старые строки; это другая форма команды.
- Поиск без ограничения и без учёта регистра. Никакой текст этой формой не заменяется.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
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;
}
async public Task<object?> RunScenarioAsync()
{
UO.SetJournalLine(0);
var found = UO.InJournal("notice", -1);
UO.Print(Convert.ToString(found));
return null;
}
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.WaitJournalLine(object? arg0, object? arg1, object? arg2);Ожидает подходящее сообщение в локальном журнале.
-
StartTime— Обязательная начальная метка: int Now() в миллисекундах, 0 — начало выполнения. Также принимается double OLE date из LineTime (современные даты 20000…100000 дней). Целые 20000…100000 всегда миллисекунды, не дата. Не передавайте возраст записи. -
Convert.ToString— Искомая подстрока или несколько альтернатив через |, например success|failed. Пробелы по краям каждой альтернативы удаляются, пустые альтернативы пропускаются. Это обычный текст, не регулярное выражение. Используйте непустой шаблон. Поиск без учёта регистра. -
MaxWaitTimeMS— Обязательный int тайм-аут в миллисекундах; положительное значение ограничивает ожидание, 0 означает ждать без ограничения. Отрицательные значения ограничиваются 0. Остановка скрипта прерывает ожидание.
bool — true при найденном тексте, false при положительном тайм-ауте без совпадения. Это не индекс и не количество. В скрипте логические значения также могут отображаться как 1/0.
Результат команды — числовой флаг: 1 означает выполненное условие, 0 — невыполненное. После var result = команда(...) проверяйте if (result != 0) или if (result == 0). Сохраните результат одного вызова: повторный вызов может выполнить действие снова либо прочитать уже изменившееся состояние.
- Поиск и Journal/GetJournal/LastJournalMessage сохраняют текст и поля одной записи в текущем скрипте. Новые сообщения не подменяют эти поля. Если запись вытеснена из ограниченного журнала, сохранённые поля остаются, но LineIndex/GetFoundedTextIndex возвращают -1. Следующий поиск или чтение выбирает другую запись; неудачный поиск, неверный индекс и очистка через этот скрипт сбрасывают выбор.
- Начальная граница фиксируется при вызове, опрос идёт примерно каждые 25 мс. Само ожидание не вызывает навык или предмет. LineCount после ожидания относится к последнему поиску.
- Для фильтра только системных строк используйте WaitJournalLineSystem.
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Результат одного вызова выводится в журнал. Число не преобразуется в bool; для массива показано количество элементов.
object? result = UO.WaitJournalLine(Now(), "success|failed", 3000);
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Параметры и ход выполнения:
- started — граница до ожидания. 3000 — максимум ожидания в миллисекундах. Шаблон содержит два исхода.
- false — текст не найден за этот срок; сервер мог использовать другую формулировку.
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;Параметры и ход выполнения:
- 0 — начало runtime, а не отключение тайм-аута. 100 — тайм-аут.
- Найденная строка может уже находиться в журнале до вызова.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
if (Truth(UO.WaitJournalLine(0, "notice", 100)))
{
var author = UO.LineName();
UO.Print(author);
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметры и ход выполнения:
- stamp сохраняет double LineTime без Convert.ToInt32/Convert.ToString: это календарная дата, не Now(). 1500 — миллисекунды ожидания.
- Граница включается. Выбранная строка сама может подойти, если содержит response.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
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;
}
async public Task<object?> RunScenarioAsync()
{
var text = UO.Journal(0);
if (Truth(UO.LineIndex() >= 0))
{
var stamp = UO.LineTime();
var found = UO.WaitJournalLine(stamp, "response", 1500);
UO.Print(Convert.ToString(found));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.WaitJournalLineSystem(object? arg0, object? arg1, object? arg2);Ожидает подходящее сообщение с именем автора System.
-
StartTime— Обязательная начальная метка: int Now() в миллисекундах, 0 — начало выполнения. Также принимается double OLE date из LineTime (современные даты 20000…100000 дней). Целые 20000…100000 всегда миллисекунды, не дата. Не передавайте возраст записи. -
Convert.ToString— Искомая подстрока или несколько альтернатив через |, например success|failed. Пробелы по краям каждой альтернативы удаляются, пустые альтернативы пропускаются. Это обычный текст, не регулярное выражение. Используйте непустой шаблон. Поиск без учёта регистра. -
MaxWaitTimeMS— Обязательный int тайм-аут в миллисекундах; положительное значение ограничивает ожидание, 0 означает ждать без ограничения. Отрицательные значения ограничиваются 0. Остановка скрипта прерывает ожидание.
bool — true при найденном тексте, false при положительном тайм-ауте без совпадения. Это не индекс и не количество. В скрипте логические значения также могут отображаться как 1/0.
Результат команды — числовой флаг: 1 означает выполненное условие, 0 — невыполненное. После var result = команда(...) проверяйте if (result != 0) или if (result == 0). Сохраните результат одного вызова: повторный вызов может выполнить действие снова либо прочитать уже изменившееся состояние.
- Поиск и Journal/GetJournal/LastJournalMessage сохраняют текст и поля одной записи в текущем скрипте. Новые сообщения не подменяют эти поля. Если запись вытеснена из ограниченного журнала, сохранённые поля остаются, но LineIndex/GetFoundedTextIndex возвращают -1. Следующий поиск или чтение выбирает другую запись; неудачный поиск, неверный индекс и очистка через этот скрипт сбрасывают выбор.
- Начальная граница фиксируется при вызове, опрос идёт примерно каждые 25 мс. Само ожидание не вызывает навык или предмет. LineCount после ожидания относится к последнему поиску.
- В этой адаптации System определяется именем автора без учёта регистра; команда работает с общим журналом ClassicUO.
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Результат одного вызова выводится в журнал. Число не преобразуется в bool; для массива показано количество элементов.
object? result = UO.WaitJournalLineSystem(Now(), "success|failed", 3000);
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Параметры и ход выполнения:
- started — граница до ожидания. 3000 — максимум ожидания в миллисекундах. Шаблон содержит два исхода.
- false — текст не найден за этот срок; сервер мог использовать другую формулировку.
var started = Now();
var found = UO.WaitJournalLineSystem(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;Параметры и ход выполнения:
- 0 — начало runtime, а не отключение тайм-аута. 100 — тайм-аут.
- Найденная строка может уже находиться в журнале до вызова.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
if (Truth(UO.WaitJournalLineSystem(0, "notice", 100)))
{
var author = UO.LineName();
UO.Print(author);
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметры и ход выполнения:
- stamp сохраняет double LineTime без Convert.ToInt32/Convert.ToString: это календарная дата, не Now(). 1500 — миллисекунды ожидания.
- Граница включается. Выбранная строка сама может подойти, если содержит response.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
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;
}
async public Task<object?> RunScenarioAsync()
{
var text = UO.Journal(0);
if (Truth(UO.LineIndex() >= 0))
{
var stamp = UO.LineTime();
var found = UO.WaitJournalLineSystem(stamp, "response", 1500);
UO.Print(Convert.ToString(found));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.WaitingForJournalText(object? arg0, object? arg1, object? arg2);
void UO.WaitingForJournalText(object? arg0, object? arg1, object? arg2, object? arg3);
void UO.WaitingForJournalText(object? arg0, object? arg1, object? arg2, object? arg3, object? arg4);
void UO.WaitingForJournalText(object? arg0, object? arg1, object? arg2, object? arg3, object? arg4, object? arg5);Ожидает текст с дополнительными режимами сравнения и необязательным запуском навыка/предмета.
-
startTime— Обязательная метка Now(), int миллисекунд от начала runtime. Проверяются строки с меткой не меньше startTime; 0 включает записи с нулевой меткой. -
maxDelay— Обязательный максимум ожидания в миллисекундах. 0 и отрицательные значения означают один немедленный проход, а не бесконечное ожидание. -
text— Искомая подстрока или несколько альтернатив через |, например success|failed. Пробелы по краям каждой альтернативы удаляются, пустые альтернативы пропускаются. Это обычный текст, не регулярное выражение. Используйте непустой шаблон. -
equals— Необязательный int: 0 (по умолчанию) — подстрока; ненулевое значение — весь текст должен совпасть с одной альтернативой. -
ignoreCase— Необязательный int: 0 (по умолчанию) — учитывать регистр; ненулевое — не учитывать. -
skillNameOrObjectId— Необязательный навык по имени, serial/hex-строка или разрешаемый алиас объекта. Сначала распознаётся название навыка, иначе используется объект. 0/пустая строка отключают действие. Навык/предмет запускается один раз перед поиском.
void — возвращаемого значения нет, не присваивайте вызов переменной. После завершения GetFoundedTextIndex >= 0 означает, что выбранная запись ещё доступна; -1 — не найдено/запись удалена. GetFoundedTextID показывает совпавшую альтернативу только при успешном выборе.
- Поиск и Journal/GetJournal/LastJournalMessage сохраняют текст и поля одной записи в текущем скрипте. Новые сообщения не подменяют эти поля. Если запись вытеснена из ограниченного журнала, сохранённые поля остаются, но LineIndex/GetFoundedTextIndex возвращают -1. Следующий поиск или чтение выбирает другую запись; неудачный поиск, неверный индекс и очистка через этот скрипт сбрасывают выбор.
- Опрос с паузой до 25 мс; остановка скрипта прерывает его. Пустой список альтернатив не находит текст. Для bool результата используйте WaitJournalLine с его собственными параметрами и смыслом нулевого тайм-аута.
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Команда вызывается отдельной строкой. Сообщение перед ней показывает начало вызова, а не подтверждение действия сервера.
UO.Print("Calling UO.WaitingForJournalText");
UO.WaitingForJournalText(Now(), 2000, "notice");Параметры и ход выполнения:
- startTime — метка до ожидания; maxDelay=2000 мс; сравнение подстроки с учётом регистра.
- Команда не возвращает true/false: проверяется выбранная запись.
var started = Now();
UO.WaitingForJournalText(started, 2000, "notice");
if (Truth(UO.GetFoundedTextIndex() >= 0))
{
UO.Print(UO.GetFoundedText());
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметры и ход выполнения:
- startTime=0; maxDelay=0 — один проход. equals=1 — весь текст, ignoreCase=1 — без регистра.
- Выводится номер альтернативы 0 или 1; длинная строка с дополнительными словами не подойдёт.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
UO.WaitingForJournalText(0, 0, "success|failed", 1, 1);
if (Truth(UO.GetFoundedTextIndex() >= 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;Параметры и ход выполнения:
- Шестой аргумент Hiding запускает навык один раз. equals=0 — подстрока, ignoreCase=1 — без регистра.
- Слова hidden/failed — примеры, замените текстом своего сервера. Вместо навыка можно указать serial или lastobject для использования предмета.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
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;
}
async public Task<object?> RunScenarioAsync()
{
var started = Now();
UO.WaitingForJournalText(started, 3000, "hidden|failed", 0, 1, "Hiding");
if (Truth(UO.GetFoundedTextIndex() >= 0))
{
UO.Print(UO.GetFoundedText());
}
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();
}ClassicUO — Bad Newbie & C# Scripts IDE