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 неизвестен или не существует, другой контейнер автоматически не выбирается.