Repository navigation
UO Topic mobiles
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
Головна · C# · IDE · Команди UO · За абеткою · Приклади · Мови
Гравці, неігрові персонажі (NPC), монстри й приручені істоти, які вже відомі клієнту. Параметр serial визначає конкретну істоту; body або type — її графічний тип.
| Тема | Команди та пояснення |
|---|---|
| Гравці | UO.GetMobiles · UO.FindMobile |
| Неігрові персонажі (NPC) | UO.IsNpc · UO.FindMobile |
| Монстри | UO.FindType · UO.FindMobile |
| Приручені істоти | UO.GetPetsCurrent · UO.GetPetsMax |
| Підконтрольні істоти | UO.GetFollowers · UO.GetFollowersMax |
| Ім’я, ідентифікатор і графічний тип | UO.GetName · UO.GetSerial · UO.GetType |
| Координати | UO.GetX · UO.GetY · UO.GetZ |
| Відстань | UO.GetDistance |
| Репутація та статус щодо гравця | UO.Notoriety |
| Стан | UO.GetStatus · UO.Alive · UO.Dead · UO.Hidden · UO.Poisoned · UO.Paralyzed |
| Зміна імені | UO.Rename |
UO.GetMobile · UO.GetMobiles · UO.IsNpc
UO.Followers · UO.GetFollowers · UO.FollowersMax · UO.GetFollowersMax · UO.PetsCurrent · UO.GetPetsCurrent · UO.PetsMax · UO.GetPetsMax
UO.Notoriety · UO.GetNotoriety
UO.CanChangeName · UO.MobileCanBeRenamed · UO.Rename · UO.RenameMobile
Нижче наведено короткі приклади. У повному описі кожної команди є параметри, результат, обмеження та кілька самостійних скриптів: прямий код, варіант із функцією та варіант із класом.
Параметри, результат та всі сценарії
var radius = 12;
var allyStatus = 2;
var anyBody = -1;
var maxHeight = 8;
dynamic nearestFirst = true;
dynamic includeMe = false;
dynamic livingOnly = true;
dynamic visibleOnly = true;
var allies = UO.GetMobiles(radius, allyStatus, anyBody, maxHeight, nearestFirst, includeMe, livingOnly, visibleOnly);
if (Truth(ArrayLength(allies) == 0))
{
return null;
}
UO.AddObject("leader", allies[0]);
UO.Follow(allies[0], 2, false);
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;Параметри, результат та всі сценарії
var value = UO.GetNotoriety();
UO.Print("GetNotoriety: " + Convert.ToString(value));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.CanChangeName(object? id);Перевіряє відомий клієнту ознака можливості перейменувати mobile.
-
id— Обов'язковий serial/ID конкретного об'єкта: int, hex-рядок або аліас self, backpack, lasttarget, lastobject, lastcontainer, laststatus, finditem, lastcorpse або ім'я AddObject. Це не graphic/type. Невстановлене ім'я дозволяється у 0; ніякий новий target команда не відкриває. Аргумент обов'язковий; для себе передайте self.
int 1 — завантажений mobile має ознаку IsRenamable. int 0 — ознака відсутня, об'єкт не є mobile, невідомий чи видалений. Це остання серверна роздільна здатність, наприклад для вихованця. Команда не перейменовує об'єкт і не гарантує, що наступний запит буде прийнято сервером.
Результат команди — числовий прапор: 1 означає виконану умову, 0 — невиконану. Після var result = команда (...) перевіряйте if (result != 0) або if (result == 0). Збережіть результат одного виклику: повторний виклик може виконати дію знову або прочитати стан, що вже змінився.
- Читається локальна модель клієнта; запитів серверу, очікування та переміщення немає.
- Результат відноситься до моменту читання. Після UO.Wait або іншої дії об'єкт та його прапори можуть змінитися.
- Це остання серверна роздільна здатність, наприклад для вихованця. Команда не перейменовує об'єкт і не гарантує, що наступний запит буде прийнято сервером.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
var result = UO.CanChangeName("self");
UO.Print("CanChangeName: " + Convert.ToString(result));Параметри та порядок виконання:
- Аргумент self явно вибирає свого персонажа. state — лише 1/0.
- Це остання серверна роздільна здатність, наприклад для вихованця. Команда не перейменовує об'єкт і не гарантує, що наступний запит буде прийнято сервером.
var state = UO.CanChangeName("self");
if (Truth(state))
{
UO.Print("Rename permission flag is present");
}
else
{
UO.Print("Rename permission flag is absent");
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- IsNpc виключає предмет та невідомий об'єкт. target зберігає один serial, а не живе посилання на змінний lasttarget.
- Результат відноситься до поля IsRenamable. Дані оновлюються лише після отримання відповідного стану клієнтом.
return RunScenario();
object? RunScenario()
{
var target = UO.GetSerial("lasttarget");
if (Truth(UO.IsNPC(target)))
{
var state = UO.CanChangeName(target);
UO.Print("Selected mobile state 1/0: " + Convert.ToString(state));
}
else
{
UO.Print("No loaded mobile selected");
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- UO.Wait(500) - пауза в мілісекундах. Після неї окремо перевіряється, що mobile ще існує.
- Порівнюються два знімки. Проміжні зміни можуть бути пропущені, і це не безперервна передплата серверних подій.
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()
{
var target = UO.GetSerial("lasttarget");
if (Truth(UO.IsNPC(target)))
{
var before = UO.CanChangeName(target);
await Delay(500);
if (Truth(UO.IsNPC(target)))
{
var after = UO.CanChangeName(target);
if (Truth(before != after))
{
UO.Print("Flag changed: " + Convert.ToString(before) + " -> " + Convert.ToString(after));
}
}
else
{
UO.Print("Mobile left the local world");
}
}
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.
Параметри: id (Any)
Результат: int / Integer.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.CanChangeName. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.CanChangeName:bridge.CanChangeName(GetObject(id)). -
InjectionScript.Runtime.InjectionApiUO.GetObject:GetObject(id).
Внутрішній код реалізації, не самостійний скрипт.
public int CanChangeName(InjectionValue id) => bridge.CanChangeName(GetObject(id));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.Followers();Допомагає заздалегідь вирішити, чи вистачить персонажу місця для наступної прирученої чи покликаної істоти. Followers показує зайняті слоти управління, FollowersMax — їхня спільна межа. Це не число тварин поряд і не команда руху Follow. Читає лічильник статусу свого персонажа: зайняті слоти управління вихованцями.
Параметрів немає.
int — зайняті слоти управління вихованцями, 0..255 у моделі клієнта. 0 може бути реальним значенням, відсутністю даних або відсутнім/знищеним Player. Ця кількість не bool, ID або type: 1 означає одну одиницю, а не успіх. Команда не перебирає об'єкти та не повертає масив.
- Наприклад, зайнято «3» з «5» — вільно «2» слота. Значення 4 може означати чотири істоти по одному слоту, одне на чотири або іншу комбінацію. Для істоти на 2 слота перевірки «зайнято < максимум» недостатньо: потрібно maximum - current> = 2. Вартість конкретної істоти та ліміт визначає сервер; не підставляйте постійне 5 замість FollowersMax.
- 0 не доводить, що вихованець втрачений, помер або відпущений: це може бути порожнім або ще не оновленим статусом. Збільшення лічильника – лише додаткова ознака зміни контролю; воно не визначає, яка істота приручена. Перевіряйте також повідомлення сервера та самого вихованця. Ці слоти не рівні місцям у стайні.
- Команда не сприймає аргументів. Використовуйте точні сигнатури вище.
- Читання в ігровому потоці бере Player. Followers, якщо поточний Player існує і не знищений; інакше 0. Екіпірування не перебирається, бонуси не перераховуються, статус не запитується, очікування поновлення немає. Присутня примара не дорівнює знищеному Player.
- PetsCurrent/Followers повідомляє зайняті слоти управління зі свого статусу type >= 3. Один вихованець може займати кілька слотів; правила для покликаних та приручених істот задає сервер. Це не число видимих mobile, не список ID вихованців і не число тварин поряд.
- CharacterStatus перевіряє обов'язкове тіло до оновлення. Weight є у своєму розширеному статусі, слоти - з type 3, Luck - з type 4, серверний WeightMax - з type 5. Компактний/старий пакет без необов'язкового лічильника залишає його попередній кеш. Новий Player починає з нулів; дзвінок не доводить отримання свіжого статусу.
- Ці функції створюють реєстрацію API; вони не виконуються заново під час кожного виклику команди. C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
- Кожен дзвінок читає локальні дані заново. Змінна зберігає знімок; окремі читання можуть отримати різні оновлення сервера. Ненульовий результат не перевіряє підключення. Нуль може бути значенням чи відсутністю даних.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
var result = UO.Followers();
UO.Print("Followers: " + Convert.ToString(result));Параметри та порядок виконання:
- current - зайнято, maximum - межа, freeSlots - різниця. При невідомій/нульовій межі або суперечливих даних приклад припиняється, не стверджуючи, що місце є вільним. Команда лише читає останній статус, не вимагає нове оновлення.
var current = UO.Followers();
var maximum = UO.FollowersMax();
if (Truth(UO.Self() == 0) || Truth(maximum <= 0) || Truth(current > maximum))
{
UO.Print("Follower status is unavailable or inconsistent");
return null;
}
var freeSlots = maximum - current;
UO.Print("Control slots: " + Convert.ToString(current) + "/" + Convert.ToString(maximum));
UO.Print("Free slots: " + Convert.ToString(freeSlots));
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- Спочатку виберіть потрібну тварину, щоб її ID був у lasttarget. requiredSlots=2 — налаштування прикладу, замініть її реальною вартістю цієї істоти на вашому сервері. При нестачі місця не ставиться target і не викликається навички. Інакше черга мети готується до єдиного аргументу UseSkill("Animal Taming"). Початок спроби не гарантує успіху: важливі навички, дальність, приручення та відповідь сервера.
return RunScenario();
object? RunScenario()
{
var requiredSlots = 2;
var current = UO.Followers();
var maximum = UO.FollowersMax();
if (Truth(UO.Self() == 0) || Truth(maximum <= 0) || Truth(maximum - current < requiredSlots))
{
UO.Print("Not enough known control slots");
return null;
}
var animal = UO.LastTarget();
if (Truth(animal == 0))
{
UO.Print("Select the animal first");
return null;
}
UO.WaitTargetObject(animal);
UO.UseSkill("Animal Taming");
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- CanAddFollower — повністю оголошений помічник користувача, не нова UO-команда. Він повертає 1/true за достатнього кешованого ліміту, інакше 0/false. Параметр extraSlots — вартість істоти, що додається, не її type/ID. 2 - приклад; функція не приручає та не закликає. Перевірку слід повторити безпосередньо перед дії.
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(CanAddFollower(2)))
{
UO.Print("Capacity check passed; verify the creature cost before acting");
}
else
{
UO.Print("Insufficient capacity or unavailable status");
}
return null;
}
dynamic CanAddFollower(dynamic extraSlots)
{
if (Truth(extraSlots < 0) || Truth(UO.Self() == 0))
{
return false;
}
var current = UO.Followers();
var maximum = UO.PetsMax();
if (Truth(maximum <= 0))
{
return false;
}
return extraSlots <= maximum - current;
}
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.RegisterCharacterGetterAliases [Followers]. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Followers:bridge.Followers.
Виклик виконує збережений delegate обробника. Метод реєстрації створює цей delegate під час побудови API.
Внутрішній код реалізації, не самостійний скрипт.
() => bridge.FollowersСтворення API: Ці функції створюють реєстрацію API; вони не виконуються заново під час кожного виклику команди.
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.FollowersMax();Допомагає заздалегідь вирішити, чи вистачить персонажу місця для наступної прирученої чи покликаної істоти. Followers показує зайняті слоти управління, FollowersMax — їхня спільна межа. Це не число тварин поряд і не команда руху Follow. Читає лічильник статусу свого персонажа: максимум слотів управління вихованцями.
Параметрів немає.
int — максимум слотів управління вихованцями, 0..255 у моделі клієнта. 0 може бути реальним значенням, відсутністю даних або відсутнім/знищеним Player. Ця кількість не bool, ID або type: 1 означає одну одиницю, а не успіх. Команда не перебирає об'єкти та не повертає масив.
- Наприклад, зайнято «3» з «5» — вільно «2» слота. Значення 4 може означати чотири істоти по одному слоту, одне на чотири або іншу комбінацію. Для істоти на 2 слота перевірки «зайнято < максимум» недостатньо: потрібно maximum - current> = 2. Вартість конкретної істоти та ліміт визначає сервер; не підставляйте постійне 5 замість FollowersMax.
- 0 не доводить, що вихованець втрачений, помер або відпущений: це може бути порожнім або ще не оновленим статусом. Збільшення лічильника – лише додаткова ознака зміни контролю; воно не визначає, яка істота приручена. Перевіряйте також повідомлення сервера та самого вихованця. Ці слоти не рівні місцям у стайні.
- Команда не сприймає аргументів. Використовуйте точні сигнатури вище.
- Читання в ігровому потоці бере Player. FollowersMax, якщо поточний Player існує і не знищений; інакше 0. Екіпірування не перебирається, бонуси не перераховуються, статус не запитується, очікування поновлення немає. Присутня примара не дорівнює знищеному Player.
- PetsMax/FollowersMax повідомляє загальну дозволену сервером межу слотів зі статусу type >= 3, а не вільні слоти. Зайнятих слотів може бути більше межі. Вільну ємність рахуйте як maximum - current, замінюючи негативний результат на 0. Команда нічого не відпускає, не приручає та не закликає.
- CharacterStatus перевіряє обов'язкове тіло до оновлення. Weight є у своєму розширеному статусі, слоти - з type 3, Luck - з type 4, серверний WeightMax - з type 5. Компактний/старий пакет без необов'язкового лічильника залишає його попередній кеш. Новий Player починає з нулів; дзвінок не доводить отримання свіжого статусу.
- Ці функції створюють реєстрацію API; вони не виконуються заново під час кожного виклику команди. C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
- Кожен дзвінок читає локальні дані заново. Змінна зберігає знімок; окремі читання можуть отримати різні оновлення сервера. Ненульовий результат не перевіряє підключення. Нуль може бути значенням чи відсутністю даних.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
var result = UO.FollowersMax();
UO.Print("FollowersMax: " + Convert.ToString(result));Параметри та порядок виконання:
- current - зайнято, maximum - межа, freeSlots - різниця. При невідомій/нульовій межі або суперечливих даних приклад припиняється, не стверджуючи, що місце є вільним. Команда лише читає останній статус, не вимагає нове оновлення.
var current = UO.Followers();
var maximum = UO.FollowersMax();
if (Truth(UO.Self() == 0) || Truth(maximum <= 0) || Truth(current > maximum))
{
UO.Print("Follower status is unavailable or inconsistent");
return null;
}
var freeSlots = maximum - current;
UO.Print("Control slots: " + Convert.ToString(current) + "/" + Convert.ToString(maximum));
UO.Print("Free slots: " + Convert.ToString(freeSlots));
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- Спочатку виберіть потрібну тварину, щоб її ID був у lasttarget. requiredSlots=2 — налаштування прикладу, замініть її реальною вартістю цієї істоти на вашому сервері. При нестачі місця не ставиться target і не викликається навички. Інакше черга мети готується до єдиного аргументу UseSkill("Animal Taming"). Початок спроби не гарантує успіху: важливі навички, дальність, приручення та відповідь сервера.
return RunScenario();
object? RunScenario()
{
var requiredSlots = 2;
var current = UO.Followers();
var maximum = UO.FollowersMax();
if (Truth(UO.Self() == 0) || Truth(maximum <= 0) || Truth(maximum - current < requiredSlots))
{
UO.Print("Not enough known control slots");
return null;
}
var animal = UO.LastTarget();
if (Truth(animal == 0))
{
UO.Print("Select the animal first");
return null;
}
UO.WaitTargetObject(animal);
UO.UseSkill("Animal Taming");
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- CanAddFollower — повністю оголошений помічник користувача, не нова UO-команда. Він повертає 1/true за достатнього кешованого ліміту, інакше 0/false. Параметр extraSlots — вартість істоти, що додається, не її type/ID. 2 - приклад; функція не приручає та не закликає. Перевірку слід повторити безпосередньо перед дії.
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(CanAddFollower(2)))
{
UO.Print("Capacity check passed; verify the creature cost before acting");
}
else
{
UO.Print("Insufficient capacity or unavailable status");
}
return null;
}
dynamic CanAddFollower(dynamic extraSlots)
{
if (Truth(extraSlots < 0) || Truth(UO.Self() == 0))
{
return false;
}
var current = UO.PetsCurrent();
var maximum = UO.FollowersMax();
if (Truth(maximum <= 0))
{
return false;
}
return extraSlots <= maximum - current;
}
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.RegisterCharacterGetterAliases [FollowersMax]. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.FollowersMax:bridge.FollowersMax.
Виклик виконує збережений delegate обробника. Метод реєстрації створює цей delegate під час побудови API.
Внутрішній код реалізації, не самостійний скрипт.
() => bridge.FollowersMaxСтворення API: Ці функції створюють реєстрацію API; вони не виконуються заново під час кожного виклику команди.
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.GetFollowers();Допомагає заздалегідь вирішити, чи вистачить персонажу місця для наступної прирученої чи покликаної істоти. Followers показує зайняті слоти управління, FollowersMax — їхня спільна межа. Це не число тварин поряд і не команда руху Follow. Читає лічильник статусу свого персонажа: зайняті слоти управління вихованцями.
Параметрів немає.
int — зайняті слоти управління вихованцями, 0..255 у моделі клієнта. 0 може бути реальним значенням, відсутністю даних або відсутнім/знищеним Player. Ця кількість не bool, ID або type: 1 означає одну одиницю, а не успіх. Команда не перебирає об'єкти та не повертає масив.
- Наприклад, зайнято «3» з «5» — вільно «2» слота. Значення 4 може означати чотири істоти по одному слоту, одне на чотири або іншу комбінацію. Для істоти на 2 слота перевірки «зайнято < максимум» недостатньо: потрібно maximum - current> = 2. Вартість конкретної істоти та ліміт визначає сервер; не підставляйте постійне 5 замість FollowersMax.
- 0 не доводить, що вихованець втрачений, помер або відпущений: це може бути порожнім або ще не оновленим статусом. Збільшення лічильника – лише додаткова ознака зміни контролю; воно не визначає, яка істота приручена. Перевіряйте також повідомлення сервера та самого вихованця. Ці слоти не рівні місцям у стайні.
- Команда не сприймає аргументів. Використовуйте точні сигнатури вище.
- Читання в ігровому потоці бере Player. Followers, якщо поточний Player існує і не знищений; інакше 0. Екіпірування не перебирається, бонуси не перераховуються, статус не запитується, очікування поновлення немає. Присутня примара не дорівнює знищеному Player.
- PetsCurrent/Followers повідомляє зайняті слоти управління зі свого статусу type >= 3. Один вихованець може займати кілька слотів; правила для покликаних та приручених істот задає сервер. Це не число видимих mobile, не список ID вихованців і не число тварин поряд.
- CharacterStatus перевіряє обов'язкове тіло до оновлення. Weight є у своєму розширеному статусі, слоти - з type 3, Luck - з type 4, серверний WeightMax - з type 5. Компактний/старий пакет без необов'язкового лічильника залишає його попередній кеш. Новий Player починає з нулів; дзвінок не доводить отримання свіжого статусу.
- Ці функції створюють реєстрацію API; вони не виконуються заново під час кожного виклику команди. C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
- Кожен дзвінок читає локальні дані заново. Змінна зберігає знімок; окремі читання можуть отримати різні оновлення сервера. Ненульовий результат не перевіряє підключення. Нуль може бути значенням чи відсутністю даних.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
var result = UO.GetFollowers();
UO.Print("GetFollowers: " + Convert.ToString(result));Параметри та порядок виконання:
- current - зайнято, maximum - межа, freeSlots - різниця. При невідомій/нульовій межі або суперечливих даних приклад припиняється, не стверджуючи, що місце є вільним. Команда лише читає останній статус, не вимагає нове оновлення.
var current = UO.GetFollowers();
var maximum = UO.FollowersMax();
if (Truth(UO.Self() == 0) || Truth(maximum <= 0) || Truth(current > maximum))
{
UO.Print("Follower status is unavailable or inconsistent");
return null;
}
var freeSlots = maximum - current;
UO.Print("Control slots: " + Convert.ToString(current) + "/" + Convert.ToString(maximum));
UO.Print("Free slots: " + Convert.ToString(freeSlots));
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- Спочатку виберіть потрібну тварину, щоб її ID був у lasttarget. requiredSlots=2 — налаштування прикладу, замініть її реальною вартістю цієї істоти на вашому сервері. При нестачі місця не ставиться target і не викликається навички. Інакше черга мети готується до єдиного аргументу UseSkill("Animal Taming"). Початок спроби не гарантує успіху: важливі навички, дальність, приручення та відповідь сервера.
return RunScenario();
object? RunScenario()
{
var requiredSlots = 2;
var current = UO.GetFollowers();
var maximum = UO.FollowersMax();
if (Truth(UO.Self() == 0) || Truth(maximum <= 0) || Truth(maximum - current < requiredSlots))
{
UO.Print("Not enough known control slots");
return null;
}
var animal = UO.LastTarget();
if (Truth(animal == 0))
{
UO.Print("Select the animal first");
return null;
}
UO.WaitTargetObject(animal);
UO.UseSkill("Animal Taming");
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- CanAddFollower — повністю оголошений помічник користувача, не нова UO-команда. Він повертає 1/true за достатнього кешованого ліміту, інакше 0/false. Параметр extraSlots — вартість істоти, що додається, не її type/ID. 2 - приклад; функція не приручає та не закликає. Перевірку слід повторити безпосередньо перед дії.
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(CanAddFollower(2)))
{
UO.Print("Capacity check passed; verify the creature cost before acting");
}
else
{
UO.Print("Insufficient capacity or unavailable status");
}
return null;
}
dynamic CanAddFollower(dynamic extraSlots)
{
if (Truth(extraSlots < 0) || Truth(UO.Self() == 0))
{
return false;
}
var current = UO.GetFollowers();
var maximum = UO.PetsMax();
if (Truth(maximum <= 0))
{
return false;
}
return extraSlots <= maximum - current;
}
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.RegisterCharacterGetterAliases [GetFollowers]. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Followers:bridge.Followers.
Виклик виконує збережений delegate обробника. Метод реєстрації створює цей delegate під час побудови API.
Внутрішній код реалізації, не самостійний скрипт.
() => bridge.FollowersСтворення API: Ці функції створюють реєстрацію API; вони не виконуються заново під час кожного виклику команди.
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.GetFollowersMax();Допомагає заздалегідь вирішити, чи вистачить персонажу місця для наступної прирученої чи покликаної істоти. Followers показує зайняті слоти управління, FollowersMax — їхня спільна межа. Це не число тварин поряд і не команда руху Follow. Читає лічильник статусу свого персонажа: максимум слотів управління вихованцями.
Параметрів немає.
int — максимум слотів управління вихованцями, 0..255 у моделі клієнта. 0 може бути реальним значенням, відсутністю даних або відсутнім/знищеним Player. Ця кількість не bool, ID або type: 1 означає одну одиницю, а не успіх. Команда не перебирає об'єкти та не повертає масив.
- Наприклад, зайнято «3» з «5» — вільно «2» слота. Значення 4 може означати чотири істоти по одному слоту, одне на чотири або іншу комбінацію. Для істоти на 2 слота перевірки «зайнято < максимум» недостатньо: потрібно maximum - current> = 2. Вартість конкретної істоти та ліміт визначає сервер; не підставляйте постійне 5 замість FollowersMax.
- 0 не доводить, що вихованець втрачений, помер або відпущений: це може бути порожнім або ще не оновленим статусом. Збільшення лічильника – лише додаткова ознака зміни контролю; воно не визначає, яка істота приручена. Перевіряйте також повідомлення сервера та самого вихованця. Ці слоти не рівні місцям у стайні.
- Команда не сприймає аргументів. Використовуйте точні сигнатури вище.
- Читання в ігровому потоці бере Player. FollowersMax, якщо поточний Player існує і не знищений; інакше 0. Екіпірування не перебирається, бонуси не перераховуються, статус не запитується, очікування поновлення немає. Присутня примара не дорівнює знищеному Player.
- PetsMax/FollowersMax повідомляє загальну дозволену сервером межу слотів зі статусу type >= 3, а не вільні слоти. Зайнятих слотів може бути більше межі. Вільну ємність рахуйте як maximum - current, замінюючи негативний результат на 0. Команда нічого не відпускає, не приручає та не закликає.
- CharacterStatus перевіряє обов'язкове тіло до оновлення. Weight є у своєму розширеному статусі, слоти - з type 3, Luck - з type 4, серверний WeightMax - з type 5. Компактний/старий пакет без необов'язкового лічильника залишає його попередній кеш. Новий Player починає з нулів; дзвінок не доводить отримання свіжого статусу.
- Ці функції створюють реєстрацію API; вони не виконуються заново під час кожного виклику команди. C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
- Кожен дзвінок читає локальні дані заново. Змінна зберігає знімок; окремі читання можуть отримати різні оновлення сервера. Ненульовий результат не перевіряє підключення. Нуль може бути значенням чи відсутністю даних.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
var result = UO.GetFollowersMax();
UO.Print("GetFollowersMax: " + Convert.ToString(result));Параметри та порядок виконання:
- current - зайнято, maximum - межа, freeSlots - різниця. При невідомій/нульовій межі або суперечливих даних приклад припиняється, не стверджуючи, що місце є вільним. Команда лише читає останній статус, не вимагає нове оновлення.
var current = UO.Followers();
var maximum = UO.GetFollowersMax();
if (Truth(UO.Self() == 0) || Truth(maximum <= 0) || Truth(current > maximum))
{
UO.Print("Follower status is unavailable or inconsistent");
return null;
}
var freeSlots = maximum - current;
UO.Print("Control slots: " + Convert.ToString(current) + "/" + Convert.ToString(maximum));
UO.Print("Free slots: " + Convert.ToString(freeSlots));
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- Спочатку виберіть потрібну тварину, щоб її ID був у lasttarget. requiredSlots=2 — налаштування прикладу, замініть її реальною вартістю цієї істоти на вашому сервері. При нестачі місця не ставиться target і не викликається навички. Інакше черга мети готується до єдиного аргументу UseSkill("Animal Taming"). Початок спроби не гарантує успіху: важливі навички, дальність, приручення та відповідь сервера.
return RunScenario();
object? RunScenario()
{
var requiredSlots = 2;
var current = UO.Followers();
var maximum = UO.GetFollowersMax();
if (Truth(UO.Self() == 0) || Truth(maximum <= 0) || Truth(maximum - current < requiredSlots))
{
UO.Print("Not enough known control slots");
return null;
}
var animal = UO.LastTarget();
if (Truth(animal == 0))
{
UO.Print("Select the animal first");
return null;
}
UO.WaitTargetObject(animal);
UO.UseSkill("Animal Taming");
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- CanAddFollower — повністю оголошений помічник користувача, не нова UO-команда. Він повертає 1/true за достатнього кешованого ліміту, інакше 0/false. Параметр extraSlots — вартість істоти, що додається, не її type/ID. 2 - приклад; функція не приручає та не закликає. Перевірку слід повторити безпосередньо перед дії.
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(CanAddFollower(2)))
{
UO.Print("Capacity check passed; verify the creature cost before acting");
}
else
{
UO.Print("Insufficient capacity or unavailable status");
}
return null;
}
dynamic CanAddFollower(dynamic extraSlots)
{
if (Truth(extraSlots < 0) || Truth(UO.Self() == 0))
{
return false;
}
var current = UO.PetsCurrent();
var maximum = UO.GetFollowersMax();
if (Truth(maximum <= 0))
{
return false;
}
return extraSlots <= maximum - current;
}
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.RegisterCharacterGetterAliases [GetFollowersMax]. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.FollowersMax:bridge.FollowersMax.
Виклик виконує збережений delegate обробника. Метод реєстрації створює цей delegate під час побудови API.
Внутрішній код реалізації, не самостійний скрипт.
() => bridge.FollowersMaxСтворення API: Ці функції створюють реєстрацію API; вони не виконуються заново під час кожного виклику команди.
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.GetMobile(object? id);Збирає компактний запис властивостей по одному ID.
-
id— Serial/ID конкретного об'єкта: int, десятковий/hex-рядок або встановлений аліас self, backpack, lasttarget, lastobject або ім'я AddObject. Це не graphic/type.
Array з 9 полів: [0] int serial, [1] string ім'я, [2] int X, [3] int Y, [4] int Z, [5] int HP, [6] int MaxHP, [7] int notoriety, [8] int напрям 0..7. Для невідомого ID масив теж має 9 полів: переданий ID зберігається, ім'я порожнє, недоступні числові властивості рівні 0. Це не повний Pascal record TMobile.
- Читаються дані, які вже завантажені клієнтом. Команда не відкриває контейнер, не переміщає предмети та не завантажує об'єкти з усього сервера.
- Array - масив з індексами від 0. Зберігайте його у var, перевіряйте ArrayLength перед доступом. Елементи можуть зникнути зі світу після зйомки: перед дією перевіряйте Exists(serial).
- Наявність дев'яти полів не підтверджує існування персонажа; Використовуйте Exists. Команда сама не перевіряє, що ID належить саме Mobile. Для предмета можуть повернутися його ім'я/координати та нульові властивості персонажа.
- HP/MaxHP іншого персонажа залежать від надісланої сервером шкали. Z – висота, не шар екіпірування.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
object? result = UO.GetMobile("self");
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Параметри та порядок виконання:
- ID=self. [1] - ім'я, [5]/[6] - поточні та максимальні HP, а не Mana.
- Масив має фіксовані дев'ять полів. Порожнє ім'я та 0/0 можливі до входу у світ.
var mobile = UO.GetMobile("self");
UO.Print(mobile[1] + ": " + Convert.ToString(mobile[5]) + "/" + Convert.ToString(mobile[6]));Параметри та порядок виконання:
- lasttarget повинен вказувати на персонажа. [2]/[3]/[4] — X/Y/Z світу.
- Спочатку перевіряється наявність об'єкта. Якщо target – предмет у сумці, координати відносяться до його гампа.
return RunScenario();
object? RunScenario()
{
var target = UO.GetSerial("lasttarget");
if (Truth(UO.Exists(target)))
{
var mobile = UO.GetMobile(target);
UO.Print(Convert.ToString(mobile[2]) + "," + Convert.ToString(mobile[3]) + "," + Convert.ToString(mobile[4]));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- [7] – значення notoriety, [8] – напрямок 0..7. Жодне поле не є type.
- Команда читає відомі дані, не спрямовує персонажа і не перемикає бойовий режим.
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 target = UO.GetSerial("lasttarget");
if (Truth(UO.Exists(target)))
{
var mobile = UO.GetMobile(target);
UO.Print("Notoriety: " + Convert.ToString(mobile[7]));
UO.Print("Direction: " + Convert.ToString(mobile[8]));
}
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.
Параметри: id (Any)
Результат: dynamic / Any.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetName:bridge.GetName(id). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetX:bridge.GetX(id). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetY:bridge.GetY(id). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetZ:bridge.GetZ(id). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetHP:bridge.GetHP(id). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetMaxHP:bridge.GetMaxHP(id). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetNotoriety:bridge.GetNotoriety(id). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetDir:bridge.GetDir(id).
Внутрішній код реалізації, не самостійний скрипт.
case "getmobile":
{
int id = Arg(0);
return new InjectionValue(new[]
{
new InjectionValue(id), new InjectionValue(bridge.GetName(id)), new InjectionValue(bridge.GetX(id)),
new InjectionValue(bridge.GetY(id)), new InjectionValue(bridge.GetZ(id)), new InjectionValue(bridge.GetHP(id)),
new InjectionValue(bridge.GetMaxHP(id)), new InjectionValue(bridge.GetNotoriety(id)), new InjectionValue(bridge.GetDir(id))
});
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.GetMobiles();
dynamic UO.GetMobiles(object? distance);
dynamic UO.GetMobiles(object? distance, object? notoriety);
dynamic UO.GetMobiles(object? distance, object? notoriety, object? body);
dynamic UO.GetMobiles(object? distance, object? notoriety, object? body, object? maxZ);
dynamic UO.GetMobiles(object? distance, object? notoriety, object? body, object? maxZ, object? nearest);
dynamic UO.GetMobiles(object? distance, object? notoriety, object? body, object? maxZ, object? nearest, object? includeSelf);
dynamic UO.GetMobiles(object? distance, object? notoriety, object? body, object? maxZ, object? nearest, object? includeSelf, object? aliveOnly);
dynamic UO.GetMobiles(object? distance, object? notoriety, object? body, object? maxZ, object? nearest, object? includeSelf, object? aliveOnly, object? visibleOnly);Отримує масив ID відповідних завантажених персонажів/NPC. Потрібний, коли скрипту треба перевірити кілька цілей, вибрати свою, порахувати оточення чи додати власну умову перед дією.
-
distance— Горизонтальний радіус у клітинах включно: 5 допускає відстань 0..5. Відстань — max(abs(dx),abs(dy)), тому сусідня діагональ теж 1. За замовчуванням або за негативного числа береться UO.FindDistance(), а не безлімітний пошук. 0 залишає ту ж клітину X/Y. Чи не довжина маршруту; перешкоди та поверхи цим параметром не перевіряються. -
notoriety- Статус відношення до персонажа, отриманий від сервера: 0 - Невідомий, 1 — Innocent, 2 — Ally, 3 — Gray, 4 — Criminal, 5 — Enemy, 6 — Murderer, 7 - Invulnerable. Число означає один статус; "5|6або масив чисел - будь-який з перерахованих. Це не колір одягу і не клас. Негативне число (зазвичай -1), 0xFFFF, "any", порожній рядок або порожній масив окремо відключають цей фільтр. Некоректний рядок без допустимих чисел не знаходить нікого. Порядок статусів пріоритет не задає. Фільтр 5 вибирає Enemy, а не автоматично будь-якого NPC/монстра; реальні значення залежить від сервера. -
body— Graphic тіла персонажа/NPC, не ID конкретного персонажа і не type одягненої броні. Число, hex-рядок, рядок 0x0190|0x0191" або масив чисел. 0x0190 (400) - чоловік-людина; 0x0191 (401) - жінка-людина. Маска поєднує обидва тіла. Список автоматично не включає інші раси, привидів або перетворення; таблиці стандартних графічних типів тіла. Негативне число (-1 за умовчанням), 0xFFFF, "any", порожній рядок або порожній масив окремо - будь-яке тіло. Невідомий текст без допустимого числа дає результат. -
maxZ— максимальна abs(Z цілі - Z власного персонажа) включно, в одиницях Z світу. Це не кількість поверхів і не клітинки X/Y. maxZ=4 за Z гравця 10 допускає Z цілі 6..14; 0 вимагає однакової висоти. За замовчуванням/за від’ємного числа використовується UO.FindVertical(). На сходах однакова Z може виключити потрібну ціль. Навіть мала різниця Z не доводить доступність поверху. -
nearest— true/1 сортує масив від ближнього до дальнього, а за однакової відстані — за serial. false/0 за замовчуванням зберігає порядок клієнта. Це не додатковий радіус і не вибір одного об’єкта. -
includeSelf— true/1 дозволяє увімкнути self, якщо всі інші фільтри та Ignore це допускають. false/0 за умовчанням виключає self. Включення не гарантує наявність self у результаті. -
aliveOnly— true/1 виключає mobiles з IsDead != 0; false/0 за умовчанням не додає цієї умови. Не порівняння HP з нулем, не пошук трупів-предметів і не гарантія, що ціль залишиться живою після виклику. -
visibleOnly— true/1 вимагає IsVisible=1 за поточним станом ClassicUO; false/0 за умовчанням не додає умову. Це видимість завантаженого об'єкта клієнту, а чи не перевірка стін/лінії огляду. Для геометричної перевірки є окрема UO.CheckLOS з координатами; сервер все одно може відхилити дію.
Array - serial mobiles. Порожній масив означає відсутність збігів; перевіряйте ArrayLength перед targets[0]. Не body/type, не сумарні HP, не 1/0. Форма без аргументів все одно застосовує FindDistance/FindVertical/Ignore та виключає self.
- Пошук локальний: тільки вже завантажені mobiles. Враховується Ignore; self виключений, крім явного includeSelf=true у командах, що його підтримують. Контейнери та предмети не є мобільними.
- Умови застосовуються разом (AND). Допустимі альтернативи всередині body/notoriety об'єднані через OR. Пошук не змінює FindItem, FindCount та GetFoundItems.
- У body/notoriety маска з допустимими числами використовує саме їх: "any|5" однаково обмежує значенням 5. Порожні/невірні елементи поруч із допустимими числами ігноруються. Для відсутності обмеження передайте окремо -1. Не переносіть це правило на classMask: невідоме ім'я класу відхиляє весь список.
- Команди не відкривають область світу, не біжать до мети та не перевіряють прохідність маршруту. Між вибором та обробкою сервером стан світу може змінитися.
- Передача true та 1 рівнозначна для прапорів, false та 0 також. Інші ненульові числа теж перетворюються на true, але 8/9 не є окремими режимами; використовуйте зрозумілі true/false.
- Підтримуються 0..8 позиційних аргументів. classMask та color у цій команді відсутні; не переносіть сюди порядок аргументів AttackNearest.
- Масив - знімок ID. Ціль може зникнути пізніше; повторно перевірте Exists, якщо між пошуком та дією було очікування. Нічого не атакує самотужки.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
object? result = UO.GetMobiles(5, 2, -1, 8, true, false, true, true);
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Параметри та порядок виконання:
- nearestFirst=true робить allies[0] найближчим союзником. Follow включає фонову ходьбу; зупиняється UO.Follow(0). Назва/клас союзника не визначаються цією командою.
var radius = 12;
var allyStatus = 2;
var anyBody = -1;
var maxHeight = 8;
dynamic nearestFirst = true;
dynamic includeMe = false;
dynamic livingOnly = true;
dynamic visibleOnly = true;
var allies = UO.GetMobiles(radius, allyStatus, anyBody, maxHeight, nearestFirst, includeMe, livingOnly, visibleOnly);
if (Truth(ArrayLength(allies) == 0))
{
return null;
}
UO.AddObject("leader", allies[0]);
UO.Follow(allies[0], 2, false);
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;Параметри та порядок виконання:
- Тут nearest=false доречний: важливий лічильник. ArrayLength - число mobiles, не кількість предметів у стосі. Alarm друкує повідомлення у журнал.
return RunScenario();
object? RunScenario()
{
var enemies = UO.GetMobiles(5, "5|6", -1, 4, false, false, true, true);
var count = ArrayLength(enemies);
if (Truth(count == 1))
{
UO.Attack(enemies[0]);
}
else if (Truth(count > 1))
{
UO.Alarm();
}
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;Параметри та порядок виконання:
- distance = 0 - однакові X / Y, maxZ - = 0 - однаковий Z. body обмежений двома graphic. includeSelf=true дозволяє self, але він, як і раніше, повинен підходити по body і aliveOnly. Приклад повідомляє про інших персонажів на тій самій клітині.
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 sameCell = UO.GetMobiles(0, -1, "0x0190|0x0191", 0, false, true, true, false);
var i = 0;
var others = 0;
while (Truth(i < ArrayLength(sameCell)))
{
if (Truth(sameCell[i] != UO.GetSerial("self")))
{
others += 1;
}
i += 1;
}
if (Truth(others > 0))
{
UO.Alarm();
}
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.RegisterCompactSearchApi [GetMobiles]. -
InjectionScript.Runtime.InjectionApiUO.CompactGetMobiles:CompactGetMobiles(values).
Виклик виконує збережений delegate обробника. Метод реєстрації створює цей delegate під час побудови API.
Внутрішній код реалізації, не самостійний скрипт.
values => CompactGetMobiles(values)Параметри: distance (Any)
Результат: dynamic / Any.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCompactSearchApi [GetMobiles]. -
InjectionScript.Runtime.InjectionApiUO.CompactGetMobiles:CompactGetMobiles(values).
Виклик виконує збережений delegate обробника. Метод реєстрації створює цей delegate під час побудови API.
Внутрішній код реалізації, не самостійний скрипт.
values => CompactGetMobiles(values)Параметри: distance (Any), notoriety (Any)
Результат: dynamic / Any.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCompactSearchApi [GetMobiles]. -
InjectionScript.Runtime.InjectionApiUO.CompactGetMobiles:CompactGetMobiles(values).
Виклик виконує збережений delegate обробника. Метод реєстрації створює цей delegate під час побудови API.
Внутрішній код реалізації, не самостійний скрипт.
values => CompactGetMobiles(values)Параметри: distance (Any), notoriety (Any), body (Any)
Результат: dynamic / Any.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCompactSearchApi [GetMobiles]. -
InjectionScript.Runtime.InjectionApiUO.CompactGetMobiles:CompactGetMobiles(values).
Виклик виконує збережений delegate обробника. Метод реєстрації створює цей delegate під час побудови API.
Внутрішній код реалізації, не самостійний скрипт.
values => CompactGetMobiles(values)Параметри: distance (Any), notoriety (Any), body (Any), maxZ (Any)
Результат: dynamic / Any.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCompactSearchApi [GetMobiles]. -
InjectionScript.Runtime.InjectionApiUO.CompactGetMobiles:CompactGetMobiles(values).
Виклик виконує збережений delegate обробника. Метод реєстрації створює цей delegate під час побудови API.
Внутрішній код реалізації, не самостійний скрипт.
values => CompactGetMobiles(values)Параметри: distance (Any), notoriety (Any), body (Any), maxZ (Any), nearest (Any)
Результат: dynamic / Any.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCompactSearchApi [GetMobiles]. -
InjectionScript.Runtime.InjectionApiUO.CompactGetMobiles:CompactGetMobiles(values).
Виклик виконує збережений delegate обробника. Метод реєстрації створює цей delegate під час побудови API.
Внутрішній код реалізації, не самостійний скрипт.
values => CompactGetMobiles(values)
UO.GetMobiles(distance, notoriety, body, maxZ, nearest, includeSelf) — UO.GetMobiles(Any,Any,Any,Any,Any,Any)
Параметри: distance (Any), notoriety (Any), body (Any), maxZ (Any), nearest (Any), includeSelf (Any)
Результат: dynamic / Any.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCompactSearchApi [GetMobiles]. -
InjectionScript.Runtime.InjectionApiUO.CompactGetMobiles:CompactGetMobiles(values).
Виклик виконує збережений delegate обробника. Метод реєстрації створює цей delegate під час побудови API.
Внутрішній код реалізації, не самостійний скрипт.
values => CompactGetMobiles(values)
UO.GetMobiles(distance, notoriety, body, maxZ, nearest, includeSelf, aliveOnly) — UO.GetMobiles(Any,Any,Any,Any,Any,Any,Any)
Параметри: distance (Any), notoriety (Any), body (Any), maxZ (Any), nearest (Any), includeSelf (Any), aliveOnly (Any)
Результат: dynamic / Any.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCompactSearchApi [GetMobiles]. -
InjectionScript.Runtime.InjectionApiUO.CompactGetMobiles:CompactGetMobiles(values).
Виклик виконує збережений delegate обробника. Метод реєстрації створює цей delegate під час побудови API.
Внутрішній код реалізації, не самостійний скрипт.
values => CompactGetMobiles(values)
UO.GetMobiles(distance, notoriety, body, maxZ, nearest, includeSelf, aliveOnly, visibleOnly) — UO.GetMobiles(Any,Any,Any,Any,Any,Any,Any,Any)
Параметри: distance (Any), notoriety (Any), body (Any), maxZ (Any), nearest (Any), includeSelf (Any), aliveOnly (Any), visibleOnly (Any)
Результат: dynamic / Any.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCompactSearchApi [GetMobiles]. -
InjectionScript.Runtime.InjectionApiUO.CompactGetMobiles:CompactGetMobiles(values).
Виклик виконує збережений delegate обробника. Метод реєстрації створює цей delegate під час побудови API.
Внутрішній код реалізації, не самостійний скрипт.
values => CompactGetMobiles(values)Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.GetNotoriety();
int UO.GetNotoriety(object? id);Читає репутацію персонажа з моделі клієнта.
-
id— Необов'язковий об'єкт тільки у зазначених однопараметричних формах: serial числом/hex-рядком, "self", "lasttarget" або ім'я AddObject. Це не graphic/type. Без аргументу читається свій персонаж. Перед читанням іншого об'єкта перевіряйте UO.Exists; невідоме ім'я не відкриває прицілу.
int — 0=unknown, 1=innocent, 2=ally, 3=gray, 4=criminal, 5=enemy, 6=murderer, 7= invulnerable. Це код стану, а не hue, karma чи fame. Невідомий mobile дає 0.
- Читаються вже отримані локальні дані. Запит не відкриває статус і не змушує сервер надіслати оновлення. Після смерті, переходу на карту або видалення об'єкта значення можуть змінитися між двома викликами.
- C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
var result = UO.GetNotoriety();
UO.Print("GetNotoriety: " + Convert.ToString(result));Параметри та порядок виконання:
- Виклик без аргументів відноситься до self. Репутація персонажа зберігається у value.
- Convert.ToString перетворює число для виведення і не змінює значення результату.
var value = UO.GetNotoriety();
UO.Print("GetNotoriety: " + Convert.ToString(value));Параметри та порядок виконання:
- Значення читається одного разу без аргументів. Репутацію персонажа використовується у наведеному розрахунку або умові.
- Числові пороги — приклад умов скрипту, а чи не нові межі клієнта. Поле зберігає серверні одиниці та обмеження, описані вище.
return RunScenario();
object? RunScenario()
{
var value = UO.GetNotoriety();
if (Truth(value == 3) || Truth(value == 4))
{
UO.Print("Gray or criminal notoriety");
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- Єдиний аргумент вибирає об'єкт lasttarget; його serial має бути відомий клієнту. Graphic/type сюди не передається.
- Дані іншого об'єкта можуть бути невідомі навіть за позитивного Exists. Для координат предмета у сумці виходить позиція контейнера, а чи не точка світу.
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.Exists("lasttarget")))
{
var targetValue = UO.GetNotoriety("lasttarget");
UO.Print("Selected value: " + Convert.ToString(targetValue));
}
else
{
UO.Print("Target is not loaded");
}
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.RegisterCharacterGetterAliases [GetNotoriety]. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetNotoriety:bridge.GetNotoriety(bridge.Self). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Self:bridge.Self.
Виклик виконує збережений delegate обробника. Метод реєстрації створює цей delegate під час побудови API.
Внутрішній код реалізації, не самостійний скрипт.
() => bridge.GetNotoriety(bridge.Self)Створення API: Ці функції створюють реєстрацію API; вони не виконуються заново під час кожного виклику команди.
Параметри: id (Any/Integer/String)
Результат: int / Any.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetNotoriety:bridge.GetNotoriety(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
Внутрішній код реалізації, не самостійний скрипт.
case "getnotoriety": return new InjectionValue(bridge.GetNotoriety(Arg(0)));Параметри: id (Any/Integer/String)
Результат: int / Integer.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.GetNotoriety. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetNotoriety:bridge.GetNotoriety(id).
Внутрішній код реалізації, не самостійний скрипт.
public int GetNotoriety(int id) => bridge.GetNotoriety(id);Параметри: id (Any/Integer/String)
Результат: int / Integer.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.GetNotoriety. -
InjectionScript.Runtime.InjectionApiUO.GetNotoriety:GetNotoriety(GetObject(id)). -
InjectionScript.Runtime.InjectionApiUO.GetObject:GetObject(id).
Внутрішній код реалізації, не самостійний скрипт.
public int GetNotoriety(string id) => GetNotoriety(GetObject(id));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.GetPetsCurrent();Допомагає заздалегідь вирішити, чи вистачить персонажу місця для наступної прирученої чи покликаної істоти. Followers показує зайняті слоти управління, FollowersMax — їхня спільна межа. Це не число тварин поряд і не команда руху Follow. Читає лічильник статусу свого персонажа: зайняті слоти управління вихованцями.
Параметрів немає.
int — зайняті слоти управління вихованцями, 0..255 у моделі клієнта. 0 може бути реальним значенням, відсутністю даних або відсутнім/знищеним Player. Ця кількість не bool, ID або type: 1 означає одну одиницю, а не успіх. Команда не перебирає об'єкти та не повертає масив.
- Наприклад, зайнято «3» з «5» — вільно «2» слота. Значення 4 може означати чотири істоти по одному слоту, одне на чотири або іншу комбінацію. Для істоти на 2 слота перевірки «зайнято < максимум» недостатньо: потрібно maximum - current> = 2. Вартість конкретної істоти та ліміт визначає сервер; не підставляйте постійне 5 замість FollowersMax.
- 0 не доводить, що вихованець втрачений, помер або відпущений: це може бути порожнім або ще не оновленим статусом. Збільшення лічильника – лише додаткова ознака зміни контролю; воно не визначає, яка істота приручена. Перевіряйте також повідомлення сервера та самого вихованця. Ці слоти не рівні місцям у стайні.
- Команда не сприймає аргументів. Використовуйте точні сигнатури вище.
- Читання в ігровому потоці бере Player. Followers, якщо поточний Player існує і не знищений; інакше 0. Екіпірування не перебирається, бонуси не перераховуються, статус не запитується, очікування поновлення немає. Присутня примара не дорівнює знищеному Player.
- PetsCurrent/Followers повідомляє зайняті слоти управління зі свого статусу type >= 3. Один вихованець може займати кілька слотів; правила для покликаних та приручених істот задає сервер. Це не число видимих mobile, не список ID вихованців і не число тварин поряд.
- CharacterStatus перевіряє обов'язкове тіло до оновлення. Weight є у своєму розширеному статусі, слоти - з type 3, Luck - з type 4, серверний WeightMax - з type 5. Компактний/старий пакет без необов'язкового лічильника залишає його попередній кеш. Новий Player починає з нулів; дзвінок не доводить отримання свіжого статусу.
- Ці функції створюють реєстрацію API; вони не виконуються заново під час кожного виклику команди. C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
- Кожен дзвінок читає локальні дані заново. Змінна зберігає знімок; окремі читання можуть отримати різні оновлення сервера. Ненульовий результат не перевіряє підключення. Нуль може бути значенням чи відсутністю даних.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
var result = UO.GetPetsCurrent();
UO.Print("GetPetsCurrent: " + Convert.ToString(result));Параметри та порядок виконання:
- current - зайнято, maximum - межа, freeSlots - різниця. При невідомій/нульовій межі або суперечливих даних приклад припиняється, не стверджуючи, що місце є вільним. Команда лише читає останній статус, не вимагає нове оновлення.
var current = UO.GetPetsCurrent();
var maximum = UO.FollowersMax();
if (Truth(UO.Self() == 0) || Truth(maximum <= 0) || Truth(current > maximum))
{
UO.Print("Follower status is unavailable or inconsistent");
return null;
}
var freeSlots = maximum - current;
UO.Print("Control slots: " + Convert.ToString(current) + "/" + Convert.ToString(maximum));
UO.Print("Free slots: " + Convert.ToString(freeSlots));
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- Спочатку виберіть потрібну тварину, щоб її ID був у lasttarget. requiredSlots=2 — налаштування прикладу, замініть її реальною вартістю цієї істоти на вашому сервері. При нестачі місця не ставиться target і не викликається навички. Інакше черга мети готується до єдиного аргументу UseSkill("Animal Taming"). Початок спроби не гарантує успіху: важливі навички, дальність, приручення та відповідь сервера.
return RunScenario();
object? RunScenario()
{
var requiredSlots = 2;
var current = UO.GetPetsCurrent();
var maximum = UO.FollowersMax();
if (Truth(UO.Self() == 0) || Truth(maximum <= 0) || Truth(maximum - current < requiredSlots))
{
UO.Print("Not enough known control slots");
return null;
}
var animal = UO.LastTarget();
if (Truth(animal == 0))
{
UO.Print("Select the animal first");
return null;
}
UO.WaitTargetObject(animal);
UO.UseSkill("Animal Taming");
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- CanAddFollower — повністю оголошений помічник користувача, не нова UO-команда. Він повертає 1/true за достатнього кешованого ліміту, інакше 0/false. Параметр extraSlots — вартість істоти, що додається, не її type/ID. 2 - приклад; функція не приручає та не закликає. Перевірку слід повторити безпосередньо перед дії.
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(CanAddFollower(2)))
{
UO.Print("Capacity check passed; verify the creature cost before acting");
}
else
{
UO.Print("Insufficient capacity or unavailable status");
}
return null;
}
dynamic CanAddFollower(dynamic extraSlots)
{
if (Truth(extraSlots < 0) || Truth(UO.Self() == 0))
{
return false;
}
var current = UO.GetPetsCurrent();
var maximum = UO.PetsMax();
if (Truth(maximum <= 0))
{
return false;
}
return extraSlots <= maximum - current;
}
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.RegisterCharacterGetterAliases [GetPetsCurrent]. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Followers:bridge.Followers.
Виклик виконує збережений delegate обробника. Метод реєстрації створює цей delegate під час побудови API.
Внутрішній код реалізації, не самостійний скрипт.
() => bridge.FollowersСтворення API: Ці функції створюють реєстрацію API; вони не виконуються заново під час кожного виклику команди.
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.GetPetsMax();Допомагає заздалегідь вирішити, чи вистачить персонажу місця для наступної прирученої чи покликаної істоти. Followers показує зайняті слоти управління, FollowersMax — їхня спільна межа. Це не число тварин поряд і не команда руху Follow. Читає лічильник статусу свого персонажа: максимум слотів управління вихованцями.
Параметрів немає.
int — максимум слотів управління вихованцями, 0..255 у моделі клієнта. 0 може бути реальним значенням, відсутністю даних або відсутнім/знищеним Player. Ця кількість не bool, ID або type: 1 означає одну одиницю, а не успіх. Команда не перебирає об'єкти та не повертає масив.
- Наприклад, зайнято «3» з «5» — вільно «2» слота. Значення 4 може означати чотири істоти по одному слоту, одне на чотири або іншу комбінацію. Для істоти на 2 слота перевірки «зайнято < максимум» недостатньо: потрібно maximum - current> = 2. Вартість конкретної істоти та ліміт визначає сервер; не підставляйте постійне 5 замість FollowersMax.
- 0 не доводить, що вихованець втрачений, помер або відпущений: це може бути порожнім або ще не оновленим статусом. Збільшення лічильника – лише додаткова ознака зміни контролю; воно не визначає, яка істота приручена. Перевіряйте також повідомлення сервера та самого вихованця. Ці слоти не рівні місцям у стайні.
- Команда не сприймає аргументів. Використовуйте точні сигнатури вище.
- Читання в ігровому потоці бере Player. FollowersMax, якщо поточний Player існує і не знищений; інакше 0. Екіпірування не перебирається, бонуси не перераховуються, статус не запитується, очікування поновлення немає. Присутня примара не дорівнює знищеному Player.
- PetsMax/FollowersMax повідомляє загальну дозволену сервером межу слотів зі статусу type >= 3, а не вільні слоти. Зайнятих слотів може бути більше межі. Вільну ємність рахуйте як maximum - current, замінюючи негативний результат на 0. Команда нічого не відпускає, не приручає та не закликає.
- CharacterStatus перевіряє обов'язкове тіло до оновлення. Weight є у своєму розширеному статусі, слоти - з type 3, Luck - з type 4, серверний WeightMax - з type 5. Компактний/старий пакет без необов'язкового лічильника залишає його попередній кеш. Новий Player починає з нулів; дзвінок не доводить отримання свіжого статусу.
- Ці функції створюють реєстрацію API; вони не виконуються заново під час кожного виклику команди. C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
- Кожен дзвінок читає локальні дані заново. Змінна зберігає знімок; окремі читання можуть отримати різні оновлення сервера. Ненульовий результат не перевіряє підключення. Нуль може бути значенням чи відсутністю даних.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
var result = UO.GetPetsMax();
UO.Print("GetPetsMax: " + Convert.ToString(result));Параметри та порядок виконання:
- current - зайнято, maximum - межа, freeSlots - різниця. При невідомій/нульовій межі або суперечливих даних приклад припиняється, не стверджуючи, що місце є вільним. Команда лише читає останній статус, не вимагає нове оновлення.
var current = UO.Followers();
var maximum = UO.GetPetsMax();
if (Truth(UO.Self() == 0) || Truth(maximum <= 0) || Truth(current > maximum))
{
UO.Print("Follower status is unavailable or inconsistent");
return null;
}
var freeSlots = maximum - current;
UO.Print("Control slots: " + Convert.ToString(current) + "/" + Convert.ToString(maximum));
UO.Print("Free slots: " + Convert.ToString(freeSlots));
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- Спочатку виберіть потрібну тварину, щоб її ID був у lasttarget. requiredSlots=2 — налаштування прикладу, замініть її реальною вартістю цієї істоти на вашому сервері. При нестачі місця не ставиться target і не викликається навички. Інакше черга мети готується до єдиного аргументу UseSkill("Animal Taming"). Початок спроби не гарантує успіху: важливі навички, дальність, приручення та відповідь сервера.
return RunScenario();
object? RunScenario()
{
var requiredSlots = 2;
var current = UO.Followers();
var maximum = UO.GetPetsMax();
if (Truth(UO.Self() == 0) || Truth(maximum <= 0) || Truth(maximum - current < requiredSlots))
{
UO.Print("Not enough known control slots");
return null;
}
var animal = UO.LastTarget();
if (Truth(animal == 0))
{
UO.Print("Select the animal first");
return null;
}
UO.WaitTargetObject(animal);
UO.UseSkill("Animal Taming");
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- CanAddFollower — повністю оголошений помічник користувача, не нова UO-команда. Він повертає 1/true за достатнього кешованого ліміту, інакше 0/false. Параметр extraSlots — вартість істоти, що додається, не її type/ID. 2 - приклад; функція не приручає та не закликає. Перевірку слід повторити безпосередньо перед дії.
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(CanAddFollower(2)))
{
UO.Print("Capacity check passed; verify the creature cost before acting");
}
else
{
UO.Print("Insufficient capacity or unavailable status");
}
return null;
}
dynamic CanAddFollower(dynamic extraSlots)
{
if (Truth(extraSlots < 0) || Truth(UO.Self() == 0))
{
return false;
}
var current = UO.PetsCurrent();
var maximum = UO.GetPetsMax();
if (Truth(maximum <= 0))
{
return false;
}
return extraSlots <= maximum - current;
}
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.RegisterCharacterGetterAliases [GetPetsMax]. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.FollowersMax:bridge.FollowersMax.
Виклик виконує збережений delegate обробника. Метод реєстрації створює цей delegate під час побудови API.
Внутрішній код реалізації, не самостійний скрипт.
() => bridge.FollowersMaxСтворення API: Ці функції створюють реєстрацію API; вони не виконуються заново під час кожного виклику команди.
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.IsNPC(object? objID);Перевіряє завантажений mobile явно переданий serial.
-
objID— Обов'язковий serial/ID конкретного об'єкта: int, hex-рядок або аліас self, backpack, lasttarget, lastobject, lastcontainer, laststatus, finditem, lastcorpse або ім'я AddObject. Це не graphic/type. Невстановлене ім'я дозволяється у 0; ніякий новий target команда не відкриває. Тільки у IsNpc також зареєстровано форму без аргументів: використовується self.
int 1 - завантажений, не віддалений mobile. int 0 - предмет, невідомий serial або віддалений об'єкт. Назва IsNPC не означає «тільки неігровий персонаж»: власний персонаж та інші гравці теж дають 1.
Результат команди — числовий прапор: 1 означає виконану умову, 0 — невиконану. Після var result = команда (...) перевіряйте if (result != 0) або if (result == 0). Збережіть результат одного виклику: повторний виклик може виконати дію знову або прочитати стан, що вже змінився.
- Читається локальна модель клієнта; запитів серверу, очікування та переміщення немає.
- Результат відноситься до моменту читання. Після UO.Wait або іншої дії об'єкт та його прапори можуть змінитися.
- Ігровий диспетчер обробляє IsNpc та IsNPC як варіанти одного імені; у вихідному коді C# використовуйте точне написання публічної форми. За цим результатом не можна надійно відрізнити гравця від NPC; правила такого розрізнення залежить від сервера.
У C# регістр символів імені значущий: UO.IsNPC вимагає аргумент; форма UO.IsNpc() без аргументів вибирає self. Обидва імені перевіряють mobile, включаючи гравців, а не тільки NPC.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
var result = UO.IsNPC(UO.Self());
UO.Print("IsNPC: " + Convert.ToString(result));Параметри та порядок виконання:
- Ця C#-форма потребує аргументу. Власний персонаж також дає 1; це перевірка mobile, а не виключно NPC.
int mobile = UO.IsNPC(UO.Self());
UO.Print($"Self is a loaded mobile: {mobile != 0}");Параметри та порядок виконання:
- Serial береться з lasttarget. Координати читаються лише за наявності відомого клієнта mobile.
return RunScenario();
object? RunScenario()
{
string target = UO.GetSerial("lasttarget");
if (UO.IsNPC(target) == 0)
return false;
UO.Print($"Mobile coordinates: {UO.GetX(target)}, {UO.GetY(target)}, {UO.GetZ(target)}");
return true;
return null;
}Параметри та порядок виконання:
- Персонал, що увійшов у світ, є mobile, а рюкзак — предметом. Результат належить моменту локального читання.
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()
{
int character = UO.IsNPC(UO.Self());
int bag = UO.IsNPC(UO.Backpack());
UO.Print($"Character mobile flag: {character}; backpack mobile flag: {bag}");
return null;
}
}C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
Параметри: objID (Any)
Результат: int / Integer.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.IsNpc:bridge.IsNpc(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
Внутрішній код реалізації, не самостійний скрипт.
case "isnpc": return new InjectionValue(bridge.IsNpc(Arg(0)));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.IsNpc();
int UO.IsNpc(object? id);-
id— Обов'язковий serial/ID конкретного об'єкта: int, hex-рядок або аліас self, backpack, lasttarget, lastobject, lastcontainer, laststatus, finditem, lastcorpse або ім'я AddObject. Це не graphic/type. Невстановлене ім'я дозволяється у 0; ніякий новий target команда не відкриває. Тільки у IsNpc також зареєстровано форму без аргументів: використовується self.
int 1 - завантажений, не віддалений mobile. int 0 - предмет, невідомий serial або віддалений об'єкт. Назва IsNPC не означає «тільки неігровий персонаж»: власний персонаж та інші гравці теж дають 1.
Результат команди — числовий прапор: 1 означає виконану умову, 0 — невиконану. Після var result = команда (...) перевіряйте if (result != 0) або if (result == 0). Збережіть результат одного виклику: повторний виклик може виконати дію знову або прочитати стан, що вже змінився.
- Читається локальна модель клієнта; запитів серверу, очікування та переміщення немає.
- Результат відноситься до моменту читання. Після UO.Wait або іншої дії об'єкт та його прапори можуть змінитися.
- Ігровий диспетчер обробляє IsNpc та IsNPC як варіанти одного імені; у вихідному коді C# використовуйте точне написання публічної форми. За цим результатом не можна надійно відрізнити гравця від NPC; правила такого розрізнення залежить від сервера.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
var result = UO.IsNpc();
UO.Print("IsNpc: " + Convert.ToString(result));Параметри та порядок виконання:
- Форма без аргументів вибирає self. Результат 1/0 не є serial і не відрізняє NPC від гравця.
int mobile = UO.IsNpc();
if (mobile != 0) UO.Print("Self is a loaded mobile");Параметри та порядок виконання:
- Попередньо виберіть lasttarget. Спочатку перевіряється завантаження об'єкта; Класифікація mobile не визначає його ворожість.
return RunScenario();
object? RunScenario()
{
string target = UO.GetSerial("lasttarget");
if (UO.Exists(target) == 0)
UO.Print("Target is not loaded");
else
UO.Print(UO.IsNpc(target) != 0 ? "Mobile: NPC or player" : "Loaded item");
return null;
}Параметри та порядок виконання:
- Чужі хіти можуть бути нормалізовані сервером. Перевірка не вимагає повного статусу.
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()
{
string target = UO.GetSerial("lasttarget");
if (UO.IsNpc(target) != 0)
UO.Print($"Known hits: {UO.GetHP(target)}/{UO.GetMaxHP(target)}");
return null;
}
}C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
Параметри: Немає параметрів.
Результат: int / Integer.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.IsNpc. -
InjectionScript.Runtime.InjectionApiUO.IsNpc:IsNpc(bridge.Self). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Self:bridge.Self.
Внутрішній код реалізації, не самостійний скрипт.
public int IsNpc() => IsNpc(bridge.Self);Параметри: id (Integer/String)
Результат: int / Integer.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.IsNpc. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.IsNpc:bridge.IsNpc(id).
Внутрішній код реалізації, не самостійний скрипт.
public int IsNpc(int id) => bridge.IsNpc(id);Параметри: id (Integer/String)
Результат: int / Integer.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.IsNpc. -
InjectionScript.Runtime.InjectionApiUO.IsNpc:IsNpc(GetObject(id)). -
InjectionScript.Runtime.InjectionApiUO.GetObject:GetObject(id).
Внутрішній код реалізації, не самостійний скрипт.
public int IsNpc(string id) => IsNpc(GetObject(id));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.MobileCanBeRenamed(object? mobID);Перевіряє відомий клієнту ознака можливості перейменувати mobile.
-
mobID— Обов'язковий serial/ID конкретного об'єкта: int, hex-рядок або аліас self, backpack, lasttarget, lastobject, lastcontainer, laststatus, finditem, lastcorpse або ім'я AddObject. Це не graphic/type. Невстановлене ім'я дозволяється у 0; ніякий новий target команда не відкриває. Аргумент обов'язковий; для себе передайте self.
int 1 — завантажений mobile має ознаку IsRenamable. int 0 — ознака відсутня, об'єкт не є mobile, невідомий чи видалений. Це остання серверна роздільна здатність, наприклад для вихованця. Команда не перейменовує об'єкт і не гарантує, що наступний запит буде прийнято сервером.
Результат команди — числовий прапор: 1 означає виконану умову, 0 — невиконану. Після var result = команда (...) перевіряйте if (result != 0) або if (result == 0). Збережіть результат одного виклику: повторний виклик може виконати дію знову або прочитати стан, що вже змінився.
- Читається локальна модель клієнта; запитів серверу, очікування та переміщення немає.
- Результат відноситься до моменту читання. Після UO.Wait або іншої дії об'єкт та його прапори можуть змінитися.
- Це остання серверна роздільна здатність, наприклад для вихованця. Команда не перейменовує об'єкт і не гарантує, що наступний запит буде прийнято сервером.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
var result = UO.MobileCanBeRenamed("self");
UO.Print("MobileCanBeRenamed: " + Convert.ToString(result));Параметри та порядок виконання:
- Аргумент self явно вибирає свого персонажа. state — лише 1/0.
- Це остання серверна роздільна здатність, наприклад для вихованця. Команда не перейменовує об'єкт і не гарантує, що наступний запит буде прийнято сервером.
var state = UO.MobileCanBeRenamed("self");
if (Truth(state))
{
UO.Print("Rename permission flag is present");
}
else
{
UO.Print("Rename permission flag is absent");
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- IsNpc виключає предмет та невідомий об'єкт. target зберігає один serial, а не живе посилання на змінний lasttarget.
- Результат відноситься до поля IsRenamable. Дані оновлюються лише після отримання відповідного стану клієнтом.
return RunScenario();
object? RunScenario()
{
var target = UO.GetSerial("lasttarget");
if (Truth(UO.IsNPC(target)))
{
var state = UO.MobileCanBeRenamed(target);
UO.Print("Selected mobile state 1/0: " + Convert.ToString(state));
}
else
{
UO.Print("No loaded mobile selected");
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- UO.Wait(500) - пауза в мілісекундах. Після неї окремо перевіряється, що mobile ще існує.
- Порівнюються два знімки. Проміжні зміни можуть бути пропущені, і це не безперервна передплата серверних подій.
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()
{
var target = UO.GetSerial("lasttarget");
if (Truth(UO.IsNPC(target)))
{
var before = UO.MobileCanBeRenamed(target);
await Delay(500);
if (Truth(UO.IsNPC(target)))
{
var after = UO.MobileCanBeRenamed(target);
if (Truth(before != after))
{
UO.Print("Flag changed: " + Convert.ToString(before) + " -> " + Convert.ToString(after));
}
}
else
{
UO.Print("Mobile left the local world");
}
}
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.
Параметри: mobID (Any)
Результат: int / Integer.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.CanChangeName:bridge.CanChangeName(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
Внутрішній код реалізації, не самостійний скрипт.
case "mobilecanberenamed": return new InjectionValue(bridge.CanChangeName(Arg(0)));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.Notoriety();Читає репутацію персонажа з моделі клієнта.
Параметрів немає.
int — 0=unknown, 1=innocent, 2=ally, 3=gray, 4=criminal, 5=enemy, 6=murderer, 7= invulnerable. Це код стану, а не hue, karma чи fame. Невідомий mobile дає 0.
- Читаються вже отримані локальні дані. Запит не відкриває статус і не змушує сервер надіслати оновлення. Після смерті, переходу на карту або видалення об'єкта значення можуть змінитися між двома викликами.
- C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
var result = UO.Notoriety();
UO.Print("Notoriety: " + Convert.ToString(result));Параметри та порядок виконання:
- Виклик без аргументів відноситься до self. Репутація персонажа зберігається у value.
- Convert.ToString перетворює число для виведення і не змінює значення результату.
var value = UO.Notoriety();
UO.Print("Notoriety: " + Convert.ToString(value));Параметри та порядок виконання:
- Значення читається одного разу без аргументів. Репутацію персонажа використовується у наведеному розрахунку або умові.
- Числові пороги — приклад умов скрипту, а чи не нові межі клієнта. Поле зберігає серверні одиниці та обмеження, описані вище.
return RunScenario();
object? RunScenario()
{
var value = UO.Notoriety();
if (Truth(value == 3) || Truth(value == 4))
{
UO.Print("Gray or criminal notoriety");
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- Обидва дзвінки без аргументу читають своє поточне значення. 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()
{
var before = UO.Notoriety();
await Delay(1000);
var after = UO.Notoriety();
if (Truth(before != after))
{
UO.Print("Before: " + Convert.ToString(before) + "; after: " + Convert.ToString(after));
}
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.
Параметри: Немає параметрів.
Результат: int / Integer.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases [Notoriety]. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetNotoriety:bridge.GetNotoriety(bridge.Self). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Self:bridge.Self.
Виклик виконує збережений delegate обробника. Метод реєстрації створює цей delegate під час побудови API.
Внутрішній код реалізації, не самостійний скрипт.
() => bridge.GetNotoriety(bridge.Self)Створення API: Ці функції створюють реєстрацію API; вони не виконуються заново під час кожного виклику команди.
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.PetsCurrent();Допомагає заздалегідь вирішити, чи вистачить персонажу місця для наступної прирученої чи покликаної істоти. Followers показує зайняті слоти управління, FollowersMax — їхня спільна межа. Це не число тварин поряд і не команда руху Follow. Читає лічильник статусу свого персонажа: зайняті слоти управління вихованцями.
Параметрів немає.
int — зайняті слоти управління вихованцями, 0..255 у моделі клієнта. 0 може бути реальним значенням, відсутністю даних або відсутнім/знищеним Player. Ця кількість не bool, ID або type: 1 означає одну одиницю, а не успіх. Команда не перебирає об'єкти та не повертає масив.
- Наприклад, зайнято «3» з «5» — вільно «2» слота. Значення 4 може означати чотири істоти по одному слоту, одне на чотири або іншу комбінацію. Для істоти на 2 слота перевірки «зайнято < максимум» недостатньо: потрібно maximum - current> = 2. Вартість конкретної істоти та ліміт визначає сервер; не підставляйте постійне 5 замість FollowersMax.
- 0 не доводить, що вихованець втрачений, помер або відпущений: це може бути порожнім або ще не оновленим статусом. Збільшення лічильника – лише додаткова ознака зміни контролю; воно не визначає, яка істота приручена. Перевіряйте також повідомлення сервера та самого вихованця. Ці слоти не рівні місцям у стайні.
- Команда не сприймає аргументів. Використовуйте точні сигнатури вище.
- Читання в ігровому потоці бере Player. Followers, якщо поточний Player існує і не знищений; інакше 0. Екіпірування не перебирається, бонуси не перераховуються, статус не запитується, очікування поновлення немає. Присутня примара не дорівнює знищеному Player.
- PetsCurrent/Followers повідомляє зайняті слоти управління зі свого статусу type >= 3. Один вихованець може займати кілька слотів; правила для покликаних та приручених істот задає сервер. Це не число видимих mobile, не список ID вихованців і не число тварин поряд.
- CharacterStatus перевіряє обов'язкове тіло до оновлення. Weight є у своєму розширеному статусі, слоти - з type 3, Luck - з type 4, серверний WeightMax - з type 5. Компактний/старий пакет без необов'язкового лічильника залишає його попередній кеш. Новий Player починає з нулів; дзвінок не доводить отримання свіжого статусу.
- Ці функції створюють реєстрацію API; вони не виконуються заново під час кожного виклику команди. C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
- Кожен дзвінок читає локальні дані заново. Змінна зберігає знімок; окремі читання можуть отримати різні оновлення сервера. Ненульовий результат не перевіряє підключення. Нуль може бути значенням чи відсутністю даних.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
var result = UO.PetsCurrent();
UO.Print("PetsCurrent: " + Convert.ToString(result));Параметри та порядок виконання:
- current - зайнято, maximum - межа, freeSlots - різниця. При невідомій/нульовій межі або суперечливих даних приклад припиняється, не стверджуючи, що місце є вільним. Команда лише читає останній статус, не вимагає нове оновлення.
var current = UO.PetsCurrent();
var maximum = UO.FollowersMax();
if (Truth(UO.Self() == 0) || Truth(maximum <= 0) || Truth(current > maximum))
{
UO.Print("Follower status is unavailable or inconsistent");
return null;
}
var freeSlots = maximum - current;
UO.Print("Control slots: " + Convert.ToString(current) + "/" + Convert.ToString(maximum));
UO.Print("Free slots: " + Convert.ToString(freeSlots));
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- Спочатку виберіть потрібну тварину, щоб її ID був у lasttarget. requiredSlots=2 — налаштування прикладу, замініть її реальною вартістю цієї істоти на вашому сервері. При нестачі місця не ставиться target і не викликається навички. Інакше черга мети готується до єдиного аргументу UseSkill("Animal Taming"). Початок спроби не гарантує успіху: важливі навички, дальність, приручення та відповідь сервера.
return RunScenario();
object? RunScenario()
{
var requiredSlots = 2;
var current = UO.PetsCurrent();
var maximum = UO.FollowersMax();
if (Truth(UO.Self() == 0) || Truth(maximum <= 0) || Truth(maximum - current < requiredSlots))
{
UO.Print("Not enough known control slots");
return null;
}
var animal = UO.LastTarget();
if (Truth(animal == 0))
{
UO.Print("Select the animal first");
return null;
}
UO.WaitTargetObject(animal);
UO.UseSkill("Animal Taming");
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- CanAddFollower — повністю оголошений помічник користувача, не нова UO-команда. Він повертає 1/true за достатнього кешованого ліміту, інакше 0/false. Параметр extraSlots — вартість істоти, що додається, не її type/ID. 2 - приклад; функція не приручає та не закликає. Перевірку слід повторити безпосередньо перед дії.
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(CanAddFollower(2)))
{
UO.Print("Capacity check passed; verify the creature cost before acting");
}
else
{
UO.Print("Insufficient capacity or unavailable status");
}
return null;
}
dynamic CanAddFollower(dynamic extraSlots)
{
if (Truth(extraSlots < 0) || Truth(UO.Self() == 0))
{
return false;
}
var current = UO.PetsCurrent();
var maximum = UO.PetsMax();
if (Truth(maximum <= 0))
{
return false;
}
return extraSlots <= maximum - current;
}
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.Followers:bridge.Followers.
Внутрішній код реалізації, не самостійний скрипт.
case "petscurrent": return new InjectionValue(bridge.Followers);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.PetsMax();Допомагає заздалегідь вирішити, чи вистачить персонажу місця для наступної прирученої чи покликаної істоти. Followers показує зайняті слоти управління, FollowersMax — їхня спільна межа. Це не число тварин поряд і не команда руху Follow. Читає лічильник статусу свого персонажа: максимум слотів управління вихованцями.
Параметрів немає.
int — максимум слотів управління вихованцями, 0..255 у моделі клієнта. 0 може бути реальним значенням, відсутністю даних або відсутнім/знищеним Player. Ця кількість не bool, ID або type: 1 означає одну одиницю, а не успіх. Команда не перебирає об'єкти та не повертає масив.
- Наприклад, зайнято «3» з «5» — вільно «2» слота. Значення 4 може означати чотири істоти по одному слоту, одне на чотири або іншу комбінацію. Для істоти на 2 слота перевірки «зайнято < максимум» недостатньо: потрібно maximum - current> = 2. Вартість конкретної істоти та ліміт визначає сервер; не підставляйте постійне 5 замість FollowersMax.
- 0 не доводить, що вихованець втрачений, помер або відпущений: це може бути порожнім або ще не оновленим статусом. Збільшення лічильника – лише додаткова ознака зміни контролю; воно не визначає, яка істота приручена. Перевіряйте також повідомлення сервера та самого вихованця. Ці слоти не рівні місцям у стайні.
- Команда не сприймає аргументів. Використовуйте точні сигнатури вище.
- Читання в ігровому потоці бере Player. FollowersMax, якщо поточний Player існує і не знищений; інакше 0. Екіпірування не перебирається, бонуси не перераховуються, статус не запитується, очікування поновлення немає. Присутня примара не дорівнює знищеному Player.
- PetsMax/FollowersMax повідомляє загальну дозволену сервером межу слотів зі статусу type >= 3, а не вільні слоти. Зайнятих слотів може бути більше межі. Вільну ємність рахуйте як maximum - current, замінюючи негативний результат на 0. Команда нічого не відпускає, не приручає та не закликає.
- CharacterStatus перевіряє обов'язкове тіло до оновлення. Weight є у своєму розширеному статусі, слоти - з type 3, Luck - з type 4, серверний WeightMax - з type 5. Компактний/старий пакет без необов'язкового лічильника залишає його попередній кеш. Новий Player починає з нулів; дзвінок не доводить отримання свіжого статусу.
- Ці функції створюють реєстрацію API; вони не виконуються заново під час кожного виклику команди. C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
- Кожен дзвінок читає локальні дані заново. Змінна зберігає знімок; окремі читання можуть отримати різні оновлення сервера. Ненульовий результат не перевіряє підключення. Нуль може бути значенням чи відсутністю даних.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
var result = UO.PetsMax();
UO.Print("PetsMax: " + Convert.ToString(result));Параметри та порядок виконання:
- current - зайнято, maximum - межа, freeSlots - різниця. При невідомій/нульовій межі або суперечливих даних приклад припиняється, не стверджуючи, що місце є вільним. Команда лише читає останній статус, не вимагає нове оновлення.
var current = UO.Followers();
var maximum = UO.PetsMax();
if (Truth(UO.Self() == 0) || Truth(maximum <= 0) || Truth(current > maximum))
{
UO.Print("Follower status is unavailable or inconsistent");
return null;
}
var freeSlots = maximum - current;
UO.Print("Control slots: " + Convert.ToString(current) + "/" + Convert.ToString(maximum));
UO.Print("Free slots: " + Convert.ToString(freeSlots));
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- Спочатку виберіть потрібну тварину, щоб її ID був у lasttarget. requiredSlots=2 — налаштування прикладу, замініть її реальною вартістю цієї істоти на вашому сервері. При нестачі місця не ставиться target і не викликається навички. Інакше черга мети готується до єдиного аргументу UseSkill("Animal Taming"). Початок спроби не гарантує успіху: важливі навички, дальність, приручення та відповідь сервера.
return RunScenario();
object? RunScenario()
{
var requiredSlots = 2;
var current = UO.Followers();
var maximum = UO.PetsMax();
if (Truth(UO.Self() == 0) || Truth(maximum <= 0) || Truth(maximum - current < requiredSlots))
{
UO.Print("Not enough known control slots");
return null;
}
var animal = UO.LastTarget();
if (Truth(animal == 0))
{
UO.Print("Select the animal first");
return null;
}
UO.WaitTargetObject(animal);
UO.UseSkill("Animal Taming");
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- CanAddFollower — повністю оголошений помічник користувача, не нова UO-команда. Він повертає 1/true за достатнього кешованого ліміту, інакше 0/false. Параметр extraSlots — вартість істоти, що додається, не її type/ID. 2 - приклад; функція не приручає та не закликає. Перевірку слід повторити безпосередньо перед дії.
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(CanAddFollower(2)))
{
UO.Print("Capacity check passed; verify the creature cost before acting");
}
else
{
UO.Print("Insufficient capacity or unavailable status");
}
return null;
}
dynamic CanAddFollower(dynamic extraSlots)
{
if (Truth(extraSlots < 0) || Truth(UO.Self() == 0))
{
return false;
}
var current = UO.PetsCurrent();
var maximum = UO.PetsMax();
if (Truth(maximum <= 0))
{
return false;
}
return extraSlots <= maximum - current;
}
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.FollowersMax:bridge.FollowersMax.
Внутрішній код реалізації, не самостійний скрипт.
case "petsmax": return new InjectionValue(bridge.FollowersMax);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.Rename(object? mobile, object? newName);Запитує зміну імені персонажа/вихованця.
-
mobile— Serial/ID об'єкта: int, числова/hex-рядок або встановлений аліас, наприклад "lasttarget". Це не graphic/type. До дії перевіряйте завантажений об'єкт. -
newName— Текст через ToString; зберігається як переданий.
void - значення немає. Викликайте окремим рядком; завершення не підтверджує дію сервера.
- Порядок – serial, потім нове ім'я. Bridge.RenameMobile викликає GameActions.Rename(serial, name). API не перевіряє CanChangeName і не змінює локальне Name сам.
- Сервер перевіряє право на перейменування. Для вихованця спочатку перевірте MobileCanBeRenamed; запит не гарантує ухвалення імені.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Команда викликається окремим рядком. Повідомлення перед нею показує початок виклику, а не підтвердження дії сервера.
UO.Print("Calling UO.Rename");
UO.Rename(UO.GetSerial("lasttarget"), "Companion");Параметри та порядок виконання:
- Запитує зміну імені персонажа/вихованця.
var id = UO.GetSerial("lasttarget");
if (Truth(UO.MobileCanBeRenamed(id)))
{
UO.Rename(id, "Companion");
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- Порядок – serial, потім нове ім'я. Bridge.RenameMobile викликає GameActions.Rename(serial, name). API не перевіряє CanChangeName і не змінює локальне Name сам.
return RunScenario();
object? RunScenario()
{
var id = UO.GetSerial("lasttarget");
if (Truth(UO.Exists(id)) && Truth(UO.MobileCanBeRenamed(id)))
{
UO.Rename(id, "Guardian");
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- Сервер перевіряє право на перейменування. Для вихованця спочатку перевірте MobileCanBeRenamed; запит не гарантує ухвалення імені.
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()
{
RenamePet(UO.GetSerial("lasttarget"), "Companion");
return null;
}
void RenamePet(dynamic id, dynamic name)
{
if (Truth(UO.MobileCanBeRenamed(id)) && Truth(Len(name) > 0))
{
UO.Rename(id, name);
}
}
int Len(object? value) => Convert.ToString(value)?.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.
Параметри: mobile (Any), newName (Any)
Результат: void / Unit.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.RenameMobile:bridge.RenameMobile(Arg(0, bridge.LastTarget), Text(1)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Arg:Arg(0, bridge.LastTarget). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Text:Text(1). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.LastTarget:bridge.LastTarget.
Внутрішній код реалізації, не самостійний скрипт.
case "rename": bridge.RenameMobile(Arg(0, bridge.LastTarget), Text(1)); break;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.RenameMobile(object? mobID, object? newName);Запитує зміну імені персонажа/вихованця.
-
mobID— Serial/ID об'єкта: int, числова/hex-рядок або встановлений аліас, наприклад "lasttarget". Це не graphic/type. До дії перевіряйте завантажений об'єкт. -
newName— Текст через ToString; зберігається як переданий.
void - значення немає. Викликайте окремим рядком; завершення не підтверджує дію сервера.
- Порядок – serial, потім нове ім'я. Bridge.RenameMobile викликає GameActions.Rename(serial, name). API не перевіряє CanChangeName і не змінює локальне Name сам.
- Сервер перевіряє право на перейменування. Для вихованця спочатку перевірте MobileCanBeRenamed; запит не гарантує ухвалення імені.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Команда викликається окремим рядком. Повідомлення перед нею показує початок виклику, а не підтвердження дії сервера.
UO.Print("Calling UO.RenameMobile");
UO.RenameMobile(UO.GetSerial("lasttarget"), "Companion");Параметри та порядок виконання:
- Запитує зміну імені персонажа/вихованця.
var id = UO.GetSerial("lasttarget");
if (Truth(UO.MobileCanBeRenamed(id)))
{
UO.RenameMobile(id, "Companion");
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- Порядок – serial, потім нове ім'я. Bridge.RenameMobile викликає GameActions.Rename(serial, name). API не перевіряє CanChangeName і не змінює локальне Name сам.
return RunScenario();
object? RunScenario()
{
var id = UO.GetSerial("lasttarget");
if (Truth(UO.Exists(id)) && Truth(UO.MobileCanBeRenamed(id)))
{
UO.RenameMobile(id, "Guardian");
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- Сервер перевіряє право на перейменування. Для вихованця спочатку перевірте MobileCanBeRenamed; запит не гарантує ухвалення імені.
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()
{
RenamePet(UO.GetSerial("lasttarget"), "Companion");
return null;
}
void RenamePet(dynamic id, dynamic name)
{
if (Truth(UO.MobileCanBeRenamed(id)) && Truth(Len(name) > 0))
{
UO.RenameMobile(id, name);
}
}
int Len(object? value) => Convert.ToString(value)?.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.
Параметри: mobID (Any), newName (Any)
Результат: void / Unit.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.RenameMobile:bridge.RenameMobile(Arg(0), Text(1)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(1).
Внутрішній код реалізації, не самостійний скрипт.
case "renamemobile": bridge.RenameMobile(Arg(0), Text(1)); return InjectionValue.Unit;ClassicUO — Bad Newbie & C# Scripts IDE