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

UO.DropItem

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

ClassicUO • Runtime API

Сбрасывает предмет, ранее успешно взятый Drag/DragItem в том же runtime.

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

UO.DropItem(MoveIntoID:Any, X:Any, Y:Any, Z:Any) -> Any

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

Параметры

  • MoveIntoID — Serial назначения, backpack либо установленное имя AddObject. Число 0 означает землю. Используйте backpack, а не self: этот низкоуровневый аргумент разрешает self в serial персонажа.
  • X — Для контейнера — место внутри гампа (-1/65535 автоматически); для земли — мировая X.
  • Y — Для контейнера — место внутри гампа (-1/65535 автоматически); для земли — мировая Y.
  • Z — Высота сброса; в контейнере обычно 0, на земле фактическая Z точки.

Возвращает

Integer 1 — сброс отправлен и курсор отмечен Dropped; 0 — не было успешного DragItem, курсор изменился/недоступен или назначение недопустимо. Метадата Any совместимости не меняет этот результат. Это не количество и не serial.

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

Поведение

  • Требуются все четыре аргумента. Этот вариант не берёт предмет заново; Drop и MoveItem выполняют полный перенос по serial.
  • Проверяется, что удерживается именно предмет, запомненный этим runtime. Чужой либо вручную взятый предмет не должен сбрасываться случайно.
  • После отправки память захвата очищается. Установленный GrabDelay добавляет паузу в потоке скрипта. Серверный отказ возможен после возврата.

Примеры

Пример 1. Автоматическое место в рюкзаке

# Автоматическое место в рюкзаке
#
# Сбрасывает предмет, ранее успешно взятый Drag/DragItem в том же runtime.
#
# Integer 1 — сброс отправлен и курсор отмечен Dropped; 0 — не было успешного DragItem, курсор
# изменился/недоступен или назначение недопустимо. Метадата Any совместимости не меняет этот
# результат. Это не количество и не serial.
#
# Это логический результат: 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()
    # MoveIntoID=backpack, X/Y=-1, Z=0.
    # Проверяется успешный захват до сброса.

    IF UO.DragItem('loot', 0) THEN
        VAR ok = UO.DropItem('backpack', -1, -1, 0)
    END IF
END SUB

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

  • MoveIntoID=backpack, X/Y=-1, Z=0.
  • Проверяется успешный захват до сброса.

Пример 2. Место внутри сундука

# Место внутри сундука
#
# Сбрасывает предмет, ранее успешно взятый Drag/DragItem в том же runtime.
#
# Integer 1 — сброс отправлен и курсор отмечен Dropped; 0 — не было успешного DragItem, курсор
# изменился/недоступен или назначение недопустимо. Метадата Any совместимости не меняет этот
# результат. Это не количество и не serial.
#
# Это логический результат: 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()
    # chest задан через AddObject. X=60/Y=70 — координаты в его гампе.
    # amount=10 относится к Drag, у DropItem собственного количества нет.

    IF UO.Drag('loot', 10) THEN
        VAR ok = UO.DropItem('chest', 60, 70, 0)
    END IF
END SUB

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

  • chest задан через AddObject. X=60/Y=70 — координаты в его гампе.
  • amount=10 относится к Drag, у DropItem собственного количества нет.

Пример 3. Положить на землю под персонажем

# Положить на землю под персонажем
#
# Сбрасывает предмет, ранее успешно взятый Drag/DragItem в том же runtime.
#
# Integer 1 — сброс отправлен и курсор отмечен Dropped; 0 — не было успешного DragItem, курсор
# изменился/недоступен или назначение недопустимо. Метадата Any совместимости не меняет этот
# результат. Это не количество и не serial.
#
# Это логический результат: 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()
    # MoveIntoID=0 явно выбирает землю.
    # X/Y/Z — точка мира, а не координаты контейнера.

    VAR x = UO.GetX()
    VAR y = UO.GetY()
    VAR z = UO.GetZ()
    IF UO.DragItem('loot', 0) THEN
        VAR ok = UO.DropItem(0, x, y, z)
    END IF
END SUB

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

  • MoveIntoID=0 явно выбирает землю.
  • X/Y/Z — точка мира, а не координаты контейнера.