Repository navigation
RU UO Topic targeting
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
Главная · 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
UO.WaitTarget · UO.WaitTargetObject · UO.WaitTargetType · UO.WaitTargetObjectType · UO.WaitTargetTile · UO.WaitTargetXYZ · UO.WaitTargetSelf · UO.WaitTargetGround · UO.WaitTargetLast · UO.WaitForTarget · UO.IsWaitTargetActive · UO.CancelTarget · UO.CancelWaitTarget
UO.ClientRequestObjectTarget · UO.ClientRequestTileTarget · UO.ClientTargetResponse · UO.ClientTargetResponsePresent · UO.WaitForClientTargetResponse
В каждой карточке команды есть несколько самостоятельных сценариев: прямой код, функции и классы. Ниже приведены отдельные короткие сценарии; ограничения и полный разбор находятся в карточках.
Параметры, результат и все сценарии
UO.CancelWaitTarget();
UO.WaitTargetObject("self");
UO.UseSkill("Anatomy");Параметры, результат и все сценарии
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;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.CancelTarget();Отменяет активный курсор и очищает подготовленные ответы на прицел.
Параметров нет.
void — возвращаемого значения нет. Вызывайте отдельной строкой; не используйте как true/false, serial или type. Метадата object? у совместимых форм не меняет фактический результат void.
- Уже отправленные серверу ответы не отзываются.
- Локальный callback-прицел получает отмену; для активного серверного прицела отправляется отмена цели.
- Очередь общая для клиента: её очистка относится к подготовленным ответам всех процедур.
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Команда вызывается отдельной строкой. Сообщение перед ней показывает начало вызова, а не подтверждение действия сервера.
UO.Print("Calling UO.CancelTarget");
UO.CancelTarget();Параметры и ход выполнения:
- Аргументов нет.
- Отложенный ответ на self удаляется.
UO.WaitTargetSelf();
UO.CancelTarget();Параметры и ход выполнения:
- 1445/1690/0 — пример новой точки мира.
- Старые ответы убираются до постановки новой цели.
return RunScenario();
object? RunScenario()
{
UO.CancelTarget();
UO.WaitTargetXYZ(1445, 1690, 0);
return null;
}Параметры и ход выполнения:
- 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.
Параметры: Параметров нет.
Результат: void / Unit.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.CancelTarget. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetWaitTargetQueue:bridge.GetWaitTargetQueue(). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.IsTargeting:bridge.IsTargeting(). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.CancelTarget:bridge.CancelTarget(). -
InjectionScript.Runtime.InjectionApiUO.SystemMessage:SystemMessage("Targeting cancelled").
Внутренний код реализации, не самостоятельный скрипт.
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");
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.CancelWaitTarget();Очищает подготовленные ответы на прицел.
Параметров нет.
void — возвращаемого значения нет. Вызывайте отдельной строкой; не используйте как true/false, serial или type. Метадата object? у совместимых форм не меняет фактический результат void.
- Уже отправленные серверу ответы не отзываются.
- Открытый курсор остаётся активным; позднее его можно обработать вручную.
- Очередь общая для клиента: её очистка относится к подготовленным ответам всех процедур.
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Команда вызывается отдельной строкой. Сообщение перед ней показывает начало вызова, а не подтверждение действия сервера.
UO.Print("Calling UO.CancelWaitTarget");
UO.CancelWaitTarget();Параметры и ход выполнения:
- Аргументов нет.
- Отложенный ответ на self удаляется.
UO.WaitTargetSelf();
UO.CancelWaitTarget();Параметры и ход выполнения:
- 1445/1690/0 — пример новой точки мира.
- Старые ответы убираются до постановки новой цели.
return RunScenario();
object? RunScenario()
{
UO.CancelWaitTarget();
UO.WaitTargetXYZ(1445, 1690, 0);
return null;
}Параметры и ход выполнения:
- 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.
Параметры: Параметров нет.
Результат: void / Unit.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.CancelWaitTarget:bridge.CancelWaitTarget().
Внутренний код реализации, не самостоятельный скрипт.
case "cancelwaittarget": bridge.CancelWaitTarget(); return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.ClientRequestObjectTarget();Открывает локальный прицел для ручного выбора предмета или персонажа.
Параметров нет.
void — возвращаемого значения нет. Вызывайте отдельной строкой; не используйте как true/false, serial или type. Метадата object? у совместимых форм не меняет фактический результат void.
- Предыдущий результат этого runtime сбрасывается. Команда возвращает сразу, не дожидаясь клика.
- Результат читается через ClientTargetResponse после WaitForClientTargetResponse либо ClientTargetResponsePresent.
- Остановка выполняющейся процедуры снимает принадлежащий ей прицел в ближайшем кадре. Если другой запрос уже заменил курсор, его отмена не затрагивает.
- Один прицел клиентского интерфейса нельзя одновременно использовать для двух независимых ручных выборов. Не запускайте новый запрос, пока не обработали предыдущий.
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Команда вызывается отдельной строкой. Сообщение перед ней показывает начало вызова, а не подтверждение действия сервера.
UO.Print("Calling UO.ClientRequestObjectTarget");
UO.ClientRequestObjectTarget();Параметры и ход выполнения:
- 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;Параметры и ход выполнения:
- 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;Параметры и ход выполнения:
- Ответ содержит пять полей; 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.
Параметры: Параметров нет.
Результат: void / Unit.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.RequestClientTarget:bridge.RequestClientTarget(false).
Внутренний код реализации, не самостоятельный скрипт.
case "clientrequestobjecttarget": bridge.RequestClientTarget(false); return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.ClientRequestTileTarget();Открывает локальный прицел для ручного выбора точки/тайла или объекта.
Параметров нет.
void — возвращаемого значения нет. Вызывайте отдельной строкой; не используйте как true/false, serial или type. Метадата object? у совместимых форм не меняет фактический результат void.
- Предыдущий результат этого runtime сбрасывается. Команда возвращает сразу, не дожидаясь клика.
- Результат читается через ClientTargetResponse после WaitForClientTargetResponse либо ClientTargetResponsePresent.
- Остановка выполняющейся процедуры снимает принадлежащий ей прицел в ближайшем кадре. Если другой запрос уже заменил курсор, его отмена не затрагивает.
- Один прицел клиентского интерфейса нельзя одновременно использовать для двух независимых ручных выборов. Не запускайте новый запрос, пока не обработали предыдущий.
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Команда вызывается отдельной строкой. Сообщение перед ней показывает начало вызова, а не подтверждение действия сервера.
UO.Print("Calling UO.ClientRequestTileTarget");
UO.ClientRequestTileTarget();Параметры и ход выполнения:
- 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;Параметры и ход выполнения:
- Для клетки 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;
}Параметры и ход выполнения:
- 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.
Параметры: Параметров нет.
Результат: void / Unit.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.RequestClientTarget:bridge.RequestClientTarget(true).
Внутренний код реализации, не самостоятельный скрипт.
case "clientrequesttiletarget": bridge.RequestClientTarget(true); return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
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 перед обращением по индексам.
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Результат одного вызова выводится в журнал. Число не преобразуется в bool; для массива показано количество элементов.
object? result = UO.ClientTargetResponse();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Параметры и ход выполнения:
- 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;Параметры и ход выполнения:
- 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;Параметры и ход выполнения:
- 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.
Параметры: Параметров нет.
Результат: dynamic / Any.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.ClientTargetResponse:bridge.ClientTargetResponse().
Внутренний код реализации, не самостоятельный скрипт.
case "clienttargetresponse":
return new InjectionValue(bridge.ClientTargetResponse().Select(value => new InjectionValue(value)).ToArray());Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.ClientTargetResponsePresent();Проверяет, получен ли ответ на последний локальный запрос выбора.
Параметров нет.
int 1 — callback уже ответил, включая отмену; 0 — новый выбор ещё не завершён. Значение 1 не гарантирует наличие объекта: при отмене ClientTargetResponse возвращает пустой Array.
Результат команды — числовой флаг: 1 означает выполненное условие, 0 — невыполненное. После var result = команда(...) проверяйте if (result != 0) или if (result == 0). Сохраните результат одного вызова: повторный вызов может выполнить действие снова либо прочитать уже изменившееся состояние.
- Не означает наличие серверного прицела и не описывает очередь WaitTarget.
- Чтение результата не сбрасывает этот флаг; его сбрасывает следующий ClientRequest*.
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Результат одного вызова выводится в журнал. Число не преобразуется в bool; для массива показано количество элементов.
object? result = UO.ClientTargetResponsePresent();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Параметры и ход выполнения:
- 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;Параметры и ход выполнения:
- Проверяются и готовность ответа, и его содержимое. Признак 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;
}Параметры и ход выполнения:
- Поллинг ограничен пятью секундами. При отсутствии ответа курсор отменяется; поля 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.
Параметры: Параметров нет.
Результат: dynamic / Any.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.ClientTargetResponsePresent:bridge.ClientTargetResponsePresent().
Внутренний код реализации, не самостоятельный скрипт.
case "clienttargetresponsepresent": return new InjectionValue(bridge.ClientTargetResponsePresent());Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.IsWaitTargetActive();Проверяет, остались ли подготовленные ответы в очереди target.
Параметров нет.
int 1 — есть неотменённая отложенная цель объекта, тайла или отмена следующего прицела; 0 — очередь пуста. Это не наличие открытого курсора; для курсора используйте TargetPresent/Targeting.
Результат команды — числовой флаг: 1 означает выполненное условие, 0 — невыполненное. После var result = команда(...) проверяйте if (result != 0) или if (result == 0). Сохраните результат одного вызова: повторный вызов может выполнить действие снова либо прочитать уже изменившееся состояние.
- Читается очередь всего клиента. Если одновременно работают несколько процедур, учитываются ответы каждой из них.
- Ноль означает только отсутствие ожидающего ответа. Он не подтверждает успешное применение навыка или заклинания на сервере.
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Результат одного вызова выводится в журнал. Число не преобразуется в bool; для массива показано количество элементов.
object? result = UO.IsWaitTargetActive();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Параметры и ход выполнения:
- После WaitTargetSelf и до серверного target ожидается 1.
- CancelWaitTarget убирает очередь; следующая проверка даст 0.
UO.WaitTargetSelf();
UO.Print(Convert.ToString(UO.IsWaitTargetActive()));
UO.CancelWaitTarget();Параметры и ход выполнения:
- Параметров у проверки нет. 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;Параметры и ход выполнения:
- Первая строка показывает отложенные ответы, вторая — состояние прицела.
- Возможна очередь без курсора и курсор без очереди; эти значения не взаимозаменяемы.
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.
Параметры: Параметров нет.
Результат: dynamic / Any.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.Waiting:Waiting().
Внутренний код реализации, не самостоятельный скрипт.
case "iswaittargetactive": return new InjectionValue(Waiting());Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
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 при пустом ответе. Завершённый выбор повторно не уведомляется.
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Результат одного вызова выводится в журнал. Число не преобразуется в bool; для массива показано количество элементов.
var result = UO.LastTarget();
UO.Print("LastTarget: " + Convert.ToString(result));Параметры и ход выполнения:
- value — единственный результат команды; HEX показывает ID, Convert.ToString — координату. Вызов ничего не выбирает.
var value = UO.LastTarget();
UO.Print("Saved value: " + Hex(value));
string Hex(object? value) => Convert.ToInt64(value).ToString("X");Параметры и ход выполнения:
- 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;Параметры и ход выполнения:
- 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.
Параметры: Параметров нет.
Результат: int / Integer.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.LastTarget:bridge.LastTarget.
Внутренний код реализации, не самостоятельный скрипт.
case "lasttarget": return new InjectionValue(bridge.LastTarget);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
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 при пустом ответе. Завершённый выбор повторно не уведомляется.
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Результат одного вызова выводится в журнал. Число не преобразуется в bool; для массива показано количество элементов.
var result = UO.LastTargetX();
UO.Print("LastTargetX: " + Convert.ToString(result));Параметры и ход выполнения:
- value — единственный результат команды; HEX показывает ID, Convert.ToString — координату. Вызов ничего не выбирает.
var value = UO.LastTargetX();
UO.Print("Saved value: " + Convert.ToString(value));Параметры и ход выполнения:
- 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;Параметры и ход выполнения:
- 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.
Параметры: Параметров нет.
Результат: int / Integer.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.LastTargetX. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetX:bridge.GetX(bridge.LastTarget). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.LastTarget:bridge.LastTarget.
Внутренний код реализации, не самостоятельный скрипт.
public int LastTargetX() => bridge is ITargetSnapshotBridge snapshot ? snapshot.LastTargetX : bridge.GetX(bridge.LastTarget);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
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 при пустом ответе. Завершённый выбор повторно не уведомляется.
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Результат одного вызова выводится в журнал. Число не преобразуется в bool; для массива показано количество элементов.
var result = UO.LastTargetY();
UO.Print("LastTargetY: " + Convert.ToString(result));Параметры и ход выполнения:
- value — единственный результат команды; HEX показывает ID, Convert.ToString — координату. Вызов ничего не выбирает.
var value = UO.LastTargetY();
UO.Print("Saved value: " + Convert.ToString(value));Параметры и ход выполнения:
- 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;Параметры и ход выполнения:
- 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.
Параметры: Параметров нет.
Результат: int / Integer.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.LastTargetY. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetY:bridge.GetY(bridge.LastTarget). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.LastTarget:bridge.LastTarget.
Внутренний код реализации, не самостоятельный скрипт.
public int LastTargetY() => bridge is ITargetSnapshotBridge snapshot ? snapshot.LastTargetY : bridge.GetY(bridge.LastTarget);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
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") использует отдельную проверку наличия записи.
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Результат одного вызова выводится в журнал. Число не преобразуется в bool; для массива показано количество элементов.
var result = UO.LastTile();
UO.Print("LastTile: " + Convert.ToString(result));Параметры и ход выполнения:
- Читает сохранённую последнюю tile-цель.
UO.Print(UO.LastTile());Параметры и ход выполнения:
- 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;
}Параметры и ход выполнения:
- Команда только читает сохранённую 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.
Параметры: Параметров нет.
Результат: string / String.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.LastTile. -
InjectionScript.Runtime.InjectionApiUO.NormalizeLastTile:NormalizeLastTile(bridge.LastTile()). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.LastTile:bridge.LastTile().
Внутренний код реализации, не самостоятельный скрипт.
public string LastTile()
{
int[] tileInfo = NormalizeLastTile(bridge.LastTile());
return $"{tileInfo[0]} {tileInfo[1]} {tileInfo[2]} {tileInfo[3]}";
}Параметры: index (Any)
Результат: int / Integer.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.LastTile. -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(index). -
InjectionScript.Runtime.InjectionApiUO.NormalizeLastTile:NormalizeLastTile(bridge?.LastTile()).
Внутренний код реализации, не самостоятельный скрипт.
public int LastTile(InjectionValue index)
{
var i = NumberConversions.ToInt(index);
if (i < 0 || i > 3)
return 0;
return NormalizeLastTile(bridge?.LastTile())[i];
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
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 для активного прицела клиента используют другой путь.
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Команда вызывается отдельной строкой. Сообщение перед ней показывает начало вызова, а не подтверждение действия сервера.
UO.Print("Calling UO.Target");
UO.Target();Параметры и ход выполнения:
- Отменяет/ставит ожидаемую цель либо отправляет явный target-пакет.
UO.Target("self");
UO.Print(UO.Waiting());
UO.Target();Параметры и ход выполнения:
- Формы без аргументов/с одним идут по 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;Параметры и ход выполнения:
- 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.
Параметры: Параметров нет.
Результат: void / Unit.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
InjectionScript.Runtime.InjectionApiUO.WaitTargetObject:WaitTargetObject(arguments[0].ToString()). -
InjectionScript.Runtime.InjectionValue.ToString:arguments[0].ToString(). -
InjectionScript.Runtime.InjectionApiUO.CancelTarget:CancelTarget().
Внутренний код реализации, не самостоятельный скрипт.
case "target":
if (arguments.Length > 0) WaitTargetObject(arguments[0].ToString());
else CancelTarget();
break;Параметры: object (Any)
Результат: void / Unit.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
InjectionScript.Runtime.InjectionApiUO.WaitTargetObject:WaitTargetObject(arguments[0].ToString()). -
InjectionScript.Runtime.InjectionValue.ToString:arguments[0].ToString(). -
InjectionScript.Runtime.InjectionApiUO.CancelTarget:CancelTarget().
Внутренний код реализации, не самостоятельный скрипт.
case "target":
if (arguments.Length > 0) WaitTargetObject(arguments[0].ToString());
else CancelTarget();
break;Параметры: targetKey (Any), target (Any)
Результат: void / Unit.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.Target. -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(targetKey). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.LastTile:bridge.LastTile(). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Target:bridge.Target(key, 0, 1, tile[0], tile[1], tile[2], tile[3]). -
InjectionScript.Runtime.InjectionApiUO.SystemMessage:SystemMessage("UO.Target: lasttile is unavailable"). -
InjectionScript.Runtime.InjectionApiUO.TryGetObject:TryGetObject(target, out int serial).
Внутренний код реализации, не самостоятельный скрипт.
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}'");
}Параметры: targetKey (Any), target (Any), targetType (Any), type (Any), x (Any), y (Any), z (Any)
Результат: void / Unit.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.Target. -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(targetType). -
InjectionScript.Runtime.InjectionApiUO.TryGetObject:TryGetObject(target, out serial). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Target:bridge.Target ( NumberConversions.ToInt(targetKey), serial, targetTypeValue, ResolveType(type), NumberConversions.ToInt(x), NumberConversions.ToInt(y), NumberConversions.ToInt(z) ). -
InjectionScript.Runtime.InjectionApiUO.ResolveType:ResolveType(type).
Внутренний код реализации, не самостоятельный скрипт.
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)
);
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
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.
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Команда вызывается отдельной строкой. Сообщение перед ней показывает начало вызова, а не подтверждение действия сервера.
UO.Print("Calling UO.TargetByResource");
UO.TargetByResource("self", "0x0E21");Параметры и ход выполнения:
- Ищет предмет по graphic, готовит заданную цель и использует найденный предмет.
UO.TargetByResource("self", "0x0E21");Параметры и ход выполнения:
- В этой реализации 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;Параметры и ход выполнения:
- Ничего не найдено — ничего не ставится и не используется. Команда не отправляет отдельный 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.
Параметры: objID (Any), resource (Any)
Результат: void / Unit.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.FindType:bridge.FindType(ResolveType(arguments[1]), -1, 0, -1, true). -
InjectionScript.Runtime.InjectionApiUO.ResolveType:ResolveType(arguments[1]). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.WaitTargetObject:bridge.WaitTargetObject(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.UseObject:bridge.UseObject(found).
Внутренний код реализации, не самостоятельный скрипт.
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;
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.TargetID();Читает идентификатор текущего курсора цели.
Параметров нет.
int — 32 бита ID курсора, а не serial последнего объекта. При отсутствии курсора возвращается 0. Если старший бит установлен, int отрицателен; Int2Hex сохраняет его биты. Реальный cursorID=0 и локальный прицел также могут давать 0: проверяйте TargetPresent для определения активности. В этом клиенте специальная ненулевая подстановка для нулевого ID не используется.
- LastTarget/GetSerial("lasttarget") относятся к выбранному объекту, TargetID — к запросу цели. Эти значения нельзя подменять друг другом.
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Результат одного вызова выводится в журнал. Число не преобразуется в bool; для массива показано количество элементов.
object? result = UO.TargetID();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Параметры и ход выполнения:
- Аргументов нет.
- 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;Параметры и ход выполнения:
- 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;
}Параметры и ход выполнения:
- 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.
Параметры: Параметров нет.
Результат: dynamic / Any.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetTargetCursorId:bridge.GetTargetCursorId().
Внутренний код реализации, не самостоятельный скрипт.
case "targetid": return new InjectionValue(bridge.GetTargetCursorId());Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.TargetPresent();Проверяет наличие активного курсора выбора цели в клиенте.
Параметров нет.
int 1 — TargetManager.IsTargeting установлен; 0 — активного курсора нет. Учитывается и локальный callback-прицел. Это не serial и не состояние очереди WaitTarget.
Результат команды — числовой флаг: 1 означает выполненное условие, 0 — невыполненное. После var result = команда(...) проверяйте if (result != 0) или if (result == 0). Сохраните результат одного вызова: повторный вызов может выполнить действие снова либо прочитать уже изменившееся состояние.
- Читает состояние один раз; не ждёт появления курсора.
- Для ожидания серверного прицела после игрового действия используйте WaitForTarget. Для результата локального ClientRequest* — WaitForClientTargetResponse.
Каждый пример можно сохранить отдельным файлом .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 или 0.
UO.Print(Convert.ToString(UO.TargetPresent()));Параметры и ход выполнения:
- Условие проверяет активный курсор.
- 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;Параметры и ход выполнения:
- 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.
Параметры: Параметров нет.
Результат: dynamic / Any.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.IsTargeting:IsTargeting().
Внутренний код реализации, не самостоятельный скрипт.
case "targetpresent": return new InjectionValue(IsTargeting());Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
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 с нулевыми полями графики/координат.
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Команда вызывается отдельной строкой. Сообщение перед ней показывает начало вызова, а не подтверждение действия сервера.
UO.Print("Calling UO.TargetToObject");
UO.TargetToObject("self");Параметры и ход выполнения:
- Параметры задают самого персонажа.
- В очередь будущих прицелов ничего не добавляется.
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;Параметры и ход выполнения:
- 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;Параметры и ход выполнения:
- 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.
Параметры: objID (Any)
Результат: void / Unit.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.TargetToObject:bridge.TargetToObject(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
Внутренний код реализации, не самостоятельный скрипт.
case "targettoobject": bridge.TargetToObject(Arg(0)); return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
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 требует координатного прицела; предметный прицел не принимает землю.
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Команда вызывается отдельной строкой. Сообщение перед ней показывает начало вызова, а не подтверждение действия сервера.
UO.Print("Calling UO.TargetToTile");
UO.TargetToTile(0x0CCA, 1445, 1690, 0);Параметры и ход выполнения:
- Параметры задают пример реальной точки: замените координаты и 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;Параметры и ход выполнения:
- 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;Параметры и ход выполнения:
- 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.
Параметры: tile (Any), x (Any), y (Any), z (Any)
Результат: void / Unit.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.TargetToTile:bridge.TargetToTile(Arg(0), Arg(1), Arg(2), Arg(3)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
Внутренний код реализации, не самостоятельный скрипт.
case "targettotile":
bridge.TargetToTile(Arg(0), Arg(1), Arg(2), Arg(3)); return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
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 требует координатного прицела; предметный прицел не принимает землю.
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Команда вызывается отдельной строкой. Сообщение перед ней показывает начало вызова, а не подтверждение действия сервера.
UO.Print("Calling UO.TargetToXYZ");
UO.TargetToXYZ(1445, 1690, 0);Параметры и ход выполнения:
- Параметры задают пример реальной точки: замените координаты и 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;Параметры и ход выполнения:
- 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;Параметры и ход выполнения:
- 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.
Параметры: x (Any), y (Any), z (Any)
Результат: void / Unit.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.TargetToTile:bridge.TargetToTile(0, Arg(0), Arg(1), Arg(2)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
Внутренний код реализации, не самостоятельный скрипт.
case "targettoxyz":
bridge.TargetToTile(0, Arg(0), Arg(1), Arg(2)); return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.Targeting();Проверяет наличие активного курсора выбора цели в клиенте.
Параметров нет.
int 1 — TargetManager.IsTargeting установлен; 0 — активного курсора нет. Учитывается и локальный callback-прицел. Это не serial и не состояние очереди WaitTarget.
Результат команды — числовой флаг: 1 означает выполненное условие, 0 — невыполненное. После var result = команда(...) проверяйте if (result != 0) или if (result == 0). Сохраните результат одного вызова: повторный вызов может выполнить действие снова либо прочитать уже изменившееся состояние.
- Читает состояние один раз; не ждёт появления курсора.
- Для ожидания серверного прицела после игрового действия используйте WaitForTarget. Для результата локального ClientRequest* — WaitForClientTargetResponse.
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Результат одного вызова выводится в журнал. Число не преобразуется в bool; для массива показано количество элементов.
var result = UO.Targeting();
UO.Print("Targeting: " + Convert.ToString(result));Параметры и ход выполнения:
- Аргументов нет.
- Выводится 1 или 0.
UO.Print(Convert.ToString(UO.Targeting()));Параметры и ход выполнения:
- Условие проверяет активный курсор.
- 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;Параметры и ход выполнения:
- 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.
Параметры: Параметров нет.
Результат: int / Integer.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.IsTargeting. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.IsTargeting:bridge.IsTargeting().
Внутренний код реализации, не самостоятельный скрипт.
public int IsTargeting() => bridge.IsTargeting();Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.TicksTarget();Читает отметку времени последней подготовки цели через WaitTargetObject/WaitTargetTile и их вызывающие оболочки.
Параметров нет.
int — значение UO.Timer в момент подготовки, в десятых долях секунды от запуска runtime. До первой такой подготовки — 0. Это отметка, не длительность ожидания, не миллисекунды и не ID цели.
- Непосредственные TargetToObject/TargetToTile/TargetToXYZ не подготавливают очередь и эту отметку не обновляют.
- Некоторые команды поиска ставят ответ напрямую через bridge; TicksTarget не является универсальным временем любого изменения target.
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Результат одного вызова выводится в журнал. Число не преобразуется в bool; для массива показано количество элементов.
var result = UO.TicksTarget();
UO.Print("TicksTarget: " + Convert.ToString(result));Параметры и ход выполнения:
- Аргументов нет; WaitTargetSelf обновляет отметку.
- stamp измеряется десятыми долями секунды.
UO.WaitTargetSelf();
var stamp = UO.TicksTarget();
UO.Print(Convert.ToString(stamp));
UO.CancelWaitTarget();Параметры и ход выполнения:
- 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)));Параметры и ход выполнения:
- 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.
Параметры: Параметров нет.
Результат: int / Integer.
При вызове:
Внутренний код реализации, не самостоятельный скрипт.
public int TicksTarget() => ticksTarget;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
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* новый выбор не начинается.
Каждый пример можно сохранить отдельным файлом .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));Параметры и ход выполнения:
- 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;Параметры и ход выполнения:
- 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;Параметры и ход выполнения:
- Тайм-аут задаётся в миллисекундах. Успешное ожидание означает ответ, содержание которого надо проверить отдельно.
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.
Параметры: maxWaitTimeMS (Any)
Результат: dynamic / Any.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.WaitForClientTargetResponse:bridge.WaitForClientTargetResponse(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
Внутренний код реализации, не самостоятельный скрипт.
case "waitforclienttargetresponse": return new InjectionValue(bridge.WaitForClientTargetResponse(Arg(0)));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.WaitForTarget(object? maxWaitTimeMS);Ждёт появления активного курсора цели в пределах тайм-аута.
-
maxWaitTimeMS— Максимальное ожидание в миллисекундах. Ноль и отрицательные значения дают одну немедленную проверку; это не бесконечное ожидание.
int 1 — курсор был активен при проверке; 0 — тайм-аут без курсора. Локальный callback-прицел также удовлетворяет этой проверке. Это не подтверждение применения подготовленного WaitTarget: автоматический ответ может уже израсходовать курсор до проверки.
Результат команды — числовой флаг: 1 означает выполненное условие, 0 — невыполненное. После var result = команда(...) проверяйте if (result != 0) или if (result == 0). Сохраните результат одного вызова: повторный вызов может выполнить действие снова либо прочитать уже изменившееся состояние.
- Проверка выполняется с паузами до 25 мс в потоке скрипта и может быть прервана его остановкой.
- Сам метод не создаёт прицел и не выбирает цель.
Каждый пример можно сохранить отдельным файлом .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));Параметры и ход выполнения:
- 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;Параметры и ход выполнения:
- MaxWaitTimeMS=0.
- ready — 1 или 0; никакой длительной паузы нет.
return RunScenario();
object? RunScenario()
{
var ready = UO.WaitForTarget(0);
UO.Print(Convert.ToString(ready));
return null;
}Параметры и ход выполнения:
- 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.
Параметры: maxWaitTimeMS (Any)
Результат: dynamic / Any.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.WaitUntilTargeting:bridge.WaitUntilTargeting(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
Внутренний код реализации, не самостоятельный скрипт.
case "waitfortarget": return new InjectionValue(bridge.WaitUntilTargeting(Arg(0)));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
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 и не ждёт обработки сервера.
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Команда вызывается отдельной строкой. Сообщение перед ней показывает начало вызова, а не подтверждение действия сервера.
UO.Print("Calling UO.WaitTarget");
UO.WaitTarget("self");Параметры и ход выполнения:
- Ставит serial в очередь следующего target-запроса, либо выбирает цель по фильтрам.
UO.WaitTarget("self");Параметры и ход выполнения:
- При поиске исключает self, serial=0, обычный ignore list и выбранные именованные type-фильтры; дубликаты удаляются. Прямой положительный serial эти фильтры не проходит.
return RunScenario();
object? RunScenario()
{
UO.WaitTarget(0, -1, -1, 10, 3, true, 20);
return null;
}Параметры и ход выполнения:
- Поиск читает только загруженные объекты. Нет совпадений/неверный 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.
Параметры: target (Any)
Результат: void / Unit.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.Register [WaitTarget]. -
InjectionScript.Runtime.InjectionApiUO.CompactWaitTarget:CompactWaitTarget(values).
Вызов выполняет сохранённый delegate обработчика. Метод регистрации создаёт этот delegate при построении API.
Внутренний код реализации, не самостоятельный скрипт.
values =>
{
CompactWaitTarget(values);
return InjectionValue.Unit;
}Параметры: target (Any), type (Any)
Результат: void / Unit.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.Register [WaitTarget]. -
InjectionScript.Runtime.InjectionApiUO.CompactWaitTarget:CompactWaitTarget(values).
Вызов выполняет сохранённый delegate обработчика. Метод регистрации создаёт этот delegate при построении API.
Внутренний код реализации, не самостоятельный скрипт.
values =>
{
CompactWaitTarget(values);
return InjectionValue.Unit;
}Параметры: target (Any), type (Any), color (Any)
Результат: void / Unit.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.Register [WaitTarget]. -
InjectionScript.Runtime.InjectionApiUO.CompactWaitTarget:CompactWaitTarget(values).
Вызов выполняет сохранённый delegate обработчика. Метод регистрации создаёт этот delegate при построении API.
Внутренний код реализации, не самостоятельный скрипт.
values =>
{
CompactWaitTarget(values);
return InjectionValue.Unit;
}Параметры: target (Any), type (Any), color (Any), distance (Any)
Результат: void / Unit.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.Register [WaitTarget]. -
InjectionScript.Runtime.InjectionApiUO.CompactWaitTarget:CompactWaitTarget(values).
Вызов выполняет сохранённый delegate обработчика. Метод регистрации создаёт этот delegate при построении API.
Внутренний код реализации, не самостоятельный скрипт.
values =>
{
CompactWaitTarget(values);
return InjectionValue.Unit;
}Параметры: target (Any), type (Any), color (Any), distance (Any), notoriety (Any)
Результат: void / Unit.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.Register [WaitTarget]. -
InjectionScript.Runtime.InjectionApiUO.CompactWaitTarget:CompactWaitTarget(values).
Вызов выполняет сохранённый 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.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.Register [WaitTarget]. -
InjectionScript.Runtime.InjectionApiUO.CompactWaitTarget:CompactWaitTarget(values).
Вызов выполняет сохранённый 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.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.Register [WaitTarget]. -
InjectionScript.Runtime.InjectionApiUO.CompactWaitTarget:CompactWaitTarget(values).
Вызов выполняет сохранённый delegate обработчика. Метод регистрации создаёт этот delegate при построении API.
Внутренний код реализации, не самостоятельный скрипт.
values =>
{
CompactWaitTarget(values);
return InjectionValue.Unit;
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
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.
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Команда вызывается отдельной строкой. Сообщение перед ней показывает начало вызова, а не подтверждение действия сервера.
UO.Print("Calling UO.WaitTargetGround");
UO.WaitTargetGround("0x0E21");Параметры и ход выполнения:
- Ищет предмет по graphic/hue и ставит его в очередь следующей цели.
UO.WaitTargetGround("0x0E21");Параметры и ход выполнения:
- Область: ground/container selector 1 без рекурсивного поиска. Bridge.FindType возвращает найденный serial; при serial>0 вызывается bridge.WaitTargetObject. Эти методы напрямую не обновляют runtime TicksTarget.
return RunScenario();
object? RunScenario()
{
UO.WaitTargetGround("0x0E21", -1);
return null;
}Параметры и ход выполнения:
- Нет предмета — сообщение и 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.
Параметры: type (Any)
Результат: void / Unit.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.WaitTargetGround. -
InjectionScript.Runtime.InjectionApiUO.WaitTargetGround:WaitTargetGround(type, new InjectionValue(-1)).
Внутренний код реализации, не самостоятельный скрипт.
public void WaitTargetGround(InjectionValue type) => WaitTargetGround(type, new InjectionValue(-1));Параметры: type (Any), color (Any)
Результат: void / Unit.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.WaitTargetGround. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.FindType:bridge.FindType(ResolveType(type), NumberConversions.ToInt(color), 1, -1, false). -
InjectionScript.Runtime.InjectionApiUO.ResolveType:ResolveType(type). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(color). -
InjectionScript.Runtime.InjectionApiUO.SystemMessage:SystemMessage("No ground item found. Next target request will be canceled"). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.CancelNextTarget:bridge.CancelNextTarget(). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.WaitTargetObject:bridge.WaitTargetObject(item).
Внутренний код реализации, не самостоятельный скрипт.
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);
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.WaitTargetLast();Готовит ответ на следующий серверный прицел через алиас lasttarget.
Параметров нет.
void — возвращаемого значения нет. Вызывайте отдельной строкой; не используйте как true/false, serial или type. Метадата object? у совместимых форм не меняет фактический результат void.
- Команда только готовит ответ: сама не применяет предмет, навык или заклинание. Следующий серверный прицел получает подготовленную цель при обработке кадра клиента.
- Последовательные вызовы образуют общую очередь клиента. Объекты и координатные цели обрабатываются по одному прицелу; локальные окна выбора ClientRequest*/Info/контейнера её не потребляют.
- CancelWaitTarget очищает очередь. TerminateAll очищает её целиком; остановка ещё работающей процедуры также делает недействительными её собственные отложенные ответы. Обычное завершение короткой процедуры не отменяет подготовленную цель.
- Отправка ответа не гарантирует действие на сервере: тот проверяет дальность, доступность объекта, видимость и правила действия. Для контроля используйте игровой результат и журнал.
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Команда вызывается отдельной строкой. Сообщение перед ней показывает начало вызова, а не подтверждение действия сервера.
UO.Print("Calling UO.WaitTargetLast");
UO.WaitTargetLast();Параметры и ход выполнения:
- Аргументов нет; используется lasttarget.
- Команда не открывает прицел и не выполняет действие сама.
UO.WaitTargetLast();Параметры и ход выполнения:
- 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;Параметры и ход выполнения:
- 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.
Параметры: Параметров нет.
Результат: void / Unit.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.WaitTargetLast. -
InjectionScript.Runtime.InjectionApiUO.WaitTargetObject:WaitTargetObject("lasttarget").
Внутренний код реализации, не самостоятельный скрипт.
public void WaitTargetLast() => WaitTargetObject("lasttarget");Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
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 очищает её целиком; остановка ещё работающей процедуры также делает недействительными её собственные отложенные ответы. Обычное завершение короткой процедуры не отменяет подготовленную цель.
- Отправка ответа не гарантирует действие на сервере: тот проверяет дальность, доступность объекта, видимость и правила действия. Для контроля используйте игровой результат и журнал.
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Команда вызывается отдельной строкой. Сообщение перед ней показывает начало вызова, а не подтверждение действия сервера.
UO.Print("Calling UO.WaitTargetObject");
UO.WaitTargetObject("self");Параметры и ход выполнения:
- id="self" — serial своего персонажа. CancelWaitTarget убирает ранее подготовленные ответы.
- UseSkill запрашивает навык; его серверный прицел получает подготовленную цель.
UO.CancelWaitTarget();
UO.WaitTargetObject("self");
UO.UseSkill("Anatomy");Параметры и ход выполнения:
- 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;Параметры и ход выполнения:
- 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.
Параметры: objID (Any/String)
Результат: void / Unit.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.WaitTargetObject:WaitTargetObject(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
Внутренний код реализации, не самостоятельный скрипт.
case "waittargetobject": WaitTargetObject(Arg(0)); return InjectionValue.Unit;Параметры: objID (Any/String)
Результат: void / Unit.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.WaitTargetObject. -
InjectionScript.Runtime.InjectionApiUO.WaitTargetObject:WaitTargetObject(GetObject(id)). -
InjectionScript.Runtime.InjectionApiUO.GetObject:GetObject(id).
Внутренний код реализации, не самостоятельный скрипт.
public void WaitTargetObject(string id) => WaitTargetObject(GetObject(id));Параметры: id1 (String), id2 (String)
Результат: void / Unit.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.WaitTargetObject. -
InjectionScript.Runtime.InjectionApiUO.WaitTargetObject:WaitTargetObject(GetObject(id1), GetObject(id2)). -
InjectionScript.Runtime.InjectionApiUO.GetObject:GetObject(id1).
Внутренний код реализации, не самостоятельный скрипт.
public void WaitTargetObject(string id1, string id2) => WaitTargetObject(GetObject(id1), GetObject(id2));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
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 и не использует предмет.
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Команда вызывается отдельной строкой. Сообщение перед ней показывает начало вызова, а не подтверждение действия сервера.
UO.Print("Calling UO.WaitTargetObjectType");
UO.WaitTargetObjectType("self", "0x0E21");Параметры и ход выполнения:
- Готовит две последовательные цели: заданный объект и найденный предмет на земле.
UO.WaitTargetObjectType("self", "0x0E21");Параметры и ход выполнения:
- Разрешает первый serial через GetObject; второй ищет FindType(type,color,1,-1,false). Если оба положительные, вызывает bridge.WaitTargetObject(first,second). Порядок целей сохраняется.
return RunScenario();
object? RunScenario()
{
UO.WaitTargetObjectType("lasttarget", "0x0E21", -1);
return null;
}Параметры и ход выполнения:
- Если хотя бы одна цель отсутствует/неположительная — сообщение и 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.
Параметры: id (Any), type (Any)
Результат: void / Unit.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.WaitTargetObjectType. -
InjectionScript.Runtime.InjectionApiUO.WaitTargetObjectType:WaitTargetObjectType(id, type, new InjectionValue(-1)).
Внутренний код реализации, не самостоятельный скрипт.
public void WaitTargetObjectType(InjectionValue id, InjectionValue type)
=> WaitTargetObjectType(id, type, new InjectionValue(-1));Параметры: id (Any), type (Any), color (Any)
Результат: void / Unit.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.WaitTargetObjectType. -
InjectionScript.Runtime.InjectionApiUO.GetObject:GetObject(id). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.FindType:bridge.FindType(ResolveType(type), NumberConversions.ToInt(color), 1, -1, false). -
InjectionScript.Runtime.InjectionApiUO.ResolveType:ResolveType(type). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(color). -
InjectionScript.Runtime.InjectionApiUO.SystemMessage:SystemMessage("UO.WaitTargetObjectType: object or ground item not found"). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.CancelNextTarget:bridge.CancelNextTarget(). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.WaitTargetObject:bridge.WaitTargetObject(first, second).
Внутренний код реализации, не самостоятельный скрипт.
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);
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.WaitTargetSelf();Готовит ответ на следующий серверный прицел через алиас self.
Параметров нет.
void — возвращаемого значения нет. Вызывайте отдельной строкой; не используйте как true/false, serial или type. Метадата object? у совместимых форм не меняет фактический результат void.
- Команда только готовит ответ: сама не применяет предмет, навык или заклинание. Следующий серверный прицел получает подготовленную цель при обработке кадра клиента.
- Последовательные вызовы образуют общую очередь клиента. Объекты и координатные цели обрабатываются по одному прицелу; локальные окна выбора ClientRequest*/Info/контейнера её не потребляют.
- CancelWaitTarget очищает очередь. TerminateAll очищает её целиком; остановка ещё работающей процедуры также делает недействительными её собственные отложенные ответы. Обычное завершение короткой процедуры не отменяет подготовленную цель.
- Отправка ответа не гарантирует действие на сервере: тот проверяет дальность, доступность объекта, видимость и правила действия. Для контроля используйте игровой результат и журнал.
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Команда вызывается отдельной строкой. Сообщение перед ней показывает начало вызова, а не подтверждение действия сервера.
UO.Print("Calling UO.WaitTargetSelf");
UO.WaitTargetSelf();Параметры и ход выполнения:
- Аргументов нет; используется self.
- Команда не открывает прицел и не выполняет действие сама.
UO.WaitTargetSelf();Параметры и ход выполнения:
- 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;Параметры и ход выполнения:
- 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.
Параметры: Параметров нет.
Результат: void / Unit.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.WaitTargetSelf. -
InjectionScript.Runtime.InjectionApiUO.WaitTargetObject:WaitTargetObject("self").
Внутренний код реализации, не самостоятельный скрипт.
public void WaitTargetSelf() => WaitTargetObject("self");Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
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 очищает её целиком; остановка ещё работающей процедуры также делает недействительными её собственные отложенные ответы. Обычное завершение короткой процедуры не отменяет подготовленную цель.
- Отправка ответа не гарантирует действие на сервере: тот проверяет дальность, доступность объекта, видимость и правила действия. Для контроля используйте игровой результат и журнал.
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Команда вызывается отдельной строкой. Сообщение перед ней показывает начало вызова, а не подтверждение действия сервера.
UO.Print("Calling UO.WaitTargetTile");
UO.WaitTargetTile("lasttile");Параметры и ход выполнения:
- x=1445, y=1690, z=0; отсутствующий type равен 0.
- Это точка мира. Команда не перемещает персонажа и не кладёт предмет в гамп.
UO.CancelWaitTarget();
UO.WaitTargetTile(1445, 1690, 0);Параметры и ход выполнения:
- type=0x0CCA — пример графики; используйте реальный type выбранного тайла. x/y/z — его мировая позиция.
- Graphic и координаты должны описывать нужный объект карты; сервер проверяет допустимость цели.
return RunScenario();
object? RunScenario()
{
UO.CancelWaitTarget();
UO.WaitTargetTile(0x0CCA, 1445, 1690, 0);
return null;
}Параметры и ход выполнения:
- 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.
Параметры: selector (Any)
Результат: void / Unit.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.WaitTargetTile. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.LastTile:bridge.LastTile(). -
InjectionScript.Runtime.InjectionApiUO.SystemMessage:SystemMessage("UO.WaitTargetTile: lasttile is unavailable; next target request canceled."). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.CancelNextTarget:bridge.CancelNextTarget(). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.WaitTargetTile:bridge.WaitTargetTile(tile[0], tile[1], tile[2], tile[3]). -
InjectionScript.Runtime.InjectionApiUO.Timer:Timer().
Внутренний код реализации, не самостоятельный скрипт.
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();
}Параметры: x (Any), y (Any), z (Any)
Результат: void / Unit.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.WaitTargetTile. -
InjectionScript.Runtime.InjectionApiUO.WaitTargetTile:WaitTargetTile(new InjectionValue(0), x, y, z).
Внутренний код реализации, не самостоятельный скрипт.
public void WaitTargetTile(InjectionValue x, InjectionValue y, InjectionValue z)
=> WaitTargetTile(new InjectionValue(0), x, y, z);Параметры: type (Any), x (Any), y (Any), z (Any)
Результат: void / Unit.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.WaitTargetTile. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.WaitTargetTile:bridge.WaitTargetTile(ResolveType(type), NumberConversions.ToInt(x), NumberConversions.ToInt(y), NumberConversions.ToInt(z)). -
InjectionScript.Runtime.InjectionApiUO.ResolveType:ResolveType(type). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(x). -
InjectionScript.Runtime.InjectionApiUO.Timer:Timer().
Внутренний код реализации, не самостоятельный скрипт.
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();
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
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.
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Команда вызывается отдельной строкой. Сообщение перед ней показывает начало вызова, а не подтверждение действия сервера.
UO.Print("Calling UO.WaitTargetType");
UO.WaitTargetType("0x0E21");Параметры и ход выполнения:
- Ищет предмет по graphic/hue и ставит его в очередь следующей цели.
UO.WaitTargetType("0x0E21");Параметры и ход выполнения:
- Область: рюкзак с рекурсивным поиском. Bridge.FindType возвращает найденный serial; при serial>0 вызывается bridge.WaitTargetObject. Эти методы напрямую не обновляют runtime TicksTarget.
return RunScenario();
object? RunScenario()
{
UO.WaitTargetType("0x0E21", -1);
return null;
}Параметры и ход выполнения:
- Нет предмета — сообщение и 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.
Параметры: type (Any)
Результат: void / Unit.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.WaitTargetType. -
InjectionScript.Runtime.InjectionApiUO.WaitTargetType:WaitTargetType(ResolveType(type), -1). -
InjectionScript.Runtime.InjectionApiUO.ResolveType:ResolveType(type).
Внутренний код реализации, не самостоятельный скрипт.
public void WaitTargetType(InjectionValue type) => WaitTargetType(ResolveType(type), -1);Параметры: type (Any), color (Any)
Результат: void / Unit.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.WaitTargetType. -
InjectionScript.Runtime.InjectionApiUO.WaitTargetType:WaitTargetType(ResolveType(type), NumberConversions.ToInt(color)). -
InjectionScript.Runtime.InjectionApiUO.ResolveType:ResolveType(type). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(color).
Внутренний код реализации, не самостоятельный скрипт.
public void WaitTargetType(InjectionValue type, InjectionValue color)
=> WaitTargetType(ResolveType(type), NumberConversions.ToInt(color));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
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 очищает её целиком; остановка ещё работающей процедуры также делает недействительными её собственные отложенные ответы. Обычное завершение короткой процедуры не отменяет подготовленную цель.
- Отправка ответа не гарантирует действие на сервере: тот проверяет дальность, доступность объекта, видимость и правила действия. Для контроля используйте игровой результат и журнал.
Каждый пример можно сохранить отдельным файлом .csx и запускать в IDE. Объект UO и функции ожидания предоставляет host текущей игровой сессии. Демонстрационные serial, имена, координаты и адреса замените своими.
Выполните этот код как отдельный файл .csx. Аргументы видны прямо в вызове; демонстрационные имена, serial и адреса замените своими.
Команда вызывается отдельной строкой. Сообщение перед ней показывает начало вызова, а не подтверждение действия сервера.
UO.Print("Calling UO.WaitTargetXYZ");
UO.WaitTargetXYZ(1445, 1690, 0);Параметры и ход выполнения:
- X=1445, Y=1690, Z=0. Graphic равен 0.
- Ответ будет отправлен при появлении серверного координатного прицела.
UO.WaitTargetXYZ(1445, 1690, 0);Параметры и ход выполнения:
- 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;
}Параметры и ход выполнения:
- Координаты замените точкой добычи. 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.
Параметры: x (Any), y (Any), z (Any)
Результат: void / Unit.
При вызове:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.WaitTargetTile:WaitTargetTile(new InjectionValue(0), arguments[0], arguments[1], arguments[2]).
Внутренний код реализации, не самостоятельный скрипт.
case "waittargetxyz": WaitTargetTile(new InjectionValue(0), arguments[0], arguments[1], arguments[2]); return InjectionValue.Unit;ClassicUO — Bad Newbie & C# Scripts IDE