Skip to content

API UO GetShopList uk

Codex edited this page Sep 23, 2026 · 1 revision

UO.GetShopList

ClassicUO / Basic IDE

Home · API · Trading

Читає товари останньої активної пропозиції NPC-продавця для перевірки типу, кількості та ціни перед купівлею або продажем.

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

UO.GetShopList() -> Any

Параметри

Параметрів немає.

Повертає

Array of String, індекси від 0. Рядок: serial|graphic|hue|amount|price|name. Serial — ID позиції, graphic — тип, hue — колір; ці три поля у форматі 0x. Amount — доступні одиниці мінус чернетка вікна, price — ціна одиниці, name — назва. Без пропозиції масив порожній; це не Boolean. Назва може містити |: лише перші п’ять роздільників відокремлюють поля.

Поведінка

  • Спочатку ігровою дією відкрийте купівлю або продаж у потрібного NPC та дочекайтеся пропозиції. Команди не шукають продавця, не відкривають торгівлю, не задають ціну особистому vendor і не переносять речі між контейнерами. ID продавця не приймається: використовується остання пропозиція.
  • Менеджер зберігає пропозицію в сеансі. Закриття графіки зберігає чернетку, повторне відкриття відновлює вікно. Закриття магазину, відповідь, закриття сервером або розрив з’єднання видаляють її. Автокупівля/автопродаж Bad Newbie може обробити її раніше за скрипт.
  • Читання не надсилає пакетів. Це знімок отриманих даних, не гарантія запасу NPC. Amount рахує одиниці, GetArrayLength(rows) — позиції. SendShopReply не приймає ціну.
  • Явний список замінює чернетку. Повторні serial підсумовуються до повної доступної кількості позиції. Невідомий serial або неправильна чи недодатна кількість відхиляють увесь запит без надсилання, зберігаючи пропозицію. Без пропозиції SendShopReply повідомляє помилку. "0" не скасовує: використовуйте "".

Внутрішні функції: від виклику до результату

SessionShops повністю перевіряє серверні списки й ціни та зберігає пропозицію. Bridge працює на потоці сеансу. GetItems формує рядки, ParseSelection перевіряє вибір, Reply надсилає купівлю 0x3B або продаж 0x9F і закриває пропозицію. ShopGump показує ті самі дані й зберігає чернетку та прокрутку при від’єднанні. Закриття сервером не дублює відповідь.

1. GetShopList

Спочатку ігровою дією відкрийте купівлю або продаж у потрібного NPC та дочекайтеся пропозиції. Команди не шукають продавця, не відкривають торгівлю, не задають ціну особистому vendor і не переносять речі між контейнерами. ID продавця не приймається: використовується остання пропозиція.

Array of String, індекси від 0. Рядок: serial|graphic|hue|amount|price|name. Serial — ID позиції, graphic — тип, hue — колір; ці три поля у форматі 0x. Amount — доступні одиниці мінус чернетка вікна, price — ціна одиниці, name — назва. Без пропозиції масив порожній; це не Boolean. Назва може містити |: лише перші п’ять роздільників відокремлюють поля.

Код проєкту: src/ClassicUO.Client/Game/Managers/ClassicUOInjectionApiBridge.cs; функція GetShopList.

2. SessionShop.GetItems

Читання не надсилає пакетів. Це знімок отриманих даних, не гарантія запасу NPC. Amount рахує одиниці, GetArrayLength(rows) — позиції. SendShopReply не приймає ціну.

Менеджер зберігає пропозицію в сеансі. Закриття графіки зберігає чернетку, повторне відкриття відновлює вікно. Закриття магазину, відповідь, закриття сервером або розрив з’єднання видаляють її. Автокупівля/автопродаж Bad Newbie може обробити її раніше за скрипт.

Код проєкту: src/ClassicUO.Client/Game/Managers/SessionShops.cs; функція SessionShop.GetItems.

Читання не надсилає пакетів. Це знімок отриманих даних, не гарантія запасу NPC. Amount рахує одиниці, GetArrayLength(rows) — позиції. SendShopReply не приймає ціну.

Приклади

Розібрати першу позицію

# Розібрати першу позицію
#
# Читає товари останньої активної пропозиції NPC-продавця для перевірки типу, кількості та ціни
# перед купівлею або продажем.
#
# Array of String, індекси від 0. Рядок: serial|graphic|hue|amount|price|name. SerialID
# позиції, graphicтип, hueколір; ці три поля у форматі 0x. Amountдоступні одиниці мінус
# чернетка вікна, priceціна одиниці, nameназва. Без пропозиції масив порожній; це не
# Boolean. Назва може містити |: лише перші п’ять роздільників відокремлюють поля.

SUB Main()
    # GetWord: 0serial, 1graphic, 2hue, 3кількість, 4ціна. Перед rows[0]
    # перевіряється довжина.

    VAR rows = UO.GetShopList()
    IF GetArrayLength(rows) = 0 THEN
        RETURN
    END IF
    VAR serial = GetWord(rows[0], 0, "|")
    VAR itemType = GetWord(rows[0], 1, "|")
    VAR amount = CInt(GetWord(rows[0], 3, "|"))
    VAR price = CDbl(GetWord(rows[0], 4, "|"))
    UO.Print(serial + " / " + itemType + " / " + CStr(amount) + " / " + CStr(price))
END SUB

Пояснення параметрів і виконання:

  • GetWord: 0 — serial, 1 — graphic, 2 — hue, 3 — кількість, 4 — ціна. Перед rows[0] перевіряється довжина.

Купити до десяти бинтів за обмеженою ціною

# Купити до десяти бинтів за обмеженою ціною
#
# Читає товари останньої активної пропозиції NPC-продавця для перевірки типу, кількості та ціни
# перед купівлею або продажем.
#
# Array of String, індекси від 0. Рядок: serial|graphic|hue|amount|price|name. SerialID
# позиції, graphicтип, hueколір; ці три поля у форматі 0x. Amountдоступні одиниці мінус
# чернетка вікна, priceціна одиниці, nameназва. Без пропозиції масив порожній; це не
# Boolean. Назва може містити |: лише перші п’ять роздільників відокремлюють поля.

SUB Main()
    # Лише відкрита КУПІВЛЯ. 0x0E21бинти, 5максимальна ціна одиниці, 10кількість.
    # Вибирається перша відповідна позиція з її справжнім serial.

    VAR rows = UO.GetShopList()
    FOR VAR i = 0 TO GetArrayLength(rows) - 1
        VAR row = rows[i]
        IF GetWord(row, 1, "|") = "0x0E21" THEN
            VAR price = CDbl(GetWord(row, 4, "|"))
            VAR amount = CInt(GetWord(row, 3, "|"))
            IF price > 0 AND price <= 5 AND amount > 0 THEN
                IF amount > 10 THEN
                    amount = 10
                END IF
                UO.SendShopReply(GetWord(row, 0, "|") + ":" + CStr(amount))
                RETURN
            END IF
        END IF
    NEXT
END SUB

Пояснення параметрів і виконання:

  • Лише відкрита КУПІВЛЯ. 0x0E21 — бинти, 5 — максимальна ціна одиниці, 10 — кількість. Вибирається перша відповідна позиція з її справжнім serial.

Порахувати запас типу

# Порахувати запас типу
#
# Читає товари останньої активної пропозиції NPC-продавця для перевірки типу, кількості та ціни
# перед купівлею або продажем.
#
# Array of String, індекси від 0. Рядок: serial|graphic|hue|amount|price|name. SerialID
# позиції, graphicтип, hueколір; ці три поля у форматі 0x. Amountдоступні одиниці мінус
# чернетка вікна, priceціна одиниці, nameназва. Без пропозиції масив порожній; це не
# Boolean. Назва може містити |: лише перші п’ять роздільників відокремлюють поля.

SUB Main()
    # Повна функція підсумовує amount усіх позицій типу; без товарів 0. Це доступні одиниці, не
    # кількість істот чи речей персонажа.

    VAR available = CountOfferedType("0x0E21")
    IF available < 10 THEN
        UO.Print("Bandage stock below 10: " + CStr(available))
    END IF
END SUB

FUNCTION CountOfferedType(itemType)
    VAR total = 0
    VAR rows = UO.GetShopList()
    FOR VAR i = 0 TO GetArrayLength(rows) - 1
        IF GetWord(rows[i], 1, "|") = itemType THEN
            total = total + CInt(GetWord(rows[i], 3, "|"))
        END IF
    NEXT
    RETURN total
END FUNCTION

Пояснення параметрів і виконання:

  • Повна функція підсумовує amount усіх позицій типу; без товарів 0. Це доступні одиниці, не кількість істот чи речей персонажа.

Shop lists / Списки покупки и продажи

Shop lists / Списки покупки и продажи

Русский · English · Українська · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

Clone this wiki locally