Shop Lists - LIHACHTETAN/ClassicUO-BadNewbie-BasicIDE GitHub Wiki

Покупка и продажа: списки правил и окно продавца

Home · Каталоги · API по задачам

UO.Buy · UO.Sell · UO.AutoBuy · UO.AutoBuyEx · UO.AutoSell · UO.ClearShopList · UO.GetShopList · UO.SendShopReply

Что именно называют списком

  • Именованные списки Bad Newbie — ваши наборы правил покупки/продажи в настройках профиля. В разделе покупки либо продажи создайте список, задайте имя, добавьте предметы и включите нужные списки. Название набора выбирает пользователь; общего каталога названий для всех нет.
  • Правила Buy/AutoBuy и Sell/AutoSell — изменения основного списка (Default). Аргумент name у Buy/AutoBuyEx — фильтр имени товара, НЕ имя списка. Через эти аргументы нельзя выбрать произвольный именованный набор. Новые правила включаются и сохраняются в профиле.
  • GetShopList — строки уже открытого окна NPC-продавца, а не список ваших сохранённых правил. Если окна нет, массив пуст. ShopBuyRestock/Rstk — слой 26 продавца, НЕ правило покупки и не функция открытия магазина.
  • AllPrice/MassPriceMove — установка цены товарам личного продавца. Это другой сценарий; см. UO.AllPrice и UO.MassPriceMove.

Порядок действий

  1. Настройте список в Bad Newbie либо добавьте правило скриптом ниже.
  2. Подойдите к NPC-продавцу и откройте его покупку/продажу доступным на сервере способом (контекстное меню или речь).
  3. При получении предложения автоматизация сопоставляет type, hue, количество, цену и имя с включёнными правилами. Команды настройки сами не открывают магазин и не создают товары.
  4. Проверяйте результат по изменению содержимого/золота и сообщениям сервера. Unit у команды настройки не является подтверждением сделки.

Параметры правила

  • type — graphic товара 0..65535, НЕ serial вещи. Отрицательный type отвергается; 65535 здесь конкретная графика, не маска «всё».
  • color — hue; -1 или 65535 означает любой цвет. Для точного цвета используйте 0..65534.
  • quantity — количество единиц товара; положительное ограничивается 65535. 0/отрицательное удаляет совпадающее правило type+color основного списка, а НЕ означает «купить всё». У Buy/Sell без количества значение 1.
  • maxPrice — максимальная цена одной единицы при покупке; 0/отрицательное означает без ограничения цены. Не общая сумма покупки.
  • name — необязательная подстрока имени товара без учёта регистра; пустая строка не фильтрует имя. Это НЕ имя списка и не serial продавца.

Повторное правило с теми же type и цветовой маской обновляет существующее. Количество ограничивает общий подбор по этому правилу в одном ответе магазина; это не команда «довести рюкзак до остатка N». Для каждой позиции выбирается первое подходящее включённое правило. Перекрывающиеся правила не суммируют лимиты для одного товара.

Примеры

Подготовить покупку реагента с потолком цены

SUB Main()
    # Black Pearl graphic; any hue; 20 units; at most 5 gold per unit.
    UO.Buy(0x0F7A, -1, 20, 5)
    # Now open the vendor's Buy window in the game.
END SUB

0x0F7A — пример стандартной графики Black Pearl; проверьте type на своём сервере. 20 — единицы, 5 — цена за единицу. Пустой name не накладывает фильтр по тексту. Скрипт сохраняет правило и завершает работу; автоматизация клиента обрабатывает следующее предложение магазина.

Продать товар и затем удалить именно своё правило

SUB Main()
    # Example graphic: dagger. Change it to the item you intend to sell.
    UO.Sell(0x0F51, -1, 3)
    # Open Sell during this example's 15-second window.
    TRY
        WAIT(15000)
    FINALLY
        # Zero removes this matching rule, it does not sell everything.
        UO.Sell(0x0F51, -1, 0)
    END TRY
END SUB

Правило относится к 0x0F51 любого цвета; продаётся до 3 единиц по доступному предложению. 15000 — время примера, не подтверждение сделки. Удаление правила не отменяет уже отправленную серверу продажу. Пример перезаписывает существующее совпадающее правило; не используйте его поверх нужного сохранённого правила.

Прочитать фактический ассортимент открытого магазина

SUB Main()
    # Open the Buy or Sell window before running this example.
    VAR rows = UO.GetShopList()
    IF GetArrayLength(rows) = 0 THEN
        UO.Print("No loaded shop rows; open a vendor window")
        RETURN
    END IF
    FOR VAR i = 0 TO GetArrayLength(rows) - 1
        UO.Print(rows[i])
    NEXT
END SUB

Каждая строка имеет поля serial|graphic|hue|amount|price|name. serial — ID позиции текущего окна, graphic/hue — признаки товара, amount — доступное количество, price — цена единицы, name — текстовое имя. В имени может встретиться разделитель: не считайте произвольное число частей новым форматом. Данные действительны для этого окна; GetShopList ничего не покупает и не продаёт.

ClearShopList очищает оба массива правил покупки и продажи и выключает обе автоматизации. Это массовый сброс, не безобидное начало каждого скрипта. Чтобы убрать одно правило, передайте quantity=0 соответствующей Buy/Sell.