Repository navigation
UO Topic skills
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
Головна · C# · IDE · Команди UO · За абеткою · Приклади · Мови
Застосування навичок, читання їхніх значень і меж та вибір режиму підвищення, зниження або фіксації. Точні назви навичок і доступність дій залежать від даних клієнта й правил сервера.
Відкрити повний каталог та приклади
| Тема | Команди та пояснення |
|---|---|
| Застосування навички | UO.UseSkill |
| Базове значення навички | UO.GetSkillValue · UO.SkillVal |
| Поточне значення навички | UO.GetSkillCurrentValue |
| Межа навички | UO.GetSkillCap |
| Режим зміни навички | UO.GetSkillLockState · UO.SetSkillLockState |
| Вистежування | UO.Track |
| Заглядання в чужу сумку | UO.Snoop |
| Прихований рух | UO.StealthCnt · UO.UseSkill |
UO.UseSkill · UO.GetSkillCap · UO.GetSkillCurrentValue · UO.GetSkillValue · UO.GetSkillLockState · UO.SetSkillLockState · UO.SkillLockState · UO.SkillVal · UO.Track · UO.Snoop · UO.StealthCnt · UO.TicksSkill
Нижче наведено короткі приклади. У повному описі кожної команди є параметри, результат, обмеження та кілька самостійних скриптів: прямий код, варіант із функцією та варіант із класом.
Параметри, результат та всі сценарії
if (!(Truth(UO.Connected())) || Truth(UO.Dead()) || Truth(UO.Hidden()))
{
return null;
}
if (!(Truth(UO.UseSkill("Hiding"))))
{
UO.Print("Hiding request rejected");
return null;
}
await Delay(1000);
if (Truth(UO.Hidden()))
{
UO.Print("Character is hidden");
}
else
{
UO.Print("Not hidden yet; check the game journal");
}
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;Параметри, результат та всі сценарії
var selector = "Mining";
var value = UO.GetSkillValue(selector);
UO.Print(Convert.ToString(value));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
double UO.GetSkillCap(object? skillName);Читає межу навички, отриману від сервера.
-
skillName— Обов'язкова навичка: ім'я з даних клієнта, наприклад "Mining" або "Animal Lore", або десятковий індекс від 0 до Skills.Length−1, числом або рядком. Регістр імені не важливий, крайні прогалини видаляються, _ замінюється пропуском. Індекс не є ID предмета або індексом від 1. Числовий рядок завжди означає індекс.
double (Double) — пункти навички з кроком 0,1, наприклад 95,1, а не 951. Поле CapFixed ділиться на 10 безпосередньо в Double. 0 означає нульовий рівень навички або відсутність персонажа/навички. Результат не bool. Спадкові SkillVal/BaseVal мають інший масштаб — не змішуйте ці групи функцій.
- Читання виконується через Invoke на ігровому потоці за отриманими даними; мережні пакети не надсилаються. Навичка не використовується і не тренується. Два запити – два окремі знімки.
- Обов'язкова навичка: ім'я з даних клієнта, наприклад "Mining" або "Animal Lore", або десятковий індекс від 0 до Skills.Length−1, числом або рядком. Регістр імені не важливий, крайні прогалини видаляються, _ замінюється пропуском. Індекс не є ID предмета або індексом від 1. Числовий рядок завжди означає індекс.
- ExecuteClientApiCompatibility вибирає гілку команди. Text читає селектор навички, Arg - числові номери та режими. Неперетворюваний аргумент може завершити виклик помилкою перетворення.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
var result = UO.GetSkillCap("Mining");
UO.Print("GetSkillCap: " + Convert.ToString(result));Параметри та порядок виконання:
- У прикладі явно задані selector і при записі mode. Перший рядок вибирає навичку на ім'я або характеристику за номером. Print лише виводить результат.
var selector = "Mining";
var value = UO.GetSkillCap(selector);
UO.Print(Convert.ToString(value));Параметри та порядок виконання:
- Поріг 95.1 та режими 0/1/2 задані для прикладу. −1 перевіряється до зміни режиму. Після запису читається лише локальна копія; це не очікування відповіді сервера.
return RunScenario();
object? RunScenario()
{
if (Truth(UO.GetSkillLockState("Mining") >= 0))
{
var value = UO.GetSkillCap("Mining");
if (Truth(value >= 95.1))
{
UO.Print("Value >= 95.1: " + Convert.ToString(value));
}
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- Весь код помічника наведено нижче Main. selector вибирає навичку/характеристику, mode визначає режим запису. ReadValue/ReadMode повертають вихідне число; ApplyMode перевіряє аргументи, виконує дію та не повертає значення. UO.Wait(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()
{
var before = ReadValue("Animal_Lore");
await Delay(1000);
var after = ReadValue("Animal Lore");
UO.Print(Convert.ToString(after - before));
return null;
}
dynamic ReadValue(dynamic selector)
{
return UO.GetSkillCap(selector);
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
}C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
Параметри: skillName (Any)
Результат: double / Decimal.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetSkillValue:bridge.GetSkillValue(Text(0), false, true). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(0).
Внутрішній код реалізації, не самостійний скрипт.
case "getskillcap": return new InjectionValue(bridge.GetSkillValue(Text(0), false, true));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
double UO.GetSkillCurrentValue(object? skillName);Читає ефективне значення навички з модифікаторами.
-
skillName— Обов'язкова навичка: ім'я з даних клієнта, наприклад "Mining" або "Animal Lore", або десятковий індекс від 0 до Skills.Length−1, числом або рядком. Регістр імені не важливий, крайні прогалини видаляються, _ замінюється пропуском. Індекс не є ID предмета або індексом від 1. Числовий рядок завжди означає індекс.
double (Double) — пункти навички з кроком 0,1, наприклад 95,1, а не 951. Поле ValueFixed ділиться на 10 безпосередньо в Double. 0 означає нульовий рівень навички або відсутність персонажа/навички. Результат не bool. Спадкові SkillVal/BaseVal мають інший масштаб — не змішуйте ці групи функцій.
- Читання виконується через Invoke на ігровому потоці за отриманими даними; мережні пакети не надсилаються. Навичка не використовується і не тренується. Два запити – два окремі знімки.
- Обов'язкова навичка: ім'я з даних клієнта, наприклад "Mining" або "Animal Lore", або десятковий індекс від 0 до Skills.Length−1, числом або рядком. Регістр імені не важливий, крайні прогалини видаляються, _ замінюється пропуском. Індекс не є ID предмета або індексом від 1. Числовий рядок завжди означає індекс.
- ExecuteClientApiCompatibility вибирає гілку команди. Text читає селектор навички, Arg - числові номери та режими. Неперетворюваний аргумент може завершити виклик помилкою перетворення.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
var result = UO.GetSkillCurrentValue("Mining");
UO.Print("GetSkillCurrentValue: " + Convert.ToString(result));Параметри та порядок виконання:
- У прикладі явно задані selector і при записі mode. Перший рядок вибирає навичку на ім'я або характеристику за номером. Print лише виводить результат.
var selector = "Mining";
var value = UO.GetSkillCurrentValue(selector);
UO.Print(Convert.ToString(value));Параметри та порядок виконання:
- Поріг 95.1 та режими 0/1/2 задані для прикладу. −1 перевіряється до зміни режиму. Після запису читається лише локальна копія; це не очікування відповіді сервера.
return RunScenario();
object? RunScenario()
{
if (Truth(UO.GetSkillLockState("Mining") >= 0))
{
var value = UO.GetSkillCurrentValue("Mining");
if (Truth(value >= 95.1))
{
UO.Print("Value >= 95.1: " + Convert.ToString(value));
}
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- Весь код помічника наведено нижче Main. selector вибирає навичку/характеристику, mode визначає режим запису. ReadValue/ReadMode повертають вихідне число; ApplyMode перевіряє аргументи, виконує дію та не повертає значення. UO.Wait(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()
{
var before = ReadValue("Animal_Lore");
await Delay(1000);
var after = ReadValue("Animal Lore");
UO.Print(Convert.ToString(after - before));
return null;
}
dynamic ReadValue(dynamic selector)
{
return UO.GetSkillCurrentValue(selector);
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
}C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
Параметри: skillName (Any)
Результат: double / Decimal.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetSkillValue:bridge.GetSkillValue(Text(0), true, false). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(0).
Внутрішній код реалізації, не самостійний скрипт.
case "getskillcurrentvalue": return new InjectionValue(bridge.GetSkillValue(Text(0), true, false));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.GetSkillLockState(object? skillName);Читає локальний режим зміни навички.
-
skillName— Обов'язкова навичка: ім'я з даних клієнта, наприклад "Mining" або "Animal Lore", або десятковий індекс від 0 до Skills.Length−1, числом або рядком. Регістр імені не важливий, крайні прогалини видаляються, _ замінюється пропуском. Індекс не є ID предмета або індексом від 1. Числовий рядок завжди означає індекс.
int: "0" - підвищення, "1" - зниження, "2" - блокування. Це код режиму, що не true/false. Для невідомої навички чи відсутнього персонажа повертається −1.
- Читання виконується через Invoke на ігровому потоці за отриманими даними; мережні пакети не надсилаються. Навичка не використовується і не тренується. Два запити – два окремі знімки.
- Обов'язкова навичка: ім'я з даних клієнта, наприклад "Mining" або "Animal Lore", або десятковий індекс від 0 до Skills.Length−1, числом або рядком. Регістр імені не важливий, крайні прогалини видаляються, _ замінюється пропуском. Індекс не є ID предмета або індексом від 1. Числовий рядок завжди означає індекс.
- ExecuteClientApiCompatibility вибирає гілку команди. Text читає селектор навички, Arg - числові номери та режими. Неперетворюваний аргумент може завершити виклик помилкою перетворення.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
var result = UO.GetSkillLockState("Mining");
UO.Print("GetSkillLockState: " + Convert.ToString(result));Параметри та порядок виконання:
- У прикладі явно задані selector і при записі mode. Перший рядок вибирає навичку на ім'я або характеристику за номером. Print лише виводить результат.
var selector = "Mining";
var mode = UO.GetSkillLockState(selector);
UO.Print(Convert.ToString(mode));Параметри та порядок виконання:
- Поріг 95.1 та режими 0/1/2 задані для прикладу. −1 перевіряється до зміни режиму. Після запису читається лише локальна копія; це не очікування відповіді сервера.
return RunScenario();
object? RunScenario()
{
var mode = UO.GetSkillLockState("Mining");
if (Truth(mode == 2))
{
UO.Print("Locked");
}
else
{
if (Truth(mode == -1))
{
UO.Print("Unknown selector");
}
else
{
UO.Print("Mode: " + Convert.ToString(mode));
}
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- Весь код помічника наведено нижче Main. selector вибирає навичку/характеристику, mode визначає режим запису. ReadValue/ReadMode повертають вихідне число; ApplyMode перевіряє аргументи, виконує дію та не повертає значення. UO.Wait(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()
{
var before = ReadMode("Mining");
await Delay(1000);
var after = ReadMode("Mining");
UO.Print(Convert.ToString(before) + " -> " + Convert.ToString(after));
return null;
}
dynamic ReadMode(dynamic selector)
{
return UO.GetSkillLockState(selector);
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
}C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
Параметри: skillName (Any)
Результат: int / Integer.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetSkillLockState:bridge.GetSkillLockState(Text(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(0).
Внутрішній код реалізації, не самостійний скрипт.
case "getskilllockstate": return new InjectionValue(bridge.GetSkillLockState(Text(0)));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
double UO.GetSkillValue(object? skillName);Читає базове значення навички без модифікаторів.
-
skillName— Обов'язкова навичка: ім'я з даних клієнта, наприклад "Mining" або "Animal Lore", або десятковий індекс від 0 до Skills.Length−1, числом або рядком. Регістр імені не важливий, крайні прогалини видаляються, _ замінюється пропуском. Індекс не є ID предмета або індексом від 1. Числовий рядок завжди означає індекс.
double (Double) — пункти навички з кроком 0,1, наприклад 95,1, а не 951. Поле BaseFixed ділиться на 10 безпосередньо в Double. 0 означає нульовий рівень навички або відсутність персонажа/навички. Результат не bool. Спадкові SkillVal/BaseVal мають інший масштаб — не змішуйте ці групи функцій.
- Читання виконується через Invoke на ігровому потоці за отриманими даними; мережні пакети не надсилаються. Навичка не використовується і не тренується. Два запити – два окремі знімки.
- Обов'язкова навичка: ім'я з даних клієнта, наприклад "Mining" або "Animal Lore", або десятковий індекс від 0 до Skills.Length−1, числом або рядком. Регістр імені не важливий, крайні прогалини видаляються, _ замінюється пропуском. Індекс не є ID предмета або індексом від 1. Числовий рядок завжди означає індекс.
- ExecuteClientApiCompatibility вибирає гілку команди. Text читає селектор навички, Arg - числові номери та режими. Неперетворюваний аргумент може завершити виклик помилкою перетворення.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
var result = UO.GetSkillValue("Mining");
UO.Print("GetSkillValue: " + Convert.ToString(result));Параметри та порядок виконання:
- У прикладі явно задані selector і при записі mode. Перший рядок вибирає навичку на ім'я або характеристику за номером. Print лише виводить результат.
var selector = "Mining";
var value = UO.GetSkillValue(selector);
UO.Print(Convert.ToString(value));Параметри та порядок виконання:
- Поріг 95.1 та режими 0/1/2 задані для прикладу. −1 перевіряється до зміни режиму. Після запису читається лише локальна копія; це не очікування відповіді сервера.
return RunScenario();
object? RunScenario()
{
if (Truth(UO.GetSkillLockState("Mining") >= 0))
{
var value = UO.GetSkillValue("Mining");
if (Truth(value >= 95.1))
{
UO.Print("Value >= 95.1: " + Convert.ToString(value));
}
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- Весь код помічника наведено нижче Main. selector вибирає навичку/характеристику, mode визначає режим запису. ReadValue/ReadMode повертають вихідне число; ApplyMode перевіряє аргументи, виконує дію та не повертає значення. UO.Wait(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()
{
var before = ReadValue("Animal_Lore");
await Delay(1000);
var after = ReadValue("Animal Lore");
UO.Print(Convert.ToString(after - before));
return null;
}
dynamic ReadValue(dynamic selector)
{
return UO.GetSkillValue(selector);
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
}C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
Параметри: skillName (Any)
Результат: double / Decimal.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetSkillValue:bridge.GetSkillValue(Text(0), false, false). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(0).
Внутрішній код реалізації, не самостійний скрипт.
case "getskillvalue": return new InjectionValue(bridge.GetSkillValue(Text(0), false, false));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.SetSkillLockState(object? skillName, object? skillState);Запитує зміну режиму навички.
-
skillName— Обов'язкова навичка: ім'я з даних клієнта, наприклад "Mining" або "Animal Lore", або десятковий індекс від 0 до Skills.Length−1, числом або рядком. Регістр імені не важливий, крайні прогалини видаляються, _ замінюється пропуском. Індекс не є ID предмета або індексом від 1. Числовий рядок завжди означає індекс. -
skillState— Обов'язковий режим: ?0? — підвищення, ?1? — зниження, ?2? — блокування. Це три коди, не bool; true/false не замінюють назви всіх режимів.
void - значення, що повертається немає. Не можна використовувати результат як успіх/помилка або порівнювати з true. Подальше читання показує локальну модель, а чи не підтвердження сервера.
- Допустимий запит надсилає один пакет через GameActions і відразу змінює локальний режим. Сервер може застосувати свої обмеження; підвищення навички чи характеристики не гарантується. Невідома навичка, неприпустимий індекс/режим та відсутність персонажа ігноруються без пакета.
- Обов'язкова навичка: ім'я з даних клієнта, наприклад "Mining" або "Animal Lore", або десятковий індекс від 0 до Skills.Length−1, числом або рядком. Регістр імені не важливий, крайні прогалини видаляються, _ замінюється пропуском. Індекс не є ID предмета або індексом від 1. Числовий рядок завжди означає індекс.
- ExecuteClientApiCompatibility вибирає гілку команди. Text читає селектор навички, Arg - числові номери та режими. Неперетворюваний аргумент може завершити виклик помилкою перетворення.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Команда викликається окремим рядком. Повідомлення перед нею показує початок виклику, а не підтвердження дії сервера.
UO.Print("Calling UO.SetSkillLockState");
UO.SetSkillLockState("Mining", 2);Параметри та порядок виконання:
- У прикладі явно задані selector і при записі mode. Перший рядок вибирає навичку на ім'я або характеристику за номером. Print лише виводить результат.
var selector = "Mining";
var mode = 2;
UO.SetSkillLockState(selector, mode);
UO.Print(Convert.ToString(UO.GetSkillLockState(selector)));Параметри та порядок виконання:
- Поріг 95.1 та режими 0/1/2 задані для прикладу. −1 перевіряється до зміни режиму. Після запису читається лише локальна копія; це не очікування відповіді сервера.
return RunScenario();
object? RunScenario()
{
var selector = "Mining";
var before = UO.GetSkillLockState(selector);
if (Truth(before >= 0) && Truth(before <= 2))
{
UO.SetSkillLockState(selector, 0);
UO.Print(Convert.ToString(UO.GetSkillLockState(selector)));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- Весь код помічника наведено нижче Main. selector вибирає навичку/характеристику, mode визначає режим запису. ReadValue/ReadMode повертають вихідне число; ApplyMode перевіряє аргументи, виконує дію та не повертає значення. UO.Wait(1000) у прикладі читання розділяє два знімки.
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()
{
ApplyMode("Mining", 2);
return null;
}
void ApplyMode(dynamic selector, dynamic mode)
{
if (Truth(mode < 0) || Truth(mode > 2))
{
return;
}
if (Truth(UO.GetSkillLockState(selector) < 0))
{
return;
}
UO.SetSkillLockState(selector, mode);
}
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.
Параметри: skillName (Any), skillState (Any)
Результат: void / Unit.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetSkillLockState:bridge.SetSkillLockState(Text(0), Arg(1)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(0). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(1).
Внутрішній код реалізації, не самостійний скрипт.
case "setskilllockstate":
case "skilllockstate": bridge.SetSkillLockState(Text(0), Arg(1)); return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.SkillLockState(object? skillName, object? skillState);Запитує зміну режиму навички.
-
skillName— Обов'язкова навичка: ім'я з даних клієнта, наприклад "Mining" або "Animal Lore", або десятковий індекс від 0 до Skills.Length−1, числом або рядком. Регістр імені не важливий, крайні прогалини видаляються, _ замінюється пропуском. Індекс не є ID предмета або індексом від 1. Числовий рядок завжди означає індекс. -
skillState— Обов'язковий режим: ?0? — підвищення, ?1? — зниження, ?2? — блокування. Це три коди, не bool; true/false не замінюють назви всіх режимів.
void - значення, що повертається немає. Не можна використовувати результат як успіх/помилка або порівнювати з true. Подальше читання показує локальну модель, а чи не підтвердження сервера.
- Допустимий запит надсилає один пакет через GameActions і відразу змінює локальний режим. Сервер може застосувати свої обмеження; підвищення навички чи характеристики не гарантується. Невідома навичка, неприпустимий індекс/режим та відсутність персонажа ігноруються без пакета.
- Обов'язкова навичка: ім'я з даних клієнта, наприклад "Mining" або "Animal Lore", або десятковий індекс від 0 до Skills.Length−1, числом або рядком. Регістр імені не важливий, крайні прогалини видаляються, _ замінюється пропуском. Індекс не є ID предмета або індексом від 1. Числовий рядок завжди означає індекс.
- ExecuteClientApiCompatibility вибирає гілку команди. Text читає селектор навички, Arg - числові номери та режими. Неперетворюваний аргумент може завершити виклик помилкою перетворення.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Команда викликається окремим рядком. Повідомлення перед нею показує початок виклику, а не підтвердження дії сервера.
UO.Print("Calling UO.SkillLockState");
UO.SkillLockState("Mining", 2);Параметри та порядок виконання:
- У прикладі явно задані selector і при записі mode. Перший рядок вибирає навичку на ім'я або характеристику за номером. Print лише виводить результат.
var selector = "Mining";
var mode = 2;
UO.SkillLockState(selector, mode);
UO.Print(Convert.ToString(UO.GetSkillLockState(selector)));Параметри та порядок виконання:
- Поріг 95.1 та режими 0/1/2 задані для прикладу. −1 перевіряється до зміни режиму. Після запису читається лише локальна копія; це не очікування відповіді сервера.
return RunScenario();
object? RunScenario()
{
var selector = "Mining";
var before = UO.GetSkillLockState(selector);
if (Truth(before >= 0) && Truth(before <= 2))
{
UO.SkillLockState(selector, 0);
UO.Print(Convert.ToString(UO.GetSkillLockState(selector)));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- Весь код помічника наведено нижче Main. selector вибирає навичку/характеристику, mode визначає режим запису. ReadValue/ReadMode повертають вихідне число; ApplyMode перевіряє аргументи, виконує дію та не повертає значення. UO.Wait(1000) у прикладі читання розділяє два знімки.
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()
{
ApplyMode("Mining", 2);
return null;
}
void ApplyMode(dynamic selector, dynamic mode)
{
if (Truth(mode < 0) || Truth(mode > 2))
{
return;
}
if (Truth(UO.GetSkillLockState(selector) < 0))
{
return;
}
UO.SkillLockState(selector, mode);
}
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.
Параметри: skillName (Any), skillState (Any)
Результат: void / Unit.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetSkillLockState:bridge.SetSkillLockState(Text(0), Arg(1)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(0). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(1).
Внутрішній код реалізації, не самостійний скрипт.
case "setskilllockstate":
case "skilllockstate": bridge.SetSkillLockState(Text(0), Arg(1)); return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.SkillVal(object? skillName);
int UO.SkillVal(object? skill, object? variant);Читає legacy-значення навички або його режим/приріст.
-
variant- Необов'язковий int: 0 - ефективне значення (за замовчуванням), 1 - базове значення, 2 - приріст базового значення від першого читання цієї навички в runtime, 3 - режим блокування. -
skillName— Ім'я зі словника runtime skillNameToSkillId, наприклад Mining. Регістр не важливий, але прогалини не обрізаються і не замінюється. Числовий текст у цій legacy-функції не є індексом; невідоме ім'я виводить повідомлення та дає 0. -
skill— Ім'я зі словника runtime skillNameToSkillId, наприклад Mining. Регістр не важливий, але прогалини не обрізаються і не замінюється. Числовий текст у цій legacy-функції не є індексом; невідоме ім'я виводить повідомлення та дає 0.
int: варіанти 0/1/2 — десяті частини пункту навички (951 = 95.1); варіант 3 — режим 0/1/2 або -1, якщо немає Player/навички. Невідоме ім’я/варіант дає 0. Варіант 2 може бути від’ємним, якщо base нижче збереженого baseline runtime, зокрема за відсутності Player і base=0. Це не bool.
- Перед вибором variant береться SkillBaseVal і, якщо навичка вперше читається, зберігається baseline. Тому навіть читання variant=0/1/3 встановлює початкову точку майбутнього приросту variant=2.
- Некоректна variantа виводить повідомлення і дає 0, але baseline вже могла бути створена. Значення GetSkillValue/GetSkillCurrentValue вимірюються очками double та мають інший масштаб.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
var result = UO.SkillVal("Mining");
UO.Print("SkillVal: " + Convert.ToString(result));Параметри та порядок виконання:
- Читає legacy-значення навички або його режим/приріст.
UO.Print(UO.SkillVal("Mining"));
UO.Print(UO.SkillVal("Mining", 1));Параметри та порядок виконання:
- Перед вибором variant береться SkillBaseVal і, якщо навичка вперше читається, зберігається baseline. Тому навіть читання variant=0/1/3 встановлює початкову точку майбутнього приросту variant=2.
return RunScenario();
object? RunScenario()
{
var baseline = UO.SkillVal("Mining", 2);
UO.Wait(1000);
UO.Print(UO.SkillVal("Mining", 2) - baseline);
return null;
}Параметри та порядок виконання:
- Некоректна variantа виводить повідомлення і дає 0, але baseline вже могла бути створена. Значення GetSkillValue/GetSkillCurrentValue вимірюються очками double та мають інший масштаб.
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 lockMode = UO.SkillVal("Mining", 3);
if (Truth(lockMode == 2))
{
UO.Print("Skill locked");
}
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.
Параметри: skillName (String)
Результат: int / Integer.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.SkillVal. -
InjectionScript.Runtime.InjectionApiUO.SkillVal:SkillVal(skillName, 0).
Внутрішній код реалізації, не самостійний скрипт.
public int SkillVal(string skillName) => SkillVal(skillName, 0);Параметри: skill (Any), variant (Any)
Результат: int / Integer.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.Register [SkillVal]. -
InjectionScript.Runtime.InjectionApiUO.SkillVal:SkillVal(values[0].ToString(), NumberConversions.ToInt(values[1])). -
InjectionScript.Runtime.InjectionValue.ToString:values[0].ToString(). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(values[1]).
Виклик виконує збережений delegate обробника. Метод реєстрації створює цей delegate під час побудови API.
Внутрішній код реалізації, не самостійний скрипт.
values => new InjectionValue(SkillVal(values[0].ToString(), NumberConversions.ToInt(values[1])))Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.Snoop();
void UO.Snoop(object? container);Використовує контейнер/об'єкт, зазвичай запитуючи його відкриття.
-
container- Необов'язковий serial/аліас. За замовчуванням bridge.LastTarget. Команда не перевіряє IsContainer чи належність.
void - значення немає. Викликайте окремим рядком; завершення не підтверджує дію сервера.
- ExecuteLegacyManualAlias викликає bridge.UseObject(Arg(0,bridge.LastTarget)). Це звичайний double-click запит, а не окремий алгоритм клієнта навички Snooping.
- Bridge надсилає запит на ігровому потоці. Діють правила сервера; вбудованого очікування підтвердження немає.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Команда викликається окремим рядком. Повідомлення перед нею показує початок виклику, а не підтвердження дії сервера.
UO.Print("Calling UO.Snoop");
UO.Snoop();Параметри та порядок виконання:
- Використовує контейнер/об'єкт, зазвичай запитуючи його відкриття.
UO.Snoop();Параметри та порядок виконання:
- ExecuteLegacyManualAlias викликає bridge.UseObject(Arg(0,bridge.LastTarget)). Це звичайний double-click запит, а не окремий алгоритм клієнта навички Snooping.
return RunScenario();
object? RunScenario()
{
if (Truth(UO.IsContainer("lasttarget")))
{
UO.Snoop("lasttarget");
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- Bridge надсилає запит на ігровому потоці. Діють правила сервера; вбудованого очікування підтвердження немає.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
var id = UO.GetSerial("lasttarget");
if (Truth(UO.Exists(id)))
{
UO.Snoop(id);
UO.Wait(500);
UO.Print(UO.GetContent(id));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
Параметри: Немає параметрів.
Результат: void / Unit.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.UseObject:bridge.UseObject(Arg(0, bridge.LastTarget)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Arg:Arg(0, bridge.LastTarget). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.LastTarget:bridge.LastTarget.
Внутрішній код реалізації, не самостійний скрипт.
case "snoop": bridge.UseObject(Arg(0, bridge.LastTarget)); break;Параметри: container (Any)
Результат: void / Unit.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.UseObject:bridge.UseObject(Arg(0, bridge.LastTarget)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Arg:Arg(0, bridge.LastTarget). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.LastTarget:bridge.LastTarget.
Внутрішній код реалізації, не самостійний скрипт.
case "snoop": bridge.UseObject(Arg(0, bridge.LastTarget)); break;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.StealthCnt();Читає локальний лічильник зміщення персонажа у скритності.
Параметрів немає.
int — накопичена сума max(abs(deltaX),abs(deltaY)) між викликами при ?IsHidden?. Це не гарантована кількість серверних stealth-кроків і ліміт, що не залишився.
- Без Player або коли Player не прихований, скидає count = 0 і зберігає поточні X/Y (або - 1). При скритності порівнює з попередніми збереженими X/Y, додає зміщення та оновлює координати.
- Лічильник змінюється під час читання. Переміщення туди та назад між викликами може бути пропущено; Зміна Z без X/Y не збільшує лічильник.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
var result = UO.StealthCnt();
UO.Print("StealthCnt: " + Convert.ToString(result));Параметри та порядок виконання:
- Читає локальний лічильник зміщення персонажа у скритності.
UO.Print(UO.StealthCnt());Параметри та порядок виконання:
- Без Player або коли Player не прихований, скидає count = 0 і зберігає поточні X/Y (або - 1). При скритності порівнює з попередніми збереженими X/Y, додає зміщення та оновлює координати.
return RunScenario();
object? RunScenario()
{
var before = UO.StealthCnt();
UO.Wait(500);
UO.Print(UO.StealthCnt() - before);
return null;
}Параметри та порядок виконання:
- Лічильник змінюється під час читання. Переміщення туди та назад між викликами може бути пропущено; Зміна Z без X/Y не збільшує лічильник.
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.Hidden()))
{
UO.Print(UO.StealthCnt());
}
else
{
UO.Print(UO.StealthCnt());
}
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.
Параметри: Немає параметрів.
Результат: int / Integer.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.StealthCnt. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.StealthCnt:bridge.StealthCnt().
Внутрішній код реалізації, не самостійний скрипт.
public int StealthCnt() => bridge.StealthCnt();Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.TicksSkill();Читає збережену позначку TicksSkill.
Параметрів немає.
int - позначка UO.Timer в десятих частках секунди від старту runtime. 0 - позначка ще не встановлена або подія була в першу десяту секунди; це не мілісекунди та не календарний час.
- Повертає поле ticksSkill. Його оновлює успішно прийнятий UseSkill/UseSkillAtTarget; це не автоматичне відстеження всіх ручних/серверних дій. Сама команда позначку не змінює.
- UO.Timer() - позначка обчислює вік десятих секунди. Між різними runtime позначки не порівнюються.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
var result = UO.TicksSkill();
UO.Print("TicksSkill: " + Convert.ToString(result));Параметри та порядок виконання:
- Читає збережену позначку TicksSkill.
var stamp = UO.TicksSkill();
UO.Print(stamp);Параметри та порядок виконання:
- Повертає поле ticksSkill. Його оновлює успішно прийнятий UseSkill/UseSkillAtTarget; це не автоматичне відстеження всіх ручних/серверних дій. Сама команда позначку не змінює.
return RunScenario();
object? RunScenario()
{
var stamp = UO.TicksSkill();
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.TicksSkill();
UO.Wait(250);
var after = UO.TicksSkill();
UO.Print(before = after);
return null;
}
}C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
Параметри: Немає параметрів.
Результат: int / Integer.
Під час виклику:
Внутрішній код реалізації, не самостійний скрипт.
public int TicksSkill() => ticksSkill;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.Track();
void UO.Track(object? flag);
void UO.Track(object? flagRaw, object? x, object? y);Створює або видаляє локальну стрілку до координат. Допомагає відзначити місце повернення. Не запускає досвід Tracking, не шукає істот і не переміщає персонажа.
-
flag- 0 - прибрати локальну стрілку; будь-яке інше ціле – показати. UO.Track() і UO.Track(1) ставлять їх у поточних X/Y персонажа. UO.Track(1, x, y) ставить її у зазначеній точці; UO.Track(0, x, y) ігнорує координати. Двопараметрова форма не входить до зареєстрованого API. -
flagRaw- 0 - прибрати локальну стрілку; будь-яке інше ціле – показати. UO.Track() і UO.Track(1) ставлять їх у поточних X/Y персонажа. UO.Track(1, x, y) ставить її у зазначеній точці; UO.Track(0, x, y) ігнорує координати. Двопараметрова форма не входить до зареєстрованого API. -
x- Координати клітини на поточній карті, не пікселі вікна. Z та номер картки не приймаються. Виберіть існуючу точку картки; команда не перевіряє прохідність, не прокладає маршрут і не слідує за метою, що рухається. -
y- Координати клітини на поточній карті, не пікселі вікна. Z та номер картки не приймаються. Виберіть існуючу точку картки; команда не перевіряє прохідність, не прокладає маршрут і не слідує за метою, що рухається.
void - значення немає; команда не повертає успіху руху або bool. Змінюється лише локальний маркер.
- Серверні та локальні стрілки зберігаються окремо. Track(0) не видаляє серверну стрілку. Без графіки маркер зберігається та з'являється під час відкриття вікна. Закриття вікна не видаляє маркери; розрив з'єднання очищає їх. Сервер може перемістити або усунути свою стрілку. Координати не доводять, що ціль досяжна.
- Координати клітини на поточній карті, не пікселі вікна. Z та номер картки не приймаються. Виберіть існуючу точку картки; команда не перевіряє прохідність, не прокладає маршрут і не слідує за метою, що рухається.
- 0 - прибрати локальну стрілку; будь-яке інше ціле – показати. UO.Track() і UO.Track(1) ставлять їх у поточних X/Y персонажа. UO.Track(1, x, y) ставить її у зазначеній точці; UO.Track(0, x, y) ігнорує координати. Двопараметрова форма не входить до зареєстрованого API.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Команда викликається окремим рядком. Повідомлення перед нею показує початок виклику, а не підтвердження дії сервера.
UO.Print("Calling UO.Track");
UO.Track();Параметри та порядок виконання:
- UO.Track() запам'ятовує поточну точку: після відходу стрілка показує назад. Точка не оновлюється автоматично за персонажем.
UO.Track();Параметри та порядок виконання:
- Показується локальна стрілка до 1450,1690 на поточній карті. Якщо ви вже в межах однієї клітини, Track(0) прибирає її. Підставте свої координати.
return RunScenario();
object? RunScenario()
{
var x = 1450;
var y = 1690;
UO.Track(1, x, y);
if (Truth(UO.GetDistance(x, y) <= 1))
{
UO.Track(0);
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- Функція MarkIfDistant використовує самі X/Y і distance: якщо мета далі двох клітин, ставить стрілку, інакше прибирає. Функція повністю наведена нижче; руху чи очікування досягнення тут немає.
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()
{
MarkIfDistant(1450, 1690);
return null;
}
void MarkIfDistant(dynamic x, dynamic y)
{
if (Truth(UO.GetDistance(x, y) > 2))
{
UO.Track(1, x, y);
}
else
{
UO.Track(0);
}
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
Параметри: Немає параметрів.
Результат: void / Unit.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.Track. -
InjectionScript.Runtime.InjectionApiUO.Track:Track(1, GetX(), GetY()). -
InjectionScript.Runtime.InjectionApiUO.GetX:GetX(). -
InjectionScript.Runtime.InjectionApiUO.GetY:GetY().
Внутрішній код реалізації, не самостійний скрипт.
public void Track() => Track(1, GetX(), GetY());Параметри: flag (Any)
Результат: void / Unit.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.Track. -
InjectionScript.Runtime.InjectionApiUO.Track:Track(NumberConversions.ToInt(flag), GetX(), GetY()). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(flag). -
InjectionScript.Runtime.InjectionApiUO.GetX:GetX(). -
InjectionScript.Runtime.InjectionApiUO.GetY:GetY().
Внутрішній код реалізації, не самостійний скрипт.
public void Track(InjectionValue flag) => Track(NumberConversions.ToInt(flag), GetX(), GetY());Параметри: flagRaw (Any), x (Any), y (Any)
Результат: void / Unit.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.Track. -
InjectionScript.Runtime.InjectionApiUO.Track:Track(NumberConversions.ToInt(flagRaw), NumberConversions.ToInt(x), NumberConversions.ToInt(y)). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(flagRaw).
Внутрішній код реалізації, не самостійний скрипт.
public void Track(InjectionValue flagRaw, InjectionValue x, InjectionValue y)
=> Track(NumberConversions.ToInt(flagRaw), NumberConversions.ToInt(x), NumberConversions.ToInt(y));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.UseSkill(object? skillName);Просить сервер застосувати навичку за назвою. Рівно один параметр: skillName. UO.UseSkill("Hiding") намагається приховати власного персонажа. Якщо потрібна мета, виберіть її ігровим прицілом або заздалегідь окремою командою WaitTargetObject.
-
skillName- Обов'язковий рядок - точне англійське ім'я навички, наприклад "Hiding", "Anatomy" або "Meditation". Реєстр не важливий; пробіли та підкреслення автоматично не виправляються. Номер навички, serial, self, відстань, notoriety, maxZ та очікування сюди не передаються. Всі імена.
int: 1/true — клієнт прийняв запит; 0/false - невідоме ім'я або локальна відмова. Це не успішний результат навички, зростання навички чи ознака скритності. Для скритності читайте Hidden(). Можна писати if UO.UseSkill("Hiding") { ... } або порівнювати з 1/true. Відсутній чи зайвий аргумент – помилка виклику.
- Єдина форма: UO.UseSkill(skillName). Другого та наступних параметрів немає. Пошук, ціль та очікування виконуються іншими командами.
- Hiding та Meditation не вимагають вибору іншого об'єкта. Не готуйте для них WaitTargetObject: черга, що залишилася, може відповісти наступному сторонньому прицілу.
- Анатомія використовує приціл. Викличте UseSkill("Anatomy") та виберіть персонажа мишкою. Для автоматичної відповіді спочатку виконайте WaitTargetObject, потім UseSkill: так не пропустіть швидку відповідь сервера.
- UseSkill не створює і не очищає чергу target. Якщо ви підготували відповідь, очистіть її CancelWaitTarget при відмові/тайм-ауті. Інші сценарії з прицілом не запускайте одночасно.
- Poisoning, Provocation та інші багатокрокові навички потребують окремої обробки додаткових цілей/інструментів. Один заздалегідь вибраний об'єкт не завершує будь-яку навичку.
- Назва у словнику не гарантує застосування без інструменту. Для видобутку потрібний інструмент; заклинання викликаються Cast. Правила та успішність визначає сервер.
- Прийнятий запит оновлює TicksSkill. Команда не чекає скритності, ефекту, підвищення навички або витрачання черги.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
var result = UO.UseSkill("Hiding");
UO.Print("UseSkill: " + Convert.ToString(result));Параметри та порядок виконання:
- Hiding – єдиний аргумент. UO.Wait(1000) дає час для відповіді; Hidden читає отриманий прапор. Повернення 1 у UseSkill ще не означає, що ви зникли.
if (!(Truth(UO.Connected())) || Truth(UO.Dead()) || Truth(UO.Hidden()))
{
return null;
}
if (!(Truth(UO.UseSkill("Hiding"))))
{
UO.Print("Hiding request rejected");
return null;
}
await Delay(1000);
if (Truth(UO.Hidden()))
{
UO.Print("Character is hidden");
}
else
{
UO.Print("Not hidden yet; check the game journal");
}
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;Параметри та порядок виконання:
- Anatomy - єдиний параметр UseSkill; mobile відноситься до WaitTargetObject. ASC переводить hex-рядок GetSerial у число для перевірки діапазону. 1500 — мілісекунди очікування на прикладі. Finally прибирає чергу, що залишилася; результат Anatomy дивіться у грі.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var mobile = Asc(UO.GetSerial("lasttarget"), 0);
if (Truth(mobile <= 0) || Truth(mobile >= 0x40000000) || !(Truth(UO.Exists(mobile))))
{
return null;
}
UO.CancelWaitTarget();
try
{
UO.WaitTargetObject(mobile);
if (Truth(UO.UseSkill("Anatomy")))
{
await Delay(1500);
}
}
finally
{
UO.CancelWaitTarget();
}
return null;
}
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;Параметри та порядок виконання:
- Meditation викликається без мети. before зберігає колишню ману, 2000 - період спостереження. Зростання мани може мати інші причини; це не доказ медитації та не обіцянка фіксованої швидкості відновлення.
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.Connected())) || Truth(UO.Dead()))
{
return null;
}
var before = UO.Mana();
if (!(Truth(UO.UseSkill("Meditation"))))
{
UO.Print("Meditation request rejected");
return null;
}
await Delay(2000);
if (Truth(UO.Mana() > before))
{
UO.Print("Mana increased");
}
else
{
UO.Print("No mana increase observed yet");
}
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.
Параметри: skillName (String)
Результат: int / Integer.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.UseSkill. -
InjectionScript.Runtime.InjectionApiUO.UseSkillCore:UseSkillCore(skillName).
Внутрішній код реалізації, не самостійний скрипт.
public int UseSkill(string skillName)
{
return UseSkillCore(skillName) ? 1 : 0;
}ClassicUO — Bad Newbie & C# Scripts IDE