Repository navigation
UO Topic targeting
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
Головна · C# · IDE · Команди UO · За абеткою · Приклади · Мови
Відповідь на курсор вибору цілі та підготовка автоматичної відповіді командами WaitTarget. Підготовка цілі не запускає заклинання чи іншу дію: дію потрібно виконати окремо.
| Тема | Команди та пояснення |
|---|---|
| Вибір цілі | UO.Target |
| Ціль за ідентифікатором | UO.TargetID |
| Ціль-об’єкт | UO.TargetToObject |
| Ціль-клітина | UO.TargetToTile |
| Ціль за координатами | UO.TargetToXYZ |
| Ціль за видом ресурсу | UO.TargetByResource |
| Підготовка відповіді на вибір цілі | UO.WaitTarget |
| Підготовка цілі-об’єкта | UO.WaitTargetObject |
| Підготовка цілі за типом | UO.WaitTargetType |
| Підготовка цілі-клітини | UO.WaitTargetTile |
| Підготовка цілі за координатами | UO.WaitTargetXYZ |
| Підготовка цілі «свій персонаж» | UO.WaitTargetSelf |
| Остання ціль | UO.LastTarget |
| Скасування вибору цілі | UO.CancelTarget |
| Вибір цілі користувачем | UO.ClientRequestObjectTarget · UO.ClientRequestTileTarget · UO.WaitForClientTargetResponse · UO.ClientTargetResponse |
UO.Target · UO.TargetID · UO.Targeting · UO.TargetPresent · UO.TargetToObject · UO.TargetToTile · UO.TargetToXYZ · UO.TargetByResource · UO.LastTarget · UO.LastTargetX · UO.LastTargetY · UO.LastTile · UO.TicksTarget
UO.WaitTarget · UO.WaitTargetObject · UO.WaitTargetType · UO.WaitTargetObjectType · UO.WaitTargetTile · UO.WaitTargetXYZ · UO.WaitTargetSelf · UO.WaitTargetGround · UO.WaitTargetLast · UO.WaitForTarget · UO.IsWaitTargetActive · UO.CancelTarget · UO.CancelWaitTarget
UO.ClientRequestObjectTarget · UO.ClientRequestTileTarget · UO.ClientTargetResponse · UO.ClientTargetResponsePresent · UO.WaitForClientTargetResponse
Нижче наведено короткі приклади. У повному описі кожної команди є параметри, результат, обмеження та кілька самостійних скриптів: прямий код, варіант із функцією та варіант із класом.
Параметри, результат та всі сценарії
UO.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: скидає активний зворотний виклик, збережену ціль і пакет повтору. Звичайне скидання зберігає історію. Внутрішній TargetLast надсилає збережений пакет лише на активний цільовий сервер; без історії або для локального зворотного виклику, він нічого не надсилає та зберігає ціль. Активний зворотний виклик клієнта отримує значення 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: скидає активний зворотний виклик, збережену ціль і пакет повтору. Звичайне скидання зберігає історію. Внутрішній TargetLast надсилає збережений пакет лише на активний цільовий сервер; без історії або для локального зворотного виклику, він нічого не надсилає та зберігає ціль. Активний зворотний виклик клієнта отримує значення 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: скидає активний зворотний виклик, збережену ціль і пакет повтору. Звичайне скидання зберігає історію. Внутрішній TargetLast надсилає збережений пакет лише на активний цільовий сервер; без історії або для локального зворотного виклику, він нічого не надсилає та зберігає ціль. Активний зворотний виклик клієнта отримує значення 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.
- Перший серверний приціл використовує перший, другий - 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