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 может означать тайм-аут уже отправленного запроса. Не повторяйте перенос вслепую; сначала проверьте текущее состояние предмета.