Skip to content

DE UO Topic conversion compatibility

Codex edited this page Oct 11, 2026 · 3 revisions

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

Konvertierung und Kompatibilität

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

Konvertiert Zahlen, serial und ältere Skriptformate. Ein kompatibler Name kann Einschränkungen oder einen ausdrücklich verbotenen Vorgang aufweisen – dies ist auf der Karte angegeben.

Abschnitte

Thema Befehle und Erklärungen
Hex / int UO.Hex2Int · UO.Int2Hex
EUO ↔ Injection UO.EUO2ID · UO.EUO2Type · UO.EUO2Inj · UO.Inj2EUO
EasyUO UO.GetEasyUO · UO.SetEasyUO
Typkonvertierung C# und Standardbibliothek C# und Standardbibliothek C# und Standardbibliothek C# und Standardbibliothek C# und Standardbibliothek · C# und Standardbibliothek

Alle Theme-Befehle

Konvertierung

UO.Hex2Int · UO.Int2Hex · UO.ScanInt · UO.EUO2ID · UO.EUO2Inj · UO.EUO2Type · UO.Inj2EUO

Kompatibilitätsgrenzen

UO.BoxHack · UO.ShutdownWindows

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

Parameter, Ergebnis und alle Szenarien

UO.Print(UO.Int2Hex(1073746484));

UO.EUO2ID

Parameter, Ergebnis und alle Szenarien

var value = UO.EUO2ID("B");
UO.Print(Convert.ToString(value));

Vollständige Befehlsreferenz


UO.BoxHack

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

C#-Signaturen

void UO.BoxHack();

Gibt einen Hinweis aus, dass der ältere native Client-Patch BoxHack 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.BoxHack");
UO.BoxHack();

1. Kompatibilitätshinweis – Direct Script

Parameter und Ablauf:

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

2. Prozedur aufrufen – Skriptfunktion

Parameter und Ablauf:

  • Das Kompatibilitätsverfahren verändert die Spielwelt nicht.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    CompatibilityNotice();
    return null;
}

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

3. Skriptfortsetzung – Skriptklasse

Parameter und Ablauf:

  • Nach der Diagnosemeldung wird die Ausführung fortgesetzt.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
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;
    }

    async public Task<object?> RunScenarioAsync()
    {
        UO.BoxHack();
        UO.Print("continued");
        return null;
    }
}

UO.EUO2ID

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

C#-Signaturen

dynamic UO.EUO2ID(object? arg0);

Dekodiert die EasyUO-Literalnotation in Basis 26 mit A=0.

Parameter

  • EUO – EasyUO-Zeichenfolge/Wert. Buchstaben werden in Großbuchstaben umgewandelt; Nicht-Buchstabenzeichen werden übersprungen.

Rückgabewert

int – der resultierende numerische 32-Bit-Wert; Dies ist keine Hex-Zeichenfolge.

Verhalten

  • Berechnet nacheinander Wert=Wert*26+(Buchstabe-A). Der uint-Akkumulator läuft ungeprüft, sodass der Überlauf die 32-Bits umschließt. Der leere String und der String ohne Buchstaben ergeben 0. Sucht nicht nach irgendwelchen Objekten auf der Welt.

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.EUO2ID("B");
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));

1. Einzelbuchstabenwert – direktes Skript

Parameter und Ablauf:

  • B kodiert die Zahl 1.
var value = UO.EUO2ID("B");
UO.Print(Convert.ToString(value));

2. Nicht-Buchstabenzeichen – Skriptfunktion

Parameter und Ablauf:

  • Der Fall ist nicht wichtig; Der Bindestrich und das Ausrufezeichen werden übersprungen.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var value = UO.EUO2ID("b-!");
    UO.Print(Convert.ToString(value));
    return null;
}

3. Nulleintrag – Skriptklasse

Parameter und Ablauf:

  • A kodiert Null; Das Ergebnis gibt keinen Hinweis auf das gefundene Objekt.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
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;
    }

    async public Task<object?> RunScenarioAsync()
    {
        var value = UO.EUO2ID("A");
        UO.Print(Convert.ToString(value));
        return null;
    }
}

UO.EUO2Inj

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

C#-Signaturen

string UO.EUO2Inj(object? arg0);

Dekodiert die EasyUO-Literalnotation in Basis 26 mit A=0.

Parameter

  • easyValue – EasyUO-Zeichenfolge/Wert. Buchstaben werden in Großbuchstaben umgewandelt; Nicht-Buchstabenzeichen werden übersprungen.

Rückgabewert

string ist die Hex-Zeichenfolge der Injektion des resultierenden serial.

Verhalten

  • Berechnet nacheinander Wert=Wert*26+(Buchstabe-A). Der uint-Akkumulator läuft ungeprüft, sodass der Überlauf die 32-Bits umschließt. Der leere String und der String ohne Buchstaben ergeben 0. Sucht nicht nach irgendwelchen Objekten auf der Welt.

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.EUO2Inj("B");
UO.Print("EUO2Inj: " + Convert.ToString(result));

1. Einzelbuchstabenwert – direktes Skript

Parameter und Ablauf:

  • B kodiert die Zahl 1.
var value = UO.EUO2Inj("B");
UO.Print(Convert.ToString(value));

2. Nicht-Buchstabenzeichen – Skriptfunktion

Parameter und Ablauf:

  • Der Fall ist nicht wichtig; Der Bindestrich und das Ausrufezeichen werden übersprungen.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var value = UO.EUO2Inj("b-!");
    UO.Print(Convert.ToString(value));
    return null;
}

3. Nulleintrag – Skriptklasse

Parameter und Ablauf:

  • A kodiert Null; Das Ergebnis gibt keinen Hinweis auf das gefundene Objekt.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
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;
    }

    async public Task<object?> RunScenarioAsync()
    {
        var value = UO.EUO2Inj("A");
        UO.Print(Convert.ToString(value));
        return null;
    }
}

UO.EUO2Type

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

C#-Signaturen

dynamic UO.EUO2Type(object? arg0);

Dekodiert die EasyUO-Literalnotation in Basis 26 mit A=0.

Parameter

  • EUO – EasyUO-Zeichenfolge/Wert. Buchstaben werden in Großbuchstaben umgewandelt; Nicht-Buchstabenzeichen werden übersprungen.

Rückgabewert

int – der resultierende numerische 32-Bit-Wert; Dies ist keine Hex-Zeichenfolge.

Verhalten

  • Berechnet nacheinander Wert=Wert*26+(Buchstabe-A). Der uint-Akkumulator läuft ungeprüft, sodass der Überlauf die 32-Bits umschließt. Der leere String und der String ohne Buchstaben ergeben 0. Sucht nicht nach irgendwelchen Objekten auf der Welt.

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.EUO2Type("B");
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));

1. Einzelbuchstabenwert – direktes Skript

Parameter und Ablauf:

  • B kodiert die Zahl 1.
var value = UO.EUO2Type("B");
UO.Print(Convert.ToString(value));

2. Nicht-Buchstabenzeichen – Skriptfunktion

Parameter und Ablauf:

  • Der Fall ist nicht wichtig; Der Bindestrich und das Ausrufezeichen werden übersprungen.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var value = UO.EUO2Type("b-!");
    UO.Print(Convert.ToString(value));
    return null;
}

3. Nulleintrag – Skriptklasse

Parameter und Ablauf:

  • A kodiert Null; Das Ergebnis gibt keinen Hinweis auf das gefundene Objekt.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
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;
    }

    async public Task<object?> RunScenarioAsync()
    {
        var value = UO.EUO2Type("A");
        UO.Print(Convert.ToString(value));
        return null;
    }
}

UO.Hex2Int

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

C#-Signaturen

int UO.Hex2Int(object? arg0);

Konvertiert einen numerischen Wert oder numerischen Text in int.

Parameter

  • value — int, double, double-Text oder Hex-Text mit 0x. Leerzeichen an den Rändern und am Schild sind erlaubt. Alias-Strings „self“/“lasttarget“ sind hier nicht erlaubt.

Rückgabewert

int mit 32 Bits; hex 0xFFFFFFFF ergibt -1. double wird mit einer Bereichsprüfung auf Null gekürzt. Array und null in NumberConversions.ToInt ergibt 0.

Verhalten

  • Trotz des Namens wird Dezimaltext akzeptiert. Ungültiger Text ergibt FormatException, nicht unterstützter Typ ergibt InvalidCastException; Überlauf double – Konvertierungsfehler.
  • Die umgekehrte Formatierung ist UO.Int2Hex. Eine Transformation beweist nicht die Existenz eines Objekts.

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.Hex2Int("0x40001234");
UO.Print("Hex2Int: " + Convert.ToString(result));

1. Direkter Aufruf – direktes Skript

Parameter und Ablauf:

  • Konvertiert einen numerischen Wert oder numerischen Text in int.
UO.Print(UO.Hex2Int("0x40001234"));

2. Explizite Option – Skriptfunktion

Parameter und Ablauf:

  • Trotz des Namens wird Dezimaltext akzeptiert. Ungültiger Text ergibt FormatException, nicht unterstützter Typ ergibt InvalidCastException; Überlauf double – Konvertierungsfehler.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    UO.Print(UO.Hex2Int("255"));
    UO.Print(UO.Hex2Int("0xFFFFFFFF"));
    return null;
}

3. Vollständige Hilfsfunktion – Skriptklasse

Parameter und Ablauf:

  • Die umgekehrte Formatierung ist UO.Int2Hex. Eine Transformation beweist nicht die Existenz eines Objekts.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
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;
    }

    async public Task<object?> RunScenarioAsync()
    {
        var number = UO.Hex2Int("0x000000FF");
        UO.Print(UO.Int2Hex(number));
        return null;
    }
}

UO.Inj2EUO

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

C#-Signaturen

string UO.Inj2EUO(object? arg0);

Kodiert die 32-Bit-Zahl serial mit den Buchstaben A..Z für EasyUO.

Parameter

  • serialValue – Zahl bis NumberConversions.ToInt, dann unsigned uint mit erhaltenen Bits. Für einen Alias ​​besorgen Sie sich zunächst GetSerial/Hex2Int.

Rückgabewert

string sind die üblichen Basisziffern 26 mit A=0..Z=25. Null ergibt „A“. Dies ist kein Hexadezimal- oder Objektname.

Verhalten

  • Der Algorithmus fügt links den Buchstaben A + Wert % 26 ein und dividiert uint durch 26 zu Null. Dies ist die eigene Konvertierung des Projekts, nicht die Spaltennummer von Excel A1.
  • EUO2Inj führt die umgekehrte Konvertierung in einen Hex-String durch. Durch die Codierung wird kein Objekt erstellt und nicht vom Client angefordert.

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.Inj2EUO(0);
UO.Print("Inj2EUO: " + Convert.ToString(result));

1. Direkter Aufruf – direktes Skript

Parameter und Ablauf:

  • Kodiert die 32-Bit-Zahl serial mit den Buchstaben A..Z für EasyUO.
UO.Print(UO.Inj2EUO(0));

2. Explizite Option – Skriptfunktion

Parameter und Ablauf:

  • Der Algorithmus fügt links den Buchstaben A + Wert % 26 ein und dividiert uint durch 26 zu Null. Dies ist die eigene Konvertierung des Projekts, nicht die Spaltennummer von Excel A1.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    UO.Print(UO.Inj2EUO(26));
    UO.Print(UO.Inj2EUO(25));
    return null;
}

3. Vollständige Hilfsfunktion – Skriptklasse

Parameter und Ablauf:

  • EUO2Inj führt die umgekehrte Konvertierung in einen Hex-String durch. Durch die Codierung wird kein Objekt erstellt und nicht vom Client angefordert.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
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;
    }

    async public Task<object?> RunScenarioAsync()
    {
        var value = UO.Hex2Int("0x40001234");
        var encoded = UO.Inj2EUO(value);
        UO.Print(encoded);
        UO.Print(UO.EUO2Inj(encoded));
        return null;
    }
}

UO.Int2Hex

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

C#-Signaturen

string UO.Int2Hex(object? arg0);

Formatiert int als hexadezimale serial-Zeichenfolge.

Parameter

  • value - int oder numerischer/hexer Text; double wird mit einer Überlaufprüfung auf Null gekürzt. Der Objektalias kann nicht gefunden werden.

Rückgabewert

string „0xXXXXXXXX“: acht Hexadezimalstellen, alle 32 Bits int. Ein negativer Wert wird im Zweierkomplement dargestellt.

Verhalten

  • NumberConversions.ToInt führt die Konvertierung durch, dann verwendet ToHex das X8-Format. Beispielsweise ergibt -1 „0xFFFFFFFF“. Ungültiger numerischer Text verursacht einen Fehler; Dies ist kein Test für die Existenz von serial.
  • Um eine Zahl darzustellen, reicht die Umrechnung aus; Die Anwesenheit des Objekts wird von UO.Exists separat überprüft.

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.Int2Hex(1073746484);
UO.Print("Int2Hex: " + Convert.ToString(result));

1. Direkter Aufruf – direktes Skript

Parameter und Ablauf:

  • Formatiert int als hexadezimale serial-Zeichenfolge.
UO.Print(UO.Int2Hex(1073746484));

2. Explizite Option – Skriptfunktion

Parameter und Ablauf:

  • NumberConversions.ToInt führt die Konvertierung durch, dann verwendet ToHex das X8-Format. Beispielsweise ergibt -1 „0xFFFFFFFF“. Ungültiger numerischer Text verursacht einen Fehler; Dies ist kein Test für die Existenz von serial.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    UO.Print(UO.Int2Hex(-1));
    return null;
}

3. Vollständige Hilfsfunktion – Skriptklasse

Parameter und Ablauf:

  • Um eine Zahl darzustellen, reicht die Umrechnung aus; Die Anwesenheit des Objekts wird von UO.Exists separat überprüft.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
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;
    }

    async public Task<object?> RunScenarioAsync()
    {
        var encoded = UO.Int2Hex(255);
        UO.Print(encoded);
        UO.Print(UO.Hex2Int(encoded));
        return null;
    }
}

UO.ScanInt

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

C#-Signaturen

int UO.ScanInt(object? arg0, object? arg1);

Sucht die erste vorzeichenbehaftete double/Hex-Zahl in der Zeichenfolge, beginnend an der Position.

Parameter

  • textValue – Text über ToString. Sucht nach der ersten Übereinstimmung des regulären Ausdrucks [-+]?(?:0[xX][0-9A-Fa-f]+|\d+).
  • startValue – int, Nullposition UTF-16. Begrenzt auf 0..text.Length; nicht indexiert von 1.

Rückgabewert

int ist die erste erkannte 32-Bit-Nummer. Es gibt keine Übereinstimmung oder die Nummer passt nicht - 0; eine echte Null ergibt ebenfalls 0.

Verhalten

  • Regex.Match wird auf Substring(start) angewendet. Wenn beim ersten Treffer TryStr2Int nicht konvertiert werden kann, werden die nächsten Zahlen nicht durchsucht. Der Bruchteil, wie z. B. .5, ist nicht im numerischen Token enthalten.
  • Ein negativer Anfang wird zu 0, ein Anfang über das Ende der Zeile hinaus wird zu text.Length und das Ergebnis ist 0. Die ursprüngliche Zeile ändert sich nicht.

Eigenständige C#-Skripte

Jedes Beispiel kann als separate Datei .csx gespeichert und in IDE ausgeführt werden. Die UO-Objekt- und Wartefunktionen stellen den Host der aktuellen Spielsitzung bereit. Ersetzen Sie Demo-serial-Namen, Koordinaten und Adressen durch Ihre eigenen.

Einfaches Beispiel

Führe diesen Code als eigene .csx-Datei aus. Die Argumente stehen direkt im Aufruf; ersetze Beispielnamen, Serials und Adressen durch eigene Werte.

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.ScanInt("gold=123", 0);
UO.Print("ScanInt: " + Convert.ToString(result));

1. Direkter Aufruf – direktes Skript

Parameter und Ablauf:

  • Sucht die erste vorzeichenbehaftete double/Hex-Zahl in der Zeichenfolge, beginnend an der Position.
UO.Print(UO.ScanInt("gold=123", 0));

2. Explizite Option – Skriptfunktion

Parameter und Ablauf:

  • Regex.Match wird auf Substring(start) angewendet. Wenn beim ersten Treffer TryStr2Int nicht konvertiert werden kann, werden die nächsten Zahlen nicht durchsucht. Der Bruchteil, wie z. B. .5, ist nicht im numerischen Token enthalten.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    UO.Print(UO.ScanInt("-7 0xFF", 3));
    return null;
}

3. Vollständige Hilfsfunktion – Skriptklasse

Parameter und Ablauf:

  • Ein negativer Anfang wird zu 0, ein Anfang über das Ende der Zeile hinaus wird zu text.Length und das Ergebnis ist 0. Die ursprüngliche Zeile ändert sich nicht.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
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;
    }

    async public Task<object?> RunScenarioAsync()
    {
        var text = "count=0x20";
        var amount = UO.ScanInt(text, 6);
        UO.Print(amount);
        return null;
    }
}

UO.ShutdownWindows

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

C#-Signaturen

void UO.ShutdownWindows(object? arg0);

Lehnt immer den Versuch ab, Windows über ein Skript herunterzufahren.

Parameter

  • state – Legacy-Argument wird in der Signatur gespeichert, aber nicht verwendet: Jeder Anruf wird blockiert.

Rückgabewert

Es gibt kein normales Ergebnis: NativeSubrutineException mit der Meldung „shutdownwindows ist absichtlich blockiert: Skripte fahren Windows möglicherweise nicht herunter.“

Verhalten

  • ExecuteLegacyManualAlias löst sofort eine Ausnahme aus. Es erfolgt kein Herunterfahren, Neustarten oder Starten eines externen Prozesses.
  • Alle drei Beispiele zeigen absichtlich verbotene Aufrufe und schlagen bei der Ausführung fehl. Sie können nicht als Bedingung für ein erfolgreiches Herunterfahren verwendet werden.

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.

try { UO.ShutdownWindows(0); }
catch (Exception error) { UO.Print(error.Message); }

1. Direkter Aufruf – direktes Skript

Parameter und Ablauf:

  • Lehnt immer den Versuch ab, Windows über ein Skript herunterzufahren.
UO.ShutdownWindows(0);

2. Explizite Option – Skriptfunktion

Parameter und Ablauf:

  • ExecuteLegacyManualAlias löst sofort eine Ausnahme aus. Es erfolgt kein Herunterfahren, Neustarten oder Starten eines externen Prozesses.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    UO.ShutdownWindows(1);
    return null;
}

3. Vollständige Hilfsfunktion – Skriptklasse

Parameter und Ablauf:

  • Alle drei Beispiele zeigen absichtlich verbotene Aufrufe und schlagen bei der Ausführung fehl. Sie können nicht als Bedingung für ein erfolgreiches Herunterfahren verwendet werden.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
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;
    }

    async public Task<object?> RunScenarioAsync()
    {
        UO.Print("The next command is expected to fail");
        UO.ShutdownWindows(0);
        return null;
    }
}

Clone this wiki locally