API UO LineIndex - LIHACHTETAN/ClassicUO-BadNewbie-BasicIDE GitHub Wiki
UO.LineIndex
Оглавление · Алфавитный указатель · Journal
ClassicUO • Runtime API
Возвращает текущий индекс выбранной записи, если она ещё хранится в журнале.
Точный синтаксис
UO.LineIndex() -> Any
Выберите одну из зарегистрированных форм. Параметры передаются позиционно. Any означает значение BASIC с преобразованием внутри команды; Unit — отсутствие возвращаемого значения.
Параметры
Параметров нет.
Возвращает
Integer — текущий индекс от 0 (самая новая строка). -1 означает, что выбора нет либо выбранная запись уже удалена/вытеснена. Это не результат InJournal: из индекса не нужно вычитать 1.
Поведение
- Поиск и Journal/GetJournal/LastJournalMessage сохраняют текст и поля одной записи в текущем скрипте. Новые сообщения не подменяют эти поля. Если запись вытеснена из ограниченного журнала, сохранённые поля остаются, но LineIndex/GetFoundedTextIndex возвращают -1. Следующий поиск или чтение выбирает другую запись; неудачный поиск, неверный индекс и очистка через этот скрипт сбрасывают выбор.
- Индекс пересчитывается по идентичности записи. Новые сообщения увеличивают его. Старый сохранённый индекс не является постоянным ID; для текста безопаснее GetFoundedText.
- Первичный справочник: https://stealth.od.ua/api/LineIndex/ ; порядок индексов адаптирован к Basic: https://forum.yoko.com.ua/viewtopic.php?p=27633 .
Примеры
Пример 1. Индекс найденной записи
# Индекс найденной записи
#
# Возвращает текущий индекс выбранной записи, если она ещё хранится в журнале.
#
# Integer — текущий индекс от 0 (самая новая строка). -1 означает, что выбора нет либо выбранная
# запись уже удалена/вытеснена. Это не результат InJournal: из индекса не нужно вычитать 1.
SUB Main()
# Getter без аргументов читает выбор текущего скрипта. 0 — новая строка, -1 — нет строки в
# текущем буфере.
# Текст берётся из сохранённой записи, чтобы новые сообщения не подменили его.
IF UO.InJournal('notice') > 0 THEN
VAR index = UO.LineIndex()
VAR text = UO.GetFoundedText()
UO.Print(STR(index) + ': ' + text)
END IF
END SUB
Разбор параметров и выполнения:
- Getter без аргументов читает выбор текущего скрипта. 0 — новая строка, -1 — нет строки в текущем буфере.
- Текст берётся из сохранённой записи, чтобы новые сообщения не подменили его.
Пример 2. Проверить прямое чтение
# Проверить прямое чтение
#
# Возвращает текущий индекс выбранной записи, если она ещё хранится в журнале.
#
# Integer — текущий индекс от 0 (самая новая строка). -1 означает, что выбора нет либо выбранная
# запись уже удалена/вытеснена. Это не результат InJournal: из индекса не нужно вычитать 1.
SUB Main()
# Journal(0) выбирает последнюю запись; проверка исключает пустой журнал.
# Пустой text допускается у действующей записи.
VAR text = UO.Journal(0)
IF UO.LineIndex() >= 0 THEN
UO.Print(text)
END IF
END SUB
Разбор параметров и выполнения:
- Journal(0) выбирает последнюю запись; проверка исключает пустой журнал.
- Пустой text допускается у действующей записи.
Пример 3. Обновить индекс после ожидания
# Обновить индекс после ожидания
#
# Возвращает текущий индекс выбранной записи, если она ещё хранится в журнале.
#
# Integer — текущий индекс от 0 (самая новая строка). -1 означает, что выбора нет либо выбранная
# запись уже удалена/вытеснена. Это не результат InJournal: из индекса не нужно вычитать 1.
SUB Main()
# Ожидание 100 мс позволяет прийти новым сообщениям. after заново находит ту же запись.
# after может увеличиться или стать -1 при удалении; GetFoundedText всё ещё содержит сохранённый
# текст.
IF UO.InJournal('needle') > 0 THEN
VAR before = UO.LineIndex()
UO.Wait(100)
VAR after = UO.LineIndex()
UO.Print(STR(before) + ' -> ' + STR(after))
END IF
END SUB
Разбор параметров и выполнения:
- Ожидание 100 мс позволяет прийти новым сообщениям. after заново находит ту же запись.
- after может увеличиться или стать -1 при удалении; GetFoundedText всё ещё содержит сохранённый текст.