Skip to content

UO Topic targeting

Codex edited this page Oct 12, 2026 · 6 revisions

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

Вибір цілі (таргет)

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

Відповідь на курсор вибору цілі та підготовка автоматичної відповіді командами WaitTarget. Підготовка цілі не запускає заклинання чи іншу дію: дію потрібно виконати окремо.

Розділи

Тема Команди та пояснення
Вибір цілі UO.Target
Ціль за ідентифікатором UO.TargetID
Ціль-об’єкт UO.TargetToObject
Ціль-клітина UO.TargetToTile
Ціль за координатами UO.TargetToXYZ
Ціль за видом ресурсу UO.TargetByResource
Підготовка відповіді на вибір цілі UO.WaitTarget
Підготовка цілі-об’єкта UO.WaitTargetObject
Підготовка цілі за типом UO.WaitTargetType
Підготовка цілі-клітини UO.WaitTargetTile
Підготовка цілі за координатами UO.WaitTargetXYZ
Підготовка цілі «свій персонаж» UO.WaitTargetSelf
Остання ціль UO.LastTarget
Скасування вибору цілі UO.CancelTarget
Вибір цілі користувачем UO.ClientRequestObjectTarget · UO.ClientRequestTileTarget · UO.WaitForClientTargetResponse · UO.ClientTargetResponse

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

Цілі

UO.Target · UO.TargetID · UO.Targeting · UO.TargetPresent · UO.TargetToObject · UO.TargetToTile · UO.TargetToXYZ · UO.TargetByResource · UO.LastTarget · UO.LastTargetX · UO.LastTargetY · UO.LastTile · UO.TicksTarget

Підготовка та скасування цілі

UO.WaitTarget · UO.WaitTargetObject · UO.WaitTargetType · UO.WaitTargetObjectType · UO.WaitTargetTile · UO.WaitTargetXYZ · UO.WaitTargetSelf · UO.WaitTargetGround · UO.WaitTargetLast · UO.WaitForTarget · UO.IsWaitTargetActive · UO.CancelTarget · UO.CancelWaitTarget

Вибір цілі користувачем

UO.ClientRequestObjectTarget · UO.ClientRequestTileTarget · UO.ClientTargetResponse · UO.ClientTargetResponsePresent · UO.WaitForClientTargetResponse

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

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

UO.WaitTargetObject

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

UO.CancelWaitTarget();
UO.WaitTargetObject("self");
UO.UseSkill("Anatomy");

UO.TargetToXYZ

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

if (Truth(UO.TargetPresent()))
{
    UO.TargetToXYZ(1445, 1690, 0);
}

bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

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


UO.CancelTarget

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

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

void UO.CancelTarget();

Скасує активний курсор та очищає підготовлені відповіді на приціл.

Параметри

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

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

void — значення, що повертається, немає. Викликайте окремим рядком; не використовуйте як true/false, serial або type. Метадату object? у сумісних форм не змінює фактичний результат void.

Поведінка

  • Вже надіслані серверу відповіді не відгукуються.
  • Локальний callback-приціл отримує скасування; для активного серверного прицілу відправляється скасування цілі.
  • Черга загальна клієнта: її очищення належить до підготовленим відповідей всіх процедур.

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

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

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

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

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

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

1. Зняти підготовку – прямий скрипт

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

  • Аргументів немає.
  • Відкладена відповідь на self видаляється.
UO.WaitTargetSelf();
UO.CancelTarget();

2. Замінити раніше підготовлену точку – функція сценарію

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

  • 1445/1690/0 — приклад нової точки світу.
  • Старі відповіді забираються до постановки нової мети.
return  RunScenario();
 object? RunScenario()
{
    UO.CancelTarget();
    UO.WaitTargetXYZ(1445, 1690, 0);
    return null;
}

3. Відмовитись після тайм-ауту — клас сценарію

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

  • 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()
    {
        UO.WaitTargetSelf();
        UO.UseSkill("Anatomy");
        await Delay(1000);
        if (Truth(UO.IsWaitTargetActive()))
        {
            UO.CancelTarget();
        }

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

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

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

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

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

public void CancelTarget()

        {

            var waitTargetQueue = bridge.GetWaitTargetQueue();

            if (waitTargetQueue.Length > 0 || bridge.IsTargeting() != 0)

            {

                bridge.CancelTarget();

                SystemMessage("Targeting cancelled");

            }

            else

                SystemMessage("Error: no target to cancel");

        }

UO.CancelWaitTarget

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

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

void UO.CancelWaitTarget();

Очищає підготовлені відповіді приціл.

Параметри

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

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

void — значення, що повертається, немає. Викликайте окремим рядком; не використовуйте як true/false, serial або type. Метадату object? у сумісних форм не змінює фактичний результат void.

Поведінка

  • Вже надіслані серверу відповіді не відгукуються.
  • Відкритий курсор залишається активним; пізніше його можна обробити вручну.
  • Черга загальна клієнта: її очищення належить до підготовленим відповідей всіх процедур.

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

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

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

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

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

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

1. Зняти підготовку – прямий скрипт

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

  • Аргументів немає.
  • Відкладена відповідь на self видаляється.
UO.WaitTargetSelf();
UO.CancelWaitTarget();

2. Замінити раніше підготовлену точку – функція сценарію

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

  • 1445/1690/0 — приклад нової точки світу.
  • Старі відповіді забираються до постановки нової мети.
return  RunScenario();
 object? RunScenario()
{
    UO.CancelWaitTarget();
    UO.WaitTargetXYZ(1445, 1690, 0);
    return null;
}

3. Відмовитись після тайм-ауту — клас сценарію

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

  • 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()
    {
        UO.WaitTargetSelf();
        UO.UseSkill("Anatomy");
        await Delay(1000);
        if (Truth(UO.IsWaitTargetActive()))
        {
            UO.CancelWaitTarget();
        }

        return null;
    }

    Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
    bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}

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

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

UO.CancelWaitTarget() — UO.CancelWaitTarget()

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

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

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

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

case "cancelwaittarget": bridge.CancelWaitTarget(); return InjectionValue.Unit;

UO.ClientRequestObjectTarget

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

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

void UO.ClientRequestObjectTarget();

Відкриває локальний приціл для вибору предмета або персонажа.

Параметри

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

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

void — значення, що повертається, немає. Викликайте окремим рядком; не використовуйте як true/false, serial або type. Метадату object? у сумісних форм не змінює фактичний результат void.

Поведінка

  • Попередній результат цього runtime скидається. Команда повертає одразу, не чекаючи кліка.
  • Результат читається через ClientTargetResponse після WaitForClientTargetResponse або ClientTargetResponsePresent.
  • Зупинка процедури, що виконується, знімає приціл, що належить їй, у найближчому кадрі. Якщо інший запит замінив курсор, його скасування не зачіпає.
  • Один приціл інтерфейсу клієнта не можна одночасно використовувати для двох незалежних ручних виборів. Не запускайте новий запит, доки не обробили попередній запит.

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

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

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

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

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

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

1. Вибрати предмет чи персонажа - прямий скрипт

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

  • 5000 - тайм-аут очікування кліка в мілісекундах. Новий запит скидає попередній результат.
  • Масив із п'яти полів означає обраний об'єкт. result[0] - serial, а не type.
UO.ClientRequestObjectTarget();
if (Truth(UO.WaitForClientTargetResponse(5000)))
{
    var result = UO.ClientTargetResponse();
    if (Truth(ArrayLength(result) == 5))
    {
        UO.Print("Serial: " + UO.Int2Hex(result[0]));
    }
    else
    {
        UO.Print("Selection cancelled");
    }
}

int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

2. Скасування є відповіддю, але не об'єктом – функція сценарію

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

  • CancelTarget скасовує локальний вибір; callback повертає порожній результат.
  • ClientTargetResponsePresent дає 1, але довжина масиву дорівнює 0. Не звертайтеся до result[0] без перевірки довжини.
return  RunScenario();
 object? RunScenario()
{
    UO.ClientRequestObjectTarget();
    UO.CancelTarget();
    if (Truth(UO.ClientTargetResponsePresent()))
    {
        var result = UO.ClientTargetResponse();
        UO.Print("Fields: " + Convert.ToString(ArrayLength(result)));
    }

    return null;
}

int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

3. Вибрати об'єкт і зберегти іменоване посилання - клас сценарію

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

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

     public object? RunScenario()
    {
        UO.ClientRequestObjectTarget();
        if (UO.WaitForClientTargetResponse(5000) == 0)
            return false;
        var result = UO.ClientTargetResponse();
        if (((object? [])result).Length != 5 || Convert.ToInt32(result[0]) == 0)
            return false;
        UO.AddObject("selected_object", result[0]);
        UO.Print($"Saved object: {UO.GetName(result[0])}");
        return true;
        return null;
    }
}

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

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

UO.ClientRequestObjectTarget() — UO.ClientRequestObjectTarget()

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

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

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

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

case "clientrequestobjecttarget": bridge.RequestClientTarget(false); return InjectionValue.Unit;

UO.ClientRequestTileTarget

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

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

void UO.ClientRequestTileTarget();

Відкриває локальний приціл для вибору точки/тайла або об'єкта вручну.

Параметри

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

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

void — значення, що повертається, немає. Викликайте окремим рядком; не використовуйте як true/false, serial або type. Метадату object? у сумісних форм не змінює фактичний результат void.

Поведінка

  • Попередній результат цього runtime скидається. Команда повертає одразу, не чекаючи кліка.
  • Результат читається через ClientTargetResponse після WaitForClientTargetResponse або ClientTargetResponsePresent.
  • Зупинка процедури, що виконується, знімає приціл, що належить їй, у найближчому кадрі. Якщо інший запит замінив курсор, його скасування не зачіпає.
  • Один приціл інтерфейсу клієнта не можна одночасно використовувати для двох незалежних ручних виборів. Не запускайте новий запит, доки не обробили попередній запит.

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

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

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

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

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

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

1. Прочитати координати обраного тайлу — прямий скрипт

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

  • result[1] - graphic, result[2]/[3]/[4] - X/Y/Z. У тайла світу serial result[0] дорівнює 0.
  • Тип, координати та serial - окремі поля. Індексу статичного шару у цьому масиві немає.
UO.ClientRequestTileTarget();
if (Truth(UO.WaitForClientTargetResponse(5000)))
{
    var result = UO.ClientTargetResponse();
    if (Truth(ArrayLength(result) == 5))
    {
        UO.Print("Type: " + UO.Int2Hex(result[1]));
        UO.Print(Convert.ToString(result[2]) + "," + Convert.ToString(result[3]) + "," + Convert.ToString(result[4]));
    }
}

int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

2. Зберегти координати обраної клітини – функція сценарію

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

  • Для клітини X/Y/Z знаходяться в полях 2/3/4. Global зберігає рядки; graphic і serial тут не заміняють координати.
return  RunScenario();
 object? RunScenario()
{
    UO.ClientRequestTileTarget();
    if (UO.WaitForClientTargetResponse(5000) == 0)
        return false;
    var selection = (object? [])UO.ClientTargetResponse();
    if (selection.Length != 5)
        return false;
    UO.SetGlobal("route.x", Convert.ToString(selection[2]));
    UO.SetGlobal("route.y", Convert.ToString(selection[3]));
    UO.SetGlobal("route.z", Convert.ToString(selection[4]));
    return true;
    return null;
}

3. Перервати локальний вибір клітини – клас сценарію

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

  • CancelTarget скасовує локальний курсор. Наявність callback після скасування не означає успішного вибору.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

    async public Task<object?> RunScenarioAsync()
    {
        UO.ClientRequestTileTarget();
        await WaitAsync(1000);
        UO.CancelTarget();
        if (UO.ClientTargetResponsePresent() != 0)
        {
            var result = (object? [])UO.ClientTargetResponse();
            UO.Print($"Response after cancel: {result.Length} fields");
        }

        return null;
    }
}

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

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

UO.ClientRequestTileTarget() — UO.ClientRequestTileTarget()

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

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

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

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

case "clientrequesttiletarget": bridge.RequestClientTarget(true); return InjectionValue.Unit;

UO.ClientTargetResponse

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

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

dynamic UO.ClientTargetResponse();

Копіює результат останнього локального ClientRequest* масив.

Параметри

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

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

Array з п'яти int: [0]=serial об'єкта (0 у землі/статики), [1]=graphic/type, [2]=X, [3]=Y, [4]=Z. Порожній масив повертається до вибору після скидання новим запитом, при скасуванні або невідповідному виборі. Відсутні hue, map, індекс статичного шару та ознака land/static. Це не об'єкт із іменованими полями.

Поведінка

  • Читання не споживає результату: його можна прочитати повторно. Новий ClientRequest* замінює його.
  • Завжди перевіряйте ArrayLength(result)=5 перед зверненням за індексами.

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

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

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

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

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

object? result = UO.ClientTargetResponse();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));

1. Вибрати предмет чи персонажа - прямий скрипт

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

  • 5000 - тайм-аут очікування кліка в мілісекундах. Новий запит скидає попередній результат.
  • Масив із п'яти полів означає обраний об'єкт. result[0] - serial, а не type.
UO.ClientRequestObjectTarget();
if (Truth(UO.WaitForClientTargetResponse(5000)))
{
    var result = UO.ClientTargetResponse();
    if (Truth(ArrayLength(result) == 5))
    {
        UO.Print("Serial: " + UO.Int2Hex(result[0]));
    }
    else
    {
        UO.Print("Selection cancelled");
    }
}

int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

2. Прочитати координати вибраного тайла – функція сценарію

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

  • result[1] - graphic, result[2]/[3]/[4] - X/Y/Z. У тайла світу serial result[0] дорівнює 0.
  • Тип, координати та serial - окремі поля. Індексу статичного шару у цьому масиві немає.
return  RunScenario();
 object? RunScenario()
{
    UO.ClientRequestTileTarget();
    if (Truth(UO.WaitForClientTargetResponse(5000)))
    {
        var result = UO.ClientTargetResponse();
        if (Truth(ArrayLength(result) == 5))
        {
            UO.Print("Type: " + UO.Int2Hex(result[1]));
            UO.Print(Convert.ToString(result[2]) + "," + Convert.ToString(result[3]) + "," + Convert.ToString(result[4]));
        }
    }

    return null;
}

int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

3. Скасування є відповіддю, але не об'єктом – клас сценарію

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

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

     public object? RunScenario()
    {
        UO.ClientRequestObjectTarget();
        UO.CancelTarget();
        if (Truth(UO.ClientTargetResponsePresent()))
        {
            var result = UO.ClientTargetResponse();
            UO.Print("Fields: " + Convert.ToString(ArrayLength(result)));
        }

        return null;
    }

    int ArrayLength(object? value) => value is System.Array array ? array.Length : 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.ClientTargetResponse() — UO.ClientTargetResponse()

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

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

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

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

case "clienttargetresponse":

                    return new InjectionValue(bridge.ClientTargetResponse().Select(value => new InjectionValue(value)).ToArray());

UO.ClientTargetResponsePresent

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

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

dynamic UO.ClientTargetResponsePresent();

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

Параметри

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

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

int 1 — callback вже відповів, включаючи скасування; 0 — новий вибір ще не завершено. Значення 1 не гарантує наявність об'єкта: при скасуванні ClientTargetResponse повертає порожній Array.

Результат команди — числовий прапор: 1 означає виконану умову, 0 — невиконану. Після var result = команда (...) перевіряйте if (result != 0) або if (result == 0). Збережіть результат одного виклику: повторний виклик може виконати дію знову або прочитати стан, що вже змінився.

Поведінка

  • Не означає наявність серверного прицілу й не описує чергу WaitTarget.
  • Читання результату не скидає цей прапор; його скидає наступний ClientRequest*.

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

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

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

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

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

object? result = UO.ClientTargetResponsePresent();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));

1. Скасування є відповіддю, але не об'єктом – прямий скрипт

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

  • CancelTarget скасовує локальний вибір; callback повертає порожній результат.
  • ClientTargetResponsePresent дає 1, але довжина масиву дорівнює 0. Не звертайтеся до result[0] без перевірки довжини.
UO.ClientRequestObjectTarget();
UO.CancelTarget();
if (Truth(UO.ClientTargetResponsePresent()))
{
    var result = UO.ClientTargetResponse();
    UO.Print("Fields: " + Convert.ToString(ArrayLength(result)));
}

int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

2. Перевірити готовність після вибору об'єкта – функція сценарію

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

  • Перевіряються і готовність відповіді, та її вміст. Ознака 1 не є serial об'єкта.
return  RunScenario();
 object? RunScenario()
{
    UO.ClientRequestObjectTarget();
    if (UO.WaitForClientTargetResponse(5000) == 0)
        return false;
    if (UO.ClientTargetResponsePresent() == 0)
        return false;
    var response = (object? [])UO.ClientTargetResponse();
    return response.Length == 5 && Convert.ToInt32(response[0]) != 0;
    return null;
}

3. Опитування готовності вибору клітини – клас сценарію

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

  • Поллінг обмежений п'ятьма секундами. За відсутності відповіді курсор скасовується; поля X/Y/Z читаються лише з повної відповіді.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

    async public Task<object?> RunScenarioAsync()
    {
        UO.ClientRequestTileTarget();
        for (int attempt = 0; attempt < 50; attempt++)
        {
            if (UO.ClientTargetResponsePresent() != 0)
            {
                var response = (object? [])UO.ClientTargetResponse();
                if (response.Length == 5)
                    UO.Print($"Selected tile: {response[2]},{response[3]},{response[4]}");
                return null;
            }

            await WaitAsync(100);
        }

        UO.CancelTarget();
        UO.Print("Selection timed out");
        return null;
    }
}

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

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

UO.ClientTargetResponsePresent() — UO.ClientTargetResponsePresent()

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

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

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

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

case "clienttargetresponsepresent": return new InjectionValue(bridge.ClientTargetResponsePresent());

UO.IsWaitTargetActive

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

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

dynamic UO.IsWaitTargetActive();

Перевіряє, чи залишилися підготовлені відповіді у черзі target.

Параметри

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

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

int 1 — є невідмінна відкладена мета об'єкта, тайла або скасування наступного прицілу; 0 - черга порожня. Не наявність відкритого курсора; для курсору використовуйте TargetPresent/Targeting.

Результат команди — числовий прапор: 1 означає виконану умову, 0 — невиконану. Після var result = команда (...) перевіряйте if (result != 0) або if (result == 0). Збережіть результат одного виклику: повторний виклик може виконати дію знову або прочитати стан, що вже змінився.

Поведінка

  • Читається черга всього клієнта. Якщо одночасно працюють кілька процедур, враховуються відповіді кожної з них.
  • Нуль означає лише відсутність очікуваної відповіді. Він не підтверджує успішне застосування навички або заклинання на сервері.

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

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

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

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

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

object? result = UO.IsWaitTargetActive();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));

1. Перевірити підготовку – прямий скрипт

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

  • Після WaitTargetSelf і до серверного target очікується 1.
  • CancelWaitTarget прибирає чергу; наступна перевірка дасть 0.
UO.WaitTargetSelf();
UO.Print(Convert.ToString(UO.IsWaitTargetActive()));
UO.CancelWaitTarget();

2. Обмежено дочекатися витрачання відповіді – функція сценарію

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

  • Параметрів перевірки немає. UO.Wait=50 мс, максимум 20 очікувань.
  • При відповіді, що залишилася, він скасовується. Перевірку результату серверної дії додайте окремо.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var attempts = 0;
    while (Truth(UO.IsWaitTargetActive()) && Truth(attempts < 20))
    {
        await Delay(50);
        attempts = attempts + 1;
    }

    if (Truth(UO.IsWaitTargetActive()))
    {
        UO.CancelWaitTarget();
    }

    return null;
}

Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

3. Показати різницю між чергою та прицілом – клас сценарію

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

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

     public object? RunScenario()
    {
        UO.Print("Queued: " + Convert.ToString(UO.IsWaitTargetActive()));
        UO.Print("Cursor: " + Convert.ToString(UO.TargetPresent()));
        return null;
    }
}

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

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

UO.IsWaitTargetActive() — UO.IsWaitTargetActive()

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

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

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

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

case "iswaittargetactive": return new InjectionValue(Waiting());

UO.LastTarget

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

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

int UO.LastTarget();

Читає serial останньої збереженої мети-об'єкта.

Параметри

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

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

"int" - "serial"/ "ID", не "type" і не "bool". 0 означає відсутність мети-об'єкта; земля та статика теж мають serial 0, хоча координати можуть бути збережені. Усі 32 біта зберігаються. Для перевірки ненульового ID використовуйте != 0, не > 0 або == true.

Поведінка

  • Без параметрів. Не включає приціл, не вибирає нову мету, не атакує та не відправляє пакети. LastTarget відрізняється від LastAttack та LastStatus. Звичайний вибір self не замінює останню мету; явний ClientMarkChar може змінити її.
  • При SetEntity зберігаються відомі Entity.X/Y; для предмета в контейнері можуть бути координати вмісту. SetLand/SetStatic зберігають світові X/Y вибраної точки. Подальший рух/видалення об'єкта не змінює збережені координати. Для поточної позиції використовуйте GetX/GetY(serial).
  • Clear та World.Clear скидають запис, у тому числі коли скрипти зберігаються. Невідомий serial у явній установці не успадковує попередні X/Y: вони стають 0. Це не гарантує існування цілі на сервері.
  • Читання serial та X/Y окремими командами не атомарне. Для мети-об'єкта LastTile зберігає мережеві X/Y=65535; це не збережена позиція об'єкта. Для землі/статики LastTile(1)/(2) читають вибрані X/Y. lasttarget без дужок - вбудоване живе значення, якщо не перекрито змінною.
  • Виклики World.Clear ClearWorldState: скидає активний зворотний виклик, збережену ціль і пакет повтору. Звичайне скидання зберігає історію. Внутрішній TargetLast надсилає збережений пакет лише на активний цільовий сервер; без історії або для локального зворотного виклику, він нічого не надсилає та зберігає ціль. Активний зворотний виклик клієнта отримує значення null один раз як скасування: ClientTargetResponsePresent стає 1, коли відповідь порожня. Повторне повідомлення про завершений вибір не надсилається.

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

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

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

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

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

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

1. Прочитати збережене значення – прямий скрипт

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

  • value - єдиний результат команди; HEX показує ID, Convert.ToString - координату. Виклик нічого не вибирає.
var value = UO.LastTarget();
UO.Print("Saved value: " + Hex(value));

string Hex(object? value) => Convert.ToInt64(value).ToString("X");

2. Порівняти збережену та поточну позицію – функція сценарію

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

  • id - збережений serial. Exists перевіряє наявність об'єкта перед GetX/GetY. Збережені координати та поточні можуть відрізнятися. При serial=0 приклад друкує вибрану точку, але сама 0 не доводить, що точку було обрано.
return  RunScenario();
 object? RunScenario()
{
    var id = UO.LastTarget();
    var x = UO.LastTargetX();
    var y = UO.LastTargetY();
    UO.Print("Saved XY: " + Convert.ToString(x) + "," + Convert.ToString(y));
    if (Truth(id != 0) && Truth(UO.Exists(id)))
    {
        UO.Print("Live XY: " + Convert.ToString(UO.GetX(id)) + "," + Convert.ToString(UO.GetY(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;

3. Повний помічник ReadTargetValue - клас сценарію

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

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

     public object? RunScenario()
    {
        var value = ReadTargetValue();
        UO.Print("Checked value: " + Convert.ToString(value));
        return null;
    }

    dynamic ReadTargetValue()
    {
        var value = UO.LastTarget();
        if (Truth(value == 0))
        {
            return -1;
        }

        return value;
    }

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

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

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

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

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

case "lasttarget": return new InjectionValue(bridge.LastTarget);

UO.LastTargetX

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

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

int UO.LastTargetX();

Читає координату X, збережену під час виборів останньої мети.

Параметри

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

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

int - збережена координата X, не піксель екрану. До вибору/після Clear або для невідомого об'єкта - 0; реальна координата 0 теж допустима. Не bool. Для землі/статики працює і при LastTarget()=0.

Поведінка

  • Без параметрів. Не включає приціл, не вибирає нову мету, не атакує та не відправляє пакети. LastTarget відрізняється від LastAttack та LastStatus. Звичайний вибір self не замінює останню мету; явний ClientMarkChar може змінити її.
  • При SetEntity зберігаються відомі Entity.X/Y; для предмета в контейнері можуть бути координати вмісту. SetLand/SetStatic зберігають світові X/Y вибраної точки. Подальший рух/видалення об'єкта не змінює збережені координати. Для поточної позиції використовуйте GetX/GetY(serial).
  • Clear та World.Clear скидають запис, у тому числі коли скрипти зберігаються. Невідомий serial у явній установці не успадковує попередні X/Y: вони стають 0. Це не гарантує існування цілі на сервері.
  • Читання serial та X/Y окремими командами не атомарне. Для мети-об'єкта LastTile зберігає мережеві X/Y=65535; це не збережена позиція об'єкта. Для землі/статики LastTile(1)/(2) читають вибрані X/Y. lasttarget без дужок - вбудоване живе значення, якщо не перекрито змінною.
  • Виклики World.Clear ClearWorldState: скидає активний зворотний виклик, збережену ціль і пакет повтору. Звичайне скидання зберігає історію. Внутрішній TargetLast надсилає збережений пакет лише на активний цільовий сервер; без історії або для локального зворотного виклику, він нічого не надсилає та зберігає ціль. Активний зворотний виклик клієнта отримує значення null один раз як скасування: ClientTargetResponsePresent стає 1, коли відповідь порожня. Повторне повідомлення про завершений вибір не надсилається.

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

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

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

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

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

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

1. Прочитати збережене значення – прямий скрипт

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

  • value - єдиний результат команди; HEX показує ID, Convert.ToString - координату. Виклик нічого не вибирає.
var value = UO.LastTargetX();
UO.Print("Saved value: " + Convert.ToString(value));

2. Порівняти збережену та поточну позицію – функція сценарію

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

  • id - збережений serial. Exists перевіряє наявність об'єкта перед GetX/GetY. Збережені координати та поточні можуть відрізнятися. При serial=0 приклад друкує вибрану точку, але сама 0 не доводить, що точку було обрано.
return  RunScenario();
 object? RunScenario()
{
    var id = UO.LastTarget();
    var x = UO.LastTargetX();
    var y = UO.LastTargetY();
    UO.Print("Saved XY: " + Convert.ToString(x) + "," + Convert.ToString(y));
    if (Truth(id != 0) && Truth(UO.Exists(id)))
    {
        UO.Print("Live XY: " + Convert.ToString(UO.GetX(id)) + "," + Convert.ToString(UO.GetY(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;

3. Повний помічник ReadTargetValue - клас сценарію

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

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

     public object? RunScenario()
    {
        var value = ReadTargetValue(0, 65535);
        UO.Print("Checked value: " + Convert.ToString(value));
        return null;
    }

    dynamic ReadTargetValue(dynamic minimum, dynamic maximum)
    {
        var value = UO.LastTargetX();
        if (Truth(value < minimum) || Truth(value > maximum))
        {
            return -1;
        }

        return value;
    }

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

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

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

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

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

public int LastTargetX() => bridge is ITargetSnapshotBridge snapshot ? snapshot.LastTargetX : bridge.GetX(bridge.LastTarget);

UO.LastTargetY

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

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

int UO.LastTargetY();

Читає координату Y, збережену під час виборів останньої мети.

Параметри

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

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

int - збережена координата Y, не піксель екрану. До вибору/після Clear або для невідомого об'єкта - 0; реальна координата 0 теж допустима. Не bool. Для землі/статики працює і при LastTarget()=0.

Поведінка

  • Без параметрів. Не включає приціл, не вибирає нову мету, не атакує та не відправляє пакети. LastTarget відрізняється від LastAttack та LastStatus. Звичайний вибір self не замінює останню мету; явний ClientMarkChar може змінити її.
  • При SetEntity зберігаються відомі Entity.X/Y; для предмета в контейнері можуть бути координати вмісту. SetLand/SetStatic зберігають світові X/Y вибраної точки. Подальший рух/видалення об'єкта не змінює збережені координати. Для поточної позиції використовуйте GetX/GetY(serial).
  • Clear та World.Clear скидають запис, у тому числі коли скрипти зберігаються. Невідомий serial у явній установці не успадковує попередні X/Y: вони стають 0. Це не гарантує існування цілі на сервері.
  • Читання serial та X/Y окремими командами не атомарне. Для мети-об'єкта LastTile зберігає мережеві X/Y=65535; це не збережена позиція об'єкта. Для землі/статики LastTile(1)/(2) читають вибрані X/Y. lasttarget без дужок - вбудоване живе значення, якщо не перекрито змінною.
  • Виклики World.Clear ClearWorldState: скидає активний зворотний виклик, збережену ціль і пакет повтору. Звичайне скидання зберігає історію. Внутрішній TargetLast надсилає збережений пакет лише на активний цільовий сервер; без історії або для локального зворотного виклику, він нічого не надсилає та зберігає ціль. Активний зворотний виклик клієнта отримує значення null один раз як скасування: ClientTargetResponsePresent стає 1, коли відповідь порожня. Повторне повідомлення про завершений вибір не надсилається.

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

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

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

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

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

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

1. Прочитати збережене значення – прямий скрипт

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

  • value - єдиний результат команди; HEX показує ID, Convert.ToString - координату. Виклик нічого не вибирає.
var value = UO.LastTargetY();
UO.Print("Saved value: " + Convert.ToString(value));

2. Порівняти збережену та поточну позицію – функція сценарію

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

  • id - збережений serial. Exists перевіряє наявність об'єкта перед GetX/GetY. Збережені координати та поточні можуть відрізнятися. При serial=0 приклад друкує вибрану точку, але сама 0 не доводить, що точку було обрано.
return  RunScenario();
 object? RunScenario()
{
    var id = UO.LastTarget();
    var x = UO.LastTargetX();
    var y = UO.LastTargetY();
    UO.Print("Saved XY: " + Convert.ToString(x) + "," + Convert.ToString(y));
    if (Truth(id != 0) && Truth(UO.Exists(id)))
    {
        UO.Print("Live XY: " + Convert.ToString(UO.GetX(id)) + "," + Convert.ToString(UO.GetY(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;

3. Повний помічник ReadTargetValue - клас сценарію

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

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

     public object? RunScenario()
    {
        var value = ReadTargetValue(0, 65535);
        UO.Print("Checked value: " + Convert.ToString(value));
        return null;
    }

    dynamic ReadTargetValue(dynamic minimum, dynamic maximum)
    {
        var value = UO.LastTargetY();
        if (Truth(value < minimum) || Truth(value > maximum))
        {
            return -1;
        }

        return value;
    }

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

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

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

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

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

public int LastTargetY() => bridge is ITargetSnapshotBridge snapshot ? snapshot.LastTargetY : bridge.GetY(bridge.LastTarget);

UO.LastTile

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

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

string UO.LastTile();
int UO.LastTile(object? index);

Читає збережену останню tile-мету.

Параметри

  • index — Необов'язковий int 0..3: 0=graphic, 1=X, 2=Y, 3=Z. Поза діапазоном - 0. Без індексу повертається рядок всього запису.

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

Без аргументів string "graphic X Y Z" з десятковими полями; з index - int одного поля. Відсутній/короткий запис доповнюється нулями.

Поведінка

  • NormalizeLastTile доповнює поля, що бракують, до чотирьох. Рядок не містить map/hue/serial. Значення 0 може означати реальний graphic/координату чи відсутність поля.
  • Команда тільки читає збережену tile-мету; не створює target та не вибирає нову клітинку. WaitTargetTile("lasttile") використовує окрему перевірку наявності запису.

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

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

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

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

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

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

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

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

  • Читає збережену останню tile-мету.
UO.Print(UO.LastTile());

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

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

  • NormalizeLastTile доповнює поля, що бракують, до чотирьох. Рядок не містить map/hue/serial. Значення 0 може означати реальний graphic/координату чи відсутність поля.
return  RunScenario();
 object? RunScenario()
{
    UO.Print(UO.LastTile(1));
    UO.Print(UO.LastTile(2));
    UO.Print(UO.LastTile(3));
    return null;
}

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

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

  • Команда тільки читає збережену tile-мету; не створює target та не вибирає нову клітинку. WaitTargetTile("lasttile") використовує окрему перевірку наявності запису.
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 graphic = UO.LastTile(0);
        var x = UO.LastTile(1);
        var y = UO.LastTile(2);
        var z = UO.LastTile(3);
        UO.Print(Convert.ToString(graphic) + " " + Convert.ToString(x) + " " + Convert.ToString(y) + " " + Convert.ToString(z));
        return null;
    }
}

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

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

UO.LastTile() — UO.LastTile()

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

Результат: string / String.

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

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

public string LastTile()

        {

            int[] tileInfo = NormalizeLastTile(bridge.LastTile());



            return $"{tileInfo[0]} {tileInfo[1]} {tileInfo[2]} {tileInfo[3]}";

        }

UO.LastTile(index) — UO.LastTile(Any)

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

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

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

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

public int LastTile(InjectionValue index)

        {

            var i = NumberConversions.ToInt(index);

            if (i < 0 || i > 3)

                return 0;



            return NormalizeLastTile(bridge?.LastTile())[i];



        }

UO.Target

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

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

void UO.Target();
void UO.Target(object? @object);
void UO.Target(object? targetKey, object? target);
void UO.Target(object? targetKey, object? target, object? targetType, object? @type, object? x, object? y, object? z);

Скасовує/ставить очікувану мету або відправляє явний target-пакет.

Параметри

  • object — Один аргумент: serial/аліас ставиться через WaitTargetObject. Без аргументів - CancelTarget.
  • targetKey — У формах 2/7 аргументів int ID target-запиту, зазвичай UO.TargetID(). Він передається прямо в пакет, не є keypress.
  • target - Форма 2: serial/аліас або "lasttile". Форма 7: serial об'єкта; "ground" залишає serial=0.
  • targetType — Тільки форма 7: протокольний тип target, зазвичай 0 об'єкт, 1 tile. Наводиться до byte.
  • type — Тільки форма 7: graphic та світові координати для tile/невідомого об'єкта; graphic/X/Y приводяться до ushort, Z до sbyte. Для відомого entity bridge замінює їх на актуальні поля entity.
  • x — Тільки форма 7: graphic та світові координати для tile/невідомого об'єкта; graphic/X/Y приводяться до ushort, Z до sbyte. Для відомого entity bridge замінює їх на актуальні поля entity.
  • y — Тільки форма 7: graphic та світові координати для tile/невідомого об'єкта; graphic/X/Y приводяться до ushort, Z до sbyte. Для відомого entity bridge замінює їх на актуальні поля entity.
  • z — Тільки форма 7: graphic та світові координати для tile/невідомого об'єкта; graphic/X/Y приводяться до ushort, Z до sbyte. Для відомого entity bridge замінює їх на актуальні поля entity.

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

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

Поведінка

  • Форми без аргументів/з одним йдуть по ExecuteLegacyManualAlias і керують чергою. Форми 2/7 викликають Target безпосередньо і відправляють Send_TargetObject, не чергу наступної мети.
  • У формі 2 "lasttile" бере graphic/X/Y/Z збереженої tile-мети; її відсутність виводить повідомлення. Невідомий аліас об'єкта також виводить повідомлення. Форма 7 при targetType=0 намагається дозволити serial; інші типи залишають serial = 0 ⟧.
  • Bridge.Target не перевіряє активний cursor/збіг targetKey; передайте актуальний ID. Не використовуйте старий key від попереднього запиту. Виклик не чекає на прийняття сервером.
  • Явні форми 2/7 аргументів відправляють пакет безпосередньо: негативний serial стає 0, targetKey наводиться до uint; ця гілка не очищає локальний cursor/черга і не оновлює TicksTarget. TargetToObject/TargetToTile для активного прицілу клієнта використовують інший шлях.

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

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

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

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

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

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

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

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

  • Скасовує/ставить очікувану мету або відправляє явний target-пакет.
UO.Target("self");
UO.Print(UO.Waiting());
UO.Target();

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

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

  • Форми без аргументів/з одним йдуть по ExecuteLegacyManualAlias і керують чергою. Форми 2/7 викликають Target безпосередньо і відправляють Send_TargetObject, не чергу наступної мети.
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.TargetPresent()))
    {
        UO.Target(UO.TargetID(), "self");
    }

    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.Target не перевіряє активний cursor/збіг targetKey; передайте актуальний ID. Не використовуйте старий key від попереднього запиту. Виклик не чекає на прийняття сервером.
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.TargetPresent()))
        {
            UO.Target(UO.TargetID(), "ground", 1, 0, UO.GetX(), UO.GetY(), UO.GetZ());
        }

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

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

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

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

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

case "target":

                    if (arguments.Length > 0) WaitTargetObject(arguments[0].ToString());

                    else CancelTarget();

                    break;

UO.Target(object) — UO.Target(Any)

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

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

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

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

case "target":

                    if (arguments.Length > 0) WaitTargetObject(arguments[0].ToString());

                    else CancelTarget();

                    break;

UO.Target(targetKey, target) — UO.Target(Any,Any)

Параметри: targetKey (Any), target (Any)

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

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

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

public void Target(InjectionValue targetKey, InjectionValue target)

        {

            int key = NumberConversions.ToInt(targetKey);

            string selector = target.Kind == InjectionValueKind.String ? target.String : string.Empty;



            if (selector.Equals("lasttile", StringComparison.OrdinalIgnoreCase))

            {

                int[] tile = bridge.LastTile() ?? Array.Empty<int>();

                if (tile.Length >= 4)

                    bridge.Target(key, 0, 1, tile[0], tile[1], tile[2], tile[3]);

                else

                    SystemMessage("UO.Target: lasttile is unavailable");

                return;

            }



            if (TryGetObject(target, out int serial))

                bridge.Target(key, serial, 0, 0, 0, 0, 0);

            else

                SystemMessage($"UO.Target: invalid target '{selector}'");

        }

UO.Target(targetKey, target, targetType, type, x, y, z) — UO.Target(Any,Any,Any,Any,Any,Any,Any)

Параметри: targetKey (Any), target (Any), targetType (Any), type (Any), x (Any), y (Any), z (Any)

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

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

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

public void Target

        (

            InjectionValue targetKey,

            InjectionValue target,

            InjectionValue targetType,

            InjectionValue type,

            InjectionValue x,

            InjectionValue y,

            InjectionValue z

        )

        {

            int targetTypeValue = NumberConversions.ToInt(targetType);

            string selector = target.Kind == InjectionValueKind.String ? target.String : string.Empty;

            int serial = 0;



            if (targetTypeValue == 0 && !selector.Equals("ground", StringComparison.OrdinalIgnoreCase))

                TryGetObject(target, out serial);



            bridge.Target

            (

                NumberConversions.ToInt(targetKey),

                serial,

                targetTypeValue,

                ResolveType(type),

                NumberConversions.ToInt(x),

                NumberConversions.ToInt(y),

                NumberConversions.ToInt(z)

            );

        }

UO.TargetByResource

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

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

void UO.TargetByResource(object? objID, object? resource);

Шукає предмет по graphic, готує задану мету та використовує знайдений предмет.

Параметри

  • objID — Serial/ID об'єкта: int, числова/hex-рядок або встановлений аліас, наприклад "lasttarget". Це не graphic/type. До дії перевіряйте завантажений об'єкт.
  • resource — Graphic/type предмета для пошуку, дозволяється ResolveType; це не номер поля resource із Pascal API.

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

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

Поведінка

  • У цій реалізації FindType(ResolveType(Resource), -1, 0, -1, true) шукає предмет. Якщо found != 0, спочатку bridge.WaitTargetObject(ObjID), потім bridge.UseObject(found).
  • Нічого не знайдено – нічого не ставиться та не використовується. Команда не надсилає окремий resource-target-пакет; scope=0 вибирає предмети з RootContainer=Player.Serial, включаючи вміст інвентарю/екіпірування; recursive=true передається bridge, але ця гілка scope0 сама використовує RootContainer.

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

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

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

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

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

UO.Print("Calling UO.TargetByResource");
UO.TargetByResource("self", "0x0E21");

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

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

  • Шукає предмет по graphic, готує задану мету та використовує знайдений предмет.
UO.TargetByResource("self", "0x0E21");

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

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

  • У цій реалізації FindType(ResolveType(Resource), -1, 0, -1, true) шукає предмет. Якщо found != 0, спочатку bridge.WaitTargetObject(ObjID), потім bridge.UseObject(found).
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.Exists("lasttarget")))
    {
        UO.TargetByResource("lasttarget", "0x0E21");
    }

    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. Повна допоміжна функція – клас сценарію

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

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

     public object? RunScenario()
    {
        UO.TargetByResource("self", "0x0E21");
        UO.Print(UO.Waiting());
        UO.CancelWaitTarget();
        return null;
    }
}

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

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

UO.TargetByResource(objID, resource) — UO.TargetByResource(Any,Any)

Параметри: objID (Any), resource (Any)

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

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

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

case "targetbyresource":

                {

                    int found = bridge.FindType(ResolveType(arguments[1]), -1, 0, -1, true);

                    if (found != 0) { bridge.WaitTargetObject(Arg(0)); bridge.UseObject(found); }

                    return InjectionValue.Unit;

                }

UO.TargetID

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

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

dynamic UO.TargetID();

Читає ідентифікатор поточного курсору цілі.

Параметри

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

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

int - 32 біта ID курсора, а не serial останнього об'єкта. За відсутності курсору повертається 0. Якщо старший біт встановлено, int негативний; Int2Hex зберігає його біти. Реальний cursorID=0 та локальний приціл також можуть давати 0: перевіряйте TargetPresent для визначення активності. У цьому клієнті спеціальна ненульова підстановка для нульового ID не використовується.

Поведінка

  • LastTarget/GetSerial("lasttarget") відносяться до вибраного об'єкта, TargetID - до запиту мети. Ці значення не можна замінювати одне одним.

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

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

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

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

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

object? result = UO.TargetID();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));

1. Вивести ID активного курсору - прямий скрипт

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

  • Аргументів немає.
  • Int2Hex дозволяє бачити всі біти ID, включаючи старший біт.
if (Truth(UO.TargetPresent()))
{
    UO.Print(UO.Int2Hex(UO.TargetID()));
}

bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

2. Розрізнити два види ID - функція сценарію

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

  • cursor - ID прицілу, object - serial об'єкта.
  • У TargetToObject передають object, а не cursor.
return  RunScenario();
 object? RunScenario()
{
    var cursor = UO.TargetID();
    var targetSerial = UO.GetSerial("lasttarget");
    UO.Print("Cursor: " + UO.Int2Hex(cursor));
    UO.Print("Object: " + targetSerial);
    return null;
}

3. Перевірити після очікування – клас сценарію

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

  • 1000 - тайм-аут очікування в мілісекундах.
  • Ознакою появи є результат WaitForTarget; знак cursor для цього не перевіряється.
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.WaitForTarget(1000)))
        {
            var cursor = UO.TargetID();
            UO.Print("Request: " + UO.Int2Hex(cursor));
        }
        else
        {
            UO.Print("No cursor arrived");
        }

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

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

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

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

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

case "targetid": return new InjectionValue(bridge.GetTargetCursorId());

UO.TargetPresent

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

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

dynamic UO.TargetPresent();

Перевіряє наявність активного курсора вибору мети клієнта.

Параметри

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

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

int 1 — TargetManager.IsTargeting встановлений; 0 — активного курсору немає. Враховується і локальний callback-приціл. Це не serial і не стан черги WaitTarget.

Результат команди — числовий прапор: 1 означає виконану умову, 0 — невиконану. Після var result = команда (...) перевіряйте if (result != 0) або if (result == 0). Збережіть результат одного виклику: повторний виклик може виконати дію знову або прочитати стан, що вже змінився.

Поведінка

  • Читає стан один раз; не чекає появи курсору.
  • Для очікування серверного прицілу після ігрової дії використовуйте WaitForTarget. Для результату локального ClientRequest* - WaitForClientTargetResponse.

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

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

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

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

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

object? result = UO.TargetPresent();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));

1. Показати стан - прямий скрипт

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

  • Аргументів немає.
  • Виводиться 1 або 0.
UO.Print(Convert.ToString(UO.TargetPresent()));

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

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

  • Умову перевіряє активний курсор.
  • CancelTarget у цьому клієнті також очищає підготовлені відповіді.
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.TargetPresent()))
    {
        UO.CancelTarget();
    }

    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. Після запиту ігрової дії клас сценарію

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

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

     public object? RunScenario()
    {
        UO.UseSkill("Anatomy");
        if (Truth(UO.WaitForTarget(3000)))
        {
            if (Truth(UO.TargetPresent()))
            {
                UO.TargetToObject("self");
            }
        }

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

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

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

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

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

case "targetpresent": return new InjectionValue(IsTargeting());

UO.TargetToObject

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

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

void UO.TargetToObject(object? objID);

Негайно відповідає вже активний серверний приціл serial об'єкта.

Параметри

  • objID — Serial/ID предмета або персонажа, число або hex/десятковий рядок, self/backpack/lasttarget/lastobject або збережене ім'я AddObject. Це не type. Перед дією з іменованим об'єктом перевіряйте Exists; недозволений аліас дає serial 0.

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

void — значення, що повертається, немає. Викликайте окремим рядком; не використовуйте як true/false, serial або type. Метадату object? у сумісних форм не змінює фактичний результат void.

Поведінка

  • Без активного серверного курсору нічого не робить і не створює відкладеної відповіді. Для попередньої підготовки використовуйте WaitTargetObject/WaitTargetTile/WaitTargetXYZ.
  • Локальні ClientRequest* та інші callback-приціли цією командою не обробляються.
  • Сервер визначає допустимість цілі. Для відсутнього у пам'яті serial відправляється ID з нульовими полями графіки/координат.

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

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

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

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

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

UO.Print("Calling UO.TargetToObject");
UO.TargetToObject("self");

1. Відповісти на відкритий приціл – прямий скрипт

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

  • Параметри задають самого персонажа.
  • У чергу майбутніх прицілів нічого не додається.
if (Truth(UO.TargetPresent()))
{
    UO.TargetToObject("self");
}

bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

2. Спочатку дочекатися прицілу – функція сценарію

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

  • 3000 - максимум очікування в мілісекундах; дію, що запросило приціл, має бути виконане раніше.
  • Команда викликається лише після появи прицілу; ігрова дія може завершитися відмовою сервера.
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.WaitForTarget(3000)))
    {
        UO.TargetToObject("self");
    }
    else
    {
        UO.Print("Target timeout");
    }

    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. Перевірити відсутність відкладеної відповіді – клас сценарію

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

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

     public object? RunScenario()
    {
        UO.CancelTarget();
        UO.TargetToObject("self");
        UO.Print("Queued: " + Convert.ToString(UO.IsWaitTargetActive()));
        return null;
    }
}

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

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

UO.TargetToObject(objID) — UO.TargetToObject(Any)

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

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

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

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

case "targettoobject": bridge.TargetToObject(Arg(0)); return InjectionValue.Unit;

UO.TargetToTile

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

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

void UO.TargetToTile(object? tile, object? x, object? y, object? z);

Негайно відповідає вже активний серверний приціл координатами тайла.

Параметри

  • tile — Graphic/type тайла, 0..65535, не serial. Нуль позначає координатну мету без зазначеної графіки.
  • x — Світова координата X на поточній карті, 0..65535. Це не піксель екрана чи координата гампа.
  • y — Світова координата Y на поточній карті, 0..65535.
  • z — Висота ігрової точки, для мережного target використовуйте -128..127. Це не поверх і не шар екіпірування.

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

void — значення, що повертається, немає. Викликайте окремим рядком; не використовуйте як true/false, serial або type. Метадату object? у сумісних форм не змінює фактичний результат void.

Поведінка

  • Без активного серверного курсору нічого не робить і не створює відкладеної відповіді. Для попередньої підготовки використовуйте WaitTargetObject/WaitTargetTile/WaitTargetXYZ.
  • Локальні ClientRequest* та інші callback-приціли цією командою не обробляються.
  • Ціль з graphic=0 вимагає координатного прицілу; предметний приціл не сприймає землю.

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

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

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

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

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

UO.Print("Calling UO.TargetToTile");
UO.TargetToTile(0x0CCA, 1445, 1690, 0);

1. Відповісти на відкритий приціл – прямий скрипт

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

  • Параметри задають приклад реальної точки: замініть координати та graphic потрібними значеннями.
  • У чергу майбутніх прицілів нічого не додається.
if (Truth(UO.TargetPresent()))
{
    UO.TargetToTile(0x0CCA, 1445, 1690, 0);
}

bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

2. Спочатку дочекатися прицілу – функція сценарію

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

  • 3000 - максимум очікування в мілісекундах; дію, що запросило приціл, має бути виконане раніше.
  • Команда викликається лише після появи прицілу; ігрова дія може завершитися відмовою сервера.
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.WaitForTarget(3000)))
    {
        UO.TargetToTile(0x0CCA, 1445, 1690, 0);
    }
    else
    {
        UO.Print("Target timeout");
    }

    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. Перевірити відсутність відкладеної відповіді – клас сценарію

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

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

     public object? RunScenario()
    {
        UO.CancelTarget();
        UO.TargetToTile(0x0CCA, 1445, 1690, 0);
        UO.Print("Queued: " + Convert.ToString(UO.IsWaitTargetActive()));
        return null;
    }
}

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

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

UO.TargetToTile(tile, x, y, z) — UO.TargetToTile(Any,Any,Any,Any)

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

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

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

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

case "targettotile":

                    bridge.TargetToTile(Arg(0), Arg(1), Arg(2), Arg(3)); return InjectionValue.Unit;

UO.TargetToXYZ

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

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

void UO.TargetToXYZ(object? x, object? y, object? z);

Негайно відповідає вже активний серверний приціл координатами тайла.

Параметри

  • x — Світова координата X на поточній карті, 0..65535. Це не піксель екрана чи координата гампа.
  • y — Світова координата Y на поточній карті, 0..65535.
  • z — Висота ігрової точки, для мережного target використовуйте -128..127. Це не поверх і не шар екіпірування.

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

void — значення, що повертається, немає. Викликайте окремим рядком; не використовуйте як true/false, serial або type. Метадату object? у сумісних форм не змінює фактичний результат void.

Поведінка

  • Без активного серверного курсору нічого не робить і не створює відкладеної відповіді. Для попередньої підготовки використовуйте WaitTargetObject/WaitTargetTile/WaitTargetXYZ.
  • Локальні ClientRequest* та інші callback-приціли цією командою не обробляються.
  • Ціль з graphic=0 вимагає координатного прицілу; предметний приціл не сприймає землю.

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

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

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

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

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

UO.Print("Calling UO.TargetToXYZ");
UO.TargetToXYZ(1445, 1690, 0);

1. Відповісти на відкритий приціл – прямий скрипт

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

  • Параметри задають приклад реальної точки: замініть координати та graphic потрібними значеннями.
  • У чергу майбутніх прицілів нічого не додається.
if (Truth(UO.TargetPresent()))
{
    UO.TargetToXYZ(1445, 1690, 0);
}

bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

2. Спочатку дочекатися прицілу – функція сценарію

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

  • 3000 - максимум очікування в мілісекундах; дію, що запросило приціл, має бути виконане раніше.
  • Команда викликається лише після появи прицілу; ігрова дія може завершитися відмовою сервера.
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.WaitForTarget(3000)))
    {
        UO.TargetToXYZ(1445, 1690, 0);
    }
    else
    {
        UO.Print("Target timeout");
    }

    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. Перевірити відсутність відкладеної відповіді – клас сценарію

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

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

     public object? RunScenario()
    {
        UO.CancelTarget();
        UO.TargetToXYZ(1445, 1690, 0);
        UO.Print("Queued: " + Convert.ToString(UO.IsWaitTargetActive()));
        return null;
    }
}

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

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

UO.TargetToXYZ(x, y, z) — UO.TargetToXYZ(Any,Any,Any)

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

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

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

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

case "targettoxyz":

                    bridge.TargetToTile(0, Arg(0), Arg(1), Arg(2)); return InjectionValue.Unit;

UO.Targeting

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

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

int UO.Targeting();

Перевіряє наявність активного курсора вибору мети клієнта.

Параметри

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

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

int 1 — TargetManager.IsTargeting встановлений; 0 — активного курсору немає. Враховується і локальний callback-приціл. Це не serial і не стан черги WaitTarget.

Результат команди — числовий прапор: 1 означає виконану умову, 0 — невиконану. Після var result = команда (...) перевіряйте if (result != 0) або if (result == 0). Збережіть результат одного виклику: повторний виклик може виконати дію знову або прочитати стан, що вже змінився.

Поведінка

  • Читає стан один раз; не чекає появи курсору.
  • Для очікування серверного прицілу після ігрової дії використовуйте WaitForTarget. Для результату локального ClientRequest* - WaitForClientTargetResponse.

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

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

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

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

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

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

1. Показати стан - прямий скрипт

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

  • Аргументів немає.
  • Виводиться 1 або 0.
UO.Print(Convert.ToString(UO.Targeting()));

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

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

  • Умову перевіряє активний курсор.
  • CancelTarget у цьому клієнті також очищає підготовлені відповіді.
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.Targeting()))
    {
        UO.CancelTarget();
    }

    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. Після запиту ігрової дії клас сценарію

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

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

     public object? RunScenario()
    {
        UO.UseSkill("Anatomy");
        if (Truth(UO.WaitForTarget(3000)))
        {
            if (Truth(UO.Targeting()))
            {
                UO.TargetToObject("self");
            }
        }

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

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

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

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

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

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

UO.TicksTarget

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

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

int UO.TicksTarget();

Читає позначку часу останньої підготовки мети через WaitTargetObject/WaitTargetTile та їх оболонки, що викликають.

Параметри

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

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

int - значення UO.Timer в момент підготовки, в десятих частках секунди від запуску runtime. До першої такої підготовки - "0". Це позначка, не тривалість очікування, не мілісекунди і не ID цілі.

Поведінка

  • Безпосередні TargetToObject/TargetToTile/TargetToXYZ не готують чергу і цю позначку не оновлюють.
  • Деякі команди пошуку відповідають безпосередньо через bridge; TicksTarget не є універсальним часом будь-якої зміни target.

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

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

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

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

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

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

1. Запам'ятати момент підготовки – прямий скрипт

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

  • Аргументів немає; WaitTargetSelf оновлює позначку.
  • stamp вимірюється десятими частками секунди.
UO.WaitTargetSelf();
var stamp = UO.TicksTarget();
UO.Print(Convert.ToString(stamp));
UO.CancelWaitTarget();

2. Обчислити минулий час – функція сценарію

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

  • UO.Wait=250 мілісекунд.
  • Через дискретність позначки elapsed зазвичай 2 або 3, а не 250.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    UO.WaitTargetObject("self");
    await Delay(250);
    var elapsed = UO.Timer() - UO.TicksTarget();
    UO.Print("Tenths: " + Convert.ToString(elapsed));
    UO.CancelWaitTarget();
    return null;
}

Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));

3. Переконатись у однаковому часі для числового serial — клас сценарію

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

  • selfId - int serial свого персонажа.
  • Числова форма оновлює позначку як рядкова; параметрів у TicksTarget немає.
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 selfId = UO.Hex2Int(UO.GetSerial("self"));
        UO.WaitTargetObject(selfId);
        UO.Print(Convert.ToString(UO.TicksTarget()));
        UO.CancelWaitTarget();
        return null;
    }
}

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

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

UO.TicksTarget() — UO.TicksTarget()

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

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

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

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

public int TicksTarget() => ticksTarget;

UO.WaitForClientTargetResponse

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

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

dynamic UO.WaitForClientTargetResponse(object? maxWaitTimeMS);

Чекає на завершення локального вибору ClientRequestObjectTarget/ClientRequestTileTarget.

Параметри

  • maxWaitTimeMS — Максимальний час у мілісекундах. 0 та негативні значення дають одну перевірку, без нескінченного очікування.

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

int 1 — відповідь вже отримана, у тому числі скасування; 0 - закінчився тайм-аут. При 1 все одно перевіряйте довжину ClientTargetResponse. При 0 сам курсор не закривається автоматично.

Результат команди — числовий прапор: 1 означає виконану умову, 0 — невиконану. Після var result = команда (...) перевіряйте if (result != 0) або if (result == 0). Збережіть результат одного виклику: повторний виклик може виконати дію знову або прочитати стан, що вже змінився.

Поведінка

  • Очікування проходить у потоці скрипта з інтервалом до 25 мс і переривається зупинкою скрипта.
  • Без попереднього ClientRequest* новий вибір не розпочинається.

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

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

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

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

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

object? result = UO.WaitForClientTargetResponse(5000);
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));

1. Вибрати предмет чи персонажа - прямий скрипт

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

  • 5000 - тайм-аут очікування кліка в мілісекундах. Новий запит скидає попередній результат.
  • Масив із п'яти полів означає обраний об'єкт. result[0] - serial, а не type.
UO.ClientRequestObjectTarget();
if (Truth(UO.WaitForClientTargetResponse(5000)))
{
    var result = UO.ClientTargetResponse();
    if (Truth(ArrayLength(result) == 5))
    {
        UO.Print("Serial: " + UO.Int2Hex(result[0]));
    }
    else
    {
        UO.Print("Selection cancelled");
    }
}

int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

2. Прочитати координати вибраного тайла – функція сценарію

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

  • result[1] - graphic, result[2]/[3]/[4] - X/Y/Z. У тайла світу serial result[0] дорівнює 0.
  • Тип, координати та serial - окремі поля. Індексу статичного шару у цьому масиві немає.
return  RunScenario();
 object? RunScenario()
{
    UO.ClientRequestTileTarget();
    if (Truth(UO.WaitForClientTargetResponse(5000)))
    {
        var result = UO.ClientTargetResponse();
        if (Truth(ArrayLength(result) == 5))
        {
            UO.Print("Type: " + UO.Int2Hex(result[1]));
            UO.Print(Convert.ToString(result[2]) + "," + Convert.ToString(result[3]) + "," + Convert.ToString(result[4]));
        }
    }

    return null;
}

int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

3. Відокремити тайм-аут від повної структури відповіді – клас сценарію

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

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

     public object? RunScenario()
    {
        UO.ClientRequestTileTarget();
        int ready = UO.WaitForClientTargetResponse(3000);
        if (ready == 0)
        {
            UO.CancelTarget();
            UO.Print("Selection timed out");
            return false;
        }

        var response = (object? [])UO.ClientTargetResponse();
        if (response.Length != 5)
            return false;
        UO.Print($"Tile coordinates: {response[2]}, {response[3]}, {response[4]}");
        return true;
        return null;
    }
}

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

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

UO.WaitForClientTargetResponse(maxWaitTimeMS) — UO.WaitForClientTargetResponse(Any)

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

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

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

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

case "waitforclienttargetresponse": return new InjectionValue(bridge.WaitForClientTargetResponse(Arg(0)));

UO.WaitForTarget

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

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

dynamic UO.WaitForTarget(object? maxWaitTimeMS);

Чекає на появу активного курсора мети в межах тайм-ауту.

Параметри

  • maxWaitTimeMS — Максимальне очікування в мілісекундах. Нуль та негативні значення дають одну негайну перевірку; це не нескінченне очікування.

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

int 1 - курсор був активний під час перевірки; 0 - тайм-аут без курсору. Локальний callback-приціл також задовольняє цю перевірку. Це не підтвердження застосування підготовленого WaitTarget: автоматична відповідь може вже витратити курсор до перевірки.

Результат команди — числовий прапор: 1 означає виконану умову, 0 — невиконану. Після var result = команда (...) перевіряйте if (result != 0) або if (result == 0). Збережіть результат одного виклику: повторний виклик може виконати дію знову або прочитати стан, що вже змінився.

Поведінка

  • Перевірка виконується з паузами до 25 мс у потоці скрипту і може бути перервана його зупинкою.
  • Сам метод не створює приціл і не вибирає ціль.

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

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

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

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

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

object? result = UO.WaitForTarget(3000);
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));

1. Чекати на приціл навички — прямий скрипт

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

  • MaxWaitTimeMS=3000, потім вибирається self.
  • WaitTargetSelf заздалегідь не ставиться: цей приклад відповідає явно.
UO.UseSkill("Anatomy");
if (Truth(UO.WaitForTarget(3000)))
{
    UO.TargetToObject("self");
}

bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

2. Одна перевірка – функція сценарію

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

  • MaxWaitTimeMS=0.
  • ready - 1 або 0; ніякої тривалої паузи немає.
return  RunScenario();
 object? RunScenario()
{
    var ready = UO.WaitForTarget(0);
    UO.Print(Convert.ToString(ready));
    return null;
}

3. Обробити тайм-аут – клас сценарію

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

  • 500 - половина секунди.
  • Відсутність прицілу може означати відмову дії або її автоматичну обробку: звіряйте ігровий журнал.
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.WaitForTarget(500) == 0))
        {
            UO.CancelWaitTarget();
            UO.Print("Cursor did not arrive");
        }

        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.WaitForTarget(maxWaitTimeMS) — UO.WaitForTarget(Any)

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

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

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

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

case "waitfortarget": return new InjectionValue(bridge.WaitUntilTargeting(Arg(0)));

UO.WaitTarget

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

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

void UO.WaitTarget(object? target);
void UO.WaitTarget(object? target, object? @type);
void UO.WaitTarget(object? target, object? @type, object? color);
void UO.WaitTarget(object? target, object? @type, object? color, object? distance);
void UO.WaitTarget(object? target, object? @type, object? color, object? distance, object? notoriety);
void UO.WaitTarget(object? target, object? @type, object? color, object? distance, object? notoriety, object? nearest);
void UO.WaitTarget(object? target, object? @type, object? color, object? distance, object? notoriety, object? nearest, object? maxZ);

Ставить serial у чергу наступного target-запиту, або вибирає мету по фільтрам.

Параметри

  • target — Позитивний дозволений serial/аліас ставиться безпосередньо, інші параметри ігноруються. 0 або -1 включає пошук; інший числовий sentinel скасовує наступну мету.
  • type - Необов'язковий graphic/type або маска типів; -1 без обмеження. Іменовані типи дозволяє ResolveType/ParseTypeMask.
  • color — Необов'язковий hue: -1 або 0xFFFF без обмеження.
  • distance — необов'язковий максимум відстані у клітинах; за замовчуванням GetFindDistance. Розбір ResolveCompactDistance допускає спеціальні значення згідно з налаштуваннями пошуку.
  • notoriety — Необов'язковий номер/маска notoriety. Непорожня маска обмежує кандидатів Mobile; без неї розглядаються mobiles та world items.
  • nearest — Необов'язковий bool, за замовчуванням true: сортує на відстані, потім serial.
  • maxZ — Необов'язковий максимум abs(Z-selfZ), за замовчуванням GetFindVertical.

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

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

Поведінка

  • Під час пошуку виключає self, serial=0, звичайний ignore list та вибрані іменовані type-фільтри; дублікати видаляються. Прямий позитивний serial ці фільтри не проходить.
  • Пошук читає лише завантажені об'єкти. Немає збігів/невірний sentinel – повідомлення та CancelNextTarget. Успішний вибір викликає WaitTargetObject та оновлює TicksTarget. Сам WaitTarget не використовує предмет, не відкриває target і не чекає на обробку сервера.

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

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

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

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

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

UO.Print("Calling UO.WaitTarget");
UO.WaitTarget("self");

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

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

  • Ставить serial у чергу наступного target-запиту, або вибирає мету по фільтрам.
UO.WaitTarget("self");

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

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

  • Під час пошуку виключає self, serial=0, звичайний ignore list та вибрані іменовані type-фільтри; дублікати видаляються. Прямий позитивний serial ці фільтри не проходить.
return  RunScenario();
 object? RunScenario()
{
    UO.WaitTarget(0, -1, -1, 10, 3, true, 20);
    return null;
}

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

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

  • Пошук читає лише завантажені об'єкти. Немає збігів/невірний sentinel – повідомлення та CancelNextTarget. Успішний вибір викликає WaitTargetObject та оновлює TicksTarget. Сам WaitTarget не використовує предмет, не відкриває target і не чекає на обробку сервера.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        UO.WaitTarget("lasttarget");
        UO.Print(UO.Waiting());
        UO.CancelWaitTarget();
        return null;
    }
}

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

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

UO.WaitTarget(target) — UO.WaitTarget(Any)

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

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

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

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

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

values =>

                    {

                        CompactWaitTarget(values);

                        return InjectionValue.Unit;

                    }

UO.WaitTarget(target, type) — UO.WaitTarget(Any,Any)

Параметри: target (Any), type (Any)

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

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

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

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

values =>

                    {

                        CompactWaitTarget(values);

                        return InjectionValue.Unit;

                    }

UO.WaitTarget(target, type, color) — UO.WaitTarget(Any,Any,Any)

Параметри: target (Any), type (Any), color (Any)

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

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

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

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

values =>

                    {

                        CompactWaitTarget(values);

                        return InjectionValue.Unit;

                    }

UO.WaitTarget(target, type, color, distance) — UO.WaitTarget(Any,Any,Any,Any)

Параметри: target (Any), type (Any), color (Any), distance (Any)

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

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

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

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

values =>

                    {

                        CompactWaitTarget(values);

                        return InjectionValue.Unit;

                    }

UO.WaitTarget(target, type, color, distance, notoriety) — UO.WaitTarget(Any,Any,Any,Any,Any)

Параметри: target (Any), type (Any), color (Any), distance (Any), notoriety (Any)

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

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

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

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

values =>

                    {

                        CompactWaitTarget(values);

                        return InjectionValue.Unit;

                    }

UO.WaitTarget(target, type, color, distance, notoriety, nearest) — UO.WaitTarget(Any,Any,Any,Any,Any,Any)

Параметри: target (Any), type (Any), color (Any), distance (Any), notoriety (Any), nearest (Any)

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

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

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

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

values =>

                    {

                        CompactWaitTarget(values);

                        return InjectionValue.Unit;

                    }

UO.WaitTarget(target, type, color, distance, notoriety, nearest, maxZ) — UO.WaitTarget(Any,Any,Any,Any,Any,Any,Any)

Параметри: target (Any), type (Any), color (Any), distance (Any), notoriety (Any), nearest (Any), maxZ (Any)

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

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

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

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

values =>

                    {

                        CompactWaitTarget(values);

                        return InjectionValue.Unit;

                    }

UO.WaitTargetGround

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

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

void UO.WaitTargetGround(object? @type);
void UO.WaitTargetGround(object? @type, object? color);

Шукає річ graphic/hue та ставить його у чергу наступної мети.

Параметри

  • type - Graphic/type int, hex-рядок або встановлений іменований type. Це не serial предмет.
  • color - Необов'язковий int hue; за замовчуванням -1 - будь-який колір.

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

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

Поведінка

  • Область: ground/container selector 1 без рекурсивного пошуку. Bridge.FindType повертає знайдений serial; при serial>0 викликається bridge.WaitTargetObject. Ці методи безпосередньо не оновлюють runtime TicksTarget.
  • Немає предмета - повідомлення і CancelNextTarget. Пошук може змінювати загальні FindItem/FoundItems; команда не використовує знайдений предмет і чекає cursor.

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

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

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

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

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

UO.Print("Calling UO.WaitTargetGround");
UO.WaitTargetGround("0x0E21");

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

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

  • Шукає річ graphic/hue та ставить його у чергу наступної мети.
UO.WaitTargetGround("0x0E21");

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

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

  • Область: ground/container selector 1 без рекурсивного пошуку. Bridge.FindType повертає знайдений serial; при serial>0 викликається bridge.WaitTargetObject. Ці методи безпосередньо не оновлюють runtime TicksTarget.
return  RunScenario();
 object? RunScenario()
{
    UO.WaitTargetGround("0x0E21", -1);
    return null;
}

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

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

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

     public object? RunScenario()
    {
        UO.WaitTargetGround("0x0E21", -1);
        UO.Print(UO.Waiting());
        UO.CancelWaitTarget();
        return null;
    }
}

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

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

UO.WaitTargetGround(type) — UO.WaitTargetGround(Any)

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

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

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

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

public void WaitTargetGround(InjectionValue type) => WaitTargetGround(type, new InjectionValue(-1));

UO.WaitTargetGround(type, color) — UO.WaitTargetGround(Any,Any)

Параметри: type (Any), color (Any)

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

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

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

public void WaitTargetGround(InjectionValue type, InjectionValue color)

        {

            int item = bridge.FindType(ResolveType(type), NumberConversions.ToInt(color), 1, -1, false);

            if (item <= 0)

            {

                SystemMessage("No ground item found. Next target request will be canceled");

                bridge.CancelNextTarget();

            }

            else

                bridge.WaitTargetObject(item);

        }

UO.WaitTargetLast

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

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

void UO.WaitTargetLast();

Готує відповідь на наступний серверний приціл через аліас lasttarget.

Параметри

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

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

void — значення, що повертається, немає. Викликайте окремим рядком; не використовуйте як true/false, serial або type. Метадату object? у сумісних форм не змінює фактичний результат void.

Поведінка

  • Команда тільки готує відповідь: сама не застосовує предмет, навик чи заклинання. Наступний серверний приціл отримує підготовлену мету під час обробки кадру клієнта.
  • Послідовні виклики утворюють загальну чергу клієнта. Об'єкти та координатні цілі обробляються по одному прицілу; локальні вікна вибору ClientRequest*/Info/контейнера її не споживають.
  • CancelWaitTarget очищає чергу. TerminateAll очищає її повністю; зупинка процедури, що ще працює, також робить недійсними її власні відкладені відповіді. Звичайне завершення короткої процедури не скасовує підготовлену мету.
  • Надсилання відповіді не гарантує дію на сервері: той перевіряє дальність, доступність об'єкта, видимість та правила дії. Для контролю використовуйте ігровий результат та журнал.

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

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

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

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

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

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

1. Підготувати мету - прямий скрипт

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

  • Аргументів немає; використовується lasttarget.
  • Команда не відкриває приціл і сама не виконує дію.
UO.WaitTargetLast();

2. Перевірити наявність вибраного об'єкта – функція сценарію

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

  • lasttarget повинен вирішуватися в завантаженого персонажа для цього навички.
  • Перевірка Exists відсіює невідомий об'єкт; вибір типу об'єкта та допустимість навички залишаються умовами скрипту.
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.Exists("lasttarget")))
    {
        UO.CancelWaitTarget();
        UO.WaitTargetLast();
        UO.UseSkill("Anatomy");
    }

    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. Скасувати підготовлену мету - клас сценарію

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

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

     public object? RunScenario()
    {
        UO.WaitTargetLast();
        if (Truth(UO.IsWaitTargetActive()))
        {
            UO.CancelWaitTarget();
        }

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

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

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

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

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

public void WaitTargetLast() => WaitTargetObject("lasttarget");

UO.WaitTargetObject

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

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

void UO.WaitTargetObject(object? objID);
void UO.WaitTargetObject(object? id1, object? id2);

Готує одну чи дві послідовні відповіді serial на серверні приціли.

Параметри

  • objID / id1 / id2 — Serial/ID предмета або персонажа, число або hex/десятковий рядок, self/backpack/lasttarget/lastobject або збережене ім'я AddObject. Це не type. Перед дією з іменованим об'єктом перевіряйте Exists; недозволений аліас дає serial 0. Єдиний аргумент ставить одну мету. Числова та рядкова форми оновлюють TicksTarget однаково.
  • objID — Serial/ID предмета або персонажа, число або hex/десятковий рядок, self/backpack/lasttarget/lastobject або збережене ім'я AddObject. Це не type. Перед дією з іменованим об'єктом перевіряйте Exists; недозволений аліас дає serial 0. Єдиний аргумент ставить одну мету. Числова та рядкова форми оновлюють TicksTarget однаково.
  • id1 — Serial/ID предмета або персонажа, число або hex/десятковий рядок, self/backpack/lasttarget/lastobject або збережене ім'я AddObject. Це не type. Перед дією з іменованим об'єктом перевіряйте Exists; недозволений аліас дає serial 0. Перша мета форми із двома рядками.
  • id2 — Serial/ID предмета або персонажа, число або hex/десятковий рядок, self/backpack/lasttarget/lastobject або збережене ім'я AddObject. Це не type. Перед дією з іменованим об'єктом перевіряйте Exists; недозволений аліас дає serial 0. Друга мета форми із двома рядками; застосовується до наступного окремого прицілу.

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

void — значення, що повертається, немає. Викликайте окремим рядком; не використовуйте як true/false, serial або type. Метадату object? у сумісних форм не змінює фактичний результат void.

Поведінка

  • Команда тільки готує відповідь: сама не застосовує предмет, навик чи заклинання. Наступний серверний приціл отримує підготовлену мету під час обробки кадру клієнта.
  • Послідовні виклики утворюють загальну чергу клієнта. Об'єкти та координатні цілі обробляються по одному прицілу; локальні вікна вибору ClientRequest*/Info/контейнера її не споживають.
  • CancelWaitTarget очищає чергу. TerminateAll очищає її повністю; зупинка процедури, що ще працює, також робить недійсними її власні відкладені відповіді. Звичайне завершення короткої процедури не скасовує підготовлену мету.
  • Надсилання відповіді не гарантує дію на сервері: той перевіряє дальність, доступність об'єкта, видимість та правила дії. Для контролю використовуйте ігровий результат та журнал.

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

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

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

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

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

UO.Print("Calling UO.WaitTargetObject");
UO.WaitTargetObject("self");

1. Попередньо вибрати себе для навички - прямий скрипт

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

  • id="self" - serial свого персонажа. CancelWaitTarget прибирає раніше підготовлені відповіді.
  • UseSkill запитує навичку; його серверний приціл отримує підготовлену мету.
UO.CancelWaitTarget();
UO.WaitTargetObject("self");
UO.UseSkill("Anatomy");

2. Вибрати відомий об'єкт за числовим serial - функція сценарію

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

  • objectId - приклад serial: замініть своїм. Це не graphic/type.
  • Тут ціль лише підготовлена. Наступний крок скрипта повинен викликати дію, яка дійсно очікує на target.
return  RunScenario();
 object? RunScenario()
{
    var objectId = 0x40001234;
    if (Truth(UO.Exists(objectId)))
    {
        UO.WaitTargetObject(objectId);
        UO.Print("Object target prepared");
    }

    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. Два приціли: перший об'єкт і другий об'єкт — клас сценарію

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

  • source та destination - попередньо задані імена AddObject. GetSerial повертає рядки, які підходять для форми id1/id2.
  • Перший серверний приціл використовує перший, другий - second. Підходить тільки до дії з двома послідовними прицілами; перед іншою дією очищайте непотрібну другу мету.
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 first = UO.GetSerial("source");
        var second = UO.GetSerial("destination");
        if (Truth(UO.Exists(first)) && Truth(UO.Exists(second)))
        {
            UO.CancelWaitTarget();
            UO.WaitTargetObject(first, second);
        }

        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.WaitTargetObject(objID) — UO.WaitTargetObject(Any)

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

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

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

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

case "waittargetobject": WaitTargetObject(Arg(0)); return InjectionValue.Unit;

UO.WaitTargetObject(objID) — UO.WaitTargetObject(String)

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

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

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

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

public void WaitTargetObject(string id) => WaitTargetObject(GetObject(id));

UO.WaitTargetObject(id1, id2) — UO.WaitTargetObject(String,String)

Параметри: id1 (String), id2 (String)

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

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

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

public void WaitTargetObject(string id1, string id2) => WaitTargetObject(GetObject(id1), GetObject(id2));

UO.WaitTargetObjectType

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

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

void UO.WaitTargetObjectType(object? id, object? @type);
void UO.WaitTargetObjectType(object? id, object? @type, object? color);

Готує дві послідовні цілі: заданий об'єкт та знайдений предмет землі.

Параметри

  • id — Serial/ID об'єкта: int, числова/hex-рядок або встановлений аліас, наприклад "lasttarget". Це не graphic/type. До дії перевіряйте завантажений об'єкт.
  • type — Graphic/type другого предмета, int/hex/іменований type.
  • color - Необов'язковий hue другого предмета; -1 за замовчуванням будь-який.

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

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

Поведінка

  • Дозволяє перший serial через GetObject; другий шукає FindType(type,color,1,-1,false). Якщо обидва позитивні, викликає bridge. WaitTargetObject (first, second). Порядок цілей зберігається.
  • Якщо хоча б одна мета відсутня/непозитивна — повідомлення і CancelNextTarget, обидві цілі не ставляться. Гілка не оновлює TicksTarget і не використовує предмет.

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

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

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

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

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

UO.Print("Calling UO.WaitTargetObjectType");
UO.WaitTargetObjectType("self", "0x0E21");

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

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

  • Готує дві послідовні цілі: заданий об'єкт та знайдений предмет землі.
UO.WaitTargetObjectType("self", "0x0E21");

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

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

  • Дозволяє перший serial через GetObject; другий шукає FindType(type,color,1,-1,false). Якщо обидва позитивні, викликає bridge. WaitTargetObject (first, second). Порядок цілей зберігається.
return  RunScenario();
 object? RunScenario()
{
    UO.WaitTargetObjectType("lasttarget", "0x0E21", -1);
    return null;
}

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

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

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

     public object? RunScenario()
    {
        UO.WaitTargetObjectType("self", "0x0E21", -1);
        UO.Print(UO.Waiting());
        UO.CancelWaitTarget();
        return null;
    }
}

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

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

UO.WaitTargetObjectType(id, type) — UO.WaitTargetObjectType(Any,Any)

Параметри: id (Any), type (Any)

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

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

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

public void WaitTargetObjectType(InjectionValue id, InjectionValue type)

            => WaitTargetObjectType(id, type, new InjectionValue(-1));

UO.WaitTargetObjectType(id, type, color) — UO.WaitTargetObjectType(Any,Any,Any)

Параметри: id (Any), type (Any), color (Any)

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

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

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

public void WaitTargetObjectType(InjectionValue id, InjectionValue type, InjectionValue color)

        {

            int first = GetObject(id);

            int second = bridge.FindType(ResolveType(type), NumberConversions.ToInt(color), 1, -1, false);

            if (first <= 0 || second <= 0)

            {

                SystemMessage("UO.WaitTargetObjectType: object or ground item not found");

                bridge.CancelNextTarget();

                return;

            }

            bridge.WaitTargetObject(first, second);

        }

UO.WaitTargetSelf

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

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

void UO.WaitTargetSelf();

Готує відповідь на наступний серверний приціл через аліас self.

Параметри

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

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

void — значення, що повертається, немає. Викликайте окремим рядком; не використовуйте як true/false, serial або type. Метадату object? у сумісних форм не змінює фактичний результат void.

Поведінка

  • Команда тільки готує відповідь: сама не застосовує предмет, навик чи заклинання. Наступний серверний приціл отримує підготовлену мету під час обробки кадру клієнта.
  • Послідовні виклики утворюють загальну чергу клієнта. Об'єкти та координатні цілі обробляються по одному прицілу; локальні вікна вибору ClientRequest*/Info/контейнера її не споживають.
  • CancelWaitTarget очищає чергу. TerminateAll очищає її повністю; зупинка процедури, що ще працює, також робить недійсними її власні відкладені відповіді. Звичайне завершення короткої процедури не скасовує підготовлену мету.
  • Надсилання відповіді не гарантує дію на сервері: той перевіряє дальність, доступність об'єкта, видимість та правила дії. Для контролю використовуйте ігровий результат та журнал.

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

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

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

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

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

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

1. Підготувати мету - прямий скрипт

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

  • Аргументів немає; використовується self.
  • Команда не відкриває приціл і сама не виконує дію.
UO.WaitTargetSelf();

2. Перевірити наявність вибраного об'єкта – функція сценарію

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

  • self повинен вирішуватися в завантаженого персонажа для цього навички.
  • Перевірка Exists відсіює невідомий об'єкт; вибір типу об'єкта та допустимість навички залишаються умовами скрипту.
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.Exists("self")))
    {
        UO.CancelWaitTarget();
        UO.WaitTargetSelf();
        UO.UseSkill("Anatomy");
    }

    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. Скасувати підготовлену мету - клас сценарію

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

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

     public object? RunScenario()
    {
        UO.WaitTargetSelf();
        if (Truth(UO.IsWaitTargetActive()))
        {
            UO.CancelWaitTarget();
        }

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

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

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

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

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

public void WaitTargetSelf() => WaitTargetObject("self");

UO.WaitTargetTile

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

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

void UO.WaitTargetTile(object? selector);
void UO.WaitTargetTile(object? x, object? y, object? z);
void UO.WaitTargetTile(object? @type, object? x, object? y, object? z);

Готує координатну ціль із необов'язковою графікою тайлу.

Параметри

  • selector - Тільки у формі з одним аргументом: рядок "lasttile", що повторює збережену точку.
  • type — Graphic/type тайла, 0..65535, не serial. Нуль позначає координатну мету без зазначеної графіки. Є у формі з чотирма аргументами; у формі x/y/z дорівнює 0.
  • x — Світова координата X на поточній карті, 0..65535. Це не піксель екрана чи координата гампа.
  • y — Світова координата Y на поточній карті, 0..65535.
  • z — Висота ігрової точки, для мережного target використовуйте -128..127. Це не поверх і не шар екіпірування.

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

void — значення, що повертається, немає. Викликайте окремим рядком; не використовуйте як true/false, serial або type. Метадату object? у сумісних форм не змінює фактичний результат void.

Поведінка

  • Команда тільки готує відповідь: сама не застосовує предмет, навик чи заклинання. Наступний серверний приціл отримує підготовлену мету під час обробки кадру клієнта.
  • Послідовні виклики утворюють загальну чергу клієнта. Об'єкти та координатні цілі обробляються по одному прицілу; локальні вікна вибору ClientRequest*/Info/контейнера її не споживають.
  • CancelWaitTarget очищає чергу. TerminateAll очищає її повністю; зупинка процедури, що ще працює, також робить недійсними її власні відкладені відповіді. Звичайне завершення короткої процедури не скасовує підготовлену мету.
  • Надсилання відповіді не гарантує дію на сервері: той перевіряє дальність, доступність об'єкта, видимість та правила дії. Для контролю використовуйте ігровий результат та журнал.

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

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

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

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

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

UO.Print("Calling UO.WaitTargetTile");
UO.WaitTargetTile("lasttile");

1. Координати без graphic – прямий скрипт

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

  • x=1445, y=1690, z=0; відсутній type дорівнює 0.
  • Це точка світу. Команда не переміщає персонажа та не кладе предмет у гамп.
UO.CancelWaitTarget();
UO.WaitTargetTile(1445, 1690, 0);

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

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

  • type=0x0CCA — приклад графіки; використовуйте реальний type вибраного тайла. x/y/z – його світова позиція.
  • Graphic та координати повинні описувати потрібний об'єкт картки; сервер перевіряє допустимість цілі.
return  RunScenario();
 object? RunScenario()
{
    UO.CancelWaitTarget();
    UO.WaitTargetTile(0x0CCA, 1445, 1690, 0);
    return null;
}

3. Повторити збережену точку останнього target – клас сценарію

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

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

     public object? RunScenario()
    {
        UO.WaitTargetTile("lasttile");
        return null;
    }
}

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

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

UO.WaitTargetTile(selector) — UO.WaitTargetTile(Any)

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

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

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

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

public void WaitTargetTile(InjectionValue selector)

        {

            string name = selector.Kind == InjectionValueKind.String

                ? (selector.String ?? string.Empty).Trim()

                : string.Empty;

            if (!name.Equals("lasttile", StringComparison.OrdinalIgnoreCase))

                throw new NativeSubrutineException("UO.WaitTargetTile(one argument) accepts only 'lasttile'.");



            int[] tile = bridge.LastTile() ?? Array.Empty<int>();

            if (tile.Length < 4)

            {

                SystemMessage("UO.WaitTargetTile: lasttile is unavailable; next target request canceled.");

                bridge.CancelNextTarget();

                return;

            }

            bridge.WaitTargetTile(tile[0], tile[1], tile[2], tile[3]);

            ticksTarget = Timer();

        }

UO.WaitTargetTile(x, y, z) — UO.WaitTargetTile(Any,Any,Any)

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

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

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

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

public void WaitTargetTile(InjectionValue x, InjectionValue y, InjectionValue z)

            => WaitTargetTile(new InjectionValue(0), x, y, z);

UO.WaitTargetTile(type, x, y, z) — UO.WaitTargetTile(Any,Any,Any,Any)

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

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

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

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

public void WaitTargetTile(InjectionValue type, InjectionValue x, InjectionValue y, InjectionValue z)

        {

            bridge.WaitTargetTile(ResolveType(type), NumberConversions.ToInt(x), NumberConversions.ToInt(y), NumberConversions.ToInt(z));

            ticksTarget = Timer();

        }

UO.WaitTargetType

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

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

void UO.WaitTargetType(object? @type);
void UO.WaitTargetType(object? @type, object? color);

Шукає річ graphic/hue та ставить його у чергу наступної мети.

Параметри

  • type - Graphic/type int, hex-рядок або встановлений іменований type. Це не serial предмет.
  • color - Необов'язковий int hue; за замовчуванням -1 - будь-який колір.

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

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

Поведінка

  • Область: рюкзак з рекурсивним пошуком. Bridge.FindType повертає знайдений serial; при serial>0 викликається bridge.WaitTargetObject. Ці методи безпосередньо не оновлюють runtime TicksTarget.
  • Немає предмета - повідомлення і CancelNextTarget. Пошук може змінювати загальні FindItem/FoundItems; команда не використовує знайдений предмет і чекає cursor.

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

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

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

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

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

UO.Print("Calling UO.WaitTargetType");
UO.WaitTargetType("0x0E21");

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

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

  • Шукає річ graphic/hue та ставить його у чергу наступної мети.
UO.WaitTargetType("0x0E21");

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

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

  • Область: рюкзак з рекурсивним пошуком. Bridge.FindType повертає знайдений serial; при serial>0 викликається bridge.WaitTargetObject. Ці методи безпосередньо не оновлюють runtime TicksTarget.
return  RunScenario();
 object? RunScenario()
{
    UO.WaitTargetType("0x0E21", -1);
    return null;
}

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

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

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

     public object? RunScenario()
    {
        UO.WaitTargetType("0x0E21", -1);
        UO.Print(UO.Waiting());
        UO.CancelWaitTarget();
        return null;
    }
}

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

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

UO.WaitTargetType(type) — UO.WaitTargetType(Any)

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

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

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

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

public void WaitTargetType(InjectionValue type) => WaitTargetType(ResolveType(type), -1);

UO.WaitTargetType(type, color) — UO.WaitTargetType(Any,Any)

Параметри: type (Any), color (Any)

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

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

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

public void WaitTargetType(InjectionValue type, InjectionValue color)

            => WaitTargetType(ResolveType(type), NumberConversions.ToInt(color));

UO.WaitTargetXYZ

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

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

void UO.WaitTargetXYZ(object? x, object? y, object? z);

Готує координатну мету з graphic = 0 для наступного серверного прицілу.

Параметри

  • x — Світова координата X на поточній карті, 0..65535. Це не піксель екрана чи координата гампа.
  • y — Світова координата Y на поточній карті, 0..65535.
  • z — Висота ігрової точки, для мережного target використовуйте -128..127. Це не поверх і не шар екіпірування.

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

void — значення, що повертається, немає. Викликайте окремим рядком; не використовуйте як true/false, serial або type. Метадату object? у сумісних форм не змінює фактичний результат void.

Поведінка

  • Команда тільки готує відповідь: сама не застосовує предмет, навик чи заклинання. Наступний серверний приціл отримує підготовлену мету під час обробки кадру клієнта.
  • Послідовні виклики утворюють загальну чергу клієнта. Об'єкти та координатні цілі обробляються по одному прицілу; локальні вікна вибору ClientRequest*/Info/контейнера її не споживають.
  • CancelWaitTarget очищає чергу. TerminateAll очищає її повністю; зупинка процедури, що ще працює, також робить недійсними її власні відкладені відповіді. Звичайне завершення короткої процедури не скасовує підготовлену мету.
  • Надсилання відповіді не гарантує дію на сервері: той перевіряє дальність, доступність об'єкта, видимість та правила дії. Для контролю використовуйте ігровий результат та журнал.

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

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

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

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

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

UO.Print("Calling UO.WaitTargetXYZ");
UO.WaitTargetXYZ(1445, 1690, 0);

1. Вказати точку світу — прямий скрипт

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

  • X = 1445, Y = 1690, Z = 0. Graphic дорівнює 0.
  • Відповідь буде надіслано з появою серверного координатного прицілу.
UO.WaitTargetXYZ(1445, 1690, 0);

2. Використовувати точку під персонажем – функція сценарію

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

  • X/Y/Z зчитуються зі свого персонажа.
  • Це координатна мета, а не object target на serial персонажа. Для останнього потрібна WaitTargetSelf.
return  RunScenario();
 object? RunScenario()
{
    var x = UO.GetX();
    var y = UO.GetY();
    var z = UO.GetZ();
    UO.WaitTargetXYZ(x, y, z);
    return null;
}

3. Підготувати точку для інструменту – клас сценарію

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

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

     public object? RunScenario()
    {
        UO.CancelWaitTarget();
        UO.WaitTargetXYZ(1445, 1690, 0);
        UO.UseType(0x0F39, -1);
        return null;
    }
}

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

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

UO.WaitTargetXYZ(x, y, z) — UO.WaitTargetXYZ(Any,Any,Any)

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

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

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

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

case "waittargetxyz": WaitTargetTile(new InjectionValue(0), arguments[0], arguments[1], arguments[2]); return InjectionValue.Unit;

Clone this wiki locally