Repository navigation
UO Topic client ui
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
Головна · C# · IDE · Команди UO · За абеткою · Приклади · Мови
Повідомлення в клієнті, службові вікна, відображення об’єктів і відкриття редактора скриптів. Локальне повідомлення бачить користувач цього клієнта; для розмови в грі використовуйте команди розділу «Розмова та чат».
| Тема | Команди та пояснення |
|---|---|
| Повідомлення в журналі | UO.Print |
| Повідомлення клієнта | UO.ClientPrint |
| Інформаційне вікно | UO.FillInfoWindow · UO.ClearInfoWindow · UO.FillNewWindow |
| Текстове вікно | UO.TextOpen · UO.TextPrint · UO.TextClear · UO.TextClose |
| Прості ігрові вікна | UO.CloseSimpleGump |
| Закриття вікна клієнта | UO.CloseClientUIWindow |
| Прозорість навколо персонажа | UO.CircleTrans |
| Відображення висоти | UO.SetShowZ |
| Відкриття редактора | UO.OpenIDE |
UO.Print · UO.ClientPrint · UO.ClientPrintEx · UO.CharPrint · UO.ColorPrint · UO.ConsolePrint · UO.ServerPrint · UO.SetSilentMode · UO.ConColor · UO.FontColor
UO.ClearInfoWindow · UO.FillInfoWindow · UO.FillNewWindow · UO.TextOpen · UO.TextClear · UO.TextClose · UO.TextPrint · UO.CloseSimpleGump · UO.CloseClientUIWindow · UO.ShowJournal · UO.OpenIDE · UO.HelpRequest · UO.ActivateHandle · UO.CloseHandle · UO.Snap
UO.Hide · UO.ClientHide · UO.ClientMarkChar · UO.CircleTrans · UO.SetShowZ · UO.Morph
UO.AddFigure · UO.UpdateFigure · UO.RemoveFigure · UO.ClearFigures
Нижче наведено короткі приклади. У повному описі кожної команди є параметри, результат, обмеження та кілька самостійних скриптів: прямий код, варіант із функцією та варіант із класом.
Параметри, результат та всі сценарії
var processed = 12;
UO.Print("Processed item entries: " + Convert.ToString(processed), 0x0044);Параметри, результат та всі сценарії
UO.FillInfoWindow("Status ready");Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.ActivateHandle();Надсилає Windows/SDL запит підняти вікно поточного клієнта на передній план. Аргументів та результату немає. Це команда керування вікном, а не застосування предмета, навички чи мети; фактичний фокус залежить від віконної системи.
Параметрів немає.
void. Виклик лише запитує активацію вікна; він не підтверджує, що віконна система перевела його на передній план.
- Клієнт піднімає вікно ігрового представлення через SDL. Команда не надсилає ігровий пакет і не виконує дії у світі. Згорнуте вікно або обмеження віконної системи можуть завадити фактичному фокусу.
- RequireGameView вимагає Client.Game. Якщо графічне вікно ClassicUO не відкрито, bridge викидає InvalidOperationException. SDL_RaiseWindow запитує підняття існуючого вікна; рішення про фокус залишається у віконної системи.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Команда викликається окремим рядком. Повідомлення перед нею показує початок виклику, а не підтвердження дії сервера.
UO.Print("Calling UO.ActivateHandle");
UO.ActivateHandle();Параметри та порядок виконання:
- Запросити виведення вікна клієнта на передній план.
UO.ActivateHandle();Параметри та порядок виконання:
- Не вимагати фокус вікна до підключення до гри.
return RunScenario();
object? RunScenario()
{
if (Truth(UO.Connected()))
{
UO.ActivateHandle();
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- Обернути дію вікном у процедуру, що повторно використовується.
- Виконати запит за допомогою допоміжної процедури.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
RunAction();
return null;
}
void RunAction()
{
UO.ActivateHandle();
}
}C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
Параметри: Немає параметрів.
Результат: void / Unit.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ActivateHandle. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.ActivateHandle:bridge.ActivateHandle().
Внутрішній код реалізації, не самостійний скрипт.
public void ActivateHandle() => bridge.ActivateHandle();Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.AddFigure(object? figure);Додає локальну фігуру на карту світу ClassicUO та повертає її ідентифікатор. Фігура зберігається на стороні клієнта, ігровий сервер не повідомляється.
int — позитивний ID доданої фігури. 0 повертається при невірних даних фігури або відмови карти додати її. Передавайте отриманий ID у UO.UpdateFigure або UO.RemoveFigure.
- Створює локальну фігуру для
WorldMapGump. Підтримуються лінія, еліпс, прямокутник, стрілка напряму та текст. КоординатиfcWorldнаслідують перетворення та масштаб карти;fcScreenвідраховуються щодо вікна картки. Відображаються фігури для вибраного facet.
Формат масиву: [kind, coord, x1, y1, x2, y2, brushColor, brushStyle, color, worldNum, text]. ?kind?: ?0? лінія, ?1? еліпс, ?2? прямокутник, ?3? стрілка напряму, ?4? текст. coord: 0 world, 1 screen. color використовує порядок байтів Delphi TColor (0x00BBGGRR). Для стрілки зі світовими координатами та x2=0,y2=0 початковою точкою служить поточний персонаж. Історичні brushColor та brushStyle приймаються для сумісності; візуальне заливання не гарантує повного збігу з Delphi.
Фігура залишається в клієнтській колекції до видалення/очищення або завершення процесу. Зміна facet тільки приховує фігури, що належать до іншого facet.
- Приймається мінімум 9 полів. Якщо worldNum немає, використовується поточна карта; без тексту береться порожній рядок. kind обмежений 0..4, coord - 0..1; інші значення дають 0. Негативний worldNum дозволяє відображення на будь-якому facet. Лічильник ID збільшується до перевірки SetYokoMapFigure, тому відкинута фігура може залишити перепустку в ID. Колекція WorldMapGump статична у процесі; Звичайні скрипти одного manager використовують загальну persistent runtime state.
- brushColor та brushStyle зберігаються в записі, але поточний renderer їх не використовує. Лінія та прямокутник малюються контуром; еліпс складається з 32 відрізків. Підпис text малюється лише для kind=4; інші kind не виводять її. color визначає контур у форматі COLORREF 0x00BBGGRR.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
object? result = UO.AddFigure(new object?[] { 0, 0, UO.X(), UO.Y(), UO.X() + 3, UO.Y(), 0, 0, 255 });
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Параметри та порядок виконання:
- kind = 2 малює червоний контур. Поле text зі значенням Area зберігається, але цього kind підпис не малюється; текст виводить kind=4.
dynamic[] fig = new dynamic[checked((int)(11) + 1)];
fig[0] = 2;
fig[1] = 0;
fig[2] = UO.GetX("self")-3;
fig[3] = UO.GetY("self")-3;
fig[4] = UO.GetX("self")+3;
fig[5] = UO.GetY("self")+3;
fig[6] = 0;
fig[7] = 1;
fig[8] = 255;
fig[9] = UO.WorldNum();
fig[10] = "Area";
var figureId = UO.AddFigure(fig);Параметри та порядок виконання:
- При world-координатах і x2 = 0, y2 = 0 початок стрілки береться зі становища персонажа при малюванні. text із значенням East для kind=3 не виводиться.
return RunScenario();
object? RunScenario()
{
dynamic[] dirFig = new dynamic[checked((int)(11) + 1)];
dirFig[0] = 3;
dirFig[1] = 0;
dirFig[2] = UO.GetX("self") + 10;
dirFig[3] = UO.GetY("self");
dirFig[4] = 0;
dirFig[5] = 0;
dirFig[6] = 0;
dirFig[7] = 1;
dirFig[8] = 65280;
dirFig[9] = UO.WorldNum();
dirFig[10] = "East";
var arrowId = UO.AddFigure(dirFig);
return null;
}Параметри та порядок виконання:
- Створити синю лінію між двома точками поточного facet.
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()
{
dynamic[] lineFig = new dynamic[checked((int)(11) + 1)];
lineFig[0] = 0;
lineFig[1] = 0;
lineFig[2] = UO.GetX("self");
lineFig[3] = UO.GetY("self");
lineFig[4] = UO.GetX("self") + 8;
lineFig[5] = UO.GetY("self");
lineFig[6] = 0;
lineFig[7] = 1;
lineFig[8] = 16711680;
lineFig[9] = UO.WorldNum();
lineFig[10] = "";
var lineId = UO.AddFigure(lineFig);
return null;
}
}C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
Параметри: figure (Any)
Результат: dynamic / Any.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::TryMapFigureArg:TryMapFigureArg(0, out int[] figure, out string figureText). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetMapFigure:bridge.SetMapFigure(id, figure[0], figure[1], figure[2], figure[3], figure[4], figure[5], figure[6], figure[7], figure[8], figure[9], figureText). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::SerializeMapFigure:SerializeMapFigure(figure, figureText).
Внутрішній код реалізації, не самостійний скрипт.
case "addfigure":
{
if (!TryMapFigureArg(0, out int[] figure, out string figureText))
return InjectionValue.Zero;
int id = state.NextMapFigureId++;
if (bridge.SetMapFigure(id, figure[0], figure[1], figure[2], figure[3], figure[4], figure[5], figure[6], figure[7], figure[8], figure[9], figureText) == 0)
return InjectionValue.Zero;
state.MapFigures[id] = SerializeMapFigure(figure, figureText);
return new InjectionValue(id);
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.CharPrint(object? color, object? msg);
void UO.CharPrint(object? id, object? color, object? msg);Створює видимий лише вам напис над завантаженим об’єктом: наприклад, позначку вибраної цілі або попередження над власним персонажем. Це не мовлення персонажа й не повідомлення внизу ігрового вікна.
-
id— Serial об'єкта, а не graphic/type або координата. UO.CharPrint у формі з трьома аргументами розуміє також self, lasttarget та збережені імена об'єктів. Для SenderID у UO.ClientPrintEx використовуйте число, наприклад UO.Hex2Int(UO.GetSerial("self")); рядкові псевдоніми там не дозволяються як об'єкти. -
color- UO hue, а не RGB. Беруться молодші 16 біт числа; 0x0044 - приклад. -1 перетворюється на 0xFFFF, а не означає «будь-який колір». Колір ConColor тут не використовується.
Виклик методу з типом, що повертається void пишеться як самостійний оператор C#; привласнювати чи перевіряти результат не можна. Завершення оператора не є підтвердженням сервера.
- Об'єкт повинен існувати у завантаженому світі та не бути віддаленим; пустий текст або відсутня мета не малюються. Команда не завантажує об'єкт із сервера. Сервер та інші гравці цей напис не отримують. Без ігрового вікна напис неможливо побачити у світі; це не заміна системного журналу менеджера.
- UO.CharPrint(color, msg) вибирає свого персонажа. UO.CharPrint(id, color, msg) вибирає вказаний об'єкт. Обидві форми використовують шрифт 3. UO.ClientPrintEx вимагає всіх чотирьох аргументів у порядку SenderID, Color, Font, Text.
- Номер шрифту UO, не розмір у пунктах та не ім'я Windows-шрифту. Число обмежується діапазоном 0..255; Наявність конкретного шрифту залежить від файлів гри. У прикладі 3 - звичайний номер шрифту.
- GetSerial повертає hex-рядок. Hex2Int перетворює її на int перед порівнянням з числом 0; рядок "0x00000000" не можна перевіряти як число "0".
- UO.Print · UO.CharPrint · UO.ClientPrintEx · UO.AddToSystemJournalEx
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Команда викликається окремим рядком. Повідомлення перед нею показує початок виклику, а не підтвердження дії сервера.
UO.Print("Calling UO.CharPrint");
UO.CharPrint(0x0044, "Ready");Параметри та порядок виконання:
- Перша форма CharPrint вміщує Ready над своїм персонажем. ClientPrintEx отримує його serial через UO.Hex2Int(UO.GetSerial("self")) і явно передає шрифт 3. Напис не містить жодного ігрового режиму.
- GetSerial повертає hex-рядок. Hex2Int перетворює її на int перед порівнянням з числом 0; рядок "0x00000000" не можна перевіряти як число "0".
UO.CharPrint(0x0044, "Ready");Параметри та порядок виконання:
- target - serial останньої мети. Нуль означає, що в цьому прикладі відзначати нема кого. Selected target — лише локальний підпис: ціль не атакується і активний серверний таргет не заповнюється.
- GetSerial повертає hex-рядок. Hex2Int перетворює її на int перед порівнянням з числом 0; рядок "0x00000000" не можна перевіряти як число "0".
return RunScenario();
object? RunScenario()
{
var target = UO.Hex2Int(UO.GetSerial("lasttarget"));
if (Truth(target != 0))
{
UO.CharPrint(target, 0x0044, "Selected target");
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- ShowWeightWarning повністю оголошено нижче. Вона порівнює вагу з позитивною відомою межею і пише над своїм персонажем тільки при перевантаженні; нічого не викидає. Convert.ToString перетворює вагу на текст.
- GetSerial повертає hex-рядок. Hex2Int перетворює її на int перед порівнянням з числом 0; рядок "0x00000000" не можна перевіряти як число "0".
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
ShowWeightWarning(UO.Weight(), UO.MaxWeight());
return null;
}
void ShowWeightWarning(dynamic weight, dynamic maximum)
{
if (Truth(maximum > 0) && Truth(weight >= maximum))
{
UO.CharPrint(UO.Hex2Int(UO.GetSerial("self")), 0x0044, "Too heavy: " + Convert.ToString(weight));
}
}
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.
Параметри: color (Integer/String), msg (String)
Результат: void / Unit.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.CharPrint. -
InjectionScript.Runtime.InjectionApiUO.CharPrint:CharPrint(bridge.Self, color, msg). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Self:bridge.Self.
Внутрішній код реалізації, не самостійний скрипт.
public void CharPrint(int color, string msg) => CharPrint(bridge.Self, color, msg);Параметри: color (Integer/String), msg (String)
Результат: void / Unit.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.CharPrint. -
InjectionScript.Runtime.InjectionApiUO.CharPrint:CharPrint(bridge.Self, NumberConversions.ToInt(color), msg). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(color). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Self:bridge.Self.
Внутрішній код реалізації, не самостійний скрипт.
public void CharPrint(string color, string msg) => CharPrint(bridge.Self, NumberConversions.ToInt(color), msg);Параметри: id (Any/Integer), color (Any/Integer), msg (Any/String)
Результат: void / Unit.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.CharPrint. -
InjectionScript.Runtime.InjectionApiUO.CharPrint:CharPrint(GetObject(id), NumberConversions.ToInt(color), (string)msg). -
InjectionScript.Runtime.InjectionApiUO.GetObject:GetObject(id). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(color).
Внутрішній код реалізації, не самостійний скрипт.
public void CharPrint(InjectionValue id, InjectionValue color, InjectionValue msg)
=> CharPrint(GetObject(id), NumberConversions.ToInt(color), (string)msg);Параметри: id (Any/Integer), color (Any/Integer), msg (Any/String)
Результат: void / Unit.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.CharPrint. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.CharPrint:bridge.CharPrint(id, color, msg).
Внутрішній код реалізації, не самостійний скрипт.
public void CharPrint(int id, int color, string msg) => bridge.CharPrint(id, color, msg);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.CircleTrans();
void UO.CircleTrans(object? enabled);Читає або змінює налаштування прозорості активного профілю.
-
enabled— int: 0 вимикає, будь-яке ненульове значення включає. Без аргументу налаштування лише читається.
Без аргументу int 1/0; Форма з аргументом повертає null.
- Читання за відсутності профілю дає 0. Запис за відсутності профілю друкує помилку; за наявності профілю змінює UseCircleOfTransparency та зберігає профіль. Це візуальне налаштування клієнта.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
var result = UO.CircleTrans();
UO.Print("CircleTrans: " + Convert.ToString(result));Параметри та порядок виконання:
- Читання не змінює профіль.
var enabled = UO.CircleTrans();
UO.Print(Convert.ToString(enabled));Параметри та порядок виконання:
- Запис зберігає увімкнене коло прозорості.
return RunScenario();
object? RunScenario()
{
UO.CircleTrans(1);
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()
{
var previous = UO.CircleTrans();
UO.CircleTrans(0);
UO.CircleTrans(previous);
return null;
}
}C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
Параметри: Немає параметрів.
Результат: int / Integer.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.CircleTrans. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.CircleTrans:bridge.CircleTrans().
Внутрішній код реалізації, не самостійний скрипт.
public int CircleTrans() => bridge.CircleTrans();Параметри: enabled (Integer)
Результат: void / Unit.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.CircleTrans. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.CircleTrans:bridge.CircleTrans(enabled).
Внутрішній код реалізації, не самостійний скрипт.
public void CircleTrans(int enabled) => bridge.CircleTrans(enabled);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.ClearFigures();Видаляє всі користувача фігури карти та їх записи runtime.
Параметрів немає.
void - значення, що повертається немає.
- Очищає WorldMapGump.ClearYokoMapFigures та state.MapFigures. Базова карта та UserStatics не змінюються.
- ClearYokoMapFigures очищає статичну колекцію WorldMapGump у процесі, потім команда очищає MapFigures свого runtime state. Ця область очищення визначається загальною клієнтською колекцією, а не тільки ім'ям скрипта, що викликає.
- Звичайні мітки користувача картки (userMarkers.usr) зберігаються.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Команда викликається окремим рядком. Повідомлення перед нею показує початок виклику, а не підтвердження дії сервера.
UO.Print("Calling UO.ClearFigures");
UO.ClearFigures();Параметри та порядок виконання:
- Видаляє всі користувача фігури карти та їх записи runtime.
UO.ClearFigures();Параметри та порядок виконання:
- Створити локальну фігуру поточної карти, потім видалити всі фігури користувача.
return RunScenario();
object? RunScenario()
{
dynamic[] figure = new dynamic[checked((int)(9) + 1)];
figure[0] = 0;
figure[1] = 0;
figure[2] = UO.GetX();
figure[3] = UO.GetY();
figure[4] = figure[2] + 1;
figure[5] = figure[3] + 1;
figure[6] = 0;
figure[7] = 0;
figure[8] = 0;
figure[9] = UO.WorldNum();
var figureId = UO.AddFigure(figure);
UO.ClearFigures();
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()
{
UO.ClearFigures();
UO.ClearFigures();
return null;
}
}C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
Параметри: Немає параметрів.
Результат: void / Unit.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.ClearMapFigures:bridge.ClearMapFigures().
Внутрішній код реалізації, не самостійний скрипт.
case "clearfigures":
bridge.ClearMapFigures();
state.MapFigures.Clear();
return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.ClearInfoWindow();Очищає рядки клієнтського текстового вікна.
Параметрів немає.
void - значення, що повертається немає.
- TextClear очищує буфер; якщо вікно було відкрито, оновлює його пустим вмістом. Вікно не обов'язково зачиняється.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Команда викликається окремим рядком. Повідомлення перед нею показує початок виклику, а не підтвердження дії сервера.
UO.Print("Calling UO.ClearInfoWindow");
UO.ClearInfoWindow();Параметри та порядок виконання:
- Очищає рядки клієнтського текстового вікна.
UO.ClearInfoWindow();Параметри та порядок виконання:
- Очистити раніше доданий рядок текстового вікна.
return RunScenario();
object? RunScenario()
{
UO.FillInfoWindow("status");
UO.ClearInfoWindow();
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()
{
UO.ClearInfoWindow();
UO.ClearInfoWindow();
return null;
}
}C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
Параметри: Немає параметрів.
Результат: void / Unit.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.TextClear:bridge.TextClear().
Внутрішній код реалізації, не самостійний скрипт.
case "clearinfowindow": bridge.TextClear(); return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.ClientHide(object? objID);Приховує по serial завантажений предмет або інший персонаж тільки у відображенні ClassicUO, включаючи контейнери, paperdoll і одягнені речі.
-
objID- Serial конкретного завантаженого об'єкта: int або hex/десятковий рядок. Це не graphic/type. Для збереженого імені використовуйте GetSerial(name). Параметр обов'язковий; приціл не з'являється.
int 1 після передачі команди bridge. Історичний результат не підтверджує наявність об'єкта: навіть для невідомого serial або self bridge виводить відмову, а runtime повертає 1. Не використовуйте це значення як перевірку успішного приховання. У метаданих сумісності вказано object?.
- Потрібно рівно один аргумент. Для вибору мишею використовуйте UO.Hide().
- Hide(serial) діє відразу на відомий завантажений об'єкт. Передавайте serial конкретної стопки/предмета, а чи не graphic/type. Вибраний стос ховається повністю незалежно від Amount.
- Предмет залишається в контейнері: кількість, власник, вміст та серверний стан не змінюються. FindType/GetContent, як і раніше, можуть його знайти. Приховування не є фільтром пошуку, перенесенням, видаленням, навичкою Hiding або серверною невидимістю.
- Звичайний контейнер, торгове вікно та сітка видобутку не малюють прихований предмет і не приймають кліки/перетягування. Прапор зберігається при перебудові та повторному відкриванні вікна, поки використовується той самий завантажений об'єкт.
- Надіта річ зникає з paperdoll, з маленького слота і зображення персонажа. Вона залишається одягненою: шар, броня та стан на сервері не змінюються. Прихована роба більше не перекриває нижній одяг. Зображення персонажа в менеджері оновлюється тим самим прапором; список цього екіпірування залишається доступним.
- Власного персонажа, землю та статику Hide не приховує. Неіснуючий serial дає повідомлення. Якщо приховати саму сумку, це не закриває відкрите вікно її вмісту і не приховує кожен вкладений предмет автоматично.
- Окремої команди Unhide у поточному API немає. Приховування належить завантаженому екземпляру об'єкта: його видалення зі світу клієнта та нове завантаження (наприклад, при перепідключенні) скидають прапор. Просте закриття/відкриття скрині не гарантований спосіб повернути предмет.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
object? result = UO.ClientHide(0x40001234);
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Параметри та порядок виконання:
- ObjID - конкретний предмет, який не його type. Він зникає з відображення, залишаючись у контейнері.
var item = 0x40001234;
if (Truth(UO.Exists(item)))
{
UO.ClientHide(item);
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- FindType шукає graphic 0x0EED будь-якого кольору в backpack. У ClientHide передається повернутий serial; весь стос ховається цілком.
return RunScenario();
object? RunScenario()
{
var item = UO.FindType(0x0EED, -1, "backpack");
if (Truth(item != ""))
{
UO.ClientHide(item);
UO.Print("Amount is still: " + Convert.ToString(UO.GetQuantity(item)));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- GetSerial дозволяє раніше збережене ім'я decoration. Предмет потрібно завантажити, наприклад відкрити його контейнер.
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 item = UO.GetSerial("decoration");
if (Truth(UO.Exists(item)) && Truth(item != UO.GetSerial("self")))
{
UO.ClientHide(item);
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
Параметри: objID (Any)
Результат: dynamic / Any.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.ClientHide:bridge.ClientHide(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
Внутрішній код реалізації, не самостійний скрипт.
case "clienthide": bridge.ClientHide(Arg(0)); return InjectionValue.True;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.ClientMarkChar(object? actionIndex, object? id);Оновлює клієнтські позначки LastTarget та/або LastAttack.
-
actionIndex- int: 1 - LastTarget; 2 - LastAttack; 3 - обидві. Інші значення друкують помилку. -
id— Serial об'єкта або підтримуване ім'я self/backpack/lasttarget/збереженого об'єкта; числові рядки та 0x-рядки дозволяються runtime.
void - значення, що повертається немає.
- ClientMarkChar змінює збережені цілі, не відправляючи атаку і не відповідаючи на серверний target. Наступні команди можуть використовувати нову позначку.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Команда викликається окремим рядком. Повідомлення перед нею показує початок виклику, а не підтвердження дії сервера.
UO.Print("Calling UO.ClientMarkChar");
UO.ClientMarkChar(1, "self");Параметри та порядок виконання:
- Збереженою метою стає свій персонаж.
UO.ClientMarkChar(1,"self");Параметри та порядок виконання:
- Остання мета використовується для обох клієнтських позначок.
return RunScenario();
object? RunScenario()
{
var target = UO.LastTarget();
if (Truth(UO.Exists(target)))
{
UO.ClientMarkChar(3, target);
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- Нуль не входить до набору дій і призводить до повідомлення про помилку.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
UO.ClientMarkChar(0, "self");
return null;
}
}C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
Параметри: actionIndex (Any), id (Any)
Результат: void / Unit.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ClientMarkChar. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.ClientMarkChar:bridge.ClientMarkChar(NumberConversions.ToInt(actionIndex), GetObject(id)). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(actionIndex). -
InjectionScript.Runtime.InjectionApiUO.GetObject:GetObject(id).
Внутрішній код реалізації, не самостійний скрипт.
public void ClientMarkChar(InjectionValue actionIndex, InjectionValue id)
=> bridge.ClientMarkChar(NumberConversions.ToInt(actionIndex), GetObject(id));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.ClientPrint(object? text);Показує локальне повідомлення про хід скрипта або умову зупинки. Його бачите ви, а чи не інші гравці.
Виклик методу з типом, що повертається void пишеться як самостійний оператор C#; привласнювати чи перевіряти результат не можна. Завершення оператора не є підтвердженням сервера.
- Повідомлення йде в нижню ліву область ігрового вікна та локальний журнал. Копія доступна у виведенні IDE. У загальному журналі менеджера увімкніть фільтр повідомлень скриптів (script): запис доступний і без вікна. Фільтр серверних системних повідомлень (system) такі записи не вибирає. Мережевий пакет мови не надсилається. Для напису над головою є UO.CharPrint.
-
UO.Printдодає новий запис до журналу ігрових повідомлень: спочатку прочитайте або збережіть потрібний рядок/результат пошуку, а потім запишіть діагностичне повідомлення. У швидкому циклі записуйте повідомлення за змін, а не на кожній ітерації. - Використовується колір системних повідомлень даного скриптового runtime: спочатку 0x0440, змінюється UO.ConColor. Це локальний запис; Ім'я команди не означає надсилання серверу.
- UO.Print · UO.CharPrint · UO.Say · UO.ConColor
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Команда викликається окремим рядком і не повертає значення (void). Текст повідомлення наведено безпосередньо у виклику.
UO.ClientPrint("Hello from C#");Параметри та порядок виконання:
- processed = 12 - демонстраційне число вже оброблених предметів. Convert.ToString перетворює його на рядок. Цей приклад лише повідомляє число, що сам предмети не переносить.
var processed = 12;
UO.ClientPrint("Processed item entries: " + Convert.ToString(processed));Параметри та порядок виконання:
- Читаються вага та максимум персонажа. Нульовий/невідомий максимум не вважається перевантаженням. При weight >= maximum друкується один рядок та Main завершується; предмети не викидаються.
return RunScenario();
object? RunScenario()
{
var weight = UO.Weight();
var maximum = UO.MaxWeight();
if (Truth(maximum > 0) && Truth(weight >= maximum))
{
UO.ClientPrint("Too heavy: " + Convert.ToString(weight) + "/" + Convert.ToString(maximum));
return null;
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- Main запам'ятовує вагу, чекає 1000 мілісекунд і викликає повністю оголошений ReportWeight. Помічник друкує лише якщо вага змінилася і повертає нову вагу для наступної перевірки. Він не створює нескінченний цикл.
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 previous = UO.Weight();
UO.Wait(1000);
previous = ReportWeight(previous, UO.Weight());
return null;
}
dynamic ReportWeight(dynamic previous, dynamic current)
{
if (Truth(previous != current))
{
UO.ClientPrint("Weight changed: " + Convert.ToString(current));
}
return 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.
Параметри: text (Any)
Результат: void / Unit.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.SystemMessage:SystemMessage(Text(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(0).
Внутрішній код реалізації, не самостійний скрипт.
case "addtojournal":
case "addtosystemjournal":
case "clientprint":
SystemMessage(Text(0)); return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.ClientPrintEx(object? senderID, object? color, object? font, object? text);Створює видимий лише вам напис над завантаженим об’єктом: наприклад, позначку вибраної цілі або попередження над власним персонажем. Це не мовлення персонажа й не повідомлення внизу ігрового вікна.
-
senderID— Serial об'єкта, а не graphic/type або координата. UO.CharPrint у формі з трьома аргументами розуміє також self, lasttarget та збережені імена об'єктів. Для SenderID у UO.ClientPrintEx використовуйте число, наприклад UO.Hex2Int(UO.GetSerial("self")); рядкові псевдоніми там не дозволяються як об'єкти. -
color- UO hue, а не RGB. Беруться молодші 16 біт числа; 0x0044 - приклад. -1 перетворюється на 0xFFFF, а не означає «будь-який колір». Колір ConColor тут не використовується. -
font— Номер шрифту UO, не розмір у пунктах та не ім'я Windows-шрифту. Число обмежується діапазоном 0..255; Наявність конкретного шрифту залежить від файлів гри. У прикладі 3 – звичайний номер шрифту.
Виклик методу з типом, що повертається void пишеться як самостійний оператор C#; привласнювати чи перевіряти результат не можна. Завершення оператора не є підтвердженням сервера.
- Об'єкт повинен існувати у завантаженому світі та не бути віддаленим; пустий текст або відсутня мета не малюються. Команда не завантажує об'єкт із сервера. Сервер та інші гравці цей напис не отримують. Без ігрового вікна напис неможливо побачити у світі; це не заміна системного журналу менеджера.
- UO.CharPrint(color, msg) вибирає свого персонажа. UO.CharPrint(id, color, msg) вибирає вказаний об'єкт. Обидві форми використовують шрифт 3. UO.ClientPrintEx вимагає всіх чотирьох аргументів у порядку SenderID, Color, Font, Text.
- Номер шрифту UO, не розмір у пунктах та не ім'я Windows-шрифту. Число обмежується діапазоном 0..255; Наявність конкретного шрифту залежить від файлів гри. У прикладі 3 - звичайний номер шрифту.
- GetSerial повертає hex-рядок. Hex2Int перетворює її на int перед порівнянням з числом 0; рядок "0x00000000" не можна перевіряти як число "0".
- UO.Print · UO.CharPrint · UO.ClientPrintEx · UO.AddToSystemJournalEx
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Команда викликається окремим рядком. Повідомлення перед нею показує початок виклику, а не підтвердження дії сервера.
UO.Print("Calling UO.ClientPrintEx");
UO.ClientPrintEx(UO.Hex2Int(UO.GetSerial("self")), 0x0044, 3, "Ready");Параметри та порядок виконання:
- Перша форма CharPrint вміщує Ready над своїм персонажем. ClientPrintEx отримує його serial через UO.Hex2Int(UO.GetSerial("self")) і явно передає шрифт 3. Напис не містить жодного ігрового режиму.
- GetSerial повертає hex-рядок. Hex2Int перетворює її на int перед порівнянням з числом 0; рядок "0x00000000" не можна перевіряти як число "0".
UO.ClientPrintEx(UO.Hex2Int(UO.GetSerial("self")), 0x0044, 3, "Ready");Параметри та порядок виконання:
- target - serial останньої мети. Нуль означає, що в цьому прикладі відзначати нема кого. Selected target — лише локальний підпис: ціль не атакується і активний серверний таргет не заповнюється.
- GetSerial повертає hex-рядок. Hex2Int перетворює її на int перед порівнянням з числом 0; рядок "0x00000000" не можна перевіряти як число "0".
return RunScenario();
object? RunScenario()
{
var target = UO.Hex2Int(UO.GetSerial("lasttarget"));
if (Truth(target != 0))
{
UO.ClientPrintEx(target, 0x0044, 3, "Selected target");
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- ShowWeightWarning повністю оголошено нижче. Вона порівнює вагу з позитивною відомою межею і пише над своїм персонажем тільки при перевантаженні; нічого не викидає. Convert.ToString перетворює вагу на текст.
- GetSerial повертає hex-рядок. Hex2Int перетворює її на int перед порівнянням з числом 0; рядок "0x00000000" не можна перевіряти як число "0".
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
ShowWeightWarning(UO.Weight(), UO.MaxWeight());
return null;
}
void ShowWeightWarning(dynamic weight, dynamic maximum)
{
if (Truth(maximum > 0) && Truth(weight >= maximum))
{
UO.ClientPrintEx(UO.Hex2Int(UO.GetSerial("self")), 0x0044, 3, "Too heavy: " + Convert.ToString(weight));
}
}
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.
Параметри: senderID (Any), color (Any), font (Any), text (Any)
Результат: void / Unit.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.CharPrintEx:bridge.CharPrintEx(Arg(0), Arg(1), Arg(2), Text(3)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(3).
Внутрішній код реалізації, не самостійний скрипт.
case "clientprintex":
bridge.CharPrintEx(Arg(0), Arg(1), Arg(2), Text(3)); return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.CloseClientUIWindow(object? uiWindowType, object? id);Закриває локальне вікно клієнта цього виду для конкретного об'єкта. Наприклад, можна прибрати паперову ляльку персонажа, його статус чи вікно рюкзака. Команда не закриває ігровий клієнт та не відповідає на кнопки серверного gump.
-
uiWindowType- Обов'язковий числовий код вікна: 0 - paperdoll (екіпірування), 1 - статус персонажа, 2 - профіль, 3 - контейнер. Це окремий список із чотирьох кодів, не graphic/type тіла і не ID серверного gump. Інші цифри не знаходять вікно. -
id— Serial об'єкта, якому належить вікно: self/serial персонажа для типів 0..2, backpack/serial контейнера для типу 3. Приймаються число, hex-рядок або об'єктний аліас, що дозволяється. Це не номер вікна у списку InfoGumps. Невідомий об'єктний аліас перетворюється на 0.
void - значення немає. Виклик пишеться окремим рядком, без var result = і без if UO.CloseClientUIWindow(...). Якщо потрібного відкритого вікна немає, нічого не відбувається; команда не повертає true/false.
- Обидва параметри є обов'язковими. Порівнюються і клас вікна, і LocalSerial. Виклик із (3, self) не означає рюкзак: для рюкзака потрібен backpack.
- Обхід охоплює відкриті, ще не знищені вікна цього типу/serial; усі відповідні вікна закриваються в ігровому потоці. Решта вікон залишаються відкритими.
- Закривається інтерфейс, предмети із контейнера не видаляються, персонаж не зникає зі світу. Повторювати безпечно: якщо вікно вже зачинене, збігу немає.
- Для серверних діалогів вивчіть UO.CloseSimpleGump та UO.NumGumpButton; коди 0..3 цієї команди там не застосовуються.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Команда викликається окремим рядком. Повідомлення перед нею показує початок виклику, а не підтвердження дії сервера.
UO.Print("Calling UO.CloseClientUIWindow");
UO.CloseClientUIWindow(0, "self");Параметри та порядок виконання:
- Закривається лише вікно екіпірування свого персонажа; його статус, профіль та рюкзак залишаються окремими вікнами.
UO.CloseClientUIWindow(0, "self");Параметри та порядок виконання:
- Якщо рюкзак не було відкрито, дія нічого не змінить. Ця команда не переміщає предмети та не повертає результат.
return RunScenario();
object? RunScenario()
{
if (Truth(UO.Connected()) && Truth(UO.Exists("backpack")))
{
UO.CloseClientUIWindow(3, "backpack");
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- 1 - статус, 2 - профіль. id - serial вибраного mobile. ASC(text,0) тут розбирає рядковий serial у число із запасним 0. Процедура користувача нічого не обіцяє про наявність вікна; обидва виклики мають Unit.
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 selected = Asc(UO.GetSerial("lasttarget"), 0);
CloseMobilePanels(selected);
return null;
}
void CloseMobilePanels(dynamic id)
{
if (Truth(id == 0) || !(Truth(UO.Exists(id))))
{
return;
}
UO.CloseClientUIWindow(1, id);
UO.CloseClientUIWindow(2, id);
}
int Asc(object? value, int fallback = 0)
{
string text = Convert.ToString(value) ?? "";
if (text.StartsWith("0x", StringComparison.OrdinalIgnoreCase))
return int.TryParse(text[2..], System.Globalization.NumberStyles.HexNumber, System.Globalization.CultureInfo.InvariantCulture, out int hex) ? hex : fallback;
return int.TryParse(text, out int number) ? number : fallback;
}
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.
Параметри: uiWindowType (Any), id (Any)
Результат: void / Unit.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.CloseClientWindow:bridge.CloseClientWindow(Arg(0), Arg(1)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
Внутрішній код реалізації, не самостійний скрипт.
case "closeclientuiwindow": bridge.CloseClientWindow(Arg(0), Arg(1)); return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.CloseHandle();Запитує вихід поточної програми клієнта через Client.Game.Exit.
Параметрів немає.
void - значення, що повертається немає.
- CloseUO прямує до того ж bridge.CloseHandle. Exit виконується на ігровому потоці; якщо Client.Game відсутня, дія відсутня. Команда не є закриттям окремого gump.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Команда викликається окремим рядком. Повідомлення перед нею показує початок виклику, а не підтвердження дії сервера.
UO.Print("Calling UO.CloseHandle");
UO.CloseHandle();Параметри та порядок виконання:
- Виклик запитує про завершення програми клієнта.
UO.CloseHandle();Параметри та порядок виконання:
- Приклад показує керовану умову; значення 0 зберігає клієнт відкритим.
return RunScenario();
object? RunScenario()
{
var finishClient = 0;
if (Truth(finishClient))
{
UO.CloseHandle();
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- Повністю оголошений помічник дозволяє явний вихід.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
FinishClient(0);
return null;
}
void FinishClient(dynamic enabled)
{
if (Truth(enabled))
{
UO.CloseHandle();
}
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
Параметри: Немає параметрів.
Результат: void / Unit.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.CloseHandle. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.CloseHandle:bridge.CloseHandle().
Внутрішній код реалізації, не самостійний скрипт.
public void CloseHandle() => bridge.CloseHandle();Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.CloseSimpleGump(object? gumpIndex);Локально закриває дозволений до закриття серверний гамп за суворим індексом.
-
gumpIndex— Обов'язковий int — індекс активного серверного гампа, від 0 до GetGumpsCount()-1. Це не GumpID/serial. Негативне число та індекс поза списком недійсні. Відкриття, закриття та зміна порядку вікон можуть змінити індекс; перед дією перевіряйте GetGumpID/GetGumpSerial.
void – нічого не повертає. Не можна інтерпретувати результат як підтвердження сервера чи bool.
- Працює з активними серверними гампами. Рюкзак, карта, налаштування та інші локальні вікна не входять до цього списку. Один виклик читає дані у ігровому потоці; різні дзвінки можуть побачити різні стани списку.
- Недійсний індекс та NoClose нічого не змінюють. Команда не надсилає відповідь кнопки серверу. Для такої відповіді використовуйте SendGumpSelect.
- Закриття змінює список та індекси. Для масового закриття обходьте список від останнього до першого індексу.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Команда викликається окремим рядком. Повідомлення перед нею показує початок виклику, а не підтвердження дії сервера.
UO.Print("Calling UO.CloseSimpleGump");
UO.CloseSimpleGump(0);Параметри та порядок виконання:
- 0 — індекс, а не ID. Якщо вікно забороняє закриття, воно залишається відкритим.
UO.CloseSimpleGump(0);Параметри та порядок виконання:
- Зворотний обхід зменшує вплив змін індексу після закриття. При паралельному відкритті нових вікон ще раз перевірте список.
return RunScenario();
object? RunScenario()
{
var i = UO.GetGumpsCount() - 1;
while (Truth(i >= 0))
{
UO.CloseSimpleGump(i);
i = i - 1;
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- info[1] - збережений GumpID. Дія нічого не повертає, тому результат не надається змінною.
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 info = UO.GetGumpInfo(0);
if (Truth(ArrayLength(info) == 5))
{
UO.CloseSimpleGump(0);
UO.Print(Hex(info[1]));
}
return null;
}
int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;
string Hex(object? value) => Convert.ToInt64(value).ToString("X");
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.
Параметри: gumpIndex (Any)
Результат: void / Unit.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.CloseSimpleGump:bridge.CloseSimpleGump(Arg(0)).
Внутрішній код реалізації, не самостійний скрипт.
case "closesimplegump":
if (bridge is IApiGumpAccess gumpAccess) gumpAccess.CloseGumpAtIndex(Arg(0));
else bridge.CloseSimpleGump(Arg(0));
return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.ColorPrint(object? color, object? msg);Показує локальне повідомлення про хід скрипта або умову зупинки. Його бачите ви, а чи не інші гравці.
-
color— UO hue, не RGB. Число або hex-рядок; міст використовує молодші 16 біт. Чи не плутайте з graphic/type. 0x0044 у прикладі - вибраний hue. Без кольору використовується hue 0x03B2. UO.Print(text, color) приймає текст першим; UO.ColorPrint(color, text) - колір першим.
Виклик методу з типом, що повертається void пишеться як самостійний оператор C#; привласнювати чи перевіряти результат не можна. Завершення оператора не є підтвердженням сервера.
- Повідомлення йде в нижню ліву область ігрового вікна та локальний журнал. Копія доступна у виведенні IDE. У загальному журналі менеджера увімкніть фільтр повідомлень скриптів (script): запис доступний і без вікна. Фільтр серверних системних повідомлень (system) такі записи не вибирає. Мережевий пакет мови не надсилається. Для напису над головою є UO.CharPrint.
-
UO.Printдодає новий запис до журналу ігрових повідомлень: спочатку прочитайте або збережіть потрібний рядок/результат пошуку, а потім запишіть діагностичне повідомлення. У швидкому циклі записуйте повідомлення за змін, а не на кожній ітерації. - Без кольору використовується hue 0x03B2. UO.Print(text, color) приймає текст першим; UO.ColorPrint(color, text) - колір першим.
- UO.Print · UO.CharPrint · UO.Say · UO.ConColor
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Команда викликається окремим рядком і не повертає значення (void). Текст повідомлення наведено безпосередньо у виклику.
UO.ColorPrint(0x0044, "Hello from C#");Параметри та порядок виконання:
- processed = 12 - демонстраційне число вже оброблених предметів. Convert.ToString перетворює його на рядок. Цей приклад лише повідомляє число, що сам предмети не переносить.
var processed = 12;
UO.ColorPrint(0x0044, "Processed item entries: " + Convert.ToString(processed));Параметри та порядок виконання:
- Читаються вага та максимум персонажа. Нульовий/невідомий максимум не вважається перевантаженням. При weight >= maximum друкується один рядок та Main завершується; предмети не викидаються.
return RunScenario();
object? RunScenario()
{
var weight = UO.Weight();
var maximum = UO.MaxWeight();
if (Truth(maximum > 0) && Truth(weight >= maximum))
{
UO.ColorPrint(0x0044, "Too heavy: " + Convert.ToString(weight) + "/" + Convert.ToString(maximum));
return null;
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- Main запам'ятовує вагу, чекає 1000 мілісекунд і викликає повністю оголошений ReportWeight. Помічник друкує лише якщо вага змінилася і повертає нову вагу для наступної перевірки. Він не створює нескінченний цикл.
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 previous = UO.Weight();
UO.Wait(1000);
previous = ReportWeight(previous, UO.Weight());
return null;
}
dynamic ReportWeight(dynamic previous, dynamic current)
{
if (Truth(previous != current))
{
UO.ColorPrint(0x0044, "Weight changed: " + Convert.ToString(current));
}
return 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.
Параметри: color (Any), msg (Any)
Результат: void / Unit.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ColorPrint. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Print:bridge.Print(NumberConversions.ToInt(color), msg.ToString()). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(color). -
InjectionScript.Runtime.InjectionValue.ToString:msg.ToString().
Внутрішній код реалізації, не самостійний скрипт.
public void ColorPrint(InjectionValue color, InjectionValue msg) => bridge.Print(NumberConversions.ToInt(color), msg.ToString());Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.ConColor(object? color);Задає UO hue для наступних системних повідомлень даного скриптового runtime.
-
color— UO hue, не RGB. Число або hex-рядок; міст використовує молодші 16 біт. Чи не плутайте з graphic/type. 0x0044 у прикладі - вибраний hue.
Виклик методу з типом, що повертається void пишеться як самостійний оператор C#; привласнювати чи перевіряти результат не можна. Завершення оператора не є підтвердженням сервера.
- Впливає на наступні UO.ClientPrint, UO.AddToJournal та UO.AddToSystemJournal. Не перефарбовує колишні рядки, не змінює SpeechHue профілю та не змінює колір UO.Print без аргументу кольору. Getter колишнього кольору тут відсутня: зберігайте вибраний звичайний hue у своїй змінній.
- UO.Print · UO.CharPrint · UO.Say · UO.ConColor
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Команда викликається окремим рядком. Повідомлення перед нею показує початок виклику, а не підтвердження дії сервера.
UO.Print("Calling UO.ConColor");
UO.ConColor(0x0044);Параметри та порядок виконання:
- 0x0044 стає кольором наступного системного рядка. Сам ConColor нічого не друкує.
UO.ConColor(0x0044);
UO.AddToSystemJournal("Notice");Параметри та порядок виконання:
- Звичайний Print зберігає свій колір 0x03B2, а AddToJournal використовує заданий 0x0044. Обидва локальні повідомлення.
return RunScenario();
object? RunScenario()
{
UO.ConColor(0x0044);
UO.Print("Normal Print color");
UO.AddToJournal("System color");
return null;
}Параметри та порядок виконання:
- usualHue=0x0440 — явно вибраний звичайний колір, а не прочитане старе значення. У try використовується тимчасовий 0x0035;
finallyповертає usualHue, потім наступний рядок знову друкується звичайним кольором.
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 usualHue = 0x0440;
UO.ConColor(usualHue);
try
{
UO.ConColor(0x0035);
UO.AddToSystemJournal("Temporary warning");
}
finally
{
UO.ConColor(usualHue);
}
UO.AddToSystemJournal("Normal messages again");
return null;
}
}C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
Параметри: color (Any)
Результат: void / Unit.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ConColor. -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(color).
Внутрішній код реалізації, не самостійний скрипт.
public void ConColor(InjectionValue color)
{
systemMessageColor = NumberConversions.ToInt(color);
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.ConsolePrint(object? msg);Показує локальне повідомлення про хід скрипта або умову зупинки. Його бачите ви, а чи не інші гравці.
Виклик методу з типом, що повертається void пишеться як самостійний оператор C#; привласнювати чи перевіряти результат не можна. Завершення оператора не є підтвердженням сервера.
- Повідомлення йде в нижню ліву область ігрового вікна та локальний журнал. Копія доступна у виведенні IDE. У загальному журналі менеджера увімкніть фільтр повідомлень скриптів (script): запис доступний і без вікна. Фільтр серверних системних повідомлень (system) такі записи не вибирає. Мережевий пакет мови не надсилається. Для напису над головою є UO.CharPrint.
-
UO.Printдодає новий запис до журналу ігрових повідомлень: спочатку прочитайте або збережіть потрібний рядок/результат пошуку, а потім запишіть діагностичне повідомлення. У швидкому циклі записуйте повідомлення за змін, а не на кожній ітерації. - Без кольору використовується hue 0x03B2. UO.Print(text, color) приймає текст першим; UO.ColorPrint(color, text) - колір першим.
- Незважаючи на Console у імені, це той самий локальний ігровий висновок, а не окремий термінал Windows.
- UO.Print · UO.CharPrint · UO.Say · UO.ConColor
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Команда викликається окремим рядком і не повертає значення (void). Текст повідомлення наведено безпосередньо у виклику.
UO.ConsolePrint("Hello from C#");Параметри та порядок виконання:
- processed = 12 - демонстраційне число вже оброблених предметів. Convert.ToString перетворює його на рядок. Цей приклад лише повідомляє число, що сам предмети не переносить.
var processed = 12;
UO.ConsolePrint("Processed item entries: " + Convert.ToString(processed));Параметри та порядок виконання:
- Читаються вага та максимум персонажа. Нульовий/невідомий максимум не вважається перевантаженням. При weight >= maximum друкується один рядок та Main завершується; предмети не викидаються.
return RunScenario();
object? RunScenario()
{
var weight = UO.Weight();
var maximum = UO.MaxWeight();
if (Truth(maximum > 0) && Truth(weight >= maximum))
{
UO.ConsolePrint("Too heavy: " + Convert.ToString(weight) + "/" + Convert.ToString(maximum));
return null;
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- Main запам'ятовує вагу, чекає 1000 мілісекунд і викликає повністю оголошений ReportWeight. Помічник друкує лише якщо вага змінилася і повертає нову вагу для наступної перевірки. Він не створює нескінченний цикл.
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 previous = UO.Weight();
UO.Wait(1000);
previous = ReportWeight(previous, UO.Weight());
return null;
}
dynamic ReportWeight(dynamic previous, dynamic current)
{
if (Truth(previous != current))
{
UO.ConsolePrint("Weight changed: " + Convert.ToString(current));
}
return 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.
Параметри: msg (Any)
Результат: void / Unit.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ConsolePrint. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Print:bridge.Print(msg.ToString()). -
InjectionScript.Runtime.InjectionValue.ToString:msg.ToString().
Внутрішній код реалізації, не самостійний скрипт.
public void ConsolePrint(InjectionValue msg) => bridge.Print(msg.ToString());Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.FillInfoWindow(object? s);Додає один рядок у текстове вікно та показує його.
-
s- Текст рядка; значення перетворюється на string.
void - значення, що повертається немає.
- Раніше накопичені рядки зберігаються до обмеження MaxTextWindowLines.
- TextPrint додає рядок і сам показує YokoTextWindowGump; TextOpen закріплює відкритий стан. При переповненні буфера видаляються старі рядки. Це окреме текстове вікно, не серверний gump і не UO.GetInfo.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Команда викликається окремим рядком. Повідомлення перед нею показує початок виклику, а не підтвердження дії сервера.
UO.Print("Calling UO.FillInfoWindow");
UO.FillInfoWindow("Status ready");Параметри та порядок виконання:
- Текст передається до клієнтського текстового вікна.
UO.FillInfoWindow("Status ready");Параметри та порядок виконання:
- Рядок формується з локального поточного HP.
return RunScenario();
object? RunScenario()
{
var status = "HP: " + Convert.ToString(UO.GetHP());
UO.FillInfoWindow(status);
return null;
}Параметри та порядок виконання:
- Друга команда додає second після першого.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
UO.FillInfoWindow("first");
UO.FillInfoWindow("second");
return null;
}
}C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
Параметри: s (Any)
Результат: void / Unit.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.TextPrint:bridge.TextPrint(Text(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(0). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.TextOpen:bridge.TextOpen().
Внутрішній код реалізації, не самостійний скрипт.
case "fillinfowindow":
bridge.TextPrint(Text(0));
bridge.TextOpen();
return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.FillNewWindow(object? s);Очищає текстове вікно, додає один рядок та показує його.
-
s- Текст рядка; значення перетворюється на string.
void - значення, що повертається немає.
- Перед TextPrint виконується TextClear; раніше накопичені рядки видаляються.
- TextPrint додає рядок і сам показує YokoTextWindowGump; TextOpen закріплює відкритий стан. При переповненні буфера видаляються старі рядки. Це окреме текстове вікно, не серверний gump і не UO.GetInfo.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Команда викликається окремим рядком. Повідомлення перед нею показує початок виклику, а не підтвердження дії сервера.
UO.Print("Calling UO.FillNewWindow");
UO.FillNewWindow("Status ready");Параметри та порядок виконання:
- Текст передається до клієнтського текстового вікна.
UO.FillNewWindow("Status ready");Параметри та порядок виконання:
- Рядок формується з локального поточного HP.
return RunScenario();
object? RunScenario()
{
var status = "HP: " + Convert.ToString(UO.GetHP());
UO.FillNewWindow(status);
return null;
}Параметри та порядок виконання:
- Друга команда замінює вміст: залишається second.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
UO.FillNewWindow("first");
UO.FillNewWindow("second");
return null;
}
}C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
Параметри: s (Any)
Результат: void / Unit.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.TextClear:bridge.TextClear(). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.TextPrint:bridge.TextPrint(Text(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(0). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.TextOpen:bridge.TextOpen().
Внутрішній код реалізації, не самостійний скрипт.
case "fillnewwindow": bridge.TextClear(); bridge.TextPrint(Text(0)); bridge.TextOpen(); return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.FontColor(object? color);Встановлює hue наступних локальних UO.UOAMessage цього скрипту. Не змінює колір мови персонажа, звичайного «UO.Print», «InfoFindList» або тему «IDE».
-
color— Обов'язковий числовий індекс hue 0..65535, наприклад 0x0044. Це не RGB. Всередині зберігається int, при виведенні наводиться до ushort; -1 НЕ означає скидання і перетворюється на 65535. Початкове значення нового runtime - 0x03B2. Форми без аргументів немає.
void: немає результату, старого кольору чи ознаки успіху. Щоб пізніше повернути своє налаштування, зберігайте вибраний hue у змінній скрипті.
- Змінює лише state.FontColor, не друкує повідомлення та не надсилає мережевий пакет.
- Діє до наступного FontColor у тому ж runtime. Інший самостійний скрипт має власний стан. UO.Print(text,color) задає колір безпосередньо і не читає FontColor.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Команда викликається окремим рядком. Повідомлення перед нею показує початок виклику, а не підтвердження дії сервера.
UO.Print("Calling UO.FontColor");
UO.FontColor(0x0021);Параметри та порядок виконання:
- 0x0021 - індекс hue; підсумковий відтінок залежить від файлів hues клієнта. Повідомлення видно локально; його не вимовляє персонаж.
UO.FontColor(0x0021);
var first = UO.FindList("0x0EED", "backpack");
if (Truth(first == ""))
{
UO.UOAMessage("No gold in the loaded backpack");
}
else
{
UO.UOAMessage("Gold units: " + Convert.ToString(UO.FindFullQuantity()));
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- Повна Notice приймає текст та hue. Останній встановлений hue залишається для наступного UOAMessage цього runtime. Вбудованого FontColor() для читання тут немає.
return RunScenario();
object? RunScenario()
{
Notice("Supplies checked", 0x0044);
Notice("Restock needed", 0x0021);
return null;
}
void Notice(dynamic text, dynamic hue)
{
UO.FontColor(hue);
UO.UOAMessage(text);
}Параметри та порядок виконання:
- 0x03B2 - початкове значення FontColor нового runtime. Finally повертає саме обрану базу при звичайному завершенні/оброблюваної помилки; воно не відновлює невідоме колишнє значення.
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 baseHue = 0x03B2;
try
{
UO.FontColor(0x0021);
UO.UOAMessage("Check the route before moving");
}
finally
{
UO.FontColor(baseHue);
}
UO.UOAMessage("Ready");
UO.Print("Regular Print keeps its own color");
return null;
}
}C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
Параметри: color (Any)
Результат: void / Unit.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Arg:Arg(0, state.FontColor).
Внутрішній код реалізації, не самостійний скрипт.
case "fontcolor": state.FontColor = Arg(0, state.FontColor); break;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.HelpRequest();Запитує серверне меню допомоги.
Параметрів немає.
void - значення немає. Викликайте окремим рядком; завершення не підтверджує дію сервера.
- ExecuteClientApiCompatibility викликає HelpRequest, який через Invoke передає GameActions.RequestHelp. Зміст меню визначається сервером.
- У прикладах UO.Wait задає лише паузу скрипта; закінчення паузи не доводить виконання запиту сервером.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Команда викликається окремим рядком. Повідомлення перед нею показує початок виклику, а не підтвердження дії сервера.
UO.Print("Calling UO.HelpRequest");
UO.HelpRequest();Параметри та порядок виконання:
- Запитує серверне меню допомоги.
UO.HelpRequest();Параметри та порядок виконання:
- ExecuteClientApiCompatibility викликає HelpRequest, який через Invoke передає GameActions.RequestHelp. Зміст меню визначається сервером.
return RunScenario();
object? RunScenario()
{
if (Truth(UO.IsOnline()))
{
UO.HelpRequest();
}
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 задає лише паузу скрипта; закінчення паузи не доводить виконання запиту сервером.
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.IsOnline()))
{
UO.HelpRequest();
UO.Print("Help requested");
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
Параметри: Немає параметрів.
Результат: void / Unit.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.HelpRequest:bridge.HelpRequest().
Внутрішній код реалізації, не самостійний скрипт.
case "helprequest": bridge.HelpRequest(); return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.Hide();
void UO.Hide(object? serial);Забирає завантажений предмет або іншого персонажа з екрана ClassicUO. Допомагає прибрати об'єкт, що заважає; працює з предметами всередині контейнерів та торгівлі, одягненими речами на paperdoll та у його маленьких слотах екіпіровки.
-
serial— Числовий serial або його hex/десятковий рядок. Це не type. Для іменованого об'єкта спочатку отримайте числовий рядок через GetSerial(name). Без аргументу утворюється локальний приціл.
void - значення, що повертається немає. Результат не можна присвоїти як serial, graphic/type, кількість або true/false. Інформація виводиться в інтерфейс/журнал, а не повертається до скрипту.
- Hide() відкриває локальний приціл і відразу повертає керування скриптом. Клацніть по речі на paperdoll, предмет у відкритому контейнері або об'єкт у світі. Escape скасовує вибір.
- Hide(serial) діє відразу на відомий завантажений об'єкт. Передавайте serial конкретної стопки/предмета, а чи не graphic/type. Вибраний стос ховається повністю незалежно від Amount.
- Предмет залишається в контейнері: кількість, власник, вміст та серверний стан не змінюються. FindType/GetContent, як і раніше, можуть його знайти. Приховування не є фільтром пошуку, перенесенням, видаленням, навичкою Hiding або серверною невидимістю.
- Звичайний контейнер, торгове вікно та сітка видобутку не малюють прихований предмет і не приймають кліки/перетягування. Прапор зберігається при перебудові та повторному відкриванні вікна, поки використовується той самий завантажений об'єкт.
- Надіта річ зникає з paperdoll, з маленького слота і зображення персонажа. Вона залишається одягненою: шар, броня та стан на сервері не змінюються. Прихована роба більше не перекриває нижній одяг. Зображення персонажа в менеджері оновлюється тим самим прапором; список цього екіпірування залишається доступним.
- Власного персонажа, землю та статику Hide не приховує. Неіснуючий serial дає повідомлення. Якщо приховати саму сумку, це не закриває відкрите вікно її вмісту і не приховує кожен вкладений предмет автоматично.
- Окремої команди Unhide у поточному API немає. Приховування належить завантаженому екземпляру об'єкта: його видалення зі світу клієнта та нове завантаження (наприклад, при перепідключенні) скидають прапор. Просте закриття/відкриття скрині не гарантований спосіб повернути предмет.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Команда викликається окремим рядком. Повідомлення перед нею показує початок виклику, а не підтвердження дії сервера.
UO.Print("Calling UO.Hide");
UO.Hide();Параметри та порядок виконання:
- Параметрів немає. Після клацання зникає лише вибраний предмет; вміст скрині на сервері не змінюється.
UO.Hide();
UO.Print("Select an item to hide locally");Параметри та порядок виконання:
- Hide отримує ID результату пошуку, не 0x0EED. За відсутності результату дзвінок не виконується. Unit від Hide не можна порівнювати з true/false.
return RunScenario();
object? RunScenario()
{
var item = UO.FindType(0x0EED, -1, "backpack");
if (Truth(item == ""))
{
UO.Print("No loaded matching item");
return null;
}
UO.Hide(item);
UO.Print("Stack amount: " + Convert.ToString(UO.GetQuantity(item)));
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- Іменований об'єкт спочатку дозволяється через GetSerial. Перевірка 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()
{
var item = UO.GetSerial("decoration");
if (Truth(UO.Exists(item)) && Truth(item != UO.GetSerial("self")))
{
UO.Hide(item);
}
else
{
UO.Print("Select a loaded object other than self");
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}Параметри та порядок виконання:
- 22 - номер шару, а не serial або type. Спочатку ObjAtLayer отримує serial, потім Hide приховує зображення саме цієї речі. Зняття та передача предмета не виконуються; Повторне відкриття paperdoll не скасовує приховування.
var robe = UO.ObjAtLayer(22);
if (Truth(robe == 0))
{
UO.Print("No robe equipped");
return null;
}
UO.Hide(robe);
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
Параметри: Немає параметрів.
Результат: void / Unit.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.Hide. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.RequestInteractiveHideTarget:bridge.RequestInteractiveHideTarget().
Внутрішній код реалізації, не самостійний скрипт.
public void Hide()
{
// Action command: the bridge owns UI/error reporting. A missing/non-interactive
// target surface must not turn a void compatibility command into a script failure.
bridge.RequestInteractiveHideTarget();
}Параметри: serial (Any)
Результат: void / Unit.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.Hide. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.ClientHide:bridge.ClientHide(NumberConversions.ToInt(serial)). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(serial).
Внутрішній код реалізації, не самостійний скрипт.
public void Hide(InjectionValue serial)
{
bridge.ClientHide(NumberConversions.ToInt(serial));
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.Morph(object? @type);Локально змінює graphic поточного персонажа.
-
type- int body graphic або рядок type, що дозволяється ResolveType. 0 відновлює graphic, збережений у першому Morph; Ненульове число наводиться до ushort.
void - значення немає. Викликайте окремим рядком; завершення не підтверджує дію сервера.
- Bridge.Morph без Player нічого не змінює. Під час першого виклику зберігає _originalGraphic, потім надає Player.Graphic. Runtime оновлює ticksAnim=Timer, навіть якщо Player відсутній.
- Це локальний зовнішній вигляд, не серверна трансформація й не зміна раси/доступних навичок. Значення за межами ushort не перевіряються цією функцією bridge і приводяться до 16 бітів.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Команда викликається окремим рядком. Повідомлення перед нею показує початок виклику, а не підтвердження дії сервера.
UO.Print("Calling UO.Morph");
UO.Morph("0x0190");Параметри та порядок виконання:
- Локально змінює graphic поточного персонажа.
UO.Morph("0x0190");Параметри та порядок виконання:
- Bridge.Morph без Player нічого не змінює. Під час першого виклику зберігає _originalGraphic, потім надає Player.Graphic. Runtime оновлює ticksAnim=Timer, навіть якщо Player відсутній.
return RunScenario();
object? RunScenario()
{
UO.Morph(0);
return null;
}Параметри та порядок виконання:
- Це локальний зовнішній вигляд, не серверна трансформація й не зміна раси/доступних навичок. Значення за межами ushort не перевіряються цією функцією bridge і приводяться до 16 бітів.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
UO.Morph("0x0190");
UO.Wait(500);
UO.Morph(0);
return null;
}
}C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
Параметри: type (Integer/String)
Результат: void / Unit.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.Morph. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Morph:bridge.Morph(type). -
InjectionScript.Runtime.InjectionApiUO.Timer:Timer().
Внутрішній код реалізації, не самостійний скрипт.
public void Morph(int type)
{
bridge.Morph(type);
ticksAnim = Timer();
}Параметри: type (Integer/String)
Результат: void / Unit.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.Morph. -
InjectionScript.Runtime.InjectionApiUO.Morph:Morph(ResolveType(type)). -
InjectionScript.Runtime.InjectionApiUO.ResolveType:ResolveType(type).
Внутрішній код реалізації, не самостійний скрипт.
public void Morph(string type) => Morph(ResolveType(type));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.OpenIDE();
void UO.OpenIDE(object? filePath);-
filePath— Необов'язковий шлях. Порожній/пробіловий - відкрити редактор без вибору файлу; відносний дозволяється від _manager.AutoloadPath, абсолютний зберігається.
void - значення немає. Викликайте окремим рядком; завершення не підтверджує дію сервера.
- Bridge.OpenIDE готує requested path, потім Invoke викликає YokoScriptEditorGump.Open(_world,requested). Скрипт із файлу не запускається командою OpenIDE.
- Редактор – графічне вікно, не зовнішня програма Launch. Читання/показ файлу залежить від шляху та логіки редактора.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Команда викликається окремим рядком. Повідомлення перед нею показує початок виклику, а не підтвердження дії сервера.
UO.Print("Calling UO.OpenIDE");
UO.OpenIDE();Параметри та порядок виконання:
- Відкриває графічний редактор C# IDE.
UO.OpenIDE();Параметри та порядок виконання:
- Bridge.OpenIDE готує requested path, потім Invoke викликає YokoScriptEditorGump.Open(_world,requested). Скрипт із файлу не запускається командою OpenIDE.
return RunScenario();
object? RunScenario()
{
UO.OpenIDE("Example.csx");
return null;
}Параметри та порядок виконання:
- Редактор – графічне вікно, не зовнішня програма Launch. Читання/показ файлу залежить від шляху та логіки редактора.
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 path = "C:\\UO Scripts\\Example.csx";
UO.OpenIDE(path);
return null;
}
}C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
Параметри: Немає параметрів.
Результат: void / Unit.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.OpenIDE. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.OpenIDE:bridge.OpenIDE(string.Empty).
Внутрішній код реалізації, не самостійний скрипт.
public void OpenIDE() => bridge.OpenIDE(string.Empty);Параметри: filePath (Any)
Результат: void / Unit.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.OpenIDE. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.OpenIDE:bridge.OpenIDE(filePath.ToString()). -
InjectionScript.Runtime.InjectionValue.ToString:filePath.ToString().
Внутрішній код реалізації, не самостійний скрипт.
public void OpenIDE(InjectionValue filePath) => bridge.OpenIDE(filePath.ToString());Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.Print(object? msg);
void UO.Print(object? msg, object? color);Показує локальне повідомлення про хід скрипта або умову зупинки. Його бачите ви, а чи не інші гравці.
-
color— UO hue, не RGB. Число або hex-рядок; міст використовує молодші 16 біт. Чи не плутайте з graphic/type. 0x0044 у прикладі - вибраний hue. Без кольору використовується hue 0x03B2. UO.Print(text, color) приймає текст першим; UO.ColorPrint(color, text) - колір першим.
Виклик методу з типом, що повертається void пишеться як самостійний оператор C#; привласнювати чи перевіряти результат не можна. Завершення оператора не є підтвердженням сервера.
- Повідомлення йде в нижню ліву область ігрового вікна та локальний журнал. Копія доступна у виведенні IDE. У загальному журналі менеджера увімкніть фільтр повідомлень скриптів (script): запис доступний і без вікна. Фільтр серверних системних повідомлень (system) такі записи не вибирає. Мережевий пакет мови не надсилається. Для напису над головою є UO.CharPrint.
-
UO.Printдодає новий запис до журналу ігрових повідомлень: спочатку прочитайте або збережіть потрібний рядок/результат пошуку, а потім запишіть діагностичне повідомлення. У швидкому циклі записуйте повідомлення за змін, а не на кожній ітерації. - Без кольору використовується hue 0x03B2. UO.Print(text, color) приймає текст першим; UO.ColorPrint(color, text) - колір першим.
- UO.Print · UO.CharPrint · UO.Say · UO.ConColor
UO.Print("C# script started");
UO.Print($"Position: {UO.GetX()}, {UO.GetY()}");Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Команда викликається окремим рядком і не повертає значення (void). Текст повідомлення наведено безпосередньо у виклику.
UO.Print("Hello from C#");Параметри та порядок виконання:
- processed = 12 - демонстраційне число вже оброблених предметів. Convert.ToString перетворює його на рядок. Цей приклад лише повідомляє число, що сам предмети не переносить.
var processed = 12;
UO.Print("Processed item entries: " + Convert.ToString(processed), 0x0044);Параметри та порядок виконання:
- Читаються вага та максимум персонажа. Нульовий/невідомий максимум не вважається перевантаженням. При weight >= maximum друкується один рядок та Main завершується; предмети не викидаються.
return RunScenario();
object? RunScenario()
{
var weight = UO.Weight();
var maximum = UO.MaxWeight();
if (Truth(maximum > 0) && Truth(weight >= maximum))
{
UO.Print("Too heavy: " + Convert.ToString(weight) + "/" + Convert.ToString(maximum), 0x0044);
return null;
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- Main запам'ятовує вагу, чекає 1000 мілісекунд і викликає повністю оголошений ReportWeight. Помічник друкує лише якщо вага змінилася і повертає нову вагу для наступної перевірки. Він не створює нескінченний цикл.
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 previous = UO.Weight();
UO.Wait(1000);
previous = ReportWeight(previous, UO.Weight());
return null;
}
dynamic ReportWeight(dynamic previous, dynamic current)
{
if (Truth(previous != current))
{
UO.Print("Weight changed: " + Convert.ToString(current), 0x0044);
}
return 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.
Параметри: msg (Any)
Результат: void / Unit.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.Print. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Print:bridge.Print(msg.ToString()). -
InjectionScript.Runtime.InjectionValue.ToString:msg.ToString().
Внутрішній код реалізації, не самостійний скрипт.
public void Print(InjectionValue msg)
{
bridge.Print(msg.ToString());
}Параметри: msg (Any), color (Any)
Результат: void / Unit.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.Print. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Print:bridge.Print(NumberConversions.ToInt(color), msg.ToString()). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(color). -
InjectionScript.Runtime.InjectionValue.ToString:msg.ToString().
Внутрішній код реалізації, не самостійний скрипт.
public void Print(InjectionValue msg, InjectionValue color)
{
bridge.Print(NumberConversions.ToInt(color), msg.ToString());
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.RemoveFigure(object? figureID);Видаляє локальну фігуру карти за її ID.
-
figureID— int ID, повернутий AddFigure. Це не serial предмета та не ID gump.
int — результат bridge.RemoveMapFigure: 1/0 за наявності віддаленої фігури. Runtime-запис видаляється незалежно від результату bridge.
- Спочатку викликає bridge.RemoveMapFigure, потім state.MapFigures.Remove(id), потім повертає bridge-результат. Невідомий ID не створює фігури і не викликає серверної дії.
- Локальна фігура карти не є предметом світу. Інші фігури та серверна геометрія не змінюються.
- WorldMapGump зберігає малюнки у статичному словнику процесу. Звичайні скрипти/чат/макроси одного світу/профілю використовують загальний GetPersistentState та лічильник ID; окремі процеси Manager не ділять малюнки. World.Clear/YokoScripts.Clear та завантаження стану профілю не очищають і не відновлюють цей словник (loader відновлює тільки UserStatics). Тому малюнки можуть пережити зміну світу/профілю в тому самому процесі з урахуванням worldNum; новий стан може повторно виділити вже існуючий ID малюнка. ClearFigures явно очищає малюнки та записи поточного стану. Успіх - запис/видалення даних, не доказ показу.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
var id = UO.AddFigure(new object?[] { 0, 0, UO.X(), UO.Y(), UO.X() + 3, UO.Y(), 0, 0, 255 });
UO.Print("Removed flag: " + Convert.ToString(UO.RemoveFigure(id)));Параметри та порядок виконання:
- Видаляє локальну фігуру карти за її ID.
UO.Print(UO.RemoveFigure(1));Параметри та порядок виконання:
- Спочатку викликає bridge.RemoveMapFigure, потім state.MapFigures.Remove(id), потім повертає bridge-результат. Невідомий ID не створює фігури і не викликає серверної дії.
return RunScenario();
object? RunScenario()
{
dynamic[] figure = new dynamic[checked((int)(10) + 1)];
figure[0] = 0;
figure[1] = 0;
figure[2] = UO.GetX();
figure[3] = UO.GetY();
figure[4] = UO.GetX() + 1;
figure[5] = UO.GetY() + 1;
figure[6] = 0;
figure[7] = 0;
figure[8] = 0;
figure[9] = UO.WorldNum();
figure[10] = "Example";
var id = UO.AddFigure(figure);
if (Truth(id > 0))
{
UO.Print(UO.RemoveFigure(id));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- Локальна фігура карти не є предметом світу. Інші фігури та серверна геометрія не змінюються.
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 id = 1;
var first = UO.RemoveFigure(id);
var second = UO.RemoveFigure(id);
UO.Print(Convert.ToString(first) + " " + Convert.ToString(second));
return null;
}
}C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
Параметри: figureID (Any)
Результат: dynamic / Any.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.RemoveMapFigure:bridge.RemoveMapFigure(id).
Внутрішній код реалізації, не самостійний скрипт.
case "removefigure":
{
int id = Arg(0);
int removed = bridge.RemoveMapFigure(id);
state.MapFigures.Remove(id);
return new InjectionValue(removed);
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.ServerPrint(object? message);Показує локальне повідомлення про хід скрипта або умову зупинки. Його бачите ви, а чи не інші гравці.
Виклик методу з типом, що повертається void пишеться як самостійний оператор C#; привласнювати чи перевіряти результат не можна. Завершення оператора не є підтвердженням сервера.
- Повідомлення йде в нижню ліву область ігрового вікна та локальний журнал. Копія доступна у виведенні IDE. У загальному журналі менеджера увімкніть фільтр повідомлень скриптів (script): запис доступний і без вікна. Фільтр серверних системних повідомлень (system) такі записи не вибирає. Мережевий пакет мови не надсилається. Для напису над головою є UO.CharPrint.
-
UO.Printдодає новий запис до журналу ігрових повідомлень: спочатку прочитайте або збережіть потрібний рядок/результат пошуку, а потім запишіть діагностичне повідомлення. У швидкому циклі записуйте повідомлення за змін, а не на кожній ітерації. - Без кольору використовується hue 0x03B2. UO.Print(text, color) приймає текст першим; UO.ColorPrint(color, text) - колір першим.
- Незважаючи на Server в імені або подібність до мережного повідомлення, команда тільки друкує локальний текст. Щоб говорити у світ, використовуйте UO.Say.
- UO.Print · UO.CharPrint · UO.Say · UO.ConColor
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Команда викликається окремим рядком і не повертає значення (void). Текст повідомлення наведено безпосередньо у виклику.
UO.ServerPrint("Hello from C#");Параметри та порядок виконання:
- processed = 12 - демонстраційне число вже оброблених предметів. Convert.ToString перетворює його на рядок. Цей приклад лише повідомляє число, що сам предмети не переносить.
var processed = 12;
UO.ServerPrint("Processed item entries: " + Convert.ToString(processed));Параметри та порядок виконання:
- Читаються вага та максимум персонажа. Нульовий/невідомий максимум не вважається перевантаженням. При weight >= maximum друкується один рядок та Main завершується; предмети не викидаються.
return RunScenario();
object? RunScenario()
{
var weight = UO.Weight();
var maximum = UO.MaxWeight();
if (Truth(maximum > 0) && Truth(weight >= maximum))
{
UO.ServerPrint("Too heavy: " + Convert.ToString(weight) + "/" + Convert.ToString(maximum));
return null;
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- Main запам'ятовує вагу, чекає 1000 мілісекунд і викликає повністю оголошений ReportWeight. Помічник друкує лише якщо вага змінилася і повертає нову вагу для наступної перевірки. Він не створює нескінченний цикл.
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 previous = UO.Weight();
UO.Wait(1000);
previous = ReportWeight(previous, UO.Weight());
return null;
}
dynamic ReportWeight(dynamic previous, dynamic current)
{
if (Truth(previous != current))
{
UO.ServerPrint("Weight changed: " + Convert.ToString(current));
}
return 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.
Параметри: message (String)
Результат: void / Unit.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ServerPrint. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.ServerPrint:bridge.ServerPrint(message).
Внутрішній код реалізації, не самостійний скрипт.
public void ServerPrint(string message) => bridge.ServerPrint(message);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.SetShowZ(object? stateValue);Змінює локальний прапор showZ runtime.
-
stateValue— 0 вимикає; будь-яке ненульове ціле включає.
void - значення немає. Викликайте окремим рядком; завершення не підтверджує дію сервера.
- Надає showZ значення 0 або 1 після NumberConversions.ToInt. Ця функція сама не змінює координати та не надсилає пакет.
- Це compatibility-сховище поточного runtime. У проекті немає споживачів private mulPath/showZ; зміна не перезавантажує assets і не змінює відображення висоти.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Команда викликається окремим рядком. Повідомлення перед нею показує початок виклику, а не підтвердження дії сервера.
UO.Print("Calling UO.SetShowZ");
UO.SetShowZ(1);Параметри та порядок виконання:
- Змінює локальний прапор showZ runtime.
UO.SetShowZ(1);Параметри та порядок виконання:
- Надає showZ значення 0 або 1 після NumberConversions.ToInt. Ця функція сама не змінює координати та не надсилає пакет.
return RunScenario();
object? RunScenario()
{
UO.SetShowZ(0);
return null;
}Параметри та порядок виконання:
- Це compatibility-сховище поточного runtime. У проекті немає споживачів private mulPath/showZ; зміна не перезавантажує assets і не змінює відображення висоти.
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()
{
ApplyValue(1);
return null;
}
void ApplyValue(dynamic value)
{
UO.SetShowZ(value);
}
}C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
Параметри: stateValue (Any)
Результат: void / Unit.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.SetShowZ. -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(stateValue).
Внутрішній код реалізації, не самостійний скрипт.
public void SetShowZ(InjectionValue stateValue) => showZ = NumberConversions.ToInt(stateValue) != 0 ? 1 : 0;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.SetSilentMode(object? value);Змінює локальний прапор SilentMode runtime.
-
value— 0 вимикає; будь-яке ненульове ціле включає.
void - значення немає. Викликайте окремим рядком; завершення не підтверджує дію сервера.
- Зберігає SilentMode як 0/1. GumpLinesResult читає прапор: при 0 непусті результати GetGumpShortLines/GetGumpFullLines/GetGumpButtonsDescription додатково друкуються у текстове вікно та відкривають його; при 1 цей додатковий показ пригнічується. Повертається масив не змінюється. Інші Print, звуки та повідомлення сервера не придушуються.
- У звичайному клієнтському host ці дані стану беруться з GetPersistentState менеджера та загальні для скриптів/чату/макросів одного світу/профілю, а не належать одному скрипту. Інший процес або явно окремий InjectionRuntimeState має інший стан. Завантаження/очищення профілю може його замінити; збережені serial все одно перевіряються по завантаженому світу.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Команда викликається окремим рядком. Повідомлення перед нею показує початок виклику, а не підтвердження дії сервера.
UO.Print("Calling UO.SetSilentMode");
UO.SetSilentMode(1);Параметри та порядок виконання:
- Зберігає SilentMode як 0/1. GumpLinesResult читає прапор: при 0 непусті результати GetGumpShortLines/GetGumpFullLines/GetGumpButtonsDescription додатково друкуються у текстове вікно та відкривають його; при 1 цей додатковий показ пригнічується. Повертається масив не змінюється. Інші Print, звуки та повідомлення сервера не придушуються.
UO.SetSilentMode(1);Параметри та порядок виконання:
- Зберігає SilentMode як 0/1. GumpLinesResult читає прапор: при 0 непусті результати GetGumpShortLines/GetGumpFullLines/GetGumpButtonsDescription додатково друкуються у текстове вікно та відкривають його; при 1 цей додатковий показ пригнічується. Повертається масив не змінюється. Інші Print, звуки та повідомлення сервера не придушуються.
return RunScenario();
object? RunScenario()
{
UO.SetSilentMode(0);
return null;
}Параметри та порядок виконання:
- Зберігає SilentMode як 0/1. GumpLinesResult читає прапор: при 0 непусті результати GetGumpShortLines/GetGumpFullLines/GetGumpButtonsDescription додатково друкуються у текстове вікно та відкривають його; при 1 цей додатковий показ пригнічується. Повертається масив не змінюється. Інші Print, звуки та повідомлення сервера не придушуються.
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()
{
ApplyValue(1);
return null;
}
void ApplyValue(dynamic value)
{
UO.SetSilentMode(value);
}
}C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
Параметри: value (Any)
Результат: void / Unit.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
Внутрішній код реалізації, не самостійний скрипт.
case "setsilentmode": state.SilentMode = Arg(0) != 0 ? 1 : 0; return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.ShowJournal();Відкриває локальне вікно журналу клієнта.
Параметрів немає.
void - значення немає. Викликайте окремим рядком; завершення не підтверджує дію сервера.
- ShowJournal викликає GameActions.OpenJournal(_world). Записи не очищаються та текст серверу не надсилається.
- Змінює або показує лише вказані локальні дані. Серверного підтвердження цієї команди немає.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Команда викликається окремим рядком. Повідомлення перед нею показує початок виклику, а не підтвердження дії сервера.
UO.Print("Calling UO.ShowJournal");
UO.ShowJournal();Параметри та порядок виконання:
- Відкриває локальне вікно журналу клієнта.
UO.ShowJournal();Параметри та порядок виконання:
- ShowJournal викликає GameActions.OpenJournal(_world). Записи не очищаються та текст серверу не надсилається.
return RunScenario();
object? RunScenario()
{
UO.Print("Journal example");
UO.ShowJournal();
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()
{
UO.ShowJournal();
UO.Print(UO.LineCount());
return null;
}
}C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
Параметри: Немає параметрів.
Результат: void / Unit.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.ShowJournal:bridge.ShowJournal().
Внутрішній код реалізації, не самостійний скрипт.
case "showjournal": bridge.ShowJournal(); break;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.Snap();
int UO.Snap(object? name);
int UO.Snap(object? name, object? quality);
int UO.Snap(object? file, object? quality, object? includeUI);Зберігає фотографію графічного вікна клієнта.
-
name— Необов'язкове ім'я файлу. .jpg/.jpeg вибирає JPEG, інше/відсутність - PNG. Каталоги з імені видаляються; використовується лише базове ім'я. -
file— Необов'язкове ім'я файлу. .jpg/.jpeg вибирає JPEG, інше/відсутність - PNG. Каталоги з імені видаляються; використовується лише базове ім'я. -
quality— Необов'язковий int, за умовчанням 100, обмежується 1..100. Впливає на JPEG; PNG не використовує lossy quality. -
includeUI— Необов'язковий bool, за замовчуванням true. false малює світ/освітлення без UI.
Числовий прапор int: 1 – файл знімка збережений, 0 – помилка захоплення/запису. Без графічного вікна RequireGameView кидає помилку до TakeScreenshot.
- TakeScreenshot пише в ExecutablePath/Data/Client/Screenshots, очищає неприпустимі символи імені, вибирає автоматично ім'я за датою при порожньому, додає _2/_3 при існуючому файлі. Довільний абсолютний шлях не використовується.
- З UI читає backbuffer; без UI створює RenderTarget2D та рендерит світ. JPEG тимчасово задає FNA_GRAPHICS_JPEG_SAVE_QUALITY з відновленням; PNG SaveAsPng. Помилки всередині TakeScreenshot логуються і дають 0.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Результат одного виклику виводиться в журнал. Число не перетворюється на bool; для масиву показано кількість елементів.
var result = UO.Snap();
UO.Print("Snap: " + Convert.ToString(result));Параметри та порядок виконання:
- Зберігає фотографію графічного вікна клієнта.
UO.Print(UO.Snap());Параметри та порядок виконання:
- TakeScreenshot пише в ExecutablePath/Data/Client/Screenshots, очищає неприпустимі символи імені, вибирає автоматично ім'я за датою при порожньому, додає _2/_3 при існуючому файлі. Довільний абсолютний шлях не використовується.
return RunScenario();
object? RunScenario()
{
UO.Print(UO.Snap("manual-example.jpg", 85));
return null;
}Параметри та порядок виконання:
- З UI читає backbuffer; без UI створює RenderTarget2D та рендерит світ. JPEG тимчасово задає FNA_GRAPHICS_JPEG_SAVE_QUALITY з відновленням; PNG SaveAsPng. Помилки всередині TakeScreenshot логуються і дають 0.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
UO.Print(UO.Snap("manual-world.png", 100, false));
return null;
}
}C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
Параметри: Немає параметрів.
Результат: int / Integer.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.Snap. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Snap:bridge.Snap(null, 100, true).
Внутрішній код реалізації, не самостійний скрипт.
public int Snap() => bridge.Snap(null, 100, true);Параметри: name (String)
Результат: int / Integer.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.Snap. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Snap:bridge.Snap(name, 100, true).
Внутрішній код реалізації, не самостійний скрипт.
public int Snap(string name) => bridge.Snap(name, 100, true);Параметри: name (String), quality (Integer)
Результат: int / Integer.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.Snap. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Snap:bridge.Snap(name, Math.Max(1, Math.Min(100, quality)), true).
Внутрішній код реалізації, не самостійний скрипт.
public int Snap(string name, int quality) => bridge.Snap(name, Math.Max(1, Math.Min(100, quality)), true);Параметри: file (Any), quality (Any), includeUI (Any)
Результат: int / Integer.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.Register [Snap]. -
InjectionScript.Runtime.InjectionApiUO.Snap:Snap(values[0].ToString(), NumberConversions.ToInt(values[1]), ToBoolean(values[2])). -
InjectionScript.Runtime.InjectionValue.ToString:values[0].ToString(). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(values[1]). -
InjectionScript.Runtime.InjectionApiUO.ToBoolean:ToBoolean(values[2]).
Виклик виконує збережений delegate обробника. Метод реєстрації створює цей delegate під час побудови API.
Внутрішній код реалізації, не самостійний скрипт.
values => new InjectionValue(Snap(values[0].ToString(), NumberConversions.ToInt(values[1]), ToBoolean(values[2])))Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.TextClear();Очищає буфер локального вікна.
Параметрів немає.
void - значення немає. Викликайте окремим рядком; завершення не підтверджує дію сервера.
- Очищає _textWindow; якщо вікно було відкрито, знову показує його з порожнім списком. Зачинене вікно залишається зачиненим. Журнал клієнта не очищується.
- Дія відноситься до локального інтерфейсу/буфера; мережного повідомлення та серверного підтвердження немає.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Команда викликається окремим рядком. Повідомлення перед нею показує початок виклику, а не підтвердження дії сервера.
UO.Print("Calling UO.TextClear");
UO.TextClear();Параметри та порядок виконання:
- Очищає буфер локального вікна.
UO.TextClear();Параметри та порядок виконання:
- Очищає _textWindow; якщо вікно було відкрито, знову показує його з порожнім списком. Зачинене вікно залишається зачиненим. Журнал клієнта не очищується.
return RunScenario();
object? RunScenario()
{
UO.TextPrint("Old line");
UO.TextClear();
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()
{
UO.TextClose();
UO.TextClear();
UO.TextOpen();
return null;
}
}C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
Параметри: Немає параметрів.
Результат: void / Unit.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.TextClear. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.TextClear:bridge.TextClear().
Внутрішній код реалізації, не самостійний скрипт.
public void TextClear() => bridge.TextClear();Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.TextClose();Закриває локальне вікно тексту, зберігаючи буфер.
Параметрів немає.
void - значення немає. Викликайте окремим рядком; завершення не підтверджує дію сервера.
- Задає _textWindowOpen=false та Dispose існуючого YokoTextWindowGump. Список _textWindow не очищається; TextOpen знову покаже рядки.
- Дія відноситься до локального інтерфейсу/буфера; мережного повідомлення та серверного підтвердження немає.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Команда викликається окремим рядком. Повідомлення перед нею показує початок виклику, а не підтвердження дії сервера.
UO.Print("Calling UO.TextClose");
UO.TextClose();Параметри та порядок виконання:
- Закриває локальне вікно тексту, зберігаючи буфер.
UO.TextClose();Параметри та порядок виконання:
- Задає _textWindowOpen=false та Dispose існуючого YokoTextWindowGump. Список _textWindow не очищається; TextOpen знову покаже рядки.
return RunScenario();
object? RunScenario()
{
UO.TextPrint("Retained line");
UO.TextClose();
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()
{
UO.TextPrint("Retained line");
UO.TextClose();
UO.Wait(250);
UO.TextOpen();
return null;
}
}C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
Параметри: Немає параметрів.
Результат: void / Unit.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.TextClose. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.TextClose:bridge.TextClose().
Внутрішній код реалізації, не самостійний скрипт.
public void TextClose() => bridge.TextClose();Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.TextOpen();Відкриває локальне вікно тексту.
Параметрів немає.
void - значення немає. Викликайте окремим рядком; завершення не підтверджує дію сервера.
- Зберігає _textWindowOpen=true і викликає YokoTextWindowGump.Show з поточним _textWindow. Буфер не очищується; повторне відкриття показує накопичені рядки.
- Дія відноситься до локального інтерфейсу/буфера; мережного повідомлення та серверного підтвердження немає.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Команда викликається окремим рядком. Повідомлення перед нею показує початок виклику, а не підтвердження дії сервера.
UO.Print("Calling UO.TextOpen");
UO.TextOpen();Параметри та порядок виконання:
- Відкриває локальне вікно тексту.
UO.TextOpen();Параметри та порядок виконання:
- Зберігає _textWindowOpen=true і викликає YokoTextWindowGump.Show з поточним _textWindow. Буфер не очищується; повторне відкриття показує накопичені рядки.
return RunScenario();
object? RunScenario()
{
UO.TextPrint("Example");
UO.TextOpen();
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()
{
UO.TextOpen();
UO.Wait(500);
UO.TextClose();
return null;
}
}C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
Параметри: Немає параметрів.
Результат: void / Unit.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.TextOpen. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.TextOpen:bridge.TextOpen().
Внутрішній код реалізації, не самостійний скрипт.
public void TextOpen() => bridge.TextOpen();Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.TextPrint(object? text);Додає рядок до локального текстового вікна та відкриває його.
-
text— Текст через ToString; зберігається як переданий.
void - значення немає. Викликайте окремим рядком; завершення не підтверджує дію сервера.
- При ліміті MaxTextWindowLines=2000 видаляє старі рядки, потім додає text або порожній рядок, задає _textWindowOpen=true і показує вікно. Це не UO.Print у журнал і не мова серверу.
- Дія відноситься до локального інтерфейсу/буфера; мережного повідомлення та серверного підтвердження немає.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Команда викликається окремим рядком. Повідомлення перед нею показує початок виклику, а не підтвердження дії сервера.
UO.Print("Calling UO.TextPrint");
UO.TextPrint("Example");Параметри та порядок виконання:
- Додає рядок до локального текстового вікна та відкриває його.
UO.TextPrint("Example");Параметри та порядок виконання:
- При ліміті MaxTextWindowLines=2000 видаляє старі рядки, потім додає text або порожній рядок, задає _textWindowOpen=true і показує вікно. Це не UO.Print у журнал і не мова серверу.
return RunScenario();
object? RunScenario()
{
var message = "Line 1";
UO.TextPrint(message);
UO.TextPrint("Line 2");
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()
{
UO.TextClear();
UO.TextPrint("Fresh report");
UO.TextClose();
return null;
}
}C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
Параметри: text (String)
Результат: void / Unit.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.TextPrint. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.TextPrint:bridge.TextPrint(text).
Внутрішній код реалізації, не самостійний скрипт.
public void TextPrint(string text) => bridge.TextPrint(text);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.UpdateFigure(object? figureID, object? figure);Замінює опис наявної локальної фігури картки.
-
figureID— int ID у state.MapFigures, отриманий AddFigure. Невідомий ID дає 0. -
figure- Array або рядок з |: [kind,coord,x1,y1,x2,y2,brushColor,brushStyle,color,worldNum,text]. Мінімум перші 9 числових полів; worldNum за промовчанням поточна карта, text за промовчанням порожній. -
figure[0] (kind)- kind повинен бути 0..4, coord - 0..1, FigureID - позитивним. WorldMapGump.SetYokoMapFigure повертає 0 при порушенні цих кордонів. -
figure[1] (coord)- kind повинен бути 0..4, coord - 0..1, FigureID - позитивним. WorldMapGump.SetYokoMapFigure повертає 0 при порушенні цих кордонів.
Числовий прапор "int": "1" - розбір успішний і bridge. "SetMapFigure" повернув ненульовий результат, після чого запис оновлено; 0 — ні ID, помилка структури/числового текстового поля або bridge відмовив.
- TryMapFigureArg приймає Array чи |string. Перші 9 полів перетворюються; числовий текст перевіряється TryStr2Int. Непідтримуваний вигляд/короткий запис - 0, помилки перетворення іншого виду можуть переривати скрипт.
- У разі відмови bridge існуючий runtime-запис не замінюється. При успіху зберігається SerializeMapFigure з 10 числовими полями та текстом. Фігура лише локальна, не серверний предмет.
- kind: 0 лінія, 1 еліпс (32 відрізка контуру), 2 контур прямокутника, 3 стрілка, 4 текст. coord = 0 - світові координати з перетворенням на карту, coord = 1 - пікселі щодо області малювання карти. x1/y1 та x2/y2 - кінці/кордону; у світової стрілки x2=y2=0 задає початок Player і ціль x1/y1. color — 0x00BBGGRR (молодший червоний byte), колір контуру. brushColor/brushStyle зберігаються, але рендер їх не читає: заливання немає. worldNum<0 показує на будь-якій карті, інакше тільки вказаній. Текст малюється в першій точці (+3 пікселя у нетекстових фігур) шрифтом карти, не кольором контуру.
- WorldMapGump зберігає малюнки у статичному словнику процесу. Звичайні скрипти/чат/макроси одного світу/профілю використовують загальний GetPersistentState та лічильник ID; окремі процеси Manager не ділять малюнки. World.Clear/YokoScripts.Clear та завантаження стану профілю не очищають і не відновлюють цей словник (loader відновлює тільки UserStatics). Тому малюнки можуть пережити зміну світу/профілю в тому самому процесі з урахуванням worldNum; новий стан може повторно виділити вже існуючий ID малюнка. ClearFigures явно очищає малюнки та записи поточного стану. Успіх - запис/видалення даних, не доказ показу.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
object?[] figure = { 0, 0, UO.X(), UO.Y(), UO.X() + 3, UO.Y(), 0, 0, 255 };
var id = UO.AddFigure(figure);
figure[8] = 65280;
UO.Print("Updated flag: " + Convert.ToString(UO.UpdateFigure(id, figure)));Параметри та порядок виконання:
- Замінює опис наявної локальної фігури картки.
dynamic[] figure = new dynamic[checked((int)(8) + 1)];
figure[0] = 0;
figure[1] = 0;
figure[2] = 100;
figure[3] = 100;
figure[4] = 101;
figure[5] = 101;
figure[6] = 0;
figure[7] = 0;
figure[8] = 0;
UO.Print(UO.UpdateFigure(1, figure));Параметри та порядок виконання:
- TryMapFigureArg приймає Array чи |string. Перші 9 полів перетворюються; числовий текст перевіряється TryStr2Int. Непідтримуваний вигляд/короткий запис - 0, помилки перетворення іншого виду можуть переривати скрипт.
return RunScenario();
object? RunScenario()
{
dynamic[] figure = new dynamic[checked((int)(10) + 1)];
figure[0] = 0;
figure[1] = 0;
figure[2] = UO.GetX();
figure[3] = UO.GetY();
figure[4] = UO.GetX() + 1;
figure[5] = UO.GetY() + 1;
figure[6] = 0;
figure[7] = 0;
figure[8] = 0;
figure[9] = UO.WorldNum();
figure[10] = "Example";
var id = UO.AddFigure(figure);
if (Truth(id > 0))
{
UO.Print(UO.UpdateFigure(id, figure));
UO.RemoveFigure(id);
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Параметри та порядок виконання:
- У разі відмови bridge існуючий runtime-запис не замінюється. При успіху зберігається SerializeMapFigure з 10 числовими полями та текстом. Фігура лише локальна, не серверний предмет.
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 figure = "0|0|100|100|101|101|0|0|0";
UO.Print(UO.UpdateFigure(1, figure));
return null;
}
}C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
Параметри: figureID (Any), figure (Any)
Результат: dynamic / Any.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::TryMapFigureArg:TryMapFigureArg(1, out int[] figure, out string figureText). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetMapFigure:bridge.SetMapFigure(id, figure[0], figure[1], figure[2], figure[3], figure[4], figure[5], figure[6], figure[7], figure[8], figure[9], figureText). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::SerializeMapFigure:SerializeMapFigure(figure, figureText).
Внутрішній код реалізації, не самостійний скрипт.
case "updatefigure":
{
int id = Arg(0);
if (!state.MapFigures.ContainsKey(id) || !TryMapFigureArg(1, out int[] figure, out string figureText))
return InjectionValue.False;
if (bridge.SetMapFigure(id, figure[0], figure[1], figure[2], figure[3], figure[4], figure[5], figure[6], figure[7], figure[8], figure[9], figureText) == 0)
return InjectionValue.False;
state.MapFigures[id] = SerializeMapFigure(figure, figureText);
return InjectionValue.True;
}ClassicUO — Bad Newbie & C# Scripts IDE