DE UO Topic magic - 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
Zauber, Fähigkeiten und Bewegung mit Magie. Für gezieltes Handeln legen Sie vorab das Ziel fest und prüfen Sie die Einsatzbedingungen.
Vollständigen Katalog und Beispiele öffnen
| Thema | Befehle und Erklärungen |
|---|---|
| Cast | UO.Cast |
| CastToObject | UO.CastToObject |
| CastAbility | UO.CastAbility |
| Active Spell Ability | UO.IsActiveSpellAbility |
| Spell Timers | UO.TicksSpell |
UO.Cast · UO.CastToObject · UO.CastAbility · UO.IsActiveSpellAbility · UO.TicksSpell
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
UO.CancelWaitTarget();
if (Truth(UO.Cast("Cure")))
{
UO.Print("Choose the character with the spell cursor");
}
else
{
UO.Print("Cure request rejected");
}
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 accepted = UO.CastToObject("Heal", "self");
UO.Print(Convert.ToString(accepted));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.AddGate(object? bookSerial);-
bookSerialist ein Bezeichnerwert, den das kompatible Skript als Legacy-Listeneintrag speichert. Zur aktuellen Laufzeit wird der Wert in eine Zeichenfolge serialisiert; Der Befehl prüft nicht, ob ein Objekt in der Welt existiert.
void. Das Team bestätigt weder die Verfügbarkeit des Buches noch die Erstellung des Spieleportals.
- Der Wert wird zur Liste
AddGatedes aktuellen Laufzeitstatus hinzugefügt. In ClassicUO löst diese Kompatibilitätsliste keine Spielaktion aus und es gibt keinen dokumentierten öffentlichen Getter zum Lesen.
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.AddGate");
UO.AddGate("0x40012345");Parameter und Ablauf:
- Speichern Sie die ID als Altdaten, ohne das Tor zu öffnen.
UO.AddGate("0x40012345");2. Verwenden Sie den Wert aus der Zeichenfolge, die an ein kompatibles Skript übergeben wurde. - Skriptfunktion
Parameter und Ablauf:
- Verwenden Sie den Wert aus der Zeichenfolge, die an ein kompatibles Skript übergeben wurde.
return RunScenario();
object? RunScenario()
{
var bookSerial = "0x40012345";
UO.AddGate(bookSerial);
return null;
}Parameter und Ablauf:
- Schreiben Sie den Wert in die Laufzeitliste AddGate.
- Der Anruf speichert Kompatibilitätsdaten; Er benutzt das Buch nicht auf der Welt.
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()
{
RememberGateBook("0x40012345");
return null;
}
void RememberGateBook(dynamic bookSerial)
{
UO.AddGate(bookSerial);
}
}C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.
Parameter: bookSerial (Any)
Ergebnis: void / Unit.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::LegacyList:LegacyList(name). -
InjectionScript.Runtime.InjectionValue.ToString:value.ToString().
Interner Implementierungscode; kein eigenständiges Skript.
case "adddir":
case "addfindlist":
case "addgate":
case "addrecall":
case "addstep":
LegacyList(name).Add(string.Join("|", arguments.Select(value => value.ToString())));
break;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.AddRecall(object? bookSerial);-
bookSerialist ein Bezeichnerwert, den das kompatible Skript als Legacy-Listeneintrag speichert. Die Laufzeit serialisiert den übergebenen Wert in einen String.
void. Der Anruf gibt kein Ergebnis zurück und bestätigt nicht das Vorhandensein des Buches.
- Der Wert wird zur Liste
AddRecalldes aktuellen Laufzeitstatus hinzugefügt. In ClassicUO sendet diese Kompatibilitätsliste selbst keine Spielbefehle und verfügt nicht über einen dokumentierten öffentlichen Getter zum Lesen.
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.AddRecall");
UO.AddRecall("0x40012345");1. Speichern Sie den Wert als Kompatibilitätsdaten, führen Sie Recall nicht aus. - direktes Drehbuch
Parameter und Ablauf:
- Speichern Sie den Wert als Kompatibilitätsdaten, führen Sie Recall nicht aus.
UO.AddRecall("0x40012345");Parameter und Ablauf:
- Übergeben Sie den Bezeichner über eine String-Variable.
return RunScenario();
object? RunScenario()
{
var bookSerial = "0x40012345";
UO.AddRecall(bookSerial);
return null;
}3. Jeder Aufruf fügt einen separaten Eintrag zu AddRecall der aktuellen Laufzeit hinzu. - Skriptklasse
Parameter und Ablauf:
- Jeder Aufruf fügt einen separaten Eintrag zu AddRecall der aktuellen Laufzeit hinzu.
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.AddRecall("0x40012345");
UO.AddRecall("0x40012346");
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: bookSerial (Any)
Ergebnis: void / Unit.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::LegacyList:LegacyList(name). -
InjectionScript.Runtime.InjectionValue.ToString:value.ToString().
Interner Implementierungscode; kein eigenständiges Skript.
case "adddir":
case "addfindlist":
case "addgate":
case "addrecall":
case "addstep":
LegacyList(name).Add(string.Join("|", arguments.Select(value => value.ToString())));
break;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.Cast(object? spellName);Fordert die Verwendung eines Zauberspruchs mit Namen an. Genau ein Parameter: spellName, zum Beispiel UO.Cast("Heal"). Das Ziel wird separat ausgewählt: mit der Maus über das erscheinende Fadenkreuz oder über WaitTargetObject vor Cast. Das Akzeptieren einer Anfrage bestätigt keinen erfolgreichen Effekt.
-
spellName– Erforderliche Zeile – der englische Name des Zaubers in Anführungszeichen: „Heal“, „Cure“, „Greater Heal“. Namen werden nicht zusammen mit der Schnittstelle übersetzt. Das Wörterbuch erkennt auch integrierte Aliase und Buchstabierwörter. Die numerischen Werte ID, einschließlich der Zeichenfolge „29“, Ziel, Entfernung, Bekanntheit, maxZ und Warten sind keine Cast-Parameter. Alle Namen und Schulen.
int: 1/true – der Client hat die Anfrage angenommen; 0/false – der Name wird nicht erkannt oder die Anfrage wird lokal abgelehnt. Sie können if UO.Cast("Heal") { ... } schreiben oder mit 1/true vergleichen. Dabei handelt es sich nicht um ID-Zauber oder Heilungs-/Schadensnachweise. Ein fehlendes oder zusätzliches Argument verursacht einen Fehler. Der Befehl erwartet nicht das Zielen und die Vollendung des Zaubers.
- Einzelform: UO.Cast(spellName). Es gibt keine zweiten oder nachfolgenden Argumente. Die Suche nach einem Ziel, das Vorbereiten einer Antwort, das Warten und das Löschen werden durch separate Befehle ausgeführt.
- Um manuell auszuwählen, löschen Sie Ihre vorherige Warteschlange CancelWaitTarget, rufen Sie Cast auf und klicken Sie mit dem Fadenkreuz auf das gewünschte Objekt. Cast selbst löscht die Warteschlange nicht: Das Skript hätte es im Voraus vorbereiten können.
- Rufen Sie für ein automatisches Ziel zuerst WaitTargetObject(serial/alias) und dann Cast(name) auf. Mit diesem Befehl können Sie auf das schnelle Ziel des Servers reagieren. Bereiten Sie für Zauber ohne Wirkungsbereich keine Antwort vor.
- Der Server bestimmt die Verfügbarkeit, Ressourcen, gültiges Ziel, Reichweite und Wirkung des Zaubers. Ein positives Ergebnis bestätigt lediglich die lokale Annahme der Anfrage.
- Die vorbereitete Warteschlange bleibt möglicherweise unbeaufsichtigt, wenn der Server ausfällt. Entfernen Sie es CancelWaitTarget nach einer begrenzten Wartezeit oder einem lokalen Fehler. Führen Sie keine anderen Skripte parallel zum Ziel aus.
- Eine akzeptierte Anfrage aktualisiert TicksSpell. Cast wartet nicht auf Animation, Heilung oder Veränderung HP. Der Katalog ID erläutert das interne Protokoll, ersetzt jedoch nicht den Namen im Argument.
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.Cast("Cure");
UO.Print("Cast: " + Convert.ToString(result));Parameter und Ablauf:
- Heilung ist das einzige Argument für Cast. Wählen Sie nach dem Start den Charakter mit dem Spielvisier aus. Überprüfen Sie den Serverausfall und das Ergebnis im Spiel.
UO.CancelWaitTarget();
if (Truth(UO.Cast("Cure")))
{
UO.Print("Choose the character with the spell cursor");
}
else
{
UO.Print("Cure request rejected");
}
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:
- self – Argument WaitTargetObject; Heilen ist das einzige Argument für Cast. 3000 – drei Sekunden zum Zielen in diesem Beispiel, keine Garantie für den Abschluss der Heilung. Löscht abschließend die verbleibende Antwort und bei einem Fehler.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
UO.CancelWaitTarget();
try
{
UO.WaitTargetObject("self");
if (Truth(UO.Cast("Heal")))
{
await Delay(3000);
}
}
finally
{
UO.CancelWaitTarget();
}
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:
- spellName, Ziel, cleanupDelayMs – Parameter Ihrer Funktion CastAtObject, keine Überladung UO.Cast. Intern akzeptiert Cast nur spellName. ASC wandelt die Zeichenfolge ID in eine Zahl um; 4000 – Verzögerung beim Löschen der Warteschlange. true bedeutet die Annahme der Anfrage, nicht den Erfolg der Behandlung.
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 target = Asc(UO.GetSerial("lasttarget"), 0);
if (Truth(await CastAtObject("Greater Heal", target, 4000)))
{
UO.Print("Request sent; verify healing in the game");
}
return null;
}
async Task<dynamic> CastAtObject(dynamic spellName, dynamic target, dynamic cleanupDelayMs)
{
if (!(Truth(UO.Connected())) || Truth(UO.Dead()) || Truth(target <= 0) || !(Truth(UO.Exists(target))))
{
return false;
}
dynamic accepted = false;
UO.CancelWaitTarget();
try
{
UO.WaitTargetObject(target);
accepted = UO.Cast(spellName);
if (Truth(accepted))
{
await Delay(cleanupDelayMs);
}
}
finally
{
UO.CancelWaitTarget();
}
return accepted;
}
int Asc(object? value, int fallback = 0)
{
string text = Convert.ToString(value) ?? "";
if (text.StartsWith("0x", StringComparison.OrdinalIgnoreCase))
return int.TryParse(text[2..], System.Globalization.NumberStyles.HexNumber, System.Globalization.CultureInfo.InvariantCulture, out int hex) ? hex : fallback;
return int.TryParse(text, out int number) ? number : fallback;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.
Parameter: spellName (String)
Ergebnis: int / Integer.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.Cast. -
InjectionScript.Runtime.NumberConversions.TryStr2Int:NumberConversions.TryStr2Int((spellName ?? string.Empty).Trim(), out _). -
InjectionScript.Runtime.InjectionApiUO.SystemMessage:SystemMessage("UO.Cast: use one spell name, for example UO.Cast(\"Heal\")."). -
InjectionScript.Runtime.InjectionApiUO.CastCore:CastCore(spellName).
Interner Implementierungscode; kein eigenständiges Skript.
public int Cast(string spellName)
{
if (NumberConversions.TryStr2Int((spellName ?? string.Empty).Trim(), out _))
{
SystemMessage("UO.Cast: use one spell name, for example UO.Cast(\"Heal\").");
return 0;
}
return CastCore(spellName) ? 1 : 0;
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.CastAbility(object? abilityId);Schaltet die aktuell ausgewählte Fähigkeit der aktuellen Waffe über UseAbility um: Durch erneutes Aufrufen einer bereits ausgewählten Fähigkeit wird diese deaktiviert.
-
abilityId– Fähigkeitsname oder Zahlenfolge, aufgelöst durch ResolveClassicUOAbilityId; der unbekannte Wert ergibt 0.
int 1 – der Client hat die aktuelle primäre/sekundäre Fähigkeit aufgerufen; 0 – kein Charakter, unbekannt ID oder die Fähigkeit passt nicht zur aktuellen Waffe.
- 1 beschreibt die Annahme einer Client-Anfrage und nicht einen erfolgreichen Treffer oder eine Abschreibung von Ressourcen durch den Server. ID, das nicht die aktuelle primäre/sekundäre Fähigkeit ist, gibt 0 zurück, selbst wenn es sich im Verzeichnis befindet.
- GameActions.UsePrimaryAbility/UseSecondaryAbility Überprüfen Sie das 0x80-Bit. Wenn das Bit deaktiviert ist, deaktivieren Sie die andere Option und senden Sie die ausgewählte Fähigkeit. Wenn die Funktion bereits aktiviert ist, senden Sie zum Deaktivieren ID 0. Dann wird das Bit umgeschaltet. Die Rückgabe von 1 bestätigt den Anruf an diesen Client-Zweig, einschließlich des Herunterfahrens.
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.CastAbility(UO.GetAbilityID("Armor Ignore"));
UO.Print("CastAbility: " + Convert.ToString(result));Parameter und Ablauf:
- Die Verfügbarkeit im Katalog ist unabhängig vom Waffen-Matching.
var id = UO.GetAbilityID("Armor Ignore");
if (Truth(id > 0))
{
var accepted = UO.CastAbility(id);
UO.Print(Convert.ToString(accepted));
}
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 Name wird zu ID aufgelöst und mit der aktuellen Waffe verglichen.
return RunScenario();
object? RunScenario()
{
var accepted = UO.CastAbility("Armor Ignore");
UO.Print(Convert.ToString(accepted));
return null;
}Parameter und Ablauf:
- Null liegt außerhalb des Verzeichnisses und gibt ohne Aktivierung 0 zurück.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
var accepted = UO.CastAbility(0);
UO.Print(Convert.ToString(accepted));
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: abilityId (Integer/String)
Ergebnis: int / Integer.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.UseAbility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.UseAbility:bridge.UseAbility(abilityId).
Interner Implementierungscode; kein eigenständiges Skript.
public int UseAbility(int abilityId) => bridge.UseAbility(abilityId);Parameter: abilityId (Integer/String)
Ergebnis: int / Integer.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.UseAbility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.ResolveAbility:bridge.ResolveAbility(abilityName). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.UseAbility:bridge.UseAbility(abilityId).
Interner Implementierungscode; kein eigenständiges Skript.
public int UseAbility(string abilityName)
{
int abilityId = bridge.ResolveAbility(abilityName);
return abilityId > 0 ? bridge.UseAbility(abilityId) : 0;
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.CastToObject(object? spellName, object? objID);Platziert ein wartendes Objekt als Ziel und sendet einen Zauber mit Namen oder Nummer ID.
-
spellName- string mit dem Namen des Zauberspruchs, einschließlich Unterstrich anstelle eines Leerzeichens, oder einer Zahl ID für Brücke.Cast. -
objID– Seriennummer des Objekts oder unterstützter Name von self/backpack/lasttarget/saved object; Numerische Zeichenfolgen und 0x-Zeichenfolgen werden zur Laufzeit aufgelöst.
int/boolean result 1 – der Client hat die Cast-Anfrage akzeptiert; 0 – Anfrage abgelehnt. Der Erfolg des Zaubers wird vom Server nicht bestätigt.
- Die Zeichenfolgenform geht durch CastAtTarget; Die numerische Form setzt WaitTargetObject, dann Bridge.Cast. Wenn Cast fehlschlägt, wird das ausstehende Ziel abgebrochen. Bei der Annahme wird ticksSpell aktualisiert.
- Bridge lehnt nicht positives spellId, keine Verbindung und totes Zeichen ab. Der Timer markiert das Senden, nicht das Ende des Wurfs; Das Ergebnis der Auswirkung auf das Objekt hängt vom Server ab.
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.CastToObject("Heal", "self");
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Parameter und Ablauf:
- Heal macht self zum Ziel des nächsten Server-Cursors.
var accepted = UO.CastToObject("Heal", "self");
UO.Print(Convert.ToString(accepted));Parameter und Ablauf:
- Die numerische Form übergibt ID 4 an den Client; 1 bedeutet das Senden einer Anfrage.
return RunScenario();
object? RunScenario()
{
var accepted = UO.CastToObject(4, UO.Self());
UO.Print(Convert.ToString(accepted));
return null;
}Parameter und Ablauf:
- Eine lokale Existenzprüfung hilft, die Verwendung des fehlenden lasttarget zu vermeiden.
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 target = UO.LastTarget();
if (Truth(UO.Exists(target)))
{
var accepted = UO.CastToObject("Greater Heal", target);
UO.Print(Convert.ToString(accepted));
}
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: spellName (Any), objID (Any)
Ergebnis: dynamic / Any.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.CastAtTarget:CastAtTarget(arguments[0], arguments[1]). -
InjectionScript.Runtime.InjectionApiUO.WaitTargetObject:WaitTargetObject(Arg(1)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(1). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Cast:bridge.Cast(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.Timer:Timer(). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.CancelTarget:bridge.CancelTarget().
Interner Implementierungscode; kein eigenständiges Skript.
case "casttoobject":
if (arguments[0].Kind == InjectionValueKind.String)
return CastAtTarget(arguments[0], arguments[1]) != 0 ? InjectionValue.True : InjectionValue.False;
WaitTargetObject(Arg(1));
int castAccepted = bridge.Cast(Arg(0));
if (castAccepted != 0)
{
ticksSpell = Timer();
return InjectionValue.True;
}
bridge.CancelTarget();
return InjectionValue.False;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.IsActiveSpellAbility(object? spellName);Überprüft, ob der Server den aktiven Status der ausgewählten Fähigkeit/des ausgewählten Zaubers gemeldet hat. Nützlich vor der Reaktivierung einer kanalisierten Fähigkeit. Es schaltet nichts ein, wirkt nicht und wählt kein Ziel aus.
-
spellName– Der einzige erforderliche Parameter: ein englischer Name aus dem Zauberkatalog oder das ganze ID. „Selbstvertrauen“ und 402 stehen beispielsweise für denselben Bushido-Zauber. Der Fall ist nicht wichtig; Unterstriche im Namen werden durch Leerzeichen ersetzt. Auch der Zahlenstrahl wird erkannt. Übergeben Sie nicht den Charakter ID, die Gegenstands- oder Fertigkeitsnummer type.
int: 1 – der Server hat den aktiven Status dieses ID gemeldet; 0 – es gibt derzeit keinen solchen aktiven Zustand. Überprüfen Sie in C# das numerische Ergebnis: if (UO.IsActiveSpellAbility(402) != 0) { ... }. Dies ist ein logisches Zeichen, nicht die Anzahl, Zeit oder das Ergebnis des letzten Wurfs. Unbekannter Name, ID außerhalb von 1…65535 und kein resultierender Zustand ergeben auch 0.
- Die Liste aktualisiert das Serverpaket 0xBF/0x25: Durch Aktivieren wird ID hinzugefügt, durch Deaktivieren wird es entfernt. Funktioniert ohne Grafikfenster und ohne Zaubertaste auf dem Bildschirm. Das Schließen eines Fensters speichert den Zustand; Durch das Unterbrechen der Verbindung wird die Verbindung gelöscht. Die Antwort auf 0 beweist nicht, dass der Charakter nicht in der Lage ist, den Zauber zu wirken. Der Server sollte diesen Status senden; Dies ist keine universelle Prüfung für alle Buffs. Für sofortige Heilung/Rückruf bestätigt ein solches Beispiel keinen erfolgreichen Zauber. Die Dauer des Zaubers, das verbleibende Mana, die Verfügbarkeit und der Erfolg werden durch diesen Befehl nicht bestimmt.
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.IsActiveSpellAbility(402);
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Parameter und Ablauf:
- 402 - ID Selbstvertrauen. Die aktive Variable enthält entweder 1 oder 0; true entspricht hier 1. Die Nachricht beschreibt den empfangenen Status, nicht das Ergebnis des Umwandlungsversuchs.
var active = UO.IsActiveSpellAbility(402);
if (Truth(Truth(active) == true))
{
UO.Print("Confidence is active");
}
else
{
UO.Print("No active Confidence state received");
}
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:
- „Selbstvertrauen“ – das gleiche ID 402. Cast akzeptiert nur den Namen. Die Anfrage wird einmal gesendet, wenn kein aktiver Status vorliegt; Es ist keine Garantie für den Erfolg auf dem Server. Führen Sie dieses Snippet nicht in einer schnellen Schleife aus. Die Serverantwort kann verzögert sein.
return RunScenario();
object? RunScenario()
{
if (Truth(UO.IsActiveSpellAbility("Confidence") == 0))
{
UO.Cast("Confidence");
}
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:
- buchstabieren – Name oder ID; erwartet – true zum Aktivieren, false zum Deaktivieren; timeoutMs – Wartelimit in Millisekunden. Main wartet bis 500 ms mit Prüfungen alle 25 ms und führt nichts aus. Die Funktion gibt true zurück, wenn eine Übereinstimmung vorliegt, andernfalls false. Dies ist eine begrenzte Erwartung eines lokalen Staates und kein Beweis für den Grund für seine Änderung. Die tatsächliche Zeit kann sich erhöhen, wenn das Skript angehalten oder unter Last ist.
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(WaitAbilityState("Confidence", true, 500)))
{
UO.Print("Active state received");
}
else
{
UO.Print("No active state before timeout");
}
return null;
}
dynamic WaitAbilityState(dynamic spell, dynamic expected, dynamic timeoutMs)
{
var elapsed = 0;
while (Truth(elapsed < timeoutMs))
{
if (Truth((UO.IsActiveSpellAbility(spell) == 1) == expected))
{
return true;
}
UO.Wait(25);
elapsed = elapsed + 25;
}
return Truth((UO.IsActiveSpellAbility(spell) == 1) == expected);
}
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: spellName (Any)
Ergebnis: dynamic / Any.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ConvertSpellName:ConvertSpellName(Text(0).Replace('_', ' ')). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(0). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.IsActiveSpell:bridge.IsActiveSpell(spellId.Value).
Interner Implementierungscode; kein eigenständiges Skript.
case "isactivespellability":
{
int? spellId = arguments[0].Kind == InjectionValueKind.String
? ConvertSpellName(Text(0).Replace('_', ' '))
: (int?)Arg(0);
return new InjectionValue(spellId.HasValue ? bridge.IsActiveSpell(spellId.Value) : 0);
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.TicksSpell();Liest die gespeicherte Marke TicksSpell.
Es gibt keine Parameter.
int – markieren Sie UO.Timer in Zehntelsekunden ab Beginn der Laufzeit. 0 – die Marke wurde noch nicht gesetzt oder das Ereignis ist in der ersten Zehntelsekunde eingetreten; es handelt sich nicht um Millisekunden oder Kalenderzeit.
- Gibt das Feld ticksSpell zurück. Es wird durch den erfolgreich akzeptierten Cast/CastAtTarget aktualisiert; Es handelt sich nicht um eine automatische Überwachung aller manuellen/Serveraktivitäten. Der Befehl selbst ändert die Markierung nicht.
- UO.Timer() – die Marke berechnet das Alter in Zehntelsekunden. Markierungen zwischen verschiedenen Laufzeiten werden nicht verglichen.
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.TicksSpell();
UO.Print("TicksSpell: " + Convert.ToString(result));Parameter und Ablauf:
- Liest die gespeicherte Marke TicksSpell.
var stamp = UO.TicksSpell();
UO.Print(stamp);Parameter und Ablauf:
- Gibt das Feld ticksSpell zurück. Es wird durch den erfolgreich akzeptierten Cast/CastAtTarget aktualisiert; Es handelt sich nicht um eine automatische Überwachung aller manuellen/Serveraktivitäten. Der Befehl selbst ändert die Markierung nicht.
return RunScenario();
object? RunScenario()
{
var stamp = UO.TicksSpell();
var ageTenths = UO.Timer() - stamp;
UO.Print(ageTenths);
return null;
}Parameter und Ablauf:
- UO.Timer() – die Marke berechnet das Alter in Zehntelsekunden. Markierungen zwischen verschiedenen Laufzeiten werden nicht verglichen.
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.TicksSpell();
UO.Wait(250);
var after = UO.TicksSpell();
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: int / Integer.
Beim Aufruf:
Interner Implementierungscode; kein eigenständiges Skript.
public int TicksSpell() => ticksSpell;