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

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

Fähigkeiten

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

Anwenden von Fertigkeiten, Lesen von Werten und Verwalten von Fertigkeitssperren. Der Name des Skills und die Verfügbarkeit der Aktion hängen von den vom Client/Server unterstützten Daten ab.

Fähigkeiten: genaue Namen und Nummern

Vollständigen Katalog und Beispiele öffnen

Abschnitte

Thema Befehle und Erklärungen
UseSkill UO.UseSkill
Skill Value UO.GetSkillValue · UO.SkillVal
Skill Current Value UO.GetSkillCurrentValue
Skill Cap UO.GetSkillCap
Skill Locks UO.GetSkillLockState · UO.SetSkillLockState
Tracking UO.Track
Snooping UO.Snoop
Stealth UO.StealthCnt · UO.UseSkill

Alle Theme-Befehle

Fähigkeiten

UO.UseSkill · UO.GetSkillCap · UO.GetSkillCurrentValue · UO.GetSkillValue · UO.GetSkillLockState · UO.SetSkillLockState · UO.SkillLockState · UO.SkillVal · UO.Track · UO.Snoop · UO.StealthCnt · UO.TicksSkill

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

Parameter, Ergebnis und alle Szenarien

if (!(Truth(UO.Connected())) || Truth(UO.Dead()) || Truth(UO.Hidden()))
{
    return null;
}
if (!(Truth(UO.UseSkill("Hiding"))))
{
    UO.Print("Hiding request rejected");
    return null;
}
await Delay(1000);
if (Truth(UO.Hidden()))
{
    UO.Print("Character is hidden");
}
else
{
    UO.Print("Not hidden yet; check the game journal");
}

Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

UO.GetSkillValue

Parameter, Ergebnis und alle Szenarien

var selector = "Mining";
var value = UO.GetSkillValue(selector);
UO.Print(Convert.ToString(value));

Vollständige Befehlsreferenz


UO.GetSkillCap

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

C#-Signaturen

double UO.GetSkillCap(object? skillName);

Liest das vom Server empfangene Skill-Limit.

Parameter

  • skillName – Erforderlicher Skill: ein Name aus den Kundendaten, wie „Mining“ oder „Animal Lore“, oder ein Dezimalindex von 0 bis Skills.Length−1, Zahl oder String. Die Groß-/Kleinschreibung des Namens ist nicht wichtig, nachfolgende Leerzeichen werden entfernt, _ wird durch ein Leerzeichen ersetzt. Der Index ist nicht der ID des Subjekts oder der Index von 1. Eine Zahlenfolge bedeutet immer einen Index.

Rückgabewert

double (Double) – Fertigkeitspunkte in Schritten von 0,1, zum Beispiel 95,1, nicht 951. Das Feld CapFixed wird durch 10 direkt in das Double geteilt. 0 bedeutet keine Fertigkeit oder keinen Charakter/Fähigkeit. Das Ergebnis ist nicht bool. Legacy SkillVal/BaseVal haben einen anderen Maßstab – mischen Sie diese Familien nicht.

Verhalten

  • Das Lesen erfolgt über Invoke im Spielthread basierend auf den bereits empfangenen Daten; Netzwerkpakete werden nicht gesendet. Die Fertigkeit wird nicht genutzt oder trainiert. Zwei Anfragen – zwei separate Snapshots.
  • Erforderlicher Skill: ein Name aus den Kundendaten, wie zum Beispiel „Mining“ oder „Animal Lore“, oder ein Dezimalindex von 0 bis Skills.Length−1, Zahl oder String. Die Groß-/Kleinschreibung des Namens ist nicht wichtig, nachfolgende Leerzeichen werden entfernt, _ wird durch ein Leerzeichen ersetzt. Der Index ist nicht der ID des Subjekts oder der Index von 1. Eine Zahlenfolge bedeutet immer einen Index.
  • ExecuteClientApiCompatibility wählt den Befehlszweig aus. Text liest die Fertigkeitsauswahl, Arg liest die numerischen Zahlen und Modi. Bei einem nicht konvertierbaren Argument kann der Aufruf mit einem Konvertierungsfehler fehlschlagen.

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

1. Lesen und ausgeben – direktes Skript

Parameter und Ablauf:

  • Im Beispiel werden Selektor und bei der Aufnahme der Modus explizit angegeben. In der ersten Zeile wird eine Fertigkeit anhand des Namens oder ein Merkmal anhand der Nummer ausgewählt. Print zeigt nur das Ergebnis an.
var selector = "Mining";
var value = UO.GetSkillCap(selector);
UO.Print(Convert.ToString(value));

2. In Bedingung oder Vergleich anwenden – Skriptfunktion

Parameter und Ablauf:

  • Als Beispiel dienen die Schwelle 95.1 und die Modi 0/1/2. −1 wird vor dem Ändern des Modus überprüft. Nach dem Schreiben wird nur die lokale Kopie gelesen; Es wird nicht darauf gewartet, dass der Server antwortet.
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.GetSkillLockState("Mining") >= 0))
    {
        var value = UO.GetSkillCap("Mining");
        if (Truth(value >= 95.1))
        {
            UO.Print("Value >= 95.1: " + Convert.ToString(value));
        }
    }

    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:

  • Der gesamte Hilfscode ist unter Main angegeben. Der Selektor wählt eine Fertigkeit/Eigenschaft aus, der Modus stellt den Aufnahmemodus ein. ReadValue/ReadMode gibt die ursprüngliche Nummer zurück; ApplyMode prüft die Argumente, führt die Aktion aus und gibt keinen Wert zurück. UO.Wait(1000) trennt im Lesebeispiel zwei Bilder.

Fähigkeiten

Fähigkeiten

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 before = ReadValue("Animal_Lore");
        await Delay(1000);
        var after = ReadValue("Animal Lore");
        UO.Print(Convert.ToString(after - before));
        return null;
    }

    dynamic ReadValue(dynamic selector)
    {
        return UO.GetSkillCap(selector);
    }

    Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
}

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.GetSkillCap(skillName) — UO.GetSkillCap(Any)

Parameter: skillName (Any)

Ergebnis: double / Decimal.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "getskillcap": return new InjectionValue(bridge.GetSkillValue(Text(0), false, true));

UO.GetSkillCurrentValue

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

C#-Signaturen

double UO.GetSkillCurrentValue(object? skillName);

Liest den effektiven Wert der Fertigkeit mit Modifikatoren.

Parameter

  • skillName – Erforderlicher Skill: ein Name aus den Kundendaten, wie „Mining“ oder „Animal Lore“, oder ein Dezimalindex von 0 bis Skills.Length−1, Zahl oder String. Die Groß-/Kleinschreibung des Namens ist nicht wichtig, nachfolgende Leerzeichen werden entfernt, _ wird durch ein Leerzeichen ersetzt. Der Index ist nicht der ID des Subjekts oder der Index von 1. Eine Zahlenfolge bedeutet immer einen Index.

Rückgabewert

double (Double) – Fertigkeitspunkte in Schritten von 0,1, zum Beispiel 95,1, nicht 951. Das Feld ValueFixed wird durch 10 direkt in das Double geteilt. 0 bedeutet keine Fertigkeit oder keinen Charakter/Fähigkeit. Das Ergebnis ist nicht bool. Legacy SkillVal/BaseVal haben einen anderen Maßstab – mischen Sie diese Familien nicht.

Verhalten

  • Das Lesen erfolgt über Invoke im Spielthread basierend auf den bereits empfangenen Daten; Netzwerkpakete werden nicht gesendet. Die Fertigkeit wird nicht genutzt oder trainiert. Zwei Anfragen – zwei separate Snapshots.
  • Erforderlicher Skill: ein Name aus den Kundendaten, wie zum Beispiel „Mining“ oder „Animal Lore“, oder ein Dezimalindex von 0 bis Skills.Length−1, Zahl oder String. Die Groß-/Kleinschreibung des Namens ist nicht wichtig, nachfolgende Leerzeichen werden entfernt, _ wird durch ein Leerzeichen ersetzt. Der Index ist nicht der ID des Subjekts oder der Index von 1. Eine Zahlenfolge bedeutet immer einen Index.
  • ExecuteClientApiCompatibility wählt den Befehlszweig aus. Text liest die Fertigkeitsauswahl, Arg liest die numerischen Zahlen und Modi. Bei einem nicht konvertierbaren Argument kann der Aufruf mit einem Konvertierungsfehler fehlschlagen.

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

1. Lesen und ausgeben – direktes Skript

Parameter und Ablauf:

  • Im Beispiel werden Selektor und bei der Aufnahme der Modus explizit angegeben. In der ersten Zeile wird eine Fertigkeit anhand des Namens oder ein Merkmal anhand der Nummer ausgewählt. Print zeigt nur das Ergebnis an.
var selector = "Mining";
var value = UO.GetSkillCurrentValue(selector);
UO.Print(Convert.ToString(value));

2. In Bedingung oder Vergleich anwenden – Skriptfunktion

Parameter und Ablauf:

  • Als Beispiel dienen die Schwelle 95.1 und die Modi 0/1/2. −1 wird vor dem Ändern des Modus überprüft. Nach dem Schreiben wird nur die lokale Kopie gelesen; Es wird nicht darauf gewartet, dass der Server antwortet.
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.GetSkillLockState("Mining") >= 0))
    {
        var value = UO.GetSkillCurrentValue("Mining");
        if (Truth(value >= 95.1))
        {
            UO.Print("Value >= 95.1: " + Convert.ToString(value));
        }
    }

    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:

  • Der gesamte Hilfscode ist unter Main angegeben. Der Selektor wählt eine Fertigkeit/Eigenschaft aus, der Modus stellt den Aufnahmemodus ein. ReadValue/ReadMode gibt die ursprüngliche Nummer zurück; ApplyMode prüft die Argumente, führt die Aktion aus und gibt keinen Wert zurück. UO.Wait(1000) trennt im Lesebeispiel zwei Bilder.

Fähigkeiten

Fähigkeiten

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 before = ReadValue("Animal_Lore");
        await Delay(1000);
        var after = ReadValue("Animal Lore");
        UO.Print(Convert.ToString(after - before));
        return null;
    }

    dynamic ReadValue(dynamic selector)
    {
        return UO.GetSkillCurrentValue(selector);
    }

    Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
}

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.GetSkillCurrentValue(skillName) — UO.GetSkillCurrentValue(Any)

Parameter: skillName (Any)

Ergebnis: double / Decimal.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "getskillcurrentvalue": return new InjectionValue(bridge.GetSkillValue(Text(0), true, false));

UO.GetSkillLockState

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

C#-Signaturen

int UO.GetSkillLockState(object? skillName);

Liest den lokalen Skill-Änderungsmodus.

Parameter

  • skillName – Erforderlicher Skill: ein Name aus den Kundendaten, wie „Mining“ oder „Animal Lore“, oder ein Dezimalindex von 0 bis Skills.Length−1, Zahl oder String. Die Groß-/Kleinschreibung des Namens ist nicht wichtig, nachfolgende Leerzeichen werden entfernt, _ wird durch ein Leerzeichen ersetzt. Der Index ist nicht der ID des Subjekts oder der Index von 1. Eine Zahlenfolge bedeutet immer einen Index.

Rückgabewert

int: 0 – erhöhen, 1 – verringern, 2 – blockieren. Dies ist ein Moduscode, nicht true/false. Für eine unbekannte Fähigkeit oder einen fehlenden Charakter wird −1 zurückgegeben.

Verhalten

  • Das Lesen erfolgt über Invoke im Spielthread basierend auf den bereits empfangenen Daten; Netzwerkpakete werden nicht gesendet. Die Fertigkeit wird nicht genutzt oder trainiert. Zwei Anfragen – zwei separate Snapshots.
  • Erforderlicher Skill: ein Name aus den Kundendaten, wie zum Beispiel „Mining“ oder „Animal Lore“, oder ein Dezimalindex von 0 bis Skills.Length−1, Zahl oder String. Die Groß-/Kleinschreibung des Namens ist nicht wichtig, nachfolgende Leerzeichen werden entfernt, _ wird durch ein Leerzeichen ersetzt. Der Index ist nicht der ID des Subjekts oder der Index von 1. Eine Zahlenfolge bedeutet immer einen Index.
  • ExecuteClientApiCompatibility wählt den Befehlszweig aus. Text liest die Fertigkeitsauswahl, Arg liest die numerischen Zahlen und Modi. Bei einem nicht konvertierbaren Argument kann der Aufruf mit einem Konvertierungsfehler fehlschlagen.

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

1. Lesen und ausgeben – direktes Skript

Parameter und Ablauf:

  • Im Beispiel werden Selektor und bei der Aufnahme der Modus explizit angegeben. In der ersten Zeile wird eine Fertigkeit anhand des Namens oder ein Merkmal anhand der Nummer ausgewählt. Print zeigt nur das Ergebnis an.
var selector = "Mining";
var mode = UO.GetSkillLockState(selector);
UO.Print(Convert.ToString(mode));

2. In Bedingung oder Vergleich anwenden – Skriptfunktion

Parameter und Ablauf:

  • Als Beispiel dienen die Schwelle 95.1 und die Modi 0/1/2. −1 wird vor dem Ändern des Modus überprüft. Nach dem Schreiben wird nur die lokale Kopie gelesen; Es wird nicht darauf gewartet, dass der Server antwortet.
return  RunScenario();
 object? RunScenario()
{
    var mode = UO.GetSkillLockState("Mining");
    if (Truth(mode == 2))
    {
        UO.Print("Locked");
    }
    else
    {
        if (Truth(mode == -1))
        {
            UO.Print("Unknown selector");
        }
        else
        {
            UO.Print("Mode: " + Convert.ToString(mode));
        }
    }

    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:

  • Der gesamte Hilfscode ist unter Main angegeben. Der Selektor wählt eine Fertigkeit/Eigenschaft aus, der Modus stellt den Aufnahmemodus ein. ReadValue/ReadMode gibt die ursprüngliche Nummer zurück; ApplyMode prüft die Argumente, führt die Aktion aus und gibt keinen Wert zurück. UO.Wait(1000) trennt im Lesebeispiel zwei Bilder.

Fähigkeiten

Fähigkeiten

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 before = ReadMode("Mining");
        await Delay(1000);
        var after = ReadMode("Mining");
        UO.Print(Convert.ToString(before) + " -> " + Convert.ToString(after));
        return null;
    }

    dynamic ReadMode(dynamic selector)
    {
        return UO.GetSkillLockState(selector);
    }

    Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
}

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.GetSkillLockState(skillName) — UO.GetSkillLockState(Any)

Parameter: skillName (Any)

Ergebnis: int / Integer.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "getskilllockstate": return new InjectionValue(bridge.GetSkillLockState(Text(0)));

UO.GetSkillValue

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

C#-Signaturen

double UO.GetSkillValue(object? skillName);

Liest den Basiswert der Fertigkeit ohne Modifikatoren.

Parameter

  • skillName – Erforderlicher Skill: ein Name aus den Kundendaten, wie „Mining“ oder „Animal Lore“, oder ein Dezimalindex von 0 bis Skills.Length−1, Zahl oder String. Die Groß-/Kleinschreibung des Namens ist nicht wichtig, nachfolgende Leerzeichen werden entfernt, _ wird durch ein Leerzeichen ersetzt. Der Index ist nicht der ID des Subjekts oder der Index von 1. Eine Zahlenfolge bedeutet immer einen Index.

Rückgabewert

double (Double) – Fertigkeitspunkte in Schritten von 0,1, zum Beispiel 95,1, nicht 951. Das Feld BaseFixed wird durch 10 direkt in das Double geteilt. 0 bedeutet keine Fertigkeit oder keinen Charakter/Fähigkeit. Das Ergebnis ist nicht bool. Legacy SkillVal/BaseVal haben einen anderen Maßstab – mischen Sie diese Familien nicht.

Verhalten

  • Das Lesen erfolgt über Invoke im Spielthread basierend auf den bereits empfangenen Daten; Netzwerkpakete werden nicht gesendet. Die Fertigkeit wird nicht genutzt oder trainiert. Zwei Anfragen – zwei separate Snapshots.
  • Erforderlicher Skill: ein Name aus den Kundendaten, wie zum Beispiel „Mining“ oder „Animal Lore“, oder ein Dezimalindex von 0 bis Skills.Length−1, Zahl oder String. Die Groß-/Kleinschreibung des Namens ist nicht wichtig, nachfolgende Leerzeichen werden entfernt, _ wird durch ein Leerzeichen ersetzt. Der Index ist nicht der ID des Subjekts oder der Index von 1. Eine Zahlenfolge bedeutet immer einen Index.
  • ExecuteClientApiCompatibility wählt den Befehlszweig aus. Text liest die Fertigkeitsauswahl, Arg liest die numerischen Zahlen und Modi. Bei einem nicht konvertierbaren Argument kann der Aufruf mit einem Konvertierungsfehler fehlschlagen.

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

1. Lesen und ausgeben – direktes Skript

Parameter und Ablauf:

  • Im Beispiel werden Selektor und bei der Aufnahme der Modus explizit angegeben. In der ersten Zeile wird eine Fertigkeit anhand des Namens oder ein Merkmal anhand der Nummer ausgewählt. Print zeigt nur das Ergebnis an.
var selector = "Mining";
var value = UO.GetSkillValue(selector);
UO.Print(Convert.ToString(value));

2. In Bedingung oder Vergleich anwenden – Skriptfunktion

Parameter und Ablauf:

  • Als Beispiel dienen die Schwelle 95.1 und die Modi 0/1/2. −1 wird vor dem Ändern des Modus überprüft. Nach dem Schreiben wird nur die lokale Kopie gelesen; Es wird nicht darauf gewartet, dass der Server antwortet.
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.GetSkillLockState("Mining") >= 0))
    {
        var value = UO.GetSkillValue("Mining");
        if (Truth(value >= 95.1))
        {
            UO.Print("Value >= 95.1: " + Convert.ToString(value));
        }
    }

    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:

  • Der gesamte Hilfscode ist unter Main angegeben. Der Selektor wählt eine Fertigkeit/Eigenschaft aus, der Modus stellt den Aufnahmemodus ein. ReadValue/ReadMode gibt die ursprüngliche Nummer zurück; ApplyMode prüft die Argumente, führt die Aktion aus und gibt keinen Wert zurück. UO.Wait(1000) trennt im Lesebeispiel zwei Bilder.

Fähigkeiten

Fähigkeiten

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 before = ReadValue("Animal_Lore");
        await Delay(1000);
        var after = ReadValue("Animal Lore");
        UO.Print(Convert.ToString(after - before));
        return null;
    }

    dynamic ReadValue(dynamic selector)
    {
        return UO.GetSkillValue(selector);
    }

    Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
}

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.GetSkillValue(skillName) — UO.GetSkillValue(Any)

Parameter: skillName (Any)

Ergebnis: double / Decimal.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "getskillvalue": return new InjectionValue(bridge.GetSkillValue(Text(0), false, false));

UO.SetSkillLockState

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

C#-Signaturen

void UO.SetSkillLockState(object? skillName, object? skillState);

Fordert eine Änderung des Skill-Modus an.

Parameter

  • skillName – Erforderlicher Skill: ein Name aus den Kundendaten, wie „Mining“ oder „Animal Lore“, oder ein Dezimalindex von 0 bis Skills.Length−1, Zahl oder String. Die Groß-/Kleinschreibung des Namens ist nicht wichtig, nachfolgende Leerzeichen werden entfernt, _ wird durch ein Leerzeichen ersetzt. Der Index ist nicht der ID des Subjekts oder der Index von 1. Eine Zahlenfolge bedeutet immer einen Index.
  • skillState – Pflichtmodus: 0 – erhöhen, 1 – verringern, 2 – blockieren. Dies sind drei Codes, nicht bool; true/false ersetzen nicht die Namen aller Modi.

Rückgabewert

void – kein Rückgabewert. Das Ergebnis kann nicht als Erfolg/Misserfolg gewertet oder mit true verglichen werden. Die anschließende Lesung zeigt das lokale Modell, nicht die Bestätigung des Servers.

Verhalten

  • Eine gültige Anfrage sendet ein Paket über GameActions und ändert sofort den lokalen Modus. Der Server kann seine eigenen Einschränkungen anwenden; Eine Steigerung der Fähigkeiten oder Statistiken kann nicht garantiert werden. Unbekannter Skill, ungültiger Index/Modus und fehlendes Zeichen werden ohne Paket ignoriert.
  • Erforderlicher Skill: ein Name aus den Kundendaten, wie zum Beispiel „Mining“ oder „Animal Lore“, oder ein Dezimalindex von 0 bis Skills.Length−1, Zahl oder String. Die Groß-/Kleinschreibung des Namens ist nicht wichtig, nachfolgende Leerzeichen werden entfernt, _ wird durch ein Leerzeichen ersetzt. Der Index ist nicht der ID des Subjekts oder der Index von 1. Eine Zahlenfolge bedeutet immer einen Index.
  • ExecuteClientApiCompatibility wählt den Befehlszweig aus. Text liest die Fertigkeitsauswahl, Arg liest die numerischen Zahlen und Modi. Bei einem nicht konvertierbaren Argument kann der Aufruf mit einem Konvertierungsfehler fehlschlagen.

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.SetSkillLockState");
UO.SetSkillLockState("Mining", 2);

1. Lesen und ausgeben – direktes Skript

Parameter und Ablauf:

  • Im Beispiel werden Selektor und bei der Aufnahme der Modus explizit angegeben. In der ersten Zeile wird eine Fertigkeit anhand des Namens oder ein Merkmal anhand der Nummer ausgewählt. Print zeigt nur das Ergebnis an.
var selector = "Mining";
var mode = 2;
UO.SetSkillLockState(selector, mode);
UO.Print(Convert.ToString(UO.GetSkillLockState(selector)));

2. In Bedingung oder Vergleich anwenden – Skriptfunktion

Parameter und Ablauf:

  • Als Beispiel dienen die Schwelle 95.1 und die Modi 0/1/2. −1 wird vor dem Ändern des Modus überprüft. Nach dem Schreiben wird nur die lokale Kopie gelesen; Es wird nicht darauf gewartet, dass der Server antwortet.
return  RunScenario();
 object? RunScenario()
{
    var selector = "Mining";
    var before = UO.GetSkillLockState(selector);
    if (Truth(before >= 0) && Truth(before <= 2))
    {
        UO.SetSkillLockState(selector, 0);
        UO.Print(Convert.ToString(UO.GetSkillLockState(selector)));
    }

    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:

  • Der gesamte Hilfscode ist unter Main angegeben. Der Selektor wählt eine Fertigkeit/Eigenschaft aus, der Modus stellt den Aufnahmemodus ein. ReadValue/ReadMode gibt die ursprüngliche Nummer zurück; ApplyMode prüft die Argumente, führt die Aktion aus und gibt keinen Wert zurück. UO.Wait(1000) trennt im Lesebeispiel zwei Bilder.

Fähigkeiten

Fähigkeiten

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()
    {
        ApplyMode("Mining", 2);
        return null;
    }

    void ApplyMode(dynamic selector, dynamic mode)
    {
        if (Truth(mode < 0) || Truth(mode > 2))
        {
            return;
        }

        if (Truth(UO.GetSkillLockState(selector) < 0))
        {
            return;
        }

        UO.SetSkillLockState(selector, mode);
    }

    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.SetSkillLockState(skillName, skillState) — UO.SetSkillLockState(Any,Any)

Parameter: skillName (Any), skillState (Any)

Ergebnis: void / Unit.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "setskilllockstate":

                case "skilllockstate": bridge.SetSkillLockState(Text(0), Arg(1)); return InjectionValue.Unit;

UO.SkillLockState

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

C#-Signaturen

void UO.SkillLockState(object? skillName, object? skillState);

Fordert eine Änderung des Skill-Modus an.

Parameter

  • skillName – Erforderlicher Skill: ein Name aus den Kundendaten, wie „Mining“ oder „Animal Lore“, oder ein Dezimalindex von 0 bis Skills.Length−1, Zahl oder String. Die Groß-/Kleinschreibung des Namens ist nicht wichtig, nachfolgende Leerzeichen werden entfernt, _ wird durch ein Leerzeichen ersetzt. Der Index ist nicht der ID des Subjekts oder der Index von 1. Eine Zahlenfolge bedeutet immer einen Index.
  • skillState – Pflichtmodus: 0 – erhöhen, 1 – verringern, 2 – blockieren. Dies sind drei Codes, nicht bool; true/false ersetzen nicht die Namen aller Modi.

Rückgabewert

void – kein Rückgabewert. Das Ergebnis kann nicht als Erfolg/Misserfolg gewertet oder mit true verglichen werden. Die anschließende Lesung zeigt das lokale Modell, nicht die Bestätigung des Servers.

Verhalten

  • Eine gültige Anfrage sendet ein Paket über GameActions und ändert sofort den lokalen Modus. Der Server kann seine eigenen Einschränkungen anwenden; Eine Steigerung der Fähigkeiten oder Statistiken kann nicht garantiert werden. Unbekannter Skill, ungültiger Index/Modus und fehlendes Zeichen werden ohne Paket ignoriert.
  • Erforderlicher Skill: ein Name aus den Kundendaten, wie zum Beispiel „Mining“ oder „Animal Lore“, oder ein Dezimalindex von 0 bis Skills.Length−1, Zahl oder String. Die Groß-/Kleinschreibung des Namens ist nicht wichtig, nachfolgende Leerzeichen werden entfernt, _ wird durch ein Leerzeichen ersetzt. Der Index ist nicht der ID des Subjekts oder der Index von 1. Eine Zahlenfolge bedeutet immer einen Index.
  • ExecuteClientApiCompatibility wählt den Befehlszweig aus. Text liest die Fertigkeitsauswahl, Arg liest die numerischen Zahlen und Modi. Bei einem nicht konvertierbaren Argument kann der Aufruf mit einem Konvertierungsfehler fehlschlagen.

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.SkillLockState");
UO.SkillLockState("Mining", 2);

1. Lesen und ausgeben – direktes Skript

Parameter und Ablauf:

  • Im Beispiel werden Selektor und bei der Aufnahme der Modus explizit angegeben. In der ersten Zeile wird eine Fertigkeit anhand des Namens oder ein Merkmal anhand der Nummer ausgewählt. Print zeigt nur das Ergebnis an.
var selector = "Mining";
var mode = 2;
UO.SkillLockState(selector, mode);
UO.Print(Convert.ToString(UO.GetSkillLockState(selector)));

2. In Bedingung oder Vergleich anwenden – Skriptfunktion

Parameter und Ablauf:

  • Als Beispiel dienen die Schwelle 95.1 und die Modi 0/1/2. −1 wird vor dem Ändern des Modus überprüft. Nach dem Schreiben wird nur die lokale Kopie gelesen; Es wird nicht darauf gewartet, dass der Server antwortet.
return  RunScenario();
 object? RunScenario()
{
    var selector = "Mining";
    var before = UO.GetSkillLockState(selector);
    if (Truth(before >= 0) && Truth(before <= 2))
    {
        UO.SkillLockState(selector, 0);
        UO.Print(Convert.ToString(UO.GetSkillLockState(selector)));
    }

    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:

  • Der gesamte Hilfscode ist unter Main angegeben. Der Selektor wählt eine Fertigkeit/Eigenschaft aus, der Modus stellt den Aufnahmemodus ein. ReadValue/ReadMode gibt die ursprüngliche Nummer zurück; ApplyMode prüft die Argumente, führt die Aktion aus und gibt keinen Wert zurück. UO.Wait(1000) trennt im Lesebeispiel zwei Bilder.
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()
    {
        ApplyMode("Mining", 2);
        return null;
    }

    void ApplyMode(dynamic selector, dynamic mode)
    {
        if (Truth(mode < 0) || Truth(mode > 2))
        {
            return;
        }

        if (Truth(UO.GetSkillLockState(selector) < 0))
        {
            return;
        }

        UO.SkillLockState(selector, mode);
    }

    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.SkillLockState(skillName, skillState) — UO.SkillLockState(Any,Any)

Parameter: skillName (Any), skillState (Any)

Ergebnis: void / Unit.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "setskilllockstate":

                case "skilllockstate": bridge.SetSkillLockState(Text(0), Arg(1)); return InjectionValue.Unit;

UO.SkillVal

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

C#-Signaturen

int UO.SkillVal(object? skillName);
int UO.SkillVal(object? skill, object? variant);

Liest den Legacy-Wert einer Fertigkeit oder ihren Modus/Wachstum.

Parameter

  • variant – Optionaler int: 0 – effektiver Wert (Standard), 1 – Basiswert, 2 – Erhöhung des Basiswerts ab dem ersten Lesen dieses Skills zur Laufzeit, 3 – Blockierungsmodus.
  • skillName – Name aus dem Laufzeitwörterbuch skillNameToSkillId, zum Beispiel „Mining“. Die Groß-/Kleinschreibung ist nicht wichtig, aber Leerzeichen werden nicht gekürzt und _ wird nicht ersetzt. Der numerische Text in dieser Legacy-Funktion ist kein Index; Unbekannter Name zeigt eine Meldung an und gibt 0 aus.
  • skill – Name aus dem Laufzeitwörterbuch skillNameToSkillId, zum Beispiel „Mining“. Die Groß-/Kleinschreibung ist nicht wichtig, aber Leerzeichen werden nicht gekürzt und _ wird nicht ersetzt. Der numerische Text in dieser Legacy-Funktion ist kein Index; Unbekannter Name zeigt eine Meldung an und gibt 0 aus.

Rückgabewert

int: Optionen 0/1/2 – Zehntel Fertigkeitspunkte (951 = 95.1); Option 3 - Modus 0/1/2 oder -1, wenn kein Spieler/Fähigkeit vorhanden ist. Unbekannter Name/Variante ergibt 0. Option 2 kann negativ sein, wenn base niedriger ist als die gespeicherte Basislaufzeit, auch wenn kein Player und base=0 vorhanden sind. Das ist nicht bool.

Verhalten

  • Vor der Auswahl der Variante wird SkillBaseVal genommen und, wenn die Fertigkeit zum ersten Mal gelesen wird, wird die Grundlinie gespeichert. Daher legt bereits das Lesen von Variante=0/1/3 den Ausgangspunkt für zukünftiges Wachstum von Variante=2 fest.
  • Eine falsche Variante zeigt eine Meldung an und gibt 0 aus, aber die Grundlinie wurde möglicherweise bereits erstellt. Die GetSkillValue/GetSkillCurrentValue-Werte werden mit double-Brillen gemessen und haben eine andere Skala.

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

1. Direkter Aufruf – direktes Skript

Parameter und Ablauf:

  • Liest den Legacy-Wert einer Fertigkeit oder ihren Modus/Wachstum.
UO.Print(UO.SkillVal("Mining"));
UO.Print(UO.SkillVal("Mining", 1));

2. Explizite Option – Skriptfunktion

Parameter und Ablauf:

  • Vor der Auswahl der Variante wird SkillBaseVal genommen und, wenn die Fertigkeit zum ersten Mal gelesen wird, wird die Grundlinie gespeichert. Daher legt bereits das Lesen von Variante=0/1/3 den Ausgangspunkt für zukünftiges Wachstum von Variante=2 fest.
return  RunScenario();
 object? RunScenario()
{
    var baseline = UO.SkillVal("Mining", 2);
    UO.Wait(1000);
    UO.Print(UO.SkillVal("Mining", 2) - baseline);
    return null;
}

3. Vollständige Hilfsfunktion – Skriptklasse

Parameter und Ablauf:

  • Eine falsche Variante zeigt eine Meldung an und gibt 0 aus, aber die Grundlinie wurde möglicherweise bereits erstellt. Die GetSkillValue/GetSkillCurrentValue-Werte werden mit double-Brillen gemessen und haben eine andere Skala.

Fähigkeiten

Fähigkeiten

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 lockMode = UO.SkillVal("Mining", 3);
        if (Truth(lockMode == 2))
        {
            UO.Print("Skill locked");
        }

        return null;
    }

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

Implementierung des Befehls

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

UO.SkillVal(skillName) — UO.SkillVal(String)

Parameter: skillName (String)

Ergebnis: int / Integer.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

public int SkillVal(string skillName) => SkillVal(skillName, 0);

UO.SkillVal(skill, variant) — UO.SkillVal(Any,Any)

Parameter: skill (Any), variant (Any)

Ergebnis: int / Integer.

Beim Aufruf:

Der Aufruf führt den gespeicherten Handler-Delegate aus. Die Registrierungsmethode erzeugt ihn beim Aufbau der API.

Interner Implementierungscode; kein eigenständiges Skript.

values => new InjectionValue(SkillVal(values[0].ToString(), NumberConversions.ToInt(values[1])))

UO.Snoop

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

C#-Signaturen

void UO.Snoop();
void UO.Snoop(object? container);

Verwendet einen Container/ein Objekt und fordert normalerweise dessen Öffnen an.

Parameter

  • container – Optional serial/Alias. Der Standardwert ist Bridge.LastTarget. Der Befehl prüft weder IsContainer noch die Zugehörigkeit.

Rückgabewert

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

Verhalten

  • ExecuteLegacyManualAlias ruft Bridge.UseObject(Arg(0,bridge.LastTarget)) auf. Dies ist eine reguläre double-Klick-Anfrage, kein separater Client-Algorithmus für den Snooping-Skill.
  • 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.Snoop");
UO.Snoop();

1. Direkter Aufruf – direktes Skript

Parameter und Ablauf:

  • Verwendet einen Container/ein Objekt und fordert normalerweise dessen Öffnen an.
UO.Snoop();

2. Explizite Option – Skriptfunktion

Parameter und Ablauf:

  • ExecuteLegacyManualAlias ruft Bridge.UseObject(Arg(0,bridge.LastTarget)) auf. Dies ist eine reguläre double-Klick-Anfrage, kein separater Client-Algorithmus für den Snooping-Skill.
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.IsContainer("lasttarget")))
    {
        UO.Snoop("lasttarget");
    }

    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()
    {
        var id = UO.GetSerial("lasttarget");
        if (Truth(UO.Exists(id)))
        {
            UO.Snoop(id);
            UO.Wait(500);
            UO.Print(UO.GetContent(id));
        }

        return null;
    }

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

Implementierung des Befehls

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

UO.Snoop() — UO.Snoop()

Parameter: Keine Parameter.

Ergebnis: void / Unit.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "snoop": bridge.UseObject(Arg(0, bridge.LastTarget)); break;

UO.Snoop(container) — UO.Snoop(Any)

Parameter: container (Any)

Ergebnis: void / Unit.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

case "snoop": bridge.UseObject(Arg(0, bridge.LastTarget)); break;

UO.StealthCnt

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

C#-Signaturen

int UO.StealthCnt();

Liest den lokalen Stealth-Offset-Zähler des Charakters.

Parameter

Es gibt keine Parameter.

Rückgabewert

int ist die akkumulierte Summe max(abs(deltaX),abs(deltaY)) zwischen Aufrufen bei IsHidden. Dies ist keine garantierte Anzahl an Server-Stealth-Schritten oder das verbleibende Limit.

Verhalten

  • Ohne Player oder wenn Player nicht ausgeblendet ist, wird count=0 zurückgesetzt und das aktuelle X/Y (oder -1) gespeichert. Im Stealth-Modus wird ein Vergleich mit zuvor gespeicherten X/Y-Werten durchgeführt, ein Versatz hinzugefügt und die Koordinaten aktualisiert.
  • Der Zähler ändert sich beim Lesen. Das Hin- und Herwechseln zwischen Anrufen kann übersprungen werden; Eine Änderung von Z ohne X/Y erhöht den Zähler 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.StealthCnt();
UO.Print("StealthCnt: " + Convert.ToString(result));

1. Direkter Aufruf – direktes Skript

Parameter und Ablauf:

  • Liest den lokalen Stealth-Offset-Zähler des Charakters.
UO.Print(UO.StealthCnt());

2. Explizite Option – Skriptfunktion

Parameter und Ablauf:

  • Ohne Player oder wenn Player nicht ausgeblendet ist, wird count=0 zurückgesetzt und das aktuelle X/Y (oder -1) gespeichert. Im Stealth-Modus wird ein Vergleich mit zuvor gespeicherten X/Y-Werten durchgeführt, ein Versatz hinzugefügt und die Koordinaten aktualisiert.
return  RunScenario();
 object? RunScenario()
{
    var before = UO.StealthCnt();
    UO.Wait(500);
    UO.Print(UO.StealthCnt() - before);
    return null;
}

3. Vollständige Hilfsfunktion – Skriptklasse

Parameter und Ablauf:

  • Der Zähler ändert sich beim Lesen. Das Hin- und Herwechseln zwischen Anrufen kann übersprungen werden; Eine Änderung von Z ohne X/Y erhöht den Zähler nicht.
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()
    {
        if (Truth(UO.Hidden()))
        {
            UO.Print(UO.StealthCnt());
        }
        else
        {
            UO.Print(UO.StealthCnt());
        }

        return null;
    }

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

Implementierung des Befehls

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

UO.StealthCnt() — UO.StealthCnt()

Parameter: Keine Parameter.

Ergebnis: int / Integer.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

public int StealthCnt() => bridge.StealthCnt();

UO.TicksSkill

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

C#-Signaturen

int UO.TicksSkill();

Liest die gespeicherte Marke TicksSkill.

Parameter

Es gibt keine Parameter.

Rückgabewert

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

Verhalten

  • Gibt das Feld ticksSkill zurück. Es wird durch das erfolgreich akzeptierte UseSkill/UseSkillAtTarget aktualisiert; Es handelt sich nicht um eine automatische Überwachung aller manuellen/Serveraktivitäten. Der Befehl selbst ändert die Markierung nicht.
  • UO.Timer() – die Marke berechnet das Alter in Zehntelsekunden. Markierungen zwischen verschiedenen Laufzeiten werden nicht verglichen.

Eigenständige C#-Skripte

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

Einfaches Beispiel

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

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

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

1. Direkter Aufruf – direktes Skript

Parameter und Ablauf:

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

2. Explizite Option – Skriptfunktion

Parameter und Ablauf:

  • Gibt das Feld ticksSkill zurück. Es wird durch das erfolgreich akzeptierte UseSkill/UseSkillAtTarget aktualisiert; Es handelt sich nicht um eine automatische Überwachung aller manuellen/Serveraktivitäten. Der Befehl selbst ändert die Markierung nicht.
return  RunScenario();
 object? RunScenario()
{
    var stamp = UO.TicksSkill();
    var ageTenths = UO.Timer() - stamp;
    UO.Print(ageTenths);
    return null;
}

3. Vollständige Hilfsfunktion – Skriptklasse

Parameter und Ablauf:

  • UO.Timer() – die Marke berechnet das Alter in Zehntelsekunden. Markierungen zwischen verschiedenen Laufzeiten werden nicht verglichen.

Fähigkeiten

Fähigkeiten

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.TicksSkill();
        UO.Wait(250);
        var after = UO.TicksSkill();
        UO.Print(before = after);
        return null;
    }
}

Implementierung des Befehls

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

UO.TicksSkill() — UO.TicksSkill()

Parameter: Keine Parameter.

Ergebnis: int / Integer.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

public int TicksSkill() => ticksSkill;

UO.Track

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

C#-Signaturen

void UO.Track();
void UO.Track(object? flag);
void UO.Track(object? flagRaw, object? x, object? y);

Erstellt oder entfernt einen lokalen Pfeil zu Koordinaten. Hilft, den Ort der Rückkehr zu markieren. Löst nicht die Fähigkeit „Tracking“ aus, sucht nicht nach Kreaturen und bewegt den Charakter nicht.

Parameter

  • flag – 0 – lokalen Pfeil entfernen; jedes andere Ganze - zeigen. UO.Track() und UO.Track(1) platzieren es im aktuellen X/Y des Charakters. UO.Track(1, x, y) platziert es an der angegebenen Stelle; UO.Track(0, x, y) ignoriert Koordinaten. Die Zwei-Parameter-Form ist nicht im registrierten API enthalten.
  • flagRaw – 0 – lokalen Pfeil entfernen; jedes andere Ganze - zeigen. UO.Track() und UO.Track(1) platzieren es im aktuellen X/Y des Charakters. UO.Track(1, x, y) platziert es an der angegebenen Stelle; UO.Track(0, x, y) ignoriert Koordinaten. Die Zwei-Parameter-Form ist nicht im registrierten API enthalten.
  • x – Zellenkoordinaten auf der aktuellen Karte, keine Fensterpixel. Z und Kartennummer werden nicht akzeptiert. Wählen Sie einen vorhandenen Punkt auf Ihrer Karte aus. Das Team prüft nicht das Gelände, plant keine Route und verfolgt kein sich bewegendes Ziel.
  • y – Zellenkoordinaten auf der aktuellen Karte, keine Fensterpixel. Z und Kartennummer werden nicht akzeptiert. Wählen Sie einen vorhandenen Punkt auf Ihrer Karte aus. Das Team prüft nicht das Gelände, plant keine Route und verfolgt kein sich bewegendes Ziel.

Rückgabewert

void – kein Wert; Der Befehl gibt keinen Bewegungserfolg oder bool zurück. Es wird nur der lokale Token geändert.

Verhalten

  • Server- und lokale Pfeile werden getrennt gespeichert. Track(0) entfernt den Serverpfeil nicht. Ohne Grafik wird der Marker gespeichert und erscheint beim Öffnen des Fensters. Durch das Schließen des Spielfensters werden keine Markierungen entfernt; Durch das Unterbrechen der Verbindung werden sie gelöscht. Der Server kann seinen Pfeil bewegen oder entfernen. Koordinaten beweisen nicht, dass das Ziel erreichbar ist.
  • Zellenkoordinaten auf der aktuellen Karte, keine Fensterpixel. Z und Kartennummer werden nicht akzeptiert. Wählen Sie einen vorhandenen Punkt auf Ihrer Karte aus. Das Team prüft nicht das Gelände, plant keine Route und verfolgt kein sich bewegendes Ziel.
  • 0 – lokalen Pfeil entfernen; jedes andere Ganze - zeigen. UO.Track() und UO.Track(1) platzieren es im aktuellen X/Y des Charakters. UO.Track(1, x, y) platziert es an der angegebenen Stelle; UO.Track(0, x, y) ignoriert Koordinaten. Die Zwei-Parameter-Form ist nicht im registrierten API enthalten.

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

1. Direkte Bewerbung – direktes Skript

Parameter und Ablauf:

  • UO.Track() merkt sich den aktuellen Punkt: Nach dem Verlassen zeigt der Pfeil zurück. Der Punkt wird nicht automatisch nach dem Zeichen aktualisiert.
UO.Track();

2. Spielzustand – Szenariofunktion

Parameter und Ablauf:

  • Zeigt einen lokalen Pfeil zu 1450,1690 auf der aktuellen Karte an. Wenn Sie sich bereits innerhalb eines Quadrats befinden, entfernt Track(0) es. Ersetzen Sie Ihre Koordinaten.
return  RunScenario();
 object? RunScenario()
{
    var x = 1450;
    var y = 1690;
    UO.Track(1, x, y);
    if (Truth(UO.GetDistance(x, y) <= 1))
    {
        UO.Track(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:

  • Die Funktion MarkIfDistant verwendet das gleiche X/Y und den gleichen Abstand: Wenn das Ziel weiter als zwei Zellen entfernt ist, platziert sie einen Pfeil, andernfalls entfernt sie ihn. Die gesamte Funktion ist unten dargestellt; Hier gibt es keine Bewegung oder Erwartung, etwas zu erreichen.
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()
    {
        MarkIfDistant(1450, 1690);
        return null;
    }

    void MarkIfDistant(dynamic x, dynamic y)
    {
        if (Truth(UO.GetDistance(x, y) > 2))
        {
            UO.Track(1, x, y);
        }
        else
        {
            UO.Track(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.Track() — UO.Track()

Parameter: Keine Parameter.

Ergebnis: void / Unit.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

public void Track() => Track(1, GetX(), GetY());

UO.Track(flag) — UO.Track(Any)

Parameter: flag (Any)

Ergebnis: void / Unit.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

public void Track(InjectionValue flag) => Track(NumberConversions.ToInt(flag), GetX(), GetY());

UO.Track(flagRaw, x, y) — UO.Track(Any,Any,Any)

Parameter: flagRaw (Any), x (Any), y (Any)

Ergebnis: void / Unit.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

public void Track(InjectionValue flagRaw, InjectionValue x, InjectionValue y)

            => Track(NumberConversions.ToInt(flagRaw), NumberConversions.ToInt(x), NumberConversions.ToInt(y));

UO.UseSkill

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

C#-Signaturen

int UO.UseSkill(object? skillName);

Fordert den Server auf, den Skill namentlich zu verwenden. Genau ein Parameter: skillName. UO.UseSkill("Hiding") versucht, seinen eigenen Charakter zu verbergen. Wenn die Fertigkeit ein Ziel benötigt, wählen Sie es mit dem Visier oder im Voraus mit einem separaten Befehl WaitTargetObject aus.

Parameter

  • skillName – Erforderliche Zeichenfolge – der genaue englische Name der Fertigkeit, z. B. „Hiding“, „Anatomy“ oder „Meditation“. Der Fall ist nicht wichtig; Leerzeichen und Unterstriche werden nicht automatisch korrigiert. Skillnummer, serial, self, Distanz, Bekanntheit, maxZ und Warten werden hier nicht übertragen. Alle Namen.

Rückgabewert

int: 1/true – der Client hat die Anfrage angenommen; 0/false – unbekannter Name oder lokaler Fehler. Dies ist kein Fähigkeitserfolg, keine Fähigkeitsentwicklung oder ein Zeichen von Heimlichkeit. Für Stealth lesen Sie Hidden(). Sie können if UO.UseSkill("Hiding") { ... } schreiben oder mit 1/true vergleichen. Ein fehlendes oder zusätzliches Argument ist ein Aufruffehler.

Verhalten

  • Einzelform: UO.UseSkill(skillName). Es gibt keine zweiten oder nachfolgenden Parameter. Suchen, Zielen und Warten werden von anderen Befehlen ausgeführt.
  • Beim Verstecken und Meditieren muss kein weiteres Objekt ausgewählt werden. Bereiten Sie WaitTargetObject nicht auf sie vor: Der verbleibende Ausbruch könnte auf den Anblick des nächsten Außenstehenden reagieren.
  • Anatomie verwendet ein Zielfernrohr. Rufen Sie UseSkill("Anatomy") auf und wählen Sie den Charakter mit der Maus aus. Um automatisch zu antworten, führen Sie zuerst WaitTargetObject und dann UseSkill aus: Auf diese Weise verpassen Sie die schnelle Antwort des Servers nicht.
  • UseSkill erstellt oder löscht die Zielwarteschlange nicht. Wenn Sie eine Antwort vorbereitet haben, löschen Sie diese bei Fehler/Zeitüberschreitung CancelWaitTarget. Führen Sie keine anderen Sichtungsszenarien gleichzeitig durch.
  • Vergiftung, Provokation und andere mehrstufige Fertigkeiten erfordern eine separate Verarbeitung zusätzlicher Ziele/Werkzeuge. Ein vorausgewähltes Objekt vervollständigt keine Fertigkeit.
  • Der Name im Wörterbuch garantiert keine Verwendung ohne Werkzeug. Für den Bergbau ist ein Werkzeug erforderlich. Zauber werden von Cast gewirkt. Die Regeln und der Erfolg werden vom Server bestimmt.
  • Eine akzeptierte Anfrage aktualisiert TicksSkill. Das Team erwartet keine Stealth-, Effekt-, Fertigkeitssteigerung oder Warteschlangenverbrauch.

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

1. Ausblenden über Ausblenden – direktes Skript

Parameter und Ablauf:

  • Verstecken ist das einzige Argument. UO.Wait(1000) gibt Zeit zum Antworten; Hidden liest das Empfangsflag. Die Rückkehr zu 1 von UseSkill bedeutet nicht, dass Sie entkommen sind.
if (!(Truth(UO.Connected())) || Truth(UO.Dead()) || Truth(UO.Hidden()))
{
    return null;
}
if (!(Truth(UO.UseSkill("Hiding"))))
{
    UO.Print("Hiding request rejected");
    return null;
}
await Delay(1000);
if (Truth(UO.Hidden()))
{
    UO.Print("Character is hidden");
}
else
{
    UO.Print("Not hidden yet; check the game journal");
}

Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

2. Anatomie mit separat vorbereiteter Ziel-Skriptfunktion

Parameter und Ablauf:

  • Anatomie ist der einzige Parameter UseSkill; mobile bezieht sich auf WaitTargetObject. ASC wandelt die Hex-Zeichenfolge GetSerial zur Bereichsprüfung in eine Zahl um. 1500 – im Beispiel zu wartende Millisekunden. Löscht schließlich die verbleibende Warteschlange. Sehen Sie sich das Anatomie-Ergebnis im Spiel an.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var mobile = Asc(UO.GetSerial("lasttarget"), 0);
    if (Truth(mobile <= 0) || Truth(mobile >= 0x40000000) || !(Truth(UO.Exists(mobile))))
    {
        return null;
    }

    UO.CancelWaitTarget();
    try
    {
        UO.WaitTargetObject(mobile);
        if (Truth(UO.UseSkill("Anatomy")))
        {
            await Delay(1500);
        }
    }
    finally
    {
        UO.CancelWaitTarget();
    }

    return null;
}

int Asc(object? value, int fallback = 0)
{
    string text = Convert.ToString(value) ?? "";
    if (text.StartsWith("0x", StringComparison.OrdinalIgnoreCase))
        return int.TryParse(text[2..], System.Globalization.NumberStyles.HexNumber, System.Globalization.CultureInfo.InvariantCulture, out int hex) ? hex : fallback;
    return int.TryParse(text, out int number) ? number : fallback;
}

Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

3. Meditation und Mana-Beobachtung – Skriptkurs

Parameter und Ablauf:

  • Meditation wird ohne Zweck aufgerufen. Bevor das vorherige Mana gespeichert wird, ist 2000 der Beobachtungszeitraum. Manawachstum kann andere Gründe haben; Dies ist kein Beweis für Meditation oder ein Versprechen einer festen Genesungsrate.

Fähigkeiten

Fähigkeiten

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()
    {
        if (!(Truth(UO.Connected())) || Truth(UO.Dead()))
        {
            return null;
        }

        var before = UO.Mana();
        if (!(Truth(UO.UseSkill("Meditation"))))
        {
            UO.Print("Meditation request rejected");
            return null;
        }

        await Delay(2000);
        if (Truth(UO.Mana() > before))
        {
            UO.Print("Mana increased");
        }
        else
        {
            UO.Print("No mana increase observed yet");
        }

        return null;
    }

    Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
    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.UseSkill(skillName) — UO.UseSkill(String)

Parameter: skillName (String)

Ergebnis: int / Integer.

Beim Aufruf:

Interner Implementierungscode; kein eigenständiges Skript.

public int UseSkill(string skillName)

        {

            return UseSkillCore(skillName) ? 1 : 0;

        }
⚠️ **GitHub.com Fallback** ⚠️