Skip to content

UO Topic diagnostics introspection

Codex edited this page Oct 12, 2026 · 7 revisions

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

Відомості про об’єкти та команди

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

Перегляд даних предметів, клітин карти та ігрових вікон, а також перевірка імен і параметрів команд API. Наявність команди в довіднику не гарантує, що конкретна ігрова дія доступна зараз.

Розділи

Тема Команди та пояснення
Довідка UO.Help
Виведення даних об’єкта UO.Dump
Відомості про об’єкт UO.Info
Відомості про клітину карти UO.InfoTile
Відомості про ігрове вікно UO.InfoGump
Перевірка назви команди UO.ApiNameExists
Перевірка сигнатури UO.ApiSignatureExists
Перевірка параметра UO.ApiParameterExists
Версія API UO.Version

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

Огляд

UO.Help · UO.Dump · UO.Info · UO.InfoColor · UO.GetInfo · UO.ExtendedInfo · UO.InfoTile · UO.InfoGump · UO.InfoGumps · UO.ApiNameExists · UO.ApiParameterExists · UO.ApiSignatureExists · UO.Version · UO.ClientInfo

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

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

UO.InfoGump

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

UO.InfoGump();

UO.ApiNameExists

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

return UO.ApiNameExists("UO.GetType");

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


UO.ApiNameExists

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

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

int UO.ApiNameExists(object? name);

Перевіряє реєстрацію імені викликаної нативної функції.

Параметри

  • name — Обов'язкова string: точне зареєстроване ім'я, не відображення виклику. Регістр і прогалини з обох боків не важливі; UO. автоматично не додається. Порожнє чи невідоме ім'я дає 0. Процедури користувача не враховуються.

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

int: 1 — ім’я зареєстроване, 0 — ні. У C# використовуйте result != 0 або result == 0; порівняння int з true чи false недопустиме. Реєстрація не підтверджує дію сервера.

Поведінка

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

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

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

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

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

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

1. UO.ApiNameExists - 1 - прямий скрипт

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

  • Перший приклад перевіряє ігрове ім'я з явним UO. та повертає 1. Точне ім'я, що перевіряється, і кількість аргументів, коли воно потрібно, видно у виклику.
return UO.ApiNameExists("UO.GetType");

2. UO.ApiNameExists — 2 — функція сценарію

Приклад перевіряє лише реєстрацію нативних імен. Convert.ToInt32 — метод .NET, а не запис UO API, тому ApiNameExists повертає 0. Сам метод доступний у звичайному C#.

return  RunScenario();
 object? RunScenario()
{
    var name = "Convert.ToInt32";
    return UO.ApiNameExists(name);
    return null;
}

3. UO.ApiNameExists - 3 - клас сценарію

Числові результати окремо порівнюються з 0; оператор && застосовується вже до двох значень bool. Для цих імен результат — false.

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()
    {
        return HasBoth("GetType", "UO.GetType");
        return null;
    }

    dynamic HasBoth(dynamic first, dynamic second)
    {
        return UO.ApiNameExists(first) != 0 && UO.ApiNameExists(second) != 0;
    }
}

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

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

UO.ApiNameExists(name) — UO.ApiNameExists(String)

Параметри: name (String)

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

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

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

public int ApiNameExists(string name)

        {

            string normalized = NormalizeApiName(name);

            return metadata.NativeSubrutines.Any(definition =>

                definition.Name.Equals(normalized, StringComparison.OrdinalIgnoreCase)) ? 1 : 0;

        }

UO.ApiParameterExists

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

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

int UO.ApiParameterExists(object? name);

Перевіряє реєстрацію значення runtime чи іменованого об'єкта.

Параметри

  • name — Обов'язкова string: точне зареєстроване ім'я, не відображення виклику. Регістр і прогалини з обох боків не важливі; UO. автоматично не додається. Порожнє чи невідоме ім'я дає 0. Процедури користувача не враховуються.

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

int: 1 — ім’я зареєстроване, 0 — ні. У C# використовуйте result != 0 або result == 0; порівняння int з true чи false недопустиме. Реєстрація не підтверджує дію сервера.

Поведінка

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

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

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

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

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

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

1. UO.ApiParameterExists - 1 - прямий скрипт

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

  • Перший приклад перевіряє ігрове ім'я з явним UO. та повертає 1. Точне ім'я, що перевіряється, і кількість аргументів, коли воно потрібно, видно у виклику.
return UO.ApiParameterExists("UO.GetHP");

2. UO.ApiParameterExists — 2 — функція сценарію

Перевіряється зареєстрований селектор backpack, результат — 1. Це не перевірка параметрів методів C# та не підтвердження існування рюкзака у світі.

return  RunScenario();
 object? RunScenario()
{
    var name = "backpack";
    return UO.ApiParameterExists(name);
    return null;
}

3. UO.ApiParameterExists - 3 - клас сценарію

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

  • Третій приклад містить повну допоміжну функцію. Він порівнює віддалену коротку форму або арність, що не підтримується, з доступною формою. Параметри name, first, second та count передають імена/кількість без змін. Результат – 0 для перевірок дзвінка та "0:1" для перевірки значень.
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()
    {
        return CompareNames("GetHP", "UO.GetHP");
        return null;
    }

    dynamic CompareNames(dynamic first, dynamic second)
    {
        return Convert.ToString(UO.ApiParameterExists(first)) + ":" + Convert.ToString(UO.ApiParameterExists(second));
    }
}

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

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

UO.ApiParameterExists(name) — UO.ApiParameterExists(String)

Параметри: name (String)

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

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

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

public int ApiParameterExists(string name)

        {

            string value = (name ?? string.Empty).Trim();

            if (value.Length == 0)

                return 0;



            if (Metadata.ShortcutVariables.Any(item => item.Equals(value, StringComparison.OrdinalIgnoreCase)))

                return 1;



            return metadata.IntrinsicVariableExists(value) ? 1 : 0;

        }

UO.ApiSignatureExists

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

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

int UO.ApiSignatureExists(object? name, object? argumentCount);

Перевіряє реєстрацію імені із заданим числом аргументів.

Параметри

  • name — Обов'язкова string: точне зареєстроване ім'я, не відображення виклику. Регістр і прогалини з обох боків не важливі; UO. автоматично не додається. Порожнє чи невідоме ім'я дає 0. Процедури користувача не враховуються.
  • argumentCount - Обов'язковий int: повна кількість позиційних аргументів, включаючи явно передані необов'язкові. Негативну чи непідтримувану кількість дає 0. Типи самих аргументів не перевіряються.

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

int: 1 — ім’я зареєстроване, 0 — ні. У C# використовуйте result != 0 або result == 0; порівняння int з true чи false недопустиме. Реєстрація не підтверджує дію сервера.

Поведінка

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

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

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

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

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

var result = UO.ApiSignatureExists("UO.GetType", 1);
UO.Print("ApiSignatureExists: " + Convert.ToString(result));

1. UO.ApiSignatureExists - 1 - прямий скрипт

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

  • Перший приклад перевіряє ігрове ім'я з явним UO. та повертає 1. Точне ім'я, що перевіряється, і кількість аргументів, коли воно потрібно, видно у виклику.
return UO.ApiSignatureExists("UO.GetType",1);

2. UO.ApiSignatureExists — 2 — функція сценарію

Перевіряються форми UO.FindType з одним і нулем аргументів. Результат — рядок "1:0"; нульова форма не зареєстрована.

return  RunScenario();
 object? RunScenario()
{
    return Convert.ToString(UO.ApiSignatureExists("UO.FindType", 1)) + ":" + Convert.ToString(UO.ApiSignatureExists("UO.FindType", 0));
    return null;
}

3. UO.ApiSignatureExists - 3 - клас сценарію

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

  • Третій приклад містить повну допоміжну функцію. Він порівнює віддалену коротку форму або арність, що не підтримується, з доступною формою. Параметри name, first, second та count передають імена/кількість без змін. Результат – 0 для перевірок дзвінка та "0:1" для перевірки значень.
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()
    {
        return CheckForm("UO.GetType", 0);
        return null;
    }

    dynamic CheckForm(dynamic name, dynamic count)
    {
        return UO.ApiSignatureExists(name, count);
    }
}

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

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

UO.ApiSignatureExists(name, argumentCount) — UO.ApiSignatureExists(String,Integer)

Параметри: name (String), argumentCount (Integer)

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

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

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

public int ApiSignatureExists(string name, int argumentCount)

            => metadata.NativeSubrutineExists(NormalizeApiName(name), argumentCount) ? 1 : 0;

UO.ClientInfo

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

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

dynamic UO.ClientInfo();

Читає коротку інформацію про запущеного клієнта.

Параметри

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

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

Array із трьох string: [0] – назва продукту, [1] – версія запущеного клієнта, [2] – каталог клієнта. Індекси починаються з 0. Це не рядок JSON і не словник.

Поведінка

  • Дані читаються з RuntimeProductName, RuntimeProductVersion та ClientPath. Команда нічого не змінює і не надсилає серверу.
  • Використовуйте ArrayLength перед індексуванням у спільній допоміжній функції. Не плутайте інформацію про клієнта з параметрами персонажа або версією сервера.
  • Читає інформацію про поточного клієнта ClassicUO.

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

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

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

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

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

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

1. Прочитати всі три поля - прямий скрипт

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

  • 0 - продукт, 1 - версія, 2 - каталог. Значення версії береться під час запуску, у прикладі воно не зафіксовано.
var info = UO.ClientInfo();
UO.Print("Product: " + info[0]);
UO.Print("Client version: " + info[1]);
UO.Print("Client folder: " + info[2]);

2. Перебрати масив – функція сценарію

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

  • ArrayLength повертає кількість полів. Останній допустимий індекс дорівнює довжині мінус 1.
return  RunScenario();
 object? RunScenario()
{
    var info = UO.ClientInfo();
    var i = 0;
    while (Truth(i < ArrayLength(info)))
    {
        UO.Print(Convert.ToString(i) + ": " + info[i]);
        i = i + 1;
    }

    return null;
}

int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

3. Повна функція отримання підпису клієнта – клас сценарію

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

  • ClientCaption повертає рядок із назви та версії. Початковий масив не змінюється.
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()
    {
        UO.Print(ClientCaption());
        return null;
    }

    dynamic ClientCaption()
    {
        var info = UO.ClientInfo();
        if (Truth(ArrayLength(info) < 2))
        {
            return "Client information unavailable";
        }

        return info[0] + " / " + info[1];
    }

    int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;
    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.ClientInfo() — UO.ClientInfo()

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

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

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

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

case "clientinfo":

                    return new InjectionValue(new[]

                    {

                        new InjectionValue(bridge.RuntimeProductName),

                        new InjectionValue(bridge.RuntimeProductVersion),

                        new InjectionValue(bridge.ClientPath)

                    });

UO.Dump

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

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

void UO.Dump();
void UO.Dump(object? @object);

Друкує діагностичний знімок відомого клієнта об'єкта.

Параметри

  • object — Необов'язковий serial/посилання. Без аргументу використовується bridge. LastTarget.

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

void - значення, що повертається немає.

Поведінка

  • Повідомлення містить serial як 0xXXXXXXXX, ім'я, graphic/type, hue та X/Y/Z. Поля читаються із локальної моделі; відсутній об'єкт дає порожнє ім'я та нульові поля. Команда не просить свіжі server properties.

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

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

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

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

Команда викликається окремим рядком. Повідомлення перед нею показує початок виклику, а не підтвердження дії сервера.

UO.Print("Calling UO.Dump");
UO.Dump();

1. Знімок останньої мети – прямий скрипт

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

  • Відсутній аргумент означає LastTarget.
UO.Dump();

2. Знімок себе – функція сценарію

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

  • Усі поля ставляться до свого персонажа.
return  RunScenario();
 object? RunScenario()
{
    UO.Dump("self");
    return null;
}

3. Знімок перевіреного об'єкта – клас сценарію

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

  • Перевірка Exists відокремлює відсутню модель від об'єкта з нульовими полями.
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 id = UO.LastTarget();
        if (Truth(UO.Exists(id)))
        {
            UO.Dump(id);
        }

        return null;
    }

    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.Dump() — UO.Dump()

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

Результат: void / Unit.

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

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

case "dump":

                {

                    int id = Arg(0, bridge.LastTarget);

                    SystemMessage($"0x{id:X8} {bridge.GetName(id)} type=0x{bridge.GetGraphics(id):X4} hue=0x{bridge.GetColor(id):X4} xyz={bridge.GetX(id)},{bridge.GetY(id)},{bridge.GetZ(id)}");

                    break;

                }

UO.Dump(object) — UO.Dump(Any)

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

Результат: void / Unit.

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

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

case "dump":

                {

                    int id = Arg(0, bridge.LastTarget);

                    SystemMessage($"0x{id:X8} {bridge.GetName(id)} type=0x{bridge.GetGraphics(id):X4} hue=0x{bridge.GetColor(id):X4} xyz={bridge.GetX(id)},{bridge.GetY(id)},{bridge.GetZ(id)}");

                    break;

                }

UO.ExtendedInfo

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

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

dynamic UO.ExtendedInfo();

Повертає чотири поля поточної конфігурації клієнта з'єднання.

Параметри

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

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

Array [ClientPath:string, CurrentProfilePath:string, GameServerAddress:string, GameServerPort:int].

Поведінка

  • Порядок полів фіксовано. ClientPath та CurrentProfilePath — клієнтські шляхи. GameServerAddress та GameServerPort читають глобальні Settings.GlobalSettings.IP/Port: це налаштована адреса, не перевірка фактичного peer менеджерської сесії. Список не містить пароля і не запитує відомості сервера. Порожні значення можливі до вибору профілю/з'єднання.

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

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

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

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

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

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

1. Вивести поля - прямий скрипт

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

  • Масив містить змішані типи, тому використовується Convert. ToString.
var info = UO.ExtendedInfo();
for (int i = (int)(0); i <= ArrayLength(info)-1; i += (int)(1))
{
    UO.Print(Convert.ToString(info[i]));
}

int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;

2. Вивести адресу та порт - функція сценарію

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

  • Індекси 2 та 3 — адреса та порт.
return  RunScenario();
 object? RunScenario()
{
    var info = UO.ExtendedInfo();
    UO.Print(Convert.ToString(info[2]) + ":" + Convert.ToString(info[3]));
    return null;
}

3. Прочитати шлях профілю - клас сценарію

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

  • Індекс 1 — CurrentProfilePath, а не ClientPath.
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 info = UO.ExtendedInfo();
        var path = info[1];
        UO.Print(path);
        return null;
    }
}

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

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

UO.ExtendedInfo() — UO.ExtendedInfo()

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

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

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

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

case "extendedinfo":

                    return new InjectionValue(new[] { new InjectionValue(bridge.ClientPath), new InjectionValue(bridge.CurrentProfilePath), new InjectionValue(bridge.GameServerAddress), new InjectionValue(bridge.GameServerPort) });

UO.GetInfo

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

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

string UO.GetInfo(object? arg);

Повертає ім'я персонажа лише для точного селектора character.

Параметри

  • arg - string. Точне реєстрозалежне значення character викликає GetName("self"); будь-яке інше значення не розпізнається.

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

string – ім'я свого персонажа для character; рядковий літерал UNKNOWN для решти аргументів. За відсутності персонажа ім'я може бути порожнім.

Поведінка

  • Порівняння StringComparison. Ordinal реєстрозалежно. Підтримується лише селектор character. Команда не надсилає мережевих запитів: вона читає ім'я з локальної моделі персонажа. Вікно FillInfoWindow керується окремо.

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

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

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

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

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

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

1. Ім'я персонажа – прямий скрипт

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

  • Точний літерал character читає self.
var name = UO.GetInfo("character");
UO.Print(name);

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

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

  • Character не збігається та повертає UNKNOWN.
return  RunScenario();
 object? RunScenario()
{
    var value = UO.GetInfo("Character");
    UO.Print(value);
    return null;
}

3. Невідомий селектор – клас сценарію

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

  • profile не підтримується цією реалізацією.
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 = UO.GetInfo("profile");
        UO.Print(value);
        return null;
    }
}

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

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

UO.GetInfo(arg) — UO.GetInfo(String)

Параметри: arg (String)

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

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

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

private string GetInfo(string arg)

        {

            if (arg.Equals("character", StringComparison.Ordinal))

                return GetName("self");



            return "UNKNOWN";

        }

UO.Help

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

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

void UO.Help();

Параметри

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

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

void - значення немає. Викликайте окремим рядком; завершення не підтверджує дію сервера.

Поведінка

  • Змінює або показує лише вказані локальні дані. Серверного підтвердження цієї команди немає.

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

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

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

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

Команда викликається окремим рядком. Повідомлення перед нею показує початок виклику, а не підтвердження дії сервера.

UO.Print("Calling UO.Help");
UO.Help();

1. Прямий виклик – прямий скрипт

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

  • Показує локальну підказку про C# IDE.
UO.Help();

2. Явний варіант – функція сценарію

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

  • ExecuteLegacyManualAlias виводить рядок про UO.*, налаштований префікс чату та Options > C# IDE > Manual через SystemMessage. Запит сервера не надсилається.
return  RunScenario();
 object? RunScenario()
{
    UO.Help();
    UO.OpenIDE();
    return null;
}

3. Повна допоміжна функція – клас сценарію

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

  • Змінює або показує лише вказані локальні дані. Серверного підтвердження цієї команди немає.
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()
    {
        UO.Help();
        UO.Print("Options > C# IDE > Manual");
        return null;
    }
}

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

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

UO.Help() — UO.Help()

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

Результат: void / Unit.

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

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

case "help": SystemMessage("C# Scripts IDE: use UO.* in scripts or the configured chat prefix. Open Options > C# Scripts IDE > Manual."); break;

UO.Info

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

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

void UO.Info();
void UO.Info(object? @object);

Показує відомості про завантажений предмет або персонаж: serial, graphic/type, колір, координати та властивості об'єкта.

Параметри

  • object — Serial конкретного предмета/персонажу: число, hex/десятковий рядок, self/backpack/lasttarget/lastobject/lastcontainer/lastcorpse/finditem/laststatus або збережене ім'я AddObject. Це не type. Об'єкт має бути завантажений; перед дією перевіряйте Exists. У формі без аргументу звичайна процедура використовує lasttarget; Інтерактивна команда пропонує вибрати об'єкт мишею.

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

void - значення, що повертається немає. Результат не можна присвоїти як serial, graphic/type, кількість або true/false. Інформація виводиться в інтерфейс/журнал, а не повертається до скрипту.

Поведінка

  • Тип об'єкта визначає додаткові поля: предмет має Container, Layer, Amount; у персонажа - HP/Mana/Stamina, notoriety та інші стани. Недоступний об'єкт дає повідомлення, а не інформацію про інший об'єкт.
  • Info відноситься до об'єктів; InfoGump/InfoGumps — до серверних вікон, InfoTile — до землі/статики.

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

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

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

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

Команда викликається окремим рядком. Повідомлення перед нею показує початок виклику, а не підтвердження дії сервера.

UO.Print("Calling UO.Info");
UO.Info();

1. Відомості про себе зі скрипта – прямий скрипт

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

  • object = self - власний персонаж.
  • Текст виводиться до журналу. У Info немає рядка, що повертається.
UO.Info("self");

2. Перевірити іменований об'єкт – функція сценарію

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

  • chest має бути заданий через AddObject; це serial скрині.
  • Exists запобігає запиту відомостей про відсутній об'єкт.
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.Exists("chest")))
    {
        UO.Info("chest");
    }
    else
    {
        UO.Print("Chest is not loaded");
    }

    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. Остання мета та окреме читання type — клас сценарію

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

  • Info() у цій процедурі вибирає lasttarget.
  • GetGraphic окремо повертає числовий graphic/type. Сам Info нічого не повертає.
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()
    {
        if (Truth(UO.Exists("lasttarget")))
        {
            UO.Info();
            var graphic = UO.GetGraphic("lasttarget");
            UO.Print(UO.Int2Hex(graphic));
        }

        return null;
    }

    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.Info() — UO.Info()

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

Результат: void / Unit.

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

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

case "info":

                {

                    if (arguments.Length == 0 && bridge.RequestInteractiveObjectInfoTarget() != 0)

                        break;

                    int id = Arg(0, bridge.LastTarget);

                    SystemMessage(bridge.GetObjectInfoText(id));

                    break;

                }

UO.Info(object) — UO.Info(Any)

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

Результат: void / Unit.

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

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

case "info":

                {

                    if (arguments.Length == 0 && bridge.RequestInteractiveObjectInfoTarget() != 0)

                        break;

                    int id = Arg(0, bridge.LastTarget);

                    SystemMessage(bridge.GetObjectInfoText(id));

                    break;

                }

UO.InfoColor

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

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

void UO.InfoColor();
void UO.InfoColor(object? @object);

Друкує відомий hue об'єкт.

Параметри

  • object - Необов'язковий serial/аліас. Без аргументу - bridge. LastTarget, не self.

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

void - значення немає. Викликайте окремим рядком; завершення не підтверджує дію сервера.

Поведінка

  • ExecuteLegacyManualAlias читає bridge.GetColor, форматує 0x з X4 і виводить через SystemMessage. Для значення int використовуйте GetColor; результат цієї команди не повертає hue.
  • Читається локальний колір; невідомий об'єкт дає значення GetColor за правилами bridge (зазвичай 0). Нульовий hue сам собою не доводить відсутність об'єкта.

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

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

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

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

Команда викликається окремим рядком. Повідомлення перед нею показує початок виклику, а не підтвердження дії сервера.

UO.Print("Calling UO.InfoColor");
UO.InfoColor();

1. Прямий виклик – прямий скрипт

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

  • Друкує відомий hue об'єкт.
UO.InfoColor();

2. Явний варіант – функція сценарію

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

  • ExecuteLegacyManualAlias читає bridge.GetColor, форматує 0x з X4 і виводить через SystemMessage. Для значення int використовуйте GetColor; результат цієї команди не повертає hue.
return  RunScenario();
 object? RunScenario()
{
    UO.InfoColor("self");
    return null;
}

3. Повна допоміжна функція – клас сценарію

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

  • Читається локальний колір; невідомий об'єкт дає значення GetColor за правилами bridge (зазвичай 0). Нульовий hue сам собою не доводить відсутність об'єкта.
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()
    {
        if (Truth(UO.Exists("lasttarget")))
        {
            UO.InfoColor("lasttarget");
        }

        return null;
    }

    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.InfoColor() — UO.InfoColor()

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

Результат: void / Unit.

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

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

case "infocolor": SystemMessage($"0x{bridge.GetColor(Arg(0, bridge.LastTarget)):X4}"); break;

UO.InfoColor(object) — UO.InfoColor(Any)

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

Результат: void / Unit.

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

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

case "infocolor": SystemMessage($"0x{bridge.GetColor(Arg(0, bridge.LastTarget)):X4}"); break;

UO.InfoGump

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

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

void UO.InfoGump();
void UO.InfoGump(object? gump);

Відкриває докладний інспектор серверного гампа.

Параметри

  • gump — Необов'язковий селектор вікна. int або числовий рядок: спочатку шукається точний збіг GumpID/serial, потім індекс з 0. -1 - вибраний цим скриптом гамп, а якщо його немає - останній у поточному списку. Інші негативні int зберігають 32-бітний ID. Це селектор, на відміну від суворого GumpIndex в NumGump*.

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

void – нічого не повертає. Не можна інтерпретувати результат як підтвердження сервера чи bool.

Поведінка

  • Працює з активними серверними гампами. Рюкзак, карта, налаштування та інші локальні вікна не входять до цього списку. Один виклик читає дані у ігровому потоці; різні дзвінки можуть побачити різні стани списку.
  • Інспектор показує serial/GumpID, положення, розміри, сторінки, кнопки та їх ButtonID, перемикачі, поля введення та дерево контролів. Текст можна виділяти та копіювати.
  • InfoGump без аргументів використовує вибране/останнє вікно. InfoGumps без аргументів показує таблицю індексів та ID всіх вікон. Аргумент обох команд відкриває докладний інспектор одного вікна.
  • Відкриття докладного інспектора робить досліджуваний гамп обраним для SendGumpSelect (buttonId). За відсутності вікна виводиться повідомлення; це не повертає bool.

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

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

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

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

Команда викликається окремим рядком. Повідомлення перед нею показує початок виклику, а не підтвердження дії сервера.

UO.Print("Calling UO.InfoGump");
UO.InfoGump();

1. Відкрити інспектор - прямий скрипт

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

  • Аргументів немає: InfoGump показує вибране/останнє вікно, InfoGumps — список вікон.
UO.InfoGump();

2. Дослідити конкретний ID - функція сценарію

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

  • 0x87654321 — приклад ID зі старшим бітом. Він порівнюється точно, а чи не замінюється останнім вікном.
return  RunScenario();
 object? RunScenario()
{
    UO.InfoGump(0x87654321);
    return null;
}

3. Переглянути список, а потім конкретне вікно — клас сценарію

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

  • Перший дзвінок показує список. Потім читається GumpID першого вікна та відкривається докладний інспектор; при однакових ID буде обрано перший збіг.
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()
    {
        UO.InfoGumps();
        if (Truth(UO.GetGumpsCount() > 0))
        {
            var id = UO.GetGumpID(0);
            UO.InfoGump(id);
        }

        return null;
    }

    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.InfoGump() — UO.InfoGump()

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

Результат: void / Unit.

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

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

public void InfoGump()

        {

            // Action command: no active server gump is a normal no-op/error-report case,

            // not a runtime exception. The ClassicUO bridge reports the condition.

            bridge.ShowGumpInspector(-1);

        }

UO.InfoGump(gump) — UO.InfoGump(Any)

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

Результат: void / Unit.

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

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

public void InfoGump(InjectionValue gump)

        {

            bridge.ShowGumpInspector(NumberConversions.ToInt(gump));

        }

UO.InfoGumps

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

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

void UO.InfoGumps();
void UO.InfoGumps(object? gump);

Без аргументу відкриває список активних серверних гампів; з аргументом – докладний інспектор вибраного гампа.

Параметри

  • gump — Необов'язковий селектор вікна. int або числовий рядок: спочатку шукається точний збіг GumpID/serial, потім індекс з 0. -1 - вибраний цим скриптом гамп, а якщо його немає - останній у поточному списку. Інші негативні int зберігають 32-бітний ID. Це селектор, на відміну від суворого GumpIndex в NumGump*.

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

void – нічого не повертає. Не можна інтерпретувати результат як підтвердження сервера чи bool.

Поведінка

  • Працює з активними серверними гампами. Рюкзак, карта, налаштування та інші локальні вікна не входять до цього списку. Один виклик читає дані у ігровому потоці; різні дзвінки можуть побачити різні стани списку.
  • Інспектор показує serial/GumpID, положення, розміри, сторінки, кнопки та їх ButtonID, перемикачі, поля введення та дерево контролів. Текст можна виділяти та копіювати.
  • InfoGump без аргументів використовує вибране/останнє вікно. InfoGumps без аргументів показує таблицю індексів та ID всіх вікон. Аргумент обох команд відкриває докладний інспектор одного вікна.
  • Відкриття докладного інспектора робить досліджуваний гамп обраним для SendGumpSelect (buttonId). За відсутності вікна виводиться повідомлення; це не повертає bool.

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

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

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

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

Команда викликається окремим рядком. Повідомлення перед нею показує початок виклику, а не підтвердження дії сервера.

UO.Print("Calling UO.InfoGumps");
UO.InfoGumps();

1. Відкрити інспектор - прямий скрипт

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

  • Аргументів немає: InfoGump показує вибране/останнє вікно, InfoGumps — список вікон.
UO.InfoGumps();

2. Дослідити конкретний ID - функція сценарію

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

  • 0x87654321 — приклад ID зі старшим бітом. Він порівнюється точно, а чи не замінюється останнім вікном.
return  RunScenario();
 object? RunScenario()
{
    UO.InfoGumps(0x87654321);
    return null;
}

3. Переглянути список, а потім конкретне вікно — клас сценарію

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

  • Перший дзвінок показує список. Потім читається GumpID першого вікна та відкривається докладний інспектор; при однакових ID буде обрано перший збіг.
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()
    {
        UO.InfoGumps();
        if (Truth(UO.GetGumpsCount() > 0))
        {
            var id = UO.GetGumpID(0);
            UO.InfoGump(id);
        }

        return null;
    }

    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.InfoGumps() — UO.InfoGumps()

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

Результат: void / Unit.

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

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

public void InfoGumps()

        {

            bridge.ShowGumpListInspector();

        }

UO.InfoGumps(gump) — UO.InfoGumps(Any)

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

Результат: void / Unit.

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

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

public void InfoGumps(InjectionValue gump)

        {

            InfoGump(gump);

        }

UO.InfoTile

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

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

void UO.InfoTile();
void UO.InfoTile(object? x);
void UO.InfoTile(object? x, object? y);

Показує інформацію про землю/статичний об'єкт поточної картки.

Параметри

  • x - Світова координата X. У формі з одним аргументом Y береться у персонажа.
  • y — Світова координата Y. Два аргументи задають X/Y; параметрів Z або map цієї команди немає.

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

void - значення, що повертається немає. Результат не можна присвоїти як serial, graphic/type, кількість або true/false. Інформація виводиться в інтерфейс/журнал, а не повертається до скрипту.

Поведінка

  • Інтерактивна команда без аргументів відкриває приціл для землі/статики; вибір предмета чи персонажа відхиляється. Вибраний тайл відображається у вікні та журналі.
  • Звичайний скрипт без аргументів читає X/Y персонажа без прицілу. Координатні форми шукають саме землю (Land) зазначеної клітини: вони не вибирають статичний шар Z.
  • У командному режимі знайдена земля з'являється також у вікні. У звичайному скрипті відомості виводяться до журналу. Для читання статичних записів масивом використовуйте GetStaticTileData/GetWorldCell.
  • Карта має бути завантажена. За відсутності землі об'єкта, що повертається, немає — виводиться повідомлення.

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

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

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

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

Команда викликається окремим рядком. Повідомлення перед нею показує початок виклику, а не підтвердження дії сервера.

UO.Print("Calling UO.InfoTile");
UO.InfoTile();

1. Земля під персонажем – прямий скрипт

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

  • Аргументів немає; у процедурі X/Y беруться у персонажа.
  • Це виведення інформації, а не Array чи номер шару.
UO.InfoTile();

2. Задана клітина – функція сценарію

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

  • x=1445, y=1690 — клітка поточної карти.
  • Команда описує землю цієї клітини; для статичного об'єкта необхідний інтерактивний вибір чи API читання статик.
return  RunScenario();
 object? RunScenario()
{
    UO.InfoTile(1445, 1690);
    return null;
}

3. Сусідна клітина X — клас сценарію

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

  • Передано лише x; Y залишається координатою персонажа.
  • Висота та map аргументами не задаються.
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 x = UO.GetX() + 1;
        UO.InfoTile(x);
        return null;
    }
}

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

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

UO.InfoTile() — UO.InfoTile()

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

Результат: void / Unit.

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

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

case "infotile":

                    if (arguments.Length == 0 && bridge.RequestInteractiveTileInfoTarget() != 0)

                        break;

                    SystemMessage(bridge.GetTileInfoText(

                        arguments.Length > 0 ? Arg(0) : bridge.GetX(bridge.Self),

                        arguments.Length > 1 ? Arg(1) : bridge.GetY(bridge.Self),

                        bridge.WorldNumber));

                    break;

UO.InfoTile(x) — UO.InfoTile(Any)

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

Результат: void / Unit.

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

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

case "infotile":

                    if (arguments.Length == 0 && bridge.RequestInteractiveTileInfoTarget() != 0)

                        break;

                    SystemMessage(bridge.GetTileInfoText(

                        arguments.Length > 0 ? Arg(0) : bridge.GetX(bridge.Self),

                        arguments.Length > 1 ? Arg(1) : bridge.GetY(bridge.Self),

                        bridge.WorldNumber));

                    break;

UO.InfoTile(x, y) — UO.InfoTile(Any,Any)

Параметри: x (Any), y (Any)

Результат: void / Unit.

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

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

case "infotile":

                    if (arguments.Length == 0 && bridge.RequestInteractiveTileInfoTarget() != 0)

                        break;

                    SystemMessage(bridge.GetTileInfoText(

                        arguments.Length > 0 ? Arg(0) : bridge.GetX(bridge.Self),

                        arguments.Length > 1 ? Arg(1) : bridge.GetY(bridge.Self),

                        bridge.WorldNumber));

                    break;

UO.Version

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

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

void UO.Version();

Друкує назву та версію runtime продукту.

Параметри

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

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

void - значення немає. Викликайте окремим рядком; завершення не підтверджує дію сервера.

Поведінка

  • ExecuteLegacyManualAlias виводить bridge.RuntimeProductName та bridge.RuntimeProductVersion через SystemMessage. Це рядок у журналі, який не повертається номер версії.
  • Змінює або показує лише вказані локальні дані. Серверного підтвердження цієї команди немає.

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

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

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

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

Команда викликається окремим рядком. Повідомлення перед нею показує початок виклику, а не підтвердження дії сервера.

UO.Print("Calling UO.Version");
UO.Version();

1. Прямий виклик – прямий скрипт

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

  • Друкує назву та версію runtime продукту.
UO.Version();

2. Явний варіант – функція сценарію

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

  • ExecuteLegacyManualAlias виводить bridge.RuntimeProductName та bridge.RuntimeProductVersion через SystemMessage. Це рядок у журналі, який не повертається номер версії.
return  RunScenario();
 object? RunScenario()
{
    UO.Version();
    UO.Help();
    return null;
}

3. Повна допоміжна функція – клас сценарію

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

  • Змінює або показує лише вказані локальні дані. Серверного підтвердження цієї команди немає.
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()
    {
        UO.Version();
        UO.Print(UO.GetUserCodepage());
        return null;
    }
}

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

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

UO.Version() — UO.Version()

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

Результат: void / Unit.

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

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

case "version": SystemMessage($"{bridge.RuntimeProductName} v{bridge.RuntimeProductVersion}"); break;

Clone this wiki locally