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

UO.IsHouse

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

ClassicUO • Runtime API

Проверяет признак multi у загруженного объекта: дома, корабля или другой многотайловой конструкции.

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

UO.IsHouse(ObjID:Any) -> Integer

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

Параметры

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

Возвращает

Integer 1 — предмет с признаком IsMulti. Integer 0 — обычный предмет, mobile, неизвестный или удалённый объект. Название не ограничивает результат домами: корабль также может дать 1. Команда не возвращает владельца дома, регион или площадь.

Это логический результат: 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. Проверить выбранную конструкцию

# Проверить выбранную конструкцию
#
# Проверяет признак multi у загруженного объекта: дома, корабля или другой многотайловой
# конструкции.
#
# Integer 1 — предмет с признаком IsMulti. Integer 0 — обычный предмет, mobile, неизвестный или
# удалённый объект. Название не ограничивает результат домами: корабль также может дать 1.
# Команда не возвращает владельца дома, регион или площадь.
#
# Это логический результат: 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 объекта multi, а не graphic отдельной стены.
    # 1 означает класс multi; это не доказательство, что конструкция является именно жилым домом.

    VAR target = UO.GetSerial('lasttarget')
    IF UO.IsHouse(target) THEN
        UO.Print('Loaded multi structure')
    END IF
END SUB

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

  • target должен содержать serial объекта multi, а не graphic отдельной стены.
  • 1 означает класс multi; это не доказательство, что конструкция является именно жилым домом.

Пример 2. Отделить multi от обычного предмета

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

    VAR target = UO.GetSerial('lasttarget')
    IF UO.Exists(target) THEN
        IF UO.IsNpc(target) = 0 THEN
            IF UO.IsHouse(target) THEN
                UO.Print('Multi')
            ELSE
                UO.Print('Ordinary item')
            END IF
        END IF
    END IF
END SUB

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

  • Сначала проверяется наличие, затем исключаются mobile.
  • Ноль без Exists мог бы означать отсутствие объекта, а не обычный предмет.

Пример 3. Не путать положение персонажа с объектом дома

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

    VAR selfIsMulti = UO.IsHouse('self')
    VAR selectedIsMulti = UO.IsHouse('lasttarget')
    UO.Print('Self: ' + STR(selfIsMulti))
    UO.Print('Selected object: ' + STR(selectedIsMulti))
END SUB

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

  • self — mobile, поэтому первый результат равен 0 даже внутри дома.
  • Чтобы проверить конструкцию, передайте её собственный serial; команда не ищет дом вокруг персонажа.