API UO EmptyContainer - LIHACHTETAN/ClassicUO-BadNewbie-BasicIDE GitHub Wiki
UO.EmptyContainer
Оглавление · Алфавитный указатель · Items
ClassicUO • Runtime API
Переносит всё прямое содержимое сундука, сумки или трупа в заданный контейнер. Первый параметр всегда задержка в миллисекундах. Если источник не указан, появляется локальный прицел: выберите исходный контейнер. Назначение по умолчанию — рюкзак текущего персонажа.
Точный синтаксис
UO.EmptyContainer(delay:Any) -> Integer
UO.EmptyContainer(delay:Any, source:Any) -> Integer
UO.EmptyContainer(delay:Any, source:Any, destination:Any) -> Integer
Выберите одну из зарегистрированных форм. Параметры передаются позиционно. Any означает значение BASIC с преобразованием внутри команды; Unit — отсутствие возвращаемого значения.
Параметры
delay— Первый обязательный параметр: задержка между переносами, в миллисекундах. Например 350 — 0,35 секунды. Используются целые значения; отрицательные приводятся к 0. GrabDelay отдельно к этой задержке не добавляется. Последняя пауза сохраняется, чтобы следующая строка не обгоняла последний запрос.source— Второй необязательный параметр: serial исходного контейнера, числовая/hex-строка либо сохранённое имя объекта. Поддерживаются lastobject, lastcontainer, lasttarget, lastcorpse, backpack/my. Если параметр отсутствует или равен 0, появляется прицел. Выберите предмет-контейнер или труп; Esc отменяет действие.destination— Третий необязательный параметр — serial или сохранённое имя контейнера назначения. backpack/self/my выбирают рюкзак персонажа. receiving/catchbag выбирают установленный SetCatchBag контейнер (или рюкзак, если не установлен). lastcontainer/lastobject/lasttarget/lastcorpse/finditem/laststatus допустимы, если разрешаются в доступный контейнер. Неизвестный или не установленный псевдоним даёт ошибку. Если параметр не указан, используется рюкзак; настройка receiving container этот выбор не подменяет. Назначение должно существовать и отличаться от source. Земля/0 здесь не являются допустимым контейнером назначения.
Возвращает
Integer: 1, если источник был непустым и для каждого выбранного прямого предмета удалось отправить запрос переноса; 0 при пустом источнике, отмене прицела, неверном назначении, тайм-ауте загрузки или частичной/полной неудаче отправки. Это результат запросов клиента, не гарантия подтверждённого сервером опустошения.
Поведение
- Точные формы: EmptyContainer(delay), EmptyContainer(delay, source), EmptyContainer(delay, source, destination). В игровом чате со стандартным префиксом: ,emptycontainer 350; из скрипта: UO.EmptyContainer(350).
- При выборе прицелом команда ждёт выбора, отмены или аварийной остановки. Клиент продолжает обновлять изображение и сеть. Esc не отправляет переносов, не использует старый объект и возвращает 0. Если другой прицел заменил этот выбор, действие также отменяется.
- Если содержимое ещё не загружено, клиент открывает источник и ждёт ответ сервера до 3000 мс. Скрытое от клиента содержимое невозможно перенести без получения данных сервера. Недоступный/слишком далёкий сундук или запрет сервера приводят к неудаче, а не к выбору другого контейнера.
- После получения данных создаётся список прямых предметов. Каждый стек переносится полностью, по одному запросу захвата и сброса. Вложенная сумка переносится целиком; её содержимое отдельно не перебирается. Новые предметы, добавленные позже, не входят в текущий список.
- Перед каждым запросом повторно проверяется, что предмет ещё в исходном контейнере. Нельзя вложить контейнер в самого себя или собственного потомка. Если курсор занят другим предметом, команда не сбрасывает его от вашего имени.
- Отсутствующий контейнер назначения не подменяется рюкзаком. Результат 1 не означает, что сервер принял все действия: при необходимости проверьте содержимое после обновления сервера. Аварийная остановка прерывает ожидание; уже отправленные действия не откатываются.
- Неизвестное сохранённое имя или недопустимый формат аргумента вызывает ошибку API, а не возврат 0. Отличайте это от корректного serial отсутствующего объекта: для него операция возвращает 0.
Примеры
Пример 1. Выбрать сундук или труп прицелом и перенести в рюкзак
# Выбрать сундук или труп прицелом и перенести в рюкзак
#
# Переносит всё прямое содержимое сундука, сумки или трупа в заданный контейнер. Первый параметр
# всегда задержка в миллисекундах. Если источник не указан, появляется локальный прицел:
# выберите исходный контейнер. Назначение по умолчанию — рюкзак текущего персонажа.
#
# Integer: 1, если источник был непустым и для каждого выбранного прямого предмета удалось
# отправить запрос переноса; 0 при пустом источнике, отмене прицела, неверном назначении,
# тайм-ауте загрузки или частичной/полной неудаче отправки. Это результат запросов клиента, не
# гарантия подтверждённого сервером опустошения.
# Единственный параметр delay=350 задаёт интервал 350 мс. source отсутствует, поэтому появляется
# прицел.
# destination также отсутствует: содержимое идёт в рюкзак персонажа. Выбирайте сам
# контейнер/труп, а не один предмет внутри него.
# sent получает 1 или 0. Значение 0 объединяет отмену, пустоту и неудачу; подробности также
# смотрите в журнале.
SUB LootSelected()
UO.Print('Select a chest or corpse')
VAR sent = UO.EmptyContainer(350)
IF sent == 0 THEN
UO.Print('Cancelled, empty, unavailable, or a transfer failed')
END IF
END SUB
Разбор параметров и выполнения:
- Единственный параметр delay=350 задаёт интервал 350 мс. source отсутствует, поэтому появляется прицел.
- destination также отсутствует: содержимое идёт в рюкзак персонажа. Выбирайте сам контейнер/труп, а не один предмет внутри него.
- sent получает 1 или 0. Значение 0 объединяет отмену, пустоту и неудачу; подробности также смотрите в журнале.
Пример 2. Из известного сундука в рюкзак без прицела
# Из известного сундука в рюкзак без прицела
#
# Переносит всё прямое содержимое сундука, сумки или трупа в заданный контейнер. Первый параметр
# всегда задержка в миллисекундах. Если источник не указан, появляется локальный прицел:
# выберите исходный контейнер. Назначение по умолчанию — рюкзак текущего персонажа.
#
# Integer: 1, если источник был непустым и для каждого выбранного прямого предмета удалось
# отправить запрос переноса; 0 при пустом источнике, отмене прицела, неверном назначении,
# тайм-ауте загрузки или частичной/полной неудаче отправки. Это результат запросов клиента, не
# гарантия подтверждённого сервером опустошения.
# delay=350; source — реальный serial сундука, замените примерный ID своим. Прицел не
# появляется.
# Третий параметр не указан, поэтому destination=backpack. Все типы прямых предметов и полные
# стеки включаются в перенос.
# Print выводит клиентский результат отправки, не число предметов и не подтверждение сервера.
SUB EmptyKnownChest()
VAR source = '0x40001234'
VAR sent = UO.EmptyContainer(350, source)
UO.Print('Client request result: ' + STR(sent))
END SUB
Разбор параметров и выполнения:
- delay=350; source — реальный serial сундука, замените примерный ID своим. Прицел не появляется.
- Третий параметр не указан, поэтому destination=backpack. Все типы прямых предметов и полные стеки включаются в перенос.
- Print выводит клиентский результат отправки, не число предметов и не подтверждение сервера.
Пример 3. Между двумя выбранными контейнерами
# Между двумя выбранными контейнерами
#
# Переносит всё прямое содержимое сундука, сумки или трупа в заданный контейнер. Первый параметр
# всегда задержка в миллисекундах. Если источник не указан, появляется локальный прицел:
# выберите исходный контейнер. Назначение по умолчанию — рюкзак текущего персонажа.
#
# Integer: 1, если источник был непустым и для каждого выбранного прямого предмета удалось
# отправить запрос переноса; 0 при пустом источнике, отмене прицела, неверном назначении,
# тайм-ауте загрузки или частичной/полной неудаче отправки. Это результат запросов клиента, не
# гарантия подтверждённого сервером опустошения.
# AddObject с одним параметром предлагает выбрать объект и сохраняет его имя. Два выбора
# выполняются последовательно.
# У EmptyContainer delay=350; source=source_bag; destination=destination_bag. Третий параметр
# задаёт конкретную сумку вместо рюкзака.
# Имена должны указывать на разные контейнеры. Отменённый AddObject удаляет прежнее значение
# своего имени, поэтому старая сумка не используется случайно.
SUB MoveBetweenBags()
UO.Print('Select source')
UO.AddObject('source_bag')
UO.Print('Select destination')
UO.AddObject('destination_bag')
VAR sent = UO.EmptyContainer(350, 'source_bag', 'destination_bag')
UO.Print('Client request result: ' + STR(sent))
END SUB
Разбор параметров и выполнения:
- AddObject с одним параметром предлагает выбрать объект и сохраняет его имя. Два выбора выполняются последовательно.
- У EmptyContainer delay=350; source=source_bag; destination=destination_bag. Третий параметр задаёт конкретную сумку вместо рюкзака.
- Имена должны указывать на разные контейнеры. Отменённый AddObject удаляет прежнее значение своего имени, поэтому старая сумка не используется случайно.
Пример 4. Из последнего открытого контейнера в заданный сундук
# Из последнего открытого контейнера в заданный сундук
#
# Переносит всё прямое содержимое сундука, сумки или трупа в заданный контейнер. Первый параметр
# всегда задержка в миллисекундах. Если источник не указан, появляется локальный прицел:
# выберите исходный контейнер. Назначение по умолчанию — рюкзак текущего персонажа.
#
# Integer: 1, если источник был непустым и для каждого выбранного прямого предмета удалось
# отправить запрос переноса; 0 при пустом источнике, отмене прицела, неверном назначении,
# тайм-ауте загрузки или частичной/полной неудаче отправки. Это результат запросов клиента, не
# гарантия подтверждённого сервером опустошения.
# delay=500 — интервал полсекунды. source=lastcontainer — последний контейнер, открытый сервером
# в этом клиенте.
# destination — явный ID вашего сундука; замените пример. lastcontainer и lastobject имеют
# разный смысл: последний открытый контейнер и последний использованный объект.
# Перед запуском убедитесь, что последним открыли именно нужный источник. Перенос не открывает
# его вложенные сумки рекурсивно.
SUB EmptyLastOpened()
VAR destination = '0x40005678'
UO.EmptyContainer(500, 'lastcontainer', destination)
END SUB
Разбор параметров и выполнения:
- delay=500 — интервал полсекунды. source=lastcontainer — последний контейнер, открытый сервером в этом клиенте.
- destination — явный ID вашего сундука; замените пример. lastcontainer и lastobject имеют разный смысл: последний открытый контейнер и последний использованный объект.
- Перед запуском убедитесь, что последним открыли именно нужный источник. Перенос не открывает его вложенные сумки рекурсивно.
Пример 5. Выбрать источник прицелом, назначение указать заранее
# Выбрать источник прицелом, назначение указать заранее
#
# Переносит всё прямое содержимое сундука, сумки или трупа в заданный контейнер. Первый параметр
# всегда задержка в миллисекундах. Если источник не указан, появляется локальный прицел:
# выберите исходный контейнер. Назначение по умолчанию — рюкзак текущего персонажа.
#
# Integer: 1, если источник был непустым и для каждого выбранного прямого предмета удалось
# отправить запрос переноса; 0 при пустом источнике, отмене прицела, неверном назначении,
# тайм-ауте загрузки или частичной/полной неудаче отправки. Это результат запросов клиента, не
# гарантия подтверждённого сервером опустошения.
# delay=350; source=0 специально вызывает прицел, сохраняя возможность передать третий параметр.
# destination=storage указывает на заранее сохранённый сундук. После выбора источника содержимое
# переносится туда.
# Esc возвращает sent=0 без переноса. Если storage неизвестен или не существует, другой
# контейнер автоматически не выбирается.
SUB SelectSourceOnly()
UO.AddObject('storage', '0x40005678')
VAR sent = UO.EmptyContainer(350, 0, 'storage')
END SUB
Разбор параметров и выполнения:
- delay=350; source=0 специально вызывает прицел, сохраняя возможность передать третий параметр.
- destination=storage указывает на заранее сохранённый сундук. После выбора источника содержимое переносится туда.
- Esc возвращает sent=0 без переноса. Если storage неизвестен или не существует, другой контейнер автоматически не выбирается.