Skip to content

UO Topic client connection

Codex edited this page Oct 12, 2026 · 6 revisions

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

З’єднання із сервером

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

Підключення до сервера, вихід із гри, перевірка стану з’єднання та затримки. Тут також є команди для адреси сервера й списку персонажів.

Розділи

Тема Команди та пояснення
Підключення UO.Connect
Відключення UO.Disconnect
Стан з’єднання UO.Connected
Перебування у світі UO.Online
Затримка UO.GetPing
Адреса сервера UO.GameServerIPString
Назва сервера UO.ShardName
Каталог сервера UO.ShardPath
Список персонажів UO.GetCharsListForShard
Повторний запит даних UO.Resend
Перевірка затримки UO.CheckLag

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

Підключення

UO.Connect · UO.Disconnect · UO.Connected · UO.Online · UO.IsOnline · UO.ConnectedTime · UO.DisconnectedTime · UO.GetPing · UO.CheckLag · UO.GameServerIPString · UO.ShardName · UO.ShardPath · UO.GetCharsListForShard · UO.Resend · UO.CloseUO

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

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

UO.Connected

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

if (Truth(Truth(UO.Connected()) == false))
{
    return null;
}
UO.UseSkill("Hiding");

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

UO.GameServerIPString

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

var address = UO.GameServerIPString();
UO.Print(address);

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


UO.CheckLag

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

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

int UO.CheckLag();
dynamic UO.CheckLag(object? timeoutMS);
int UO.CheckLag(object? timeout, object? retries);

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

Параметри

  • timeout - timeout / timeoutMS - час очікування однієї спроби в мілісекундах, перетворюється на int. Негативне значення обмежується нулем. При 0 запит може бути надісланий, але очікування відповіді немає; це не безкінечний тайм-аут.
  • timeoutMS - timeout / timeoutMS - час очікування однієї спроби в мілісекундах, перетворюється на int. Негативне значення обмежується нулем. При 0 запит може бути надісланий, але очікування відповіді немає; це не безкінечний тайм-аут.
  • retries — retries — загальна кількість спроб, а не кількість додаткових повторів. Перетворюється на int і обмежується знизу одиницею. Наприклад, (250, 3) - до трьох спроб по 250 мс; успішна відповідь завершує перевірку раніше.

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

Числовий прапор int: 1 (умова виконана) - свіжа відповідь отримана; 0 (умова не виконано) - запит неможливий або термін сплив. Однопараметрична реєстрація object? фактично повертає цей int. Не величина пінгу і кількість спроб.

Поведінка

  • CheckLag() виконує одну спробу з очікуванням до 10000 мс. CheckLag(timeoutMS) — одну спробу із зазначеним очікуванням. CheckLag(timeout, retries) повторює перевірку до успіху чи вичерпання загальної кількості спроб.
  • Очікування затримує скрипт, що викликає, а не підтверджує ігрову дію. Команда не перепідключається та не змінює налаштування мережі. Сервер може не відповідати на echo: невдача сама по собі не доводить розриву зв'язку. Термін залежить також від планування потоків; не викликайте активної перевірки на кожному кадрі. Зупинка скрипта перериває очікування.
  • UO.GetPing · UO.CheckLag · UO.IsOnline

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

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

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

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

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

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

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

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

  • Форма без параметрів може чекати до 10 секунд. true означає свіжу echo-відповідь. Hiding викликається окремою командою і може бути відхилено ігровій механікою.
if (Truth(Truth(UO.CheckLag()) == true))
{
    UO.UseSkill("Hiding");
}
else
{
    UO.Print("No fresh server response");
}

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

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

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

  • 250 - очікування однієї спроби, 3 - всього спроб. За успіху подальші спроби не виконуються; при 0 скрипт не продовжує дію. Це не вимір пінгу 250 мс і не три додаткові повтори.
return  RunScenario();
 object? RunScenario()
{
    var responsive = UO.CheckLag(250, 3);
    if (Truth(responsive == 0))
    {
        UO.Print("No response after the allowed attempts");
        return null;
    }

    UO.Print("Fresh response received; the script can continue");
    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. CheckLag - 3 - клас сценарію

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

  • CanContinue(timeoutMs, attempts) спочатку перевіряє UO.IsOnline, потім свіжу відповідь. false та 0 рівнозначні саме для цього предикату. 500 мс та 2 спроби задаються окремо; функція не запускає автоматичне перепідключення.
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(CanContinue(500, 2))))
        {
            return null;
        }

        UO.UseSkill("Hiding");
        return null;
    }

    dynamic CanContinue(dynamic timeoutMs, dynamic attempts)
    {
        if (Truth(Truth(UO.IsOnline()) == false))
        {
            return false;
        }

        return Truth(Truth(UO.CheckLag(timeoutMs, attempts)) == true);
    }

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

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

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

UO.CheckLag() — UO.CheckLag()

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

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

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

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

public int CheckLag() => bridge.CheckLag(10_000);

UO.CheckLag(timeoutMS) — UO.CheckLag(Any)

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

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

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

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

case "checklag": return new InjectionValue(bridge.CheckLag(Arg(0, 10_000)));

UO.CheckLag(timeout, retries) — UO.CheckLag(Any,Any)

Параметри: timeout (Any), retries (Any)

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

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

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

public int CheckLag(InjectionValue timeout, InjectionValue retries)

        {

            int timeoutMs = Math.Max(0, NumberConversions.ToInt(timeout));

            int attempts = Math.Max(1, NumberConversions.ToInt(retries));

            for (int attempt = 0; attempt < attempts; attempt++)

            {

                if (bridge.CheckLag(timeoutMs) != 0)

                    return 1;

            }

            return 0;

        }

UO.CloseUO

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

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

void UO.CloseUO();

Запитує вихід поточної програми клієнта через Client.Game.Exit.

Параметри

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

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

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

Поведінка

  • CloseUO прямує до того ж bridge.CloseHandle. Exit виконується на ігровому потоці; якщо Client.Game відсутня, дія відсутня. Команда не є закриттям окремого gump.

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

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

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

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

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

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

1. Завершити клієнт – прямий скрипт

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

  • Виклик запитує про завершення програми клієнта.
UO.CloseUO();

2. Явна умова завершення – функція сценарію

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

  • Приклад показує керовану умову; значення 0 зберігає клієнт відкритим.
return  RunScenario();
 object? RunScenario()
{
    var finishClient = 0;
    if (Truth(finishClient))
    {
        UO.CloseUO();
    }

    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. Процедура завершення – клас сценарію

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

  • Повністю оголошений помічник дозволяє явний вихід.
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()
    {
        FinishClient(0);
        return null;
    }

    void FinishClient(dynamic enabled)
    {
        if (Truth(enabled))
        {
            UO.CloseUO();
        }
    }

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

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

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

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

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

case "closeuo": bridge.CloseHandle(); break;

UO.Connect

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

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

void UO.Connect();

Запитує підключення або перепідключення клієнтської сесії.

Параметри

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

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

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

Поведінка

  • У менеджерській сесії викликає SessionControl.RequestConnect. У самостійному клієнті активне/підготовлюване з'єднання залишає без змін.
  • Для GameScene планує збережене перепідключення, щоб не змінювати scene під час її Update. У LoginScene використовує поточний обліковий запис та збережений пароль, включає Reconnect і викликає Connect із запам'ятованим shard/character навіть при вимкненому автоматичному reconnect.
  • Команда не чекає на вход у світ. Перевіряйте UO.Connected після окремого очікування, якщо подальші дії потребують з'єднання.

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

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

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

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

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

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

1. Підключитися – прямий скрипт

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

  • Виклик лише ініціює підключення.
UO.Connect();

2. Підключитися за відсутності з'єднання — функція сценарію

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

  • Перевірка може уникнути повторного запиту.
return  RunScenario();
 object? RunScenario()
{
    if (!(Truth(UO.Connected())))
    {
        UO.Connect();
    }

    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. Перевірити стан пізніше - клас сценарію

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

  • Очікування 1000 мс не гарантує вхід; висновок показує фактичний поточний прапор.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
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;
    }

    async public Task<object?> RunScenarioAsync()
    {
        UO.Connect();
        await Delay(1000);
        UO.Print(Convert.ToString(UO.Connected()));
        return null;
    }

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

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

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

UO.Connect() — UO.Connect()

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

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

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

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

case "connect": bridge.ConnectClient(); return InjectionValue.Unit;

UO.Connected

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

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

dynamic UO.Connected();

Перевіряє, чи поточний сеанс знаходиться в ігровому світі і чи відкрито його ігрове з'єднання. Використовуйте перед дією персонажа або під час очікування входу.

Параметри

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

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

int. 1 - одночасно є гравець, завантажена карта та активний ігровий сокет; інакше 0. Відкрите вікно клієнта, список персонажів або TCP-з'єднання на етапі входу ще не означають 1. Числовий прапор int: 1 (умова виконана), 0 (умова не виконано). Це числовий прапор: в C# перевіряйте result != 0 або result == 0. Пряме порівняння int з true/false та if (result) неприпустимо.

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

Поведінка

  • Параметрів немає: serial, type, ім'я персонажа та IP передавати не можна. UO.Online(), UO.Connected() і UO.IsOnline() перевіряють те саме. Це стан даного власника сеансу, а чи не іншого профілю менеджера.
  • Команда лише читає локальний стан. Вона не надсилає ping, не підключається, не знімає паузу і не перевіряє доступність інтернету. Після читання зв'язок може змінитися; 1 не гарантує успіху наступної дії.
  • UO.Wait приймає мілісекунди. Автопауза при розриві зв'язку та ручна пауза затримують виконання прикладів: перевірка таймауту продовжиться лише після зняття паузи. Ці команди самі не знімають паузу і не включають автореконнект.

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

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

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

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

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

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

1. Не виконувати ігрову навичку офлайн — прямий скрипт

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

  • false рівнозначно 0. return завершує Main до UseSkill. Hiding - єдиний параметр UseSkill, назва навички. При 1 скрипт лише просить застосування навички; результат залежить від стану персонажа та сервера.
  • Команда лише читає локальний стан. Вона не надсилає ping, не підключається, не знімає паузу і не перевіряє доступність інтернету. Після читання зв'язок може змінитися; 1 не гарантує успіху наступної дії.
if (Truth(Truth(UO.Connected()) == false))
{
    return null;
}
UO.UseSkill("Hiding");

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

2. Запросити підключення за відсутності зв'язку — функція сценарію

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

  • Порівняння з 0 перевіряє поточне підключення, а не налаштування автореконнекта. Connect без аргументів використовує збережені налаштування та не чекає завершення входу. Повторна команда під час розпочатого входу не повинна створювати другий сеанс.
  • Команда лише читає локальний стан. Вона не надсилає ping, не підключається, не знімає паузу і не перевіряє доступність інтернету. Після читання зв'язок може змінитися; 1 не гарантує успіху наступної дії.
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.Connected() == 0))
    {
        UO.Connect();
    }

    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. Зачекати на готовність миру з обмеженням часу — клас сценарію

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

  • WaitForWorld(timeoutMs) — повністю показана функція користувача, не вбудована команда. 5000 - бюджет у мс, UO.Wait(50) - інтервал перевірок. Негативне значення дає false; 0 дозволяє лише готовий світ. Timer вимірює секунди, тому різниця множиться на 1000. Автопауза має бути заздалегідь вимкнена, інакше Main виходить. Функція не викликає Connect і не скасовує розпочатий вхід при закінченні часу.
  • Команда лише читає локальний стан. Вона не надсилає ping, не підключається, не знімає паузу і не перевіряє доступність інтернету. Після читання зв'язок може змінитися; 1 не гарантує успіху наступної дії.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
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;
    }

    async public Task<object?> RunScenarioAsync()
    {
        if (Truth(UO.GetPauseScriptOnDisconnectStatus()))
        {
            return null;
        }

        if (Truth(await WaitForWorld(5000)))
        {
            UO.UseSkill("Hiding");
        }

        return null;
    }

    async Task<dynamic> WaitForWorld(dynamic timeoutMs)
    {
        if (Truth(timeoutMs < 0))
        {
            return false;
        }

        var started = Environment.TickCount;
        while (!(Truth(UO.Connected())))
        {
            if (Truth((Environment.TickCount - started) * 1000.0 >= timeoutMs))
            {
                return false;
            }

            await Delay(50);
        }

        return true;
    }

    Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
    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.Connected() — UO.Connected()

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

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

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

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

case "connected": return new InjectionValue(bridge.IsOnline());

UO.ConnectedTime

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

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

dynamic UO.ConnectedTime();

Повертає календарну позначку останнього успішного входу персонажа у світ. Допомагає зрозуміти, чи змінилося підключення за час очікування або паузи, перш ніж продовжувати колишнє завдання.

Параметри

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

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

double: число днів від 1899-12-30, дробова частина - час доби (OLE Automation date). 0 означає, що цей власник сеансу ще не входив у світ. Після вимкнення остання позначка входу зберігається. Це не bool і не тривалість у секундах.

Поведінка

  • Аргументів немає. Історія спільна для скриптів одного власника сеансу: пізній запуск, пауза та закриття IDE не змінюють позначки. Новий процес сеансу розпочинає нову історію; це не журнал усіх підключень.
  • Невдала спроба входу без появи персонажа у світі не вважається успішним підключенням. Повторні перевірки офлайн не змінюють час вимкнення. Для поточного стану використовуйте UO.Connected(), а не ненульову дату.
  • Позначки беруться по локальному годиннику комп'ютера. Різниця, помножена на 86400, дає календарні секунди; зміна годин/часового поясу може спотворити результат. Для тайм-аут використовуйте монотонний Timer(). Окремі дзвінки не утворюють атомарний знімок; однакова позначка не є унікальним ID підключення.
  • UO.Wait приймає мілісекунди. Автопауза при розриві зв'язку та ручна пауза затримують виконання прикладів: перевірка таймауту продовжиться лише після зняття паузи. Ці команди самі не знімають паузу і не включають автореконнект.

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

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

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

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

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

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

1. Запитати перший вхід — прямий скрипт

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

  • 0 перевіряє відсутність входів саме у цьому процесі. Connect використовує збережений профіль і лише вимагає вхід. Цей приклад навмисно не поновлює вже завершене підключення.
  • UO.Wait приймає мілісекунди. Автопауза при розриві зв'язку та ручна пауза затримують виконання прикладів: перевірка таймауту продовжиться лише після зняття паузи. Ці команди самі не знімають паузу і не включають автореконнект.
if (Truth(UO.ConnectedTime() == 0))
{
    UO.Connect();
}

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

2. Скинути очікувану мету після нового входу – функція сценарію

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

  • 30.0 - бюджет спостереження в секундах Timer; 250 — інтервал UO.Wait у мс. Після зміни позначки входу CancelWaitTarget очищає колишню відкладену мету. За відсутності нового входу цикл закінчується без цієї дії.
  • UO.Wait приймає мілісекунди. Автопауза при розриві зв'язку та ручна пауза затримують виконання прикладів: перевірка таймауту продовжиться лише після зняття паузи. Ці команди самі не знімають паузу і не включають автореконнект.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var login = UO.ConnectedTime();
    var started = Environment.TickCount;
    while (Truth(Environment.TickCount - started < 30.0))
    {
        if (Truth(UO.Connected()) && Truth(UO.ConnectedTime() != login))
        {
            UO.CancelWaitTarget();
            return null;
        }

        await Delay(250);
    }

    return null;
}

Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

3. Перевірити підключення перед продовженням клас сценарію

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

  • SameConnection(login) повертає bool. Зберігаємо позначку, чекаємо 500 мс, потім забороняємо продовження за відсутності зв'язку або зміни входу. Це повторна перевірка, а не гарантія доступності сервера.
  • UO.Wait приймає мілісекунди. Автопауза при розриві зв'язку та ручна пауза затримують виконання прикладів: перевірка таймауту продовжиться лише після зняття паузи. Ці команди самі не знімають паузу і не включають автореконнект.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
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;
    }

    async public Task<object?> RunScenarioAsync()
    {
        var login = UO.ConnectedTime();
        await Delay(500);
        if (!(Truth(SameConnection(login))))
        {
            return null;
        }

        UO.AddToSystemJournal("Same connection; continue this batch");
        return null;
    }

    dynamic SameConnection(dynamic login)
    {
        return Truth(login != 0) && Truth(UO.Connected()) && Truth(UO.ConnectedTime() == login);
    }

    Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
    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.ConnectedTime() — UO.ConnectedTime()

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

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

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

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

case "connectedtime":

                    UpdateConnectionState();

                    return new InjectionValue(state.ConnectedTime == default(DateTime) ? 0d : state.ConnectedTime.ToOADate());

UO.Disconnect

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

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

void UO.Disconnect();

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

Параметри

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

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

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

Поведінка

  • Якщо автоматичний reconnect вимкнений, BeginScriptControlledDisconnect зберігає виконуючий виклик worker для наступного UO.Connect. Менеджерська сесія отримує RequestDisconnect.
  • Самостійний клієнт викликає Socket.Disconnect та PrepareForReconnect. При увімкненому глобальному reconnect явно планує збережений перехід сцени. У LoginScene очищає popup та повертає Main.
  • Повернення void не повідомляє результату перепідключення. Стан з'єднання читається окремо; Налаштування автоматичного reconnect можуть ініціювати новий вхід.

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

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

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

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

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

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

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

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

  • Команда скасовує і активний, і транспорт, що встановлюється.
UO.Disconnect();

2. Явне повторне підключення – функція сценарію

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

  • При вимкненому AR зухвалий worker може сам дійти до Connect.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    UO.Disconnect();
    await Delay(1000);
    UO.Connect();
    return null;
}

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

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()
    {
        if (Truth(UO.Connected()))
        {
            UO.Disconnect();
        }

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

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

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

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

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

case "disconnect": bridge.DisconnectClient(); return InjectionValue.Unit;

UO.DisconnectedTime

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

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

dynamic UO.DisconnectedTime();

Повертає календарну позначку останньої втрати ігрового підключення. Потрібна для діагностики обриву та оцінки тривалості завершеного підключення, а не для визначення кількості спроб входу.

Параметри

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

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

double: кількість днів від 1899-12-30 із дробовою частиною доби. Після розриву з’єднання — час, коли клієнт помітив відключення; до першого розриву — час створення власника сеансу. Це не прапорець офлайн і не мілісекунди.

Поведінка

  • Аргументів немає. Історія спільна для скриптів одного власника сеансу: пізній запуск, пауза та закриття IDE не змінюють позначки. Новий процес сеансу розпочинає нову історію; це не журнал усіх підключень.
  • Невдала спроба входу без появи персонажа у світі не вважається успішним підключенням. Повторні перевірки офлайн не змінюють час вимкнення. Для поточного стану використовуйте UO.Connected(), а не ненульову дату.
  • Позначки беруться по локальному годиннику комп'ютера. Різниця, помножена на 86400, дає календарні секунди; зміна годин/часового поясу може спотворити результат. Для тайм-аут використовуйте монотонний Timer(). Окремі дзвінки не утворюють атомарний знімок; однакова позначка не є унікальним ID підключення.
  • UO.Wait приймає мілісекунди. Автопауза при розриві зв'язку та ручна пауза затримують виконання прикладів: перевірка таймауту продовжиться лише після зняття паузи. Ці команди самі не знімають паузу і не включають автореконнект.

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

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

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

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

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

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

1. Оцінити тривалість завершеного підключення – прямий скрипт

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

  • CompletedConnectionSeconds() повертає секунди або -1, якщо немає завершеного підключення або вхід змінився між читаннями. 86400 - секунд на добу. Перераховується лише остання пара вхід/обрив; історію всіх сеансів функція не підсумовує.
  • UO.Wait приймає мілісекунди. Автопауза при розриві зв'язку та ручна пауза затримують виконання прикладів: перевірка таймауту продовжиться лише після зняття паузи. Ці команди самі не знімають паузу і не включають автореконнект.
var seconds = CompletedConnectionSeconds();
if (Truth(seconds >= 0))
{
    UO.AddToSystemJournal("Completed connection seconds: " + Convert.ToString(seconds));
}

dynamic CompletedConnectionSeconds()
{
    var login = UO.ConnectedTime();
    var loss = UO.DisconnectedTime();
    if (Truth(login == 0) || Truth(loss < login) || Truth(UO.Connected()))
    {
        return -1;
    }
    if (Truth(UO.ConnectedTime() != login))
    {
        return -1;
    }
    return (loss - login) * 86400.0;
}

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

2. Запросити вхід після короткого очікування офлайн - функція сценарію

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

  • При включеній автопаузі цей контролер одразу виходить; для роботи офлайн вона має бути заздалегідь вимкнена. Після UO.Wait(1000) повторно перевіряються офлайн та колишня позначка обриву. Connect не гарантує успіх і не замінює налаштування автореконнекту.
  • UO.Wait приймає мілісекунди. Автопауза при розриві зв'язку та ручна пауза затримують виконання прикладів: перевірка таймауту продовжиться лише після зняття паузи. Ці команди самі не знімають паузу і не включають автореконнект.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    if (Truth(UO.GetPauseScriptOnDisconnectStatus()))
    {
        return null;
    }

    if (Truth(UO.Connected()))
    {
        return null;
    }

    var loss = UO.DisconnectedTime();
    await Delay(1000);
    if (!(Truth(UO.Connected())) && Truth(UO.DisconnectedTime() == loss))
    {
        UO.Connect();
    }

    return null;
}

Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

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

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

  • Порівняння з previousLoss помічає обрив навіть після повторного входу, що вже відбувся. 30 секунд обмежують спостереження при скрипті, що виконується, WaitAsync(250) звільняє потік між перевірками. Декілька обривів можуть об'єднатися в одне повідомлення.
  • UO.Wait приймає мілісекунди. Автопауза при розриві зв'язку та ручна пауза затримують виконання прикладів: перевірка таймауту продовжиться лише після зняття паузи. Ці команди самі не знімають паузу і не включають автореконнект.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
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;
    }

    async public Task<object?> RunScenarioAsync()
    {
        var previousLoss = UO.DisconnectedTime();
        var started = Environment.TickCount;
        while (Truth(Environment.TickCount - started < 30.0))
        {
            if (Truth(UO.DisconnectedTime() != previousLoss))
            {
                UO.AddToSystemJournal("A connection loss occurred; check the session");
                return null;
            }

            await Delay(250);
        }

        return null;
    }

    Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
    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.DisconnectedTime() — UO.DisconnectedTime()

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

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

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

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

case "disconnectedtime":

                    UpdateConnectionState();

                    return new InjectionValue(state.DisconnectedTime.ToOADate());

UO.GameServerIPString

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

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

dynamic UO.GameServerIPString();

Читає настроєну адресу сервера із глобальних налаштувань клієнта.

Параметри

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

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

string — Settings.GlobalSettings.IP або порожній рядок, якщо значення відсутнє.

Поведінка

  • GameServerAddress у поточному bridge читає глобальне налаштування IP. Це не DNS/мережевий запит та не перевірка адреси фактичного peer; менеджерська сесія може мати власні параметри з'єднання.

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

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

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

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

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

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

1. Прочитати адресу — прямий скрипт

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

  • Повертається поточне глобальне налаштування IP.
var address = UO.GameServerIPString();
UO.Print(address);

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

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

  • Порожнє значення означає відсутність налаштування, а не виміряну мережну відмову.
return  RunScenario();
 object? RunScenario()
{
    var address = UO.GameServerIPString();
    if (Truth(Len(address) == 0))
    {
        UO.Print("no configured address");
    }

    return null;
}

int Len(object? value) => Convert.ToString(value)?.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. Зберегти знімок – клас сценарію

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

  • Змінна зберігає рядок, отриманий першим дзвінком.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
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;
    }

    async public Task<object?> RunScenarioAsync()
    {
        var address = UO.GameServerIPString();
        await Delay(100);
        UO.Print(address);
        return null;
    }

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

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

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

UO.GameServerIPString() — UO.GameServerIPString()

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

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

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

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

case "gameserveripstring": return new InjectionValue(bridge.GameServerAddress);

UO.GetCharsListForShard

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

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

dynamic UO.GetCharsListForShard();

Повертає відомі клієнту імена персонажів поточного shard.

Параметри

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

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

Array рядків. Немає відомих імен та поточного персонажа – порожній масив.

Поведінка

  • У менеджерській сесії читається SessionControl. Characters. У standalone спочатку використовуються LastCharacterManager для account/server; якщо список порожній, читається LoginScene. Characters без порожніх імен; потім використовується поточний Player.Name як єдиний елемент.
  • Це відомі локальні імена; команда не запитує повний список сервера і не гарантує свіжість кеша.

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

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

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

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

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

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

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

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

  • Цикл працює із фактичним масивом відомих імен.
var names = UO.GetCharsListForShard();
for (int i = (int)(0); i <= ArrayLength(names)-1; i += (int)(1))
{
    UO.Print(names[i]);
}

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

2. Перше відоме ім'я – функція сценарію

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

  • Індекс 0 використовується лише для непустого масиву.
return  RunScenario();
 object? RunScenario()
{
    var names = UO.GetCharsListForShard();
    if (Truth(ArrayLength(names) > 0))
    {
        UO.Print(names[0]);
    }

    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. Число імен - клас сценарію

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

  • Розмір списку не повідомляє кількість слотів облікового запису на сервері.
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 names = UO.GetCharsListForShard();
        UO.Print(Convert.ToString(ArrayLength(names)));
        return null;
    }

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

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

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

UO.GetCharsListForShard() — UO.GetCharsListForShard()

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

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

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

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

case "getcharslistforshard": return StringArray(bridge.GetCharactersForCurrentShard());

UO.GetPing

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

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

int UO.GetPing();
int UO.GetPing(object? timeout);

Читає затримку відповіді сервера. Без аргументу використовує останній вимір; з тайм-аутом запитує свіжу відповідь.

Параметри

  • timeout - timeout / timeoutMS - час очікування однієї спроби в мілісекундах, перетворюється на int. Негативне значення обмежується нулем. При 0 запит може бути надісланий, але очікування відповіді немає; це не безкінечний тайм-аут.

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

int, мілісекунди. Значення >= 0 — вимір; 0 мс теж допустимі. -1 — виміру немає: для форми з аргументом запит не виконано або відповідь не отримано вчасно. Це НЕ bool; не можна вважати 0 невдачею, а -1 успіхом.

Поведінка

  • GetPing() нічого не відправляє і негайно читає останнє ServerPing. Старе значення саме собою не доводить, що зв'язок зараз справний. Це останній серверний echo-вимір, а не згладжений/резервний TCP ping індикатора і не ICMP Ping(host). GetPing(timeout) чекає нову відповідь і потім читає останній серверний вимір.
  • Очікування затримує скрипт, що викликає, а не підтверджує ігрову дію. Команда не перепідключається та не змінює налаштування мережі. Сервер може не відповідати на echo: невдача сама по собі не доводить розриву зв'язку. Термін залежить також від планування потоків; не викликайте активної перевірки на кожному кадрі. Зупинка скрипта перериває очікування.
  • UO.GetPing · UO.CheckLag · UO.IsOnline

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

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

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

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

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

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

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

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

  • Читання кешу без нового запиту. Приклад вибирає 50 або 200 мс очікування самого скрипта при порозі 250 мс. Невідомий вимір обробляється окремо. Ці числа – приклад налаштування, не універсальне обмеження сервера.
var pingMs = UO.GetPing();
if (Truth(pingMs < 0))
{
    UO.Print("No server latency sample");
    return null;
}
var delayMs = 50;
if (Truth(pingMs > 250))
{
    delayMs = 200;
}
await Delay(delayMs);

Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

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

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

  • 1000 - максимум очікування свіжої відповіді в мілісекундах. При -1 процедура закінчується. При успішному вимірі запитується Hiding; відповідь echo не доводить успішного застосування навички.
return  RunScenario();
 object? RunScenario()
{
    var pingMs = UO.GetPing(1000);
    if (Truth(pingMs == -1))
    {
        UO.Print("No fresh server response");
        return null;
    }

    UO.UseSkill("Hiding");
    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. GetPing - 3 - клас сценарію

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

  • MeanPing(samples, timeoutMs) показана повністю: 3 спроби по 500 мс; невдалі виміри виключаються із середнього. За відсутності успішних повертається - 1. samples обмежено 1–10; UO.Wait(100) між спробами зменшує частоту запитів.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
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;
    }

    async public Task<object?> RunScenarioAsync()
    {
        var meanMs = await MeanPing(3, 500);
        if (Truth(meanMs < 0))
        {
            UO.Print("No successful samples");
        }
        else
        {
            UO.Print("Measured mean, ms: " + Convert.ToString(meanMs));
        }

        return null;
    }

    async Task<dynamic> MeanPing(dynamic samples, dynamic timeoutMs)
    {
        if (Truth(samples < 1) || Truth(samples > 10))
        {
            return -1;
        }

        var total = 0;
        var count = 0;
        for (int i = (int)(1); i <= samples; i += (int)(1))
        {
            var current = UO.GetPing(timeoutMs);
            if (Truth(current >= 0))
            {
                total = total + current;
                count = count + 1;
            }

            await Delay(100);
        }

        if (Truth(count == 0))
        {
            return -1;
        }

        return total / count;
    }

    Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
    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.GetPing() — UO.GetPing()

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

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

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

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

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

UO.GetPing(timeout) — UO.GetPing(Any)

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

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

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

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

public int GetPing(InjectionValue timeout) => bridge.GetPing(Math.Max(0, NumberConversions.ToInt(timeout)));

UO.IsOnline

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

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

int UO.IsOnline();

Перевіряє, чи поточний сеанс знаходиться в ігровому світі і чи відкрито його ігрове з'єднання. Використовуйте перед дією персонажа або під час очікування входу.

Параметри

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

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

int. 1 - одночасно є гравець, завантажена карта та активний ігровий сокет; інакше 0. Відкрите вікно клієнта, список персонажів або TCP-з'єднання на етапі входу ще не означають 1. Числовий прапор int: 1 (умова виконана), 0 (умова не виконано). Це числовий прапор: в C# перевіряйте result != 0 або result == 0. Пряме порівняння int з true/false та if (result) неприпустимо.

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

Поведінка

  • Параметрів немає: serial, type, ім'я персонажа та IP передавати не можна. UO.Online(), UO.Connected() і UO.IsOnline() перевіряють те саме. Це стан даного власника сеансу, а чи не іншого профілю менеджера.
  • Команда лише читає локальний стан. Вона не надсилає ping, не підключається, не знімає паузу і не перевіряє доступність інтернету. Після читання зв'язок може змінитися; 1 не гарантує успіху наступної дії.
  • UO.Wait приймає мілісекунди. Автопауза при розриві зв'язку та ручна пауза затримують виконання прикладів: перевірка таймауту продовжиться лише після зняття паузи. Ці команди самі не знімають паузу і не включають автореконнект.

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

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

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

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

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

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

1. Не виконувати ігрову навичку офлайн — прямий скрипт

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

  • false рівнозначно 0. return завершує Main до UseSkill. Hiding - єдиний параметр UseSkill, назва навички. При 1 скрипт лише просить застосування навички; результат залежить від стану персонажа та сервера.
  • Команда лише читає локальний стан. Вона не надсилає ping, не підключається, не знімає паузу і не перевіряє доступність інтернету. Після читання зв'язок може змінитися; 1 не гарантує успіху наступної дії.
if (Truth(Truth(UO.IsOnline()) == false))
{
    return null;
}
UO.UseSkill("Hiding");

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

2. Запросити підключення за відсутності зв'язку — функція сценарію

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

  • Порівняння з 0 перевіряє поточне підключення, а не налаштування автореконнекта. Connect без аргументів використовує збережені налаштування та не чекає завершення входу. Повторна команда під час розпочатого входу не повинна створювати другий сеанс.
  • Команда лише читає локальний стан. Вона не надсилає ping, не підключається, не знімає паузу і не перевіряє доступність інтернету. Після читання зв'язок може змінитися; 1 не гарантує успіху наступної дії.
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.IsOnline() == 0))
    {
        UO.Connect();
    }

    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. Зачекати на готовність миру з обмеженням часу — клас сценарію

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

  • WaitForWorld(timeoutMs) — повністю показана функція користувача, не вбудована команда. 5000 - бюджет у мс, UO.Wait(50) - інтервал перевірок. Негативне значення дає false; 0 дозволяє лише готовий світ. Timer вимірює секунди, тому різниця множиться на 1000. Автопауза має бути заздалегідь вимкнена, інакше Main виходить. Функція не викликає Connect і не скасовує розпочатий вхід при закінченні часу.
  • Команда лише читає локальний стан. Вона не надсилає ping, не підключається, не знімає паузу і не перевіряє доступність інтернету. Після читання зв'язок може змінитися; 1 не гарантує успіху наступної дії.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
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;
    }

    async public Task<object?> RunScenarioAsync()
    {
        if (Truth(UO.GetPauseScriptOnDisconnectStatus()))
        {
            return null;
        }

        if (Truth(await WaitForWorld(5000)))
        {
            UO.UseSkill("Hiding");
        }

        return null;
    }

    async Task<dynamic> WaitForWorld(dynamic timeoutMs)
    {
        if (Truth(timeoutMs < 0))
        {
            return false;
        }

        var started = Environment.TickCount;
        while (!(Truth(UO.IsOnline())))
        {
            if (Truth((Environment.TickCount - started) * 1000.0 >= timeoutMs))
            {
                return false;
            }

            await Delay(50);
        }

        return true;
    }

    Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
    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.IsOnline() — UO.IsOnline()

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

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

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

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

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

UO.Online

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

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

int UO.Online();

Перевіряє, чи поточний сеанс знаходиться в ігровому світі і чи відкрито його ігрове з'єднання. Використовуйте перед дією персонажа або під час очікування входу.

Параметри

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

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

int. 1 - одночасно є гравець, завантажена карта та активний ігровий сокет; інакше 0. Відкрите вікно клієнта, список персонажів або TCP-з'єднання на етапі входу ще не означають 1. Числовий прапор int: 1 (умова виконана), 0 (умова не виконано). Це числовий прапор: в C# перевіряйте result != 0 або result == 0. Пряме порівняння int з true/false та if (result) неприпустимо.

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

Поведінка

  • Параметрів немає: serial, type, ім'я персонажа та IP передавати не можна. UO.Online(), UO.Connected() і UO.IsOnline() перевіряють те саме. Це стан даного власника сеансу, а чи не іншого профілю менеджера.
  • Команда лише читає локальний стан. Вона не надсилає ping, не підключається, не знімає паузу і не перевіряє доступність інтернету. Після читання зв'язок може змінитися; 1 не гарантує успіху наступної дії.
  • UO.Wait приймає мілісекунди. Автопауза при розриві зв'язку та ручна пауза затримують виконання прикладів: перевірка таймауту продовжиться лише після зняття паузи. Ці команди самі не знімають паузу і не включають автореконнект.

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

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

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

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

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

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

1. Не виконувати ігрову навичку офлайн — прямий скрипт

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

  • false рівнозначно 0. return завершує Main до UseSkill. Hiding - єдиний параметр UseSkill, назва навички. При 1 скрипт лише просить застосування навички; результат залежить від стану персонажа та сервера.
  • Команда лише читає локальний стан. Вона не надсилає ping, не підключається, не знімає паузу і не перевіряє доступність інтернету. Після читання зв'язок може змінитися; 1 не гарантує успіху наступної дії.
if (Truth(Truth(UO.Online()) == false))
{
    return null;
}
UO.UseSkill("Hiding");

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

2. Запросити підключення за відсутності зв'язку — функція сценарію

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

  • Порівняння з 0 перевіряє поточне підключення, а не налаштування автореконнекта. Connect без аргументів використовує збережені налаштування та не чекає завершення входу. Повторна команда під час розпочатого входу не повинна створювати другий сеанс.
  • Команда лише читає локальний стан. Вона не надсилає ping, не підключається, не знімає паузу і не перевіряє доступність інтернету. Після читання зв'язок може змінитися; 1 не гарантує успіху наступної дії.
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.Online() == 0))
    {
        UO.Connect();
    }

    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. Зачекати на готовність миру з обмеженням часу — клас сценарію

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

  • WaitForWorld(timeoutMs) — повністю показана функція користувача, не вбудована команда. 5000 - бюджет у мс, UO.Wait(50) - інтервал перевірок. Негативне значення дає false; 0 дозволяє лише готовий світ. Timer вимірює секунди, тому різниця множиться на 1000. Автопауза має бути заздалегідь вимкнена, інакше Main виходить. Функція не викликає Connect і не скасовує розпочатий вхід при закінченні часу.
  • Команда лише читає локальний стан. Вона не надсилає ping, не підключається, не знімає паузу і не перевіряє доступність інтернету. Після читання зв'язок може змінитися; 1 не гарантує успіху наступної дії.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
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;
    }

    async public Task<object?> RunScenarioAsync()
    {
        if (Truth(UO.GetPauseScriptOnDisconnectStatus()))
        {
            return null;
        }

        if (Truth(await WaitForWorld(5000)))
        {
            UO.UseSkill("Hiding");
        }

        return null;
    }

    async Task<dynamic> WaitForWorld(dynamic timeoutMs)
    {
        if (Truth(timeoutMs < 0))
        {
            return false;
        }

        var started = Environment.TickCount;
        while (!(Truth(UO.Online())))
        {
            if (Truth((Environment.TickCount - started) * 1000.0 >= timeoutMs))
            {
                return false;
            }

            await Delay(50);
        }

        return true;
    }

    Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
    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.Online() — UO.Online()

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

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

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

Виклик виконує збережений delegate обробника. Метод реєстрації створює цей delegate під час побудови API.

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

() => bridge.IsOnline()

Створення API: Ці функції створюють реєстрацію API; вони не виконуються заново під час кожного виклику команди.


UO.Resend

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

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

void UO.Resend();

Надсилає запит повторної синхронізації світу.

Параметри

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

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

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

Поведінка

  • Resync відправляє NetClient.Socket.Send_Resync на ігровому потоці. Це запит на оновлення, не перепідключення і не підтвердження отримання даних.
  • У прикладах UO.Wait задає лише паузу скрипта; закінчення паузи не доводить виконання запиту сервером.

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

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

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

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

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

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

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

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

  • Надсилає запит повторної синхронізації світу.
UO.Resend();

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

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

  • Resync відправляє NetClient.Socket.Send_Resync на ігровому потоці. Це запит на оновлення, не перепідключення і не підтвердження отримання даних.
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.IsOnline()))
    {
        UO.Resend();
    }

    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. Повна допоміжна функція – клас сценарію

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

  • У прикладах UO.Wait задає лише паузу скрипта; закінчення паузи не доводить виконання запиту сервером.
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.Resend();
        UO.Wait(500);
        UO.Print(UO.GetX());
        return null;
    }
}

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

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

UO.Resend() — UO.Resend()

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

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

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

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

case "resend": bridge.Resync(); break;

UO.ShardName

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

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

dynamic UO.ShardName();

Читає ім'я шарда.

Параметри

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

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

string - текст поля bridge. ShardName; без доступних даних можливий порожній рядок. Це не ознака підключення і не числової ID.

Поведінка

  • ExecuteClientApiCompatibility повертає bridge.ShardName без зміни вибору профілю або сервера.
  • Читає поточний локальний стан. Пакету, target та автоматичного оновлення немає; окремі читання можуть бачити різні стани.

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

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

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

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

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

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

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

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

  • Читає ім'я шарда.
var value = UO.ShardName();
UO.Print(value);

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

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

  • ExecuteClientApiCompatibility повертає bridge.ShardName без зміни вибору профілю або сервера.
return  RunScenario();
 object? RunScenario()
{
    var value = UO.ShardName();
    if (Truth(Len(value) > 0))
    {
        UO.TextPrint(value);
    }

    return null;
}

int Len(object? value) => Convert.ToString(value)?.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. Повна допоміжна функція – клас сценарію

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

  • Читає поточний локальний стан. Пакету, target та автоматичного оновлення немає; окремі читання можуть бачити різні стани.
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 before = UO.ShardName();
        UO.Wait(500);
        var after = UO.ShardName();
        UO.Print(before = after);
        return null;
    }
}

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

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

UO.ShardName() — UO.ShardName()

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

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

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

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

case "shardname":

                case "profileshardname": return new InjectionValue(bridge.ShardName);

UO.ShardPath

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

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

dynamic UO.ShardPath();

Читає шлях поточного профілю.

Параметри

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

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

string - текст поля bridge. CurrentProfilePath; без доступних даних можливий порожній рядок. Це не ознака підключення і не числової ID.

Поведінка

  • ExecuteClientApiCompatibility повертає bridge.CurrentProfilePath без зміни вибору профілю або сервера.
  • Читає поточний локальний стан. Пакету, target та автоматичного оновлення немає; окремі читання можуть бачити різні стани.

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

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

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

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

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

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

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

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

  • Читає шлях поточного профілю.
var value = UO.ShardPath();
UO.Print(value);

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

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

  • ExecuteClientApiCompatibility повертає bridge.CurrentProfilePath без зміни вибору профілю або сервера.
return  RunScenario();
 object? RunScenario()
{
    var value = UO.ShardPath();
    if (Truth(Len(value) > 0))
    {
        UO.TextPrint(value);
    }

    return null;
}

int Len(object? value) => Convert.ToString(value)?.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. Повна допоміжна функція – клас сценарію

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

  • Читає поточний локальний стан. Пакету, target та автоматичного оновлення немає; окремі читання можуть бачити різні стани.
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 before = UO.ShardPath();
        UO.Wait(500);
        var after = UO.ShardPath();
        UO.Print(before = after);
        return null;
    }
}

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

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

UO.ShardPath() — UO.ShardPath()

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

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

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

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

case "shardpath":

                case "clientprofilepath": return new InjectionValue(bridge.CurrentProfilePath);

Clone this wiki locally