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

UO.MassMove

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

ClassicUO • Runtime API

Включает одноразовый массовый перенос предметов выбранного типа. После Activate MassMove перетащите один подходящий предмет мышью: из него определяется исходный контейнер. Остальные предметы этого типа из того же источника следуют автоматически. Третий параметр — TYPE/Graphic, не ID предмета. Все формы включают ожидание первого ручного переноса; явное назначение задаёт, куда он пойдёт.

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

UO.MassMove() -> Unit
UO.MassMove(delay:Any) -> Unit
UO.MassMove(delay:Any, quantity:Any) -> Unit
UO.MassMove(delay:Any, quantity:Any, type:Any) -> Unit
UO.MassMove(delay:Any, quantity:Any, type:Any, destination:Any) -> Unit
UO.MassMove(delay:Any, quantity:Any, type:Any, destination:Any, x:Any, y:Any, z:Any) -> Unit

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

Параметры

  • delay — Первый параметр — задержка между запросами переноса в миллисекундах, целое число от 0 до 2147483647. 350 означает 0,35 секунды. При 0 отправляется не более одного очередного переноса за игровой кадр. Задержка не добавляется к GrabDelay. Отрицательное значение выключает режим и очищает очередь; для выключения предпочтительна ясная запись UO.MassMove().
  • quantity — Второй параметр — ОБЩИЙ предел отдельных предметов-объектов (items), включая первый ручной перенос. Один стек/стопка считается одним item независимо от количества внутри. 50 означает до 50 целых стопок либо 50 одиночных предметов. Стек по этому лимиту НЕ разделяется. 0 или отсутствие параметра — все подходящие items. Отрицательные значения недопустимы.
  • type — Третий параметр — код типа предмета (Graphic/Type), целое 0..65535, например 0x0EED или строка "0x0EED" для золота. Это НЕ serial/ID и НЕ имя AddObject. 0 или отсутствие определяет тип по первому ручному переносу. При явном типе перетаскивание другого типа не активирует очередь; режим продолжает ждать подходящий предмет.
  • destination — Четвёртый параметр — назначение. Serial сундука (число/hex-строка) или сохранённое имя AddObject выбирает контейнер; X/Y — место внутри его окна. backpack, self и my выбирают рюкзак текущего персонажа, также с координатами внутри рюкзака. ground или 0 выбирает землю: X/Y/Z — абсолютная позиция на карте, все три параметра обязательны. lastcontainer — последний открытый контейнер; lastobject, lasttarget, lastcorpse, finditem, laststatus допустимы, если указывают на доступный контейнер. receiving и catchbag выбирают установленный SetCatchBag контейнер, а если он не установлен — рюкзак. self/my здесь означают именно рюкзак, хотя GetX(self) читает позицию персонажа. Имена сравниваются без учёта регистра; неизвестное или ещё не установленное имя даёт ошибку, а не сбрасывает предмет на землю. Без destination место запоминается из первого ручного сброса: можно положить образец как внутрь контейнера, так и на землю. Для земли запоминаются мировые X/Y/Z первого сброса.
  • x — Пятый параметр. Для контейнера — координата внутри контейнера; -1 или 65535 означает автоматическое размещение. Для земли — абсолютная координата карты, от 0 до 65535. При форме без X/Y/Z в явном контейнере используется -1.
  • y — Шестой параметр. Для контейнера — координата внутри контейнера, -1/65535 для автоматического размещения; для земли — абсолютная координата карты 0..65535. При форме без координат в явном контейнере используется -1.
  • z — Седьмой параметр — высота назначения, целое -128..127. В контейнере обычно 0; на земле укажите реальную высоту. В короткой форме высота и X/Y берутся из ручного переноса.

Возвращает

Unit: значения нет. Activate MassMove означает включение ожидания ручного переноса. Итоговая строка сообщает число отдельных items, для которых отправлены запросы, включая первый. Стек считается одним item; результат не подтверждает принятие каждого запроса сервером.

Поведение

  • Зарегистрированы формы с 0, 1, 2, 3, 4 и 7 аргументами. X/Y/Z задаются только вместе. Формы с 5, 6 или 8 аргументами не поддерживаются. Порядок: delay, quantity, type, destination, x, y, z.
  • UO.MassMove(350, 0) и консольная команда massmove 350 0 включают режим. При стандартном префиксе клиента в игровом чате вводится ,massmove 350 0. Команду можно назначить на клавишу через действие макроса Basic Command.
  • Активируйте режим ДО захвата мышью. Первый ручной перенос считается одним item: стек из 1000 переносится целиком и расходует только одно место из лимита 50. Включённый режим берёт полные стеки без диалога разделения. Если часть стека была взята до включения, такой перенос отклоняется: положите часть обратно и начните заново.
  • Одна активация относится к одному ручному переносу. После выбора образца режим выбора выключается; оставшаяся очередь обрабатывается автоматически. Обычный вызов MoveItem из другого скрипта не считается ручным выбором образца.
  • Сравнивается тип Graphic. Цвет в этой команде не фильтруется. Обрабатывается только прямое содержимое исходного контейнера; вложенные сумки не раскрываются. Новые предметы, появившиеся после создания очереди, в неё не добавляются. Если образец лежал на земле, учитываются загруженные предметы того же типа в радиусе захвата.
  • Количество — верхний предел запросов. Команда не повторяет отвергнутые сервером переносы автоматически. При отказе сервера, недоступном назначении, смерти персонажа или невозможности взять очередной предмет операция прекращается. При занятом курсоре очередь ждёт освобождения до 5 секунд.
  • UO.MassMove() выключает режим и отменяет оставшуюся очередь. UO.TerminateAll() и выход с персонажа также отменяют её. Уже отправленный запрос отменой не откатывается. Очередь исполняется клиентом после возврата команды; следующая строка скрипта не означает, что сервер уже завершил перенос.
  • Для полного переноса содержимого разных типов используйте EmptyContainer. Для переноса одного конкретного предмета — MoveItem. Восемь аргументов source, type, color, destination, x, y, z, delay относятся к MoveItems, а не к MassMove.

Примеры

Пример 1. Включить перенос мышью без ограничения количества

# Включить перенос мышью без ограничения количества
#
# Включает одноразовый массовый перенос предметов выбранного типа. После Activate MassMove
# перетащите один подходящий предмет мышью: из него определяется исходный контейнер. Остальные
# предметы этого типа из того же источника следуют автоматически. Третий параметр —
# TYPE/Graphic, не ID предмета. Все формы включают ожидание первого ручного переноса; явное
# назначение задаёт, куда он пойдёт.
#
# Unit: значения нет. Activate MassMove означает включение ожидания ручного переноса. Итоговая
# строка сообщает число отдельных items, для которых отправлены запросы, включая первый. Стек
# считается одним item; результат не подтверждает принятие каждого запроса сервером.

# delay=350: следующие запросы разделены минимум 350 мс. quantity=0: верхнего пользовательского
# лимита нет.
# type, destination и X/Y/Z не переданы. После Activate MassMove перетащите образец из сумки в
# сундук: тип и источник берутся из него, назначение — из места сброса.
# Если образец — золото, перемещаются загруженные стеки золота того же исходного контейнера.
# Предметы других типов остаются. Print только поясняет последующее ручное действие.

SUB SortGold()
    UO.MassMove(350, 0)
    UO.Print('Drag one sample item to the destination container')
END SUB

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

  • delay=350: следующие запросы разделены минимум 350 мс. quantity=0: верхнего пользовательского лимита нет.
  • type, destination и X/Y/Z не переданы. После Activate MassMove перетащите образец из сумки в сундук: тип и источник берутся из него, назначение — из места сброса.
  • Если образец — золото, перемещаются загруженные стеки золота того же исходного контейнера. Предметы других типов остаются. Print только поясняет последующее ручное действие.

Пример 2. Перенести 50 целых стопок из 100

# Перенести 50 целых стопок из 100
#
# Включает одноразовый массовый перенос предметов выбранного типа. После Activate MassMove
# перетащите один подходящий предмет мышью: из него определяется исходный контейнер. Остальные
# предметы этого типа из того же источника следуют автоматически. Третий параметр —
# TYPE/Graphic, не ID предмета. Все формы включают ожидание первого ручного переноса; явное
# назначение задаёт, куда он пойдёт.
#
# Unit: значения нет. Activate MassMove означает включение ожидания ручного переноса. Итоговая
# строка сообщает число отдельных items, для которых отправлены запросы, включая первый. Стек
# считается одним item; результат не подтверждает принятие каждого запроса сервером.

# delay задаёт 350 мс. total передаётся во второй параметр quantity и ограничивает ВСЮ операцию
# 50 отдельными items.
# Если в источнике лежат 100 стопок одного типа, будут перенесены 50 стопок целиком: первая
# ручная и ещё 49. В каждой стопке может быть разное количество; оно не влияет на счётчик. Если
# это одиночные предметы, переносятся 50 одиночных предметов.
# Остальные параметры отсутствуют: первый захват и назначение выбираются мышью после вызова.

SUB MoveFifty()
    VAR delay = 350
    VAR total = 50
    UO.MassMove(delay, total)
END SUB

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

  • delay задаёт 350 мс. total передаётся во второй параметр quantity и ограничивает ВСЮ операцию 50 отдельными items.
  • Если в источнике лежат 100 стопок одного типа, будут перенесены 50 стопок целиком: первая ручная и ещё 49. В каждой стопке может быть разное количество; оно не влияет на счётчик. Если это одиночные предметы, переносятся 50 одиночных предметов.
  • Остальные параметры отсутствуют: первый захват и назначение выбираются мышью после вызова.

Пример 3. Выбрать тип золота и задать сундук заранее

# Выбрать тип золота и задать сундук заранее
#
# Включает одноразовый массовый перенос предметов выбранного типа. После Activate MassMove
# перетащите один подходящий предмет мышью: из него определяется исходный контейнер. Остальные
# предметы этого типа из того же источника следуют автоматически. Третий параметр —
# TYPE/Graphic, не ID предмета. Все формы включают ожидание первого ручного переноса; явное
# назначение задаёт, куда он пойдёт.
#
# Unit: значения нет. Activate MassMove означает включение ожидания ручного переноса. Итоговая
# строка сообщает число отдельных items, для которых отправлены запросы, включая первый. Стек
# считается одним item; результат не подтверждает принятие каждого запроса сервером.

# goldType — TYPE золота, не ID отдельной стопки. AddObject сохраняет serial сундука в chest;
# замените 0x40005678 своим ID.
# delay=350 мс, quantity=50 отдельных items, type=0x0EED, destination=chest. В лимит входят
# первая стопка и ещё не более 49; все целиком.
# x=-1 и y=-1 задают автоматическое размещение в сундуке, z=0. Это все семь параметров.
# Очередь начнётся после ручного перетаскивания золота. Его исходная сумка станет источником.
# Явный chest заменяет место сброса мыши; предмет другого типа очередь не запускает.

SUB MoveGoldToChest()
    VAR goldType = '0x0EED'
    UO.AddObject('chest', '0x40005678')
    UO.MassMove(350, 50, goldType, 'chest', -1, -1, 0)
    UO.Print('Now drag one gold stack from the source bag')
END SUB

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

  • goldType — TYPE золота, не ID отдельной стопки. AddObject сохраняет serial сундука в chest; замените 0x40005678 своим ID.
  • delay=350 мс, quantity=50 отдельных items, type=0x0EED, destination=chest. В лимит входят первая стопка и ещё не более 49; все целиком.
  • x=-1 и y=-1 задают автоматическое размещение в сундуке, z=0. Это все семь параметров.
  • Очередь начнётся после ручного перетаскивания золота. Его исходная сумка станет источником. Явный chest заменяет место сброса мыши; предмет другого типа очередь не запускает.

Пример 4. Выбрать образец мышью, но заранее задать землю

# Выбрать образец мышью, но заранее задать землю
#
# Включает одноразовый массовый перенос предметов выбранного типа. После Activate MassMove
# перетащите один подходящий предмет мышью: из него определяется исходный контейнер. Остальные
# предметы этого типа из того же источника следуют автоматически. Третий параметр —
# TYPE/Graphic, не ID предмета. Все формы включают ожидание первого ручного переноса; явное
# назначение задаёт, куда он пойдёт.
#
# Unit: значения нет. Activate MassMove означает включение ожидания ручного переноса. Итоговая
# строка сообщает число отдельных items, для которых отправлены запросы, включая первый. Стек
# считается одним item; результат не подтверждает принятие каждого запроса сервером.

# delay=350 мс, quantity=0 — все подходящие items. type=0 берёт тип из будущего ручного
# переноса.
# destination=0 означает землю, поэтому указана полная тройка x,y,z. GetX/GetY/GetZ здесь
# возвращают текущую позицию персонажа.
# После вызова возьмите и сбросьте мышью образец. Команда отправит его и остальные подходящие
# items на указанные координаты, даже если мышь была над контейнером. Сервер проверяет
# доступность земли.

SUB MoveToGround()
    VAR x = UO.GetX()
    VAR y = UO.GetY()
    VAR z = UO.GetZ()
    UO.MassMove(350, 0, 0, 0, x, y, z)
END SUB

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

  • delay=350 мс, quantity=0 — все подходящие items. type=0 берёт тип из будущего ручного переноса.
  • destination=0 означает землю, поэтому указана полная тройка x,y,z. GetX/GetY/GetZ здесь возвращают текущую позицию персонажа.
  • После вызова возьмите и сбросьте мышью образец. Команда отправит его и остальные подходящие items на указанные координаты, даже если мышь была над контейнером. Сервер проверяет доступность земли.

Пример 5. Перенести до десяти предметов известного типа в рюкзак

# Перенести до десяти предметов известного типа в рюкзак
#
# Включает одноразовый массовый перенос предметов выбранного типа. После Activate MassMove
# перетащите один подходящий предмет мышью: из него определяется исходный контейнер. Остальные
# предметы этого типа из того же источника следуют автоматически. Третий параметр —
# TYPE/Graphic, не ID предмета. Все формы включают ожидание первого ручного переноса; явное
# назначение задаёт, куда он пойдёт.
#
# Unit: значения нет. Activate MassMove означает включение ожидания ручного переноса. Итоговая
# строка сообщает число отдельных items, для которых отправлены запросы, включая первый. Стек
# считается одним item; результат не подтверждает принятие каждого запроса сервером.

# delay=500 — полсекунды; quantity=10 — десять отдельных предметов/стеков за всю операцию.
# type=0x0F7A — графический тип предмета. Укажите свой тип; серийный номер вида 0x40001234 здесь
# недопустим.
# destination=backpack — рюкзак персонажа. Координаты не переданы, поэтому внутри него
# используются x=-1, y=-1, z=0.
# Первым ручным переносом подходящего предмета выбирается источник. Если источник — уже рюкзак,
# выберите другую исходную сумку для полезного переноса.

SUB MoveTenToBackpack()
    UO.MassMove(500, 10, '0x0F7A', 'backpack')
    UO.Print('Drag one matching item from the source chest')
END SUB

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

  • delay=500 — полсекунды; quantity=10 — десять отдельных предметов/стеков за всю операцию.
  • type=0x0F7A — графический тип предмета. Укажите свой тип; серийный номер вида 0x40001234 здесь недопустим.
  • destination=backpack — рюкзак персонажа. Координаты не переданы, поэтому внутри него используются x=-1, y=-1, z=0.
  • Первым ручным переносом подходящего предмета выбирается источник. Если источник — уже рюкзак, выберите другую исходную сумку для полезного переноса.

Пример 6. Остановить оставшийся перенос

UO.MassMove()

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

  • Аргументов нет: эта форма специально предназначена для выключения режима и отмены очереди.
  • Назначьте строку на отдельную клавишу через Basic Command. Для одновременной остановки остальных процедур используйте UO.TerminateAll().
  • Запросы, уже отправленные серверу, не отзываются. Остановленный режим самопроизвольно не включается после следующего ручного перетаскивания.

Пример 7. Выбрать место внутри сундука по уже лежащему предмету

# Выбрать место внутри сундука по уже лежащему предмету
#
# Включает одноразовый массовый перенос предметов выбранного типа. После Activate MassMove
# перетащите один подходящий предмет мышью: из него определяется исходный контейнер. Остальные
# предметы этого типа из того же источника следуют автоматически. Третий параметр —
# TYPE/Graphic, не ID предмета. Все формы включают ожидание первого ручного переноса; явное
# назначение задаёт, куда он пойдёт.
#
# Unit: значения нет. Activate MassMove означает включение ожидания ручного переноса. Итоговая
# строка сообщает число отдельных items, для которых отправлены запросы, включая первый. Стек
# считается одним item; результат не подтверждает принятие каждого запроса сервером.

# Сначала вручную положите предмет в нужное место сундука. Первый AddObject выбирает сам сундук
# и сохраняет его ID в chest. Второй выбирает предмет внутри него и сохраняет ID в
# position_sample.
# GetX/GetY для предмета внутри контейнера возвращают его координаты внутри этого контейнера.
# Они не зависят от того, где на экране расположено окно сундука.
# delay=350 мс, quantity=50 целых items, type=0 определяется будущим ручным переносом из
# источника, destination=chest.
# x и y задают выбранное место внутри сундука, последний z=0. Предмет position_sample служит
# только для чтения координат; источник и переносимый тип определяются последующим ручным
# переносом.
# Для рюкзака замените chest на backpack или self. Для земли используйте ground и координаты
# карты, например UO.GetX(), UO.GetY(), UO.GetZ() без аргументов для текущей позиции персонажа.

SUB CopyContainerPosition()
    UO.Print('Select the destination chest')
    UO.AddObject('chest')
    UO.Print('Select an item already at the desired position inside that chest')
    UO.AddObject('position_sample')
    VAR x = UO.GetX('position_sample')
    VAR y = UO.GetY('position_sample')
    UO.MassMove(350, 50, 0, 'chest', x, y, 0)
    UO.Print('Drag one source item to start the transfer')
END SUB

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

  • Сначала вручную положите предмет в нужное место сундука. Первый AddObject выбирает сам сундук и сохраняет его ID в chest. Второй выбирает предмет внутри него и сохраняет ID в position_sample.
  • GetX/GetY для предмета внутри контейнера возвращают его координаты внутри этого контейнера. Они не зависят от того, где на экране расположено окно сундука.
  • delay=350 мс, quantity=50 целых items, type=0 определяется будущим ручным переносом из источника, destination=chest.
  • x и y задают выбранное место внутри сундука, последний z=0. Предмет position_sample служит только для чтения координат; источник и переносимый тип определяются последующим ручным переносом.
  • Для рюкзака замените chest на backpack или self. Для земли используйте ground и координаты карты, например UO.GetX(), UO.GetY(), UO.GetZ() без аргументов для текущей позиции персонажа.

Пример 8. Из сундука на землю: выбрать место мышью

# Из сундука на землю: выбрать место мышью
#
# Включает одноразовый массовый перенос предметов выбранного типа. После Activate MassMove
# перетащите один подходящий предмет мышью: из него определяется исходный контейнер. Остальные
# предметы этого типа из того же источника следуют автоматически. Третий параметр —
# TYPE/Graphic, не ID предмета. Все формы включают ожидание первого ручного переноса; явное
# назначение задаёт, куда он пойдёт.
#
# Unit: значения нет. Activate MassMove означает включение ожидания ручного переноса. Итоговая
# строка сообщает число отдельных items, для которых отправлены запросы, включая первый. Стек
# считается одним item; результат не подтверждает принятие каждого запроса сервером.

# delay=350 — не менее 350 мс между последующими запросами. quantity=50 — до 50 отдельных
# items/целых стопок, включая образец; это не 50 единиц из одного стека.
# После Activate MassMove возьмите предмет в открытом сундуке и положите мышью на землю. Его тип
# и исходный сундук определяются по образцу; мировые X/Y/Z назначения запоминаются по месту
# этого сброса.
# Остальные загруженные предметы того же типа из этого сундука направляются на ту же точку
# земли. Содержимое вложенных сумок и другие типы не затрагиваются. Для всех подходящих items
# вместо 50 укажите 0.
# У MassMove нет возвращаемого значения. Процедура завершается после включения режима, очередь
# продолжает работать в клиенте. Итоговое сообщение считает отправленные запросы, а не
# подтверждения сервера. Для отмены оставшейся очереди вызовите UO.MassMove().

SUB ChestToGroundByMouse()
    ' Arm the mode before picking up the first item.
    UO.MassMove(350, 50)
    ' Drag one stack from the chest onto a nearby world tile.
    UO.Print('Drag one item from the chest onto the ground')
END SUB

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

  • delay=350 — не менее 350 мс между последующими запросами. quantity=50 — до 50 отдельных items/целых стопок, включая образец; это не 50 единиц из одного стека.
  • После Activate MassMove возьмите предмет в открытом сундуке и положите мышью на землю. Его тип и исходный сундук определяются по образцу; мировые X/Y/Z назначения запоминаются по месту этого сброса.
  • Остальные загруженные предметы того же типа из этого сундука направляются на ту же точку земли. Содержимое вложенных сумок и другие типы не затрагиваются. Для всех подходящих items вместо 50 укажите 0.
  • У MassMove нет возвращаемого значения. Процедура завершается после включения режима, очередь продолжает работать в клиенте. Итоговое сообщение считает отправленные запросы, а не подтверждения сервера. Для отмены оставшейся очереди вызовите UO.MassMove().