Repository navigation
UO Topic magic
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
Головна · C# · IDE · Команди UO · За абеткою · Приклади · Мови
Застосування заклинань і магічних здібностей та подорожі за допомогою магії. Для заклинання з ціллю підготуйте вибір цілі й перевірте необхідні умови.
Відкрити повний каталог та приклади
| Тема | Команди та пояснення |
|---|---|
| Застосування заклинання | UO.Cast |
| Заклинання на об’єкт | UO.CastToObject |
| Магічна здібність | UO.CastAbility |
| Активна здібність | UO.IsActiveSpellAbility |
| Таймери заклинань | UO.TicksSpell |
UO.Cast · UO.CastToObject · UO.CastAbility · UO.IsActiveSpellAbility · UO.TicksSpell
Нижче наведено короткі приклади. У повному описі кожної команди є параметри, результат, обмеження та кілька самостійних скриптів: прямий код, варіант із функцією та варіант із класом.
Параметри, результат та всі сценарії
UO.CancelWaitTarget();
if (Truth(UO.Cast("Cure")))
{
UO.Print("Choose the character with the spell cursor");
}
else
{
UO.Print("Cure request rejected");
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри, результат та всі сценарії
var accepted = UO.CastToObject("Heal", "self");
UO.Print(Convert.ToString(accepted));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.AddGate(object? arg0);-
bookSerial— значення-ідентифікатор, яке сумісний скрипт зберігає як запис legacy-списку. У поточному runtime значення серіалізується в рядок; команда не перевіряє наявність об'єкта у світі.
void. Команда не підтверджує наявність книги або створення ігрового порталу.
- Значення додається до списку
AddGateпоточного стану runtime. У ClassicUO цей compatibility-list не викликає ігрову дію і немає документованого публічного getter для читання.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Команда викликається окремим рядком. Повідомлення перед нею показує початок виклику, а не підтвердження дії сервера.
UO.Print("Calling UO.AddGate");
UO.AddGate("0x40012345");Параметри та порядок виконання:
- Збережіть ідентифікатор як застарілі дані, не відкриваючи ворота.
UO.AddGate("0x40012345");Параметри та порядок виконання:
- Використовувати значення з рядка передане сумісному скрипту.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var bookSerial = "0x40012345";
UO.AddGate(bookSerial);
return null;
}Параметри та порядок виконання:
- Записати значення в runtime-список AddGate.
- Виклик зберігає compatibility-дані; він не використовує книгу у світі.
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()
{
RememberGateBook("0x40012345");
return null;
}
void RememberGateBook(dynamic bookSerial)
{
UO.AddGate(bookSerial);
}
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.AddRecall(object? arg0);-
bookSerial— значення-ідентифікатор, яке сумісний скрипт зберігає як запис legacy-списку. Runtime серіалізує передане значення у рядок.
void. Виклик не повертає результату та не підтверджує наявність книги.
- Значення додається до списку
AddRecallпоточного стану runtime. У ClassicUO цей compatibility-list сам не відправляє ігрові команди і не має документованого публічного getter для читання.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Команда викликається окремим рядком. Повідомлення перед нею показує початок виклику, а не підтвердження дії сервера.
UO.Print("Calling UO.AddRecall");
UO.AddRecall("0x40012345");Параметри та порядок виконання:
- Зберегти значення як compatibility-дані, не запускати Recall.
UO.AddRecall("0x40012345");Параметри та порядок виконання:
- Надіслати ідентифікатор через рядкову змінну.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var bookSerial = "0x40012345";
UO.AddRecall(bookSerial);
return null;
}Параметри та порядок виконання:
- Кожен виклик додає окремий запис до AddRecall поточного runtime.
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.AddRecall("0x40012345");
UO.AddRecall("0x40012346");
return null;
}
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.Cast(object? arg0);Запитує застосування заклинання за назвою. Рівно один параметр: spellName, наприклад UO.Cast("Heal"). Мета вибирається окремо: мишкою прицілом, що з'явився, або через WaitTargetObject перед Cast. Прийняття запиту не підтверджує успішного ефекту.
-
spellName- Обов'язковий рядок - англійська назва заклинання в лапках: "Heal", "Cure", "Greater Heal". Імена не перекладаються разом із інтерфейсом. Словник також розпізнає вбудовані аліаси та слова заклинань. Числовий ID, включаючи рядок "29", target, відстань, notoriety, maxZ та очікування не є параметрами Cast. Всі імена та школи.
int: 1/true — клієнт прийняв запит; 0/false - назва не розпізнана або запит локально відхилений. Можна писати if UO.Cast("Heal") { ... } або порівнювати з 1/true. Це не ID заклинання та не підтвердження лікування/урону. Відсутній чи зайвий аргумент викликає помилку. Приціл та завершення заклинання команда не чекає.
- Єдина форма: UO.Cast(spellName). Другого та наступних аргументів немає. Пошук мети, підготовка відповіді, очікування та очищення виконуються окремими командами.
- Для ручного вибору очистіть колишню чергу CancelWaitTarget, викличте Cast і клацніть потрібний об'єкт прицілом. Сам Cast черга не очищає: сценарій міг підготувати її наперед.
- Для автоматичної мети спочатку викличте WaitTargetObject(serial/аліас), потім Cast(name). Такий порядок дозволяє відповісти на швидкий сервер сервера. Для заклинань без прицілу відповіді не готуйте.
- Сервер визначає доступність заклинання, ресурси, допустиму мету, дальність та ефект. Позитивний результат підтверджує лише локальне прийняття запиту.
- Підготовлена черга може залишитися у разі відмови сервера без прицілу. Видаліть її CancelWaitTarget після обмеженого очікування або локальної відмови. Не запускайте паралельно інші сценарії з target.
- Прийнятий запит оновлює TicksSpell. Cast не чекає на анімацію, лікування або зміну HP. Каталожний ID пояснює внутрішній протокол, але не замінює назву аргументу.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
var result = UO.Cast("Cure");
UO.Print("Cast: " + Convert.ToString(result));Параметри та порядок виконання:
- Cure – єдиний аргумент Cast. Після запуску оберіть персонажа ігровим прицілом. Серверну відмову та результат перевіряйте у грі.
UO.CancelWaitTarget();
if (Truth(UO.Cast("Cure")))
{
UO.Print("Choose the character with the spell cursor");
}
else
{
UO.Print("Cure request rejected");
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- self - аргумент WaitTargetObject; Heal – єдиний аргумент Cast. 3000 — три секунди для прицілу у цьому прикладі, не гарантія завершення лікування. Finally видаляє відповідь, що залишилася, і при відмові.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
UO.CancelWaitTarget();
try
{
UO.WaitTargetObject("self");
if (Truth(UO.Cast("Heal")))
{
await Delay(3000);
}
}
finally
{
UO.CancelWaitTarget();
}
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;Параметри та порядок виконання:
- spellName, target, cleanupDelayMs — параметри вашої функції CastAtObject, не навантаження UO.Cast. Всередині Cast приймає лише spellName. ASC переводить рядковий ID до числа; 4000 - затримка очищення черги. true означає прийняття запиту, що не успіх лікування.
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 target = Asc(UO.GetSerial("lasttarget"), 0);
if (Truth(await CastAtObject("Greater Heal", target, 4000)))
{
UO.Print("Request sent; verify healing in the game");
}
return null;
}
async Task<dynamic> CastAtObject(dynamic spellName, dynamic target, dynamic cleanupDelayMs)
{
if (!(Truth(UO.Connected())) || Truth(UO.Dead()) || Truth(target <= 0) || !(Truth(UO.Exists(target))))
{
return false;
}
dynamic accepted = false;
UO.CancelWaitTarget();
try
{
UO.WaitTargetObject(target);
accepted = UO.Cast(spellName);
if (Truth(accepted))
{
await Delay(cleanupDelayMs);
}
}
finally
{
UO.CancelWaitTarget();
}
return accepted;
}
int Asc(object? value, int fallback = 0)
{
string text = Convert.ToString(value) ?? "";
if (text.StartsWith("0x", StringComparison.OrdinalIgnoreCase))
return int.TryParse(text[2..], System.Globalization.NumberStyles.HexNumber, System.Globalization.CultureInfo.InvariantCulture, out int hex) ? hex : fallback;
return int.TryParse(text, out int number) ? number : fallback;
}
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;
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.CastAbility(object? arg0);Перемикає вибрану здатність поточної зброї через UseAbility: повторний виклик вже вибраної здатності знімає вибір.
-
abilityName— Назва здібності або числовий рядок, що дозволяється ResolveClassicUOAbilityId; невідоме значення дає 0. -
abilityId— int від 1 до довжини каталогу AbilityData.Abilities; Здатність повинна збігатися з першим або вторинним поточним персонажем.
int 1 - клієнт викликав поточну primary/secondary здатність; 0 — немає персонажа, невідомий ID або здатність не відповідає поточній зброї.
- 1 описує прийняття клієнтського запиту, а чи не успішний удар чи списання ресурсів сервером. ID, який не є поточною primary/secondary здатністю, повертає 0 навіть якщо є в каталозі.
- GameActions.UsePrimaryAbility/UseSecondaryAbility перевіряють біт 0x80. При вимкненому биті знімають інший вибір та відправляють обрану здатність; при вже увімкненому відправляють ID 0 для відключення. Потім перемикають біт. Повернення 1 підтверджує виклик цієї клієнтської гілки, включаючи вимкнення.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
var result = UO.CastAbility(UO.GetAbilityID("Armor Ignore"));
UO.Print("CastAbility: " + Convert.ToString(result));Параметри та порядок виконання:
- Наявність у каталозі окремо від відповідності зброї.
var id = UO.GetAbilityID("Armor Ignore");
if (Truth(id > 0))
{
var accepted = UO.CastAbility(id);
UO.Print(Convert.ToString(accepted));
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- Ім'я дозволяється в ID та перевіряється проти поточної зброї.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var accepted = UO.CastAbility("Armor Ignore");
UO.Print(Convert.ToString(accepted));
return null;
}Параметри та порядок виконання:
- Нуль знаходиться поза каталогом і повертає 0 без активації.
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 accepted = UO.CastAbility(0);
UO.Print(Convert.ToString(accepted));
return null;
}
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.CastToObject(object? arg0, object? arg1);Ставить очікувану об'єктну мету і відправляє заклинання на ім'я або числове ID.
-
SpellName- string з ім'ям заклинання, у тому числі underscore замість пробілу, або числовий ID для bridge.Cast. -
ObjID— Serial об'єкта або підтримуване ім'я self/backpack/lasttarget/збереженого об'єкта; числові рядки та 0x-рядки дозволяються runtime.
int/логічний результат 1 - клієнт прийняв запит Cast; 0 — запит відхилено. Успіх заклинання сервером не підтверджується.
- Рядкова форма йде через CastAtTarget; числова форма ставить WaitTargetObject, потім bridge.Cast. При відмові Cast скасовується очікувана мета. При прийнятті оновлюється ticksSpell.
- Bridge відхиляє непозитивний spellId, відсутність з'єднання та мертвого персонажа. Таймер відзначає відправлення, а чи не закінчення кастування; Результат впливу об'єкт залежить від сервера.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
object? result = UO.CastToObject("Heal", "self");
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Параметри та порядок виконання:
- Heal ставить self метою наступного серверного курсору.
var accepted = UO.CastToObject("Heal", "self");
UO.Print(Convert.ToString(accepted));Параметри та порядок виконання:
- Числова форма передає ID 4 клієнту; 1 означає надсилання запиту.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var accepted = UO.CastToObject(4, UO.Self());
UO.Print(Convert.ToString(accepted));
return null;
}Параметри та порядок виконання:
- Локальна перевірка існування допомагає не використовувати відсутній lasttarget.
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 target = UO.LastTarget();
if (Truth(UO.Exists(target)))
{
var accepted = UO.CastToObject("Greater Heal", target);
UO.Print(Convert.ToString(accepted));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.IsActiveSpellAbility(object? arg0);Перевіряє, чи сервер про активний стан обраної здатності/заклинання. Корисна перед повторною активацією здатності, що підтримується. Сама нічого не включає, не кастує та не вибирає мету.
-
SpellName— Єдиний обов'язковий параметр: англійське ім'я з каталогу заклинань або цілий ID. Наприклад, "Confidence" і 402 позначають одне заклинання Bushido. Регістр не важливий, підкреслення імені замінюються пробілами. Числовий рядок також розпізнається. Не передавайте ID персонажа, type предмета чи номер навички.
int: 1 — сервер повідомив активний стан цього ID; 0 — такого активного стану зараз немає. У C# перевіряйте числовий результат: if (UO.IsActiveSpellAbility(402) != 0) { ... }. Це логічний ознака, а чи не кількість, час чи результат останнього каста. Невідоме ім'я, ID поза 1…65535 і відсутність отриманого стану теж дають 0.
- Список оновлює пакет сервера 0xBF/0x25: увімкнення додає ID, вимкнення прибирає. Працює без графічного вікна та без кнопки заклинання на екрані. Закриття вікна зберігає стан; розрив з'єднання очищує його. Відповідь 0 не доводить, що персонаж не здатний використовувати заклинання. Сервер має надсилати цей статус; це універсальна перевірка всіх баффів. Для миттєвих Heal/Recall такий приклад не підтверджує успішного касту. Тривалість, мана, доступність і успіх заклинання цією командою, що залишилася, не визначаються.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
object? result = UO.IsActiveSpellAbility(402);
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Параметри та порядок виконання:
- 402 — ID Confidence. Змінна active містить 1 або 0; true тут еквівалентний 1. Повідомлення описує набутий статус, не результат спроби каста.
var active = UO.IsActiveSpellAbility(402);
if (Truth(Truth(active) == true))
{
UO.Print("Confidence is active");
}
else
{
UO.Print("No active Confidence state received");
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- "Confidence" - той же ID 402. Cast приймає лише назву. Запит надсилається один раз, якщо активного статусу немає; він не гарантує успіху на сервері. Не запускайте цей фрагмент у швидкому циклі: відповідь сервера може запізнюватися.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
if (Truth(UO.IsActiveSpellAbility("Confidence") == 0))
{
UO.Cast("Confidence");
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- spell - назва або ID; expected - true для включення, false для вимкнення; timeoutMs — межа очікування в мілісекундах. Main чекає до '500' мс з перевірками кожні '25' мс і нічого не кастує. Функція повертає true під час збігу, інакше false. Це обмежене очікування локального стану, що не доказ причини його зміни; фактичний час може збільшитись при паузі скрипту або навантаженні.
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(WaitAbilityState("Confidence", true, 500)))
{
UO.Print("Active state received");
}
else
{
UO.Print("No active state before timeout");
}
return null;
}
dynamic WaitAbilityState(dynamic spell, dynamic expected, dynamic timeoutMs)
{
var elapsed = 0;
while (Truth(elapsed < timeoutMs))
{
if (Truth((UO.IsActiveSpellAbility(spell) == 1) == expected))
{
return true;
}
UO.Wait(25);
elapsed = elapsed + 25;
}
return Truth((UO.IsActiveSpellAbility(spell) == 1) == expected);
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.TicksSpell();Читає збережену позначку TicksSpell.
Параметрів немає.
int - позначка UO.Timer в десятих частках секунди від старту runtime. 0 - позначка ще не встановлена або подія була в першу десяту секунди; це не мілісекунди та не календарний час.
- Повертає поле ticksSpell. Його оновлює успішно прийнятий Cast/CastAtTarget; це не автоматичне відстеження всіх ручних/серверних дій. Сама команда позначку не змінює.
- UO.Timer() - позначка обчислює вік десятих секунди. Між різними runtime позначки не порівнюються.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
var result = UO.TicksSpell();
UO.Print("TicksSpell: " + Convert.ToString(result));Параметри та порядок виконання:
- Читає збережену позначку TicksSpell.
var stamp = UO.TicksSpell();
UO.Print(stamp);Параметри та порядок виконання:
- Повертає поле ticksSpell. Його оновлює успішно прийнятий Cast/CastAtTarget; це не автоматичне відстеження всіх ручних/серверних дій. Сама команда позначку не змінює.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var stamp = UO.TicksSpell();
var ageTenths = UO.Timer() - stamp;
UO.Print(ageTenths);
return null;
}Параметри та порядок виконання:
- UO.Timer() - позначка обчислює вік десятих секунди. Між різними runtime позначки не порівнюються.
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 before = UO.TicksSpell();
UO.Wait(250);
var after = UO.TicksSpell();
UO.Print(before = after);
return null;
}
}ClassicUO — Bad Newbie & C# Scripts IDE