-
Notifications
You must be signed in to change notification settings - Fork 0
API UO GetShopList uk
ClassicUO / Basic IDE
Читає товари останньої активної пропозиції 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 показує ті самі дані й зберігає чернетку та прокрутку при від’єднанні. Закриття сервером не дублює відповідь.
Спочатку ігровою дією відкрийте купівлю або продаж у потрібного 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.
Читання не надсилає пакетів. Це знімок отриманих даних, не гарантія запасу 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. Serial — ID
# позиції, graphic — тип, hue — колір; ці три поля у форматі 0x. Amount — доступні одиниці мінус
# чернетка вікна, price — ціна одиниці, name — назва. Без пропозиції масив порожній; це не
# Boolean. Назва може містити |: лише перші п’ять роздільників відокремлюють поля.
SUB Main()
# GetWord: 0 — serial, 1 — graphic, 2 — hue, 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. Serial — ID
# позиції, 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. Serial — ID
# позиції, 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 / Списки покупки и продажи
Русский · English · Українська · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
ClassicUO
Bad Newbie & Basic IDE
Найти в справочнике
Клиент и скрипты
Каталоги значений
Разработка и помощь