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

UO.IsMovable

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

ClassicUO • Runtime API

Проверяет локальные признаки переносимости известного предмета по правилам подбора Classic UO.

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

UO.IsMovable(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 — предмет не удалён, не multi и не заблокирован локальным правилом веса/Movable для предметов на земле. Integer 0 — mobile, multi, неизвестный/удалённый предмет либо заблокированный предмет на земле. 1 не гарантирует успешный Drag/MoveItem: дальность, доступ, состояние курсора и окончательное решение сервера проверяются отдельно.

Это логический результат: 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 или другого действия объект и его флаги могут измениться.
  • На земле предмет считается заблокированным, когда вес его записи tiledata больше 90 и отсутствует серверный флаг Movable. Вес 90 и меньше не требует этого флага.
  • Внутри контейнера правило блокировки предмета на земле не применяется. Вес tiledata здесь служебный признак, а не GetQuantity и не текущий вес персонажа.
  • В документации других клиентов описание веса может отличаться. Здесь описано фактическое правило GameActions.PickUp этого клиента.

Примеры

Пример 1. Проверить последний предмет без перемещения

# Проверить последний предмет без перемещения
#
# Проверяет локальные признаки переносимости известного предмета по правилам подбора Classic UO.
#
# Integer 1 — предмет не удалён, не multi и не заблокирован локальным правилом веса/Movable для
# предметов на земле. Integer 0 — mobile, multi, неизвестный/удалённый предмет либо
# заблокированный предмет на земле. 1 не гарантирует успешный Drag/MoveItem: дальность, доступ,
# состояние курсора и окончательное решение сервера проверяются отдельно.
#
# Это логический результат: 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()
    # item — serial последнего использованного предмета. Число movable не является его количеством.
    # Пример ничего не поднимает и не отправляет серверу.

    VAR item = UO.GetSerial('lastobject')
    VAR movable = UO.IsMovable(item)
    UO.Print('Locally movable 1/0: ' + STR(movable))
END SUB

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

  • item — serial последнего использованного предмета. Число movable не является его количеством.
  • Пример ничего не поднимает и не отправляет серверу.

Пример 2. Отдельно оценить признак и расстояние

# Отдельно оценить признак и расстояние
#
# Проверяет локальные признаки переносимости известного предмета по правилам подбора Classic UO.
#
# Integer 1 — предмет не удалён, не multi и не заблокирован локальным правилом веса/Movable для
# предметов на земле. Integer 0 — mobile, multi, неизвестный/удалённый предмет либо
# заблокированный предмет на земле. 1 не гарантирует успешный Drag/MoveItem: дальность, доступ,
# состояние курсора и окончательное решение сервера проверяются отдельно.
#
# Это логический результат: 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()
    # Для предмета на земле GetDistance показывает известную клиенту дальность.
    # Даже при movable=1 предмет может быть слишком далеко. Положительный результат не является
    # разрешением сервера на перенос.

    VAR item = UO.GetSerial('lasttarget')
    IF UO.Exists(item) THEN
        VAR movable = UO.IsMovable(item)
        VAR distance = UO.GetDistance(item)
        UO.Print('Movable: ' + STR(movable))
        UO.Print('Distance: ' + STR(distance))
    END IF
END SUB

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

  • Для предмета на земле GetDistance показывает известную клиенту дальность.
  • Даже при movable=1 предмет может быть слишком далеко. Положительный результат не является разрешением сервера на перенос.

Пример 3. Проверить целый найденный стек

# Проверить целый найденный стек
#
# Проверяет локальные признаки переносимости известного предмета по правилам подбора Classic UO.
#
# Integer 1 — предмет не удалён, не multi и не заблокирован локальным правилом веса/Movable для
# предметов на земле. Integer 0 — mobile, multi, неизвестный/удалённый предмет либо
# заблокированный предмет на земле. 1 не гарантирует успешный Drag/MoveItem: дальность, доступ,
# состояние курсора и окончательное решение сервера проверяются отдельно.
#
# Это логический результат: 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()
    # FindType выбирает один serial золота любого цвета в рюкзаке.
    # IsMovable проверяет предмет целиком. GetQuantity отдельно читает число единиц; результат
    # IsMovable не заменяет этот счётчик.

    VAR item = UO.FindType(0x0EED, -1, 'backpack')
    IF item <> '' THEN
        IF UO.IsMovable(item) THEN
            VAR units = UO.GetQuantity(item)
            UO.Print('Selected stack units: ' + STR(units))
        END IF
    END IF
END SUB

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

  • FindType выбирает один serial золота любого цвета в рюкзаке.
  • IsMovable проверяет предмет целиком. GetQuantity отдельно читает число единиц; результат IsMovable не заменяет этот счётчик.