API UO MassPriceMove - LIHACHTETAN/ClassicUO-BadNewbie-BasicIDE GitHub Wiki
UO.MassPriceMove
Оглавление · Алфавитный указатель · Shops & Vendors
ClassicUO • Runtime API
Включает массовый перенос предметов одного TYPE с автоматическим назначением цены в инвентаре своего вендора. Источник определяется первым ручным переносом. Каждый стек переносится целиком и считается одним item; после его запроса цены клиент отвечает и только затем продолжает очередь.
Точный синтаксис
UO.MassPriceMove() -> Unit
UO.MassPriceMove(delay:Any, quantity:Any, type:Any, price:Any) -> Unit
UO.MassPriceMove(delay:Any, quantity:Any, type:Any, price:Any, destination:Any) -> Unit
UO.MassPriceMove(delay:Any, quantity:Any, type:Any, price:Any, destination:Any, x:Any, y:Any, z:Any) -> Unit
Выберите одну из зарегистрированных форм. Параметры передаются позиционно. Any означает значение BASIC с преобразованием внутри команды; Unit — отсутствие возвращаемого значения.
Параметры
delay— Первый параметр — задержка между запросами переноса в миллисекундах, целое число от 0 до 2147483647. 350 означает 0,35 секунды. При 0 отправляется не более одного очередного переноса за игровой кадр. Задержка не добавляется к GrabDelay. Отрицательное значение выключает режим и очищает очередь; для выключения предпочтительна ясная запись UO.MassPriceMove().quantity— Второй параметр — ОБЩИЙ предел отдельных предметов-объектов (items), включая первый ручной перенос. Один стек/стопка считается одним item независимо от количества внутри. 50 означает до 50 целых стопок либо 50 одиночных предметов. Стек по этому лимиту НЕ разделяется. 0 — все подходящие items. Отрицательные значения недопустимы.type— Третий параметр — код типа предмета (Graphic/Type), целое 0..65535, например 0x0EED или строка "0x0EED" для золота. Это НЕ serial/ID и НЕ имя AddObject. 0 определяет тип по первому ручному переносу. При явном типе перетаскивание другого типа не активирует очередь; режим продолжает ждать подходящий предмет.price— Четвёртый обязательный параметр — целая цена 0..2147483647 за каждый полный выставляемый item/стек. 0 означает бесплатно, не выключение. Отрицательная цена отклоняется.destination— Пятый необязательный параметр — serial или сохранённое имя контейнера в инвентаре вашего вендора. При отсутствии берётся из ручного сброса. Обычный рюкзак, сундук на земле и destination=0 здесь отклоняются: на земле цену назначить невозможно.x— Шестой параметр — X внутри контейнера вендора: -1 или 65535 для автоматического размещения, иначе 0..65535. Указывается только вместе с Y и Z.y— Седьмой параметр — Y внутри контейнера вендора: -1/65535 для автоматического размещения, иначе 0..65535. Указывается только вместе с X и Z.z— Восьмой параметр — высота -128..127, внутри контейнера обычно 0. Без явных X/Y/Z при заданном destination используются -1,-1,0; при ручном назначении берётся место сброса.
Возвращает
Unit: значения нет. Activate MassPriceMove включает ожидание ручного образца. Сообщения о переносе и цене означают отправленные запросы, а не гарантию принятия сервером.
Поведение
- Формы с 0, 4, 5 или 8 аргументами. Точный порядок: delay, quantity, type, price, destination, x, y, z. Неполные тройки координат не поддерживаются.
- Сначала вызовите команду, затем возьмите и перетащите подходящий предмет целиком. Тип 0 запоминает его TYPE; явный тип пропускает ручные переносы других типов. Источник всегда берётся из первого подходящего предмета.
- Количество включает первый ручной item. 50 означает 50 полных стопок из 100, а не 50 единиц из стопки. 0 — все подходящие прямые предметы. Цвет не фильтруется, вложенные контейнеры не раскрываются.
- Применяются правила распознавания запроса цены AllPrice, включая ASCII/Unicode и 10-секундное ожидание. Пауза delay — минимальный интервал: медленный сервер увеличивает его, чтобы не перепутать цены.
- Общий режим AllPrice включать не требуется. Цена этой операции имеет приоритет над AllPrice. Изменять цену AllPrice или вручную перекладывать дополнительные товары во время очереди не рекомендуется: неизвестный ответ или отказ сервера прерывает очередь.
- MassPriceMove() выключает текущую очередь переноса и отменяет ожидающий ответ цены; общий AllPrice, если он был включён отдельно, сохраняется. TerminateAll() выключает оба режима. Это одна общая очередь с MassMove: новая активация заменяет старую.
- Если запрос цены не распознан, команда оставляет диалог для ручного ввода и прекращает дальнейшие переносы. Серверный отказ, смерть, смена карты и недоступный предмет/контейнер также прекращают работу.
Примеры
Пример 1. Перенести 50 стопок с ценой, определяя тип мышью
# Перенести 50 стопок с ценой, определяя тип мышью
#
# Включает массовый перенос предметов одного TYPE с автоматическим назначением цены в инвентаре
# своего вендора. Источник определяется первым ручным переносом. Каждый стек переносится целиком
# и считается одним item; после его запроса цены клиент отвечает и только затем продолжает
# очередь.
#
# Unit: значения нет. Activate MassPriceMove включает ожидание ручного образца. Сообщения о
# переносе и цене означают отправленные запросы, а не гарантию принятия сервером.
# delay=350 мс; quantity=50 отдельных items, включая первый ручной; type=0 запоминает TYPE
# образца; price=125 за каждый item целиком.
# destination и координаты отсутствуют: перетащите образец именно в инвентарь своего вендора.
# Если исходных стопок 100, переносятся максимум 50 полных стопок. Каждая получает цену 125
# после запроса сервера.
SUB StockVendor()
UO.MassPriceMove(350, 50, 0, 125)
UO.Print('Drag one complete stack into your vendor bag')
END SUB
Разбор параметров и выполнения:
- delay=350 мс; quantity=50 отдельных items, включая первый ручной; type=0 запоминает TYPE образца; price=125 за каждый item целиком.
- destination и координаты отсутствуют: перетащите образец именно в инвентарь своего вендора.
- Если исходных стопок 100, переносятся максимум 50 полных стопок. Каждая получает цену 125 после запроса сервера.
Пример 2. Все предметы известного типа в выбранную сумку вендора
# Все предметы известного типа в выбранную сумку вендора
#
# Включает массовый перенос предметов одного TYPE с автоматическим назначением цены в инвентаре
# своего вендора. Источник определяется первым ручным переносом. Каждый стек переносится целиком
# и считается одним item; после его запроса цены клиент отвечает и только затем продолжает
# очередь.
#
# Unit: значения нет. Activate MassPriceMove включает ожидание ручного образца. Сообщения о
# переносе и цене означают отправленные запросы, а не гарантию принятия сервером.
# AddObject предлагает выбрать сумку вендора и сохраняет её как vendor_bag. Это ID назначения;
# type остаётся кодом 0x0F7A.
# delay=500, quantity=0 без лимита, type=0x0F7A, price=250, destination=vendor_bag.
# X/Y/Z отсутствуют: -1,-1,0. Для запуска очереди вручную перетащите один предмет
# соответствующего типа; из него определяется исходная сумка.
SUB StockKnownType()
UO.AddObject('vendor_bag')
UO.MassPriceMove(500, 0, '0x0F7A', 250, 'vendor_bag')
UO.Print('Now drag one matching item from the source')
END SUB
Разбор параметров и выполнения:
- AddObject предлагает выбрать сумку вендора и сохраняет её как vendor_bag. Это ID назначения; type остаётся кодом 0x0F7A.
- delay=500, quantity=0 без лимита, type=0x0F7A, price=250, destination=vendor_bag.
- X/Y/Z отсутствуют: -1,-1,0. Для запуска очереди вручную перетащите один предмет соответствующего типа; из него определяется исходная сумка.
Пример 3. Указать все восемь параметров и место внутри сумки
# Указать все восемь параметров и место внутри сумки
#
# Включает массовый перенос предметов одного TYPE с автоматическим назначением цены в инвентаре
# своего вендора. Источник определяется первым ручным переносом. Каждый стек переносится целиком
# и считается одним item; после его запроса цены клиент отвечает и только затем продолжает
# очередь.
#
# Unit: значения нет. Activate MassPriceMove включает ожидание ручного образца. Сообщения о
# переносе и цене означают отправленные запросы, а не гарантию принятия сервером.
# delay=350 мс; quantity=10 полных items; type=itemType=0x0EED; price=1000 за каждый полный
# стек.
# destination=vendorBag — реальный ID сумки вашего вендора, замените пример. Это пятый параметр,
# а не четвёртый.
# x=60, y=70 — место внутри этой сумки, z=0. Это не координаты персонажа на карте.
# После вызова вручную перетащите соответствующий образец из источника. Если сервер отклонит
# размещение, дальнейшие запросы прекращаются.
SUB StockAtPosition()
VAR itemType = '0x0EED'
VAR vendorBag = '0x40005678'
UO.MassPriceMove(350, 10, itemType, 1000, vendorBag, 60, 70, 0)
END SUB
Разбор параметров и выполнения:
- delay=350 мс; quantity=10 полных items; type=itemType=0x0EED; price=1000 за каждый полный стек.
- destination=vendorBag — реальный ID сумки вашего вендора, замените пример. Это пятый параметр, а не четвёртый.
- x=60, y=70 — место внутри этой сумки, z=0. Это не координаты персонажа на карте.
- После вызова вручную перетащите соответствующий образец из источника. Если сервер отклонит размещение, дальнейшие запросы прекращаются.
Пример 4. Отменить очередь и ожидающий ответ цены
# Отменить очередь и ожидающий ответ цены
#
# Включает массовый перенос предметов одного TYPE с автоматическим назначением цены в инвентаре
# своего вендора. Источник определяется первым ручным переносом. Каждый стек переносится целиком
# и считается одним item; после его запроса цены клиент отвечает и только затем продолжает
# очередь.
#
# Unit: значения нет. Activate MassPriceMove включает ожидание ручного образца. Сообщения о
# переносе и цене означают отправленные запросы, а не гарантию принятия сервером.
# Без аргументов команда выключает общую очередь массового переноса и очищает её отложенный
# ответ цены.
# Цены и переносы, уже принятые сервером, не откатываются. Для остановки остальных процедур и
# отдельно включённого AllPrice используйте UO.TerminateAll().
SUB StopVendorTransfer()
UO.MassPriceMove()
END SUB
Разбор параметров и выполнения:
- Без аргументов команда выключает общую очередь массового переноса и очищает её отложенный ответ цены.
- Цены и переносы, уже принятые сервером, не откатываются. Для остановки остальных процедур и отдельно включённого AllPrice используйте UO.TerminateAll().