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(100, 100);Параметры, результат и все сценарии
UO.KeyPress(0x70);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.Click(object? name);Отправляет одиночный щелчок по объекту через GameActions.SingleClick.
-
name— Serial объекта или поддерживаемое имя self/backpack/lasttarget/сохранённого объекта; числовые строки и 0x-строки разрешаются runtime.
void — возвращаемого значения нет.
- Click разрешает ссылку через ObjectChecked. ClickOnObject сначала использует Arg для serial и вызывает Click(int). Это запрос подписи/информации объекта, а не DoubleClick и не использование предмета. Серверный ответ приходит асинхронно.
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Команда вызывается отдельной строкой. Сообщение перед ней показывает начало вызова, а не подтверждение действия сервера.
UO.Print("Calling UO.Click");
UO.Click("self");Параметры и ход выполнения:
- Одиночный щелчок отправляется по self.
UO.Click("self");Параметры и ход выполнения:
- Перед отправкой проверяется локальное существование цели.
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;Параметры и ход выполнения:
- Одиночный щелчок по рюкзаку не открывает его как двойной щелчок.
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.
Параметры: name (Any)
Результат: void / Unit.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.Click. -
InjectionScript.Runtime.InjectionApiUO.ObjectChecked:ObjectChecked(name, id => Click(id)). -
InjectionScript.Runtime.InjectionApiUO.Click:Click(id).
Внутренний код реализации, не самостоятельный скрипт.
public void Click(InjectionValue name) => ObjectChecked(name, id => Click(id));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
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 бросает ошибку. Нажатие обрабатывает текущий интерфейс/макрос, результат серверной команды не возвращается.
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Команда вызывается отдельной строкой. Сообщение перед ней показывает начало вызова, а не подтверждение действия сервера.
UO.Print("Calling UO.KeyPress");
UO.KeyPress(0x70);Параметры и ход выполнения:
- Синтезирует одно или несколько нажатий virtual-key.
UO.KeyPress(0x70);Параметры и ход выполнения:
- 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;
}Параметры и ход выполнения:
- Требуется открытое графическое 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.
Параметры: key (Integer)
Результат: void / Unit.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.KeyPress. -
InjectionScript.Runtime.InjectionApiUO.KeyPress:KeyPress(key, 1).
Внутренний код реализации, не самостоятельный скрипт.
public void KeyPress(int key) => KeyPress(key, 1);Параметры: key (Integer), count (Integer)
Результат: void / Unit.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.KeyPress. -
InjectionScript.Runtime.InjectionApiUO.KeyPress:KeyPress(key, count, 105).
Внутренний код реализации, не самостоятельный скрипт.
public void KeyPress(int key, int count) => KeyPress(key, count, 105);Параметры: key (Integer), count (Integer), delay (Integer)
Результат: void / Unit.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.KeyPress. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.KeyPress:bridge.KeyPress(key). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Wait:bridge.Wait(delay).
Внутренний код реализации, не самостоятельный скрипт.
public void KeyPress(int key, int count, int delay)
{
while (count > 0)
{
bridge.KeyPress(key);
bridge.Wait(delay);
count--;
}
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
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. Кнопка/объект под точкой зависит от текущего интерфейса.
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Команда вызывается отдельной строкой. Сообщение перед ней показывает начало вызова, а не подтверждение действия сервера.
UO.Print("Calling UO.LClick");
UO.LClick(100, 100);Параметры и ход выполнения:
- Синтезирует одиночное нажатие мыши: левая кнопка.
UO.LClick(100, 100);Параметры и ход выполнения:
- 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;
}Параметры и ход выполнения:
- Требуется открытое графическое окно 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.
Параметры: x (Integer), y (Integer)
Результат: void / Unit.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.LClick. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.LClick:bridge.LClick(x, y).
Внутренний код реализации, не самостоятельный скрипт.
public void LClick(int x, int y) => bridge.LClick(x, y);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
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. Кнопка/объект под точкой зависит от текущего интерфейса.
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Команда вызывается отдельной строкой. Сообщение перед ней показывает начало вызова, а не подтверждение действия сервера.
UO.Print("Calling UO.LDblClick");
UO.LDblClick(100, 100);Параметры и ход выполнения:
- Синтезирует двойное нажатие мыши: левая кнопка.
UO.LDblClick(100, 100);Параметры и ход выполнения:
- 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;
}Параметры и ход выполнения:
- Требуется открытое графическое окно 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.
Параметры: x (Integer), y (Integer)
Результат: void / Unit.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.LDblClick. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.LDblClick:bridge.LDblClick(x, y).
Внутренний код реализации, не самостоятельный скрипт.
public void LDblClick(int x, int y) => bridge.LDblClick(x, y);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
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 бросает ошибку. Нажатие обрабатывает текущий интерфейс/макрос, результат серверной команды не возвращается.
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Команда вызывается отдельной строкой. Сообщение перед ней показывает начало вызова, а не подтверждение действия сервера.
UO.Print("Calling UO.Press");
UO.Press(0x70);Параметры и ход выполнения:
- Синтезирует одно или несколько нажатий virtual-key.
UO.Press(0x70);Параметры и ход выполнения:
- 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;
}Параметры и ход выполнения:
- Требуется открытое графическое 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.
Параметры: key (Integer)
Результат: void / Unit.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.Press. -
InjectionScript.Runtime.InjectionApiUO.KeyPress:KeyPress(key).
Внутренний код реализации, не самостоятельный скрипт.
public void Press(int key) => KeyPress(key);Параметры: key (Integer), count (Integer)
Результат: void / Unit.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.Press. -
InjectionScript.Runtime.InjectionApiUO.KeyPress:KeyPress(key, count).
Внутренний код реализации, не самостоятельный скрипт.
public void Press(int key, int count) => KeyPress(key, count);Параметры: key (Integer), count (Integer), delay (Integer)
Результат: void / Unit.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.Press. -
InjectionScript.Runtime.InjectionApiUO.KeyPress:KeyPress(key, count, delay).
Внутренний код реализации, не самостоятельный скрипт.
public void Press(int key, int count, int delay) => KeyPress(key, count, delay);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
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. Кнопка/объект под точкой зависит от текущего интерфейса.
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Команда вызывается отдельной строкой. Сообщение перед ней показывает начало вызова, а не подтверждение действия сервера.
UO.Print("Calling UO.RClick");
UO.RClick(100, 100);Параметры и ход выполнения:
- Синтезирует одиночное нажатие мыши: правая кнопка.
UO.RClick(100, 100);Параметры и ход выполнения:
- 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;
}Параметры и ход выполнения:
- Требуется открытое графическое окно 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.
Параметры: x (Integer), y (Integer)
Результат: void / Unit.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.RClick. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.RClick:bridge.RClick(x, y).
Внутренний код реализации, не самостоятельный скрипт.
public void RClick(int x, int y) => bridge.RClick(x, y);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
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. Кнопка/объект под точкой зависит от текущего интерфейса.
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Команда вызывается отдельной строкой. Сообщение перед ней показывает начало вызова, а не подтверждение действия сервера.
UO.Print("Calling UO.RDblClick");
UO.RDblClick(100, 100);Параметры и ход выполнения:
- Синтезирует двойное нажатие мыши: правая кнопка.
UO.RDblClick(100, 100);Параметры и ход выполнения:
- 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;
}Параметры и ход выполнения:
- Требуется открытое графическое окно 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.
Параметры: x (Integer), y (Integer)
Результат: void / Unit.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.RDblClick. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.RDblClick:bridge.RDblClick(x, y).
Внутренний код реализации, не самостоятельный скрипт.
public void RDblClick(int x, int y) => bridge.RDblClick(x, y);