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

UO.Exists

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

ClassicUO • Runtime API

Проверяет наличие не удалённого объекта в локальном мире клиента.

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

UO.Exists(id:Integer) -> Integer
UO.Exists(id:String) -> Integer

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

Параметры

  • id / ObjID — Обязательный serial/ID конкретного объекта: Integer, hex-строка либо алиас self, backpack, lasttarget, lastobject, lastcontainer, laststatus, finditem, lastcorpse или имя AddObject. Это не graphic/type. Неустановленное имя разрешается в 0; никакой новый target команда не открывает.

Возвращает

Integer 1 — serial сейчас разрешается в загруженный предмет или mobile. Integer 0 — объект неизвестен клиенту, удалён либо алиас не установлен. Это не ответ сервера о существовании объекта: предмет вне видимой области может существовать на сервере и давать 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 пишутся без кавычек. Вызовите команду один раз и сохраните результат: повторный вызов может повторить действие или прочитать уже изменившееся состояние.

Поведение

  • Читается локальная модель клиента; запросов серверу, ожидания и перемещения нет.
  • Результат относится к моменту чтения. После WAIT или другого действия объект и его флаги могут измениться.

Примеры

Пример 1. Проверить, доступен ли рюкзак

# Проверить, доступен ли рюкзак
#
# Проверяет наличие не удалённого объекта в локальном мире клиента.
#
# Integer 1 — serial сейчас разрешается в загруженный предмет или mobile. Integer 0 — объект
# неизвестен клиенту, удалён либо алиас не установлен. Это не ответ сервера о существовании
# объекта: предмет вне видимой области может существовать на сервере и давать 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()
    # Аргумент backpack — алиас serial рюкзака собственного персонажа.
    # 1 не означает, что содержимое рюкзака уже полностью получено или что он открыт.

    VAR present = UO.Exists('backpack')
    IF present THEN
        UO.Print('Backpack is loaded')
    ELSE
        UO.Print('Backpack is unavailable')
    END IF
END SUB

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

  • Аргумент backpack — алиас serial рюкзака собственного персонажа.
  • 1 не означает, что содержимое рюкзака уже полностью получено или что он открыт.

Пример 2. Повторно проверить сохранённый serial

# Повторно проверить сохранённый serial
#
# Проверяет наличие не удалённого объекта в локальном мире клиента.
#
# Integer 1 — serial сейчас разрешается в загруженный предмет или mobile. Integer 0 — объект
# неизвестен клиенту, удалён либо алиас не установлен. Это не ответ сервера о существовании
# объекта: предмет вне видимой области может существовать на сервере и давать 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()
    # target сохраняет конкретный serial. Новое значение lasttarget не подменит его.
    # После паузы 500 мс объект мог уйти из видимости, поэтому проверка выполняется заново.

    VAR target = UO.GetSerial('lasttarget')
    WAIT(500)
    IF UO.Exists(target) THEN
        UO.Print(UO.GetName(target))
    ELSE
        UO.Print('Saved target is no longer loaded')
    END IF
END SUB

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

  • target сохраняет конкретный serial. Новое значение lasttarget не подменит его.
  • После паузы 500 мс объект мог уйти из видимости, поэтому проверка выполняется заново.

Пример 3. Отличить форматирование ID от наличия объекта

# Отличить форматирование ID от наличия объекта
#
# Проверяет наличие не удалённого объекта в локальном мире клиента.
#
# Integer 1 — serial сейчас разрешается в загруженный предмет или mobile. Integer 0 — объект
# неизвестен клиенту, удалён либо алиас не установлен. Это не ответ сервера о существовании
# объекта: предмет вне видимой области может существовать на сервере и давать 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()
    # GetSerial форматирует число 1073746484 как 0x40001234, даже если объекта нет.
    # Только следующая проверка сообщает о наличии этого serial в текущем локальном мире.

    VAR serial = UO.GetSerial('1073746484')
    UO.Print('Serial: ' + serial)
    VAR present = UO.Exists(serial)
    UO.Print('Present 1/0: ' + STR(present))
END SUB

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

  • GetSerial форматирует число 1073746484 как 0x40001234, даже если объекта нет.
  • Только следующая проверка сообщает о наличии этого serial в текущем локальном мире.