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

UO.ConfirmTrade

ClassicUO • Runtime API

Устанавливает собственный флажок согласия в выбранном обмене.

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

UO.ConfirmTrade(TradeNum:Any) -> Any

Параметры

  • TradeNum — Целое число: текущий номер окна от 1 до TradeCount(). 0 и отрицательные значения недопустимы. Это не serial.

Возвращает

Integer: 1 = TRUE — окно найдено и собственное согласие включено (или уже было включено); 0 = FALSE — окна нет. Не подтверждает передачу предметов сервером. Повторный вызов не снимает согласие.

Это логический результат: 1 = TRUE, 0 = FALSE. После VAR result = команда(...) можно писать IF result = TRUE THEN или IF result = 1 THEN; для отрицательного результата — IF result = FALSE THEN или IF result = 0 THEN. TRUE/FALSE пишутся без кавычек. Вызовите команду один раз и сохраните результат: повторный вызов может повторить действие или прочитать уже изменившееся состояние.

Поведение

  • GetTradeContainer/GetTradeOpponent/GetTradeOpponentName/ConfirmTrade/CancelTrade нумеруют окна с 1; TradeContainer/TradeOpponent/TradeName и все формы TradeCheck — с 0. Это явная совместимость данного клиента: внешние справочники разных движков используют разные начала отсчёта.
  • Чтение выполняется на игровом потоке по живым окнам текущего мира. Закрытые окна не считаются. Вызовы чтения не отправляют пакетов и не ждут ответа. Порядок UI может меняться при открытии, закрытии и переносе окна наверх; номер не является постоянным идентификатором.
  • ConfirmTrade и запись своего TradeCheck отправляют пакет только при изменении согласия. Чужое согласие задаёт сервер. CancelTrade отправляет отмену один раз. 1/TRUE — локальное состояние/обработка, а не гарантия завершения обмена. Имена и оба согласия не доказывают, что состав предметов не изменился.

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

Ниже — путь вызова в C#. После него приведены исполняемые Basic-примеры; это не попытка заново реализовать сетевой протокол в скрипте.

1. ExecuteStealthCompatibility

Регистрация выбирает форму по числу аргументов; числа преобразуются через NumberConversions. Для TradeCheck с двумя аргументами стороны 1/2 проверяются и переводятся в 0/1 bridge. Legacy-serial форматируется через ToHex.

Integer: 1 = TRUE — окно найдено и собственное согласие включено (или уже было включено); 0 = FALSE — окна нет. Не подтверждает передачу предметов сервером. Повторный вызов не снимает согласие.

Исходник проекта: external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs; функция ExecuteStealthCompatibility.

2. ConfirmTrade

Invoke передаёт чтение/изменение на игровой поток с отменой скрипта; метод читает ID1/ID2, LocalSerial, OpponentName или флажки выбранного TradingGump.

Устанавливает собственный флажок согласия в выбранном обмене.

Исходник проекта: src/ClassicUO.Client/Game/Managers/ClassicUOInjectionApiBridge.cs; функция ConfirmTrade.

3. FindNumberedTrade

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.

4. AcceptTrade

При изменении собственного флажка GameActions.AcceptTrade вызывает Send_TradeResponse с кодом 2, ID1 и состоянием. Чтение и повторная установка того же состояния пакета не создают.

Integer: 1 = TRUE — окно найдено и собственное согласие включено (или уже было включено); 0 = FALSE — окна нет. Не подтверждает передачу предметов сервером. Повторный вызов не снимает согласие.

Исходник проекта: src/ClassicUO.Client/Game/GameActions.cs; функция AcceptTrade.

Помощник приведён полностью и действительно вызывается из Main. Проверки диапазона/ID снижают риск ошибки, но несколько вызовов не атомарны: окно может смениться между ними. Для действия expectedPartner — сохранённый serial персонажа; это не проверка цены или содержимого обмена.

Примеры

Прямое чтение или действие

# Прямое чтение или действие
#
# Устанавливает собственный флажок согласия в выбранном обмене.
#
# Integer: 1 = TRUE — окно найдено и собственное согласие включено (или уже было включено); 0 =
# FALSE — окна нет. Не подтверждает передачу предметов сервером. Повторный вызов не снимает
# согласие.
#
# Это логический результат: 1 = TRUE, 0 = FALSE. После VAR result = команда(...) можно писать IF
# result = TRUE THEN или IF result = 1 THEN; для отрицательного результата — IF result = FALSE
# THEN или IF result = 0 THEN. TRUE/FALSE пишутся без кавычек. Вызовите команду один раз и
# сохраните результат: повторный вызов может повторить действие или прочитать уже изменившееся
# состояние.

SUB Main()
    # Вызов сделан один раз, результат сохранён в value/result. 0 — первый индекс, 1 — первый номер
    # (см. синтаксис этой команды). HEX показывает числовой serial; CStr — число или строку.

    VAR result = UO.ConfirmTrade(1)
    IF result = TRUE THEN
        UO.Print("Local request processed")
    END IF
END SUB

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

  • Вызов сделан один раз, результат сохранён в value/result. 0 — первый индекс, 1 — первый номер (см. синтаксис этой команды). HEX показывает числовой serial; CStr — число или строку.

Другой сценарий и параметры

# Другой сценарий и параметры
#
# Устанавливает собственный флажок согласия в выбранном обмене.
#
# Integer: 1 = TRUE — окно найдено и собственное согласие включено (или уже было включено); 0 =
# FALSE — окна нет. Не подтверждает передачу предметов сервером. Повторный вызов не снимает
# согласие.
#
# Это логический результат: 1 = TRUE, 0 = FALSE. После VAR result = команда(...) можно писать IF
# result = TRUE THEN или IF result = 1 THEN; для отрицательного результата — IF result = FALSE
# THEN или IF result = 0 THEN. TRUE/FALSE пишутся без кавычек. Вызовите команду один раз и
# сохраните результат: повторный вызов может повторить действие или прочитать уже изменившееся
# состояние.

SUB Main()
    # ConfirmTrade и запись своего TradeCheck отправляют пакет только при изменении согласия. Чужое
    # согласие задаёт сервер. CancelTrade отправляет отмену один раз. 1/TRUE — локальное
    # состояние/обработка, а не гарантия завершения обмена. Имена и оба согласия не доказывают, что
    # состав предметов не изменился.

    VAR tradeNumber = 2
    IF UO.TradeCount() >= tradeNumber THEN
        VAR result = UO.ConfirmTrade(tradeNumber)
        UO.Print(CStr(result))
    END IF
END SUB

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

  • ConfirmTrade и запись своего TradeCheck отправляют пакет только при изменении согласия. Чужое согласие задаёт сервер. CancelTrade отправляет отмену один раз. 1/TRUE — локальное состояние/обработка, а не гарантия завершения обмена. Имена и оба согласия не доказывают, что состав предметов не изменился.

Полный помощник со всеми функциями

# Полный помощник со всеми функциями
#
# Устанавливает собственный флажок согласия в выбранном обмене.
#
# Integer: 1 = TRUE — окно найдено и собственное согласие включено (или уже было включено); 0 =
# FALSE — окна нет. Не подтверждает передачу предметов сервером. Повторный вызов не снимает
# согласие.
#
# Это логический результат: 1 = TRUE, 0 = FALSE. После VAR result = команда(...) можно писать IF
# result = TRUE THEN или IF result = 1 THEN; для отрицательного результата — IF result = FALSE
# THEN или IF result = 0 THEN. TRUE/FALSE пишутся без кавычек. Вызовите команду один раз и
# сохраните результат: повторный вызов может повторить действие или прочитать уже изменившееся
# состояние.

SUB Main()
    # Помощник приведён полностью и действительно вызывается из Main. Проверки диапазона/ID снижают
    # риск ошибки, но несколько вызовов не атомарны: окно может смениться между ними. Для действия
    # expectedPartner — сохранённый serial персонажа; это не проверка цены или содержимого обмена.

    VAR expectedPartner = UO.GetTradeOpponent(1)
    VAR result = ApplyToPartner(1, expectedPartner)
    UO.Print(CStr(result))
END SUB

FUNCTION ApplyToPartner(tradeNumber, expectedPartner)
    IF expectedPartner = 0 THEN
        RETURN FALSE
    END IF
    IF UO.GetTradeOpponent(tradeNumber) <> expectedPartner THEN
        RETURN FALSE
    END IF
    RETURN UO.ConfirmTrade(tradeNumber)
END FUNCTION

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

  • Помощник приведён полностью и действительно вызывается из Main. Проверки диапазона/ID снижают риск ошибки, но несколько вызовов не атомарны: окно может смениться между ними. Для действия expectedPartner — сохранённый serial персонажа; это не проверка цены или содержимого обмена.

en · ru · uk · fr · de · it · es · zh-tw · ja · ko

Basic