-
Notifications
You must be signed in to change notification settings - Fork 0
API UO GetTradeContainer
ClassicUO • Runtime API
Возвращает числовой serial одного из двух контейнеров обмена.
UO.GetTradeContainer(TradeNum:Any, Num:Any) -> Any
-
TradeNum— Целое число: текущий номер окна от 1 до TradeCount(). 0 и отрицательные значения недопустимы. Это не serial. -
Num— 1 — свой контейнер, 2 — контейнер партнёра. Остальные значения возвращают 0.
Integer: 32 бита serial контейнера; 0 при отсутствии окна или неверном Num. Это не type. Старший бит сохраняется: проверяйте <> 0, а не > 0 или = TRUE.
- GetTradeContainer/GetTradeOpponent/GetTradeOpponentName/ConfirmTrade/CancelTrade нумеруют окна с 1; TradeContainer/TradeOpponent/TradeName и все формы TradeCheck — с 0. Это явная совместимость данного клиента: внешние справочники разных движков используют разные начала отсчёта.
- Чтение выполняется на игровом потоке по живым окнам текущего мира. Закрытые окна не считаются. Вызовы чтения не отправляют пакетов и не ждут ответа. Порядок UI может меняться при открытии, закрытии и переносе окна наверх; номер не является постоянным идентификатором.
- ConfirmTrade и запись своего TradeCheck отправляют пакет только при изменении согласия. Чужое согласие задаёт сервер. CancelTrade отправляет отмену один раз. 1/TRUE — локальное состояние/обработка, а не гарантия завершения обмена. Имена и оба согласия не доказывают, что состав предметов не изменился.
Ниже — путь вызова в C#. После него приведены исполняемые Basic-примеры; это не попытка заново реализовать сетевой протокол в скрипте.
Регистрация выбирает форму по числу аргументов; числа преобразуются через NumberConversions. Для TradeCheck с двумя аргументами стороны 1/2 проверяются и переводятся в 0/1 bridge. Legacy-serial форматируется через ToHex.
Integer: 32 бита serial контейнера; 0 при отсутствии окна или неверном Num. Это не type. Старший бит сохраняется: проверяйте <> 0, а не > 0 или = TRUE.
Исходник проекта: external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs; функция ExecuteStealthCompatibility.
Invoke передаёт чтение/изменение на игровой поток с отменой скрипта; метод читает ID1/ID2, LocalSerial, OpponentName или флажки выбранного TradingGump.
Возвращает числовой serial одного из двух контейнеров обмена.
Исходник проекта: src/ClassicUO.Client/Game/Managers/ClassicUOInjectionApiBridge.cs; функция GetTradeContainer.
FindNumberedTrade проверяет number>0 до вычитания 1; FindTrade отклоняет отрицательный индекс и перечисляет только незакрытые TradingGump текущего World.
GetTradeContainer/GetTradeOpponent/GetTradeOpponentName/ConfirmTrade/CancelTrade нумеруют окна с 1; TradeContainer/TradeOpponent/TradeName и все формы TradeCheck — с 0. Это явная совместимость данного клиента: внешние справочники разных движков используют разные начала отсчёта.
Исходник проекта: src/ClassicUO.Client/Game/Managers/ClassicUOInjectionApiBridge.cs; функция FindNumberedTrade.
Помощник приведён полностью и действительно вызывается из Main. Проверки диапазона/ID снижают риск ошибки, но несколько вызовов не атомарны: окно может смениться между ними. Для действия expectedPartner — сохранённый serial персонажа; это не проверка цены или содержимого обмена.
# Прямое чтение или действие
#
# Возвращает числовой serial одного из двух контейнеров обмена.
#
# Integer: 32 бита serial контейнера; 0 при отсутствии окна или неверном Num. Это не type.
# Старший бит сохраняется: проверяйте <> 0, а не > 0 или = TRUE.
SUB Main()
# Вызов сделан один раз, результат сохранён в value/result. 0 — первый индекс, 1 — первый номер
# (см. синтаксис этой команды). HEX показывает числовой serial; CStr — число или строку.
VAR value = UO.GetTradeContainer(1, 1)
UO.Print(HEX(value))
END SUBРазбор параметров и выполнения:
- Вызов сделан один раз, результат сохранён в value/result. 0 — первый индекс, 1 — первый номер (см. синтаксис этой команды). HEX показывает числовой serial; CStr — число или строку.
# Другой сценарий и параметры
#
# Возвращает числовой serial одного из двух контейнеров обмена.
#
# Integer: 32 бита serial контейнера; 0 при отсутствии окна или неверном Num. Это не type.
# Старший бит сохраняется: проверяйте <> 0, а не > 0 или = TRUE.
SUB Main()
# total — снимок числа окон; index — текущий индекс/номер. Пример перебора ничего не
# подтверждает. В GetTradeContainer два вызова читают свой контейнер (1) и чужой (2) первого
# окна (1).
VAR ours = UO.GetTradeContainer(1, 1)
VAR theirs = UO.GetTradeContainer(1, 2)
UO.Print(HEX(ours) + " / " + HEX(theirs))
END SUBРазбор параметров и выполнения:
- total — снимок числа окон; index — текущий индекс/номер. Пример перебора ничего не подтверждает. В GetTradeContainer два вызова читают свой контейнер (1) и чужой (2) первого окна (1).
# Полный помощник со всеми функциями
#
# Возвращает числовой serial одного из двух контейнеров обмена.
#
# Integer: 32 бита serial контейнера; 0 при отсутствии окна или неверном Num. Это не type.
# Старший бит сохраняется: проверяйте <> 0, а не > 0 или = TRUE.
SUB Main()
# Помощник приведён полностью и действительно вызывается из Main. Проверки диапазона/ID снижают
# риск ошибки, но несколько вызовов не атомарны: окно может смениться между ними. Для действия
# expectedPartner — сохранённый serial персонажа; это не проверка цены или содержимого обмена.
VAR value = ReadTradeValue(1)
UO.Print(HEX(value))
END SUB
FUNCTION ReadTradeValue(index)
VAR total = UO.TradeCount()
IF index < 1 OR index >= total + 1 THEN
RETURN 0
END IF
RETURN UO.GetTradeContainer(index, 1)
END FUNCTIONРазбор параметров и выполнения:
- Помощник приведён полностью и действительно вызывается из Main. Проверки диапазона/ID снижают риск ошибки, но несколько вызовов не атомарны: окно может смениться между ними. Для действия expectedPartner — сохранённый serial персонажа; это не проверка цены или содержимого обмена.
ClassicUO - Bad Newbie & Basic IDE Edition