Skip to content

UO Topic skills

Codex edited this page Oct 12, 2026 · 7 revisions

Українська · Русский · 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

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

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

UO.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;

UO.GetSkillValue

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

var selector = "Mining";
var value = UO.GetSkillValue(selector);
UO.Print(Convert.ToString(value));

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


UO.GetSkillCap

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

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

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 - числові номери та режими. Неперетворюваний аргумент може завершити виклик помилкою перетворення.

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

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

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

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

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

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

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

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

  • У прикладі явно задані selector і при записі mode. Перший рядок вибирає навичку на ім'я або характеристику за номером. Print лише виводить результат.
var selector = "Mining";
var value = UO.GetSkillCap(selector);
UO.Print(Convert.ToString(value));

2. Застосувати за умов або порівняння — функція сценарію

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

  • Поріг 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;

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

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

  • Весь код помічника наведено нижче Main. selector вибирає навичку/характеристику, mode визначає режим запису. ReadValue/ReadMode повертають вихідне число; ApplyMode перевіряє аргументи, виконує дію та не повертає значення. UO.Wait(1000) у прикладі читання розділяє два знімки.

Skills / Навички

Skills/Навички

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.

UO.GetSkillCap(skillName) — UO.GetSkillCap(Any)

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

Результат: double / Decimal.

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

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

case "getskillcap": return new InjectionValue(bridge.GetSkillValue(Text(0), false, true));

UO.GetSkillCurrentValue

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

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

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 - числові номери та режими. Неперетворюваний аргумент може завершити виклик помилкою перетворення.

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

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

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

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

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

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

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

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

  • У прикладі явно задані selector і при записі mode. Перший рядок вибирає навичку на ім'я або характеристику за номером. Print лише виводить результат.
var selector = "Mining";
var value = UO.GetSkillCurrentValue(selector);
UO.Print(Convert.ToString(value));

2. Застосувати за умов або порівняння — функція сценарію

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

  • Поріг 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;

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

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

  • Весь код помічника наведено нижче Main. selector вибирає навичку/характеристику, mode визначає режим запису. ReadValue/ReadMode повертають вихідне число; ApplyMode перевіряє аргументи, виконує дію та не повертає значення. UO.Wait(1000) у прикладі читання розділяє два знімки.

Skills / Навички

Skills/Навички

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.

UO.GetSkillCurrentValue(skillName) — UO.GetSkillCurrentValue(Any)

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

Результат: double / Decimal.

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

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

case "getskillcurrentvalue": return new InjectionValue(bridge.GetSkillValue(Text(0), true, false));

UO.GetSkillLockState

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

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

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 - числові номери та режими. Неперетворюваний аргумент може завершити виклик помилкою перетворення.

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

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

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

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

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

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

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

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

  • У прикладі явно задані selector і при записі mode. Перший рядок вибирає навичку на ім'я або характеристику за номером. Print лише виводить результат.
var selector = "Mining";
var mode = UO.GetSkillLockState(selector);
UO.Print(Convert.ToString(mode));

2. Застосувати за умов або порівняння — функція сценарію

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

  • Поріг 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;

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

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

  • Весь код помічника наведено нижче Main. selector вибирає навичку/характеристику, mode визначає режим запису. ReadValue/ReadMode повертають вихідне число; ApplyMode перевіряє аргументи, виконує дію та не повертає значення. UO.Wait(1000) у прикладі читання розділяє два знімки.

Skills / Навички

Skills/Навички

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.

UO.GetSkillLockState(skillName) — UO.GetSkillLockState(Any)

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

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

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

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

case "getskilllockstate": return new InjectionValue(bridge.GetSkillLockState(Text(0)));

UO.GetSkillValue

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

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

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 - числові номери та режими. Неперетворюваний аргумент може завершити виклик помилкою перетворення.

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

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

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

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

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

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

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

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

  • У прикладі явно задані selector і при записі mode. Перший рядок вибирає навичку на ім'я або характеристику за номером. Print лише виводить результат.
var selector = "Mining";
var value = UO.GetSkillValue(selector);
UO.Print(Convert.ToString(value));

2. Застосувати за умов або порівняння — функція сценарію

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

  • Поріг 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;

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

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

  • Весь код помічника наведено нижче Main. selector вибирає навичку/характеристику, mode визначає режим запису. ReadValue/ReadMode повертають вихідне число; ApplyMode перевіряє аргументи, виконує дію та не повертає значення. UO.Wait(1000) у прикладі читання розділяє два знімки.

Skills / Навички

Skills/Навички

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.

UO.GetSkillValue(skillName) — UO.GetSkillValue(Any)

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

Результат: double / Decimal.

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

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

case "getskillvalue": return new InjectionValue(bridge.GetSkillValue(Text(0), false, false));

UO.SetSkillLockState

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

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

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 - числові номери та режими. Неперетворюваний аргумент може завершити виклик помилкою перетворення.

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

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

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

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

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

UO.Print("Calling UO.SetSkillLockState");
UO.SetSkillLockState("Mining", 2);

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

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

  • У прикладі явно задані selector і при записі mode. Перший рядок вибирає навичку на ім'я або характеристику за номером. Print лише виводить результат.
var selector = "Mining";
var mode = 2;
UO.SetSkillLockState(selector, mode);
UO.Print(Convert.ToString(UO.GetSkillLockState(selector)));

2. Застосувати за умов або порівняння — функція сценарію

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

  • Поріг 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;

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

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

  • Весь код помічника наведено нижче Main. selector вибирає навичку/характеристику, mode визначає режим запису. ReadValue/ReadMode повертають вихідне число; ApplyMode перевіряє аргументи, виконує дію та не повертає значення. UO.Wait(1000) у прикладі читання розділяє два знімки.

Skills / Навички

Skills/Навички

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.

UO.SetSkillLockState(skillName, skillState) — UO.SetSkillLockState(Any,Any)

Параметри: skillName (Any), skillState (Any)

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

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

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

case "setskilllockstate":

                case "skilllockstate": bridge.SetSkillLockState(Text(0), Arg(1)); return InjectionValue.Unit;

UO.SkillLockState

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

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

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 - числові номери та режими. Неперетворюваний аргумент може завершити виклик помилкою перетворення.

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

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

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

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

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

UO.Print("Calling UO.SkillLockState");
UO.SkillLockState("Mining", 2);

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

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

  • У прикладі явно задані selector і при записі mode. Перший рядок вибирає навичку на ім'я або характеристику за номером. Print лише виводить результат.
var selector = "Mining";
var mode = 2;
UO.SkillLockState(selector, mode);
UO.Print(Convert.ToString(UO.GetSkillLockState(selector)));

2. Застосувати за умов або порівняння — функція сценарію

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

  • Поріг 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;

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

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

  • Весь код помічника наведено нижче 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.

UO.SkillLockState(skillName, skillState) — UO.SkillLockState(Any,Any)

Параметри: skillName (Any), skillState (Any)

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

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

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

case "setskilllockstate":

                case "skilllockstate": bridge.SetSkillLockState(Text(0), Arg(1)); return InjectionValue.Unit;

UO.SkillVal

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

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

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 та мають інший масштаб.

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

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

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

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

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

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

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

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

  • Читає legacy-значення навички або його режим/приріст.
UO.Print(UO.SkillVal("Mining"));
UO.Print(UO.SkillVal("Mining", 1));

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

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

  • Перед вибором 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;
}

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

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

  • Некоректна variantа виводить повідомлення і дає 0, але baseline вже могла бути створена. Значення GetSkillValue/GetSkillCurrentValue вимірюються очками double та мають інший масштаб.

Skills / Навички

Skills/Навички

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.

UO.SkillVal(skillName) — UO.SkillVal(String)

Параметри: skillName (String)

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

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

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

public int SkillVal(string skillName) => SkillVal(skillName, 0);

UO.SkillVal(skill, variant) — UO.SkillVal(Any,Any)

Параметри: skill (Any), variant (Any)

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

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

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

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

values => new InjectionValue(SkillVal(values[0].ToString(), NumberConversions.ToInt(values[1])))

UO.Snoop

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

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

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

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

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

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

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

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

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

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

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

  • Використовує контейнер/об'єкт, зазвичай запитуючи його відкриття.
UO.Snoop();

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

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

  • 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;

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

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

  • 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.

UO.Snoop() — UO.Snoop()

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

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

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

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

case "snoop": bridge.UseObject(Arg(0, bridge.LastTarget)); break;

UO.Snoop(container) — UO.Snoop(Any)

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

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

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

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

case "snoop": bridge.UseObject(Arg(0, bridge.LastTarget)); break;

UO.StealthCnt

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

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

int UO.StealthCnt();

Читає локальний лічильник зміщення персонажа у скритності.

Параметри

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

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

int — накопичена сума max(abs(deltaX),abs(deltaY)) між викликами при ?IsHidden?. Це не гарантована кількість серверних stealth-кроків і ліміт, що не залишився.

Поведінка

  • Без Player або коли Player не прихований, скидає count = 0 і зберігає поточні X/Y (або - 1). При скритності порівнює з попередніми збереженими X/Y, додає зміщення та оновлює координати.
  • Лічильник змінюється під час читання. Переміщення туди та назад між викликами може бути пропущено; Зміна Z без X/Y не збільшує лічильник.

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

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

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

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

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

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

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

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

  • Читає локальний лічильник зміщення персонажа у скритності.
UO.Print(UO.StealthCnt());

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

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

  • Без 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;
}

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

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

  • Лічильник змінюється під час читання. Переміщення туди та назад між викликами може бути пропущено; Зміна 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.

UO.StealthCnt() — UO.StealthCnt()

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

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

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

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

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

UO.TicksSkill

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

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

int UO.TicksSkill();

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

Параметри

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

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

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

Поведінка

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • UO.Timer() - позначка обчислює вік десятих секунди. Між різними runtime позначки не порівнюються.

Skills / Навички

Skills/Навички

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.

UO.TicksSkill() — UO.TicksSkill()

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

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

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

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

public int TicksSkill() => ticksSkill;

UO.Track

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

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

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.

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

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

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

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

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

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

1. Пряме застосування – прямий скрипт

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

  • UO.Track() запам'ятовує поточну точку: після відходу стрілка показує назад. Точка не оновлюється автоматично за персонажем.
UO.Track();

2. Ігрова умова – функція сценарію

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

  • Показується локальна стрілка до 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;

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

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

  • Функція 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.

UO.Track() — UO.Track()

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

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

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

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

public void Track() => Track(1, GetX(), GetY());

UO.Track(flag) — UO.Track(Any)

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

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

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

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

public void Track(InjectionValue flag) => Track(NumberConversions.ToInt(flag), GetX(), GetY());

UO.Track(flagRaw, x, y) — UO.Track(Any,Any,Any)

Параметри: flagRaw (Any), x (Any), y (Any)

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

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

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

public void Track(InjectionValue flagRaw, InjectionValue x, InjectionValue y)

            => Track(NumberConversions.ToInt(flagRaw), NumberConversions.ToInt(x), NumberConversions.ToInt(y));

UO.UseSkill

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

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

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. Команда не чекає скритності, ефекту, підвищення навички або витрачання черги.

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

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

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

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

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

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

1. Сховатись через Hiding — прямий скрипт

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

  • 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;

2. Anatomy з окремо підготовленою метою – функція сценарію

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

  • 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;

3. Meditation та спостереження за маною - клас сценарію

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

  • Meditation викликається без мети. before зберігає колишню ману, 2000 - період спостереження. Зростання мани може мати інші причини; це не доказ медитації та не обіцянка фіксованої швидкості відновлення.

Skills / Навички

Skills/Навички

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.

UO.UseSkill(skillName) — UO.UseSkill(String)

Параметри: skillName (String)

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

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

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

public int UseSkill(string skillName)

        {

            return UseSkillCore(skillName) ? 1 : 0;

        }

Clone this wiki locally