DE UO Topic speech chat - LIHACHTETAN/ClassicUO-Bad-Newbie-CSharp-Scripts-IDE GitHub Wiki

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

Sprache und Chat

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

Charaktersprache, Emotionen, Chatkanäle und Filter. Der lokale Nachrichtendruck im Client befindet sich im Client UI.

Abschnitte

Thema Befehle und Erklärungen
Say UO.Say
SayU UO.SayU
UOSay UO.UOSay
Emote UO.EmoteAction · UO.Bow · UO.Salute
Speech Filters UO.FilterSpeech
Global Chat UO.GlobalChatSendMsg · UO.GlobalChatActiveChannel
Channels UO.GlobalChatChannelsList · UO.GlobalChatJoinChannel · UO.GlobalChatLeaveChannel
Ignore Users UO.AddChatUserIgnore · UO.ClearChatUserIgnore

Alle Theme-Befehle

Rede

UO.Say · UO.SayU · UO.UOSay · UO.UOSayColor · UO.Msg · UO.UOAMessage · UO.FixTalk

Emote

UO.Bow · UO.Salute · UO.EmoteAction

Filter / Kanäle

UO.FilterSpeech · UO.AddChatUserIgnore · UO.ClearChatUserIgnore · UO.GlobalChatActiveChannel · UO.GlobalChatChannelsList · UO.GlobalChatJoinChannel · UO.GlobalChatLeaveChannel · UO.GlobalChatSendMsg

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

Parameter, Ergebnis und alle Szenarien

if (Truth(UO.Connected()))
{
    UO.Say("bank");
}

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

UO.GlobalChatSendMsg

Parameter, Ergebnis und alle Szenarien

UO.GlobalChatSendMsg("Hello");

Vollständige Befehlsreferenz


UO.AddChatUserIgnore

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

C#-Signaturen

void UO.AddChatUserIgnore(object? userName);

Fügt den Namen des Absenders zur Filterliste für lokale Protokollnachrichten hinzu. Der Filter arbeitet auf diesem Client und sendet keine Anfrage an den Server.

Parameter

  • userName ist der Name des Protokollabsenders. Ein Wert, der leer ist oder Leerzeichen enthält, wird ignoriert; Randräume werden entfernt.

Rückgabewert

void. Der Befehl gibt keine erfolgreiche Hinzufügung zurück.

Verhalten

  • Beim Vergleich des Absendernamens wird die Groß-/Kleinschreibung nicht beachtet. Nachrichten von einem übereinstimmenden Namen werden von einem lokalen Protokollfilter ausgeblendet; Dadurch wird kein Spieler auf dem Server blockiert. UO.ClearChatUserIgnore() löscht die gesamte lokale Namensliste. Durch das Löschen des Filters werden Datensätze, die bereits von der Anzeige ausgeschlossen wurden, nicht wiederhergestellt.

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

1. Neue Protokolleinträge unter diesem Namen im aktuellen Mandanten ausblenden. - direktes Drehbuch

Parameter und Ablauf:

  • Neue Protokolleinträge unter diesem Namen im aktuellen Mandanten ausblenden.
UO.AddChatUserIgnore("ExampleVendor");

2. Übergeben Sie den Namen über eine String-Variable. - Skriptfunktion

Parameter und Ablauf:

  • Übergeben Sie den Namen über eine String-Variable.
return  RunScenario();
 object? RunScenario()
{
    var sender = "ExampleVendor";
    UO.AddChatUserIgnore(sender);
    return null;
}

3. Fügen Sie dem lokalen Filter zwei Namen hinzu; Der Anruf blockiert sie nicht auf dem Server. - Skriptklasse

Parameter und Ablauf:

  • Fügen Sie dem lokalen Filter zwei Namen hinzu; Der Anruf blockiert sie nicht auf dem 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()
    {
        UO.AddChatUserIgnore("ExampleVendor");
        UO.AddChatUserIgnore("ExamplePlayer");
        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.AddChatUserIgnore(userName) — UO.AddChatUserIgnore(Any)

Parameter: userName (Any)

Ergebnis: void / Unit.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "addchatuserignore": bridge.AddChatUserIgnore(Text(0)); return InjectionValue.Unit;

UO.Bow

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

C#-Signaturen

void UO.Bow();

Sendet die Aktion des Bogencharakters über GameActions.EmoteAction.

Parameter

Es gibt keine Parameter.

Rückgabewert

void – kein Rückgabewert.

Verhalten

  • Dies ist die Animation/Aktion des Charakters. Der Befehl gibt keine Serverbestätigung zurück und wartet nicht auf den Abschluss der Animation.

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

1. Bow – direktes Drehbuch

Parameter und Ablauf:

  • Schicken Sie eine Verbeugung.
UO.Bow();

2. Verbeugen Sie sich beim Verbinden – Skriptfunktion

Parameter und Ablauf:

  • Vor dem Absenden der Aktion wird die Verbindung überprüft.
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.Connected()))
    {
        UO.Bow();
    }

    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. Hallo Prozedur – Skriptklasse

Parameter und Ablauf:

  • Die vollständig deklarierte Prozedur löst dieselbe Aktion aus.
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()
    {
        Greet();
        return null;
    }

    void Greet()
    {
        UO.Bow();
    }
}

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

Parameter: Keine Parameter.

Ergebnis: void / Unit.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "bow": bridge.Bow(); return InjectionValue.Unit;

UO.ClearChatUserIgnore

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

C#-Signaturen

void UO.ClearChatUserIgnore();

Entfernt alle Filter für Absendernamen, bei denen die Groß-/Kleinschreibung nicht berücksichtigt wird JournalManager.

Parameter

Es gibt keine Parameter.

Rückgabewert

void – kein Rückgabewert.

Verhalten

  • Durch das Entfernen von Filtern werden keine Verlaufseinträge gelöscht oder AddJournalIgnore-Textfilter aufgehoben.

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

1. Status löschen – direktes Skript

Parameter und Ablauf:

  • Entfernt alle Filter für Absendernamen, bei denen die Groß-/Kleinschreibung nicht berücksichtigt wird JournalManager.
UO.ClearChatUserIgnore();

2. Nach dem Setup löschen – Skriptfunktion

Parameter und Ablauf:

  • Aktivieren Sie die Anzeige von Nachrichten im Namen des Anbieters erneut.
return  RunScenario();
 object? RunScenario()
{
    UO.AddChatUserIgnore("Vendor");
    UO.ClearChatUserIgnore();
    return null;
}

3. Re-Purge – Skriptklasse

Parameter und Ablauf:

  • Das Löschen eines leeren Satzes ist akzeptabel und erstellt keine neue Einstellung.
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.ClearChatUserIgnore();
        UO.ClearChatUserIgnore();
        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.ClearChatUserIgnore() — UO.ClearChatUserIgnore()

Parameter: Keine Parameter.

Ergebnis: void / Unit.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "clearchatuserignore": bridge.ClearChatUserIgnore(); return InjectionValue.Unit;

UO.EmoteAction

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

C#-Signaturen

void UO.EmoteAction(object? action);

Sendet den Namen der Zeichenaktion/Animationszeichenfolge an GameActions.EmoteAction.

Parameter

  • action – Aktionsname, z. B. Verbeugung oder Salut; umgewandelt in string. Die Aktionserkennung erfolgt durch GameActions.

Rückgabewert

void – kein Rückgabewert.

Verhalten

  • Dies ist eine Charakteraktion, nicht das Abdrucken einer Phrase in einer Zeitschrift. Der Befehl gibt keine Serverbestätigung zurück und wartet nicht auf eine Animation.

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

1. Bow – direktes Drehbuch

Parameter und Ablauf:

  • Der Aktionsname ist „bow“.
UO.EmoteAction("bow");

2. Willkommen – Skriptfunktion

Parameter und Ablauf:

  • Der Aktionsname salute wird übergeben.
return  RunScenario();
 object? RunScenario()
{
    UO.EmoteAction("salute");
    return null;
}

3. Name aus Variable – Skriptklasse

Parameter und Ablauf:

  • Die Aktionszeichenfolge wird ohne Zuweisung eines Objektziels übergeben.
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 action = "bow";
        UO.EmoteAction(action);
        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.EmoteAction(action) — UO.EmoteAction(Any)

Parameter: action (Any)

Ergebnis: void / Unit.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "emoteaction": bridge.EmoteAction(Text(0)); break;

UO.FilterSpeech

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

C#-Signaturen

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

Aktiviert oder deaktiviert den Client-Sprachfilter.

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

1. Ohne Argument aktivieren – direktes Skript

Parameter und Ablauf:

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

2. Ausschalten – Skriptfunktion

Parameter und Ablauf:

  • Ein explizites 0 schaltet den Client-Filter aus.
return  RunScenario();
 object? RunScenario()
{
    UO.FilterSpeech(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.FilterSpeech(1);
        UO.FilterSpeech(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.FilterSpeech() — UO.FilterSpeech()

Parameter: Keine Parameter.

Ergebnis: void / Unit.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "filterspeech": state.SpeechFilter = arguments.Length == 0 || Arg(0) != 0 ? 1 : 0; bridge.SetSpeechFilter(state.SpeechFilter); break;

UO.FilterSpeech(enabled) — UO.FilterSpeech(Any)

Parameter: enabled (Any)

Ergebnis: void / Unit.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "filterspeech": state.SpeechFilter = arguments.Length == 0 || Arg(0) != 0 ? 1 : 0; bridge.SetSpeechFilter(state.SpeechFilter); break;

UO.FixTalk

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

C#-Signaturen

void UO.FixTalk();

Gibt einen Hinweis aus, dass der ältere native Client-Patch FixTalk von ClassicUO nicht benötigt wird.

Parameter

Es gibt keine Parameter.

Rückgabewert

void – kein Rückgabewert.

Verhalten

  • Der Zweig ExecuteLegacyManualAlias ruft nur SystemMessage auf. Bewegung, Sprache, Container oder Netzwerkprotokoll werden nicht korrigiert.

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

1. Kompatibilitätshinweis – Direct Script

Parameter und Ablauf:

  • Die Meldung beschreibt, dass der alte Patch nicht benötigt wird.
UO.FixTalk();

2. Prozedur aufrufen – Skriptfunktion

Parameter und Ablauf:

  • Das Kompatibilitätsverfahren verändert die Spielwelt nicht.
return  RunScenario();
 object? RunScenario()
{
    CompatibilityNotice();
    return null;
}

void CompatibilityNotice()
{
    UO.FixTalk();
}

3. Skriptfortsetzung – Skriptklasse

Parameter und Ablauf:

  • Nach der Diagnosemeldung wird die Ausführung fortgesetzt.
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.FixTalk();
        UO.Print("continued");
        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.FixTalk() — UO.FixTalk()

Parameter: Keine Parameter.

Ergebnis: void / Unit.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "boxhack":

                case "fixtalk":

                case "fixwalk":

                    SystemMessage($"{name}: obsolete native-client patch; ClassicUO does not require it.");

                    break;

UO.GlobalChatActiveChannel

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

C#-Signaturen

dynamic UO.GlobalChatActiveChannel();

Liest ChatManager.CurrentChannelName.

Parameter

Es gibt keine Parameter.

Rückgabewert

string - CurrentChannelName oder eine leere Zeile, wenn der Kanal nicht ausgewählt ist.

Verhalten

  • Liest ChatManager.CurrentChannelName. Leere Zeile – kein Name, kein Fehlercode; der Kanal selbst ist nicht eingetragen.
  • Liest den aktuellen lokalen Status. Es gibt kein Paket, Ziel oder automatische Aktualisierung; Einzelne Lesevorgänge können unterschiedliche Zustände aufweisen.

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.

object? result = UO.GlobalChatActiveChannel();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));

1. Direkter Aufruf – direktes Skript

Parameter und Ablauf:

  • Liest ChatManager.CurrentChannelName.
UO.Print(UO.GlobalChatActiveChannel());

2. Explizite Option – Skriptfunktion

Parameter und Ablauf:

  • Liest ChatManager.CurrentChannelName. Leere Zeile – kein Name, kein Fehlercode; der Kanal selbst ist nicht eingetragen.
return  RunScenario();
 object? RunScenario()
{
    var channel = UO.GlobalChatActiveChannel();
    if (Truth(Len(channel) > 0))
    {
        UO.Print(channel);
    }

    return null;
}

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

3. Vollständige Hilfsfunktion – Skriptklasse

Parameter und Ablauf:

  • Liest den aktuellen lokalen Status. Es gibt kein Paket, Ziel oder automatische Aktualisierung; Einzelne Lesevorgänge können unterschiedliche Zustände aufweisen.
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.GlobalChatActiveChannel();
        UO.Wait(500);
        var after = UO.GlobalChatActiveChannel();
        UO.Print(before);
        UO.Print(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.GlobalChatActiveChannel() — UO.GlobalChatActiveChannel()

Parameter: Keine Parameter.

Ergebnis: dynamic / Any.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "globalchatactivechannel": return new InjectionValue(bridge.GlobalChatActiveChannel());

UO.GlobalChatChannelsList

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

C#-Signaturen

dynamic UO.GlobalChatChannelsList();

Bridge gibt ChatManager.Channels.Keys.OrderBy(name => name) zurück.

Parameter

Es gibt keine Parameter.

Rückgabewert

Array von Kanalnamenszeichenfolgen, sortiert nach Namen. Eine leere lokale Tabelle erzeugt ein leeres Array.

Verhalten

  • Bridge gibt ChatManager.Channels.Keys.OrderBy(name => name) zurück. Die Liste ist dem Client bekannt und möglicherweise nicht vollständig, bis der Server aktualisiert wird.
  • Liest den aktuellen lokalen Status. Es gibt kein Paket, Ziel oder automatische Aktualisierung; Einzelne Lesevorgänge können unterschiedliche Zustände aufweisen.

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.

object? result = UO.GlobalChatChannelsList();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));

1. Direkter Aufruf – direktes Skript

Parameter und Ablauf:

  • Bridge gibt ChatManager.Channels.Keys.OrderBy(name => name) zurück.
var channels = UO.GlobalChatChannelsList();
UO.Print(UO.GetArrayLength(channels));

2. Explizite Option – Skriptfunktion

Parameter und Ablauf:

  • Bridge gibt ChatManager.Channels.Keys.OrderBy(name => name) zurück. Die Liste ist dem Client bekannt und möglicherweise nicht vollständig, bis der Server aktualisiert wird.
return  RunScenario();
 object? RunScenario()
{
    var channels = UO.GlobalChatChannelsList();
    if (Truth(UO.GetArrayLength(channels) > 0))
    {
        UO.Print(channels[0]);
    }

    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. Vollständige Hilfsfunktion – Skriptklasse

Parameter und Ablauf:

  • Liest den aktuellen lokalen Status. Es gibt kein Paket, Ziel oder automatische Aktualisierung; Einzelne Lesevorgänge können unterschiedliche Zustände aufweisen.
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.GlobalChatChannelsList();
        UO.Wait(500);
        var after = UO.GlobalChatChannelsList();
        UO.Print(before);
        UO.Print(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.GlobalChatChannelsList() — UO.GlobalChatChannelsList()

Parameter: Keine Parameter.

Ergebnis: dynamic / Any.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "globalchatchannelslist": return StringArray(bridge.GlobalChatChannels());

UO.GlobalChatJoinChannel

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

C#-Signaturen

void UO.GlobalChatJoinChannel(object? chName);

Fordert den Zugang zum globalen Chat-Kanal an.

Parameter

  • chName – Text bis ToString; als übermittelt gespeichert.

Rückgabewert

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

Verhalten

  • Sendet einen Send_ChatJoinCommand mit dem angegebenen Kanalnamen. Das Vorhandensein eines Kanals und die Zugangsberechtigung werden vom Server bestimmt. Der Name des lokal aktiven Kanals wird separat gelesen.
  • Bridge sendet die Anfrage im Game-Stream. Es gelten die Serverregeln; Es gibt kein eingebautes Warten auf Bestätigung.

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

1. Direkter Aufruf – direktes Skript

Parameter und Ablauf:

  • Fordert den Zugang zum globalen Chat-Kanal an.
UO.GlobalChatJoinChannel("General");

2. Explizite Option – Skriptfunktion

Parameter und Ablauf:

  • Sendet einen Send_ChatJoinCommand mit dem angegebenen Kanalnamen. Das Vorhandensein eines Kanals und die Zugangsberechtigung werden vom Server bestimmt. Der Name des lokal aktiven Kanals wird separat gelesen.
return  RunScenario();
 object? RunScenario()
{
    var message = "General";
    if (Truth(UO.IsOnline()))
    {
        UO.GlobalChatJoinChannel(message);
    }

    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. Vollständige Hilfsfunktion – Skriptklasse

Parameter und Ablauf:

  • Bridge sendet die Anfrage im Game-Stream. Es gelten die Serverregeln; Es gibt kein eingebautes Warten auf Bestätigung.
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()
    {
        SendText("General");
        return null;
    }

    void SendText(dynamic message)
    {
        if (Truth(Len(message) > 0))
        {
            UO.GlobalChatJoinChannel(message);
        }
    }

    int Len(object? value) => Convert.ToString(value)?.Length ?? 0;
    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.GlobalChatJoinChannel(chName) — UO.GlobalChatJoinChannel(Any)

Parameter: chName (Any)

Ergebnis: void / Unit.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "globalchatjoinchannel": bridge.GlobalChatJoin(Text(0)); return InjectionValue.Unit;

UO.GlobalChatLeaveChannel

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

C#-Signaturen

void UO.GlobalChatLeaveChannel();

Anfragen zum Verlassen des globalen Chat-Kanals.

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

  • GlobalChatLeave sendet Send_ChatLeaveChannelCommand. Der Name des lokalen Kanals ändert sich, nachdem die Chat-Daten verarbeitet wurden.
  • In den Beispielen gibt UO.Wait nur eine Skriptpause an; Das Ende der Pause beweist nicht, dass der Server die Anfrage abgeschlossen hat.

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

1. Direkter Aufruf – direktes Skript

Parameter und Ablauf:

  • Anfragen zum Verlassen des globalen Chat-Kanals.
UO.GlobalChatLeaveChannel();

2. Explizite Option – Skriptfunktion

Parameter und Ablauf:

  • GlobalChatLeave sendet Send_ChatLeaveChannelCommand. Der Name des lokalen Kanals ändert sich, nachdem die Chat-Daten verarbeitet wurden.
return  RunScenario();
 object? RunScenario()
{
    UO.Print(UO.GlobalChatActiveChannel());
    UO.GlobalChatLeaveChannel();
    return null;
}

3. Vollständige Hilfsfunktion – Skriptklasse

Parameter und Ablauf:

  • In den Beispielen gibt UO.Wait nur eine Skriptpause an; Das Ende der Pause beweist nicht, dass der Server die Anfrage abgeschlossen hat.
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.GlobalChatLeaveChannel();
        UO.Wait(500);
        UO.Print(UO.GlobalChatActiveChannel());
        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.GlobalChatLeaveChannel() — UO.GlobalChatLeaveChannel()

Parameter: Keine Parameter.

Ergebnis: void / Unit.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "globalchatleavechannel": bridge.GlobalChatLeave(); return InjectionValue.Unit;

UO.GlobalChatSendMsg

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

C#-Signaturen

void UO.GlobalChatSendMsg(object? msgText);

Sendet eine Nachricht an den globalen Chat.

Parameter

  • msgText – Text bis ToString; als übermittelt gespeichert.

Rückgabewert

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

Verhalten

  • Sendet einen Send_ChatMessageCommand mit dem übertragenen Text. Der Kanal verwendet den Client/Server-Chatstatus; Das Team wählt den Kanal nicht selbst aus.
  • Bridge sendet die Anfrage im Game-Stream. Es gelten die Serverregeln; Es gibt kein eingebautes Warten auf Bestätigung.

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

1. Direkter Aufruf – direktes Skript

Parameter und Ablauf:

  • Sendet eine Nachricht an den globalen Chat.
UO.GlobalChatSendMsg("Hello");

2. Explizite Option – Skriptfunktion

Parameter und Ablauf:

  • Sendet einen Send_ChatMessageCommand mit dem übertragenen Text. Der Kanal verwendet den Client/Server-Chatstatus; Das Team wählt den Kanal nicht selbst aus.
return  RunScenario();
 object? RunScenario()
{
    var message = "Hello";
    if (Truth(UO.IsOnline()))
    {
        UO.GlobalChatSendMsg(message);
    }

    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. Vollständige Hilfsfunktion – Skriptklasse

Parameter und Ablauf:

  • Bridge sendet die Anfrage im Game-Stream. Es gelten die Serverregeln; Es gibt kein eingebautes Warten auf Bestätigung.
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()
    {
        SendText("Hello");
        return null;
    }

    void SendText(dynamic message)
    {
        if (Truth(Len(message) > 0))
        {
            UO.GlobalChatSendMsg(message);
        }
    }

    int Len(object? value) => Convert.ToString(value)?.Length ?? 0;
    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.GlobalChatSendMsg(msgText) — UO.GlobalChatSendMsg(Any)

Parameter: msgText (Any)

Ergebnis: void / Unit.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "globalchatsendmsg": bridge.GlobalChatSend(Text(0)); return InjectionValue.Unit;

UO.Msg

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

C#-Signaturen

void UO.Msg(object? message);

Zeigt eine lokale Meldung über den Skriptfortschritt oder die Stoppbedingung an. Du siehst es, nicht andere Spieler.

Parameter

Rückgabewert

Ein Aufruf einer Methode mit einem Rückgabetyp void wird als eigenständige Anweisung C# geschrieben; Das Ergebnis ist nicht zuordenbar oder überprüfbar. Das Ausfüllen der Abrechnung stellt keine Bestätigung des Spielservers dar.

Verhalten

  • Die Nachricht wird im unteren linken Bereich des Spielfensters und im lokalen Protokoll angezeigt. Eine Kopie ist im Ausgang IDE verfügbar. Aktivieren Sie im allgemeinen Protokoll des Managers den Skriptnachrichtenfilter: Der Eintrag ist ohne das Spielfenster verfügbar. Der Nachrichtenfilter des Serversystems wählt solche Datensätze nicht aus. Das Netzwerk-Sprachpaket wird nicht gesendet. Für die Inschrift über dem Kopf steht UO.CharPrint.
  • UO.Print fügt einen neuen Eintrag zum Spielnachrichtenprotokoll hinzu: Lesen oder speichern Sie zuerst die gewünschte Suchzeichenfolge/das gewünschte Suchergebnis und zeichnen Sie dann die Diagnosemeldung auf. Zeichnen Sie in einer schnellen Schleife Nachrichten auf, wenn Änderungen auftreten, und nicht bei jeder Iteration.
  • Ohne Farbe wird hue 0x03B2 verwendet. UO.Print(text, color) akzeptiert zuerst Text; UO.ColorPrint(color, text) – Farbe zuerst.
  • Trotz des Servernamens oder der Ähnlichkeit mit einer Netzwerknachricht gibt der Befehl nur lokalen Text aus. Um mit der Welt zu sprechen, verwenden Sie UO.Say.
  • UO.Print · UO.CharPrint · UO.Say · UO.ConColor

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 und hat keinen Rückgabewert (void). Der Meldungstext steht direkt im Aufruf.

UO.Msg("Hello from C#");

1. Kurzbericht – direktes Drehbuch

Parameter und Ablauf:

  • verarbeitet=12 — Demo-Anzahl der bereits verarbeiteten Elemente. Convert.ToString wandelt es in einen String um. In diesem Beispiel wird nur eine Zahl gemeldet. Die Objekte selbst werden nicht übertragen.
var processed = 12;
UO.Msg("Processed item entries: " + Convert.ToString(processed));

2. Überlastungswarnung – Skriptfunktion

Parameter und Ablauf:

  • Das Gewicht und das Maximum des Zeichens werden gelesen. Ein Null-/unbekanntes Maximum gilt nicht als Überlastung. Wenn Gewicht >= Maximum, wird eine Zeile gedruckt und Main endet; Gegenstände werden nicht weggeworfen.
return  RunScenario();
 object? RunScenario()
{
    var weight = UO.Weight();
    var maximum = UO.MaxWeight();
    if (Truth(maximum > 0) && Truth(weight >= maximum))
    {
        UO.Msg("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;

3. Nur Gewichtungsänderungen melden – Skriptklasse

Parameter und Ablauf:

  • Main merkt sich das Gewicht, wartet 1000 Millisekunden und ruft das vollständig deklarierte ReportWeight auf. Der Assistent druckt nur, wenn sich das Gewicht geändert hat, und gibt das neue Gewicht für die nächste Überprüfung zurück. Es erzeugt selbst keine Endlosschleife.
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.Msg("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;
}

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.Msg(message) — UO.Msg(String)

Parameter: message (String)

Ergebnis: void / Unit.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

public void Msg(string message) => bridge.ServerPrint(message);

UO.Salute

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

C#-Signaturen

void UO.Salute();

Fordert eine Begrüßungsanimation an.

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

  • Salute ruft GameActions.EmoteAction("salute") über Invoke auf. Dies ist eine Zeichenaktion, kein UO.Say-Text.
  • In den Beispielen gibt UO.Wait nur eine Skriptpause an; Das Ende der Pause beweist nicht, dass der Server die Anfrage abgeschlossen hat.

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

1. Direkter Aufruf – direktes Skript

Parameter und Ablauf:

  • Fordert eine Begrüßungsanimation an.
UO.Salute();

2. Explizite Option – Skriptfunktion

Parameter und Ablauf:

  • Salute ruft GameActions.EmoteAction("salute") über Invoke auf. Dies ist eine Zeichenaktion, kein UO.Say-Text.
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.IsOnline()))
    {
        UO.Salute();
    }

    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. Vollständige Hilfsfunktion – Skriptklasse

Parameter und Ablauf:

  • In den Beispielen gibt UO.Wait nur eine Skriptpause an; Das Ende der Pause beweist nicht, dass der Server die Anfrage abgeschlossen hat.
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.Salute();
        UO.Wait(1000);
        UO.Print("Salute requested");
        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.Salute() — UO.Salute()

Parameter: Keine Parameter.

Ergebnis: void / Unit.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "salute": bridge.Salute(); return InjectionValue.Unit;

UO.Say

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

C#-Signaturen

void UO.Say(object? message);

Sendet die normale Sprache des Charakters an den Server: zum Beispiel eine Adresse an einen Bankier oder einen Befehl an ein Haustier.

Parameter

Rückgabewert

Ein Aufruf einer Methode mit einem Rückgabetyp void wird als eigenständige Anweisung C# geschrieben; Das Ergebnis ist nicht zuordenbar oder überprüfbar. Das Ausfüllen der Abrechnung stellt keine Bestätigung des Spielservers dar.

Verhalten

  • Für die Protokollversion 2.0.0 und höher sendet der Client Unicode-Sprache; für den Älteren - ASCII Rede. Der Name SayU zwingt das alte Protokoll nicht zu Unicode. Ohne explizite Farbe wird SpeechHue des Profils genommen; 0xFFFF in UO.UOSayColor wählt ebenfalls diese Farbe aus. Der Text wird an den Server gesendet, das Skript führt ihn jedoch nicht als Code aus.
  • UO.Print · UO.CharPrint · UO.Say · UO.ConColor

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

1. Kontaktieren Sie einen Bankier – direktes Drehbuch

Parameter und Ablauf:

  • Connected wird vor dem Versand geprüft. Bank ist eine Redewendung, nicht der Name API. Um eine Bank zu eröffnen, benötigen Sie in der Regel einen geeigneten NPC in der Nähe; Wenn der Server eine andere Phrase verwendet, ersetzen Sie diese.
if (Truth(UO.Connected()))
{
    UO.Say("bank");
}

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

2. Befehl an ein namentlich ausgewähltes Haustier – Skriptfunktion

Parameter und Ablauf:

  • petName ist der Name deines Haustiers, hier Shadow. Es ergibt eine Zeile: Shadow folgt mir. Dies ist ein Befehl an Ihr Haustier, Ihnen zu folgen, und nicht UO.Follow, das Ihren Charakter bewegt.
return  RunScenario();
 object? RunScenario()
{
    var petName = "Shadow";
    if (Truth(UO.Connected()))
    {
        UO.Say(petName + " follow me");
    }

    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. Fragen Sie die Bank nur, wenn sie überlastet ist – Skriptklasse

Parameter und Ablauf:

  • RequestBankIfHeavy prüft die Verbindung und das zuverlässig positive Maximalgewicht. Nur wenn es überlastet ist, sendet es Bank und gibt 1 als Zeichen einer gesendeten Anfrage zurück. 0 – Anfrage nicht gesendet. Dieses Ergebnis gehört dem Assistenten, nicht dem Sprachbefehl.
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()
    {
        return RequestBankIfHeavy();
        return null;
    }

    dynamic RequestBankIfHeavy()
    {
        if (!(Truth(UO.Connected())))
        {
            return 0;
        }

        var maximum = UO.MaxWeight();
        if (Truth(maximum <= 0) || Truth(UO.Weight() < maximum))
        {
            return 0;
        }

        UO.Say("bank");
        return 1;
    }

    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.Say(message) — UO.Say(String)

Parameter: message (String)

Ergebnis: void / Unit.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

public void Say(string message) => bridge.Say(message);

UO.SayU

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

C#-Signaturen

void UO.SayU(object? text);

Sendet die normale Sprache des Charakters an den Server: zum Beispiel eine Adresse an einen Bankier oder einen Befehl an ein Haustier.

Parameter

Rückgabewert

Ein Aufruf einer Methode mit einem Rückgabetyp void wird als eigenständige Anweisung C# geschrieben; Das Ergebnis ist nicht zuordenbar oder überprüfbar. Das Ausfüllen der Abrechnung stellt keine Bestätigung des Spielservers dar.

Verhalten

  • Für die Protokollversion 2.0.0 und höher sendet der Client Unicode-Sprache; für den Älteren - ASCII Rede. Der Name SayU zwingt das alte Protokoll nicht zu Unicode. Ohne explizite Farbe wird SpeechHue des Profils genommen; 0xFFFF in UO.UOSayColor wählt ebenfalls diese Farbe aus. Der Text wird an den Server gesendet, das Skript führt ihn jedoch nicht als Code aus.
  • UO.Print · UO.CharPrint · UO.Say · UO.ConColor

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

1. Kontaktieren Sie einen Bankier – direktes Drehbuch

Parameter und Ablauf:

  • Connected wird vor dem Versand geprüft. Bank ist eine Redewendung, nicht der Name API. Um eine Bank zu eröffnen, benötigen Sie in der Regel einen geeigneten NPC in der Nähe; Wenn der Server eine andere Phrase verwendet, ersetzen Sie diese.
if (Truth(UO.Connected()))
{
    UO.SayU("bank");
}

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

2. Befehl an ein namentlich ausgewähltes Haustier – Skriptfunktion

Parameter und Ablauf:

  • petName ist der Name deines Haustiers, hier Shadow. Es ergibt eine Zeile: Shadow folgt mir. Dies ist ein Befehl an Ihr Haustier, Ihnen zu folgen, und nicht UO.Follow, das Ihren Charakter bewegt.
return  RunScenario();
 object? RunScenario()
{
    var petName = "Shadow";
    if (Truth(UO.Connected()))
    {
        UO.SayU(petName + " follow me");
    }

    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. Fragen Sie die Bank nur, wenn sie überlastet ist – Skriptklasse

Parameter und Ablauf:

  • RequestBankIfHeavy prüft die Verbindung und das zuverlässig positive Maximalgewicht. Nur wenn es überlastet ist, sendet es Bank und gibt 1 als Zeichen einer gesendeten Anfrage zurück. 0 – Anfrage nicht gesendet. Dieses Ergebnis gehört dem Assistenten, nicht dem Sprachbefehl.
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()
    {
        return RequestBankIfHeavy();
        return null;
    }

    dynamic RequestBankIfHeavy()
    {
        if (!(Truth(UO.Connected())))
        {
            return 0;
        }

        var maximum = UO.MaxWeight();
        if (Truth(maximum <= 0) || Truth(UO.Weight() < maximum))
        {
            return 0;
        }

        UO.SayU("bank");
        return 1;
    }

    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.SayU(text) — UO.SayU(Any)

Parameter: text (Any)

Ergebnis: void / Unit.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "sayu": Say(arguments.Length > 0 ? arguments[0].ToString() : string.Empty); break;

UO.UOAMessage

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

C#-Signaturen

void UO.UOAMessage(object? text);

Druckt eine lokale Nachricht bei ClassicUO, wobei hue auf UO.FontColor gesetzt ist. Geeignet für Skriptbenachrichtigungen über Inventar, Routenstatus oder Etappenabschluss.

Parameter

Rückgabewert

void: Gibt keinen Text, keinen Protokollindex oder true/false zurück. Der Aufruf führt eine lokale Ausgabe durch; Es wird keine Anzeigebestätigung zurückgegeben.

Verhalten

  • Verwendet state.FontColor der aktuellen Laufzeit, ursprünglich 0x03B2. Die Aufzeichnung erfolgt über den unteren Nachrichtenbereich und das Client-Protokoll sowie die IDE-Ausgabe.
  • Sendet keine Sprache an den Server, verursacht kein Popup-Fenster und sendet keine Nachricht an einen anderen Spieler. Das reguläre UO.Print hat eine eigene Farbe.
  • Für die Farbe einer Nachricht ohne Statusänderung.FontColor können Sie UO.Print(text,color) verwenden.

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 und hat keinen Rückgabewert (void). Der Meldungstext steht direkt im Aufruf.

UO.UOAMessage("Hello from C#");

1. Markieren Sie den Inventaralarm – Direktes Skript

Parameter und Ablauf:

  • 0x0021 – Index hue; Der endgültige Farbton hängt von den Farbtondateien des Kunden ab. Die Nachricht ist lokal sichtbar; es wird nicht von der Figur gesprochen.
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;

2. Allgemeines Farbbenachrichtigungsverfahren – Skriptfunktion

Parameter und Ablauf:

  • Vollständige Mitteilung akzeptiert Text und hue. Der zuletzt installierte hue bleibt für den nächsten UOAMessage dieser Laufzeit erhalten. Es gibt hier kein eingebautes FontColor() zum Lesen.
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);
}

3. Zurück zur bekannten Grundfarbe – Skriptklasse

Parameter und Ablauf:

  • 0x03B2 – Anfangswert FontColor der neuen Laufzeit. Gibt bei normaler Abschluss-/Fehlerbehandlung schließlich genau die ausgewählte Basis zurück; Der unbekannte vorherige Wert wird nicht wiederhergestellt.
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;
    }
}

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.UOAMessage(text) — UO.UOAMessage(Any)

Parameter: text (Any)

Ergebnis: void / Unit.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "uoamessage": bridge.Print(state.FontColor, Text(0)); break;

UO.UOSay

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

C#-Signaturen

void UO.UOSay(object? text);

Sendet die normale Sprache des Charakters an den Server: zum Beispiel eine Adresse an einen Bankier oder einen Befehl an ein Haustier.

Parameter

Rückgabewert

Ein Aufruf einer Methode mit einem Rückgabetyp void wird als eigenständige Anweisung C# geschrieben; Das Ergebnis ist nicht zuordenbar oder überprüfbar. Das Ausfüllen der Abrechnung stellt keine Bestätigung des Spielservers dar.

Verhalten

  • Für die Protokollversion 2.0.0 und höher sendet der Client Unicode-Sprache; für den Älteren - ASCII Rede. Der Name SayU zwingt das alte Protokoll nicht zu Unicode. Ohne explizite Farbe wird SpeechHue des Profils genommen; 0xFFFF in UO.UOSayColor wählt ebenfalls diese Farbe aus. Der Text wird an den Server gesendet, das Skript führt ihn jedoch nicht als Code aus.
  • UO.Print · UO.CharPrint · UO.Say · UO.ConColor

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

1. Kontaktieren Sie einen Bankier – direktes Drehbuch

Parameter und Ablauf:

  • Connected wird vor dem Versand geprüft. Bank ist eine Redewendung, nicht der Name API. Um eine Bank zu eröffnen, benötigen Sie in der Regel einen geeigneten NPC in der Nähe; Wenn der Server eine andere Phrase verwendet, ersetzen Sie diese.
if (Truth(UO.Connected()))
{
    UO.UOSay("bank");
}

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

2. Befehl an ein namentlich ausgewähltes Haustier – Skriptfunktion

Parameter und Ablauf:

  • petName ist der Name deines Haustiers, hier Shadow. Es ergibt eine Zeile: Shadow folgt mir. Dies ist ein Befehl an Ihr Haustier, Ihnen zu folgen, und nicht UO.Follow, das Ihren Charakter bewegt.
return  RunScenario();
 object? RunScenario()
{
    var petName = "Shadow";
    if (Truth(UO.Connected()))
    {
        UO.UOSay(petName + " follow me");
    }

    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. Fragen Sie die Bank nur, wenn sie überlastet ist – Skriptklasse

Parameter und Ablauf:

  • RequestBankIfHeavy prüft die Verbindung und das zuverlässig positive Maximalgewicht. Nur wenn es überlastet ist, sendet es Bank und gibt 1 als Zeichen einer gesendeten Anfrage zurück. 0 – Anfrage nicht gesendet. Dieses Ergebnis gehört dem Assistenten, nicht dem Sprachbefehl.
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()
    {
        return RequestBankIfHeavy();
        return null;
    }

    dynamic RequestBankIfHeavy()
    {
        if (!(Truth(UO.Connected())))
        {
            return 0;
        }

        var maximum = UO.MaxWeight();
        if (Truth(maximum <= 0) || Truth(UO.Weight() < maximum))
        {
            return 0;
        }

        UO.UOSay("bank");
        return 1;
    }

    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.UOSay(text) — UO.UOSay(Any)

Parameter: text (Any)

Ergebnis: void / Unit.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "uosay": Say(Text(0)); return InjectionValue.Unit;

UO.UOSayColor

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

C#-Signaturen

void UO.UOSayColor(object? text, object? color);

Sendet die normale Sprache des Charakters an den Server: zum Beispiel eine Adresse an einen Bankier oder einen Befehl an ein Haustier.

Parameter

  • color - UO hue, nicht RGB. Zahl oder Hexadezimalzeichenfolge; Die Brücke verwendet die niedrigen 16-Bits. Nicht zu verwechseln mit graphic/type. 0x0044 ist im Beispiel das ausgewählte hue. Für die Protokollversion 2.0.0 und höher sendet der Client Unicode-Sprache; für den Älteren - ASCII Rede. Der Name SayU zwingt das alte Protokoll nicht zu Unicode. Ohne eine offensichtliche Farbe wird SpeechHue des Profils genommen; 0xFFFF in UO.UOSayColor wählt ebenfalls diese Farbe aus. Der Text wird an den Server gesendet, das Skript führt ihn jedoch nicht als Code aus.

Rückgabewert

Ein Aufruf einer Methode mit einem Rückgabetyp void wird als eigenständige Anweisung C# geschrieben; Das Ergebnis ist nicht zuordenbar oder überprüfbar. Das Ausfüllen der Abrechnung stellt keine Bestätigung des Spielservers dar.

Verhalten

  • Für die Protokollversion 2.0.0 und höher sendet der Client Unicode-Sprache; für den Älteren - ASCII Rede. Der Name SayU zwingt das alte Protokoll nicht zu Unicode. Ohne explizite Farbe wird SpeechHue des Profils genommen; 0xFFFF in UO.UOSayColor wählt ebenfalls diese Farbe aus. Der Text wird an den Server gesendet, das Skript führt ihn jedoch nicht als Code aus.
  • UO.Print · UO.CharPrint · UO.Say · UO.ConColor

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.UOSayColor");
UO.UOSayColor("bank", 0x0044);

1. Kontaktieren Sie einen Bankier – direktes Drehbuch

Parameter und Ablauf:

  • Connected wird vor dem Versand geprüft. Bank ist eine Redewendung, nicht der Name API. Um eine Bank zu eröffnen, benötigen Sie in der Regel einen geeigneten NPC in der Nähe; Wenn der Server eine andere Phrase verwendet, ersetzen Sie diese.
if (Truth(UO.Connected()))
{
    UO.UOSayColor("bank", 0x0044);
}

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

2. Befehl an ein namentlich ausgewähltes Haustier – Skriptfunktion

Parameter und Ablauf:

  • petName ist der Name deines Haustiers, hier Shadow. Es ergibt eine Zeile: Shadow folgt mir. Dies ist ein Befehl an Ihr Haustier, Ihnen zu folgen, und nicht UO.Follow, das Ihren Charakter bewegt.
return  RunScenario();
 object? RunScenario()
{
    var petName = "Shadow";
    if (Truth(UO.Connected()))
    {
        UO.UOSayColor(petName + " follow me", 0x0044);
    }

    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. Fragen Sie die Bank nur, wenn sie überlastet ist – Skriptklasse

Parameter und Ablauf:

  • RequestBankIfHeavy prüft die Verbindung und das zuverlässig positive Maximalgewicht. Nur wenn es überlastet ist, sendet es Bank und gibt 1 als Zeichen einer gesendeten Anfrage zurück. 0 – Anfrage nicht gesendet. Dieses Ergebnis gehört dem Assistenten, nicht dem Sprachbefehl.
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()
    {
        return RequestBankIfHeavy();
        return null;
    }

    dynamic RequestBankIfHeavy()
    {
        if (!(Truth(UO.Connected())))
        {
            return 0;
        }

        var maximum = UO.MaxWeight();
        if (Truth(maximum <= 0) || Truth(UO.Weight() < maximum))
        {
            return 0;
        }

        UO.UOSayColor("bank", 0x0044);
        return 1;
    }

    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.UOSayColor(text, color) — UO.UOSayColor(Any,Any)

Parameter: text (Any), color (Any)

Ergebnis: void / Unit.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "uosaycolor": bridge.Say(Text(0), Arg(1)); return InjectionValue.Unit;
⚠️ **GitHub.com Fallback** ⚠️