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.