DE UO Topic sound visual environment - LIHACHTETAN/ClassicUO-Bad-Newbie-CSharp-Scripts-IDE GitHub Wiki

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

Sound & visuelle Umgebung

Home · C# · IDE · UO API · A–Z · Beispiele · Sprachen

Geräusche, Beleuchtung, Jahreszeit und Kundenwettereffekte.

Abschnitte

Thema Befehle und Erklärungen
Sound UO.Sound
PlayWav UO.PlayWav
Light UO.Light
Season UO.SetSeason
Weather Filter UO.FilterWeather

Alle Theme-Befehle

Umfeld

UO.Sound · UO.PlayWav · UO.Alarm · UO.Light · UO.SetSeason · UO.FilterWeather · UO.TicksAnim

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

Parameter, Ergebnis und alle Szenarien

UO.Print(UO.PlayWav("alert.wav"));

UO.Light

Parameter, Ergebnis und alle Szenarien

UO.Light();

Vollständige Befehlsreferenz


UO.Alarm

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

C#-Signaturen

void UO.Alarm();

Gibt das Wort Alarm im lokalen ClassicUO-Syslog aus. Wird als Hinweis zum Eintreten einer Bedingung im Skript verwendet.

Parameter

Es gibt keine Parameter.

Rückgabewert

void – kein Wert. In einer separaten Zeile ausführen. Dies ist kein bool oder eine Bestätigung, dass der Benutzer die Nachricht gesehen hat.

Verhalten

  • Es wird nur die Form UO.Alarm() ohne Parameter registriert. Für Ihren eigenen Text verwenden Sie UO.Print(text).
  • Der Befehl spielt keinen Ton ab, blinkt kein Symbol und aktiviert kein Fenster. Die Nachricht bleibt lokal: Sie wird nicht an den Spielchat gesendet.

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.Alarm");
UO.Alarm();

1. Markieren Sie das Tagebuch – direktes Drehbuch

Parameter und Ablauf:

  • Es gibt keine Parameter; Das Wort Alarm erscheint im Systemprotokoll.
UO.Alarm();

2. Warnen, wenn die Gesundheit niedrig ist – Skriptfunktion

Parameter und Ablauf:

  • Alarm hat keine Textoption. Life gibt die Zahl HP zurück; Print fügt eine klare Beschreibung des Grundes hinzu.
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.Life() < 30))
    {
        UO.Alarm();
        UO.Print("Health is below 30");
    }

    return null;
}

bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

3. Suchergebnis markieren – Skriptklasse

Parameter und Ablauf:

  • 0x0EED – Goldtyp, -1 – jede Farbe, backpack – Rucksack. Alarm wird nur aufgerufen, wenn serial gefunden wird; Setzen Sie einen solchen Anruf nicht ohne Verzögerung in eine Schleife.
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.FindType(0x0EED, -1, "backpack");
        if (Truth(item != ""))
        {
            UO.Alarm();
            UO.Print("Gold stack found: " + Convert.ToString(item));
        }
        else
        {
            UO.Print("No gold stack in the loaded 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;
}

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.Alarm() — UO.Alarm()

Parameter: Keine Parameter.

Ergebnis: void / Unit.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "alarm":

                    SystemMessage(arguments.Length > 0 ? Text(0) : "Alarm"); return InjectionValue.Unit;

UO.FilterWeather

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

C#-Signaturen

void UO.FilterWeather();
void UO.FilterWeather(object? enabled);

Aktiviert oder deaktiviert den Client-Wetterfilter.

Parameter

  • enabled – Optionaler Wert: ohne Argument ist der Filter aktiviert; 0 schaltet sich aus, int ungleich Null schaltet ein.

Rückgabewert

void – kein Rückgabewert.

Verhalten

  • Schreibt das normalisierte Flag in den Laufzeitstatus und übergibt es an den Manager. Der Filter beeinflusst die Verarbeitung des Clients; Serverereignisse und andere Protokolleinstellungen bleiben getrennt.

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.FilterWeather");
UO.FilterWeather();

1. Ohne Argument aktivieren – direktes Skript

Parameter und Ablauf:

  • Eine Anzahl von Argumenten von Null bedeutet „Einschließen“, nicht „Lesen“.
UO.FilterWeather();

2. Ausschalten – Skriptfunktion

Parameter und Ablauf:

  • Ein explizites 0 schaltet den Client-Filter aus.
return  RunScenario();
 object? RunScenario()
{
    UO.FilterWeather(0);
    return null;
}

3. Einschalten und dann ausschalten – Skriptklasse

Parameter und Ablauf:

  • Der Filter schaltet sich ein und kehrt deutlich in den Aus-Zustand zurück.
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.FilterWeather(1);
        UO.FilterWeather(0);
        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.FilterWeather() — UO.FilterWeather()

Parameter: Keine Parameter.

Ergebnis: void / Unit.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "filterweather": state.WeatherFilter = arguments.Length == 0 || Arg(0) != 0 ? 1 : 0; bridge.SetWeatherFilter(state.WeatherFilter); break;

UO.FilterWeather(enabled) — UO.FilterWeather(Any)

Parameter: enabled (Any)

Ergebnis: void / Unit.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "filterweather": state.WeatherFilter = arguments.Length == 0 || Arg(0) != 0 ? 1 : 0; bridge.SetWeatherFilter(state.WeatherFilter); break;

UO.Light

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

C#-Signaturen

void UO.Light();
void UO.Light(object? value);

Legt lokal die Gesamtbeleuchtung des Clients fest.

Parameter

  • value – Optionale Ganzzahl: 0..30, begrenzt auf diesen Bereich. Die Form ohne Argumente verwendet 0; Dies ist ein Schreibvorgang, kein Lesevorgang.

Rückgabewert

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

Verhalten

  • ExecuteLegacyManualAlias übergibt Arg(0), wobei das fehlende Argument 0 ist. SetLight weist Light.Overall und Light.RealOverall den begrenzten Wert von byte zu.
  • Ändert die Beleuchtung anderer Spieler nicht und fordert sie nicht vom Server an. Das folgende Beleuchtungsserverpaket kann den Wert ersetzen.

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.Light");
UO.Light();

1. Direkter Aufruf – direktes Skript

Parameter und Ablauf:

  • Legt lokal die Gesamtbeleuchtung des Clients fest.
UO.Light();

2. Explizite Option – Skriptfunktion

Parameter und Ablauf:

  • ExecuteLegacyManualAlias übergibt Arg(0), wobei das fehlende Argument 0 ist. SetLight weist Light.Overall und Light.RealOverall den begrenzten Wert von byte zu.
return  RunScenario();
 object? RunScenario()
{
    UO.Light(15);
    return null;
}

3. Vollständige Hilfsfunktion – Skriptklasse

Parameter und Ablauf:

  • Ändert die Beleuchtung anderer Spieler nicht und fordert sie nicht vom Server an. Das folgende Beleuchtungsserverpaket kann den Wert ersetzen.
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.Light(99);
        UO.Print("Light clamped to 30");
        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.Light() — UO.Light()

Parameter: Keine Parameter.

Ergebnis: void / Unit.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "light": bridge.SetLight(Arg(0)); break;

UO.Light(value) — UO.Light(Any)

Parameter: value (Any)

Ergebnis: void / Unit.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "light": bridge.SetLight(Arg(0)); break;

UO.PlayWav

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

C#-Signaturen

int UO.PlayWav(object? file);

Spielt eine lokale Audiodatei ab.

Parameter

  • file – Pfad zur Audiodatei. Der absolute Pfad bleibt erhalten, der relative Pfad wird aus CUOEnviroment.ExecutablePath aufgelöst. Die Erweiterung selbst wird nicht überprüft: Die Datei lautet SoundEffect.FromStream.

Rückgabewert

Numerisches Flag int: 1 – sound.Play() akzeptiert, 0 – keine Datei, Wiedergabe fehlgeschlagen oder Fehler abgefangen. Dies ist nicht das Ende der Wiedergabe.

Verhalten

  • Bridge öffnet die Datei zum Lesen, dekodiert SoundEffect.FromStream, speichert empfangene Sounds in einer begrenzten _sounds-Liste und löscht/entsorgt alte, wenn das Limit erreicht ist.
  • Wenn eine Datei/ein Fehler nicht existiert, wird eine Meldung angezeigt, das Ergebnis ist 0. Der Befehl wartet nicht auf das Ende des Tons und überträgt die Datei nicht auf den Server.

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.

Das Ergebnis eines Aufrufs wird im Journal ausgegeben. Zahlen werden nicht in bool umgewandelt; bei Arrays wird die Anzahl der Elemente angezeigt.

var result = UO.PlayWav("alert.wav");
UO.Print("PlayWav: " + Convert.ToString(result));

1. Direkter Aufruf – direktes Skript

Parameter und Ablauf:

  • Spielt eine lokale Audiodatei ab.
UO.Print(UO.PlayWav("alert.wav"));

2. Explizite Option – Skriptfunktion

Parameter und Ablauf:

  • Bridge öffnet die Datei zum Lesen, dekodiert SoundEffect.FromStream, speichert empfangene Sounds in einer begrenzten _sounds-Liste und löscht/entsorgt alte, wenn das Limit erreicht ist.
return  RunScenario();
 object? RunScenario()
{
    UO.Print(UO.PlayWav("C:\\UO Sounds\\alert.wav"));
    return null;
}

3. Vollständige Hilfsfunktion – Skriptklasse

Parameter und Ablauf:

  • Wenn eine Datei/ein Fehler nicht existiert, wird eine Meldung angezeigt, das Ergebnis ist 0. Der Befehl wartet nicht auf das Ende des Tons und überträgt die Datei nicht auf den Server.
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 accepted = UO.PlayWav("alert.wav");
        if (Truth(accepted == 0))
        {
            UO.Print("Audio file could not be played");
        }

        return null;
    }

    bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}

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.PlayWav(file) — UO.PlayWav(Any)

Parameter: file (Any/String)

Ergebnis: int / Any.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "playwav": return new InjectionValue(bridge.PlayWav(Text(0)));

UO.PlayWav(file) — UO.PlayWav(String)

Parameter: file (Any/String)

Ergebnis: int / Integer.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

public int PlayWav(string file) => bridge.PlayWav(file);

UO.SetSeason

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

C#-Signaturen

void UO.SetSeason(object? season);

Ändert lokal die angezeigte Jahreszeit.

Parameter

  • season — int: 0..4; Werte unter 0/über 4 sind auf die nächstgelegene Grenze begrenzt. Die Nummer entspricht der Enumeration Season des Clients.

Rückgabewert

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

Verhalten

  • Bridge.SetSeason ruft _world.ChangeSeason((Season)clamp(season,0,4), -1) auf. Dies ist eine Darstellung der Welt des Clients und keine Aufforderung, die Serversaison zu ändern.
  • Serverdaten können die Saison später noch einmal ändern. Der Befehl ändert nicht die Karte, das Serverwetter oder das Kalenderdatum.

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.SetSeason");
UO.SetSeason(0);

1. Direkter Aufruf – direktes Skript

Parameter und Ablauf:

  • Ändert lokal die angezeigte Jahreszeit.
UO.SetSeason(0);

2. Explizite Option – Skriptfunktion

Parameter und Ablauf:

  • Bridge.SetSeason ruft _world.ChangeSeason((Season)clamp(season,0,4), -1) auf. Dies ist eine Darstellung der Welt des Clients und keine Aufforderung, die Serversaison zu ändern.
return  RunScenario();
 object? RunScenario()
{
    UO.SetSeason(4);
    return null;
}

3. Vollständige Hilfsfunktion – Skriptklasse

Parameter und Ablauf:

  • Serverdaten können die Saison später noch einmal ändern. Der Befehl ändert nicht die Karte, das Serverwetter oder das Kalenderdatum.
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.SetSeason(99);
        UO.Print("Season clamped to 4");
        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.SetSeason(season) — UO.SetSeason(Any)

Parameter: season (Any)

Ergebnis: void / Unit.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "setseason": bridge.SetSeason(Arg(0)); break;

UO.Sound

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

C#-Signaturen

void UO.Sound(object? soundId);

Spielt Ton auf ID von Client-Ressourcen ab.

Parameter

  • soundId - int ID Ressourcensound UO; nicht der Weg zu WAV und nicht die Dauer.

Rückgabewert

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

Verhalten

  • ExecuteLegacyManualAlias ruft Bridge.PlaySound auf, wobei RequireGameView("PlaySound").Audio.PlaySound(Sound) im Spielthread ausgeführt wird.
  • Erfordert ein geöffnetes Grafikfenster mit Audio. Ein fehlender Fehler GUI kann den Anruf beenden; Dieser void-Befehl gibt kein Wiedergabeergebnis zurück. Für eine lokale Datei verwenden Sie PlayWav.

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.Sound");
UO.Sound(0x0040);

1. Direkter Aufruf – direktes Skript

Parameter und Ablauf:

  • Spielt Ton auf ID von Client-Ressourcen ab.
UO.Sound(0x0040);

2. Explizite Option – Skriptfunktion

Parameter und Ablauf:

  • ExecuteLegacyManualAlias ruft Bridge.PlaySound auf, wobei RequireGameView("PlaySound").Audio.PlaySound(Sound) im Spielthread ausgeführt wird.
return  RunScenario();
 object? RunScenario()
{
    var soundId = 0x0040;
    UO.Sound(soundId);
    return null;
}

3. Vollständige Hilfsfunktion – Skriptklasse

Parameter und Ablauf:

  • Erfordert ein geöffnetes Grafikfenster mit Audio. Ein fehlender Fehler GUI kann den Anruf beenden; Dieser Unit-Befehl gibt kein Wiedergabeergebnis zurück. Für eine lokale Datei verwenden Sie PlayWav.
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.Sound(0x0040);
        UO.Wait(250);
        UO.Print("Sound request made");
        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.Sound(soundId) — UO.Sound(Any)

Parameter: soundId (Any)

Ergebnis: void / Unit.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "sound": bridge.PlaySound(Arg(0)); break;

UO.TicksAnim

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

C#-Signaturen

int UO.TicksAnim();

Liest die gespeicherte Marke TicksAnim.

Parameter

Es gibt keine Parameter.

Rückgabewert

int – markieren Sie UO.Timer in Zehntelsekunden ab Beginn der Laufzeit. 0 – die Marke wurde noch nicht gesetzt oder das Ereignis ist in der ersten Zehntelsekunde eingetreten; es handelt sich nicht um Millisekunden oder Kalenderzeit.

Verhalten

  • Gibt das Feld ticksAnim zurück. Es wird durch Morph oder ein Move-Ergebnis ungleich Null aktualisiert; Es handelt sich nicht um eine automatische Überwachung aller manuellen/Serveraktivitäten. Der Befehl selbst ändert die Markierung nicht.
  • UO.Timer() – die Marke berechnet das Alter in Zehntelsekunden. Markierungen zwischen verschiedenen Laufzeiten werden nicht verglichen.

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.

Das Ergebnis eines Aufrufs wird im Journal ausgegeben. Zahlen werden nicht in bool umgewandelt; bei Arrays wird die Anzahl der Elemente angezeigt.

var result = UO.TicksAnim();
UO.Print("TicksAnim: " + Convert.ToString(result));

1. Direkter Aufruf – direktes Skript

Parameter und Ablauf:

  • Liest die gespeicherte Marke TicksAnim.
var stamp = UO.TicksAnim();
UO.Print(stamp);

2. Explizite Option – Skriptfunktion

Parameter und Ablauf:

  • Gibt das Feld ticksAnim zurück. Es wird durch Morph oder ein Move-Ergebnis ungleich Null aktualisiert; Es handelt sich nicht um eine automatische Überwachung aller manuellen/Serveraktivitäten. Der Befehl selbst ändert die Markierung nicht.
return  RunScenario();
 object? RunScenario()
{
    var stamp = UO.TicksAnim();
    var ageTenths = UO.Timer() - stamp;
    UO.Print(ageTenths);
    return null;
}

3. Vollständige Hilfsfunktion – Skriptklasse

Parameter und Ablauf:

  • UO.Timer() – die Marke berechnet das Alter in Zehntelsekunden. Markierungen zwischen verschiedenen Laufzeiten werden nicht verglichen.
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 before = UO.TicksAnim();
        UO.Wait(250);
        var after = UO.TicksAnim();
        UO.Print(before = after);
        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.TicksAnim() — UO.TicksAnim()

Parameter: Keine Parameter.

Ergebnis: int / Integer.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

public int TicksAnim() => ticksAnim;
⚠️ **GitHub.com Fallback** ⚠️