Repository navigation
DE UO Topic record playback
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
Home · C# · IDE · UO API · A–Z · Beispiele · Sprachen
Unterstützte Aktionen aufzeichnen und wiederholen. Die Zusammensetzung der Aufnahme- und Wiedergabebeschränkungen wird durch die Implementierung der Befehle bestimmt.
| Thema | Befehle und Erklärungen |
|---|---|
| SetRec | UO.SetRec |
| UseRec | UO.UseRec |
Jede Befehlskarte verfügt über mehrere unabhängige Szenarien: Direktcode, Funktionen und Klassen. Nachfolgend finden Sie ausgewählte kurze Szenarien; Einschränkungen und eine vollständige Analyse sind geplant.
Parameter, Ergebnis und alle Szenarien
UO.SetRec();
UO.Light(15);Parameter, Ergebnis und alle Szenarien
UO.SetRec();
UO.Light(15);
UO.UseRec();Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.SetRec();Bereitet die Aufzeichnung des nächsten Legacy-Befehls UO vor.
Es gibt keine Parameter.
void – kein Wert. Rufen Sie eine separate Leitung an; Der Abschluss bestätigt nicht die Aktion des Servers.
- ExecuteLegacyManualAlias löscht den Status. RecordedAction und setzt recordNextLegacyAction=true. Der nächste Aufruf an denselben Legacy-Dispatcher, außer SetRec/UseRec, serialisiert den Namen und die Argumente vor der Ausführung des Befehls und löscht dann das Flag.
- Dabei werden nicht alle Mausaktionen, alle UO-Getter oder Serverereignisse aufgezeichnet. Wiederholt nur einen Befehl von einem unterstützten Legacy-Dispatcher. Der alte Speicher wird sofort gelöscht.
- In einem regulären Client-Host werden diese Statusdaten vom GetPersistentState-Manager übernommen und gelten für Skripte/Chat/Makros derselben Welt/dieselben Profils und gehören nicht zu einem einzigen Skript. Ein anderer Prozess oder ein scheinbar separater InjectionRuntimeState hat einen anderen Zustand. Das Laden/Löschen eines Profils kann es ersetzen; Die gespeicherten serial werden weiterhin mit der geladenen Welt verglichen.
- Der Eintrag behält die Argumenttypen int, double, string, recursive Array und void bei. Andere Objekte werden als Text ToString geschrieben; Das Live-Objekt/Handle wird bei Wiederholung nicht wiederhergestellt.
- RecordedAction ist der allgemeine Status des Profils und recordNextLegacyAction/replayingLegacyAction sind die privaten Felder dieses InjectionApiUO. Nur diese Instanz zeichnet ihren nächsten Legacy-Aufruf auf. Ein anderes Skript kann einen gemeinsamen Schreibvorgang löschen oder wiederholen, verbraucht jedoch nicht das Schreibwarteflag dieser Instanz.
- Es wird nur SetRec() registriert, streng ohne Argumente. Es löscht RecordedAction sofort, sodass „remain()“ 0 zurückgibt, bevor eine nachfolgende Legacy-Aktion von dieser Instanz geschrieben wird; Durch die Aktivierung der Schreibwartezeit wird keine gespeicherte Aktion erstellt. „remain()“ liest nur das Warteflag und verbraucht es nicht.
Jedes Beispiel kann als separate Datei .csx gespeichert und in IDE ausgeführt werden. Die UO-Objekt- und Wartefunktionen stellen den Host der aktuellen Spielsitzung bereit. Ersetzen Sie Demo-serial-Namen, Koordinaten und Adressen durch Ihre eigenen.
Führe diesen Code als eigene .csx-Datei aus. Die Argumente stehen direkt im Aufruf; ersetze Beispielnamen, Serials und Adressen durch eigene Werte.
Der Befehl steht in einer eigenen Anweisung. Die Meldung davor zeigt den Beginn des Aufrufs und bestätigt keine Serveraktion.
UO.Print("Calling UO.SetRec");
UO.SetRec();Parameter und Ablauf:
- Bereitet die Aufzeichnung des nächsten Legacy-Befehls UO vor.
UO.SetRec();
UO.Light(15);Parameter und Ablauf:
- ExecuteLegacyManualAlias löscht den Status. RecordedAction und setzt recordNextLegacyAction=true. Der nächste Aufruf an denselben Legacy-Dispatcher, außer SetRec/UseRec, serialisiert den Namen und die Argumente vor der Ausführung des Befehls und löscht dann das Flag.
return RunScenario();
object? RunScenario()
{
UO.SetRec();
UO.Sound(0x0040);
UO.UseRec();
return null;
}Parameter und Ablauf:
- Dabei werden nicht alle Mausaktionen, alle UO-Getter oder Serverereignisse aufgezeichnet. Wiederholt nur einen Befehl von einem unterstützten Legacy-Dispatcher. Der alte Speicher wird sofort gelöscht.
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# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.
Parameter: Keine Parameter.
Ergebnis: void / Unit.
Beim Aufruf:
Interner Implementierungscode; kein eigenständiges Skript.
case "setrec":
state.RecordedAction = string.Empty;
recordNextLegacyAction = true;
break;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.UseRec();Wiederholt den gespeicherten Legacy-Befehl UO.
Es gibt keine Parameter.
void – kein Wert. Rufen Sie eine separate Leitung an; Der Abschluss bestätigt nicht die Aktion des Servers.
- TryDeserializeRecordedLegacyAction prüft das YOKOREC1-Präfix und die typisierten Argumente. Kein/ungültiger Eintrag – lokale Meldung, keine Aktion. Ein gültiger Eintrag ruft ExecuteLegacyManualAlias mit dem gespeicherten Namen und den Argumenten auf.
- Das Flag replayingLegacyAction schützt die Wiedergabe davor, sich selbst zu schreiben, und wird auch bei einem Fehler gelöscht
finally. Der Eintrag wird nach Wiederholung nicht gelöscht: UseRec kann erneut aufgerufen werden. Namen/serial werden nach gespeicherten Typen und der aktuellen Welt aufgelöst. - In einem regulären Client-Host werden diese Statusdaten vom GetPersistentState-Manager übernommen und gelten für Skripte/Chat/Makros derselben Welt/dieselben Profils und gehören nicht zu einem einzigen Skript. Ein anderer Prozess oder ein scheinbar separater InjectionRuntimeState hat einen anderen Zustand. Das Laden/Löschen eines Profils kann es ersetzen; Die gespeicherten serial werden weiterhin mit der geladenen Welt verglichen.
- Der Eintrag behält die Argumenttypen int, double, string, recursive Array und void bei. Andere Objekte werden als Text ToString geschrieben; Das Live-Objekt/Handle wird bei Wiederholung nicht wiederhergestellt.
- RecordedAction ist der allgemeine Status des Profils und recordNextLegacyAction/replayingLegacyAction sind die privaten Felder dieses InjectionApiUO. Nur diese Instanz zeichnet ihren nächsten Legacy-Aufruf auf. Ein anderes Skript kann einen gemeinsamen Schreibvorgang löschen oder wiederholen, verbraucht jedoch nicht das Schreibwarteflag dieser Instanz.
Jedes Beispiel kann als separate Datei .csx gespeichert und in IDE ausgeführt werden. Die UO-Objekt- und Wartefunktionen stellen den Host der aktuellen Spielsitzung bereit. Ersetzen Sie Demo-serial-Namen, Koordinaten und Adressen durch Ihre eigenen.
Führe diesen Code als eigene .csx-Datei aus. Die Argumente stehen direkt im Aufruf; ersetze Beispielnamen, Serials und Adressen durch eigene Werte.
Der Befehl steht in einer eigenen Anweisung. Die Meldung davor zeigt den Beginn des Aufrufs und bestätigt keine Serveraktion.
UO.Print("Calling UO.UseRec");
UO.UseRec();Parameter und Ablauf:
- Wiederholt den gespeicherten Legacy-Befehl UO.
UO.SetRec();
UO.Light(15);
UO.UseRec();Parameter und Ablauf:
- TryDeserializeRecordedLegacyAction prüft das YOKOREC1-Präfix und die typisierten Argumente. Kein/ungültiger Eintrag – lokale Meldung, keine Aktion. Ein gültiger Eintrag ruft ExecuteLegacyManualAlias mit dem gespeicherten Namen und den Argumenten auf.
return RunScenario();
object? RunScenario()
{
UO.SetRec();
UO.Sound(0x0040);
UO.Wait(250);
UO.UseRec();
return null;
}Parameter und Ablauf:
- Das Flag replayingLegacyAction schützt die Wiedergabe davor, sich selbst zu schreiben, und wird auch bei einem Fehler gelöscht
finally. Der Eintrag wird nach Wiederholung nicht gelöscht: UseRec kann erneut aufgerufen werden. Namen/serial werden nach gespeicherten Typen und der aktuellen Welt aufgelöst.
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# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.
Parameter: Keine Parameter.
Ergebnis: void / Unit.
Beim Aufruf:
-
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).
Interner Implementierungscode; kein eigenständiges Skript.
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