API UO InJournal - LIHACHTETAN/ClassicUO-BadNewbie-BasicIDE GitHub Wiki
UO.InJournal
Оглавление · Алфавитный указатель · Journal
ClassicUO • Runtime API
Ищет сообщение в локальном журнале и сохраняет найденную запись с её полями.
Точный синтаксис
UO.InJournal(pattern:String) -> Integer
UO.InJournal(Str:Any) -> Any
UO.InJournal(pattern:String, maxLinesOrIgnoreCase:Integer) -> Integer
UO.InJournal(pattern:Any, serial:Any, color:Any) -> Integer
UO.InJournal(pattern:Any, serial:Any, color:Any, startTime:Any) -> Integer
UO.InJournal(pattern:Any, serial:Any, color:Any, startTime:Any, endTime:Any) -> Integer
UO.InJournal(pattern:Any, serial:Any, color:Any, startTime:Any, endTime:Any, newestOnly:Any) -> Integer
UO.InJournal(pattern:Any, serial:Any, color:Any, startTime:Any, endTime:Any, newestOnly:Any, caseSensitive:Any) -> Integer
Выберите одну из зарегистрированных форм. Параметры передаются позиционно. Any означает значение BASIC с преобразованием внутри команды; Unit — отсутствие возвращаемого значения.
Параметры
pattern— Искомая подстрока или несколько альтернатив через |, например success|failed. Пробелы по краям каждой альтернативы удаляются, пустые альтернативы пропускаются. Это обычный текст, не регулярное выражение. Используйте непустой шаблон.Str— Искомая подстрока или несколько альтернатив через |, например 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(), Integer в миллисекундах. При заданном положительном endTime значение startTime=0 означает начало выполнения. Если обе метки отсутствуют/неположительные, фильтра времени нет.endTime— Необязательная конечная метка Now(), Integer в миллисекундах. Отсутствует или 0 — текущее время. Порядок положительных границ несущественен. Будущая метка ограничивается текущим временем.newestOnly— Необязательный Boolean, по умолчанию FALSE. TRUE прекращает поиск после первого совпадения; LineCount тогда 0 или 1. FALSE подсчитывает все подходящие строки, выбирая всё равно самую новую.caseSensitive— Необязательный Boolean расширенной формы, по умолчанию FALSE. TRUE учитывает регистр. Форма только с pattern, напротив, всегда учитывает регистр.
Возвращает
Integer — 0, если совпадения нет; иначе текущий индекс самой новой подходящей строки плюс 1 (1 — самая новая запись, 2 — предыдущая). Это не количество совпадений и не serial. Проверяйте result > 0. Для текста используйте GetFoundedText(), для количества — LineCount(). Внешний Stealth использует другой результат; в этом BASIC API сохранена семантика Basic.
Поведение
- Поиск и Journal/GetJournal/LastJournalMessage сохраняют текст и поля одной записи в текущем скрипте. Новые сообщения не подменяют эти поля. Если запись вытеснена из ограниченного журнала, сохранённые поля остаются, но LineIndex/GetFoundedTextIndex возвращают -1. Следующий поиск или чтение выбирает другую запись; неудачный поиск, неверный индекс и очистка через этот скрипт сбрасывают выбор.
- Поиск не ожидает нового текста. Пустой шаблон в текущем InJournal подходит любой строке, но не задаёт ID альтернативы; для проверки наличия строк используйте HighJournal/LowJournal.
- Форма из двух аргументов задаёт лимит/регистр, а не serial. Для serial обязательно передать также color. Одноаргументный SetJournalLine может ограничить область поиска.
- Первичные справочники: https://forum.yoko.com.ua/viewtopic.php?p=27633 ; https://stealth.od.ua/api/InJournal/ .
Примеры
Пример 1. Проверить сообщение с учётом регистра
# Проверить сообщение с учётом регистра
#
# Ищет сообщение в локальном журнале и сохраняет найденную запись с её полями.
#
# Integer — 0, если совпадения нет; иначе текущий индекс самой новой подходящей строки плюс 1 (1
# — самая новая запись, 2 — предыдущая). Это не количество совпадений и не serial. Проверяйте
# result > 0. Для текста используйте GetFoundedText(), для количества — LineCount(). Внешний
# Stealth использует другой результат; в этом BASIC API сохранена семантика Basic.
SUB Main()
# pattern=You see — подстрока, регистр важен. found=0 означает отсутствие.
# Текст копируется из найденной записи; приход нового сообщения не заменяет его.
VAR found = UO.InJournal('You see')
IF found > 0 THEN
VAR text = UO.GetFoundedText()
UO.Print(text)
END IF
END SUB
Разбор параметров и выполнения:
- pattern=You see — подстрока, регистр важен. found=0 означает отсутствие.
- Текст копируется из найденной записи; приход нового сообщения не заменяет его.
Пример 2. Несколько исходов без учёта регистра
# Несколько исходов без учёта регистра
#
# Ищет сообщение в локальном журнале и сохраняет найденную запись с её полями.
#
# Integer — 0, если совпадения нет; иначе текущий индекс самой новой подходящей строки плюс 1 (1
# — самая новая запись, 2 — предыдущая). Это не количество совпадений и не serial. Проверяйте
# result > 0. Для текста используйте GetFoundedText(), для количества — LineCount(). Внешний
# Stealth использует другой результат; в этом BASIC API сохранена семантика Basic.
SUB Main()
# Второй аргумент -1 снимает лимит строк и отключает учёт регистра.
# outcome=0 для success, 1 для failed; это номер альтернативы, не ID говорящего.
VAR found = UO.InJournal('success|failed', -1)
IF found > 0 THEN
VAR outcome = UO.GetFoundedTextID()
UO.Print('Alternative: ' + STR(outcome))
END IF
END SUB
Разбор параметров и выполнения:
- Второй аргумент -1 снимает лимит строк и отключает учёт регистра.
- outcome=0 для success, 1 для failed; это номер альтернативы, не ID говорящего.
Пример 3. Проверить только двадцать последних строк
# Проверить только двадцать последних строк
#
# Ищет сообщение в локальном журнале и сохраняет найденную запись с её полями.
#
# Integer — 0, если совпадения нет; иначе текущий индекс самой новой подходящей строки плюс 1 (1
# — самая новая запись, 2 — предыдущая). Это не количество совпадений и не serial. Проверяйте
# result > 0. Для текста используйте GetFoundedText(), для количества — LineCount(). Внешний
# Stealth использует другой результат; в этом BASIC API сохранена семантика Basic.
SUB Main()
# 20 — максимум проверяемых строк, регистр важен. matches — количество подходящих строк в
# проверенной области.
# found содержит позицию плюс 1, а не matches. Запись диагностического текста тоже может
# пополнить журнал.
VAR found = UO.InJournal('bank', 20)
VAR matches = UO.LineCount()
UO.Print('Matches: ' + STR(matches))
END SUB
Разбор параметров и выполнения:
- 20 — максимум проверяемых строк, регистр важен. matches — количество подходящих строк в проверенной области.
- found содержит позицию плюс 1, а не matches. Запись диагностического текста тоже может пополнить журнал.
Пример 4. Все расширенные параметры
# Все расширенные параметры
#
# Ищет сообщение в локальном журнале и сохраняет найденную запись с её полями.
#
# Integer — 0, если совпадения нет; иначе текущий индекс самой новой подходящей строки плюс 1 (1
# — самая новая запись, 2 — предыдущая). Это не количество совпадений и не serial. Проверяйте
# result > 0. Для текста используйте GetFoundedText(), для количества — LineCount(). Внешний
# Stealth использует другой результат; в этом BASIC API сохранена семантика Basic.
SUB Main()
# 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 found > 0 THEN
UO.Print(UO.GetFoundedText())
END IF
END SUB
Разбор параметров и выполнения:
- serial=0x00001234 — пример автора, color=0x0044 — hue. Замените реальными значениями. started/endTime — миллисекундные метки.
- TRUE останавливает поиск на первой строке; FALSE не учитывает регистр. Ожидание 350 мс отдельно, InJournal сам не ждёт.
Пример 5. Фильтр только по времени
# Фильтр только по времени
#
# Ищет сообщение в локальном журнале и сохраняет найденную запись с её полями.
#
# Integer — 0, если совпадения нет; иначе текущий индекс самой новой подходящей строки плюс 1 (1
# — самая новая запись, 2 — предыдущая). Это не количество совпадений и не serial. Проверяйте
# result > 0. Для текста используйте GetFoundedText(), для количества — LineCount(). Внешний
# Stealth использует другой результат; в этом BASIC API сохранена семантика Basic.
SUB Main()
# serial=-1 и color=-1 отключают оба фильтра. Две метки ограничивают время.
# newestOnly и caseSensitive опущены: FALSE и FALSE. Без совпадения возвращается 0.
VAR started = Now()
UO.Wait(100)
VAR found = UO.InJournal('notice', -1, -1, started, Now())
IF found = 0 THEN
UO.Print('No matching message')
END IF
END SUB
Разбор параметров и выполнения:
- serial=-1 и color=-1 отключают оба фильтра. Две метки ограничивают время.
- newestOnly и caseSensitive опущены: FALSE и FALSE. Без совпадения возвращается 0.