Repository navigation
UO Topic sound visual environment
Українська · Русский · 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.Print(UO.PlayWav("alert.wav"));Параметри, результат та всі сценарії
UO.Light();Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.Alarm();Друкує слово Alarm у локальний системний журнал ClassicUO. Використовуйте як замітку про умову в скрипті.
Параметрів немає.
void - значення немає. Виконуйте окремим рядком. Це не bool та не підтвердження, що користувач побачив повідомлення.
- Зареєстровано лише форму UO.Alarm() без параметрів. Для власного тексту використовуйте UO.Print(text).
- Команда не відтворює звук, не блимає значком і не активує вікно. Повідомлення залишається локальним: воно не надсилається до ігрового чату.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Команда викликається окремим рядком. Повідомлення перед нею показує початок виклику, а не підтвердження дії сервера.
UO.Print("Calling UO.Alarm");
UO.Alarm();Параметри та порядок виконання:
- Параметрів немає; у системному журналі з'являється слово Alarm.
UO.Alarm();Параметри та порядок виконання:
- 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;Параметри та порядок виконання:
- 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.
Параметри: Немає параметрів.
Результат: void / Unit.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.SystemMessage:SystemMessage(arguments.Length > 0 ? Text(0) : "Alarm"). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(0).
Внутрішній код реалізації, не самостійний скрипт.
case "alarm":
SystemMessage(arguments.Length > 0 ? Text(0) : "Alarm"); return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.FilterWeather();
void UO.FilterWeather(object? enabled);Вмикає або вимикає клієнтський погодний фільтр.
-
enabled— Необов'язкове значення: без аргументу фільтр вмикається; 0 вимикає, ненульове int включає.
void - значення, що повертається немає.
- Записує нормалізований прапор у runtime state та передає його менеджеру. Фільтр впливає обробку клієнтом; серверні події та інші налаштування журналу залишаються окремими.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Команда викликається окремим рядком. Повідомлення перед нею показує початок виклику, а не підтвердження дії сервера.
UO.Print("Calling UO.FilterWeather");
UO.FilterWeather();Параметри та порядок виконання:
- Нульова кількість аргументів означає включення, а чи не читання.
UO.FilterWeather();Параметри та порядок виконання:
- Явний 0 вимикає клієнтський фільтр.
return RunScenario();
object? RunScenario()
{
UO.FilterWeather(0);
return null;
}Параметри та порядок виконання:
- Фільтр вмикається і явно повертається у вимкнений стан.
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.
Параметри: Немає параметрів.
Результат: void / Unit.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Arg:Arg(0). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetWeatherFilter:bridge.SetWeatherFilter(state.WeatherFilter).
Внутрішній код реалізації, не самостійний скрипт.
case "filterweather": state.WeatherFilter = arguments.Length == 0 || Arg(0) != 0 ? 1 : 0; bridge.SetWeatherFilter(state.WeatherFilter); break;Параметри: enabled (Any)
Результат: void / Unit.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Arg:Arg(0). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetWeatherFilter:bridge.SetWeatherFilter(state.WeatherFilter).
Внутрішній код реалізації, не самостійний скрипт.
case "filterweather": state.WeatherFilter = arguments.Length == 0 || Arg(0) != 0 ? 1 : 0; bridge.SetWeatherFilter(state.WeatherFilter); break;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.Light();
void UO.Light(object? value);Локально задає загальну освітленість клієнта.
-
value— Необов'язкове ціле: 0..30, обмежується до цього діапазону. Форма без аргументів використовує 0; це запис, не читання.
void - значення немає. Викликайте окремим рядком; завершення не підтверджує дію сервера.
- ExecuteLegacyManualAlias передає Arg(0), де відсутній аргумент дорівнює 0. SetLight присвоює Light.Overall та Light.RealOverall обмежене значення byte.
- Не змінює освітленість в інших гравців і не вимагає її у сервера. Наступний серверний пакет освітлення може змінити значення.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Команда викликається окремим рядком. Повідомлення перед нею показує початок виклику, а не підтвердження дії сервера.
UO.Print("Calling UO.Light");
UO.Light();Параметри та порядок виконання:
- Локально задає загальну освітленість клієнта.
UO.Light();Параметри та порядок виконання:
- ExecuteLegacyManualAlias передає Arg(0), де відсутній аргумент дорівнює 0. SetLight присвоює Light.Overall та Light.RealOverall обмежене значення byte.
return RunScenario();
object? RunScenario()
{
UO.Light(15);
return null;
}Параметри та порядок виконання:
- Не змінює освітленість в інших гравців і не вимагає її у сервера. Наступний серверний пакет освітлення може змінити значення.
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.
Параметри: Немає параметрів.
Результат: void / Unit.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetLight:bridge.SetLight(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Arg:Arg(0).
Внутрішній код реалізації, не самостійний скрипт.
case "light": bridge.SetLight(Arg(0)); break;Параметри: value (Any)
Результат: void / Unit.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetLight:bridge.SetLight(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Arg:Arg(0).
Внутрішній код реалізації, не самостійний скрипт.
case "light": bridge.SetLight(Arg(0)); break;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.PlayWav(object? file);Відтворює локальний звуковий файл.
-
file- Шлях до аудіофайлу. Абсолютний шлях зберігається, відносний дозволяється від CUOEnviroment. ExecutablePath. Розширення саме не перевіряється: файл читає SoundEffect.FromStream.
Числовий прапор int: 1 — sound.Play() прийнятий, 0 — немає файлу, відмова відтворення або спіймана помилка. Це не завершення відтворення.
- Bridge відкриває файл для читання, декодує SoundEffect.FromStream, зберігає прийняті звуки в обмеженому списку _sounds і видаляє/Dispose старі при досягненні ліміту.
- У разі неіснуючого файлу/помилки виводиться повідомлення, результат 0. Команда не чекає на закінчення звучання і не передає файл серверу.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
var result = UO.PlayWav("alert.wav");
UO.Print("PlayWav: " + Convert.ToString(result));Параметри та порядок виконання:
- Відтворює локальний звуковий файл.
UO.Print(UO.PlayWav("alert.wav"));Параметри та порядок виконання:
- Bridge відкриває файл для читання, декодує SoundEffect.FromStream, зберігає прийняті звуки в обмеженому списку _sounds і видаляє/Dispose старі при досягненні ліміту.
return RunScenario();
object? RunScenario()
{
UO.Print(UO.PlayWav("C:\\UO Sounds\\alert.wav"));
return null;
}Параметри та порядок виконання:
- У разі неіснуючого файлу/помилки виводиться повідомлення, результат 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.
Параметри: file (Any/String)
Результат: int / Any.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.PlayWav:bridge.PlayWav(Text(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(0).
Внутрішній код реалізації, не самостійний скрипт.
case "playwav": return new InjectionValue(bridge.PlayWav(Text(0)));Параметри: file (Any/String)
Результат: int / Integer.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.PlayWav. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.PlayWav:bridge.PlayWav(file).
Внутрішній код реалізації, не самостійний скрипт.
public int PlayWav(string file) => bridge.PlayWav(file);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.SetSeason(object? season);Локально змінює сезон, що відображається.
-
season— int: 0..4; значення нижче 0/вище 4 обмежуються найближчим кордоном. Номер відповідає enum Season клієнта.
void - значення немає. Викликайте окремим рядком; завершення не підтверджує дію сервера.
- Bridge.SetSeason викликає _world.ChangeSeason((Season)clamp(season,0,4), -1). Це відображення світу клієнта, а не запит зміни серверної пори року.
- Дані сервера можуть пізніше змінити сезон знову. Команда не змінює карту, погоду сервера або календарну дату.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Команда викликається окремим рядком. Повідомлення перед нею показує початок виклику, а не підтвердження дії сервера.
UO.Print("Calling UO.SetSeason");
UO.SetSeason(0);Параметри та порядок виконання:
- Локально змінює сезон, що відображається.
UO.SetSeason(0);Параметри та порядок виконання:
- Bridge.SetSeason викликає _world.ChangeSeason((Season)clamp(season,0,4), -1). Це відображення світу клієнта, а не запит зміни серверної пори року.
return RunScenario();
object? RunScenario()
{
UO.SetSeason(4);
return null;
}Параметри та порядок виконання:
- Дані сервера можуть пізніше змінити сезон знову. Команда не змінює карту, погоду сервера або календарну дату.
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.
Параметри: season (Any)
Результат: void / Unit.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetSeason:bridge.SetSeason(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Arg:Arg(0).
Внутрішній код реалізації, не самостійний скрипт.
case "setseason": bridge.SetSeason(Arg(0)); break;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
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.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Команда викликається окремим рядком. Повідомлення перед нею показує початок виклику, а не підтвердження дії сервера.
UO.Print("Calling UO.Sound");
UO.Sound(0x0040);Параметри та порядок виконання:
- Відтворює звук по ID із ресурсів клієнта.
UO.Sound(0x0040);Параметри та порядок виконання:
- ExecuteLegacyManualAlias викликає bridge.PlaySound, де RequireGameView("PlaySound").Audio.PlaySound(sound) виконується на ігровому потоці.
return RunScenario();
object? RunScenario()
{
var soundId = 0x0040;
UO.Sound(soundId);
return null;
}Параметри та порядок виконання:
- Потрібне відчинене графічне вікно з 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.
Параметри: soundId (Any)
Результат: void / Unit.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.PlaySound:bridge.PlaySound(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Arg:Arg(0).
Внутрішній код реалізації, не самостійний скрипт.
case "sound": bridge.PlaySound(Arg(0)); break;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.TicksAnim();Читає збережену позначку TicksAnim.
Параметрів немає.
int - позначка UO.Timer в десятих частках секунди від старту runtime. 0 - позначка ще не встановлена або подія була в першу десяту секунди; це не мілісекунди та не календарний час.
- Повертає поле ticksAnim. Його оновлює Morph або ненульовий результат Move; це не автоматичне відстеження всіх ручних/серверних дій. Сама команда позначку не змінює.
- UO.Timer() - позначка обчислює вік десятих секунди. Між різними runtime позначки не порівнюються.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
var result = UO.TicksAnim();
UO.Print("TicksAnim: " + Convert.ToString(result));Параметри та порядок виконання:
- Читає збережену позначку TicksAnim.
var stamp = UO.TicksAnim();
UO.Print(stamp);Параметри та порядок виконання:
- Повертає поле ticksAnim. Його оновлює Morph або ненульовий результат Move; це не автоматичне відстеження всіх ручних/серверних дій. Сама команда позначку не змінює.
return RunScenario();
object? RunScenario()
{
var stamp = UO.TicksAnim();
var ageTenths = UO.Timer() - stamp;
UO.Print(ageTenths);
return null;
}Параметри та порядок виконання:
- 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.
Параметри: Немає параметрів.
Результат: int / Integer.
Під час виклику:
Внутрішній код реалізації, не самостійний скрипт.
public int TicksAnim() => ticksAnim;ClassicUO — Bad Newbie & C# Scripts IDE