Repository navigation
UO Topic record playback
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
Головна · C# · IDE · Команди UO · За абеткою · Приклади · Мови
Запис підтримуваних дій та їх повторення. Які саме дії зберігаються й відтворюються, зазначено в описі відповідної команди.
| Тема | Команди та пояснення |
|---|---|
| Початок запису | UO.SetRec |
| Відтворення запису | UO.UseRec |
Нижче наведено короткі приклади. У повному описі кожної команди є параметри, результат, обмеження та кілька самостійних скриптів: прямий код, варіант із функцією та варіант із класом.
Параметри, результат та всі сценарії
UO.SetRec();
UO.Light(15);Параметри, результат та всі сценарії
UO.SetRec();
UO.Light(15);
UO.UseRec();Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.SetRec();Готує запис наступної legacy-команди UO.
Параметрів немає.
void - значення немає. Викликайте окремим рядком; завершення не підтверджує дію сервера.
- ExecuteLegacyManualAlias очищає state.RecordedAction і задає recordNextLegacyAction=true. Наступний виклик того ж legacy-dispatcher, окрім SetRec/UseRec, серіалізує ім'я та аргументи до виконання команди, потім знімає прапор.
- Це не запис усіх дій мишею, будь-яких UO getters або серверних подій. Повторює лише одну команду підтримуваного legacy-dispatcher. Старе збереження стирається відразу.
- У звичайному клієнтському host ці дані стану беруться з GetPersistentState менеджера та загальні для скриптів/чату/макросів одного світу/профілю, а не належать одному скрипту. Інший процес або явно окремий InjectionRuntimeState має інший стан. Завантаження/очищення профілю може його замінити; збережені serial все одно перевіряються по завантаженому світу.
- Запис зберігає види аргументів int, double, string, рекурсивний Array та void. Інші Object записуються як текст ToString; живий об'єкт/handle при повторі не відновлюється.
- RecordedAction — загальний стан профілю, а recordNextLegacyAction/replayingLegacyAction — private-поля цього InjectionApiUO. Тільки цей екземпляр записує свій наступний legacy-дзвінок. Інший скрипт може очистити або повторити загальний запис, але не витрачає прапор очікування на запис цього екземпляра.
- Зареєстровано лише SetRec() суворо без аргументів. Вона відразу очищає RecordedAction, тому remain() повертає 0 до запису наступної legacy-дії цим екземпляром; включення очікування запису не створює збережене дію. remain() тільки читає та не витрачає прапор очікування.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Команда викликається окремим рядком. Повідомлення перед нею показує початок виклику, а не підтвердження дії сервера.
UO.Print("Calling UO.SetRec");
UO.SetRec();Параметри та порядок виконання:
- Готує запис наступної legacy-команди UO.
UO.SetRec();
UO.Light(15);Параметри та порядок виконання:
- ExecuteLegacyManualAlias очищає state.RecordedAction і задає recordNextLegacyAction=true. Наступний виклик того ж legacy-dispatcher, окрім SetRec/UseRec, серіалізує ім'я та аргументи до виконання команди, потім знімає прапор.
return RunScenario();
object? RunScenario()
{
UO.SetRec();
UO.Sound(0x0040);
UO.UseRec();
return null;
}Параметри та порядок виконання:
- Це не запис усіх дій мишею, будь-яких UO getters або серверних подій. Повторює лише одну команду підтримуваного legacy-dispatcher. Старе збереження стирається відразу.
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.SetRec();
UO.TextPrint("This is not a legacy recording route");
UO.Light(15);
UO.UseRec();
return null;
}
}C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
Параметри: Немає параметрів.
Результат: void / Unit.
Під час виклику:
Внутрішній код реалізації, не самостійний скрипт.
case "setrec":
state.RecordedAction = string.Empty;
recordNextLegacyAction = true;
break;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.UseRec();Повторює збережену legacy-команду UO.
Параметрів немає.
void - значення немає. Викликайте окремим рядком; завершення не підтверджує дію сервера.
- TryDeserializeRecordedLegacyAction перевіряє префікс YOKOREC1 та typed-аргументи. Ні/невірний запис – локальне повідомлення, дії немає. Допустимий запис викликає ExecuteLegacyManualAlias із збереженим ім'ям та аргументами.
- Прапор replayingLegacyAction захищає повтор від запису самого себе і скидається
finally, навіть при помилці. Запис не видаляється після повтору: UseRec можна викликати знову. Імена/serial дозволяються відповідно до збережених типів та поточного світу. - У звичайному клієнтському host ці дані стану беруться з GetPersistentState менеджера та загальні для скриптів/чату/макросів одного світу/профілю, а не належать одному скрипту. Інший процес або явно окремий InjectionRuntimeState має інший стан. Завантаження/очищення профілю може його замінити; збережені serial все одно перевіряються по завантаженому світу.
- Запис зберігає види аргументів int, double, string, рекурсивний Array та void. Інші Object записуються як текст ToString; живий об'єкт/handle при повторі не відновлюється.
- RecordedAction — загальний стан профілю, а recordNextLegacyAction/replayingLegacyAction — private-поля цього InjectionApiUO. Тільки цей екземпляр записує свій наступний legacy-дзвінок. Інший скрипт може очистити або повторити загальний запис, але не витрачає прапор очікування на запис цього екземпляра.
Кожен приклад можна зберегти окремим файлом .csx та запускати в IDE. Об'єкт UO та функції очікування надає host поточної ігрової сесії. Демонстраційні serial, імена, координати та адреси замініть своїми.
Виконайте цей код як окремий файл .csx. Аргументи видно безпосередньо у виклику; демонстраційні імена, serial та адреси замініть своїми.
Команда викликається окремим рядком. Повідомлення перед нею показує початок виклику, а не підтвердження дії сервера.
UO.Print("Calling UO.UseRec");
UO.UseRec();Параметри та порядок виконання:
- Повторює збережену legacy-команду UO.
UO.SetRec();
UO.Light(15);
UO.UseRec();Параметри та порядок виконання:
- TryDeserializeRecordedLegacyAction перевіряє префікс YOKOREC1 та typed-аргументи. Ні/невірний запис – локальне повідомлення, дії немає. Допустимий запис викликає ExecuteLegacyManualAlias із збереженим ім'ям та аргументами.
return RunScenario();
object? RunScenario()
{
UO.SetRec();
UO.Sound(0x0040);
UO.Wait(250);
UO.UseRec();
return null;
}Параметри та порядок виконання:
- Прапор replayingLegacyAction захищає повтор від запису самого себе і скидається
finally, навіть при помилці. Запис не видаляється після повтору: UseRec можна викликати знову. Імена/serial дозволяються відповідно до збережених типів та поточного світу.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
UO.SetRec();
UO.Light(15);
UO.UseRec();
UO.Wait(250);
UO.UseRec();
return null;
}
}C# враховує регістр. Використовуйте точне ім’я UO. Числові прапорці порівнюйте з 0; bool використовуйте лише там, де сигнатура повертає bool.
Параметри: Немає параметрів.
Результат: void / Unit.
Під час виклику:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
InjectionScript.Runtime.InjectionApiUO.TryDeserializeRecordedLegacyAction:TryDeserializeRecordedLegacyAction(state.RecordedAction, out string recordedName, out InjectionValue[] recordedArguments). -
InjectionScript.Runtime.InjectionApiUO.SystemMessage:SystemMessage("UseRec: no recorded UO action is available. Call UO.SetRec() before the action to record."). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias:ExecuteLegacyManualAlias(recordedName, recordedArguments).
Внутрішній код реалізації, не самостійний скрипт.
case "userec":
if (!TryDeserializeRecordedLegacyAction(state.RecordedAction, out string recordedName, out InjectionValue[] recordedArguments))
{
if (bridge != null) SystemMessage("UseRec: no recorded UO action is available. Call UO.SetRec() before the action to record.");
break;
}
replayingLegacyAction = true;
try
{
ExecuteLegacyManualAlias(recordedName, recordedArguments);
}
finally
{
replayingLegacyAction = false;
}
break;ClassicUO — Bad Newbie & C# Scripts IDE