API UO WaitJournalLineSystem - LIHACHTETAN/ClassicUO-BadNewbie-BasicIDE GitHub Wiki

UO.WaitJournalLineSystem

Оглавление · Алфавитный указатель · Journal

ClassicUO • Runtime API

Ожидает подходящее сообщение с именем автора System.

Точный синтаксис

UO.WaitJournalLineSystem(StartTime:Any, Str:Any, MaxWaitTimeMS:Any) -> Any

Выберите одну из зарегистрированных форм. Параметры передаются позиционно. Any означает значение BASIC с преобразованием внутри команды; Unit — отсутствие возвращаемого значения.

Параметры

  • StartTime — Обязательная начальная метка: Integer Now() в миллисекундах, 0 — начало выполнения. Также принимается Decimal OLE date из LineTime (современные даты 20000…100000 дней). Целые 20000…100000 всегда миллисекунды, не дата. Не передавайте возраст записи.
  • Str — Искомая подстрока или несколько альтернатив через |, например success|failed. Пробелы по краям каждой альтернативы удаляются, пустые альтернативы пропускаются. Это обычный текст, не регулярное выражение. Используйте непустой шаблон. Поиск без учёта регистра.
  • MaxWaitTimeMS — Обязательный Integer тайм-аут в миллисекундах; положительное значение ограничивает ожидание, 0 означает ждать без ограничения. Отрицательные значения ограничиваются 0. Остановка скрипта прерывает ожидание.

Возвращает

Boolean — TRUE при найденном тексте, FALSE при положительном тайм-ауте без совпадения. Это не индекс и не количество. В скрипте логические значения также могут отображаться как 1/0.

Это логический результат: 1 = TRUE, 0 = FALSE. После VAR result = команда(...) можно писать IF result = TRUE THEN или IF result = 1 THEN; для отрицательного результата — IF result = FALSE THEN или IF result = 0 THEN. TRUE/FALSE пишутся без кавычек. Вызовите команду один раз и сохраните результат: повторный вызов может повторить действие или прочитать уже изменившееся состояние.

Поведение

  • Поиск и Journal/GetJournal/LastJournalMessage сохраняют текст и поля одной записи в текущем скрипте. Новые сообщения не подменяют эти поля. Если запись вытеснена из ограниченного журнала, сохранённые поля остаются, но LineIndex/GetFoundedTextIndex возвращают -1. Следующий поиск или чтение выбирает другую запись; неудачный поиск, неверный индекс и очистка через этот скрипт сбрасывают выбор.
  • Начальная граница фиксируется при вызове, опрос идёт примерно каждые 25 мс. Само ожидание не вызывает навык или предмет. LineCount после ожидания относится к последнему поиску.
  • В этой адаптации System определяется именем автора без учёта регистра; отдельного окна журнала Stealth в клиенте нет.
  • Первичный справочник: https://stealth.od.ua/api/WaitJournalLineSystem/ .

Примеры

Пример 1. Ожидание после сохранённой метки

# Ожидание после сохранённой метки
#
# Ожидает подходящее сообщение с именем автора System.
#
# Boolean — TRUE при найденном тексте, FALSE при положительном тайм-ауте без совпадения. Это не
# индекс и не количество. В скрипте логические значения также могут отображаться как 1/0.
#
# Это логический результат: 1 = TRUE, 0 = FALSE. После VAR result = команда(...) можно писать IF
# result = TRUE THEN или IF result = 1 THEN; для отрицательного результата — IF result = FALSE
# THEN или IF result = 0 THEN. TRUE/FALSE пишутся без кавычек. Вызовите команду один раз и
# сохраните результат: повторный вызов может повторить действие или прочитать уже изменившееся
# состояние.

SUB Main()
    # started — граница до ожидания. 3000 — максимум ожидания в миллисекундах. Шаблон содержит два
    # исхода.
    # FALSE — текст не найден за этот срок; сервер мог использовать другую формулировку.

    VAR started = Now()
    VAR found = UO.WaitJournalLineSystem(started, 'success|failed', 3000)
    IF found THEN
        UO.Print(UO.GetFoundedText())
    ELSE
        UO.Print('Timeout')
    END IF
END SUB

Разбор параметров и выполнения:

  • started — граница до ожидания. 3000 — максимум ожидания в миллисекундах. Шаблон содержит два исхода.
  • FALSE — текст не найден за этот срок; сервер мог использовать другую формулировку.

Пример 2. Короткая проверка с начала выполнения

# Короткая проверка с начала выполнения
#
# Ожидает подходящее сообщение с именем автора System.
#
# Boolean — TRUE при найденном тексте, FALSE при положительном тайм-ауте без совпадения. Это не
# индекс и не количество. В скрипте логические значения также могут отображаться как 1/0.
#
# Это логический результат: 1 = TRUE, 0 = FALSE. После VAR result = команда(...) можно писать IF
# result = TRUE THEN или IF result = 1 THEN; для отрицательного результата — IF result = FALSE
# THEN или IF result = 0 THEN. TRUE/FALSE пишутся без кавычек. Вызовите команду один раз и
# сохраните результат: повторный вызов может повторить действие или прочитать уже изменившееся
# состояние.

SUB Main()
    # 0 — начало runtime, а не отключение тайм-аута. 100 — тайм-аут.
    # Найденная строка может уже находиться в журнале до вызова.

    IF UO.WaitJournalLineSystem(0, 'notice', 100) THEN
        VAR author = UO.LineName()
        UO.Print(author)
    END IF
END SUB

Разбор параметров и выполнения:

  • 0 — начало runtime, а не отключение тайм-аута. 100 — тайм-аут.
  • Найденная строка может уже находиться в журнале до вызова.

Пример 3. Календарная граница выбранной строки

# Календарная граница выбранной строки
#
# Ожидает подходящее сообщение с именем автора System.
#
# Boolean — TRUE при найденном тексте, FALSE при положительном тайм-ауте без совпадения. Это не
# индекс и не количество. В скрипте логические значения также могут отображаться как 1/0.
#
# Это логический результат: 1 = TRUE, 0 = FALSE. После VAR result = команда(...) можно писать IF
# result = TRUE THEN или IF result = 1 THEN; для отрицательного результата — IF result = FALSE
# THEN или IF result = 0 THEN. TRUE/FALSE пишутся без кавычек. Вызовите команду один раз и
# сохраните результат: повторный вызов может повторить действие или прочитать уже изменившееся
# состояние.

SUB Main()
    # stamp сохраняет Decimal LineTime без CInt/STR: это календарная дата, не Now(). 1500 —
    # миллисекунды ожидания.
    # Граница включается. Выбранная строка сама может подойти, если содержит response.

    VAR text = UO.Journal(0)
    IF UO.LineIndex() >= 0 THEN
        VAR stamp = UO.LineTime()
        VAR found = UO.WaitJournalLineSystem(stamp, 'response', 1500)
        UO.Print(STR(found))
    END IF
END SUB

Разбор параметров и выполнения:

  • stamp сохраняет Decimal LineTime без CInt/STR: это календарная дата, не Now(). 1500 — миллисекунды ожидания.
  • Граница включается. Выбранная строка сама может подойти, если содержит response.