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

UO.MoveItem

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

ClassicUO • Runtime API

Переносит один конкретный предмет/стек по serial: захват и сброс в контейнер либо на землю.

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

UO.MoveItem(id:Any) -> Integer
UO.MoveItem(id:Any, amount:Any) -> Integer
UO.MoveItem(id:Any, amount:Any, targetContainer:Any) -> Integer
UO.MoveItem(item:Any, amount:Any, container:Any, x:Any) -> Integer
UO.MoveItem(item:Any, amount:Any, container:Any, x:Any, y:Any) -> Integer
UO.MoveItem(id:Any, amount:Any, targetContainer:Any, x:Any, y:Any, z:Any) -> Integer
UO.MoveItem(item:Any, amount:Any, container:Any, x:Any, y:Any, z:Any, timeout:Any) -> Integer
UO.MoveItem(item:Any, amount:Any, container:Any, x:Any, y:Any, z:Any, timeout:Any, waitConfirmation:Any) -> Integer

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

Параметры

  • id / item — Serial конкретного предмета/персонажа: число, hex/десятичная строка, self/backpack/lasttarget/lastobject/lastcontainer/lastcorpse/finditem/laststatus либо сохранённое имя AddObject. Это не type. Объект должен быть загружен; перед действием проверяйте Exists.
  • amount — Количество единиц внутри одного стека. 0 или отрицательное значение означает весь стек; положительное ограничивается доступным количеством. Это НЕ число стопок, которое ограничивает MassMove. По умолчанию 0.
  • targetContainer / container — Serial контейнера или установленное имя AddObject; backpack/self/my выбирают рюкзак, receiving/catchbag — SetCatchBag, а без него рюкзак. lastcontainer/lastobject/lasttarget/lastcorpse/finditem/laststatus допустимы, когда разрешаются в нужный контейнер. ground или 0 явно выбирает землю; -1 — прежний селектор рюкзака. Неизвестное или неустановленное имя вызывает ошибку до захвата предмета. Без аргумента назначения используется рюкзак.
  • x — При контейнере — X в гампе, по умолчанию 65535 (автоматически). При земле — мировая X, по умолчанию X персонажа.
  • y — Y в гампе либо мировая Y; по умолчанию 65535 для контейнера или Y персонажа для земли.
  • z — Высота, по умолчанию 0 в контейнере либо Z персонажа на земле.
  • timeout — Седьмой аргумент: максимум ожидания в мс, по умолчанию 1000; отрицательное значение приравнивается к 0. Используется только с восьмым waitConfirmation=true.
  • waitConfirmation — Восьмой аргумент: true/1 включает ожидание наблюдаемого изменения мира; false/0 (по умолчанию) возвращает результат отправки запроса.

Возвращает

Integer 1 — клиент принял запрос захвата и сброса; 0 — запрос выполнить не удалось. При waitConfirmation=true единица дополнительно требует наблюдаемого изменения контейнера/координат или уменьшения исходного стека. Это не serial нового стека и не число перенесённых items. Сервер может отказать в действии.

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

Поведение

  • Поддерживаются все длины от 1 до 8 аргументов. При заданном x можно опустить y/z: для них применяются описанные значения по умолчанию.
  • Известное имя назначения разрешается до захвата. Для земли используйте явно ground/0; опечатка в имени не должна сбрасывать предмет на пол.
  • Предмет может находиться в сундуке, сумке или рюкзаке: ground задаёт назначение на земле независимо от исходного контейнера. В первом аргументе указывается serial самого предмета, а не сундука и не type. Команда сама выполняет захват; предварительно брать предмет мышью не нужно.
  • При включённом DropCheckCoord сброс на землю дальше двух клеток отклоняется. Сервер дополнительно проверяет доступность места. X/Y — клетки карты, а не пиксели гампа; Z — высота выбранной поверхности, в том числе отрицательная. Для контейнера X/Y по-прежнему означают место внутри его гампа.
  • Ожидание подтверждения использует состояние мира клиента: для частичного стека — уменьшение количества, для целого — контейнер, для земли ещё X/Y/Z. Внутри контейнера точное место гампа этим ожиданием не подтверждается; исчезновение/слияние стека может осложнить проверку.
  • Это не подтверждение отдельным transaction ID. Если предмет уже находился в том же контейнере, совпадение контейнера не доказывает новое перемещение внутри гампа.

Примеры

Пример 1. Весь предмет в рюкзак

# Весь предмет в рюкзак
#
# Переносит один конкретный предмет/стек по serial: захват и сброс в контейнер либо на землю.
#
# Integer 1 — клиент принял запрос захвата и сброса; 0 — запрос выполнить не удалось. При
# waitConfirmation=true единица дополнительно требует наблюдаемого изменения
# контейнера/координат или уменьшения исходного стека. Это не serial нового стека и не число
# перенесённых items. Сервер может отказать в действии.
#
# Это логический результат: 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()
    # loot — имя AddObject; amount отсутствует и равен 0, назначение — рюкзак.
    # Переносится один предмет/стек, а не все предметы данного типа.

    VAR ok = UO.MoveItem('loot')
    UO.Print('Move request: ' + STR(ok))
END SUB

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

  • loot — имя AddObject; amount отсутствует и равен 0, назначение — рюкзак.
  • Переносится один предмет/стек, а не все предметы данного типа.

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

# Часть стека в конкретное место сундука
#
# Переносит один конкретный предмет/стек по serial: захват и сброс в контейнер либо на землю.
#
# Integer 1 — клиент принял запрос захвата и сброса; 0 — запрос выполнить не удалось. При
# waitConfirmation=true единица дополнительно требует наблюдаемого изменения
# контейнера/координат или уменьшения исходного стека. Это не serial нового стека и не число
# перенесённых items. Сервер может отказать в действии.
#
# Это логический результат: 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()
    # amount=10 единиц одной стопки, chest — имя контейнера, x/y=60/70 внутри гампа, z=0.
    # Количество не имеет значения «десять стопок», принятого у MassMove.

    VAR ok = UO.MoveItem('loot', 10, 'chest', 60, 70, 0)
END SUB

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

  • amount=10 единиц одной стопки, chest — имя контейнера, x/y=60/70 внутри гампа, z=0.
  • Количество не имеет значения «десять стопок», принятого у MassMove.

Пример 3. Земля под персонажем

# Земля под персонажем
#
# Переносит один конкретный предмет/стек по serial: захват и сброс в контейнер либо на землю.
#
# Integer 1 — клиент принял запрос захвата и сброса; 0 — запрос выполнить не удалось. При
# waitConfirmation=true единица дополнительно требует наблюдаемого изменения
# контейнера/координат или уменьшения исходного стека. Это не serial нового стека и не число
# перенесённых items. Сервер может отказать в действии.
#
# Это логический результат: 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()
    # ground явно выбирает землю; отсутствующие X/Y/Z берутся у персонажа.
    # Для другой точки передайте её мировые координаты, учитывая дальность и DropCheckCoord.

    VAR ok = UO.MoveItem('loot', 0, 'ground')
END SUB

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

  • ground явно выбирает землю; отсутствующие X/Y/Z берутся у персонажа.
  • Для другой точки передайте её мировые координаты, учитывая дальность и DropCheckCoord.

Пример 4. Из сундука на землю рядом с персонажем

# Из сундука на землю рядом с персонажем
#
# Переносит один конкретный предмет/стек по serial: захват и сброс в контейнер либо на землю.
#
# Integer 1 — клиент принял запрос захвата и сброса; 0 — запрос выполнить не удалось. При
# waitConfirmation=true единица дополнительно требует наблюдаемого изменения
# контейнера/координат или уменьшения исходного стека. Это не serial нового стека и не число
# перенесённых items. Сервер может отказать в действии.
#
# Это логический результат: 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()
    # ground_item — сохранённый serial выбранного предмета в открытом сундуке. Исходный сундук
    # отдельным параметром не передаётся. amount=0 берёт весь стек; например, 10 возьмёт до десяти
    # единиц этого стека.
    # ground явно выбирает землю. x/y — абсолютные координаты клетки на одну клетку по X от
    # персонажа; z берётся у персонажа и подходит, если соседняя поверхность на той же высоте. На
    # лестнице, столе или другом этаже задайте фактическую Z нужной поверхности.
    # sent=1 означает отправку запроса клиентом; без восьмого параметра подтверждение сервера не
    # ожидается. Значение 0 означает, что запрос выполнить не удалось. Это проверка 1/0, поэтому
    # допустимы sent = TRUE и sent = FALSE.
    # Для сброса непосредственно под ноги достаточно UO.MoveItem('ground_item', 0, 'ground'): все
    # три координаты будут взяты у персонажа. Для помещения внутрь сундука вместо ground укажите
    # serial/имя сундука и координаты его гампа.

    ' Select the item inside the open chest, not the chest itself.
    UO.AddObject('ground_item')
    ' World tile coordinates; use the actual height of the destination surface.
    VAR x = UO.GetX() + 1
    VAR y = UO.GetY()
    VAR z = UO.GetZ()
    ' amount=0 moves the complete stack. No preceding Drag is needed.
    VAR sent = UO.MoveItem('ground_item', 0, 'ground', x, y, z)
    IF sent = 1 THEN
        UO.Print('Ground move request sent')
    ELSE
        UO.Print('Ground move request was not sent')
    END IF
END SUB

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

  • ground_item — сохранённый serial выбранного предмета в открытом сундуке. Исходный сундук отдельным параметром не передаётся. amount=0 берёт весь стек; например, 10 возьмёт до десяти единиц этого стека.
  • ground явно выбирает землю. x/y — абсолютные координаты клетки на одну клетку по X от персонажа; z берётся у персонажа и подходит, если соседняя поверхность на той же высоте. На лестнице, столе или другом этаже задайте фактическую Z нужной поверхности.
  • sent=1 означает отправку запроса клиентом; без восьмого параметра подтверждение сервера не ожидается. Значение 0 означает, что запрос выполнить не удалось. Это проверка 1/0, поэтому допустимы sent = TRUE и sent = FALSE.
  • Для сброса непосредственно под ноги достаточно UO.MoveItem('ground_item', 0, 'ground'): все три координаты будут взяты у персонажа. Для помещения внутрь сундука вместо ground укажите serial/имя сундука и координаты его гампа.

Пример 5. Запросить наблюдаемое подтверждение

# Запросить наблюдаемое подтверждение
#
# Переносит один конкретный предмет/стек по serial: захват и сброс в контейнер либо на землю.
#
# Integer 1 — клиент принял запрос захвата и сброса; 0 — запрос выполнить не удалось. При
# waitConfirmation=true единица дополнительно требует наблюдаемого изменения
# контейнера/координат или уменьшения исходного стека. Это не serial нового стека и не число
# перенесённых items. Сервер может отказать в действии.
#
# Это логический результат: 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()
    # timeout=1500 мс используется, потому что waitConfirmation=TRUE. x/y=-1 — автоматическое место.
    # 0 может означать тайм-аут уже отправленного запроса. Не повторяйте перенос вслепую; сначала
    # проверьте текущее состояние предмета.

    VAR ok = UO.MoveItem('loot', 0, 'backpack', -1, -1, 0, 1500, TRUE)
    IF ok = 0 THEN
        UO.Print('Move was rejected or not confirmed')
    END IF
END SUB

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

  • timeout=1500 мс используется, потому что waitConfirmation=TRUE. x/y=-1 — автоматическое место.
  • 0 может означать тайм-аут уже отправленного запроса. Не повторяйте перенос вслепую; сначала проверьте текущее состояние предмета.