DE UO Topic profiles configuration - LIHACHTETAN/ClassicUO-Bad-Newbie-CSharp-Scripts-IDE GitHub Wiki
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
Home · C# · IDE · UO API · A–Z · Beispiele · Sprachen
Profile, Speichereinstellungen, globale Werte und Hotkeys. Der globale Laufzeitwert und die lokale Prozedurvariable haben unterschiedliche Lebensdauern.
| Thema | Befehle und Erklärungen |
|---|---|
| GetProfile | UO.GetProfile |
| ProfileName | UO.ProfileName |
| ProfileShardName | UO.ProfileShardName |
| ChangeProfile | UO.ChangeProfile |
| ExtChangeProfile | UO.ExtChangeProfile |
| ResetProfile | UO.ResetProfile |
| SaveConfig | UO.SaveConfig |
| Global Variables | UO.GetGlobal · UO.SetGlobal · UO.GListGet · UO.GListSet · UO.GListSize |
| EasyUO Variables | UO.GetEasyUO · UO.SetEasyUO |
| MUL Path | UO.SetMulPath |
UO.GetProfile · UO.ProfileName · UO.ProfileShardName · UO.ChangeProfile · UO.ExtChangeProfile · UO.ResetProfile · UO.SaveConfig · UO.ReqProfile · UO.ClientProfilePath · UO.ClientPath · UO.SetMulPath
UO.GetGlobal · UO.SetGlobal · UO.GetEasyUO · UO.SetEasyUO · UO.GListClear · UO.GListGet · UO.GListPosName · UO.GListPosValue · UO.GListSet · UO.GListSize
UO.LoadHotkeys · UO.SaveHotkeys · UO.Set · UO.SetDefault
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.
Parameter, Ergebnis und alle Szenarien
var text = UO.GetGlobal("manual.delay");
var delayMs = 350;
if (Truth(text != "N/A") && Truth(IsNumeric(text)))
{
var parsed = Val(text);
if (Truth(parsed >= 50) && Truth(parsed <= 5000))
{
delayMs = checked((int)parsed);
}
}
await Delay(delayMs);
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
bool IsNumeric(object? value) => double.TryParse(Convert.ToString(value), System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture, out _);
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
double Val(object? value) => double.TryParse(Convert.ToString(value), System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture, out var number) ? number : 0;Parameter, Ergebnis und alle Szenarien
UO.SetGlobal("manual.delay", 350);
UO.SetGlobal("manual.delay", 600);
var text = UO.GetGlobal("manual.delay");
if (Truth(IsNumeric(text)))
{
await Delay(Val(text));
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
bool IsNumeric(object? value) => double.TryParse(Convert.ToString(value), System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture, out _);
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
double Val(object? value) => double.TryParse(Convert.ToString(value), System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture, out var number) ? number : 0;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.ChangeProfile(object? name);Ändert das ausgewählte Profil für die nächste Self-Client-Verbindung, wenn die Sitzung getrennt wird.
-
name– Gespeicherter Profil-/Charaktername, aufgelöst durch TryResolveProfileCharacter für den ausgewählten Shard. Ein leerer/unbekannter Name ergibt -4.
int: 0 – Auswahl ist vorbereitet; -2 — Managersitzung oder Verbindung/Spielwelt ist aktiv; -3 – mehr als ein Skript wird ausgeführt; -4 – Profilname/Shard ist nicht zulässig.
- ChangeProfile übergibt leeres Shard/Zeichen; ExtChangeProfile erlaubt explizite Shards und Zeichen. In der Manager-Sitzung müssen Sie eine andere Sitzung im ClassicUO Manager auswählen – die laufende Sitzung speichert ihr Profil.
- Bei Erfolg wird das aktuelle Profil gespeichert und entladen, LastServerName geändert, die Einstellungen gespeichert und das nächste Zeichen zugewiesen. Die Verbindung selbst startet nicht; Connect wird dafür separat aufgerufen.
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.
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.ChangeProfile("ExampleProfile");
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Parameter und Ablauf:
- Verwenden Sie den tatsächlich gespeicherten Profilnamen. Ein negativer Code beschreibt einen Fehler.
var status = UO.ChangeProfile("ExampleProfile");
UO.Print(Convert.ToString(status));Parameter und Ablauf:
- Ein deaktivierter eigenständiger Client ohne andere Verletzung gibt -4 für einen leeren Namen zurück.
return RunScenario();
object? RunScenario()
{
var status = UO.ChangeProfile("");
UO.Print(Convert.ToString(status));
return null;
}Parameter und Ablauf:
- Connect wird erst nach dem Code 0 aufgerufen; Die Serverantwort wurde noch nicht bestätigt.
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 status = UO.ChangeProfile("ExampleProfile");
if (Truth(status == 0))
{
UO.Connect();
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.
Parameter: name (Any)
Ergebnis: dynamic / Any.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.ChangeProfileSelection:bridge.ChangeProfileSelection(Text(0), string.Empty, string.Empty). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(0).
Interner Implementierungscode; kein eigenständiges Skript.
case "changeprofile":
return new InjectionValue(bridge.ChangeProfileSelection(Text(0), string.Empty, string.Empty));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
string UO.ClientPath();Gibt das Installations-/ausführbare Verzeichnis des Clients zurück.
Es gibt keine Parameter.
string – Pfad zum Verzeichnis. Es ist nicht bool, kein Array und nicht ID. Ein leerer Pfad bedeutet, dass der Wert nicht verfügbar ist; Verwenden Sie es nicht als Ihren aktuellen Standardarbeitsordner.
- Lesen Sie CUOEnviroment.ExecutablePath. Dabei handelt es sich nicht um eine Fahrtroute, eine Liste von Wegpunkten, einen Skriptordner oder einen Pfad zu Spieldaten.
- Der Befehl liest nur den Pfad, öffnet, erstellt oder speichert nichts. Das nachgestellte Trennzeichen sollte nicht angenommen werden; Das Hilfsbeispiel fügt es bei Bedarf hinzu.
- Der Name ist der Spiel-/Clientname API und wird mit UO geschrieben. ClientPath gibt das Client-Verzeichnis zurück, ClientProfilePath gibt das aktive Profilverzeichnis zurück.
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.
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.ClientPath();
UO.Print("ClientPath: " + Convert.ToString(result));Parameter und Ablauf:
- Es gibt keine Argumente. Ordner - Zeichenfolge; ein leerer Wert wird separat verarbeitet.
var folder = UO.ClientPath();
if (Truth(folder == ""))
{
UO.Print("Folder is not available");
return null;
}
UO.Print(folder);
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Parameter und Ablauf:
- Diese Ordner haben unterschiedliche Zwecke. Das Skript gibt beide Zeilen aus, ohne die Konfiguration oder das Profil zu ändern.
return RunScenario();
object? RunScenario()
{
var client = UO.ClientPath();
var profile = UO.ClientProfilePath();
UO.Print("Client: " + client);
if (Truth(profile == ""))
{
UO.Print("No current profile");
}
else
{
UO.Print("Profile: " + profile);
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Parameter und Ablauf:
- ChildPath wird vollständig angezeigt: Ordner ist das resultierende Verzeichnis, Blatt ist der Dateiname. Dies ist eine Zeichenfolgenverkettung für einen bestimmten Namen, kein universeller Pfadnormalisierer.
- Die Datei wird nicht erstellt oder gelesen; Zuerst können Sie die resultierende Zeichenfolge überprüfen.
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 folder = UO.ClientPath();
var filePath = ChildPath(folder, "sample.json");
if (Truth(filePath != ""))
{
UO.Print("Example path: " + filePath);
}
return null;
}
dynamic ChildPath(dynamic folder, dynamic leaf)
{
if (Truth(folder == ""))
{
return "";
}
var last = Right(folder, 1);
if (Truth(last == "/") || Truth(last == "\\"))
{
return folder + leaf;
}
return folder + "/" + leaf;
}
string Right(object? value, int count)
{
string text = Convert.ToString(value) ?? "";
return text[Math.Max(0, text.Length - count)..];
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.
Parameter: Keine Parameter.
Ergebnis: string / String.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.ClientPath:bridge.ClientPath.
Interner Implementierungscode; kein eigenständiges Skript.
case "clientpath": return new InjectionValue(bridge.ClientPath);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
string UO.ClientProfilePath();Gibt das aktuelle Clientprofilverzeichnis zurück.
Es gibt keine Parameter.
string – Pfad zum Verzeichnis. Es ist nicht bool, kein Array und nicht ID. Ein leerer Pfad bedeutet, dass der Wert nicht verfügbar ist; Verwenden Sie es nicht als Ihren aktuellen Standardarbeitsordner.
- Lesen Sie ProfileManager.ProfilePath; Wenn das Profil noch nicht ausgewählt wurde, wird ein leerer String zurückgegeben. Der Anruf selbst erstellt kein Profil und überträgt keine Einstellungen.
- Der Befehl liest nur den Pfad, öffnet, erstellt oder speichert nichts. Das nachgestellte Trennzeichen sollte nicht angenommen werden; Das Hilfsbeispiel fügt es bei Bedarf hinzu.
- Der Name ist der Spiel-/Clientname API und wird mit UO geschrieben. ClientPath gibt das Client-Verzeichnis zurück, ClientProfilePath gibt das aktive Profilverzeichnis zurück.
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.
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.ClientProfilePath();
UO.Print("ClientProfilePath: " + Convert.ToString(result));Parameter und Ablauf:
- Es gibt keine Argumente. Ordner - Zeichenfolge; ein leerer Wert wird separat verarbeitet.
var folder = UO.ClientProfilePath();
if (Truth(folder == ""))
{
UO.Print("Folder is not available");
return null;
}
UO.Print(folder);
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Parameter und Ablauf:
- Diese Ordner haben unterschiedliche Zwecke. Das Skript gibt beide Zeilen aus, ohne die Konfiguration oder das Profil zu ändern.
return RunScenario();
object? RunScenario()
{
var client = UO.ClientPath();
var profile = UO.ClientProfilePath();
UO.Print("Client: " + client);
if (Truth(profile == ""))
{
UO.Print("No current profile");
}
else
{
UO.Print("Profile: " + profile);
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Parameter und Ablauf:
- ChildPath wird vollständig angezeigt: Ordner ist das resultierende Verzeichnis, Blatt ist der Dateiname. Dies ist eine Zeichenfolgenverkettung für einen bestimmten Namen, kein universeller Pfadnormalisierer.
- Die Datei wird nicht erstellt oder gelesen; Zuerst können Sie die resultierende Zeichenfolge überprüfen.
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 folder = UO.ClientProfilePath();
var filePath = ChildPath(folder, "sample.json");
if (Truth(filePath != ""))
{
UO.Print("Example path: " + filePath);
}
return null;
}
dynamic ChildPath(dynamic folder, dynamic leaf)
{
if (Truth(folder == ""))
{
return "";
}
var last = Right(folder, 1);
if (Truth(last == "/") || Truth(last == "\\"))
{
return folder + leaf;
}
return folder + "/" + leaf;
}
string Right(object? value, int count)
{
string text = Convert.ToString(value) ?? "";
return text[Math.Max(0, text.Length - count)..];
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.
Parameter: Keine Parameter.
Ergebnis: string / String.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.CurrentProfilePath:bridge.CurrentProfilePath.
Interner Implementierungscode; kein eigenständiges Skript.
case "shardpath":
case "clientprofilepath": return new InjectionValue(bridge.CurrentProfilePath);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.ExtChangeProfile(object? profileName);
dynamic UO.ExtChangeProfile(object? profileName, object? shardName);
dynamic UO.ExtChangeProfile(object? profileName, object? shardName, object? charName);Ändert das ausgewählte Profil für die nächste Self-Client-Verbindung, wenn die Sitzung getrennt wird.
-
profileName– Gespeicherter Profil-/Charaktername, aufgelöst durch TryResolveProfileCharacter für den ausgewählten Shard. Ein leerer/unbekannter Name ergibt -4. -
shardName– Optionaler Shard-Name. Ein leerer Wert verwendet CurrentProfile.ServerName, World.ServerName oder LastServerName. -
charName– Optionaler Charaktername. Ein leerer Wert verwendet den gespeicherten Profilnamen.
int: 0 – Auswahl ist vorbereitet; -2 — Managersitzung oder Verbindung/Spielwelt ist aktiv; -3 – mehr als ein Skript wird ausgeführt; -4 – Profilname/Shard ist nicht zulässig.
- ChangeProfile übergibt leeres Shard/Zeichen; ExtChangeProfile erlaubt explizite Shards und Zeichen. In der Manager-Sitzung müssen Sie eine andere Sitzung im ClassicUO Manager auswählen – die laufende Sitzung speichert ihr Profil.
- Bei Erfolg wird das aktuelle Profil gespeichert und entladen, LastServerName geändert, die Einstellungen gespeichert und das nächste Zeichen zugewiesen. Die Verbindung selbst startet nicht; Connect wird dafür separat aufgerufen.
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.
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.ExtChangeProfile("ExampleProfile");
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Parameter und Ablauf:
- Verwenden Sie den tatsächlich gespeicherten Profilnamen. Ein negativer Code beschreibt einen Fehler.
var status = UO.ExtChangeProfile("ExampleProfile");
UO.Print(Convert.ToString(status));Parameter und Ablauf:
- Ein deaktivierter eigenständiger Client ohne andere Verletzung gibt -4 für einen leeren Namen zurück.
return RunScenario();
object? RunScenario()
{
var status = UO.ExtChangeProfile("");
UO.Print(Convert.ToString(status));
return null;
}Parameter und Ablauf:
- Connect wird erst nach dem Code 0 aufgerufen; Die Serverantwort wurde noch nicht bestätigt.
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 status = UO.ExtChangeProfile("ExampleProfile");
if (Truth(status == 0))
{
UO.Connect();
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.
Parameter: profileName (Any)
Ergebnis: dynamic / Any.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(0). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.ChangeProfileSelection:bridge.ChangeProfileSelection(requestedProfile, requestedShard, requestedCharacter).
Interner Implementierungscode; kein eigenständiges Skript.
case "extchangeprofile":
{
string requestedProfile = Text(0);
string requestedShard = arguments.Length > 1 ? Text(1) : string.Empty;
string requestedCharacter = arguments.Length > 2 ? Text(2) : string.Empty;
return new InjectionValue(bridge.ChangeProfileSelection(requestedProfile, requestedShard, requestedCharacter));
}Parameter: profileName (Any), shardName (Any)
Ergebnis: dynamic / Any.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(0). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.ChangeProfileSelection:bridge.ChangeProfileSelection(requestedProfile, requestedShard, requestedCharacter).
Interner Implementierungscode; kein eigenständiges Skript.
case "extchangeprofile":
{
string requestedProfile = Text(0);
string requestedShard = arguments.Length > 1 ? Text(1) : string.Empty;
string requestedCharacter = arguments.Length > 2 ? Text(2) : string.Empty;
return new InjectionValue(bridge.ChangeProfileSelection(requestedProfile, requestedShard, requestedCharacter));
}Parameter: profileName (Any), shardName (Any), charName (Any)
Ergebnis: dynamic / Any.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(0). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.ChangeProfileSelection:bridge.ChangeProfileSelection(requestedProfile, requestedShard, requestedCharacter).
Interner Implementierungscode; kein eigenständiges Skript.
case "extchangeprofile":
{
string requestedProfile = Text(0);
string requestedShard = arguments.Length > 1 ? Text(1) : string.Empty;
string requestedCharacter = arguments.Length > 2 ? Text(2) : string.Empty;
return new InjectionValue(bridge.ChangeProfileSelection(requestedProfile, requestedShard, requestedCharacter));
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.GListClear();Löscht die gesamte temporäre Liste vor einer neuen Reihe von Aktionen.
Es gibt keine Parameter.
void - kein Ergebnis. Nach dem Löschen gibt GListSize() 0 zurück.
- Die Liste gehört zur Laufzeitinstanz. Andere Skriptausführungen haben ihre eigenen Listen. GList ist kein gemeinsam genutzter profilübergreifender Speicher. Diese Befehle schreiben keine Datei und geben keinen gespeicherten Profilstatus ein. Die neue Laufzeit erhält eine leere Liste. Es ist auch keine var/Variablendeklaration und nicht UO.SetGlobal.
- Der neue Name wird am Ende hinzugefügt. Durch die Wiederholung eines Namens, bei dem die Groß-/Kleinschreibung nicht beachtet wird, werden Bedeutung und Schreibweise des Namens an der ursprünglichen Stelle ersetzt. Beim Lesen wird nichts gelöscht. Wenn Sie stabile Indizes benötigen, können Sie während einer Suche keine Datensätze löschen oder hinzufügen.
- Die Vorgänge sind lokal: keine Pakete, keine Objektsuche, keine Latenz. Set/Get sucht nacheinander nach dem Namen; Für größere Mengen verwenden Sie Dictionary. Es gibt keinen separaten Befehl zum Löschen eines Schlüssels in dieser Familie; Clear löscht alle Einträge.
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.
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.GListClear");
UO.GListClear();Parameter und Ablauf:
- Clear entfernt beide Regeln, Size bestätigt Leere. Die Gegenstände des Charakters bleiben an Ort und Stelle.
UO.GListClear();
UO.GListSet("bandage", 0x0E21);
UO.GListSet("gold", 0x0EED);
UO.GListClear();
if (Truth(UO.GListSize() == 0))
{
UO.Print("Batch rules cleared");
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Parameter und Ablauf:
- Alte Regeln werden entfernt, bevor Erz hinzugefügt wird; Die Suche zeigt nur die neue Regel mit graphic 0x19B9.
return RunScenario();
object? RunScenario()
{
UO.GListClear();
UO.GListSet("bandage", 0x0E21);
UO.GListSet("gold", 0x0EED);
UO.GListClear();
UO.GListSet("ore", 0x19B9);
var i = 0;
while (Truth(i < UO.GListSize()))
{
var name = UO.GListPosName(i);
var graphic = UO.GListPosValue(i);
UO.Print(name + " | graphic: " + Convert.ToString(graphic));
i = i + 1;
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Parameter und Ablauf:
- Eine zuvor eingelesene Rufnummer bleibt auch nach dem Löschen der Liste verfügbar. Die Liste enthält bereits 0 Einträge.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
UO.GListClear();
UO.GListSet("bandage", 0x0E21);
UO.GListSet("gold", 0x0EED);
var retained = UO.GListGet("bandage");
UO.GListClear();
UO.Print("Retained graphic: " + Convert.ToString(retained));
UO.Print("Remaining entries: " + Convert.ToString(UO.GListSize()));
return null;
}
}C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.
Parameter: Keine Parameter.
Ergebnis: void / Unit.
Beim Aufruf:
Interner Implementierungscode; kein eigenständiges Skript.
public void GListClear() => globalList.Clear();Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.GListGet(object? nameValue);Liest einen Wert aus einer temporären Liste nach Regel- oder Zählernamen.
-
nameValue— object? wird in einen String umgewandelt. Namen werden ohne Berücksichtigung der Groß- und Kleinschreibung verglichen: „bandage“ und „BANDAGE“ sind ein Schlüssel. Es wird empfohlen, einen nicht leeren Zeichenfolgennamen zu verwenden. ein leerer Name ist ebenfalls akzeptabel.
object? — gespeicherter Wert mit demselben Typ. Wenn kein Schlüssel vorhanden ist, int 0. Das erhaltene 0 ist vom fehlenden GListGet nicht zu unterscheiden; Überprüfen Sie die Namen.
- Die Liste gehört zur Laufzeitinstanz. Andere Skriptausführungen haben ihre eigenen Listen. GList ist kein gemeinsam genutzter profilübergreifender Speicher. Diese Befehle schreiben keine Datei und geben keinen gespeicherten Profilstatus ein. Die neue Laufzeit erhält eine leere Liste. Es ist auch keine var/Variablendeklaration und nicht UO.SetGlobal.
- Der neue Name wird am Ende hinzugefügt. Durch die Wiederholung eines Namens, bei dem die Groß-/Kleinschreibung nicht beachtet wird, werden Bedeutung und Schreibweise des Namens an der ursprünglichen Stelle ersetzt. Beim Lesen wird nichts gelöscht. Wenn Sie stabile Indizes benötigen, können Sie während einer Suche keine Datensätze löschen oder hinzufügen.
- Die Vorgänge sind lokal: keine Pakete, keine Objektsuche, keine Latenz. Set/Get sucht nacheinander nach dem Namen; Für größere Mengen verwenden Sie Dictionary. Es gibt keinen separaten Befehl zum Löschen eines Schlüssels in dieser Familie; Clear löscht alle Einträge.
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.
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.
UO.GListSet("simple_value", 42);
object? result = UO.GListGet("simple_value");
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Parameter und Ablauf:
- BANDAGE findet den Verbandsschlüssel. 0x0E21 – graphic Verband, nicht sein einzigartiger serial.
UO.GListClear();
UO.GListSet("bandage", 0x0E21);
UO.GListSet("gold", 0x0EED);
var graphic = UO.GListGet("BANDAGE");
if (Truth(graphic == 0x0E21))
{
UO.Print("Bandage rule selected");
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Parameter und Ablauf:
- Die vollständige Funktion HasEntry iteriert durch Namen; also ist 0 in verarbeitet etwas anderes als fehlend. Für eigene Schlüssel werden hier ASCII-Namen verwendet.
return RunScenario();
object? RunScenario()
{
UO.GListClear();
UO.GListSet("processed", 0);
if (Truth(HasEntry("processed")))
{
var count = UO.GListGet("processed");
UO.Print("Recorded count: " + Convert.ToString(count));
}
if (!(Truth(HasEntry("missing"))))
{
UO.Print("No entry named missing");
}
return null;
}
dynamic HasEntry(dynamic name)
{
var i = 0;
while (Truth(i < UO.GListSize()))
{
if (Truth(Convert.ToString(UO.GListPosName(i)) == Convert.ToString(name)))
{
return true;
}
i = i + 1;
}
return false;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Parameter und Ablauf:
- Verzögerung – Anzahl der Millisekunden; UO.Wait wird nur für einen Wert im Bereich 50–5000 aufgerufen. Das Beispiel wartet 350 ms.
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.GListClear();
UO.GListSet("delay", 350);
var delayMs = UO.GListGet("delay");
if (Truth(delayMs >= 50) && Truth(delayMs <= 5000))
{
await Delay(delayMs);
}
else
{
UO.Print("Delay outside the accepted range");
}
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;
}C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.
Parameter: nameValue (Any)
Ergebnis: dynamic / Any.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.GListGet. -
InjectionScript.Runtime.InjectionValue.ToString:nameValue.ToString().
Interner Implementierungscode; kein eigenständiges Skript.
public InjectionValue GListGet(InjectionValue nameValue)
{
string name = nameValue.ToString();
int index = globalList.FindIndex(pair => pair.Key.Equals(name, StringComparison.OrdinalIgnoreCase));
return index >= 0 ? globalList[index].Value : InjectionValue.Zero;
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
string UO.GListPosName(object? index);Liest den Datensatznamen anhand seiner Position, um die Regeln aufzuzählen.
-
index- int: Index von 0 bis GListSize()-1 einschließlich. Es handelt sich nicht um serial, graphic oder die Anzahl der Einheiten im Stapel.
string ist der Name in der zuletzt aufgezeichneten Form des Registers. Ungültiger Index gibt „“ zurück; ein leerer Schlüssel gibt auch „“ zurück.
- Die Liste gehört zur Laufzeitinstanz. Andere Skriptausführungen haben ihre eigenen Listen. GList ist kein gemeinsam genutzter profilübergreifender Speicher. Diese Befehle schreiben keine Datei und geben keinen gespeicherten Profilstatus ein. Die neue Laufzeit erhält eine leere Liste. Es ist auch keine var/Variablendeklaration und nicht UO.SetGlobal.
- Der neue Name wird am Ende hinzugefügt. Durch die Wiederholung eines Namens, bei dem die Groß-/Kleinschreibung nicht beachtet wird, werden Bedeutung und Schreibweise des Namens an der ursprünglichen Stelle ersetzt. Beim Lesen wird nichts gelöscht. Wenn Sie stabile Indizes benötigen, können Sie während einer Suche keine Datensätze löschen oder hinzufügen.
- Die Vorgänge sind lokal: keine Pakete, keine Objektsuche, keine Latenz. Set/Get sucht nacheinander nach dem Namen; Für größere Mengen verwenden Sie Dictionary. Es gibt keinen separaten Befehl zum Löschen eines Schlüssels in dieser Familie; Clear löscht alle Einträge.
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.
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.
UO.GListClear();
UO.GListSet("simple_value", 42);
var result = UO.GListPosName(0);
UO.Print("GListPosName: " + Convert.ToString(result));Parameter und Ablauf:
- Der Index 0 bedeutet die erste Regel. Vor dem Lesen wird überprüft, ob die Liste nicht leer ist.
UO.GListClear();
UO.GListSet("bandage", 0x0E21);
UO.GListSet("gold", 0x0EED);
if (Truth(UO.GListSize() > 0))
{
var first = UO.GListPosName(0);
UO.Print("First rule: " + first);
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Parameter und Ablauf:
- HasEntry gibt „true“ für einen geschriebenen Nullzähler und „false“ für einen fehlenden Namen zurück.
return RunScenario();
object? RunScenario()
{
UO.GListClear();
UO.GListSet("processed", 0);
if (Truth(HasEntry("processed")))
{
var count = UO.GListGet("processed");
UO.Print("Recorded count: " + Convert.ToString(count));
}
if (!(Truth(HasEntry("missing"))))
{
UO.Print("No entry named missing");
}
return null;
}
dynamic HasEntry(dynamic name)
{
var i = 0;
while (Truth(i < UO.GListSize()))
{
if (Truth(Convert.ToString(UO.GListPosName(i)) == Convert.ToString(name)))
{
return true;
}
i = i + 1;
}
return false;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Parameter und Ablauf:
- Durch Wiederholen von BANDAGE ändert sich die Schreibweise des Namens an der ersten Position; Gold bleibt Zweiter.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
UO.GListClear();
UO.GListSet("bandage", 0x0E21);
UO.GListSet("gold", 0x0EED);
UO.GListSet("BANDAGE", 0x0E21);
var i = 0;
while (Truth(i < UO.GListSize()))
{
var name = UO.GListPosName(i);
var graphic = UO.GListPosValue(i);
UO.Print(name + " | graphic: " + Convert.ToString(graphic));
i = i + 1;
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.
Parameter: index (Integer)
Ergebnis: string / String.
Beim Aufruf:
Interner Implementierungscode; kein eigenständiges Skript.
public string GListPosName(int index) => index >= 0 && index < globalList.Count ? globalList[index].Key : string.Empty;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.GListPosValue(object? index);Liest den Wert eines Eintrags nach Position, z. B. graphic, aus einer vorab ausgefüllten Liste.
-
index- int: Index von 0 bis GListSize()-1 einschließlich. Es handelt sich nicht um serial, graphic oder die Anzahl der Einheiten im Stapel.
object? — Wert mit erhaltenem Typ; Ungültiger Index gibt int 0 zurück. Überprüfen Sie die Grenzen, da echtes 0 akzeptabel ist.
- Die Liste gehört zur Laufzeitinstanz. Andere Skriptausführungen haben ihre eigenen Listen. GList ist kein gemeinsam genutzter profilübergreifender Speicher. Diese Befehle schreiben keine Datei und geben keinen gespeicherten Profilstatus ein. Die neue Laufzeit erhält eine leere Liste. Es ist auch keine var/Variablendeklaration und nicht UO.SetGlobal.
- Der neue Name wird am Ende hinzugefügt. Durch die Wiederholung eines Namens, bei dem die Groß-/Kleinschreibung nicht beachtet wird, werden Bedeutung und Schreibweise des Namens an der ursprünglichen Stelle ersetzt. Beim Lesen wird nichts gelöscht. Wenn Sie stabile Indizes benötigen, können Sie während einer Suche keine Datensätze löschen oder hinzufügen.
- Die Vorgänge sind lokal: keine Pakete, keine Objektsuche, keine Latenz. Set/Get sucht nacheinander nach dem Namen; Für größere Mengen verwenden Sie Dictionary. Es gibt keinen separaten Befehl zum Löschen eines Schlüssels in dieser Familie; Clear löscht alle Einträge.
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.
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.
UO.GListClear();
UO.GListSet("simple_value", 42);
object? result = UO.GListPosValue(0);
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Parameter und Ablauf:
- Der Index 1 wählt das zweite Regelgold aus. Vor dem Lesen des Werts erfolgt die Prüfung der Grenzen.
UO.GListClear();
UO.GListSet("bandage", 0x0E21);
UO.GListSet("gold", 0x0EED);
var index = 1;
if (Truth(index >= 0) && Truth(index < UO.GListSize()))
{
var graphic = UO.GListPosValue(index);
UO.Print("Second rule graphic: " + Convert.ToString(graphic));
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Parameter und Ablauf:
- Brute Force sucht in den Regeln nach dem graphic-Verband, nicht nach dem Gegenstand in der Welt; Es werden keine Spielanfragen gesendet.
return RunScenario();
object? RunScenario()
{
UO.GListClear();
UO.GListSet("bandage", 0x0E21);
UO.GListSet("gold", 0x0EED);
var total = UO.GListSize();
var i = 0;
while (Truth(i < total))
{
var graphic = UO.GListPosValue(i);
if (Truth(graphic == 0x0E21))
{
UO.Print("Bandage rule at index " + Convert.ToString(i));
}
i = i + 1;
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Parameter und Ablauf:
- Der Index 0 existiert, daher ist der Wert 0 ein gültiger Zähler; Die Überprüfung des Werts auf Nicht-Null wäre hier ein Fehler.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
UO.GListClear();
UO.GListSet("processed", 0);
var index = 0;
if (Truth(index < UO.GListSize()))
{
var count = UO.GListPosValue(index);
UO.Print("Valid zero count: " + Convert.ToString(count));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.
Parameter: index (Integer)
Ergebnis: dynamic / Any.
Beim Aufruf:
Interner Implementierungscode; kein eigenständiges Skript.
public InjectionValue GListPosValue(int index) => index >= 0 && index < globalList.Count ? globalList[index].Value : InjectionValue.Zero;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.GListSet(object? nameValue, object? value);Schreibt einen benannten Wert in eine temporäre Liste: zum Beispiel graphic Beuteregeln oder Zähler für verarbeitete Gegenstände.
-
nameValue— object? wird in einen String umgewandelt. Namen werden ohne Berücksichtigung der Groß- und Kleinschreibung verglichen: „bandage“ und „BANDAGE“ sind ein Schlüssel. Es wird empfohlen, einen nicht leeren Zeichenfolgennamen zu verwenden. ein leerer Name ist ebenfalls akzeptabel.
void – kein Ergebnis; ein separater Befehl, ohne Zuweisung.
- Die Liste gehört zur Laufzeitinstanz. Andere Skriptausführungen haben ihre eigenen Listen. GList ist kein gemeinsam genutzter profilübergreifender Speicher. Diese Befehle schreiben keine Datei und geben keinen gespeicherten Profilstatus ein. Die neue Laufzeit erhält eine leere Liste. Es ist auch keine var/Variablendeklaration und nicht UO.SetGlobal.
- Der neue Name wird am Ende hinzugefügt. Durch die Wiederholung eines Namens, bei dem die Groß-/Kleinschreibung nicht beachtet wird, werden Bedeutung und Schreibweise des Namens an der ursprünglichen Stelle ersetzt. Beim Lesen wird nichts gelöscht. Wenn Sie stabile Indizes benötigen, können Sie während einer Suche keine Datensätze löschen oder hinzufügen.
- Die Vorgänge sind lokal: keine Pakete, keine Objektsuche, keine Latenz. Set/Get sucht nacheinander nach dem Namen; Für größere Mengen verwenden Sie Dictionary. Es gibt keinen separaten Befehl zum Löschen eines Schlüssels in dieser Familie; Clear löscht alle Einträge.
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.
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.GListSet");
UO.GListSet("gold", 0x0EED);Parameter und Ablauf:
- Verband und Gold sind die Namen der Regeln, die Zahlen sind graphic. BANDAGE ersetzt den ersten Eintrag, erstellt keinen dritten; Die Ausgabe zeigt die Reihenfolge.
UO.GListClear();
UO.GListSet("bandage", 0x0E21);
UO.GListSet("gold", 0x0EED);
UO.GListSet("BANDAGE", 0x0E21);
var i = 0;
while (Truth(i < UO.GListSize()))
{
var name = UO.GListPosName(i);
var graphic = UO.GListPosValue(i);
UO.Print(name + " | graphic: " + Convert.ToString(graphic));
i = i + 1;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Parameter und Ablauf:
- Die Verarbeitung beginnt mit 0. Drei Schritte erhöhen den gespeicherten Zähler auf 3; Spielgegenstände bewegen sich hier nicht.
return RunScenario();
object? RunScenario()
{
UO.GListClear();
UO.GListSet("processed", 0);
for (int i = (int)(1); i <= 3; i += (int)(1))
{
UO.GListSet("processed", UO.GListGet("processed") + 1);
}
UO.Print("Recorded count: " + Convert.ToString(UO.GListGet("processed")));
return null;
}Parameter und Ablauf:
- Modus – Zeichenfolge, Grenzwert – Zahl 2. Der Modus wählt den Zweig aus, die Nummer begrenzt die Verarbeitung auf zwei Schritte.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
UO.GListClear();
UO.GListSet("mode", "inspect");
UO.GListSet("limit", 2);
if (Truth(UO.GListGet("mode") == "inspect"))
{
for (int i = (int)(1); i <= UO.GListGet("limit"); i += (int)(1))
{
UO.Print("Inspect batch: " + Convert.ToString(i));
}
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.
Parameter: nameValue (Any), value (Any)
Ergebnis: void / Unit.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.GListSet. -
InjectionScript.Runtime.InjectionValue.ToString:nameValue.ToString().
Interner Implementierungscode; kein eigenständiges Skript.
public void GListSet(InjectionValue nameValue, InjectionValue value)
{
string name = nameValue.ToString();
int index = globalList.FindIndex(pair => pair.Key.Equals(name, StringComparison.OrdinalIgnoreCase));
var entry = new KeyValuePair<string, InjectionValue>(name, value);
if (index >= 0)
globalList[index] = entry;
else
globalList.Add(entry);
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.GListSize();Zählt benannte Einträge in einer temporären Liste, um zu prüfen, ob sie leer sind oder Brute-Force einzuschränken.
Es gibt keine Parameter.
int >= 0 – die Anzahl der eindeutigen Namen, nicht die Anzahl der Elemente oder Einheiten in den Stapeln.
- Die Liste gehört zur Laufzeitinstanz. Andere Skriptausführungen haben ihre eigenen Listen. GList ist kein gemeinsam genutzter profilübergreifender Speicher. Diese Befehle schreiben keine Datei und geben keinen gespeicherten Profilstatus ein. Die neue Laufzeit erhält eine leere Liste. Es ist auch keine var/Variablendeklaration und nicht UO.SetGlobal.
- Der neue Name wird am Ende hinzugefügt. Durch die Wiederholung eines Namens, bei dem die Groß-/Kleinschreibung nicht beachtet wird, werden Bedeutung und Schreibweise des Namens an der ursprünglichen Stelle ersetzt. Beim Lesen wird nichts gelöscht. Wenn Sie stabile Indizes benötigen, können Sie während einer Suche keine Datensätze löschen oder hinzufügen.
- Die Vorgänge sind lokal: keine Pakete, keine Objektsuche, keine Latenz. Set/Get sucht nacheinander nach dem Namen; Für größere Mengen verwenden Sie Dictionary. Es gibt keinen separaten Befehl zum Löschen eines Schlüssels in dieser Familie; Clear löscht alle Einträge.
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.
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.GListSize();
UO.Print("GListSize: " + Convert.ToString(result));Parameter und Ablauf:
- Ein leerer Satz stoppt die Prozedur, bevor die Regeln verarbeitet werden.
UO.GListClear();
if (Truth(UO.GListSize() == 0))
{
UO.Print("No batch rules; stop here");
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Parameter und Ablauf:
- Die beiden Regeln werden über die Indizes 0 und 1 iteriert; Die Bedingung i < Size erlaubt keinen Zugriff auf den Index 2.
return RunScenario();
object? RunScenario()
{
UO.GListClear();
UO.GListSet("bandage", 0x0E21);
UO.GListSet("gold", 0x0EED);
var i = 0;
while (Truth(i < UO.GListSize()))
{
var name = UO.GListPosName(i);
var graphic = UO.GListPosValue(i);
UO.Print(name + " | graphic: " + Convert.ToString(graphic));
i = i + 1;
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Parameter und Ablauf:
- Durch die Ersetzung BANDAGE wird die Anzahl der Namen nicht erhöht; vor und nach der Größe ist 2.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
UO.GListClear();
UO.GListSet("bandage", 0x0E21);
UO.GListSet("gold", 0x0EED);
var before = UO.GListSize();
UO.GListSet("BANDAGE", 0x0E21);
if (Truth(UO.GListSize() == before))
{
UO.Print("Existing rule updated without an extra entry");
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.
Parameter: Keine Parameter.
Ergebnis: int / Integer.
Beim Aufruf:
Interner Implementierungscode; kein eigenständiges Skript.
public int GListSize() => globalList.Count;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
string UO.GetEasyUO(object? number);Liest eine Zeichenfolge aus der Windows-Registrierung des Benutzers EasyUO.
-
numberist der int/Wert, der von NumberConversions.ToInt konvertiert werden soll. Bildet den Dezimalnamen-Registrierungswert.
string – Wert HKCU\Software\EasyUO<Nummer>; ist er nicht vorhanden, wird der Name * geprüft. Wenn der Schlüssel/Wert fehlt oder außerhalb von Windows liegt, wird eine leere Zeichenfolge zurückgegeben.
- Durch das Lesen wird weder ein Schlüssel erstellt noch auf die Spielwelt zugegriffen. Die Legacy-Registrierungsschnittstelle unterscheidet sich von GetGlobal. Fehler beim Zugriff auf die Systemregistrierung können sich ausbreiten; Es gibt keinen separaten Haken in der Brücke.
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.
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.GetEasyUO(1);
UO.Print("GetEasyUO: " + Convert.ToString(result));Parameter und Ablauf:
- Der Name wird zuerst 1 gelesen, dann *1.
var value = UO.GetEasyUO(1);
UO.Print(value);Parameter und Ablauf:
- Eine leere Zeichenfolge kann kein Wert oder gespeicherter leerer Text sein.
return RunScenario();
object? RunScenario()
{
var value = UO.GetEasyUO(999);
if (Truth(Len(value) == 0))
{
UO.Print("empty");
}
return null;
}
int Len(object? value) => Convert.ToString(value)?.Length ?? 0;
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Parameter und Ablauf:
- Die Zahl definiert den Registrierungswert, nicht den serial des Objekts.
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 number = 2;
var value = UO.GetEasyUO(number);
UO.Print(value);
return null;
}
}C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.
Parameter: number (Any)
Ergebnis: string / String.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.GetEasyUO. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetEasyUO:bridge.GetEasyUO(NumberConversions.ToInt(number)). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(number).
Interner Implementierungscode; kein eigenständiges Skript.
public string GetEasyUO(InjectionValue number) => bridge.GetEasyUO(NumberConversions.ToInt(number));string UO.GetGlobal(object? name);
dynamic UO.GetGlobal(object? globalRegion, object? varName);SetGlobal und GetGlobal teilen Werte zwischen allen Skripten, Profilen und Full-/Client-Prozessen. Werte sind Zeichenfolgen; fehlende Schlüssel ergeben "N/A". Groß-/Kleinschreibung zählt; region-Formen verwenden region/name. Manager/Game Manager/CSharp/globals.json bleibt nach Neustarts erhalten und wird mit Prozesssperre frisch gelesen. Shared-Formen verwenden denselben Speicher.
-
globalRegion— Namensraum zusammen mit dem Schlüsselnamen. -
name— Gemeinsamer Schlüsselname mit Groß-/Kleinschreibung. -
varName— Gemeinsamer Schlüsselname mit Groß-/Kleinschreibung.
Jeder Block ist eine vollständige .csx-Datei. Ersetzen Sie Beispiel-serials, Typen und Koordinaten. Parameterreihenfolge und benannte C#-Argumente folgen der Signatur.
#getglobal team.target
#get global team.message
Jeder Block ist eine vollständige .csx-Datei. Ersetzen Sie Beispiel-serials, Typen und Koordinaten. Parameterreihenfolge und benannte C#-Argumente folgen der Signatur.
string value = UO.GetGlobal("team.target");
UO.Print(value);string value = UO.GetGlobal("team.delay");
if (int.TryParse(value, out int milliseconds))
UO.Print(milliseconds.ToString());UO.Print(Convert.ToString(UO.GetGlobal("team", "delay")));new CommandSample().Execute(UO);
sealed class CommandSample
{
public void Execute(global::ClassicUO.CSharp.CSharpGameApi api)
{
string value = api.GetGlobal("team.target");
api.Print(value);
}
}CSharpGameApi.GetGlobal
-> CSharpScriptGlobals
-> InjectionScript.Runtime.InjectionApiUO.RegisterClientApiCompatibility
-> InjectionScript.Runtime.State.Globals.GetGlobal
Globals -> SharedGlobalStore -> named mutex -> atomic JSON replacement
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
string UO.GetProfile(object? serial);Liest die öffentliche Zeichenbeschreibung, die der Server für das Profilfenster sendet. Nützlich zum Lesen von Notizen oder zum Suchen nach Text in der Beschreibung des ausgewählten Charakters. Hierbei handelt es sich nicht um Managerprofileinstellungen.
-
serial– Zeichenserie: eine Zahl, eine Zeichenfolge mit ID 0x... oder ein Objektselektor wie „self“ oder „lasttarget“. Dies ist kein Körpertyp, kein Dateiname oder ein Managerprofil.
string – Text der Hauptbeschreibung, ohne Titel und Unterschrift. Eine leere Beschreibung ist zulässig; Ein leeres Ergebnis ist auch möglich, wenn innerhalb von 3 Sekunden keine Antwort erfolgt. Dies ist nicht true/false. Bei jedem Anruf wird eine Anfrage gesendet; Wenn die Beschreibung bereits in der Sitzung gespeichert ist, wird sie sofort zurückgegeben, einschließlich eines Entwurfs des geöffneten Fensters. Dies ist keine Garantie für eine neue Serverantwort.
- Die Beschreibung und ihr Entwurf gehören zur Sitzung. Wenn Sie das Spielfenster schließen, werden sie gespeichert, ohne sie zu veröffentlichen. Wenn Sie sie öffnen, wird das Profilfenster wiederhergestellt. Durch das explizite Schließen Ihres eigenen Profils wird der geänderte Text einmal gesendet. Der Text einer anderen Person wird nicht gesendet. Die neue Serverantwort ersetzt die alten Daten, durch Trennen der Verbindung werden diese gelöscht. GetProfile bearbeitet selbst nichts.
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.
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.GetProfile("self");
UO.Print("GetProfile: " + Convert.ToString(result));Parameter und Ablauf:
- „self“ – Beschreibung Ihres Charakters; keine Kontokonfiguration. Der vom Server empfangene oder bereits in der Sitzung gespeicherte Text wird angezeigt.
var note = UO.GetProfile("self");
if (Truth(note != ""))
{
UO.Print(note);
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Parameter und Ablauf:
- Erfordert vorhandenes lasttarget. FindText sucht im Freitext nach dem Wort „Healer“ (Groß-/Kleinschreibung beachten). Bei einer Übereinstimmung speichert AddObject das ausgewählte serial unter dem Namen healerNote. Dies ist eine Benutzernotiz, kein Berufsnachweis NPC.
return RunScenario();
object? RunScenario()
{
if (!(Truth(UO.Exists("lasttarget"))))
{
return null;
}
var note = UO.GetProfile("lasttarget");
if (Truth(FindText(note, "Healer") > 0))
{
UO.AddObject("healerNote", "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;
int FindText(object? text, object? value) => (Convert.ToString(text) ?? "").IndexOf(Convert.ToString(value) ?? "", StringComparison.Ordinal) + 1;
int FindText(int start, object? text, object? value)
{
string input = Convert.ToString(text) ?? "";
return input.IndexOf(Convert.ToString(value) ?? "", Math.Clamp(start - 1, 0, input.Length), StringComparison.Ordinal) + 1;
}Parameter und Ablauf:
- Die gesamte Funktion HasPublicNote ist unten angegeben. Überprüft die Existenz eines Objekts und eines Teilstrings und gibt true/false zurück. „Gilde“ – Demotext; Eine leere Antwort bestätigt nicht das Fehlen eines solchen Datensatzes auf dem Server.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
if (Truth(HasPublicNote("lasttarget", "Guild")))
{
UO.AddObject("guildNote", "lasttarget");
}
return null;
}
dynamic HasPublicNote(dynamic serial, dynamic phrase)
{
if (!(Truth(UO.Exists(serial))))
{
return false;
}
return FindText(UO.GetProfile(serial), phrase) > 0;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
int FindText(object? text, object? value) => (Convert.ToString(text) ?? "").IndexOf(Convert.ToString(value) ?? "", StringComparison.Ordinal) + 1;
int FindText(int start, object? text, object? value)
{
string input = Convert.ToString(text) ?? "";
return input.IndexOf(Convert.ToString(value) ?? "", Math.Clamp(start - 1, 0, input.Length), StringComparison.Ordinal) + 1;
}
}C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.
Parameter: serial (Any)
Ergebnis: string / String.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.GetProfile. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetProfile:bridge.GetProfile(GetObject(serial)). -
InjectionScript.Runtime.InjectionApiUO.GetObject:GetObject(serial).
Interner Implementierungscode; kein eigenständiges Skript.
public string GetProfile(InjectionValue serial) => bridge.GetProfile(GetObject(serial));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.LoadHotkeys();Lädt gespeicherte Makros und Hotkeys.
Es gibt keine Parameter.
void – kein Wert. Rufen Sie eine separate Leitung an; Der Abschluss bestätigt nicht die Aktion des Servers.
- LoadHotkeys ruft _world.Macros.Load über Invoke auf. Die aktuelle Makrotabelle wird durch lokale Profildaten ersetzt.
- Ändert oder zeigt nur die angegebenen lokalen Daten an. Für diesen Befehl gibt es keine Serverbestätigung.
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.
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.LoadHotkeys");
UO.LoadHotkeys();Parameter und Ablauf:
- Lädt gespeicherte Makros und Hotkeys.
UO.LoadHotkeys();Parameter und Ablauf:
- LoadHotkeys ruft _world.Macros.Load über Invoke auf. Die aktuelle Makrotabelle wird durch lokale Profildaten ersetzt.
return RunScenario();
object? RunScenario()
{
UO.Print(UO.ProfileName());
UO.LoadHotkeys();
return null;
}Parameter und Ablauf:
- Ändert oder zeigt nur die angegebenen lokalen Daten an. Für diesen Befehl gibt es keine Serverbestä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()
{
UO.LoadHotkeys();
UO.Print("Macros loaded");
return null;
}
}C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.
Parameter: Keine Parameter.
Ergebnis: void / Unit.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.LoadHotkeys:bridge.LoadHotkeys().
Interner Implementierungscode; kein eigenständiges Skript.
case "loadhotkeys": bridge.LoadHotkeys(); break;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.ProfileName();Liest den Namen des aktuellen Profils.
Es gibt keine Parameter.
string – Text des Bridge-Feldes.ProfileName; Ohne verfügbare Daten ist ein leerer String möglich. Dies ist kein Verbindungszeichen und kein numerisches ID.
- ExecuteClientApiCompatibility gibt Bridge.ProfileName zurück, ohne das Profil oder die Serverauswahl zu ändern.
- Liest den aktuellen lokalen Status. Es gibt kein Paket, Ziel oder automatische Aktualisierung; Einzelne Lesevorgänge können unterschiedliche Zustände aufweisen.
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.
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.ProfileName();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Parameter und Ablauf:
- Liest den Namen des aktuellen Profils.
var value = UO.ProfileName();
UO.Print(value);Parameter und Ablauf:
- ExecuteClientApiCompatibility gibt Bridge.ProfileName zurück, ohne das Profil oder die Serverauswahl zu ändern.
return RunScenario();
object? RunScenario()
{
var value = UO.ProfileName();
if (Truth(Len(value) > 0))
{
UO.TextPrint(value);
}
return null;
}
int Len(object? value) => Convert.ToString(value)?.Length ?? 0;
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Parameter und Ablauf:
- Liest den aktuellen lokalen Status. Es gibt kein Paket, Ziel oder automatische Aktualisierung; Einzelne Lesevorgänge können unterschiedliche Zustände aufweisen.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
var before = UO.ProfileName();
UO.Wait(500);
var after = UO.ProfileName();
UO.Print(before = after);
return null;
}
}C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.
Parameter: Keine Parameter.
Ergebnis: dynamic / Any.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.ProfileName:bridge.ProfileName.
Interner Implementierungscode; kein eigenständiges Skript.
case "profilename": return new InjectionValue(bridge.ProfileName);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.ProfileShardName();Liest den Shard-Namen.
Es gibt keine Parameter.
string – Text des Bridge-Feldes.ShardName; Ohne verfügbare Daten ist ein leerer String möglich. Dies ist kein Verbindungszeichen und kein numerisches ID.
- ExecuteClientApiCompatibility gibt Bridge.ShardName zurück, ohne das Profil oder die Serverauswahl zu ändern.
- Liest den aktuellen lokalen Status. Es gibt kein Paket, Ziel oder automatische Aktualisierung; Einzelne Lesevorgänge können unterschiedliche Zustände aufweisen.
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.
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.ProfileShardName();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Parameter und Ablauf:
- Liest den Shard-Namen.
var value = UO.ProfileShardName();
UO.Print(value);Parameter und Ablauf:
- ExecuteClientApiCompatibility gibt Bridge.ShardName zurück, ohne das Profil oder die Serverauswahl zu ändern.
return RunScenario();
object? RunScenario()
{
var value = UO.ProfileShardName();
if (Truth(Len(value) > 0))
{
UO.TextPrint(value);
}
return null;
}
int Len(object? value) => Convert.ToString(value)?.Length ?? 0;
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Parameter und Ablauf:
- Liest den aktuellen lokalen Status. Es gibt kein Paket, Ziel oder automatische Aktualisierung; Einzelne Lesevorgänge können unterschiedliche Zustände aufweisen.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
var before = UO.ProfileShardName();
UO.Wait(500);
var after = UO.ProfileShardName();
UO.Print(before = after);
return null;
}
}C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.
Parameter: Keine Parameter.
Ergebnis: dynamic / Any.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.ShardName:bridge.ShardName.
Interner Implementierungscode; kein eigenständiges Skript.
case "shardname":
case "profileshardname": return new InjectionValue(bridge.ShardName);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.ReqProfile();
void UO.ReqProfile(object? mobile);Druckt den bekannten Profiltext des Charakters.
-
mobile– Optional serial/Alias. Ohne Argument - „lasttarget“. Dies ist kein lokales Einstellungsprofil ClassicUO.
void – kein Wert. Rufen Sie eine separate Leitung an; Der Abschluss bestätigt nicht die Aktion des Servers.
- ExecuteLegacyManualAlias ruft GetProfile auf, dann SystemMessage. Bridge.GetProfile sendet RequestProfile, dann prüft bis zu 3 Sekunden CharacterPanels.Profile.CurrentText mit Pausen 25 ms. Bereits vorhandener Text kann sofort zurückgegeben werden; Bei Timeout wird eine Meldung angezeigt und eine leere Zeile ausgegeben. Dieser Befehl gibt den Text aus, gibt ihn jedoch nicht zurück.
- Für den string-Wert verwenden Sie UO.GetProfile. Das Vorhandensein von Text ist kein Beweis für eine erfolgreiche Umbenennung oder einen Zeichenstatus.
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.
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.ReqProfile");
UO.ReqProfile();Parameter und Ablauf:
- Druckt den bekannten Profiltext des Charakters.
UO.ReqProfile();Parameter und Ablauf:
- ExecuteLegacyManualAlias ruft GetProfile auf, dann SystemMessage. Bridge.GetProfile sendet RequestProfile, dann prüft bis zu 3 Sekunden CharacterPanels.Profile.CurrentText mit Pausen 25 ms. Bereits vorhandener Text kann sofort zurückgegeben werden; Bei Timeout wird eine Meldung angezeigt und eine leere Zeile ausgegeben. Dieser Befehl gibt den Text aus, gibt ihn jedoch nicht zurück.
return RunScenario();
object? RunScenario()
{
UO.ReqProfile("self");
return null;
}Parameter und Ablauf:
- Für den string-Wert verwenden Sie UO.GetProfile. Das Vorhandensein von Text ist kein Beweis für eine erfolgreiche Umbenennung oder einen Zeichenstatus.
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.ReqProfile(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;
}C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.
Parameter: Keine Parameter.
Ergebnis: void / Unit.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
InjectionScript.Runtime.InjectionApiUO.SystemMessage:SystemMessage(GetProfile(arguments.Length > 0 ? arguments[0] : new InjectionValue("lasttarget"))). -
InjectionScript.Runtime.InjectionApiUO.GetProfile:GetProfile(arguments.Length > 0 ? arguments[0] : new InjectionValue("lasttarget")).
Interner Implementierungscode; kein eigenständiges Skript.
case "reqprofile":
SystemMessage(GetProfile(arguments.Length > 0 ? arguments[0] : new InjectionValue("lasttarget")));
break;Parameter: mobile (Any)
Ergebnis: void / Unit.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
InjectionScript.Runtime.InjectionApiUO.SystemMessage:SystemMessage(GetProfile(arguments.Length > 0 ? arguments[0] : new InjectionValue("lasttarget"))). -
InjectionScript.Runtime.InjectionApiUO.GetProfile:GetProfile(arguments.Length > 0 ? arguments[0] : new InjectionValue("lasttarget")).
Interner Implementierungscode; kein eigenständiges Skript.
case "reqprofile":
SystemMessage(GetProfile(arguments.Length > 0 ? arguments[0] : new InjectionValue("lasttarget")));
break;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.ResetProfile();Setzt das aktive Profil auf die Standardwerte zurück.
Es gibt keine Parameter.
void – kein Wert. Rufen Sie eine separate Leitung an; Der Abschluss bestätigt nicht die Aktion des Servers.
- ResetProfile ruft ProfileManager auf.ResetCurrentProfileToDefault; Wenn kein aktives Profil vorhanden ist, wird ein Fehler angezeigt. Ändert lokale Einstellungen, sodass gespeicherte Benutzerwerte möglicherweise verloren gehen.
- Ändert oder zeigt nur die angegebenen lokalen Daten an. Für diesen Befehl gibt es keine Serverbestätigung.
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.
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.ResetProfile");
UO.ResetProfile();Parameter und Ablauf:
- Setzt das aktive Profil auf die Standardwerte zurück.
UO.ResetProfile();Parameter und Ablauf:
- ResetProfile ruft ProfileManager auf.ResetCurrentProfileToDefault; Wenn kein aktives Profil vorhanden ist, wird ein Fehler angezeigt. Ändert lokale Einstellungen, sodass gespeicherte Benutzerwerte möglicherweise verloren gehen.
return RunScenario();
object? RunScenario()
{
UO.Print(UO.ProfileName());
UO.ResetProfile();
return null;
}Parameter und Ablauf:
- Ändert oder zeigt nur die angegebenen lokalen Daten an. Für diesen Befehl gibt es keine Serverbestä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()
{
UO.ResetProfile();
UO.SaveConfig();
return null;
}
}C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.
Parameter: Keine Parameter.
Ergebnis: void / Unit.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.ResetProfile:bridge.ResetProfile().
Interner Implementierungscode; kein eigenständiges Skript.
case "resetprofile": bridge.ResetProfile(); break;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.SaveConfig();Speichert das aktuelle ClassicUO-Profil.
Es gibt keine Parameter.
void – kein Wert. Rufen Sie eine separate Leitung an; Der Abschluss bestätigt nicht die Aktion des Servers.
- SaveConfig ruft ProfileManager.SaveCurrentProfile über Invoke auf. Der Befehl schreibt die lokalen Profileinstellungen; Der Pfad wird von ProfileManager übernommen.
- Ändert oder zeigt nur die angegebenen lokalen Daten an. Für diesen Befehl gibt es keine Serverbestätigung.
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.
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.SaveConfig");
UO.SaveConfig();Parameter und Ablauf:
- Speichert das aktuelle ClassicUO-Profil.
UO.SaveConfig();Parameter und Ablauf:
- SaveConfig ruft ProfileManager.SaveCurrentProfile über Invoke auf. Der Befehl schreibt die lokalen Profileinstellungen; Der Pfad wird von ProfileManager übernommen.
return RunScenario();
object? RunScenario()
{
UO.Print(UO.ProfileName());
UO.SaveConfig();
return null;
}Parameter und Ablauf:
- Ändert oder zeigt nur die angegebenen lokalen Daten an. Für diesen Befehl gibt es keine Serverbestä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()
{
UO.SaveConfig();
UO.Print(UO.ShardPath());
return null;
}
}C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.
Parameter: Keine Parameter.
Ergebnis: void / Unit.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.SaveConfig. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SaveConfig:bridge.SaveConfig().
Interner Implementierungscode; kein eigenständiges Skript.
public void SaveConfig() => bridge.SaveConfig();Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.SaveHotkeys();Speichert Makros und Hotkeys.
Es gibt keine Parameter.
void – kein Wert. Rufen Sie eine separate Leitung an; Der Abschluss bestätigt nicht die Aktion des Servers.
- SaveHotkeys ruft _world.Macros.Save über Invoke auf. Die lokale Makrotabelle des aktuellen Profils wird gespeichert.
- Ändert oder zeigt nur die angegebenen lokalen Daten an. Für diesen Befehl gibt es keine Serverbestätigung.
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.
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.SaveHotkeys");
UO.SaveHotkeys();Parameter und Ablauf:
- Speichert Makros und Hotkeys.
UO.SaveHotkeys();Parameter und Ablauf:
- SaveHotkeys ruft _world.Macros.Save über Invoke auf. Die lokale Makrotabelle des aktuellen Profils wird gespeichert.
return RunScenario();
object? RunScenario()
{
UO.Print(UO.ProfileName());
UO.SaveHotkeys();
return null;
}Parameter und Ablauf:
- Ändert oder zeigt nur die angegebenen lokalen Daten an. Für diesen Befehl gibt es keine Serverbestä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()
{
UO.SaveHotkeys();
UO.LoadHotkeys();
return null;
}
}C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.
Parameter: Keine Parameter.
Ergebnis: void / Unit.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SaveHotkeys:bridge.SaveHotkeys().
Interner Implementierungscode; kein eigenständiges Skript.
case "savehotkeys": bridge.SaveHotkeys(); break;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.Set(object? name, object? value);Ändert eine von drei Legacy-Einstellungen.
-
name– Zeichenfolge ohne Berücksichtigung der Groß-/Kleinschreibung: „finddistance“, „grabdelay“ oder „equipfordress“. Der unbekannte Name wird stillschweigend ignoriert. -
value- int oder double/0x-Text. Für die Zeichenfolgenform TryStr2Int; Falscher Text wird zu 0, kein Fehler.
void – kein Wert. Rufen Sie eine separate Leitung an; Der Abschluss bestätigt nicht die Aktion des Servers.
- finddistance ruft Bridge auf.SetFindDistance, Grabdelay ruft Bridge auf.SetGrabDelay, equipfordress weist Status zu.UseEquipForDress. Dies sind drei separate Einstellungen; Es gibt keinen universellen Setter für beliebige Eigenschaften.
- Der Stringwert wird zunächst TryStr2Int mit Fallback=0 konvertiert. Daher könnte ein Tippfehler dazu führen, dass 0 in die erkannte Einstellung geschrieben wird. Set selbst sucht nicht nach Gegenständen und zieht sich nicht um.
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.
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.Set");
UO.Set("finddistance", 10);Parameter und Ablauf:
- Ändert eine von drei Legacy-Einstellungen.
UO.Set("finddistance", 10);Parameter und Ablauf:
- finddistance ruft Bridge auf.SetFindDistance, Grabdelay ruft Bridge auf.SetGrabDelay, equipfordress weist Status zu.UseEquipForDress. Dies sind drei separate Einstellungen; Es gibt keinen universellen Setter für beliebige Eigenschaften.
return RunScenario();
object? RunScenario()
{
UO.Set("grabdelay", "250");
return null;
}Parameter und Ablauf:
- Der Stringwert wird zunächst TryStr2Int mit Fallback=0 konvertiert. Daher könnte ein Tippfehler dazu führen, dass 0 in die erkannte Einstellung geschrieben wird. Set selbst sucht nicht nach Gegenständen und zieht sich nicht um.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
UO.Set("equipfordress", 1);
UO.Print(UO.FindDistance());
return null;
}
}C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.
Parameter: name (String), value (Integer/String)
Ergebnis: void / Unit.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.Set. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetFindDistance:bridge.SetFindDistance(value). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetGrabDelay:bridge.SetGrabDelay(value).
Interner Implementierungscode; kein eigenständiges Skript.
public void Set(string name, int value)
{
if (name.Equals("finddistance", StringComparison.OrdinalIgnoreCase))
{
bridge.SetFindDistance(value);
}
else if (name.Equals("grabdelay", StringComparison.OrdinalIgnoreCase))
{
bridge.SetGrabDelay(value);
}
else if (name.Equals("equipfordress", StringComparison.OrdinalIgnoreCase))
{
state.UseEquipForDress = value;
}
}Parameter: name (String), value (Integer/String)
Ergebnis: void / Unit.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.Set. -
InjectionScript.Runtime.NumberConversions.TryStr2Int:NumberConversions.TryStr2Int(valueStr, out var value). -
InjectionScript.Runtime.InjectionApiUO.Set:Set(name, valueInt).
Interner Implementierungscode; kein eigenständiges Skript.
public void Set(string name, string valueStr)
{
int valueInt = NumberConversions.TryStr2Int(valueStr, out var value) ? value : 0;
Set(name, valueInt);
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.SetDefault(object? name, object? @object);Speichert den benannten Alias serial im Laufzeitzustand.
-
name– Benennen Sie den Alias als Text, die Groß- und Kleinschreibung behandelt das Objektwörterbuch. -
object– Seriell/Alias über Arg/GetObject. Der Name und serial folgen in dieser Reihenfolge.
void – kein Wert. Rufen Sie eine separate Leitung an; Der Abschluss bestätigt nicht die Aktion des Servers.
- ExecuteLegacyManualAlias ruft state.Objects.Set(Text(0),Arg(1)) auf. Es gibt keine interaktive Auswahl; die Existenz von serial ist nicht verifiziert.
- Dabei wird der Objektname aufgezeichnet, das Profil wird nicht zurückgesetzt und nicht alle Einstellungen werden auf die Standardwerte zurückgesetzt. Bei nachfolgenden Aufrufen wird der Alias erneut aufgelöst.
- In einem regulären Client-Host werden diese Statusdaten vom GetPersistentState-Manager übernommen und gelten für Skripte/Chat/Makros derselben Welt/dieselben Profils und gehören nicht zu einem einzigen Skript. Ein anderer Prozess oder ein scheinbar separater InjectionRuntimeState hat einen anderen Zustand. Das Laden/Löschen eines Profils kann es ersetzen; Die gespeicherten serial werden weiterhin mit der geladenen Welt verglichen.
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.
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.SetDefault");
UO.SetDefault("manualObject", UO.Self());Parameter und Ablauf:
- Speichert den benannten Alias serial im Laufzeitzustand.
UO.SetDefault("manualObject", UO.Self());Parameter und Ablauf:
- ExecuteLegacyManualAlias ruft state.Objects.Set(Text(0),Arg(1)) auf. Es gibt keine interaktive Auswahl; die Existenz von serial ist nicht verifiziert.
return RunScenario();
object? RunScenario()
{
UO.SetDefault("manualBag", UO.Backpack());
UO.Print(UO.GetSerial("manualBag"));
return null;
}Parameter und Ablauf:
- Dabei wird der Objektname aufgezeichnet, das Profil wird nicht zurückgesetzt und nicht alle Einstellungen werden auf die Standardwerte zurückgesetzt. Bei nachfolgenden Aufrufen wird der Alias erneut aufgelöst.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
var id = UO.GetSerial("lasttarget");
if (Truth(UO.Exists(id)))
{
UO.SetDefault("manualTarget", id);
UO.Print(UO.GetName("manualTarget"));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.
Parameter: name (Any), object (Any)
Ergebnis: void / Unit.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
InjectionScript.Runtime.State.RuntimeDictionary.Set:state.Objects.Set(Text(0), Arg(1)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Text:Text(0). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Arg:Arg(1).
Interner Implementierungscode; kein eigenständiges Skript.
case "setdefault":
if (arguments.Length > 1) state.Objects.Set(Text(0), Arg(1));
break;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.SetEasyUO(object? number, object? value);Schreibt einen Zeichenfolgenwert in die Windows-Registrierung EasyUO.
-
number— int Wertnummer, formatiert double ohne *-Präfix. -
value– Text bis ToString; als übermittelt gespeichert.
void – kein Wert. Rufen Sie eine separate Leitung an; Der Abschluss bestätigt nicht die Aktion des Servers.
- Öffnet/erstellt unter Windows HKCU\Software\EasyUO mit Schreibberechtigung, SetValue(decimalNumber,Wert,RegistryValueKind.string). Auf anderen Betriebssystemen wird eine Meldung angezeigt und nicht aufgezeichnet.
- Dies ist ein externer permanenter Eintrag in der Registrierung des aktuellen Benutzers, keine bereichsbezogene globale Laufzeit und kein Spiel serial. Registry-Zugriffsfehler werden durch diese Funktion nicht ausgeblendet.
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.
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.SetEasyUO");
UO.SetEasyUO(9001, "manual-example");Parameter und Ablauf:
- Schreibt einen Zeichenfolgenwert in die Windows-Registrierung EasyUO.
UO.SetEasyUO(9001, "manual-example");Parameter und Ablauf:
- Öffnet/erstellt unter Windows HKCU\Software\EasyUO mit Schreibberechtigung, SetValue(decimalNumber,Wert,RegistryValueKind.String). Auf anderen Betriebssystemen wird eine Meldung angezeigt und nicht aufgezeichnet.
return RunScenario();
object? RunScenario()
{
UO.SetEasyUO(9001, "");
return null;
}Parameter und Ablauf:
- Dies ist ein externer permanenter Eintrag in der Registrierung des aktuellen Benutzers, keine bereichsbezogene globale Laufzeit und kein Spiel serial. Registry-Zugriffsfehler werden durch diese Funktion nicht ausgeblendet.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
UO.SetEasyUO(9001, "manual-example");
UO.Print(UO.GetEasyUO(9001));
return null;
}
}C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.
Parameter: number (Any), value (Any)
Ergebnis: void / Unit.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.SetEasyUO. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetEasyUO:bridge.SetEasyUO(NumberConversions.ToInt(number), value.ToString()). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(number). -
InjectionScript.Runtime.InjectionValue.ToString:value.ToString().
Interner Implementierungscode; kein eigenständiges Skript.
public void SetEasyUO(InjectionValue number, InjectionValue value)
=> bridge.SetEasyUO(NumberConversions.ToInt(number), value.ToString());void UO.SetGlobal(object? name, object? value);
void UO.SetGlobal(object? globalRegion, object? varName, object? varValue);SetGlobal und GetGlobal teilen Werte zwischen allen Skripten, Profilen und Full-/Client-Prozessen. Werte sind Zeichenfolgen; fehlende Schlüssel ergeben "N/A". Groß-/Kleinschreibung zählt; region-Formen verwenden region/name. Manager/Game Manager/CSharp/globals.json bleibt nach Neustarts erhalten und wird mit Prozesssperre frisch gelesen. Shared-Formen verwenden denselben Speicher.
-
globalRegion— Namensraum zusammen mit dem Schlüsselnamen. -
name— Gemeinsamer Schlüsselname mit Groß-/Kleinschreibung. -
value— Als Text gespeicherter Wert. -
varName— Gemeinsamer Schlüsselname mit Groß-/Kleinschreibung. -
varValue— Als Text gespeicherter Wert.
Jeder Block ist eine vollständige .csx-Datei. Ersetzen Sie Beispiel-serials, Typen und Koordinaten. Parameterreihenfolge und benannte C#-Argumente folgen der Signatur.
#setglobal team.target 0x40001234
#set global team.message Привіт усім
Jeder Block ist eine vollständige .csx-Datei. Ersetzen Sie Beispiel-serials, Typen und Koordinaten. Parameterreihenfolge und benannte C#-Argumente folgen der Signatur.
UO.SetGlobal("team.target", 0x40001234);
UO.Print(UO.GetGlobal("team.target"));UO.SetGlobal("team.message", "Привіт");
UO.Print(UO.GetGlobal("team.message"));UO.SetGlobal("team", "delay", "350");
UO.Print(Convert.ToString(UO.GetGlobal("team", "delay")));new CommandSample().Execute(UO);
sealed class CommandSample
{
public void Execute(global::ClassicUO.CSharp.CSharpGameApi api)
{
api.SetGlobal("team.target", 0x40001234);
api.Print(api.GetGlobal("team.target"));
}
}CSharpGameApi.SetGlobal
-> CSharpScriptGlobals
-> InjectionScript.Runtime.InjectionApiUO.RegisterClientApiCompatibility
-> InjectionScript.Runtime.State.Globals.SetGlobal
Globals -> SharedGlobalStore -> named mutex -> atomic JSON replacement
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.SetMulPath(object? pathValue);Speichert die Pfadzeichenfolge mulPath zur Laufzeit.
-
pathValue– Text bis ToString; als übermittelt gespeichert.
void – kein Wert. Rufen Sie eine separate Leitung an; Der Abschluss bestätigt nicht die Aktion des Servers.
- Weist mulPath = ToString oder die leere Zeichenfolge zu. Die Datei wird nicht geöffnet, Kartendaten werden nicht neu geladen und die Pfadverfügbarkeit wird von dieser Funktion nicht überprüft.
- Dies ist der Kompatibilitätsspeicher der aktuellen Laufzeit. Es gibt keine Verbraucher im Projekt privat mulPath/showZ; Durch die Änderung werden keine Assets neu geladen oder die Höhenanzeige geändert.
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.
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.SetMulPath");
UO.SetMulPath("C:\\Ultima Online");Parameter und Ablauf:
- Speichert die Pfadzeichenfolge mulPath zur Laufzeit.
UO.SetMulPath("C:\\Ultima Online");Parameter und Ablauf:
- Weist mulPath = ToString oder die leere Zeichenfolge zu. Die Datei wird nicht geöffnet, Kartendaten werden nicht neu geladen und die Pfadverfügbarkeit wird von dieser Funktion nicht überprüft.
return RunScenario();
object? RunScenario()
{
UO.SetMulPath("");
return null;
}Parameter und Ablauf:
- Dies ist der Kompatibilitätsspeicher der aktuellen Laufzeit. Es gibt keine Verbraucher im Projekt privat mulPath/showZ; Durch die Änderung werden keine Assets neu geladen oder die Höhenanzeige geändert.
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()
{
ApplyValue("C:\\Ultima Online");
return null;
}
void ApplyValue(dynamic value)
{
UO.SetMulPath(value);
}
}C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.
Parameter: pathValue (Any)
Ergebnis: void / Unit.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.SetMulPath. -
InjectionScript.Runtime.InjectionValue.ToString:pathValue.ToString().
Interner Implementierungscode; kein eigenständiges Skript.
public void SetMulPath(InjectionValue pathValue) => mulPath = pathValue.ToString() ?? string.Empty;