RU UO Topic mouse keyboard - LIHACHTETAN/ClassicUO-Bad-Newbie-CSharp-Scripts-IDE GitHub Wiki

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

Мышь и клавиатура

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

Ввод мышью и клавиатурой. Координаты экрана, клетки мира и координаты внутри гампа имеют разный смысл.

Разделы

Тема Команды и пояснения
Click UO.Click
LClick UO.LClick
RClick UO.RClick
DoubleClick UO.LDblClick · UO.RDblClick
KeyPress UO.KeyPress
Press UO.Press

Все команды темы

Вход

UO.Click · UO.LClick · UO.RClick · UO.LDblClick · UO.RDblClick · UO.KeyPress · UO.Press

Примеры по теме

В каждой карточке команды есть несколько самостоятельных сценариев: прямой код, функции и классы. Ниже приведены отдельные короткие сценарии; ограничения и полный разбор находятся в карточках.

UO.LClick

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

UO.LClick(100, 100);

UO.KeyPress

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

UO.KeyPress(0x70);

Полное описание команд


UO.Click

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

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

void UO.Click(object? name);

Отправляет одиночный щелчок по объекту через GameActions.SingleClick.

Параметры

  • name — Serial объекта или поддерживаемое имя self/backpack/lasttarget/сохранённого объекта; числовые строки и 0x-строки разрешаются runtime.

Возвращает

void — возвращаемого значения нет.

Поведение

  • Click разрешает ссылку через ObjectChecked. ClickOnObject сначала использует Arg для serial и вызывает Click(int). Это запрос подписи/информации объекта, а не DoubleClick и не использование предмета. Серверный ответ приходит асинхронно.

Самостоятельные C#-скрипты

Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.

Простой пример

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

Команда вызывается отдельной строкой. Сообщение перед ней показывает начало вызова, а не подтверждение действия сервера.

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

1. Щёлкнуть по персонажу — прямой скрипт

Параметры и ход выполнения:

  • Одиночный щелчок отправляется по self.
UO.Click("self");

2. Щёлкнуть по последней цели — функция сценария

Параметры и ход выполнения:

  • Перед отправкой проверяется локальное существование цели.
return  RunScenario();
 object? RunScenario()
{
    var target = UO.LastTarget();
    if (Truth(UO.Exists(target)))
    {
        UO.Click(target);
    }

    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. Щёлкнуть по рюкзаку — класс сценария

Параметры и ход выполнения:

  • Одиночный щелчок по рюкзаку не открывает его как двойной щелчок.
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 bag = UO.Backpack();
        if (Truth(bag != 0))
        {
            UO.Click(bag);
        }

        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.Click(name) — UO.Click(Any)

Параметры: name (Any)

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

При вызове:

Внутренний код реализации, не самостоятельный скрипт.

public void Click(InjectionValue name) => ObjectChecked(name, id => Click(id));

UO.KeyPress

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

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

void UO.KeyPress(object? key);
void UO.KeyPress(object? key, object? count);
void UO.KeyPress(object? key, object? count, object? delay);

Синтезирует одно или несколько нажатий virtual-key.

Параметры

  • key — int virtual-key Windows, приводится к byte. Это не строка символа и не ID target.
  • count — Необязательное число повторов, по умолчанию 1. 0/отрицательное — ни одного нажатия и ожидания.
  • delay — Необязательная пауза миллисекунд после каждого нажатия, включая последнее; по умолчанию 105. Передаётся bridge.Wait без дополнительного ограничения этой функцией.

Возвращает

void — значения нет. Вызывайте отдельной строкой; завершение не подтверждает действие сервера.

Поведение

  • Press пересылает все формы KeyPress. KeyPress выполняет цикл count>0: bridge.KeyPress(key), bridge.Wait(delay), count--. Bridge отправляет user32 keybd_event вниз/вверх.
  • Требуется открытое графическое ClassicUO с фокусом ввода; иначе RequireGameInput бросает ошибку. Нажатие обрабатывает текущий интерфейс/макрос, результат серверной команды не возвращается.

Самостоятельные C#-скрипты

Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.

Простой пример

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

Команда вызывается отдельной строкой. Сообщение перед ней показывает начало вызова, а не подтверждение действия сервера.

UO.Print("Calling UO.KeyPress");
UO.KeyPress(0x70);

1. Прямой вызов — прямой скрипт

Параметры и ход выполнения:

  • Синтезирует одно или несколько нажатий virtual-key.
UO.KeyPress(0x70);

2. Явный вариант — функция сценария

Параметры и ход выполнения:

  • Press пересылает все формы KeyPress. KeyPress выполняет цикл count>0: bridge.KeyPress(key), bridge.Wait(delay), count--. Bridge отправляет user32 keybd_event вниз/вверх.
return  RunScenario();
 object? RunScenario()
{
    UO.KeyPress(0x70, 2, 250);
    return null;
}

3. Полная вспомогательная функция — класс сценария

Параметры и ход выполнения:

  • Требуется открытое графическое ClassicUO с фокусом ввода; иначе RequireGameInput бросает ошибку. Нажатие обрабатывает текущий интерфейс/макрос, результат серверной команды не возвращается.
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.KeyPress(0x70, 0);
        UO.Print("Zero count sends no key");
        return null;
    }
}

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

C# учитывает регистр. Используйте точное имя UO. Числовые флаги сравнивайте с 0; bool используйте только там, где сигнатура возвращает bool.

UO.KeyPress(key) — UO.KeyPress(Integer)

Параметры: key (Integer)

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

При вызове:

Внутренний код реализации, не самостоятельный скрипт.

public void KeyPress(int key) => KeyPress(key, 1);

UO.KeyPress(key, count) — UO.KeyPress(Integer,Integer)

Параметры: key (Integer), count (Integer)

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

При вызове:

Внутренний код реализации, не самостоятельный скрипт.

public void KeyPress(int key, int count) => KeyPress(key, count, 105);

UO.KeyPress(key, count, delay) — UO.KeyPress(Integer,Integer,Integer)

Параметры: key (Integer), count (Integer), delay (Integer)

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

При вызове:

Внутренний код реализации, не самостоятельный скрипт.

public void KeyPress(int key, int count, int delay)

        {

            while (count > 0)

            {

                bridge.KeyPress(key);

                bridge.Wait(delay);

                count--;

            }

        }

UO.LClick

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

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

void UO.LClick(object? x, object? y);

Синтезирует одиночное нажатие мыши: левая кнопка.

Параметры

  • x — int X в пикселях окна ClassicUO, не мировая координата.
  • y — int Y в пикселях окна ClassicUO, не мировая координата.

Возвращает

void — значения нет. Вызывайте отдельной строкой; завершение не подтверждает действие сервера.

Поведение

  • Bridge вызывает WarpMouse(x,y), обновляет Mouse.Position и SDL_WarpMouseInWindow, затем один раз MouseButton down/up. Пауза между двойными кликами не добавляется.
  • Требуется открытое графическое окно ClassicUO с фокусом ввода; иначе RequireGameInput бросает InvalidOperationException. user32 mouse_event доступен на Windows. Кнопка/объект под точкой зависит от текущего интерфейса.

Самостоятельные C#-скрипты

Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.

Простой пример

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

Команда вызывается отдельной строкой. Сообщение перед ней показывает начало вызова, а не подтверждение действия сервера.

UO.Print("Calling UO.LClick");
UO.LClick(100, 100);

1. Прямой вызов — прямой скрипт

Параметры и ход выполнения:

  • Синтезирует одиночное нажатие мыши: левая кнопка.
UO.LClick(100, 100);

2. Явный вариант — функция сценария

Параметры и ход выполнения:

  • Bridge вызывает WarpMouse(x,y), обновляет Mouse.Position и SDL_WarpMouseInWindow, затем один раз MouseButton down/up. Пауза между двойными кликами не добавляется.
return  RunScenario();
 object? RunScenario()
{
    var x = 120;
    var y = 140;
    UO.LClick(x, y);
    return null;
}

3. Полная вспомогательная функция — класс сценария

Параметры и ход выполнения:

  • Требуется открытое графическое окно ClassicUO с фокусом ввода; иначе RequireGameInput бросает InvalidOperationException. user32 mouse_event доступен на Windows. Кнопка/объект под точкой зависит от текущего интерфейса.
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()
    {
        ClickAt(100, 100);
        return null;
    }

    void ClickAt(dynamic x, dynamic y)
    {
        UO.LClick(x, y);
    }
}

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

C# учитывает регистр. Используйте точное имя UO. Числовые флаги сравнивайте с 0; bool используйте только там, где сигнатура возвращает bool.

UO.LClick(x, y) — UO.LClick(Integer,Integer)

Параметры: x (Integer), y (Integer)

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

При вызове:

Внутренний код реализации, не самостоятельный скрипт.

public void LClick(int x, int y) => bridge.LClick(x, y);

UO.LDblClick

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

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

void UO.LDblClick(object? x, object? y);

Синтезирует двойное нажатие мыши: левая кнопка.

Параметры

  • x — int X в пикселях окна ClassicUO, не мировая координата.
  • y — int Y в пикселях окна ClassicUO, не мировая координата.

Возвращает

void — значения нет. Вызывайте отдельной строкой; завершение не подтверждает действие сервера.

Поведение

  • Bridge вызывает WarpMouse(x,y), обновляет Mouse.Position и SDL_WarpMouseInWindow, затем два раза MouseButton down/up. Пауза между двойными кликами не добавляется.
  • Требуется открытое графическое окно ClassicUO с фокусом ввода; иначе RequireGameInput бросает InvalidOperationException. user32 mouse_event доступен на Windows. Кнопка/объект под точкой зависит от текущего интерфейса.

Самостоятельные C#-скрипты

Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.

Простой пример

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

Команда вызывается отдельной строкой. Сообщение перед ней показывает начало вызова, а не подтверждение действия сервера.

UO.Print("Calling UO.LDblClick");
UO.LDblClick(100, 100);

1. Прямой вызов — прямой скрипт

Параметры и ход выполнения:

  • Синтезирует двойное нажатие мыши: левая кнопка.
UO.LDblClick(100, 100);

2. Явный вариант — функция сценария

Параметры и ход выполнения:

  • Bridge вызывает WarpMouse(x,y), обновляет Mouse.Position и SDL_WarpMouseInWindow, затем два раза MouseButton down/up. Пауза между двойными кликами не добавляется.
return  RunScenario();
 object? RunScenario()
{
    var x = 120;
    var y = 140;
    UO.LDblClick(x, y);
    return null;
}

3. Полная вспомогательная функция — класс сценария

Параметры и ход выполнения:

  • Требуется открытое графическое окно ClassicUO с фокусом ввода; иначе RequireGameInput бросает InvalidOperationException. user32 mouse_event доступен на Windows. Кнопка/объект под точкой зависит от текущего интерфейса.
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()
    {
        ClickAt(100, 100);
        return null;
    }

    void ClickAt(dynamic x, dynamic y)
    {
        UO.LDblClick(x, y);
    }
}

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

C# учитывает регистр. Используйте точное имя UO. Числовые флаги сравнивайте с 0; bool используйте только там, где сигнатура возвращает bool.

UO.LDblClick(x, y) — UO.LDblClick(Integer,Integer)

Параметры: x (Integer), y (Integer)

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

При вызове:

Внутренний код реализации, не самостоятельный скрипт.

public void LDblClick(int x, int y) => bridge.LDblClick(x, y);

UO.Press

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

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

void UO.Press(object? key);
void UO.Press(object? key, object? count);
void UO.Press(object? key, object? count, object? delay);

Синтезирует одно или несколько нажатий virtual-key.

Параметры

  • key — int virtual-key Windows, приводится к byte. Это не строка символа и не ID target.
  • count — Необязательное число повторов, по умолчанию 1. 0/отрицательное — ни одного нажатия и ожидания.
  • delay — Необязательная пауза миллисекунд после каждого нажатия, включая последнее; по умолчанию 105. Передаётся bridge.Wait без дополнительного ограничения этой функцией.

Возвращает

void — значения нет. Вызывайте отдельной строкой; завершение не подтверждает действие сервера.

Поведение

  • Press пересылает все формы KeyPress. KeyPress выполняет цикл count>0: bridge.KeyPress(key), bridge.Wait(delay), count--. Bridge отправляет user32 keybd_event вниз/вверх.
  • Требуется открытое графическое ClassicUO с фокусом ввода; иначе RequireGameInput бросает ошибку. Нажатие обрабатывает текущий интерфейс/макрос, результат серверной команды не возвращается.

Самостоятельные C#-скрипты

Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.

Простой пример

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

Команда вызывается отдельной строкой. Сообщение перед ней показывает начало вызова, а не подтверждение действия сервера.

UO.Print("Calling UO.Press");
UO.Press(0x70);

1. Прямой вызов — прямой скрипт

Параметры и ход выполнения:

  • Синтезирует одно или несколько нажатий virtual-key.
UO.Press(0x70);

2. Явный вариант — функция сценария

Параметры и ход выполнения:

  • Press пересылает все формы KeyPress. KeyPress выполняет цикл count>0: bridge.KeyPress(key), bridge.Wait(delay), count--. Bridge отправляет user32 keybd_event вниз/вверх.
return  RunScenario();
 object? RunScenario()
{
    UO.Press(0x70, 2, 250);
    return null;
}

3. Полная вспомогательная функция — класс сценария

Параметры и ход выполнения:

  • Требуется открытое графическое ClassicUO с фокусом ввода; иначе RequireGameInput бросает ошибку. Нажатие обрабатывает текущий интерфейс/макрос, результат серверной команды не возвращается.
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.Press(0x70, 0);
        UO.Print("Zero count sends no key");
        return null;
    }
}

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

C# учитывает регистр. Используйте точное имя UO. Числовые флаги сравнивайте с 0; bool используйте только там, где сигнатура возвращает bool.

UO.Press(key) — UO.Press(Integer)

Параметры: key (Integer)

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

При вызове:

Внутренний код реализации, не самостоятельный скрипт.

public void Press(int key) => KeyPress(key);

UO.Press(key, count) — UO.Press(Integer,Integer)

Параметры: key (Integer), count (Integer)

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

При вызове:

Внутренний код реализации, не самостоятельный скрипт.

public void Press(int key, int count) => KeyPress(key, count);

UO.Press(key, count, delay) — UO.Press(Integer,Integer,Integer)

Параметры: key (Integer), count (Integer), delay (Integer)

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

При вызове:

Внутренний код реализации, не самостоятельный скрипт.

public void Press(int key, int count, int delay) => KeyPress(key, count, delay);

UO.RClick

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

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

void UO.RClick(object? x, object? y);

Синтезирует одиночное нажатие мыши: правая кнопка.

Параметры

  • x — int X в пикселях окна ClassicUO, не мировая координата.
  • y — int Y в пикселях окна ClassicUO, не мировая координата.

Возвращает

void — значения нет. Вызывайте отдельной строкой; завершение не подтверждает действие сервера.

Поведение

  • Bridge вызывает WarpMouse(x,y), обновляет Mouse.Position и SDL_WarpMouseInWindow, затем один раз MouseButton down/up. Пауза между двойными кликами не добавляется.
  • Требуется открытое графическое окно ClassicUO с фокусом ввода; иначе RequireGameInput бросает InvalidOperationException. user32 mouse_event доступен на Windows. Кнопка/объект под точкой зависит от текущего интерфейса.

Самостоятельные C#-скрипты

Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.

Простой пример

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

Команда вызывается отдельной строкой. Сообщение перед ней показывает начало вызова, а не подтверждение действия сервера.

UO.Print("Calling UO.RClick");
UO.RClick(100, 100);

1. Прямой вызов — прямой скрипт

Параметры и ход выполнения:

  • Синтезирует одиночное нажатие мыши: правая кнопка.
UO.RClick(100, 100);

2. Явный вариант — функция сценария

Параметры и ход выполнения:

  • Bridge вызывает WarpMouse(x,y), обновляет Mouse.Position и SDL_WarpMouseInWindow, затем один раз MouseButton down/up. Пауза между двойными кликами не добавляется.
return  RunScenario();
 object? RunScenario()
{
    var x = 120;
    var y = 140;
    UO.RClick(x, y);
    return null;
}

3. Полная вспомогательная функция — класс сценария

Параметры и ход выполнения:

  • Требуется открытое графическое окно ClassicUO с фокусом ввода; иначе RequireGameInput бросает InvalidOperationException. user32 mouse_event доступен на Windows. Кнопка/объект под точкой зависит от текущего интерфейса.
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()
    {
        ClickAt(100, 100);
        return null;
    }

    void ClickAt(dynamic x, dynamic y)
    {
        UO.RClick(x, y);
    }
}

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

C# учитывает регистр. Используйте точное имя UO. Числовые флаги сравнивайте с 0; bool используйте только там, где сигнатура возвращает bool.

UO.RClick(x, y) — UO.RClick(Integer,Integer)

Параметры: x (Integer), y (Integer)

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

При вызове:

Внутренний код реализации, не самостоятельный скрипт.

public void RClick(int x, int y) => bridge.RClick(x, y);

UO.RDblClick

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

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

void UO.RDblClick(object? x, object? y);

Синтезирует двойное нажатие мыши: правая кнопка.

Параметры

  • x — int X в пикселях окна ClassicUO, не мировая координата.
  • y — int Y в пикселях окна ClassicUO, не мировая координата.

Возвращает

void — значения нет. Вызывайте отдельной строкой; завершение не подтверждает действие сервера.

Поведение

  • Bridge вызывает WarpMouse(x,y), обновляет Mouse.Position и SDL_WarpMouseInWindow, затем два раза MouseButton down/up. Пауза между двойными кликами не добавляется.
  • Требуется открытое графическое окно ClassicUO с фокусом ввода; иначе RequireGameInput бросает InvalidOperationException. user32 mouse_event доступен на Windows. Кнопка/объект под точкой зависит от текущего интерфейса.

Самостоятельные C#-скрипты

Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.

Простой пример

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

Команда вызывается отдельной строкой. Сообщение перед ней показывает начало вызова, а не подтверждение действия сервера.

UO.Print("Calling UO.RDblClick");
UO.RDblClick(100, 100);

1. Прямой вызов — прямой скрипт

Параметры и ход выполнения:

  • Синтезирует двойное нажатие мыши: правая кнопка.
UO.RDblClick(100, 100);

2. Явный вариант — функция сценария

Параметры и ход выполнения:

  • Bridge вызывает WarpMouse(x,y), обновляет Mouse.Position и SDL_WarpMouseInWindow, затем два раза MouseButton down/up. Пауза между двойными кликами не добавляется.
return  RunScenario();
 object? RunScenario()
{
    var x = 120;
    var y = 140;
    UO.RDblClick(x, y);
    return null;
}

3. Полная вспомогательная функция — класс сценария

Параметры и ход выполнения:

  • Требуется открытое графическое окно ClassicUO с фокусом ввода; иначе RequireGameInput бросает InvalidOperationException. user32 mouse_event доступен на Windows. Кнопка/объект под точкой зависит от текущего интерфейса.
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()
    {
        ClickAt(100, 100);
        return null;
    }

    void ClickAt(dynamic x, dynamic y)
    {
        UO.RDblClick(x, y);
    }
}

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

C# учитывает регистр. Используйте точное имя UO. Числовые флаги сравнивайте с 0; bool используйте только там, где сигнатура возвращает bool.

UO.RDblClick(x, y) — UO.RDblClick(Integer,Integer)

Параметры: x (Integer), y (Integer)

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

При вызове:

Внутренний код реализации, не самостоятельный скрипт.

public void RDblClick(int x, int y) => bridge.RDblClick(x, y);
⚠️ **GitHub.com Fallback** ⚠️