Skip to content

UO Topic trade

Codex edited this page Oct 12, 2026 · 6 revisions

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

Обмін між гравцями

Головна · C# · IDE · Команди UO · За абеткою · Приклади · Мови

Вікно обміну предметами між двома гравцями: інший учасник, контейнер обміну, стан підтвердження та скасування.

Розділи

Тема Команди та пояснення
Перевірка відкритого обміну UO.IsTrade
Інший учасник обміну UO.GetTradeOpponent · UO.GetTradeOpponentName
Контейнер обміну UO.GetTradeContainer
Підтвердження обміну UO.ConfirmTrade
Скасування обміну UO.CancelTrade

Усі команди теми

Обмін між гравцями

UO.IsTrade · UO.TradeCount · UO.TradeCheck · UO.TradeContainer · UO.GetTradeContainer · UO.TradeOpponent · UO.GetTradeOpponent · UO.TradeName · UO.GetTradeOpponentName · UO.ConfirmTrade · UO.CancelTrade

Приклади на тему

Нижче наведено короткі приклади. У повному описі кожної команди є параметри, результат, обмеження та кілька самостійних скриптів: прямий код, варіант із функцією та варіант із класом.

UO.GetTradeContainer

Параметри, результат та всі сценарії

var value = UO.GetTradeContainer(1, 1);
UO.Print(Hex(value));

string Hex(object? value) => Convert.ToInt64(value).ToString("X");

UO.ConfirmTrade

Параметри, результат та всі сценарії

var result = UO.ConfirmTrade(1);
if (Truth(Truth(result) == true))
{
    UO.Print("Local request processed");
}

bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

Повний опис команд


UO.CancelTrade

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

C#-сигнатури

dynamic UO.CancelTrade(object? tradeNum);

Скасує обраний обмін і закриває вікно.

Параметри

  • tradeNum — ціле число: поточний номер вікна від 1 до TradeCount(). 0 та негативні значення неприпустимі. Це не serial.

Повернене значення

int: 1 (умова виконана) — вікно знайдено, закрито та запит скасування надіслано через закриття; 0 (умова не виконана) - вікна немає. Це не очікування серверної відповіді. Повторне скасування закритого вікна не надсилає другий пакет.

Результат команди — числовий прапор: 1 означає виконану умову, 0 — невиконану. Після var result = команда (...) перевіряйте if (result != 0) або if (result == 0). Збережіть результат одного виклику: повторний виклик може виконати дію знову або прочитати стан, що вже змінився.

Поведінка

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

Самостійні C#-скрипти

Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.

Простий приклад

Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.

Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.

object? result = UO.CancelTrade(1);
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));

1. Пряме читання чи дія – прямий скрипт

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

  • Виклик зроблено один раз, результат збережено у value/result. 0 – перший індекс, 1 – перший номер (див. синтаксис цієї команди). HEX показує числовий serial; Convert.ToString — число чи рядок.
var result = UO.CancelTrade(1);
if (Truth(Truth(result) == true))
{
    UO.Print("Local request processed");
}

bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

2. Інший сценарій та параметри - функція сценарію

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

  • ConfirmTrade та запис свого TradeCheck відправляють пакет тільки при зміні згоди. Чужу згоду ставить сервер. CancelTrade відправляє скасування один раз. 1/true — локальний стан/обробка, а не гарантія завершення обміну. Імена та обидві згоди не доводять, що склад предметів не змінився.
return  RunScenario();
 object? RunScenario()
{
    var tradeNumber = 2;
    if (Truth(UO.TradeCount() >= tradeNumber))
    {
        var result = UO.CancelTrade(tradeNumber);
        UO.Print(Convert.ToString(result));
    }

    return null;
}

bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

3. Повний помічник з усіма функціями клас сценарію

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

  • Помічник наведений повністю і дійсно викликається з Main. Перевірки діапазону/ID знижують ризик помилки, але кілька викликів не атомарні: вікно може змінитися між ними. Для дії expectedPartner - збережений serial персонажа; це не є перевіркою ціни або вмісту обміну.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var expectedPartner = UO.GetTradeOpponent(1);
        var result = ApplyToPartner(1, expectedPartner);
        UO.Print(Convert.ToString(result));
        return null;
    }

    dynamic ApplyToPartner(dynamic tradeNumber, dynamic expectedPartner)
    {
        if (Truth(expectedPartner == 0))
        {
            return false;
        }

        if (Truth(UO.GetTradeOpponent(tradeNumber) != expectedPartner))
        {
            return false;
        }

        return UO.CancelTrade(tradeNumber);
    }

    bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}

Реалізація команди

C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.

UO.CancelTrade(tradeNum) — UO.CancelTrade(Any)

Параметри: tradeNum (Any)

Результат: dynamic / Any.

Під час виклику:

Внутрішній код реалізації, не самостійний скрипт.

case "canceltrade": return new InjectionValue(bridge.CancelTrade(Arg(0)));

UO.ConfirmTrade

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

C#-сигнатури

dynamic UO.ConfirmTrade(object? tradeNum);

Встановлює власний прапорець згоди у вибраному обміні.

Параметри

  • tradeNum — ціле число: поточний номер вікна від 1 до TradeCount(). 0 та негативні значення неприпустимі. Це не serial.

Повернене значення

int: 1 (умова виконана) - вікно знайдено і власну згоду включено (або вже було включено); 0 (умова не виконана) - вікна немає. Не підтверджує передачу предметів на сервер. Повторний виклик не знімає згоди.

Результат команди — числовий прапор: 1 означає виконану умову, 0 — невиконану. Після var result = команда (...) перевіряйте if (result != 0) або if (result == 0). Збережіть результат одного виклику: повторний виклик може виконати дію знову або прочитати стан, що вже змінився.

Поведінка

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

Самостійні C#-скрипти

Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.

Простий приклад

Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.

Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.

object? result = UO.ConfirmTrade(1);
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));

1. Пряме читання чи дія – прямий скрипт

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

  • Виклик зроблено один раз, результат збережено у value/result. 0 – перший індекс, 1 – перший номер (див. синтаксис цієї команди). HEX показує числовий serial; Convert.ToString — число чи рядок.
var result = UO.ConfirmTrade(1);
if (Truth(Truth(result) == true))
{
    UO.Print("Local request processed");
}

bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

2. Інший сценарій та параметри - функція сценарію

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

  • ConfirmTrade та запис свого TradeCheck відправляють пакет тільки при зміні згоди. Чужу згоду ставить сервер. CancelTrade відправляє скасування один раз. 1/true — локальний стан/обробка, а не гарантія завершення обміну. Імена та обидві згоди не доводять, що склад предметів не змінився.
return  RunScenario();
 object? RunScenario()
{
    var tradeNumber = 2;
    if (Truth(UO.TradeCount() >= tradeNumber))
    {
        var result = UO.ConfirmTrade(tradeNumber);
        UO.Print(Convert.ToString(result));
    }

    return null;
}

bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

3. Повний помічник з усіма функціями клас сценарію

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

  • Помічник наведений повністю і дійсно викликається з Main. Перевірки діапазону/ID знижують ризик помилки, але кілька викликів не атомарні: вікно може змінитися між ними. Для дії expectedPartner - збережений serial персонажа; це не є перевіркою ціни або вмісту обміну.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var expectedPartner = UO.GetTradeOpponent(1);
        var result = ApplyToPartner(1, expectedPartner);
        UO.Print(Convert.ToString(result));
        return null;
    }

    dynamic ApplyToPartner(dynamic tradeNumber, dynamic expectedPartner)
    {
        if (Truth(expectedPartner == 0))
        {
            return false;
        }

        if (Truth(UO.GetTradeOpponent(tradeNumber) != expectedPartner))
        {
            return false;
        }

        return UO.ConfirmTrade(tradeNumber);
    }

    bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}

Реалізація команди

C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.

UO.ConfirmTrade(tradeNum) — UO.ConfirmTrade(Any)

Параметри: tradeNum (Any)

Результат: dynamic / Any.

Під час виклику:

Внутрішній код реалізації, не самостійний скрипт.

case "confirmtrade": return new InjectionValue(bridge.ConfirmTrade(Arg(0)));

UO.GetTradeContainer

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

C#-сигнатури

dynamic UO.GetTradeContainer(object? tradeNum, object? num);

Повертає числовий serial одного з двох контейнерів обміну.

Параметри

  • tradeNum — ціле число: поточний номер вікна від 1 до TradeCount(). 0 та негативні значення неприпустимі. Це не serial.
  • num - 1 - свій контейнер, 2 - контейнер партнера. Інші значення повертають 0.

Повернене значення

int: 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#-скрипти

Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.

Простий приклад

Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.

Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.

object? result = UO.GetTradeContainer(1, 1);
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));

1. Пряме читання чи дія – прямий скрипт

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

  • Виклик зроблено один раз, результат збережено у value/result. 0 – перший індекс, 1 – перший номер (див. синтаксис цієї команди). HEX показує числовий serial; Convert.ToString — число чи рядок.
var value = UO.GetTradeContainer(1, 1);
UO.Print(Hex(value));

string Hex(object? value) => Convert.ToInt64(value).ToString("X");

2. Інший сценарій та параметри - функція сценарію

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

  • total - знімок числа вікон; index – поточний індекс/номер. Приклад перебору нічого не підтверджує. У GetTradeContainer два виклики читають свій контейнер (1) та чужий (2) першого вікна (1).
return  RunScenario();
 object? RunScenario()
{
    var ours = UO.GetTradeContainer(1, 1);
    var theirs = UO.GetTradeContainer(1, 2);
    UO.Print(Hex(ours) + " / " + Hex(theirs));
    return null;
}

string Hex(object? value) => Convert.ToInt64(value).ToString("X");

3. Повний помічник з усіма функціями клас сценарію

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

  • Помічник наведений повністю і дійсно викликається з Main. Перевірки діапазону/ID знижують ризик помилки, але кілька викликів не атомарні: вікно може змінитися між ними. Для дії expectedPartner - збережений serial персонажа; це не є перевіркою ціни або вмісту обміну.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var value = ReadTradeValue(1);
        UO.Print(Hex(value));
        return null;
    }

    dynamic ReadTradeValue(dynamic index)
    {
        var total = UO.TradeCount();
        if (Truth(index < 1) || Truth(index >= total + 1))
        {
            return 0;
        }

        return UO.GetTradeContainer(index, 1);
    }

    string Hex(object? value) => Convert.ToInt64(value).ToString("X");
    bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}

Реалізація команди

C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.

UO.GetTradeContainer(tradeNum, num) — UO.GetTradeContainer(Any,Any)

Параметри: tradeNum (Any), num (Any)

Результат: dynamic / Any.

Під час виклику:

Внутрішній код реалізації, не самостійний скрипт.

case "gettradecontainer": return new InjectionValue(bridge.GetTradeContainer(Arg(0), Arg(1)));

UO.GetTradeOpponent

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

C#-сигнатури

dynamic UO.GetTradeOpponent(object? tradeNum);

Повертає числовий serial персонажа-партнера.

Параметри

  • tradeNum — ціле число: поточний номер вікна від 1 до TradeCount(). 0 та негативні значення неприпустимі. Це не serial.

Повернене значення

int: serial персонажа з LocalSerial вікна; 0 за відсутності вікна. Чи не контейнер і не bool; перевіряйте != 0.

Поведінка

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

Самостійні C#-скрипти

Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.

Простий приклад

Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.

Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.

object? result = UO.GetTradeOpponent(1);
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));

1. Пряме читання чи дія – прямий скрипт

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

  • Виклик зроблено один раз, результат збережено у value/result. 0 – перший індекс, 1 – перший номер (див. синтаксис цієї команди). HEX показує числовий serial; Convert.ToString — число чи рядок.
var value = UO.GetTradeOpponent(1);
UO.Print(Hex(value));

string Hex(object? value) => Convert.ToInt64(value).ToString("X");

2. Інший сценарій та параметри - функція сценарію

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

  • total - знімок числа вікон; index – поточний індекс/номер. Приклад перебору нічого не підтверджує. У GetTradeContainer два виклики читають свій контейнер (1) та чужий (2) першого вікна (1).
return  RunScenario();
 object? RunScenario()
{
    var total = UO.TradeCount();
    for (int index = (int)(1); index <= total - 0; index += (int)(1))
    {
        var value = UO.GetTradeOpponent(index);
        UO.Print(Convert.ToString(index) + ": " + Hex(value));
    }

    return null;
}

string Hex(object? value) => Convert.ToInt64(value).ToString("X");

3. Повний помічник з усіма функціями клас сценарію

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

  • Помічник наведений повністю і дійсно викликається з Main. Перевірки діапазону/ID знижують ризик помилки, але кілька викликів не атомарні: вікно може змінитися між ними. Для дії expectedPartner - збережений serial персонажа; це не є перевіркою ціни або вмісту обміну.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var value = ReadTradeValue(1);
        UO.Print(Hex(value));
        return null;
    }

    dynamic ReadTradeValue(dynamic index)
    {
        var total = UO.TradeCount();
        if (Truth(index < 1) || Truth(index >= total + 1))
        {
            return 0;
        }

        return UO.GetTradeOpponent(index);
    }

    string Hex(object? value) => Convert.ToInt64(value).ToString("X");
    bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}

Реалізація команди

C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.

UO.GetTradeOpponent(tradeNum) — UO.GetTradeOpponent(Any)

Параметри: tradeNum (Any)

Результат: dynamic / Any.

Під час виклику:

Внутрішній код реалізації, не самостійний скрипт.

case "gettradeopponent": return new InjectionValue(bridge.GetTradeOpponent(Arg(0)));

UO.GetTradeOpponentName

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

C#-сигнатури

dynamic UO.GetTradeOpponentName(object? tradeNum);

Повертає ім'я партнера, отримане разом із вікном обміну.

Параметри

  • tradeNum — ціле число: поточний номер вікна від 1 до TradeCount(). 0 та негативні значення неприпустимі. Це не serial.

Повернене значення

string: ім'я пакета відкриття обміну; порожній рядок за відсутності вікна чи імені. Чи не запитує ім'я заново.

Поведінка

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

Самостійні C#-скрипти

Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.

Простий приклад

Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.

Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.

object? result = UO.GetTradeOpponentName(1);
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));

1. Пряме читання чи дія – прямий скрипт

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

  • Виклик зроблено один раз, результат збережено у value/result. 0 – перший індекс, 1 – перший номер (див. синтаксис цієї команди). HEX показує числовий serial; Convert.ToString — число чи рядок.
var value = UO.GetTradeOpponentName(1);
UO.Print(Convert.ToString(value));

2. Інший сценарій та параметри - функція сценарію

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

  • total - знімок числа вікон; index – поточний індекс/номер. Приклад перебору нічого не підтверджує. У GetTradeContainer два виклики читають свій контейнер (1) та чужий (2) першого вікна (1).
return  RunScenario();
 object? RunScenario()
{
    var total = UO.TradeCount();
    for (int index = (int)(1); index <= total - 0; index += (int)(1))
    {
        var value = UO.GetTradeOpponentName(index);
        UO.Print(Convert.ToString(index) + ": " + Convert.ToString(value));
    }

    return null;
}

3. Повний помічник з усіма функціями клас сценарію

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

  • Помічник наведений повністю і дійсно викликається з Main. Перевірки діапазону/ID знижують ризик помилки, але кілька викликів не атомарні: вікно може змінитися між ними. Для дії expectedPartner - збережений serial персонажа; це не є перевіркою ціни або вмісту обміну.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var value = ReadTradeValue(1);
        UO.Print(Convert.ToString(value));
        return null;
    }

    dynamic ReadTradeValue(dynamic index)
    {
        var total = UO.TradeCount();
        if (Truth(index < 1) || Truth(index >= total + 1))
        {
            return "";
        }

        return UO.GetTradeOpponentName(index);
    }

    bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}

Реалізація команди

C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.

UO.GetTradeOpponentName(tradeNum) — UO.GetTradeOpponentName(Any)

Параметри: tradeNum (Any)

Результат: dynamic / Any.

Під час виклику:

Внутрішній код реалізації, не самостійний скрипт.

case "gettradeopponentname": return new InjectionValue(bridge.GetTradeOpponentName(Arg(0)));

UO.IsTrade

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

C#-сигнатури

int UO.IsTrade();

Перевіряє наявність відкритого вікна безпечного обміну.

Параметри

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

Повернене значення

int: 1 (умова виконана) - є відкритий обмін; 0 (умова не виконана) - ні.

Результат команди — числовий прапор: 1 означає виконану умову, 0 — невиконану. Після var result = команда (...) перевіряйте if (result != 0) або if (result == 0). Збережіть результат одного виклику: повторний виклик може виконати дію знову або прочитати стан, що вже змінився.

Поведінка

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

Самостійні C#-скрипти

Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.

Простий приклад

Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.

Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.

var result = UO.IsTrade();
UO.Print("IsTrade: " + Convert.ToString(result));

1. Пряме читання чи дія – прямий скрипт

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

  • Виклик зроблено один раз, результат збережено у value/result. 0 – перший індекс, 1 – перший номер (див. синтаксис цієї команди). HEX показує числовий serial; Convert.ToString — число чи рядок.
var value = UO.IsTrade();
UO.Print(Convert.ToString(value));

2. Інший сценарій та параметри - функція сценарію

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

  • before/after — два окремі знімки з інтервалом 500 мілісекунд. Пауза не чекає на конкретний обмін; між читаннями стан може змінитися кілька разів.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var before = UO.IsTrade();
    await Delay(500);
    var after = UO.IsTrade();
    UO.Print(Convert.ToString(before) + " -> " + Convert.ToString(after));
    return null;
}

Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));

3. Повний помічник з усіма функціями клас сценарію

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

  • Помічник наведений повністю і дійсно викликається з Main. Перевірки діапазону/ID знижують ризик помилки, але кілька викликів не атомарні: вікно може змінитися між ними. Для дії expectedPartner - збережений serial персонажа; це не є перевіркою ціни або вмісту обміну.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var value = ReadTradeState();
        UO.Print(Convert.ToString(value));
        return null;
    }

    dynamic ReadTradeState()
    {
        return UO.IsTrade();
    }
}

Реалізація команди

C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.

UO.IsTrade() — UO.IsTrade()

Параметри: Немає параметрів.

Результат: int / Integer.

Під час виклику:

Внутрішній код реалізації, не самостійний скрипт.

case "istrade": return new InjectionValue(bridge.IsTrade());

UO.TradeCheck

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

C#-сигнатури

int UO.TradeCheck(object? windowIndex);
dynamic UO.TradeCheck(object? tradeNum, object? num);
int UO.TradeCheck(object? windowIndex, object? checkbox, object? stateValue);

Читає прапорці згоди; Трипараметрова форма також змінює власний прапорець.

Параметри

  • windowIndex — Ціле число: поточний індекс вікна від 0 до TradeCount()-1. Негативний чи відсутній індекс дає порожній результат. Це не serial.
  • tradeNum — Ціле число: поточний індекс вікна від 0 до TradeCount()-1. Негативний чи відсутній індекс дає порожній результат. Це не serial.
  • num - Тільки двопараметрова форма: 1 - свій прапорець, 2 - прапорець партнера; інші значення дають 0. TradeNum тут починається з 0.
  • checkbox — Лише трипараметрова форма: 0 — свій прапорець, 1 — партнера. Чужий прапор лише читається; інше значення дає 0.
  • stateValue — Тільки при checkbox=0: 0/false знімає згоду, будь-яке ненульове число/true включає. При checkbox=1 значення ігнорується.

Повернене значення

int: 1 (умова виконана) — вибраний прапорець встановлений; 0 (умова не виконано) - знято, вікно відсутня або сторона неправильна. У формі запису повертається стан, а чи не ознака успішної угоди: зняття прапорця повертає 0.

Результат команди — числовий прапор: 1 означає виконану умову, 0 — невиконану. Після var result = команда (...) перевіряйте if (result != 0) або if (result == 0). Збережіть результат одного виклику: повторний виклик може виконати дію знову або прочитати стан, що вже змінився.

Поведінка

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

Самостійні C#-скрипти

Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.

Простий приклад

Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.

Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.

var result = UO.TradeCheck(0);
UO.Print("TradeCheck: " + Convert.ToString(result));

1. Пряме читання чи дія – прямий скрипт

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

  • UO.TradeCheck(0) та UO.TradeCheck(0,1) читають свою згоду першого вікна; UO.TradeCheck(0,2) - чуже. Тут немає запису та немає автоматичного підтвердження.
var own = UO.TradeCheck(0);
var sameOwn = UO.TradeCheck(0, 1);
var other = UO.TradeCheck(0, 2);
UO.Print(Convert.ToString(own) + "/" + Convert.ToString(sameOwn) + "/" + Convert.ToString(other));

2. Інший сценарій та параметри - функція сценарію

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

  • UO.TradeCheck(0,0,false) знімає свою згоду. UO.TradeCheck(0,1,false) тільки читає згоду партнера: false не може змінити чужу сторону. Результат 0 після зняття очікуємо.
return  RunScenario();
 object? RunScenario()
{
    var cleared = UO.TradeCheck(0, 0, false);
    var other = UO.TradeCheck(0, 1, false);
    UO.Print(Convert.ToString(cleared) + "/" + Convert.ToString(other));
    return null;
}

3. Повний помічник з усіма функціями клас сценарію

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

  • Помічник наведений повністю і дійсно викликається з Main. Перевірки діапазону/ID знижують ризик помилки, але кілька викликів не атомарні: вікно може змінитися між ними. Для дії expectedPartner - збережений serial персонажа; це не є перевіркою ціни або вмісту обміну.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var accepted = BothAccepted(0);
        if (Truth(Truth(accepted) == true))
        {
            UO.Print("Both boxes are checked; server completion is not known");
        }

        return null;
    }

    dynamic BothAccepted(dynamic index)
    {
        if (Truth(index < 0) || Truth(index >= UO.TradeCount()))
        {
            return false;
        }

        var own = UO.TradeCheck(index, 1);
        var other = UO.TradeCheck(index, 2);
        return Truth(Truth(own) == true) && Truth(Truth(other) == true);
    }

    bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}

Реалізація команди

C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.

UO.TradeCheck(windowIndex) — UO.TradeCheck(Any)

Параметри: windowIndex (Any)

Результат: int / Integer.

Під час виклику:

Внутрішній код реалізації, не самостійний скрипт.

public int TradeCheck(InjectionValue windowIndex)

            => bridge.TradeCheck(NumberConversions.ToInt(windowIndex), 0, 0, false);

UO.TradeCheck(tradeNum, num) — UO.TradeCheck(Any,Any)

Параметри: tradeNum (Any), num (Any)

Результат: dynamic / Any.

Під час виклику:

Внутрішній код реалізації, не самостійний скрипт.

case "tradecheck":

                    // The compatibility reader uses participants 1/2; the legacy

                    // one/three-argument forms use checkbox indices 0/1.

                    int tradeSide = Arg(1);

                    return new InjectionValue(tradeSide is 1 or 2

                        ? bridge.TradeCheck(Arg(0), tradeSide - 1, 0, false) : 0);

UO.TradeCheck(windowIndex, checkbox, stateValue) — UO.TradeCheck(Any,Any,Any)

Параметри: windowIndex (Any), checkbox (Any), stateValue (Any)

Результат: int / Integer.

Під час виклику:

Внутрішній код реалізації, не самостійний скрипт.

public int TradeCheck(InjectionValue windowIndex, InjectionValue checkbox, InjectionValue stateValue)

            => bridge.TradeCheck(NumberConversions.ToInt(windowIndex), NumberConversions.ToInt(checkbox), NumberConversions.ToInt(stateValue), true);

UO.TradeContainer

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

C#-сигнатури

string UO.TradeContainer(object? windowIndex);

Повертає serial свого контейнера обміну як hex-рядок.

Параметри

  • windowIndex — Ціле число: поточний індекс вікна від 0 до TradeCount()-1. Негативний чи відсутній індекс дає порожній результат. Це не serial.

Повернене значення

string: hex виду "0x40000011"; "0x00000000" за відсутності вікна. Це ID свого контейнера, не bool і не пустий рядок.

Поведінка

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

Самостійні C#-скрипти

Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.

Простий приклад

Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.

Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.

var result = UO.TradeContainer(0);
UO.Print("TradeContainer: " + Convert.ToString(result));

1. Пряме читання чи дія – прямий скрипт

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

  • Виклик зроблено один раз, результат збережено у value/result. 0 – перший індекс, 1 – перший номер (див. синтаксис цієї команди). HEX показує числовий serial; Convert.ToString — число чи рядок.
var value = UO.TradeContainer(0);
UO.Print(Convert.ToString(value));

2. Інший сценарій та параметри - функція сценарію

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

  • total - знімок числа вікон; index – поточний індекс/номер. Приклад перебору нічого не підтверджує. У GetTradeContainer два виклики читають свій контейнер (1) та чужий (2) першого вікна (1).
return  RunScenario();
 object? RunScenario()
{
    var total = UO.TradeCount();
    for (int index = (int)(0); index <= total - 1; index += (int)(1))
    {
        var value = UO.TradeContainer(index);
        UO.Print(Convert.ToString(index) + ": " + Convert.ToString(value));
    }

    return null;
}

3. Повний помічник з усіма функціями клас сценарію

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

  • Помічник наведений повністю і дійсно викликається з Main. Перевірки діапазону/ID знижують ризик помилки, але кілька викликів не атомарні: вікно може змінитися між ними. Для дії expectedPartner - збережений serial персонажа; це не є перевіркою ціни або вмісту обміну.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var value = ReadTradeValue(0);
        UO.Print(Convert.ToString(value));
        return null;
    }

    dynamic ReadTradeValue(dynamic index)
    {
        var total = UO.TradeCount();
        if (Truth(index < 0) || Truth(index >= total + 0))
        {
            return "0x00000000";
        }

        return UO.TradeContainer(index);
    }

    bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}

Реалізація команди

C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.

UO.TradeContainer(windowIndex) — UO.TradeContainer(Any)

Параметри: windowIndex (Any)

Результат: string / String.

Під час виклику:

Внутрішній код реалізації, не самостійний скрипт.

public string TradeContainer(InjectionValue windowIndex) => NumberConversions.ToHex(bridge.TradeContainer(NumberConversions.ToInt(windowIndex)));

UO.TradeCount

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

C#-сигнатури

int UO.TradeCount();

Повертає кількість відкритих вікон обміну.

Параметри

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

Повернене значення

int: кількість вікон від 0. Ця кількість, а не bool; використовуйте > 0 для перевірки наявності.

Поведінка

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

Самостійні C#-скрипти

Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.

Простий приклад

Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.

Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.

var result = UO.TradeCount();
UO.Print("TradeCount: " + Convert.ToString(result));

1. Пряме читання чи дія – прямий скрипт

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

  • Виклик зроблено один раз, результат збережено у value/result. 0 – перший індекс, 1 – перший номер (див. синтаксис цієї команди). HEX показує числовий serial; Convert.ToString — число чи рядок.
var value = UO.TradeCount();
UO.Print(Convert.ToString(value));

2. Інший сценарій та параметри - функція сценарію

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

  • before/after — два окремі знімки з інтервалом 500 мілісекунд. Пауза не чекає на конкретний обмін; між читаннями стан може змінитися кілька разів.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var before = UO.TradeCount();
    await Delay(500);
    var after = UO.TradeCount();
    UO.Print(Convert.ToString(before) + " -> " + Convert.ToString(after));
    return null;
}

Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));

3. Повний помічник з усіма функціями клас сценарію

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

  • Помічник наведений повністю і дійсно викликається з Main. Перевірки діапазону/ID знижують ризик помилки, але кілька викликів не атомарні: вікно може змінитися між ними. Для дії expectedPartner - збережений serial персонажа; це не є перевіркою ціни або вмісту обміну.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var value = ReadTradeState();
        UO.Print(Convert.ToString(value));
        return null;
    }

    dynamic ReadTradeState()
    {
        return UO.TradeCount();
    }
}

Реалізація команди

C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.

UO.TradeCount() — UO.TradeCount()

Параметри: Немає параметрів.

Результат: int / Integer.

Під час виклику:

Внутрішній код реалізації, не самостійний скрипт.

public int TradeCount() => bridge.TradeCount();

UO.TradeName

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

C#-сигнатури

string UO.TradeName(object? windowIndex);

Повертає ім'я партнера із вікна обміну за індексом від нуля.

Параметри

  • windowIndex — Ціле число: поточний індекс вікна від 0 до TradeCount()-1. Негативний чи відсутній індекс дає порожній результат. Це не serial.

Повернене значення

string: збережене ім'я партнера; порожній рядок за відсутності вікна/імені. Назва предмета-контейнера не використовується.

Поведінка

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

Самостійні C#-скрипти

Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.

Простий приклад

Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.

Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.

var result = UO.TradeName(0);
UO.Print("TradeName: " + Convert.ToString(result));

1. Пряме читання чи дія – прямий скрипт

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

  • Виклик зроблено один раз, результат збережено у value/result. 0 – перший індекс, 1 – перший номер (див. синтаксис цієї команди). HEX показує числовий serial; Convert.ToString — число чи рядок.
var value = UO.TradeName(0);
UO.Print(Convert.ToString(value));

2. Інший сценарій та параметри - функція сценарію

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

  • total - знімок числа вікон; index – поточний індекс/номер. Приклад перебору нічого не підтверджує. У GetTradeContainer два виклики читають свій контейнер (1) та чужий (2) першого вікна (1).
return  RunScenario();
 object? RunScenario()
{
    var total = UO.TradeCount();
    for (int index = (int)(0); index <= total - 1; index += (int)(1))
    {
        var value = UO.TradeName(index);
        UO.Print(Convert.ToString(index) + ": " + Convert.ToString(value));
    }

    return null;
}

3. Повний помічник з усіма функціями клас сценарію

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

  • Помічник наведений повністю і дійсно викликається з Main. Перевірки діапазону/ID знижують ризик помилки, але кілька викликів не атомарні: вікно може змінитися між ними. Для дії expectedPartner - збережений serial персонажа; це не є перевіркою ціни або вмісту обміну.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var value = ReadTradeValue(0);
        UO.Print(Convert.ToString(value));
        return null;
    }

    dynamic ReadTradeValue(dynamic index)
    {
        var total = UO.TradeCount();
        if (Truth(index < 0) || Truth(index >= total + 0))
        {
            return "";
        }

        return UO.TradeName(index);
    }

    bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}

Реалізація команди

C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.

UO.TradeName(windowIndex) — UO.TradeName(Any)

Параметри: windowIndex (Any)

Результат: string / String.

Під час виклику:

Внутрішній код реалізації, не самостійний скрипт.

public string TradeName(InjectionValue windowIndex) => bridge.TradeName(NumberConversions.ToInt(windowIndex));

UO.TradeOpponent

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

C#-сигнатури

string UO.TradeOpponent(object? windowIndex);

Повертає serial контейнер партнера як hex-рядок; це не ID персонажа.

Параметри

  • windowIndex — Ціле число: поточний індекс вікна від 0 до TradeCount()-1. Негативний чи відсутній індекс дає порожній результат. Це не serial.

Повернене значення

string: hex serial чужого контейнера ID2; "0x00000000" за відсутності вікна. Для ID персонажа використовуйте GetTradeOpponent(index + 1).

Поведінка

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

Самостійні C#-скрипти

Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.

Простий приклад

Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.

Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.

var result = UO.TradeOpponent(0);
UO.Print("TradeOpponent: " + Convert.ToString(result));

1. Пряме читання чи дія – прямий скрипт

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

  • Виклик зроблено один раз, результат збережено у value/result. 0 – перший індекс, 1 – перший номер (див. синтаксис цієї команди). HEX показує числовий serial; Convert.ToString — число чи рядок.
var value = UO.TradeOpponent(0);
UO.Print(Convert.ToString(value));

2. Інший сценарій та параметри - функція сценарію

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

  • total - знімок числа вікон; index – поточний індекс/номер. Приклад перебору нічого не підтверджує. У GetTradeContainer два виклики читають свій контейнер (1) та чужий (2) першого вікна (1).
return  RunScenario();
 object? RunScenario()
{
    var total = UO.TradeCount();
    for (int index = (int)(0); index <= total - 1; index += (int)(1))
    {
        var value = UO.TradeOpponent(index);
        UO.Print(Convert.ToString(index) + ": " + Convert.ToString(value));
    }

    return null;
}

3. Повний помічник з усіма функціями клас сценарію

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

  • Помічник наведений повністю і дійсно викликається з Main. Перевірки діапазону/ID знижують ризик помилки, але кілька викликів не атомарні: вікно може змінитися між ними. Для дії expectedPartner - збережений serial персонажа; це не є перевіркою ціни або вмісту обміну.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var value = ReadTradeValue(0);
        UO.Print(Convert.ToString(value));
        return null;
    }

    dynamic ReadTradeValue(dynamic index)
    {
        var total = UO.TradeCount();
        if (Truth(index < 0) || Truth(index >= total + 0))
        {
            return "0x00000000";
        }

        return UO.TradeOpponent(index);
    }

    bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}

Реалізація команди

C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.

UO.TradeOpponent(windowIndex) — UO.TradeOpponent(Any)

Параметри: windowIndex (Any)

Результат: string / String.

Під час виклику:

Внутрішній код реалізації, не самостійний скрипт.

public string TradeOpponent(InjectionValue windowIndex) => NumberConversions.ToHex(bridge.TradeOpponent(NumberConversions.ToInt(windowIndex)));

Clone this wiki locally