API UO CancelTrade uk - LIHACHTETAN/ClassicUO-BadNewbie-BasicIDE GitHub Wiki
UO.CancelTrade
ClassicUO • Runtime API
Скасовує вибраний обмін і закриває його вікно.
Точний синтаксис
UO.CancelTrade(TradeNum:Any) -> Any
Параметри
TradeNum— Цілий поточний номер вікна: 1..TradeCount(). Нуль та від’ємні значення неправильні. Не 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. Це збережені правила цього клієнта; зовнішні довідники різних рушіїв мають різні початки відліку.
- Читання виконується на ігровому потоці за живими вікнами поточного World. Закриті вікна виключено. Читання не надсилає пакетів і не чекає відповіді. Порядок UI може змінитися після відкриття, закриття або підняття вікна; індекс не є постійним ID.
- 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. CancelTrade
Invoke передає читання/запис на ігровий потік зі скасуванням скрипту; метод читає ID1/ID2, LocalSerial, OpponentName або прапорці вибраного TradingGump.
Скасовує вибраний обмін і закриває його вікно.
Код проєкту: src/ClassicUO.Client/Game/Managers/ClassicUOInjectionApiBridge.cs; функція CancelTrade.
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. Dispose
Dispose одразу завершується для вже закритого вікна, звільняє UI й один раз викликає GameActions.CancelTrade(ID1).
Integer: 1 = TRUE — вікно знайдено, закрито та через закриття надіслано скасування; 0 = FALSE — вікна немає. Не чекає відповіді сервера. Повторне закриття не надсилає другий пакет.
Код проєкту: src/ClassicUO.Client/Game/UI/Gumps/TradingGump.cs; функція Dispose.
Помічник повністю визначений і викликається з 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.CancelTrade(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.CancelTrade(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.CancelTrade(tradeNumber)
END FUNCTION
Пояснення параметрів і виконання:
- Помічник повністю визначений і викликається з Main. Перевірки меж/ID зменшують помилки, але виклики не атомарні: вікно може змінитися між ними. Для дії expectedPartner — збережений serial персонажа, не перевірка ціни чи вмісту.