Skip to content

UO Topic sound visual environment

Codex edited this page Oct 12, 2026 · 6 revisions

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

Звук, освітлення та погода

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

Звуки клієнта, відтворення звукових файлів, освітлення, сезон і погодні ефекти.

Розділи

Тема Команди та пояснення
Звук UO.Sound
Відтворення звукового файлу UO.PlayWav
Освітлення UO.Light
Сезон UO.SetSeason
Фільтр погоди UO.FilterWeather

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

Навколишнє середовище

UO.Sound · UO.PlayWav · UO.Alarm · UO.Light · UO.SetSeason · UO.FilterWeather · UO.TicksAnim

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

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

UO.PlayWav

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

UO.Print(UO.PlayWav("alert.wav"));

UO.Light

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

UO.Light();

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


UO.Alarm

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

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

void UO.Alarm();

Друкує слово Alarm у локальний системний журнал ClassicUO. Використовуйте як замітку про умову в скрипті.

Параметри

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

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

void - значення немає. Виконуйте окремим рядком. Це не bool та не підтвердження, що користувач побачив повідомлення.

Поведінка

  • Зареєстровано лише форму UO.Alarm() без параметрів. Для власного тексту використовуйте UO.Print(text).
  • Команда не відтворює звук, не блимає значком і не активує вікно. Повідомлення залишається локальним: воно не надсилається до ігрового чату.

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

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

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

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

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

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

1. Поставити позначку в журналі – прямий скрипт

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

  • Параметрів немає; у системному журналі з'являється слово Alarm.
UO.Alarm();

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

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

  • Alarm не має параметра тексту. Life повертає число HP; Print додає зрозумілий опис причини.
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.Life() < 30))
    {
        UO.Alarm();
        UO.Print("Health is below 30");
    }

    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. Відзначити результат пошуку - клас сценарію

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

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

     public object? RunScenario()
    {
        var item = UO.FindType(0x0EED, -1, "backpack");
        if (Truth(item != ""))
        {
            UO.Alarm();
            UO.Print("Gold stack found: " + Convert.ToString(item));
        }
        else
        {
            UO.Print("No gold stack in the loaded backpack");
        }

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

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

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

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

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

case "alarm":

                    SystemMessage(arguments.Length > 0 ? Text(0) : "Alarm"); return InjectionValue.Unit;

UO.FilterWeather

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

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

void UO.FilterWeather();
void UO.FilterWeather(object? enabled);

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

Параметри

  • enabled — Необов'язкове значення: без аргументу фільтр вмикається; 0 вимикає, ненульове int включає.

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

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

Поведінка

  • Записує нормалізований прапор у runtime state та передає його менеджеру. Фільтр впливає обробку клієнтом; серверні події та інші налаштування журналу залишаються окремими.

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

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

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

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

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

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

1. Включити без аргументу – прямий скрипт

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

  • Нульова кількість аргументів означає включення, а чи не читання.
UO.FilterWeather();

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

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

  • Явний 0 вимикає клієнтський фільтр.
return  RunScenario();
 object? RunScenario()
{
    UO.FilterWeather(0);
    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.FilterWeather(1);
        UO.FilterWeather(0);
        return null;
    }
}

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

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

UO.FilterWeather() — UO.FilterWeather()

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

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

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

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

case "filterweather": state.WeatherFilter = arguments.Length == 0 || Arg(0) != 0 ? 1 : 0; bridge.SetWeatherFilter(state.WeatherFilter); break;

UO.FilterWeather(enabled) — UO.FilterWeather(Any)

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

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

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

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

case "filterweather": state.WeatherFilter = arguments.Length == 0 || Arg(0) != 0 ? 1 : 0; bridge.SetWeatherFilter(state.WeatherFilter); break;

UO.Light

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

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

void UO.Light();
void UO.Light(object? value);

Локально задає загальну освітленість клієнта.

Параметри

  • value — Необов'язкове ціле: 0..30, обмежується до цього діапазону. Форма без аргументів використовує 0; це запис, не читання.

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

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

Поведінка

  • ExecuteLegacyManualAlias передає Arg(0), де відсутній аргумент дорівнює 0. SetLight присвоює Light.Overall та Light.RealOverall обмежене значення byte.
  • Не змінює освітленість в інших гравців і не вимагає її у сервера. Наступний серверний пакет освітлення може змінити значення.

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

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

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

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

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

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

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

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

  • Локально задає загальну освітленість клієнта.
UO.Light();

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

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

  • ExecuteLegacyManualAlias передає Arg(0), де відсутній аргумент дорівнює 0. SetLight присвоює Light.Overall та Light.RealOverall обмежене значення byte.
return  RunScenario();
 object? RunScenario()
{
    UO.Light(15);
    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.Light(99);
        UO.Print("Light clamped to 30");
        return null;
    }
}

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

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

UO.Light() — UO.Light()

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

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

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

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

case "light": bridge.SetLight(Arg(0)); break;

UO.Light(value) — UO.Light(Any)

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

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

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

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

case "light": bridge.SetLight(Arg(0)); break;

UO.PlayWav

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

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

int UO.PlayWav(object? file);

Відтворює локальний звуковий файл.

Параметри

  • file - Шлях до аудіофайлу. Абсолютний шлях зберігається, відносний дозволяється від CUOEnviroment. ExecutablePath. Розширення саме не перевіряється: файл читає SoundEffect.FromStream.

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

Числовий прапор int: 1 — sound.Play() прийнятий, 0 — немає файлу, відмова відтворення або спіймана помилка. Це не завершення відтворення.

Поведінка

  • Bridge відкриває файл для читання, декодує SoundEffect.FromStream, зберігає прийняті звуки в обмеженому списку _sounds і видаляє/Dispose старі при досягненні ліміту.
  • У разі неіснуючого файлу/помилки виводиться повідомлення, результат 0. Команда не чекає на закінчення звучання і не передає файл серверу.

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

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

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

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

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

var result = UO.PlayWav("alert.wav");
UO.Print("PlayWav: " + Convert.ToString(result));

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

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

  • Відтворює локальний звуковий файл.
UO.Print(UO.PlayWav("alert.wav"));

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

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

  • Bridge відкриває файл для читання, декодує SoundEffect.FromStream, зберігає прийняті звуки в обмеженому списку _sounds і видаляє/Dispose старі при досягненні ліміту.
return  RunScenario();
 object? RunScenario()
{
    UO.Print(UO.PlayWav("C:\\UO Sounds\\alert.wav"));
    return null;
}

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

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

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

     public object? RunScenario()
    {
        var accepted = UO.PlayWav("alert.wav");
        if (Truth(accepted == 0))
        {
            UO.Print("Audio file could not be played");
        }

        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.PlayWav(file) — UO.PlayWav(Any)

Параметри: file (Any/String)

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

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

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

case "playwav": return new InjectionValue(bridge.PlayWav(Text(0)));

UO.PlayWav(file) — UO.PlayWav(String)

Параметри: file (Any/String)

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

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

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

public int PlayWav(string file) => bridge.PlayWav(file);

UO.SetSeason

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

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

void UO.SetSeason(object? season);

Локально змінює сезон, що відображається.

Параметри

  • season — int: 0..4; значення нижче 0/вище 4 обмежуються найближчим кордоном. Номер відповідає enum Season клієнта.

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

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

Поведінка

  • Bridge.SetSeason викликає _world.ChangeSeason((Season)clamp(season,0,4), -1). Це відображення світу клієнта, а не запит зміни серверної пори року.
  • Дані сервера можуть пізніше змінити сезон знову. Команда не змінює карту, погоду сервера або календарну дату.

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

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

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

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

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

UO.Print("Calling UO.SetSeason");
UO.SetSeason(0);

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

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

  • Локально змінює сезон, що відображається.
UO.SetSeason(0);

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

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

  • Bridge.SetSeason викликає _world.ChangeSeason((Season)clamp(season,0,4), -1). Це відображення світу клієнта, а не запит зміни серверної пори року.
return  RunScenario();
 object? RunScenario()
{
    UO.SetSeason(4);
    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.SetSeason(99);
        UO.Print("Season clamped to 4");
        return null;
    }
}

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

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

UO.SetSeason(season) — UO.SetSeason(Any)

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

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

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

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

case "setseason": bridge.SetSeason(Arg(0)); break;

UO.Sound

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

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

void UO.Sound(object? soundId);

Відтворює звук по ID із ресурсів клієнта.

Параметри

  • soundId — int ID звуку ресурсів UO; не шлях до WAV та не duration.

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

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

Поведінка

  • ExecuteLegacyManualAlias викликає bridge.PlaySound, де RequireGameView("PlaySound").Audio.PlaySound(sound) виконується на ігровому потоці.
  • Потрібне відчинене графічне вікно з audio. Помилка відсутності GUI може перервати виклик; результат відтворення ця void-команда не повертає. Для локального файлу використовуйте PlayWav.

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

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

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

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

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

UO.Print("Calling UO.Sound");
UO.Sound(0x0040);

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

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

  • Відтворює звук по ID із ресурсів клієнта.
UO.Sound(0x0040);

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

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

  • ExecuteLegacyManualAlias викликає bridge.PlaySound, де RequireGameView("PlaySound").Audio.PlaySound(sound) виконується на ігровому потоці.
return  RunScenario();
 object? RunScenario()
{
    var soundId = 0x0040;
    UO.Sound(soundId);
    return null;
}

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

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

  • Потрібне відчинене графічне вікно з audio. Помилка відсутності GUI може перервати виклик; результат відтворення ця Unit-команда не повертає. Для локального файлу використовуйте PlayWav.
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.Sound(0x0040);
        UO.Wait(250);
        UO.Print("Sound request made");
        return null;
    }
}

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

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

UO.Sound(soundId) — UO.Sound(Any)

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

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

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

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

case "sound": bridge.PlaySound(Arg(0)); break;

UO.TicksAnim

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

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

int UO.TicksAnim();

Читає збережену позначку TicksAnim.

Параметри

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

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

int - позначка UO.Timer в десятих частках секунди від старту runtime. 0 - позначка ще не встановлена ​​або подія була в першу десяту секунди; це не мілісекунди та не календарний час.

Поведінка

  • Повертає поле ticksAnim. Його оновлює Morph або ненульовий результат Move; це не автоматичне відстеження всіх ручних/серверних дій. Сама команда позначку не змінює.
  • UO.Timer() - позначка обчислює вік десятих секунди. Між різними runtime позначки не порівнюються.

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

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

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

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

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

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

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

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

  • Читає збережену позначку TicksAnim.
var stamp = UO.TicksAnim();
UO.Print(stamp);

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

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

  • Повертає поле ticksAnim. Його оновлює Morph або ненульовий результат Move; це не автоматичне відстеження всіх ручних/серверних дій. Сама команда позначку не змінює.
return  RunScenario();
 object? RunScenario()
{
    var stamp = UO.TicksAnim();
    var ageTenths = UO.Timer() - stamp;
    UO.Print(ageTenths);
    return null;
}

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

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

  • UO.Timer() - позначка обчислює вік десятих секунди. Між різними runtime позначки не порівнюються.
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.TicksAnim();
        UO.Wait(250);
        var after = UO.TicksAnim();
        UO.Print(before = after);
        return null;
    }
}

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

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

UO.TicksAnim() — UO.TicksAnim()

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

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

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

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

public int TicksAnim() => ticksAnim;

Clone this wiki locally