UO Topic diagnostics introspection - LIHACHTETAN/ClassicUO-Bad-Newbie-CSharp-Scripts-IDE GitHub Wiki

Українська · Русский · 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

Сигнатури C#

string UO.Info();
string UO.Info(object? serial);
string UO.Info(object? type, object? x, object? y);
string UO.Info(object? type, object? x, object? y, object? z);

Поведінка та результат

Режим виклику визначає результат: команда з графічного чату або прив’язаної команди відкриває таблицю з полями, значеннями, Ctrl+C та прокруткою. Звичайний C#-скрипт отримує рядок даних без вікон і без прицілу, навіть коли ігрове вікно відкрите. Доступні лише дані, відомі клієнту.

У графічному чаті Info та InfoTile без аргументів вмикають приціл. У скрипті Info() читає останню об’єктну ціль або свого персонажа, а InfoTile() — землю під персонажем. Явні serial, type та координати читають заданий об’єкт або тайл. Третій аргумент InfoTile(x,y,map) — номер карти.

Параметри

  • serial — Серійний номер об’єкта або збережений псевдонім.
  • type — Графічний ID предмета; -1 — будь-який тип у вказаній точці.
  • x — Координата X світу.
  • y — Координата Y світу.
  • z — Висота Z; скорочена форма використовує 0.

Префікс налаштовується в C# Scripts IDE. Нижче # — лише приклад префікса. Параметри відокремлюються пробілами; лапки зберігають текст як один параметр. id означає serial, type означає graphic. xy x y [z] вибирає перший завантажений об’єкт у точці; type без координат — перший знайдений відповідний об’єкт. Для InfoTile третій аргумент форми (x,y,map) — номер карти, а не Z.

Команди чату

#info
#UO.Info id 0x40001234
#info type 0x0EED
#info xy 1450 1690
#info type 0x0EED xy 1450 1690 0

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

Кожен блок — повний окремий .csx. Демонстраційні serial, type та координати замініть своїми. Параметри передаються у порядку сигнатури; іменовані параметри C# дозволяють явно вказати їх призначення.

1

string report = UO.Info(0x40001234);
UO.Print(report);

2

string InspectSelf() => UO.Info("self");
UO.Print(InspectSelf());

3

foreach (int serial in new[] { 0x40001234, 0x40005678 })
{
    string report = UO.Info(serial);
    UO.Print(report);
}

4

new CommandSample().Execute(UO);

sealed class CommandSample
{
    public void Execute(global::ClassicUO.CSharp.CSharpGameApi api)
    {
        string report = api.Info(0x40001234);
        api.Print(report);
    }
}

Внутрішні виклики

CSharpGameApi.Info
  -> CSharpScriptGlobals
  -> InjectionScript.Runtime.InjectionApiUO.Info
ClassicUOInjectionApiBridge -> YokoInfoReport -> YokoInfoGump


UO.InfoColor

Сигнатури C#

string UO.InfoColor();
string UO.InfoColor(object? serial);

Поведінка та результат

Режим виклику визначає результат: команда з графічного чату або прив’язаної команди відкриває таблицю з полями, значеннями, Ctrl+C та прокруткою. Звичайний C#-скрипт отримує рядок даних без вікон і без прицілу, навіть коли ігрове вікно відкрите. Доступні лише дані, відомі клієнту.

У графічному чаті Info та InfoTile без аргументів вмикають приціл. У скрипті Info() читає останню об’єктну ціль або свого персонажа, а InfoTile() — землю під персонажем. Явні serial, type та координати читають заданий об’єкт або тайл. Третій аргумент InfoTile(x,y,map) — номер карти.

Параметри

  • serial — Серійний номер об’єкта або збережений псевдонім.

Префікс налаштовується в C# Scripts IDE. Нижче # — лише приклад префікса. Параметри відокремлюються пробілами; лапки зберігають текст як один параметр. id означає serial, type означає graphic. xy x y [z] вибирає перший завантажений об’єкт у точці; type без координат — перший знайдений відповідний об’єкт. Для InfoTile третій аргумент форми (x,y,map) — номер карти, а не Z.

Команди чату

#infocolor 0x40001234

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

Кожен блок — повний окремий .csx. Демонстраційні serial, type та координати замініть своїми. Параметри передаються у порядку сигнатури; іменовані параметри C# дозволяють явно вказати їх призначення.

1

UO.Print(UO.InfoColor(0x40001234));

2

string report = UO.InfoColor();
UO.Print(report);

3

foreach (int serial in new[] { 0x40001234, 0x40005678 })
    UO.Print(UO.InfoColor(serial));

4

new CommandSample().Execute(UO);

sealed class CommandSample
{
    public void Execute(global::ClassicUO.CSharp.CSharpGameApi api)
    {
        api.Print(api.InfoColor(0x40001234));
    }
}

Внутрішні виклики

CSharpGameApi.InfoColor
  -> CSharpScriptGlobals
  -> InjectionScript.Runtime.InjectionApiUO.InfoColor
ClassicUOInjectionApiBridge -> YokoInfoReport -> YokoInfoGump


UO.InfoGump

Сигнатури C#

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

Поведінка та результат

Режим виклику визначає результат: команда з графічного чату або прив’язаної команди відкриває таблицю з полями, значеннями, Ctrl+C та прокруткою. Звичайний C#-скрипт отримує рядок даних без вікон і без прицілу, навіть коли ігрове вікно відкрите. Доступні лише дані, відомі клієнту.

InfoGump() читає останнє активне вікно: серверний діалог або локальне вікно клієнта. Можна передати ID чи індекс; last, LastGump та Last Gump означають останнє вікно. InfoGumps повертає список. Самі вікна інспектора не потрапляють до списку. Таблиця відкривається лише для графічної команди.

Параметри

  • gump — ID серверного вікна або його індекс; -1 — останнє активне.

Префікс налаштовується в C# Scripts IDE. Нижче # — лише приклад префікса. Параметри відокремлюються пробілами; лапки зберігають текст як один параметр. id означає serial, type означає graphic. xy x y [z] вибирає перший завантажений об’єкт у точці; type без координат — перший знайдений відповідний об’єкт. Для InfoTile третій аргумент форми (x,y,map) — номер карти, а не Z.

Команди чату

#infogump
#infogump last
#info gump last gump
#infogump 0x12345678

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

Кожен блок — повний окремий .csx. Демонстраційні serial, type та координати замініть своїми. Параметри передаються у порядку сигнатури; іменовані параметри C# дозволяють явно вказати їх призначення.

1

string report = UO.InfoGump();
UO.Print(report);

2

UO.Print(UO.InfoGump(0x12345678));

3

string ReadLatestWindow() => UO.InfoGump();
UO.Print(ReadLatestWindow());

4

new CommandSample().Execute(UO);

sealed class CommandSample
{
    public void Execute(global::ClassicUO.CSharp.CSharpGameApi api)
    {
        string report = api.InfoGump();
        api.Print(report);
    }
}

Внутрішні виклики

CSharpGameApi.InfoGump
  -> CSharpScriptGlobals
  -> InjectionScript.Runtime.InjectionApiUO.InfoGump
ClassicUOInjectionApiBridge -> YokoInfoReport -> YokoInfoGump


UO.InfoGumps

Сигнатури C#

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

Поведінка та результат

Режим виклику визначає результат: команда з графічного чату або прив’язаної команди відкриває таблицю з полями, значеннями, Ctrl+C та прокруткою. Звичайний C#-скрипт отримує рядок даних без вікон і без прицілу, навіть коли ігрове вікно відкрите. Доступні лише дані, відомі клієнту.

InfoGump() читає останнє активне вікно: серверний діалог або локальне вікно клієнта. Можна передати ID чи індекс; last, LastGump та Last Gump означають останнє вікно. InfoGumps повертає список. Самі вікна інспектора не потрапляють до списку. Таблиця відкривається лише для графічної команди.

Параметри

  • gump — ID серверного вікна або його індекс; -1 — останнє активне.

Префікс налаштовується в C# Scripts IDE. Нижче # — лише приклад префікса. Параметри відокремлюються пробілами; лапки зберігають текст як один параметр. id означає serial, type означає graphic. xy x y [z] вибирає перший завантажений об’єкт у точці; type без координат — перший знайдений відповідний об’єкт. Для InfoTile третій аргумент форми (x,y,map) — номер карти, а не Z.

Команди чату

#infogumps

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

Кожен блок — повний окремий .csx. Демонстраційні serial, type та координати замініть своїми. Параметри передаються у порядку сигнатури; іменовані параметри C# дозволяють явно вказати їх призначення.

1

UO.Print(UO.InfoGumps());

2

string report = UO.InfoGumps(0x12345678);
UO.Print(report);

3

string ReadAllWindows() => UO.InfoGumps();
UO.Print(ReadAllWindows());

4

new CommandSample().Execute(UO);

sealed class CommandSample
{
    public void Execute(global::ClassicUO.CSharp.CSharpGameApi api)
    {
        api.Print(api.InfoGumps());
    }
}

Внутрішні виклики

CSharpGameApi.InfoGumps
  -> CSharpScriptGlobals
  -> InjectionScript.Runtime.InjectionApiUO.InfoGumps
ClassicUOInjectionApiBridge -> YokoInfoReport -> YokoInfoGump


UO.InfoTile

Сигнатури C#

string UO.InfoTile();
string UO.InfoTile(object? x);
string UO.InfoTile(object? x, object? y);
string UO.InfoTile(object? x, object? y, object? map);
string UO.InfoTile(object? type, object? x, object? y, object? z);
string UO.InfoTile(object? type, object? x, object? y, object? z, object? map);

Поведінка та результат

Режим виклику визначає результат: команда з графічного чату або прив’язаної команди відкриває таблицю з полями, значеннями, Ctrl+C та прокруткою. Звичайний C#-скрипт отримує рядок даних без вікон і без прицілу, навіть коли ігрове вікно відкрите. Доступні лише дані, відомі клієнту.

У графічному чаті Info та InfoTile без аргументів вмикають приціл. У скрипті Info() читає останню об’єктну ціль або свого персонажа, а InfoTile() — землю під персонажем. Явні serial, type та координати читають заданий об’єкт або тайл. Третій аргумент InfoTile(x,y,map) — номер карти.

Параметри

  • map — Номер карти; без цього параметра — поточна карта.
  • type — Графічний ID предмета; -1 — будь-який тип у вказаній точці.
  • x — Координата X світу.
  • y — Координата Y світу.
  • z — Висота Z; скорочена форма використовує 0.

Префікс налаштовується в C# Scripts IDE. Нижче # — лише приклад префікса. Параметри відокремлюються пробілами; лапки зберігають текст як один параметр. id означає serial, type означає graphic. xy x y [z] вибирає перший завантажений об’єкт у точці; type без координат — перший знайдений відповідний об’єкт. Для InfoTile третій аргумент форми (x,y,map) — номер карти, а не Z.

Команди чату

#infotile
#info tile xy 1450 1690
#infotile 1450 1690 0
#infotile type 0x0EED 1450 1690 0 0

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

Кожен блок — повний окремий .csx. Демонстраційні serial, type та координати замініть своїми. Параметри передаються у порядку сигнатури; іменовані параметри C# дозволяють явно вказати їх призначення.

1

UO.Print(UO.InfoTile(1450, 1690));

2

string report = UO.InfoTile(1450, 1690, 0);
UO.Print(report);

3

UO.Print(UO.InfoTile(0x0EED, 1450, 1690, 0, 0));

4

new CommandSample().Execute(UO);

sealed class CommandSample
{
    public void Execute(global::ClassicUO.CSharp.CSharpGameApi api)
    {
        api.Print(api.InfoTile(1450, 1690));
    }
}

Внутрішні виклики

CSharpGameApi.InfoTile
  -> CSharpScriptGlobals
  -> InjectionScript.Runtime.InjectionApiUO.InfoTile
ClassicUOInjectionApiBridge -> YokoInfoReport -> YokoInfoGump


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;
⚠️ **GitHub.com Fallback** ⚠️