Skip to content

RU UO Topic targeting

Codex edited this page Oct 12, 2026 · 4 revisions

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

Targeting

Главная · C# · IDE · UO API · A–Z · Примеры · Языки

Ручной ответ курсором цели и заранее установленный ответ WaitTarget. Установка ожидаемой цели и выполнение действия — отдельные операции.

Разделы

Тема Команды и пояснения
Target UO.Target
TargetID UO.TargetID
TargetToObject UO.TargetToObject
TargetToTile UO.TargetToTile
TargetToXYZ UO.TargetToXYZ
TargetByResource UO.TargetByResource
WaitTarget UO.WaitTarget
WaitTargetObject UO.WaitTargetObject
WaitTargetType UO.WaitTargetType
WaitTargetTile UO.WaitTargetTile
WaitTargetXYZ UO.WaitTargetXYZ
WaitTargetSelf UO.WaitTargetSelf
LastTarget UO.LastTarget
CancelTarget UO.CancelTarget
Client Target Response 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

Waiting / Отмена

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

Ответ клиента Target

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: сбрасывает активный прицел/callback, сохранённую цель и пакет повтора. Обычный Reset сохраняет историю. Внутренний TargetLast посылает сохранённый пакет только для активного серверного прицела; без истории или для локального callback ничего не посылает и сохраняет прицел. Активный клиентский callback один раз получает 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: сбрасывает активный прицел/callback, сохранённую цель и пакет повтора. Обычный Reset сохраняет историю. Внутренний TargetLast посылает сохранённый пакет только для активного серверного прицела; без истории или для локального callback ничего не посылает и сохраняет прицел. Активный клиентский callback один раз получает 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: сбрасывает активный прицел/callback, сохранённую цель и пакет повтора. Обычный Reset сохраняет историю. Внутренний TargetLast посылает сохранённый пакет только для активного серверного прицела; без истории или для локального callback ничего не посылает и сохраняет прицел. Активный клиентский callback один раз получает 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.
  • Первый серверный прицел использует first, второй — 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