Skip to content

DE UO Topic record playback

Codex edited this page Oct 12, 2026 · 4 revisions

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

Aufnahme/Wiedergabe

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.

Abschnitte

Thema Befehle und Erklärungen
SetRec UO.SetRec
UseRec UO.UseRec

Alle Theme-Befehle

Aufnahme

UO.SetRec · UO.UseRec

Beispiele zum Thema

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.

UO.SetRec

Parameter, Ergebnis und alle Szenarien

UO.SetRec();
UO.Light(15);

UO.UseRec

Parameter, Ergebnis und alle Szenarien

UO.SetRec();
UO.Light(15);
UO.UseRec();

Vollständige Befehlsreferenz


UO.SetRec

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

C#-Signaturen

void UO.SetRec();

Bereitet die Aufzeichnung des nächsten Legacy-Befehls UO vor.

Parameter

Es gibt keine Parameter.

Rückgabewert

void – kein Wert. Rufen Sie eine separate Leitung an; Der Abschluss bestätigt nicht die Aktion des Servers.

Verhalten

  • 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.

Eigenständige C#-Skripte

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.

Einfaches Beispiel

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();

1. Direkter Aufruf – direktes Skript

Parameter und Ablauf:

  • Bereitet die Aufzeichnung des nächsten Legacy-Befehls UO vor.
UO.SetRec();
UO.Light(15);

2. Explizite Option – Skriptfunktion

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;
}

3. Vollständige Hilfsfunktion – Skriptklasse

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;
    }
}

Implementierung des Befehls

C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.

UO.SetRec() — UO.SetRec()

Parameter: Keine Parameter.

Ergebnis: void / Unit.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "setrec":

                    state.RecordedAction = string.Empty;

                    recordNextLegacyAction = true;

                    break;

UO.UseRec

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

C#-Signaturen

void UO.UseRec();

Wiederholt den gespeicherten Legacy-Befehl UO.

Parameter

Es gibt keine Parameter.

Rückgabewert

void – kein Wert. Rufen Sie eine separate Leitung an; Der Abschluss bestätigt nicht die Aktion des Servers.

Verhalten

  • 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.

Eigenständige C#-Skripte

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.

Einfaches Beispiel

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();

1. Direkter Aufruf – direktes Skript

Parameter und Ablauf:

  • Wiederholt den gespeicherten Legacy-Befehl UO.
UO.SetRec();
UO.Light(15);
UO.UseRec();

2. Explizite Option – Skriptfunktion

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;
}

3. Vollständige Hilfsfunktion – Skriptklasse

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;
    }
}

Implementierung des Befehls

C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.

UO.UseRec() — UO.UseRec()

Parameter: Keine Parameter.

Ergebnis: void / Unit.

Beim Aufruf:

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;

Clone this wiki locally