Repository navigation
DE UO Topic client connection
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
Home · C# · IDE · UO API · A–Z · Beispiele · Sprachen
Verbindung, Welteintragsstatus, Latenz, Serveradresse und Charakterliste.
| Thema | Befehle und Erklärungen |
|---|---|
| Connect | UO.Connect |
| Disconnect | UO.Disconnect |
| Connected | UO.Connected |
| Online | UO.Online |
| Ping | UO.GetPing |
| Server IP | UO.GameServerIPString |
| Shard Name | UO.ShardName |
| Shard Path | UO.ShardPath |
| Zeichenliste | UO.GetCharsListForShard |
| Resend | UO.Resend |
| CheckLag | UO.CheckLag |
UO.Connect · UO.Disconnect · UO.Connected · UO.Online · UO.IsOnline · UO.ConnectedTime · UO.DisconnectedTime · UO.GetPing · UO.CheckLag · UO.GameServerIPString · UO.ShardName · UO.ShardPath · UO.GetCharsListForShard · UO.Resend · UO.CloseUO
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
if (Truth(Truth(UO.Connected()) == false))
{
return null;
}
UO.UseSkill("Hiding");
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Parameter, Ergebnis und alle Szenarien
var address = UO.GameServerIPString();
UO.Print(address);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.CheckLag();
dynamic UO.CheckLag(object? timeoutMS);
int UO.CheckLag(object? timeout, object? retries);Überprüft, ob innerhalb der vorgegebenen Zeit eine neue Antwort vom Spieleserver empfangen wurde. Praktisch, bevor das Skript nach einer Netzwerkverzögerung fortgesetzt wird.
-
timeout– Timeout / timeoutMS – Wartezeit für einen Versuch in Millisekunden, konvertiert in int. Ein negativer Wert ist auf Null begrenzt. Mit 0 kann die Anfrage gesendet werden, es wird jedoch keine Antwort erwartet; Es ist keine unendliche Auszeit. -
timeoutMS– Timeout / timeoutMS – Wartezeit für einen Versuch in Millisekunden, konvertiert in int. Ein negativer Wert ist auf Null begrenzt. Mit 0 kann die Anfrage gesendet werden, es wird jedoch keine Antwort erwartet; Es ist keine unendliche Auszeit. -
retries– Wiederholungen – Gesamtzahl der Versuche, nicht die Zahl der zusätzlichen Wiederholungen. Konvertiert in int und ist von unten auf eins begrenzt. Zum Beispiel (250, 3) – bis zu drei Versuche bei 250 ms; eine erfolgreiche Antwort schließt die Prüfung vorzeitig ab.
Numerisches Flag int: 1 (Bedingung erfüllt) – neue Antwort empfangen; 0 (Bedingung nicht erfüllt) – die Anfrage ist nicht möglich oder die Frist ist abgelaufen. Einzelparameterregistrierung object? gibt tatsächlich dieses int zurück. Dabei handelt es sich nicht um den Ping-Wert oder die Anzahl der Versuche.
- CheckLag() unternimmt einen Versuch und wartet bis zu 10000 ms. CheckLag(timeoutMS) – ein Versuch mit der angegebenen Erwartung. CheckLag(Timeout, Wiederholungen) wiederholt die Prüfung, bis sie erfolgreich ist oder die Gesamtzahl der Versuche erschöpft ist.
- Durch Warten wird das aufrufende Skript verzögert, anstatt die Spielaktion zu bestätigen. Der Befehl stellt keine erneute Verbindung her und ändert die Netzwerkeinstellungen nicht. Der Server antwortet möglicherweise nicht auf Echo: Ein Fehler allein beweist nicht, dass die Verbindung unterbrochen wurde. Der Zeitpunkt hängt auch von der Ablaufplanung ab; Rufen Sie nicht für jeden Frame eine aktive Prüfung auf. Das Anhalten des Skripts unterbricht die Wartezeit.
- UO.GetPing · UO.CheckLag · UO.IsOnline
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.CheckLag();
UO.Print("CheckLag: " + Convert.ToString(result));Parameter und Ablauf:
- Ein Formular ohne Parameter kann bis zu 10 Sekunden warten. true bedeutet eine neue Echoantwort. Das Verstecken wird durch einen separaten Befehl aufgerufen und kann durch die Spielmechanik außer Kraft gesetzt werden.
if (Truth(Truth(UO.CheckLag()) == true))
{
UO.UseSkill("Hiding");
}
else
{
UO.Print("No fresh server response");
}
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:
- 250 – Warten auf einen Versuch, 3 – Gesamtzahl der Versuche. Bei Erfolg werden keine weiteren Versuche unternommen; mit 0 wird das Skript nicht fortgesetzt. Dies ist keine 250 ms-Ping-Messung oder drei zusätzliche Wiederholungen.
return RunScenario();
object? RunScenario()
{
var responsive = UO.CheckLag(250, 3);
if (Truth(responsive == 0))
{
UO.Print("No response after the allowed attempts");
return null;
}
UO.Print("Fresh response received; the script can continue");
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:
- CanContinue(timeoutMs, Versuche) prüft zuerst UO.IsOnline, dann die neueste Antwort. false und 0 sind für dieses Prädikat äquivalent. 500 ms und 2 Versuche werden separat angegeben; Die Funktion löst keine automatische Wiederverbindung aus.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
if (!(Truth(CanContinue(500, 2))))
{
return null;
}
UO.UseSkill("Hiding");
return null;
}
dynamic CanContinue(dynamic timeoutMs, dynamic attempts)
{
if (Truth(Truth(UO.IsOnline()) == false))
{
return false;
}
return Truth(Truth(UO.CheckLag(timeoutMs, attempts)) == true);
}
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:
-
InjectionScript.Runtime.InjectionApiUO.CheckLag. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.CheckLag:bridge.CheckLag(10_000).
Interner Implementierungscode; kein eigenständiges Skript.
public int CheckLag() => bridge.CheckLag(10_000);Parameter: timeoutMS (Any)
Ergebnis: dynamic / Any.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.CheckLag:bridge.CheckLag(Arg(0, 10_000)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0, 10_000).
Interner Implementierungscode; kein eigenständiges Skript.
case "checklag": return new InjectionValue(bridge.CheckLag(Arg(0, 10_000)));Parameter: timeout (Any), retries (Any)
Ergebnis: int / Integer.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.CheckLag. -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(timeout). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.CheckLag:bridge.CheckLag(timeoutMs).
Interner Implementierungscode; kein eigenständiges Skript.
public int CheckLag(InjectionValue timeout, InjectionValue retries)
{
int timeoutMs = Math.Max(0, NumberConversions.ToInt(timeout));
int attempts = Math.Max(1, NumberConversions.ToInt(retries));
for (int attempt = 0; attempt < attempts; attempt++)
{
if (bridge.CheckLag(timeoutMs) != 0)
return 1;
}
return 0;
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.CloseUO();Fordert die aktuelle Clientanwendung zum Beenden über Client.Game.Exit auf.
Es gibt keine Parameter.
void – kein Rückgabewert.
- CloseUO wird an dieselbe Bridge gesendet.CloseHandle. Exit wird im Spielthread ausgeführt; Wenn Client.Game fehlt, gibt es keine Aktion. Der Befehl ist kein Herunterfahren eines separaten Gumps.
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.CloseUO");
UO.CloseUO();Parameter und Ablauf:
- Der Aufruf fordert die Beendigung der Clientanwendung an.
UO.CloseUO();Parameter und Ablauf:
- Das Beispiel zeigt einen kontrollierten Zustand; Der Wert 0 hält den Client geöffnet.
return RunScenario();
object? RunScenario()
{
var finishClient = 0;
if (Truth(finishClient))
{
UO.CloseUO();
}
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:
- Ein vollständig deklarierter Helfer ermöglicht die explizite Exit-Aktivierung.
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()
{
FinishClient(0);
return null;
}
void FinishClient(dynamic enabled)
{
if (Truth(enabled))
{
UO.CloseUO();
}
}
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. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.CloseHandle:bridge.CloseHandle().
Interner Implementierungscode; kein eigenständiges Skript.
case "closeuo": bridge.CloseHandle(); break;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.Connect();Fordert eine Verbindung oder erneute Verbindung der aktuellen Clientsitzung an.
Es gibt keine Parameter.
void – kein Rückgabewert.
- Ruft in einer Managersitzung SessionControl.RequestConnect auf. Im Standalone-Client bleibt die aktive/vorbereitete Verbindung unverändert.
- Für GameScene ist eine gespeicherte Wiederverbindung geplant, um die Szene während der Aktualisierung nicht zu verändern. In LoginScene werden das aktuelle Konto und das gespeicherte Passwort verwendet, Reconnect aktiviert und Connect mit dem gespeicherten Shard/Charakter aufgerufen, auch wenn die automatische Reconnect-Funktion deaktiviert ist.
- Das Team wartet nicht darauf, die Welt zu betreten. Überprüfen Sie UO.Connected nach einer separaten Wartezeit, ob für weitere Aktionen eine Verbindung erforderlich ist.
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.Connect");
UO.Connect();Parameter und Ablauf:
- Durch den Anruf wird lediglich eine Verbindung aufgebaut.
UO.Connect();Parameter und Ablauf:
- Durch die Überprüfung kann eine erneute Anfrage vermieden werden.
return RunScenario();
object? RunScenario()
{
if (!(Truth(UO.Connected())))
{
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;Parameter und Ablauf:
- Das Warten von 1000 ms garantiert keinen Eintritt; Die Ausgabe zeigt das tatsächliche aktuelle Flag.
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.Connect();
await Delay(1000);
UO.Print(Convert.ToString(UO.Connected()));
return null;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
}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.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.ConnectClient:bridge.ConnectClient().
Interner Implementierungscode; kein eigenständiges Skript.
case "connect": bridge.ConnectClient(); return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.Connected();Überprüft, ob sich die aktuelle Sitzung in der Spielwelt befindet und ob ihre Spielverbindung geöffnet ist. Verwenden Sie es vor einer Charakteraktion oder während Sie auf den Eintritt warten.
Es gibt keine Parameter.
int. 1 - es gibt gleichzeitig einen Spieler, eine geladene Karte und einen aktiven Spielsockel; sonst 0. Ein geöffnetes Client-Fenster, eine Zeichenliste oder eine TCP-Verbindung in der Anmeldephase bedeuten nicht 1. Numerisches Flag int: 1 (Bedingung erfüllt), 0 (Bedingung nicht erfüllt). Dies ist ein numerisches Flag: in C# Ergebnis prüfen != 0 oder Ergebnis == 0. Direkter Vergleich von int mit true/false und if (Ergebnis) ist nicht zulässig.
Das Ergebnis des Befehls ist ein numerisches Flag: 1 bedeutet eine erfüllte Bedingung, 0 bedeutet eine nicht erfüllte Bedingung. Nach var result = command(...) prüfen, ob (result != 0) oder if (result == 0). Speichern Sie das Ergebnis eines Aufrufs: Ein wiederholter Aufruf kann die Aktion erneut ausführen oder den Status lesen, der sich bereits geändert hat.
- Es gibt keine Parameter: serial, type, Charaktername und IP können nicht übertragen werden. UO.Online(), UO.Connected() und UO.IsOnline() überprüfen dasselbe. Dies ist der Status des jeweiligen Sitzungseigentümers, nicht eines anderen Managerprofils.
- Der Befehl liest nur den lokalen Status. Es sendet keinen Ping, stellt keine Verbindung her, pausiert nicht und prüft nicht die Verfügbarkeit des Internets. Nach dem Lesen kann sich der Zusammenhang ändern; 1 garantiert nicht den Erfolg der nächsten Aktion.
- UO.Wait dauert Millisekunden. Automatische Pause bei Verbindungsverlust und manuelle Pause verzögern die Ausführung von Beispielen: Die Timeout-Prüfung wird erst fortgesetzt, nachdem die Pause entfernt wurde. Diese Befehle heben die Pause nicht auf und aktivieren keine automatische Wiederherstellung der Verbindung.
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.Connected();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Parameter und Ablauf:
- false entspricht 0. Return beendet Main zu UseSkill. Verstecken ist der einzige Parameter von UseSkill, dem Namen der Fertigkeit. Bei 1 fordert das Skript nur zur Nutzung des Skills auf; Das Ergebnis hängt vom Status des Charakters und des Servers ab.
- Der Befehl liest nur den lokalen Status. Es sendet keinen Ping, stellt keine Verbindung her, pausiert nicht und prüft nicht die Verfügbarkeit des Internets. Nach dem Lesen kann sich der Zusammenhang ändern; 1 garantiert nicht den Erfolg der nächsten Aktion.
if (Truth(Truth(UO.Connected()) == false))
{
return null;
}
UO.UseSkill("Hiding");
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:
- Beim Vergleich mit 0 wird die aktuelle Verbindung überprüft, nicht die Einstellung für die automatische Wiederverbindung. Connect ohne Argumente verwendet die gespeicherten Einstellungen und wartet nicht, bis die Anmeldung abgeschlossen ist. Das Wiederholen eines Befehls während einer bereits gestarteten Anmeldung sollte keine zweite Sitzung erzeugen.
- Der Befehl liest nur den lokalen Status. Es sendet keinen Ping, stellt keine Verbindung her, pausiert nicht und prüft nicht die Verfügbarkeit des Internets. Nach dem Lesen kann sich der Zusammenhang ändern; 1 garantiert nicht den Erfolg der nächsten Aktion.
return RunScenario();
object? RunScenario()
{
if (Truth(UO.Connected() == 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;Parameter und Ablauf:
- WaitForWorld(timeoutMs) ist eine vollständig angezeigte benutzerdefinierte Funktion, kein integrierter Befehl. 5000 – Budget in ms, UO.Wait(50) – Prüfintervall. Ein negativer Wert ergibt false; 0 erlaubt nur eine vorgefertigte Welt. Timer misst Sekunden, daher wird die Differenz mit 1000 multipliziert. Autopause muss vorher ausgeschaltet werden, andernfalls wird Main beendet. Die Funktion ruft Connect nicht auf und bricht die gestartete Eingabe nicht ab, wenn die Zeit abgelaufen ist.
- Der Befehl liest nur den lokalen Status. Es sendet keinen Ping, stellt keine Verbindung her, pausiert nicht und prüft nicht die Verfügbarkeit des Internets. Nach dem Lesen kann sich der Zusammenhang ändern; 1 garantiert nicht den Erfolg der nächsten Aktion.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
async public Task<object?> RunScenarioAsync()
{
if (Truth(UO.GetPauseScriptOnDisconnectStatus()))
{
return null;
}
if (Truth(await WaitForWorld(5000)))
{
UO.UseSkill("Hiding");
}
return null;
}
async Task<dynamic> WaitForWorld(dynamic timeoutMs)
{
if (Truth(timeoutMs < 0))
{
return false;
}
var started = Environment.TickCount;
while (!(Truth(UO.Connected())))
{
if (Truth((Environment.TickCount - started) * 1000.0 >= timeoutMs))
{
return false;
}
await Delay(50);
}
return true;
}
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: Keine Parameter.
Ergebnis: dynamic / Any.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.IsOnline:bridge.IsOnline().
Interner Implementierungscode; kein eigenständiges Skript.
case "connected": return new InjectionValue(bridge.IsOnline());Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.ConnectedTime();Gibt den Kalenderstempel des letzten erfolgreichen Eintritts des Charakters in die Welt zurück. Hilft Ihnen zu verstehen, ob sich die Verbindung während des Wartens oder Anhaltens geändert hat, bevor Sie mit der gleichen Aufgabe fortfahren.
Es gibt keine Parameter.
double: Anzahl der Tage von 1899-12-30, Bruchteil – Tageszeit (OLE Automatisierungsdatum). 0 bedeutet, dass dieser Sitzungsbesitzer die Welt noch nicht betreten hat. Nach dem Trennen bleibt die letzte Eingabemarke erhalten. Es ist nicht bool oder die Dauer in Sekunden.
- Es gibt keine Argumente. Der Verlauf ist für Skripte desselben Sitzungseigentümers gleich: Spätes Starten, Anhalten und Schließen IDE ändern die Markierungen nicht. Ein neuer Sitzungsprozess beginnt eine neue Geschichte; Es handelt sich nicht um ein Protokoll aller Verbindungen.
- Ein fehlgeschlagener Anmeldeversuch, ohne dass der Charakter in der Welt erscheint, gilt nicht als erfolgreiche Anmeldung. Wiederholte Offline-Prüfungen verändern die Abschaltzeit nicht. Verwenden Sie für den aktuellen Status UO.Connected() anstelle eines Datums ungleich Null.
- Die Uhren werden von der lokalen Uhr des Computers übernommen. Die Differenz multipliziert mit 86400 ergibt Kalendersekunden; Das Ändern der Uhr/Zeitzone kann die Ergebnisse verfälschen. Verwenden Sie für Zeitüberschreitungen den monotonen Timer(). Einzelne Aufrufe bilden keinen atomaren Snapshot; Die gleiche Markierung ist keine eindeutige ID-Verbindung.
- UO.Wait dauert Millisekunden. Automatische Pause bei Verbindungsverlust und manuelle Pause verzögern die Ausführung von Beispielen: Die Timeout-Prüfung wird erst fortgesetzt, nachdem die Pause entfernt wurde. Diese Befehle heben die Pause nicht auf und aktivieren keine automatische Wiederherstellung der Verbindung.
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.ConnectedTime();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Parameter und Ablauf:
- 0 prüft, ob in diesem bestimmten Prozess keine Eingaben vorliegen. Connect verwendet das gespeicherte Profil und fragt nur nach einer Anmeldung. In diesem Beispiel wird eine bereits beendete Verbindung absichtlich nicht wiederhergestellt.
- UO.Wait dauert Millisekunden. Automatische Pause bei Verbindungsverlust und manuelle Pause verzögern die Ausführung von Beispielen: Die Timeout-Prüfung wird erst fortgesetzt, nachdem die Pause entfernt wurde. Diese Befehle heben die Pause nicht auf und aktivieren keine automatische Wiederherstellung der Verbindung.
if (Truth(UO.ConnectedTime() == 0))
{
UO.Connect();
}
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:
- 30.0 – Überwachung des Budgets in Timer-Sekunden; 250 – Intervall UO.Wait in ms. Nach dem Ändern der Eingabemarkierung löscht CancelWaitTarget das vorherige verzögerte Ziel. Erfolgt keine neue Eingabe, endet die Schleife ohne diese Aktion.
- UO.Wait dauert Millisekunden. Automatische Pause bei Verbindungsverlust und manuelle Pause verzögern die Ausführung von Beispielen: Die Timeout-Prüfung wird erst fortgesetzt, nachdem die Pause entfernt wurde. Diese Befehle heben die Pause nicht auf und aktivieren keine automatische Wiederherstellung der Verbindung.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var login = UO.ConnectedTime();
var started = Environment.TickCount;
while (Truth(Environment.TickCount - started < 30.0))
{
if (Truth(UO.Connected()) && Truth(UO.ConnectedTime() != login))
{
UO.CancelWaitTarget();
return null;
}
await Delay(250);
}
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;Parameter und Ablauf:
- SameConnection(Anmeldung) gibt bool zurück. Wir speichern die Markierung, warten 500 ms und verbieten dann die Fortsetzung, wenn keine Verbindung besteht oder sich die Eingabe ändert. Dies ist ein erneuter Test und keine Garantie für die zukünftige Serververfügbarkeit.
- UO.Wait dauert Millisekunden. Automatische Pause bei Verbindungsverlust und manuelle Pause verzögern die Ausführung von Beispielen: Die Timeout-Prüfung wird erst fortgesetzt, nachdem die Pause entfernt wurde. Diese Befehle heben die Pause nicht auf und aktivieren keine automatische Wiederherstellung der Verbindung.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
async public Task<object?> RunScenarioAsync()
{
var login = UO.ConnectedTime();
await Delay(500);
if (!(Truth(SameConnection(login))))
{
return null;
}
UO.AddToSystemJournal("Same connection; continue this batch");
return null;
}
dynamic SameConnection(dynamic login)
{
return Truth(login != 0) && Truth(UO.Connected()) && Truth(UO.ConnectedTime() == login);
}
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: Keine Parameter.
Ergebnis: dynamic / Any.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.UpdateConnectionState:UpdateConnectionState().
Interner Implementierungscode; kein eigenständiges Skript.
case "connectedtime":
UpdateConnectionState();
return new InjectionValue(state.ConnectedTime == default(DateTime) ? 0d : state.ConnectedTime.ToOADate());Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.Disconnect();Trennt den aktuellen oder installierten Client-Transport und bereitet Skripts für die erneute Verbindung vor.
Es gibt keine Parameter.
void – kein Rückgabewert.
- Wenn die automatische Wiederverbindung deaktiviert ist, speichert BeginScriptControlledDisconnect den Anruf des Mitarbeiters für später UO.Connect. Die Managersitzung erhält RequestDisconnect.
- Der eigenständige Client ruft Socket.Disconnect und PrepareForReconnect auf. Wenn die globale Wiederverbindung aktiviert ist, wird der gespeicherte Szenenübergang explizit geplant. In LoginScene wird das Popup gelöscht und Main zurückgegeben.
- Die Rückgabe von void meldet nicht das Ergebnis der erneuten Verbindung. Der Verbindungsstatus wird separat ausgelesen; Die Einstellungen für die automatische Wiederverbindung können eine neue Anmeldung initiieren.
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.Disconnect");
UO.Disconnect();Parameter und Ablauf:
- Der Befehl bricht sowohl den aktiven als auch den installierten Transport ab.
UO.Disconnect();Parameter und Ablauf:
- Wenn AR deaktiviert ist, kann der anrufende Mitarbeiter Connect selbst erreichen.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
UO.Disconnect();
await Delay(1000);
UO.Connect();
return null;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));Parameter und Ablauf:
- Die Bedingung verwendet ein lokales Flag für die aktuelle Sitzung.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
if (Truth(UO.Connected()))
{
UO.Disconnect();
}
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.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.DisconnectClient:bridge.DisconnectClient().
Interner Implementierungscode; kein eigenständiges Skript.
case "disconnect": bridge.DisconnectClient(); return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.DisconnectedTime();Gibt den Kalenderstempel des letzten Verbindungsabbruchs zum Spiel zurück. Es wird benötigt, um eine Unterbrechung zu diagnostizieren und die Dauer einer hergestellten Verbindung abzuschätzen, und nicht, um die Anzahl der Anmeldeversuche zu bestimmen.
Es gibt keine Parameter.
double: Anzahl der Tage von 1899-12-30 mit Bruchteil des Tages. Nach der Pause – der Zeitpunkt, zu dem der Kunde den Ausfall bemerkt hat; vor der ersten Pause ist der Zeitpunkt, zu dem der Sitzungseigentümer erstellt wurde. Dies ist kein Offline-Flag und keine Millisekunden.
- Es gibt keine Argumente. Der Verlauf ist für Skripte desselben Sitzungseigentümers gleich: Spätes Starten, Anhalten und Schließen IDE ändern die Markierungen nicht. Ein neuer Sitzungsprozess beginnt eine neue Geschichte; Es handelt sich nicht um ein Protokoll aller Verbindungen.
- Ein fehlgeschlagener Anmeldeversuch, ohne dass der Charakter in der Welt erscheint, gilt nicht als erfolgreiche Anmeldung. Wiederholte Offline-Prüfungen verändern die Abschaltzeit nicht. Verwenden Sie für den aktuellen Status UO.Connected() anstelle eines Datums ungleich Null.
- Die Uhren werden von der lokalen Uhr des Computers übernommen. Die Differenz multipliziert mit 86400 ergibt Kalendersekunden; Das Ändern der Uhr/Zeitzone kann die Ergebnisse verfälschen. Verwenden Sie für Zeitüberschreitungen den monotonen Timer(). Einzelne Aufrufe bilden keinen atomaren Snapshot; Die gleiche Markierung ist keine eindeutige ID-Verbindung.
- UO.Wait dauert Millisekunden. Automatische Pause bei Verbindungsverlust und manuelle Pause verzögern die Ausführung von Beispielen: Die Timeout-Prüfung wird erst fortgesetzt, nachdem die Pause entfernt wurde. Diese Befehle heben die Pause nicht auf und aktivieren keine automatische Wiederherstellung der Verbindung.
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.DisconnectedTime();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Parameter und Ablauf:
- CompletedConnectionSeconds() gibt Sekunden zurück oder -1, wenn keine abgeschlossene Verbindung besteht oder sich die Eingabe zwischen den Lesevorgängen geändert hat. 86400 – Sekunden pro Tag. Nur das letzte Eingabe-/Unterbrechungspaar wird neu berechnet; Die Funktion fasst nicht den Verlauf aller Sitzungen zusammen.
- UO.Wait dauert Millisekunden. Automatische Pause bei Verbindungsverlust und manuelle Pause verzögern die Ausführung von Beispielen: Die Timeout-Prüfung wird erst fortgesetzt, nachdem die Pause entfernt wurde. Diese Befehle heben die Pause nicht auf und aktivieren keine automatische Wiederherstellung der Verbindung.
var seconds = CompletedConnectionSeconds();
if (Truth(seconds >= 0))
{
UO.AddToSystemJournal("Completed connection seconds: " + Convert.ToString(seconds));
}
dynamic CompletedConnectionSeconds()
{
var login = UO.ConnectedTime();
var loss = UO.DisconnectedTime();
if (Truth(login == 0) || Truth(loss < login) || Truth(UO.Connected()))
{
return -1;
}
if (Truth(UO.ConnectedTime() != login))
{
return -1;
}
return (loss - login) * 86400.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:
- Wenn die automatische Pause aktiviert ist, wird dieser Controller sofort beendet; Um offline arbeiten zu können, muss es vorher ausgeschaltet werden. Nach UO.Wait(1000) offline und der vorherigen Pausenmarke werden erneut überprüft. Connect garantiert keinen Erfolg und ersetzt nicht die Einstellung für die automatische Wiederverbindung.
- UO.Wait dauert Millisekunden. Automatische Pause bei Verbindungsverlust und manuelle Pause verzögern die Ausführung von Beispielen: Die Timeout-Prüfung wird erst fortgesetzt, nachdem die Pause entfernt wurde. Diese Befehle heben die Pause nicht auf und aktivieren keine automatische Wiederherstellung der Verbindung.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
if (Truth(UO.GetPauseScriptOnDisconnectStatus()))
{
return null;
}
if (Truth(UO.Connected()))
{
return null;
}
var loss = UO.DisconnectedTime();
await Delay(1000);
if (!(Truth(UO.Connected())) && Truth(UO.DisconnectedTime() == loss))
{
UO.Connect();
}
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;Parameter und Ablauf:
- Der Vergleich mit previousLoss stellt einen Break Even fest, nachdem bereits ein Wiedereintritt stattgefunden hat. 30 Sekunden begrenzen die Überwachung, während das Skript ausgeführt wird, WaitAsync(250) gibt den Thread zwischen Überprüfungen frei. Mehrere Unterbrechungen können zu einer Benachrichtigung zusammengefasst werden.
- UO.Wait dauert Millisekunden. Automatische Pause bei Verbindungsverlust und manuelle Pause verzögern die Ausführung von Beispielen: Die Timeout-Prüfung wird erst fortgesetzt, nachdem die Pause entfernt wurde. Diese Befehle heben die Pause nicht auf und aktivieren keine automatische Wiederherstellung der Verbindung.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
async public Task<object?> RunScenarioAsync()
{
var previousLoss = UO.DisconnectedTime();
var started = Environment.TickCount;
while (Truth(Environment.TickCount - started < 30.0))
{
if (Truth(UO.DisconnectedTime() != previousLoss))
{
UO.AddToSystemJournal("A connection loss occurred; check the session");
return null;
}
await Delay(250);
}
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: Keine Parameter.
Ergebnis: dynamic / Any.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.UpdateConnectionState:UpdateConnectionState().
Interner Implementierungscode; kein eigenständiges Skript.
case "disconnectedtime":
UpdateConnectionState();
return new InjectionValue(state.DisconnectedTime.ToOADate());Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.GameServerIPString();Liest die konfigurierte Serveradresse aus den globalen Einstellungen des Clients.
Es gibt keine Parameter.
string – Settings.GlobalSettings.IP oder eine leere Zeichenfolge, wenn kein Wert vorhanden ist.
- GameServerAddress in der aktuellen Bridge liest die globale Einstellung IP. Hierbei handelt es sich weder um eine DNS/Netzwerk-Anfrage, noch wird die Adresse des tatsächlichen Peers überprüft. Eine Managersitzung kann über eigene Verbindungsparameter verfügen.
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.GameServerIPString();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Parameter und Ablauf:
- Die aktuelle globale Einstellung IP wird zurückgegeben.
var address = UO.GameServerIPString();
UO.Print(address);Parameter und Ablauf:
- Ein leerer Wert weist auf keine Konfiguration und keinen gemessenen Netzwerkfehler hin.
return RunScenario();
object? RunScenario()
{
var address = UO.GameServerIPString();
if (Truth(Len(address) == 0))
{
UO.Print("no configured address");
}
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 Variable speichert die beim ersten Aufruf erhaltene Zeichenfolge.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
async public Task<object?> RunScenarioAsync()
{
var address = UO.GameServerIPString();
await Delay(100);
UO.Print(address);
return null;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
}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.GameServerAddress:bridge.GameServerAddress.
Interner Implementierungscode; kein eigenständiges Skript.
case "gameserveripstring": return new InjectionValue(bridge.GameServerAddress);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.GetCharsListForShard();Gibt die Charakternamen des aktuellen Shards zurück, die dem Client bekannt sind.
Es gibt keine Parameter.
Array von Strings. Es sind keine Namen bekannt und das aktuelle Zeichen ist ein leeres Array.
- Die Manager-Sitzung lautet SessionControl.Characters. Im Standalone-Modus wird LastCharacterManager zuerst für Konto/Server verwendet; wenn die Liste leer ist, lesen Sie LoginScene.Zeichen ohne leere Namen; dann wird der aktuelle Player.Name als einziges Element verwendet.
- Dies sind lokal bekannte Namen; Der Befehl fordert keine vollständige Liste vom Server an und garantiert nicht die Aktualität des Caches.
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.GetCharsListForShard();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Parameter und Ablauf:
- Die Schleife arbeitet mit einem tatsächlichen Array bekannter Namen.
var names = UO.GetCharsListForShard();
for (int i = (int)(0); i <= ArrayLength(names)-1; i += (int)(1))
{
UO.Print(names[i]);
}
int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;Parameter und Ablauf:
- Der Index 0 wird nur für ein nicht leeres Array verwendet.
return RunScenario();
object? RunScenario()
{
var names = UO.GetCharsListForShard();
if (Truth(ArrayLength(names) > 0))
{
UO.Print(names[0]);
}
return null;
}
int ArrayLength(object? value) => value is System.Array array ? array.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 Listengröße gibt nicht die Anzahl der Kontoslots auf dem Server an.
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 names = UO.GetCharsListForShard();
UO.Print(Convert.ToString(ArrayLength(names)));
return null;
}
int ArrayLength(object? value) => value is System.Array array ? array.Length : 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: dynamic / Any.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.StringArray:StringArray(bridge.GetCharactersForCurrentShard()). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetCharactersForCurrentShard:bridge.GetCharactersForCurrentShard().
Interner Implementierungscode; kein eigenständiges Skript.
case "getcharslistforshard": return StringArray(bridge.GetCharactersForCurrentShard());Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.GetPing();
int UO.GetPing(object? timeout);Liest die Antwortverzögerung des Spielservers. Ohne Argument wird die letzte Dimension verwendet; mit einer Zeitüberschreitung fordert eine neue Antwort an.
-
timeout– Timeout / timeoutMS – Wartezeit für einen Versuch in Millisekunden, konvertiert in int. Ein negativer Wert ist auf Null begrenzt. Mit 0 kann die Anfrage gesendet werden, es wird jedoch keine Antwort erwartet; Es ist keine unendliche Auszeit.
int, Millisekunden. Wert >= 0 – Messung; 0 ms sind ebenfalls akzeptabel. -1 – keine Messung: Bei einem Formular mit einem Argument wurde die Anfrage nicht abgeschlossen oder die Antwort kam nicht rechtzeitig an. Das ist NICHT bool; 0 kann nicht als Misserfolg und -1 als Erfolg gewertet werden.
- GetPing() sendet nichts und liest sofort das letzte ServerPing. Der alte Wert allein beweist nicht, dass die Verbindung jetzt funktioniert. Dies ist die letzte Serverechomessung, nicht der geglättete/Backup-TCP-Indikator-Ping und nicht der ICMP-Ping (Host). GetPing(Timeout) wartet auf eine neue Antwort und liest dann die letzte Servermessung.
- Durch Warten wird das aufrufende Skript verzögert, anstatt die Spielaktion zu bestätigen. Der Befehl stellt keine erneute Verbindung her und ändert die Netzwerkeinstellungen nicht. Der Server antwortet möglicherweise nicht auf Echo: Ein Fehler allein beweist nicht, dass die Verbindung unterbrochen wurde. Der Zeitpunkt hängt auch von der Ablaufplanung ab; Rufen Sie nicht für jeden Frame eine aktive Prüfung auf. Das Anhalten des Skripts unterbricht die Wartezeit.
- UO.GetPing · UO.CheckLag · UO.IsOnline
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.GetPing();
UO.Print("GetPing: " + Convert.ToString(result));Parameter und Ablauf:
- Cache ohne neue Netzwerkanfrage lesen. Das Beispiel wählt 50 oder 200 ms aus, um bei einem Schwellenwert von 250 ms auf das Skript selbst zu warten. Die unbekannte Dimension wird separat verarbeitet. Bei diesen Zahlen handelt es sich um eine Beispieleinstellung und nicht um einen universellen Servergrenzwert.
var pingMs = UO.GetPing();
if (Truth(pingMs < 0))
{
UO.Print("No server latency sample");
return null;
}
var delayMs = 50;
if (Truth(pingMs > 250))
{
delayMs = 200;
}
await Delay(delayMs);
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;Parameter und Ablauf:
- 1000 – maximale Wartezeit auf eine neue Antwort in Millisekunden. Bei -1 endet der Vorgang. Bei erfolgreicher Messung wird das Ausblenden angefordert; Eine Echoantwort ist kein Beweis für den erfolgreichen Einsatz der Fertigkeit.
return RunScenario();
object? RunScenario()
{
var pingMs = UO.GetPing(1000);
if (Truth(pingMs == -1))
{
UO.Print("No fresh server response");
return null;
}
UO.UseSkill("Hiding");
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:
- MeanPing(Samples, timeoutMs) vollständig angezeigt: 3 Versuche bei 500 ms; erfolglose Messungen werden aus der Mittelung ausgeschlossen. Wenn es keine erfolgreichen gibt, wird -1 zurückgegeben. Proben begrenzt auf 1–10; UO.Wait(100) reduziert die Anfragerate zwischen Versuchen.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
async public Task<object?> RunScenarioAsync()
{
var meanMs = await MeanPing(3, 500);
if (Truth(meanMs < 0))
{
UO.Print("No successful samples");
}
else
{
UO.Print("Measured mean, ms: " + Convert.ToString(meanMs));
}
return null;
}
async Task<dynamic> MeanPing(dynamic samples, dynamic timeoutMs)
{
if (Truth(samples < 1) || Truth(samples > 10))
{
return -1;
}
var total = 0;
var count = 0;
for (int i = (int)(1); i <= samples; i += (int)(1))
{
var current = UO.GetPing(timeoutMs);
if (Truth(current >= 0))
{
total = total + current;
count = count + 1;
}
await Delay(100);
}
if (Truth(count == 0))
{
return -1;
}
return total / count;
}
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: Keine Parameter.
Ergebnis: int / Integer.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.GetPing. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetPing:bridge.GetPing().
Interner Implementierungscode; kein eigenständiges Skript.
public int GetPing() => bridge.GetPing();Parameter: timeout (Any)
Ergebnis: int / Integer.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.GetPing. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetPing:bridge.GetPing(Math.Max(0, NumberConversions.ToInt(timeout))). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(timeout).
Interner Implementierungscode; kein eigenständiges Skript.
public int GetPing(InjectionValue timeout) => bridge.GetPing(Math.Max(0, NumberConversions.ToInt(timeout)));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.IsOnline();Überprüft, ob sich die aktuelle Sitzung in der Spielwelt befindet und ob ihre Spielverbindung geöffnet ist. Verwenden Sie es vor einer Charakteraktion oder während Sie auf den Eintritt warten.
Es gibt keine Parameter.
int. 1 - es gibt gleichzeitig einen Spieler, eine geladene Karte und einen aktiven Spielsockel; sonst 0. Ein geöffnetes Client-Fenster, eine Zeichenliste oder eine TCP-Verbindung in der Anmeldephase bedeuten nicht 1. Numerisches Flag int: 1 (Bedingung erfüllt), 0 (Bedingung nicht erfüllt). Dies ist ein numerisches Flag: in C# Ergebnis prüfen != 0 oder Ergebnis == 0. Direkter Vergleich von int mit true/false und if (Ergebnis) ist nicht zulässig.
Das Ergebnis des Befehls ist ein numerisches Flag: 1 bedeutet eine erfüllte Bedingung, 0 bedeutet eine nicht erfüllte Bedingung. Nach var result = command(...) prüfen, ob (result != 0) oder if (result == 0). Speichern Sie das Ergebnis eines Aufrufs: Ein wiederholter Aufruf kann die Aktion erneut ausführen oder den Status lesen, der sich bereits geändert hat.
- Es gibt keine Parameter: serial, type, Charaktername und IP können nicht übertragen werden. UO.Online(), UO.Connected() und UO.IsOnline() überprüfen dasselbe. Dies ist der Status des jeweiligen Sitzungseigentümers, nicht eines anderen Managerprofils.
- Der Befehl liest nur den lokalen Status. Es sendet keinen Ping, stellt keine Verbindung her, pausiert nicht und prüft nicht die Verfügbarkeit des Internets. Nach dem Lesen kann sich der Zusammenhang ändern; 1 garantiert nicht den Erfolg der nächsten Aktion.
- UO.Wait dauert Millisekunden. Automatische Pause bei Verbindungsverlust und manuelle Pause verzögern die Ausführung von Beispielen: Die Timeout-Prüfung wird erst fortgesetzt, nachdem die Pause entfernt wurde. Diese Befehle heben die Pause nicht auf und aktivieren keine automatische Wiederherstellung der Verbindung.
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.IsOnline();
UO.Print("IsOnline: " + Convert.ToString(result));Parameter und Ablauf:
- false entspricht 0. Return beendet Main zu UseSkill. Verstecken ist der einzige Parameter von UseSkill, dem Namen der Fertigkeit. Bei 1 fordert das Skript nur zur Nutzung des Skills auf; Das Ergebnis hängt vom Status des Charakters und des Servers ab.
- Der Befehl liest nur den lokalen Status. Es sendet keinen Ping, stellt keine Verbindung her, pausiert nicht und prüft nicht die Verfügbarkeit des Internets. Nach dem Lesen kann sich der Zusammenhang ändern; 1 garantiert nicht den Erfolg der nächsten Aktion.
if (Truth(Truth(UO.IsOnline()) == false))
{
return null;
}
UO.UseSkill("Hiding");
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:
- Beim Vergleich mit 0 wird die aktuelle Verbindung überprüft, nicht die Einstellung für die automatische Wiederverbindung. Connect ohne Argumente verwendet die gespeicherten Einstellungen und wartet nicht, bis die Anmeldung abgeschlossen ist. Das Wiederholen eines Befehls während einer bereits gestarteten Anmeldung sollte keine zweite Sitzung erzeugen.
- Der Befehl liest nur den lokalen Status. Es sendet keinen Ping, stellt keine Verbindung her, pausiert nicht und prüft nicht die Verfügbarkeit des Internets. Nach dem Lesen kann sich der Zusammenhang ändern; 1 garantiert nicht den Erfolg der nächsten Aktion.
return RunScenario();
object? RunScenario()
{
if (Truth(UO.IsOnline() == 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;Parameter und Ablauf:
- WaitForWorld(timeoutMs) ist eine vollständig angezeigte benutzerdefinierte Funktion, kein integrierter Befehl. 5000 – Budget in ms, UO.Wait(50) – Prüfintervall. Ein negativer Wert ergibt false; 0 erlaubt nur eine vorgefertigte Welt. Timer misst Sekunden, daher wird die Differenz mit 1000 multipliziert. Autopause muss vorher ausgeschaltet werden, andernfalls wird Main beendet. Die Funktion ruft Connect nicht auf und bricht die gestartete Eingabe nicht ab, wenn die Zeit abgelaufen ist.
- Der Befehl liest nur den lokalen Status. Es sendet keinen Ping, stellt keine Verbindung her, pausiert nicht und prüft nicht die Verfügbarkeit des Internets. Nach dem Lesen kann sich der Zusammenhang ändern; 1 garantiert nicht den Erfolg der nächsten Aktion.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
async public Task<object?> RunScenarioAsync()
{
if (Truth(UO.GetPauseScriptOnDisconnectStatus()))
{
return null;
}
if (Truth(await WaitForWorld(5000)))
{
UO.UseSkill("Hiding");
}
return null;
}
async Task<dynamic> WaitForWorld(dynamic timeoutMs)
{
if (Truth(timeoutMs < 0))
{
return false;
}
var started = Environment.TickCount;
while (!(Truth(UO.IsOnline())))
{
if (Truth((Environment.TickCount - started) * 1000.0 >= timeoutMs))
{
return false;
}
await Delay(50);
}
return true;
}
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: Keine Parameter.
Ergebnis: int / Integer.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.IsOnline. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.IsOnline:bridge.IsOnline().
Interner Implementierungscode; kein eigenständiges Skript.
public int IsOnline() => bridge.IsOnline();Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.Online();Überprüft, ob sich die aktuelle Sitzung in der Spielwelt befindet und ob ihre Spielverbindung geöffnet ist. Verwenden Sie es vor einer Charakteraktion oder während Sie auf den Eintritt warten.
Es gibt keine Parameter.
int. 1 - es gibt gleichzeitig einen Spieler, eine geladene Karte und einen aktiven Spielsockel; sonst 0. Ein geöffnetes Client-Fenster, eine Zeichenliste oder eine TCP-Verbindung in der Anmeldephase bedeuten nicht 1. Numerisches Flag int: 1 (Bedingung erfüllt), 0 (Bedingung nicht erfüllt). Dies ist ein numerisches Flag: in C# Ergebnis prüfen != 0 oder Ergebnis == 0. Direkter Vergleich von int mit true/false und if (Ergebnis) ist nicht zulässig.
Das Ergebnis des Befehls ist ein numerisches Flag: 1 bedeutet eine erfüllte Bedingung, 0 bedeutet eine nicht erfüllte Bedingung. Nach var result = command(...) prüfen, ob (result != 0) oder if (result == 0). Speichern Sie das Ergebnis eines Aufrufs: Ein wiederholter Aufruf kann die Aktion erneut ausführen oder den Status lesen, der sich bereits geändert hat.
- Es gibt keine Parameter: serial, type, Charaktername und IP können nicht übertragen werden. UO.Online(), UO.Connected() und UO.IsOnline() überprüfen dasselbe. Dies ist der Status des jeweiligen Sitzungseigentümers, nicht eines anderen Managerprofils.
- Der Befehl liest nur den lokalen Status. Es sendet keinen Ping, stellt keine Verbindung her, pausiert nicht und prüft nicht die Verfügbarkeit des Internets. Nach dem Lesen kann sich der Zusammenhang ändern; 1 garantiert nicht den Erfolg der nächsten Aktion.
- UO.Wait dauert Millisekunden. Automatische Pause bei Verbindungsverlust und manuelle Pause verzögern die Ausführung von Beispielen: Die Timeout-Prüfung wird erst fortgesetzt, nachdem die Pause entfernt wurde. Diese Befehle heben die Pause nicht auf und aktivieren keine automatische Wiederherstellung der Verbindung.
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.Online();
UO.Print("Online: " + Convert.ToString(result));Parameter und Ablauf:
- false entspricht 0. Return beendet Main zu UseSkill. Verstecken ist der einzige Parameter von UseSkill, dem Namen der Fertigkeit. Bei 1 fordert das Skript nur zur Nutzung des Skills auf; Das Ergebnis hängt vom Status des Charakters und des Servers ab.
- Der Befehl liest nur den lokalen Status. Es sendet keinen Ping, stellt keine Verbindung her, pausiert nicht und prüft nicht die Verfügbarkeit des Internets. Nach dem Lesen kann sich der Zusammenhang ändern; 1 garantiert nicht den Erfolg der nächsten Aktion.
if (Truth(Truth(UO.Online()) == false))
{
return null;
}
UO.UseSkill("Hiding");
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:
- Beim Vergleich mit 0 wird die aktuelle Verbindung überprüft, nicht die Einstellung für die automatische Wiederverbindung. Connect ohne Argumente verwendet die gespeicherten Einstellungen und wartet nicht, bis die Anmeldung abgeschlossen ist. Das Wiederholen eines Befehls während einer bereits gestarteten Anmeldung sollte keine zweite Sitzung erzeugen.
- Der Befehl liest nur den lokalen Status. Es sendet keinen Ping, stellt keine Verbindung her, pausiert nicht und prüft nicht die Verfügbarkeit des Internets. Nach dem Lesen kann sich der Zusammenhang ändern; 1 garantiert nicht den Erfolg der nächsten Aktion.
return RunScenario();
object? RunScenario()
{
if (Truth(UO.Online() == 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;Parameter und Ablauf:
- WaitForWorld(timeoutMs) ist eine vollständig angezeigte benutzerdefinierte Funktion, kein integrierter Befehl. 5000 – Budget in ms, UO.Wait(50) – Prüfintervall. Ein negativer Wert ergibt false; 0 erlaubt nur eine vorgefertigte Welt. Timer misst Sekunden, daher wird die Differenz mit 1000 multipliziert. Autopause muss vorher ausgeschaltet werden, andernfalls wird Main beendet. Die Funktion ruft Connect nicht auf und bricht die gestartete Eingabe nicht ab, wenn die Zeit abgelaufen ist.
- Der Befehl liest nur den lokalen Status. Es sendet keinen Ping, stellt keine Verbindung her, pausiert nicht und prüft nicht die Verfügbarkeit des Internets. Nach dem Lesen kann sich der Zusammenhang ändern; 1 garantiert nicht den Erfolg der nächsten Aktion.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
async public Task<object?> RunScenarioAsync()
{
if (Truth(UO.GetPauseScriptOnDisconnectStatus()))
{
return null;
}
if (Truth(await WaitForWorld(5000)))
{
UO.UseSkill("Hiding");
}
return null;
}
async Task<dynamic> WaitForWorld(dynamic timeoutMs)
{
if (Truth(timeoutMs < 0))
{
return false;
}
var started = Environment.TickCount;
while (!(Truth(UO.Online())))
{
if (Truth((Environment.TickCount - started) * 1000.0 >= timeoutMs))
{
return false;
}
await Delay(50);
}
return true;
}
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: Keine Parameter.
Ergebnis: int / Integer.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases [Online]. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.IsOnline:bridge.IsOnline().
Der Aufruf führt den gespeicherten Handler-Delegate aus. Die Registrierungsmethode erzeugt ihn beim Aufbau der API.
Interner Implementierungscode; kein eigenständiges Skript.
() => bridge.IsOnline()API-Erstellung: Diese Funktionen registrieren die API. Sie werden nicht bei jedem Befehlsaufruf erneut ausgeführt.
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.Resend();Sendet eine Anfrage zur Neusynchronisierung der Welt.
Es gibt keine Parameter.
void – kein Wert. Rufen Sie eine separate Leitung an; Der Abschluss bestätigt nicht die Aktion des Servers.
- Resync sendet NetClient.Socket.Send_Resync im Spielthread. Hierbei handelt es sich um eine Aktualisierungsanforderung, nicht um eine erneute Verbindung oder um eine Bestätigung, dass Daten empfangen wurden.
- In den Beispielen gibt UO.Wait nur eine Skriptpause an; Das Ende der Pause beweist nicht, dass der Server die Anfrage abgeschlossen hat.
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.Resend");
UO.Resend();Parameter und Ablauf:
- Sendet eine Anfrage zur Neusynchronisierung der Welt.
UO.Resend();Parameter und Ablauf:
- Resync sendet NetClient.Socket.Send_Resync im Spielthread. Hierbei handelt es sich um eine Aktualisierungsanforderung, nicht um eine erneute Verbindung oder um eine Bestätigung, dass Daten empfangen wurden.
return RunScenario();
object? RunScenario()
{
if (Truth(UO.IsOnline()))
{
UO.Resend();
}
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:
- In den Beispielen gibt UO.Wait nur eine Skriptpause an; Das Ende der Pause beweist nicht, dass der Server die Anfrage abgeschlossen hat.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
UO.Resend();
UO.Wait(500);
UO.Print(UO.GetX());
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.Resync:bridge.Resync().
Interner Implementierungscode; kein eigenständiges Skript.
case "resend": bridge.Resync(); break;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.ShardName();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.ShardName();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Parameter und Ablauf:
- Liest den Shard-Namen.
var value = UO.ShardName();
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.ShardName();
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.ShardName();
UO.Wait(500);
var after = UO.ShardName();
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 · 繁體中文 · 日本語 · 한국어
dynamic UO.ShardPath();Liest den Pfad des aktuellen Profils.
Es gibt keine Parameter.
string – Text des Bridge-Feldes.CurrentProfilePath; Ohne verfügbare Daten ist ein leerer String möglich. Dies ist kein Verbindungszeichen und kein numerisches ID.
- ExecuteClientApiCompatibility gibt Bridge.CurrentProfilePath 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.ShardPath();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Parameter und Ablauf:
- Liest den Pfad des aktuellen Profils.
var value = UO.ShardPath();
UO.Print(value);Parameter und Ablauf:
- ExecuteClientApiCompatibility gibt Bridge.CurrentProfilePath zurück, ohne das Profil oder die Serverauswahl zu ändern.
return RunScenario();
object? RunScenario()
{
var value = UO.ShardPath();
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.ShardPath();
UO.Wait(500);
var after = UO.ShardPath();
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.CurrentProfilePath:bridge.CurrentProfilePath.
Interner Implementierungscode; kein eigenständiges Skript.
case "shardpath":
case "clientprofilepath": return new InjectionValue(bridge.CurrentProfilePath);ClassicUO — Bad Newbie & C# Scripts IDE