Repository navigation
DE UO Topic journal
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
Home · C# · IDE · UO API · A–Z · Beispiele · Sprachen
Suchen und warten Sie auf Nachrichten, Zeilenindizes, Zeit, Farbe und serial Autor. Trennen Sie alte Protokollzeilen von der Meldung, die Sie nach der Aktion erwarten.
| Thema | Befehle und Erklärungen |
|---|---|
| Journal | UO.Journal |
| InJournal | UO.InJournal |
| InJournalBetweenTimes | UO.InJournalBetweenTimes |
| WaitJournalLine | UO.WaitJournalLine |
| System Journal | UO.AddToSystemJournal · UO.AddToSystemJournalEx · UO.ClearSystemJournal · UO.WaitJournalLineSystem |
| Journal Ignore | UO.AddJournalIgnore · UO.ClearJournalIgnore |
| Journal Color | UO.JournalColor · UO.GetJournalColor |
| Journal Serial | UO.JournalSerial · UO.GetJournalSerial |
| Journal Timer | UO.JournalTimer |
| Found Text | UO.GetFoundedText · UO.GetFoundedTextColor · UO.GetFoundedTextID · UO.GetFoundedTextIndex · UO.GetFoundedTextSerial · UO.GetFoundedTextTimer |
UO.Journal · UO.GetJournal · UO.InJournal · UO.InJournalBetweenTimes · UO.LowJournal · UO.HighJournal · UO.ClearJournal · UO.DeleteJournal · UO.ChangeJournalLength · UO.SetJournalLine · UO.AddToJournal · UO.LastJournalMessage · UO.LastMessage
UO.WaitJournalLine · UO.WaitJournalLineSystem · UO.WaitingForJournalText
UO.AddToSystemJournal · UO.AddToSystemJournalEx · UO.ClearSystemJournal
UO.AddJournalIgnore · UO.ClearJournalIgnore
UO.JournalColor · UO.GetJournalColor · UO.JournalSerial · UO.GetJournalSerial · UO.JournalTimer · UO.LineCount · UO.LineID · UO.LineIndex · UO.LineMsgType · UO.LineName · UO.LineTextColor · UO.LineTextFont · UO.LineTime · UO.LineType
UO.FoundedParamId · UO.GetFoundedText · UO.GetFoundedTextColor · UO.GetFoundedTextID · UO.GetFoundedTextIndex · UO.GetFoundedTextSerial · UO.GetFoundedTextTimer
Jede Befehlskarte verfügt über mehrere unabhängige Szenarien: Direktcode, Funktionen und Klassen. Nachfolgend finden Sie ausgewählte kurze Szenarien; Einschränkungen und eine vollständige Analyse sind geplant.
Parameter, Ergebnis und alle Szenarien
var found = UO.InJournal("You see");
if (Truth(found > 0))
{
var text = UO.GetFoundedText();
UO.Print(text);
}
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 started = Now();
var found = UO.WaitJournalLine(started, "success|failed", 3000);
if (Truth(found))
{
UO.Print(UO.GetFoundedText());
}
else
{
UO.Print("Timeout");
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.AddJournalIgnore(object? str);Fügt einen lokalen Textfilter für ClassicUO-Spielprotokolleinträge hinzu.
-
str– nicht leeres Textfragment zur Suche im Text des Journaleintrags.
void. Der Befehl gibt die Anzahl der Übereinstimmungen nicht zurück.
- Der Text ist an den Rändern abgeschnitten; Es wird keine Leerzeile hinzugefügt. Bei der Überprüfung eines Datensatzes erfolgt die Suche nach einem Teilstring ohne Berücksichtigung der Groß-/Kleinschreibung. Der übereinstimmende Eintrag wird lokal im Client-Protokoll ausgeblendet; Der Server empfängt den Filter nicht.
UO.ClearJournalIgnore()löscht alle hinzugefügten Textfilter. Bereits angezeigte Einträge werden beim Löschen nicht wiederhergestellt.
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.AddJournalIgnore");
UO.AddJournalIgnore("You see");Parameter und Ablauf:
- Verstecke neue Beiträge, die diesen Satz enthalten.
UO.AddJournalIgnore("You see");2. Der Filter sucht nach einer Teilzeichenfolge, bei der die Groß-/Kleinschreibung nicht beachtet wird. - Skriptfunktion
Parameter und Ablauf:
- Der Filter sucht nach einer Teilzeichenfolge, bei der die Groß-/Kleinschreibung nicht beachtet wird.
return RunScenario();
object? RunScenario()
{
var phrase = "vendor";
UO.AddJournalIgnore(phrase);
return null;
}Parameter und Ablauf:
- Durch mehrere Aufrufe werden unabhängige Textfilter hinzugefügt.
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.AddJournalIgnore("You see");
UO.AddJournalIgnore("vendor");
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: str (Any)
Ergebnis: void / Unit.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.AddJournalIgnore:bridge.AddJournalIgnore(Text(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(0).
Interner Implementierungscode; kein eigenständiges Skript.
case "addjournalignore": bridge.AddJournalIgnore(Text(0)); return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.AddToJournal(object? text);Zeigt eine lokale Meldung über den Skriptfortschritt oder die Stoppbedingung an. Du siehst es, nicht andere Spieler.
Ein Aufruf einer Methode mit einem Rückgabetyp void wird als eigenständige Anweisung C# geschrieben; Das Ergebnis ist nicht zuordenbar oder überprüfbar. Das Ausfüllen der Abrechnung stellt keine Bestätigung des Spielservers dar.
- Die Nachricht wird im unteren linken Bereich des Spielfensters und im lokalen Protokoll angezeigt. Eine Kopie ist im Ausgang IDE verfügbar. Aktivieren Sie im allgemeinen Protokoll des Managers den Skriptnachrichtenfilter: Der Eintrag ist ohne das Spielfenster verfügbar. Der Nachrichtenfilter des Serversystems wählt solche Datensätze nicht aus. Das Netzwerk-Sprachpaket wird nicht gesendet. Für die Inschrift über dem Kopf steht UO.CharPrint.
-
UO.Printfügt einen neuen Eintrag zum Spielnachrichtenprotokoll hinzu: Lesen oder speichern Sie zuerst die gewünschte Suchzeichenfolge/das gewünschte Suchergebnis und zeichnen Sie dann die Diagnosemeldung auf. Zeichnen Sie in einer schnellen Schleife Nachrichten auf, wenn Änderungen auftreten, und nicht bei jeder Iteration. - Die Farbe der Systemmeldungen dieser Skriptlaufzeit wird verwendet: zunächst 0x0440, geändert UO.ConColor. Dies ist ein lokaler Eintrag; Der Befehlsname bedeutet nicht, dass er an den Server gesendet wird.
- UO.Print · UO.CharPrint · UO.Say · UO.ConColor
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.AddToJournal");
UO.AddToJournal("Script started");Parameter und Ablauf:
- verarbeitet=12 — Demo-Anzahl der bereits verarbeiteten Elemente. Convert.ToString wandelt es in einen String um. In diesem Beispiel wird nur eine Zahl gemeldet. Die Objekte selbst werden nicht übertragen.
var processed = 12;
UO.AddToJournal("Processed item entries: " + Convert.ToString(processed));Parameter und Ablauf:
- Das Gewicht und das Maximum des Zeichens werden gelesen. Ein Null-/unbekanntes Maximum gilt nicht als Überlastung. Wenn Gewicht >= Maximum, wird eine Zeile gedruckt und Main endet; Gegenstände werden nicht weggeworfen.
return RunScenario();
object? RunScenario()
{
var weight = UO.Weight();
var maximum = UO.MaxWeight();
if (Truth(maximum > 0) && Truth(weight >= maximum))
{
UO.AddToJournal("Too heavy: " + Convert.ToString(weight) + "/" + Convert.ToString(maximum));
return null;
}
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:
- Main merkt sich das Gewicht, wartet 1000 Millisekunden und ruft das vollständig deklarierte ReportWeight auf. Der Assistent druckt nur, wenn sich das Gewicht geändert hat, und gibt das neue Gewicht für die nächste Überprüfung zurück. Es erzeugt selbst keine Endlosschleife.
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 previous = UO.Weight();
UO.Wait(1000);
previous = ReportWeight(previous, UO.Weight());
return null;
}
dynamic ReportWeight(dynamic previous, dynamic current)
{
if (Truth(previous != current))
{
UO.AddToJournal("Weight changed: " + Convert.ToString(current));
}
return current;
}
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: text (Any)
Ergebnis: void / Unit.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.SystemMessage:SystemMessage(Text(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(0).
Interner Implementierungscode; kein eigenständiges Skript.
case "addtojournal":
case "addtosystemjournal":
case "clientprint":
SystemMessage(Text(0)); return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.AddToSystemJournal(object? text);Zeigt eine lokale Meldung über den Skriptfortschritt oder die Stoppbedingung an. Du siehst es, nicht andere Spieler.
Ein Aufruf einer Methode mit einem Rückgabetyp void wird als eigenständige Anweisung C# geschrieben; Das Ergebnis ist nicht zuordenbar oder überprüfbar. Das Ausfüllen der Abrechnung stellt keine Bestätigung des Spielservers dar.
- Die Nachricht wird im unteren linken Bereich des Spielfensters und im lokalen Protokoll angezeigt. Eine Kopie ist im Ausgang IDE verfügbar. Aktivieren Sie im allgemeinen Protokoll des Managers den Skriptnachrichtenfilter: Der Eintrag ist ohne das Spielfenster verfügbar. Der Nachrichtenfilter des Serversystems wählt solche Datensätze nicht aus. Das Netzwerk-Sprachpaket wird nicht gesendet. Für die Inschrift über dem Kopf steht UO.CharPrint.
-
UO.Printfügt einen neuen Eintrag zum Spielnachrichtenprotokoll hinzu: Lesen oder speichern Sie zuerst die gewünschte Suchzeichenfolge/das gewünschte Suchergebnis und zeichnen Sie dann die Diagnosemeldung auf. Zeichnen Sie in einer schnellen Schleife Nachrichten auf, wenn Änderungen auftreten, und nicht bei jeder Iteration. - Die Farbe der Systemmeldungen dieser Skriptlaufzeit wird verwendet: zunächst 0x0440, geändert UO.ConColor. Dies ist ein lokaler Eintrag; Der Befehlsname bedeutet nicht, dass er an den Server gesendet wird.
- UO.Print · UO.CharPrint · UO.Say · UO.ConColor
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.AddToSystemJournal");
UO.AddToSystemJournal("Script started");Parameter und Ablauf:
- verarbeitet=12 — Demo-Anzahl der bereits verarbeiteten Elemente. Convert.ToString wandelt es in einen String um. In diesem Beispiel wird nur eine Zahl gemeldet. Die Objekte selbst werden nicht übertragen.
var processed = 12;
UO.AddToSystemJournal("Processed item entries: " + Convert.ToString(processed));Parameter und Ablauf:
- Das Gewicht und das Maximum des Zeichens werden gelesen. Ein Null-/unbekanntes Maximum gilt nicht als Überlastung. Wenn Gewicht >= Maximum, wird eine Zeile gedruckt und Main endet; Gegenstände werden nicht weggeworfen.
return RunScenario();
object? RunScenario()
{
var weight = UO.Weight();
var maximum = UO.MaxWeight();
if (Truth(maximum > 0) && Truth(weight >= maximum))
{
UO.AddToSystemJournal("Too heavy: " + Convert.ToString(weight) + "/" + Convert.ToString(maximum));
return null;
}
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:
- Main merkt sich das Gewicht, wartet 1000 Millisekunden und ruft das vollständig deklarierte ReportWeight auf. Der Assistent druckt nur, wenn sich das Gewicht geändert hat, und gibt das neue Gewicht für die nächste Überprüfung zurück. Es erzeugt selbst keine Endlosschleife.
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 previous = UO.Weight();
UO.Wait(1000);
previous = ReportWeight(previous, UO.Weight());
return null;
}
dynamic ReportWeight(dynamic previous, dynamic current)
{
if (Truth(previous != current))
{
UO.AddToSystemJournal("Weight changed: " + Convert.ToString(current));
}
return current;
}
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: text (Any)
Ergebnis: void / Unit.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.SystemMessage:SystemMessage(Text(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(0).
Interner Implementierungscode; kein eigenständiges Skript.
case "addtojournal":
case "addtosystemjournal":
case "clientprint":
SystemMessage(Text(0)); return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.AddToSystemJournalEx(object? text, object? textColor, object? bgColor, object? fontSize, object? fontName);Gibt eine lokale Zeile an das Spielfenster und Protokoll mit einer ungefähren Anzeige des angegebenen Designs aus. Nützlich für unterscheidbare Skriptdiagnosemeldungen.
-
textColor– Textfarbe im 0xRRGGBB-Format, nicht UO hue. Der Alphakanal wird nicht verwendet. Beispiel 0xFF8800 – orange; Die Engine wählt die nächstgelegene Farbe aus der UO-Palette aus. -
bgColor– Negative Zahl – Standardhintergrund; nicht negativ – RGB 0xRRGGBB. Der angeforderte Hintergrund wird in die Ausgabe von IDE geschrieben, aber im Spielfenster wird kein separates farbiges Rechteck hinter der Linie gezeichnet. -
fontSize– Angeforderte Größe in Punkten: Der Wert <= 0 wird durch 10 ersetzt, dann wird der Bereich 4..72 angewendet. Die Nummer der Spielschriftart wird ganzzahlig berechnet als (Größe + 1) / 3; Es gibt keine genaue Desktop-Größe im Spielfenster. -
fontName– Name der Schriftart zum Schreiben von Designinformationen in die Ausgabe IDE. Leerzeichen an den Rändern werden entfernt; leerer Wert bedeutet Consolas. Dieser Befehl lädt keine beliebige Windows-Schriftart in das Spielfenster.
Ein Aufruf einer Methode mit einem Rückgabetyp void wird als eigenständige Anweisung C# geschrieben; Das Ergebnis ist nicht zuordenbar oder überprüfbar. Das Ausfüllen der Abrechnung stellt keine Bestätigung des Spielservers dar.
- Alle fünf Argumente sind erforderlich: Text, TextColor, BGColor, FontSize, FontName. Der Text ist lokal sichtbar; in IDE wird zusätzlich das gewünschte Design gespeichert. Die Hintergrundfarbe und der Schriftname sind Designhinweise und es kann nicht garantiert werden, dass sie exakt reproduziert werden. ConColor ändert nichts an dem explizit übergebenen RGB.
- Die Nachricht wird im unteren linken Bereich des Spielfensters und im lokalen Protokoll angezeigt. Eine Kopie ist im Ausgang IDE verfügbar. Aktivieren Sie im allgemeinen Protokoll des Managers den Skriptnachrichtenfilter: Der Eintrag ist ohne das Spielfenster verfügbar. Der Nachrichtenfilter des Serversystems wählt solche Datensätze nicht aus. Das Netzwerk-Sprachpaket wird nicht gesendet. Für die Inschrift über dem Kopf steht UO.CharPrint.
- UO.Print · UO.CharPrint · UO.ClientPrintEx · UO.AddToSystemJournalEx
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.AddToSystemJournalEx");
UO.AddToSystemJournalEx("Route started", 0xFF8800, -1, 12, "Consolas");Parameter und Ablauf:
- Orangefarbene Nachricht, Standardhintergrund – 1, Größe 12: Dies ergibt die Schriftart des Spiels 4. Consolas wird in IDE-Informationen gespeichert. Die Farbe kann aufgrund der Spielpalette vom genauen RGB abweichen.
UO.AddToSystemJournalEx("Route started", 0xFF8800, -1, 12, "Consolas");Parameter und Ablauf:
- Ein positiver BGColor-Wert von 0x112233 speichert die Hintergrundanforderung in IDE. Für FontSize=0 wird 10 verwendet, leeres FontName wird zu Consolas. Im Spielfenster wird der Hintergrund entsprechend diesem Parameter nicht übermalt.
return RunScenario();
object? RunScenario()
{
UO.AddToSystemJournalEx("Formatting details", 0x33AAFF, 0x112233, 0, "");
return null;
}Parameter und Ablauf:
- ReportCount ist eine vollständig deklarierte Prozedur. Es werden nur Mengenänderungen gemeldet, wobei grün RGB für Erhöhung und Rot für Verringerung ausgewählt wird. Gibt eine neue Menge für den nächsten Vergleich zurück; Das Ergebnis gehört zu ReportCount, nicht zu AddToSystemJournalEx.
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 previous = 10;
previous = ReportCount(previous, 12);
return null;
}
dynamic ReportCount(dynamic previous, dynamic current)
{
if (Truth(previous != current))
{
var textColor = 0xCC3333;
if (Truth(current > previous))
{
textColor = 0x33AA66;
}
UO.AddToSystemJournalEx("Count: " + Convert.ToString(current), textColor, -1, 10, "Consolas");
}
return current;
}
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.
UO.AddToSystemJournalEx(text, textColor, bgColor, fontSize, fontName) — UO.AddToSystemJournalEx(Any,Any,Any,Any,Any)
Parameter: text (Any), textColor (Any), bgColor (Any), fontSize (Any), fontName (Any)
Ergebnis: void / Unit.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.PrintFormattedJournal:bridge.PrintFormattedJournal(Text(0), Arg(1), Arg(2), Arg(3), Text(4)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(0). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(1).
Interner Implementierungscode; kein eigenständiges Skript.
case "addtosystemjournalex":
bridge.PrintFormattedJournal(Text(0), Arg(1), Arg(2), Arg(3), Text(4)); return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.ChangeJournalLength(object? newLength);Ändert den Grenzwert für den Client-Protokollverlauf, der beibehalten wird.
-
newLength– Anzahl der Datensätze, die in int konvertiert werden sollen. Laufzeitbegrenzungen unten auf 1; JournalManager begrenzt die oben genannten Konstanten.MAX_JOURNAL_HISTORY_COUNT.
void – kein Rückgabewert.
- Speichert den Status.JournalLength und ruft dann SetJournalLength auf. JournalManager reduziert den vorhandenen Verlauf, indem die ältesten Einträge auf ein neues Limit entfernt werden. Gefilterte Einträge und Protokollanzeige sind separate Mechanismen.
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.ChangeJournalLength");
UO.ChangeJournalLength(100);Parameter und Ablauf:
- Das neue Limit begrenzt die Anzahl der gespeicherten Datensätze.
UO.ChangeJournalLength(100);Parameter und Ablauf:
- Bei der Reduzierung des Limits werden alte Einträge gelöscht.
return RunScenario();
object? RunScenario()
{
UO.ChangeJournalLength(1);
return null;
}Parameter und Ablauf:
- Der Nullpunkt wird auf 1 normalisiert, anstatt das Protokoll zu löschen.
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.ChangeJournalLength(0);
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: newLength (Any)
Ergebnis: void / Unit.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Arg:Arg(0, 100). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetJournalLength:bridge.SetJournalLength(state.JournalLength).
Interner Implementierungscode; kein eigenständiges Skript.
case "changejournallength": state.JournalLength = Math.Max(1, Arg(0, 100)); bridge.SetJournalLength(state.JournalLength); break;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.ClearJournal();Entfernt Zeilen aus dem gemeinsam genutzten lokalen Protokoll.
Es gibt keine Parameter.
void – kein Rückgabewert. Gibt nicht die Anzahl der gelöschten Zeilen zurück. Der Trefferzähler und die aktuelle Skriptauswahl werden zurückgesetzt.
- Der gemeinsame Puffer steht allen Skripten zur Verfügung: Gelöschte Zeilen sind nicht mehr vorhanden. Snapshots, die zuvor von anderen Skripten gespeichert wurden, bleiben möglicherweise erhalten, ihr Index wird jedoch zu -1.
- Ohne Textfilter wird der gesamte Classic-UO-Puffer gelöscht, einschließlich System. Die lokale Protokolldatei und die Servermeldungen werden nicht gelöscht.
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.ClearJournal");
UO.ClearJournal();Parameter und Ablauf:
- Es gibt keine Argumente. Alle Zeilen des Shared Buffers werden gelöscht.
- Der letzte Suchzähler wird zu 0; Print kann nach dem Löschen eine neue Zeile hinzufügen.
UO.ClearJournal();
var count = UO.LineCount();
UO.Print("Search matches after clear: " + Convert.ToString(count));Parameter und Ablauf:
- Das Löschen erfolgt, bevor der Zeitstempel gespeichert wird. 1000 – begrenzte Wartezeit in Millisekunden.
- Um alte Nachrichten auszuschließen, reicht in der Regel ein Zeitstempel aus; Die Bereinigung betrifft auch andere Skripte.
return RunScenario();
object? RunScenario()
{
UO.ClearJournal();
var started = Now();
var found = UO.WaitJournalLine(started, "notice", 1000);
UO.Print(Convert.ToString(found));
return null;
}Parameter und Ablauf:
- Nach dem Bereinigen durch das aktuelle Skript index=-1, auch wenn nur ein Teil des Puffers gelöscht wurde.
- Die Textvariable speichert die zuvor gelesene Kopie und GetFoundedText wurde bereits gelöscht.
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 text = UO.Journal(0);
UO.ClearJournal();
var index = UO.LineIndex();
UO.Print(Convert.ToString(index));
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.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.DeleteJournal:DeleteJournal().
Interner Implementierungscode; kein eigenständiges Skript.
case "clearjournal": DeleteJournal(); return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.ClearJournalIgnore();Entfernt alle Textfilter JournalManager.
Es gibt keine Parameter.
void – kein Rückgabewert.
- Durch das Entfernen von Filtern wird der Verlauf nicht gelöscht und die AddChatUserIgnore-Namensfilter werden nicht aufgehoben.
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.ClearJournalIgnore");
UO.ClearJournalIgnore();Parameter und Ablauf:
- Entfernt alle Textfilter JournalManager.
UO.ClearJournalIgnore();Parameter und Ablauf:
- Lassen Sie zu, dass der Text „Sie sehen“ erneut angezeigt wird.
return RunScenario();
object? RunScenario()
{
UO.AddJournalIgnore("You see");
UO.ClearJournalIgnore();
return null;
}Parameter und Ablauf:
- Das Löschen eines leeren Satzes ist akzeptabel und erstellt keine neue Einstellung.
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.ClearJournalIgnore();
UO.ClearJournalIgnore();
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.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.ClearJournalIgnore:bridge.ClearJournalIgnore().
Interner Implementierungscode; kein eigenständiges Skript.
case "clearjournalignore": bridge.ClearJournalIgnore(); return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.ClearSystemJournal();Entfernt Zeilen mit dem Autorennamen System.
Es gibt keine Parameter.
void – kein Rückgabewert. Gibt nicht die Anzahl der gelöschten Zeilen zurück. Der Trefferzähler und die aktuelle Skriptauswahl werden zurückgesetzt.
- Der gemeinsame Puffer steht allen Skripten zur Verfügung: Gelöschte Zeilen sind nicht mehr vorhanden. Snapshots, die zuvor von anderen Skripten gespeichert wurden, bleiben möglicherweise erhalten, ihr Index wird jedoch zu -1.
- Das System wird anhand des Namens des Autors erkannt, Groß- und Kleinschreibung wird nicht beachtet. Dies ist der allgemeine Journalfilter von ClassicUO.
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.ClearSystemJournal");
UO.ClearSystemJournal();Parameter und Ablauf:
- Es gibt keine Argumente. Es werden nur die Systemzeilen entfernt.
- Der letzte Suchzähler wird zu 0; Print kann nach dem Löschen eine neue Zeile hinzufügen.
UO.ClearSystemJournal();
var count = UO.LineCount();
UO.Print("Search matches after clear: " + Convert.ToString(count));Parameter und Ablauf:
- Das Löschen erfolgt, bevor der Zeitstempel gespeichert wird. 1000 – begrenzte Wartezeit in Millisekunden.
- Um alte Nachrichten auszuschließen, reicht in der Regel ein Zeitstempel aus; Die Bereinigung betrifft auch andere Skripte.
return RunScenario();
object? RunScenario()
{
UO.ClearSystemJournal();
var started = Now();
var found = UO.WaitJournalLine(started, "notice", 1000);
UO.Print(Convert.ToString(found));
return null;
}Parameter und Ablauf:
- Nach dem Bereinigen durch das aktuelle Skript index=-1, auch wenn nur ein Teil des Puffers gelöscht wurde.
- Die Textvariable speichert die zuvor gelesene Kopie und GetFoundedText wurde bereits gelöscht.
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 text = UO.Journal(0);
UO.ClearSystemJournal();
var index = UO.LineIndex();
UO.Print(Convert.ToString(index));
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.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.DeleteSystemJournal:bridge.DeleteSystemJournal(). -
InjectionScript.Runtime.InjectionApiUO.SelectJournalEntry:SelectJournalEntry(null).
Interner Implementierungscode; kein eigenständiges Skript.
case "clearsystemjournal": bridge.DeleteSystemJournal(); SelectJournalEntry(null); return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.DeleteJournal();
void UO.DeleteJournal(object? text);Entfernt Zeilen aus dem gemeinsam genutzten lokalen Protokoll.
-
text– Der gesuchte Teilstring oder mehrere Alternativen über |, zum Beispiel success|failed. Leerzeichen an den Rändern jeder Alternative werden entfernt, leere Alternativen werden übersprungen. Dies ist reiner Text, kein regulärer Ausdruck. Verwenden Sie eine nicht leere Vorlage. Optional nur für DeleteJournal: Bei der Übertragung werden übereinstimmende Zeichenfolgen ohne Berücksichtigung der Groß-/Kleinschreibung entfernt. Ohne Argument wird der gesamte Puffer gelöscht.
void – kein Rückgabewert. Gibt nicht die Anzahl der gelöschten Zeilen zurück. Der Trefferzähler und die aktuelle Skriptauswahl werden zurückgesetzt.
- Der gemeinsame Puffer steht allen Skripten zur Verfügung: Gelöschte Zeilen sind nicht mehr vorhanden. Snapshots, die zuvor von anderen Skripten gespeichert wurden, bleiben möglicherweise erhalten, ihr Index wird jedoch zu -1.
- Ohne Textfilter wird der gesamte Classic-UO-Puffer gelöscht, einschließlich System. Die lokale Protokolldatei und die Servermeldungen werden nicht gelöscht.
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.DeleteJournal");
UO.DeleteJournal();Parameter und Ablauf:
- Es gibt keine Argumente. Alle Zeilen des Shared Buffers werden gelöscht.
- Der letzte Suchzähler wird zu 0; Print kann nach dem Löschen eine neue Zeile hinzufügen.
UO.DeleteJournal();
var count = UO.LineCount();
UO.Print("Search matches after clear: " + Convert.ToString(count));Parameter und Ablauf:
- Das Löschen erfolgt, bevor der Zeitstempel gespeichert wird. 1000 – begrenzte Wartezeit in Millisekunden.
- Um alte Nachrichten auszuschließen, reicht in der Regel ein Zeitstempel aus; Die Bereinigung betrifft auch andere Skripte.
return RunScenario();
object? RunScenario()
{
UO.DeleteJournal();
var started = Now();
var found = UO.WaitJournalLine(started, "notice", 1000);
UO.Print(Convert.ToString(found));
return null;
}Parameter und Ablauf:
- Nach dem Bereinigen durch das aktuelle Skript index=-1, auch wenn nur ein Teil des Puffers gelöscht wurde.
- Die Textvariable speichert die zuvor gelesene Kopie und GetFoundedText wurde bereits gelöscht.
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 text = UO.Journal(0);
UO.DeleteJournal();
var index = UO.LineIndex();
UO.Print(Convert.ToString(index));
return null;
}
}Parameter und Ablauf:
- Text enthält zwei Teilzeichenfolgen. Zeilen von jedem von ihnen werden ohne Berücksichtigung der Groß- und Kleinschreibung gelöscht; Die restlichen Nachrichten bleiben bestehen.
- Found=0, wenn nach dem Löschen keine neuen passenden Nachrichten vorhanden sind. Das leere Muster in dieser Implementierung stimmt mit allen Zeichenfolgen überein.
UO.DeleteJournal("notice|warning");
var found = UO.InJournal("notice|warning", -1);
UO.Print(Convert.ToString(found));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.DeleteJournal. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.DeleteJournal:bridge.DeleteJournal(). -
InjectionScript.Runtime.InjectionApiUO.SelectJournalEntry:SelectJournalEntry(null).
Interner Implementierungscode; kein eigenständiges Skript.
public void DeleteJournal()
{
bridge.DeleteJournal();
SelectJournalEntry(null);
}Parameter: text (Any)
Ergebnis: void / Unit.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.DeleteJournal. -
InjectionScript.Runtime.InjectionApiUO.DeleteJournal:DeleteJournal((string)text).
Interner Implementierungscode; kein eigenständiges Skript.
public void DeleteJournal(InjectionValue text) => DeleteJournal((string)text);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.FoundedParamId();Gibt die Nummer der passenden Suchmusteralternative zurück.
Es gibt keine Parameter.
int ist der Index von 0 in der Liste der nicht leeren Alternativen bis |: success|failed ergibt 0 für Erfolg und 1 für fehlgeschlagen. Gibt es mehrere passende Alternativen, wird die erste in der Vorlage genommen. Ohne Übereinstimmung oder nach einem direkten Journal auch 0. Dies ist weder das serial des Autors, noch die Zeilennummer, noch das type der Nachricht.
- Suchen und Journal/GetJournal/LastJournalMessage Speichern Sie den Text und die Felder eines einzelnen Eintrags im aktuellen Skript. Neue Nachrichten ersetzen diese Felder nicht. Wenn ein Datensatz aus einem begrenzten Journal entfernt wird, bleiben die beibehaltenen Felder erhalten, aber LineIndex/GetFoundedTextIndex gibt -1 zurück. Beim nächsten Suchen oder Lesen wird ein anderer Eintrag ausgewählt; Eine erfolglose Suche, ein ungültiger Index und das Löschen über dieses Skript setzen die Auswahl zurück.
- Überprüfen Sie zunächst das Suchergebnis > 0. Der Wert von 0 allein bestätigt keinen Erfolg. Randräume und leere Alternativen werden vor der Nummerierung entfernt.
- https://forum.yoko.com.ua/viewtopic.php?p=27633 ; . In dieser Adaption steht ID für Alternative, die Felder Autor und Typ sind separat über LineID/LineMsgType verfügbar.
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.FoundedParamId();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Parameter und Ablauf:
- success ist eine Alternative zu 0, failed ist eine Alternative zu 1. Der Sucherfolg wird gesondert überprüft.
- Hierbei handelt es sich um eine Textanalyse, nicht um die Bestätigung eines Spielvorgangs durch den Server.
if (Truth(UO.InJournal("success|failed") > 0))
{
var outcome = UO.FoundedParamId();
if (Truth(outcome == 0))
{
UO.Print("Success text");
}
else
{
UO.Print("Failure text");
}
}
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:
- -1 deaktiviert das Register. Die Ergebnisse 0, 1, 2 entsprechen der Reihenfolge der Alternativen.
- Wenn die Zeichenfolge mehrere Optionen enthält, wird das erste passende Muster in der Reihenfolge zurückgegeben.
return RunScenario();
object? RunScenario()
{
if (Truth(UO.InJournal("mining|ore|empty", -1) > 0))
{
var kind = UO.FoundedParamId();
UO.Print("Alternative: " + Convert.ToString(kind));
}
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:
- Journal(0) ändert die Auswahl und setzt ID Alternativen zurück, sodass das Ergebnis im Voraus gespeichert wird.
- Der neue Getter-Aufruf nach Journal beschreibt nicht mehr das vorherige Muster.
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.InJournal("success|failed") > 0))
{
var outcome = UO.FoundedParamId();
var latest = UO.Journal(0);
UO.Print("Saved outcome: " + Convert.ToString(outcome));
}
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: dynamic / Any.
Beim Aufruf:
Interner Implementierungscode; kein eigenständiges Skript.
case "foundedparamid":
return new InjectionValue(foundedTextId >= 0 ? foundedTextId : 0);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
string UO.GetFoundedText();Gibt den Text des ausgewählten Protokolleintrags zurück.
Es gibt keine Parameter.
string – Text des ausgewählten Eintrags; leere Zeile ohne Auswahl. Für einen vorhandenen Eintrag ist leerer Text zulässig.
- Suchen und Journal/GetJournal/LastJournalMessage Speichern Sie den Text und die Felder eines einzelnen Eintrags im aktuellen Skript. Neue Nachrichten ersetzen diese Felder nicht. Wenn ein Datensatz aus einem begrenzten Journal entfernt wird, bleiben die beibehaltenen Felder erhalten, aber LineIndex/GetFoundedTextIndex gibt -1 zurück. Beim nächsten Suchen oder Lesen wird ein anderer Eintrag ausgewählt; Eine erfolglose Suche, ein ungültiger Index und das Löschen über dieses Skript setzen die Auswahl zurück.
- Getter führt keine Suche durch und wählt nicht die neueste Zeile aus. Null-/Leerwerte können gültige Daten sein; Betrachten Sie das Suchergebnis.
- Primärverzeichnis: https://forum.yoko.com.ua/viewtopic.php?p=27633.
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.GetFoundedText();
UO.Print("GetFoundedText: " + Convert.ToString(result));Parameter und Ablauf:
- hinweis – ein Beispiel des gesuchten Textes. Der Getter wird ohne Parameter erst nach erfolgreicher Suche aufgerufen.
- string – Text des ausgewählten Eintrags; leere Zeile ohne Auswahl. Für einen vorhandenen Eintrag ist leerer Text zulässig.
if (Truth(UO.InJournal("notice") > 0))
{
var value = UO.GetFoundedText();
UO.Print("Text: " + Convert.ToString(value));
}
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:
- Journal(0) wählt einen neuen Eintrag aus. Index und Wert werden bis Print gelesen.
- Mit der Indexprüfung können Sie zwischen dem Fehlen eines Datensatzes und einem gültigen Null- oder Leerfeld unterscheiden.
return RunScenario();
object? RunScenario()
{
var text = UO.Journal(0);
var index = UO.LineIndex();
var value = UO.GetFoundedText();
if (Truth(index >= 0))
{
UO.Print(Convert.ToString(value));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Parameter und Ablauf:
- Die erste Suche wählt erfolgreich aus, die zweite ersetzt oder setzt die Auswahl zurück. Das gespeicherte Feld enthält bereits eine Kopie des erforderlichen Felds.
- Der gespeicherte var ändert sich bei einer erneuten Suche, dem Löschen oder Empfangen von Nachrichten nicht.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
if (Truth(UO.InJournal("success") > 0))
{
var saved = UO.GetFoundedText();
var nextMatch = UO.InJournal("failed");
UO.Print("Saved: " + Convert.ToString(saved));
}
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: string / String.
Beim Aufruf:
Interner Implementierungscode; kein eigenständiges Skript.
public string GetFoundedText() => selectedJournalEntry?.Text ?? string.Empty;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
string UO.GetFoundedTextColor();Gibt die Farbe des ausgewählten Protokolleintrags zurück.
Es gibt keine Parameter.
string - UO hue im 0x0044-Format (4 Hexadezimalziffern). Keine Wahl – 0x0000; hue=0 ist auch für eine Nachricht akzeptabel. Das ist nicht RGB.
- Suchen und Journal/GetJournal/LastJournalMessage Speichern Sie den Text und die Felder eines einzelnen Eintrags im aktuellen Skript. Neue Nachrichten ersetzen diese Felder nicht. Wenn ein Datensatz aus einem begrenzten Journal entfernt wird, bleiben die beibehaltenen Felder erhalten, aber LineIndex/GetFoundedTextIndex gibt -1 zurück. Beim nächsten Suchen oder Lesen wird ein anderer Eintrag ausgewählt; Eine erfolglose Suche, ein ungültiger Index und das Löschen über dieses Skript setzen die Auswahl zurück.
- Getter führt keine Suche durch und wählt nicht die neueste Zeile aus. Null-/Leerwerte können gültige Daten sein; Betrachten Sie das Suchergebnis.
- Primärverzeichnis: https://forum.yoko.com.ua/viewtopic.php?p=27633.
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.GetFoundedTextColor();
UO.Print("GetFoundedTextColor: " + Convert.ToString(result));Parameter und Ablauf:
- hinweis – ein Beispiel des gesuchten Textes. Der Getter wird ohne Parameter erst nach erfolgreicher Suche aufgerufen.
- string - UO hue im 0x0044-Format (4 Hexadezimalziffern). Keine Wahl – 0x0000; hue=0 ist auch für eine Nachricht akzeptabel. Das ist nicht RGB.
if (Truth(UO.InJournal("notice") > 0))
{
var value = UO.GetFoundedTextColor();
UO.Print("Hue: " + Convert.ToString(value));
}
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:
- Journal(0) wählt einen neuen Eintrag aus. Index und Wert werden bis Print gelesen.
- Mit der Indexprüfung können Sie zwischen dem Fehlen eines Datensatzes und einem gültigen Null- oder Leerfeld unterscheiden.
return RunScenario();
object? RunScenario()
{
var text = UO.Journal(0);
var index = UO.LineIndex();
var value = UO.GetFoundedTextColor();
if (Truth(index >= 0))
{
UO.Print(Convert.ToString(value));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Parameter und Ablauf:
- Die erste Suche wählt erfolgreich aus, die zweite ersetzt oder setzt die Auswahl zurück. Das gespeicherte Feld enthält bereits eine Kopie des erforderlichen Felds.
- Der gespeicherte var ändert sich bei einer erneuten Suche, dem Löschen oder Empfangen von Nachrichten nicht.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
if (Truth(UO.InJournal("success") > 0))
{
var saved = UO.GetFoundedTextColor();
var nextMatch = UO.InJournal("failed");
UO.Print("Saved: " + Convert.ToString(saved));
}
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: string / String.
Beim Aufruf:
Interner Implementierungscode; kein eigenständiges Skript.
public string GetFoundedTextColor() => selectedJournalEntry != null ? $"0x{selectedJournalEntry.Color:X4}" : "0x0000";Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.GetFoundedTextID();Gibt die Nummer der passenden Suchmusteralternative zurück.
Es gibt keine Parameter.
int ist der Index von 0 in der Liste der nicht leeren Alternativen bis |: success|failed ergibt 0 für Erfolg und 1 für fehlgeschlagen. Gibt es mehrere passende Alternativen, wird die erste in der Vorlage genommen. Ohne Übereinstimmung oder nach einem direkten Journal auch 0. Dies ist weder das serial des Autors, noch die Zeilennummer, noch das type der Nachricht.
- Suchen und Journal/GetJournal/LastJournalMessage Speichern Sie den Text und die Felder eines einzelnen Eintrags im aktuellen Skript. Neue Nachrichten ersetzen diese Felder nicht. Wenn ein Datensatz aus einem begrenzten Journal entfernt wird, bleiben die beibehaltenen Felder erhalten, aber LineIndex/GetFoundedTextIndex gibt -1 zurück. Beim nächsten Suchen oder Lesen wird ein anderer Eintrag ausgewählt; Eine erfolglose Suche, ein ungültiger Index und das Löschen über dieses Skript setzen die Auswahl zurück.
- Überprüfen Sie zunächst das Suchergebnis > 0. Der Wert von 0 allein bestätigt keinen Erfolg. Randräume und leere Alternativen werden vor der Nummerierung entfernt.
- https://forum.yoko.com.ua/viewtopic.php?p=27633 ; . In dieser Adaption steht ID für Alternative, die Felder Autor und Typ sind separat über LineID/LineMsgType verfügbar.
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.GetFoundedTextID();
UO.Print("GetFoundedTextID: " + Convert.ToString(result));Parameter und Ablauf:
- success ist eine Alternative zu 0, failed ist eine Alternative zu 1. Der Sucherfolg wird gesondert überprüft.
- Hierbei handelt es sich um eine Textanalyse, nicht um die Bestätigung eines Spielvorgangs durch den Server.
if (Truth(UO.InJournal("success|failed") > 0))
{
var outcome = UO.GetFoundedTextID();
if (Truth(outcome == 0))
{
UO.Print("Success text");
}
else
{
UO.Print("Failure text");
}
}
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:
- -1 deaktiviert das Register. Die Ergebnisse 0, 1, 2 entsprechen der Reihenfolge der Alternativen.
- Wenn die Zeichenfolge mehrere Optionen enthält, wird das erste passende Muster in der Reihenfolge zurückgegeben.
return RunScenario();
object? RunScenario()
{
if (Truth(UO.InJournal("mining|ore|empty", -1) > 0))
{
var kind = UO.GetFoundedTextID();
UO.Print("Alternative: " + Convert.ToString(kind));
}
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:
- Journal(0) ändert die Auswahl und setzt ID Alternativen zurück, sodass das Ergebnis im Voraus gespeichert wird.
- Der neue Getter-Aufruf nach Journal beschreibt nicht mehr das vorherige Muster.
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.InJournal("success|failed") > 0))
{
var outcome = UO.GetFoundedTextID();
var latest = UO.Journal(0);
UO.Print("Saved outcome: " + Convert.ToString(outcome));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.
Parameter: Keine Parameter.
Ergebnis: int / Integer.
Beim Aufruf:
Interner Implementierungscode; kein eigenständiges Skript.
public int GetFoundedTextID() => foundedTextId >= 0 ? foundedTextId : 0;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.GetFoundedTextIndex();Gibt den aktuellen Index des ausgewählten Eintrags zurück, sofern dieser noch im Protokoll gespeichert ist.
Es gibt keine Parameter.
int ist der aktuelle Index von 0 (neueste Zeile). -1 bedeutet, dass es keine Auswahl gibt oder der ausgewählte Eintrag bereits gelöscht/vorbelegt wurde. Dies ist nicht das Ergebnis von InJournal: 1 muss nicht vom Index abgezogen werden.
- Suchen und Journal/GetJournal/LastJournalMessage Speichern Sie den Text und die Felder eines einzelnen Eintrags im aktuellen Skript. Neue Nachrichten ersetzen diese Felder nicht. Wenn ein Datensatz aus einem begrenzten Journal entfernt wird, bleiben die beibehaltenen Felder erhalten, aber LineIndex/GetFoundedTextIndex gibt -1 zurück. Beim nächsten Suchen oder Lesen wird ein anderer Eintrag ausgewählt; Eine erfolglose Suche, ein ungültiger Index und das Löschen über dieses Skript setzen die Auswahl zurück.
- Der Index wird basierend auf der Identität des Datensatzes neu berechnet. Neue Nachrichten erhöhen es. Der alte gespeicherte Index ist nicht konstant ID; Für Text ist GetFoundedText sicherer.
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.GetFoundedTextIndex();
UO.Print("GetFoundedTextIndex: " + Convert.ToString(result));Parameter und Ablauf:
- Getter ohne Argumente liest die Auswahl des aktuellen Skripts. 0 – neue Zeile, -1 – keine Zeile im aktuellen Puffer.
- Der Text wird aus dem gespeicherten Eintrag übernommen, sodass er nicht durch neue Nachrichten ersetzt wird.
if (Truth(UO.InJournal("notice") > 0))
{
var index = UO.GetFoundedTextIndex();
var text = UO.GetFoundedText();
UO.Print(Convert.ToString(index) + ": " + text);
}
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:
- Journal(0) wählt den letzten Eintrag aus; Die Prüfung schließt ein leeres Protokoll aus.
- Für einen gültigen Eintrag ist leerer Text zulässig.
return RunScenario();
object? RunScenario()
{
var text = UO.Journal(0);
if (Truth(UO.GetFoundedTextIndex() >= 0))
{
UO.Print(text);
}
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 auf 100 ms ermöglicht den Eingang neuer Nachrichten. after findet den gleichen Eintrag wieder.
- nach kann zunehmen oder zu -1 werden, wenn es entfernt wird; GetFoundedText enthält noch den gespeicherten Text.
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.InJournal("needle") > 0))
{
var before = UO.GetFoundedTextIndex();
UO.Wait(100);
var after = UO.GetFoundedTextIndex();
UO.Print(Convert.ToString(before) + " -> " + Convert.ToString(after));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.
Parameter: Keine Parameter.
Ergebnis: int / Integer.
Beim Aufruf:
Interner Implementierungscode; kein eigenständiges Skript.
public int GetFoundedTextIndex() => selectedJournalEntry != null && bridge is IApiJournalReader reader
? reader.FindJournalEntryIndex(selectedJournalEntry.Identity) : foundedTextIndex;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
string UO.GetFoundedTextSerial();Gibt serial den Autor des ausgewählten Journaleintrags zurück.
Es gibt keine Parameter.
string - serial des Autors im 0x00001234-Format (8 Hexadezimalziffern). Keine Wahl – 0x00000000. Dies ist kein type eines Fachgebiets oder ein Zeitschriftenindex.
- Suchen und Journal/GetJournal/LastJournalMessage Speichern Sie den Text und die Felder eines einzelnen Eintrags im aktuellen Skript. Neue Nachrichten ersetzen diese Felder nicht. Wenn ein Datensatz aus einem begrenzten Journal entfernt wird, bleiben die beibehaltenen Felder erhalten, aber LineIndex/GetFoundedTextIndex gibt -1 zurück. Beim nächsten Suchen oder Lesen wird ein anderer Eintrag ausgewählt; Eine erfolglose Suche, ein ungültiger Index und das Löschen über dieses Skript setzen die Auswahl zurück.
- Getter führt keine Suche durch und wählt nicht die neueste Zeile aus. Null-/Leerwerte können gültige Daten sein; Betrachten Sie das Suchergebnis.
- Primärverzeichnis: https://forum.yoko.com.ua/viewtopic.php?p=27633.
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.GetFoundedTextSerial();
UO.Print("GetFoundedTextSerial: " + Convert.ToString(result));Parameter und Ablauf:
- hinweis – ein Beispiel des gesuchten Textes. Der Getter wird ohne Parameter erst nach erfolgreicher Suche aufgerufen.
- string - serial des Autors im 0x00001234-Format (8 Hexadezimalziffern). Keine Wahl – 0x00000000. Dies ist kein type eines Fachgebiets oder ein Zeitschriftenindex.
if (Truth(UO.InJournal("notice") > 0))
{
var value = UO.GetFoundedTextSerial();
UO.Print("Speaker serial: " + Convert.ToString(value));
}
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:
- Journal(0) wählt einen neuen Eintrag aus. Index und Wert werden bis Print gelesen.
- Mit der Indexprüfung können Sie zwischen dem Fehlen eines Datensatzes und einem gültigen Null- oder Leerfeld unterscheiden.
return RunScenario();
object? RunScenario()
{
var text = UO.Journal(0);
var index = UO.LineIndex();
var value = UO.GetFoundedTextSerial();
if (Truth(index >= 0))
{
UO.Print(Convert.ToString(value));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Parameter und Ablauf:
- Die erste Suche wählt erfolgreich aus, die zweite ersetzt oder setzt die Auswahl zurück. Das gespeicherte Feld enthält bereits eine Kopie des erforderlichen Felds.
- Der gespeicherte var ändert sich bei einer erneuten Suche, dem Löschen oder Empfangen von Nachrichten nicht.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
if (Truth(UO.InJournal("success") > 0))
{
var saved = UO.GetFoundedTextSerial();
var nextMatch = UO.InJournal("failed");
UO.Print("Saved: " + Convert.ToString(saved));
}
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: string / String.
Beim Aufruf:
Interner Implementierungscode; kein eigenständiges Skript.
public string GetFoundedTextSerial() => selectedJournalEntry != null
? $"0x{unchecked((uint)selectedJournalEntry.Serial):X8}" : "0x00000000";Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.GetFoundedTextTimer();Gibt den Millisekunden-Zeitstempel des ausgewählten Protokolleintrags zurück.
Es gibt keine Parameter.
int – Moment der Aufzeichnung in Millisekunden ab dem Start der Laufzeit, kompatibel mit Now(). Nennungen vor dem Start geben 0. Ohne Wahl auch 0; Eine falsche Kalendermarkierung ergibt -1. Es handelt sich nicht um Vergangenheitsform oder Zehntelsekunden UO.Timer().
- Suchen und Journal/GetJournal/LastJournalMessage Speichern Sie den Text und die Felder eines einzelnen Eintrags im aktuellen Skript. Neue Nachrichten ersetzen diese Felder nicht. Wenn ein Datensatz aus einem begrenzten Journal entfernt wird, bleiben die beibehaltenen Felder erhalten, aber LineIndex/GetFoundedTextIndex gibt -1 zurück. Beim nächsten Suchen oder Lesen wird ein anderer Eintrag ausgewählt; Eine erfolglose Suche, ein ungültiger Index und das Löschen über dieses Skript setzen die Auswahl zurück.
- Getter führt keine Suche durch und wählt nicht die neueste Zeile aus. Null-/Leerwerte können gültige Daten sein; Betrachten Sie das Suchergebnis.
- Primärverzeichnis: https://forum.yoko.com.ua/viewtopic.php?p=27633.
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.GetFoundedTextTimer();
UO.Print("GetFoundedTextTimer: " + Convert.ToString(result));Parameter und Ablauf:
- hinweis – ein Beispiel des gesuchten Textes. Der Getter wird ohne Parameter erst nach erfolgreicher Suche aufgerufen.
- int – Moment der Aufzeichnung in Millisekunden ab dem Start der Laufzeit, kompatibel mit Now(). Nennungen vor dem Start geben 0. Ohne Wahl auch 0; Eine falsche Kalendermarkierung ergibt -1. Es handelt sich nicht um Vergangenheitsform oder Zehntelsekunden UO.Timer().
if (Truth(UO.InJournal("notice") > 0))
{
var value = UO.GetFoundedTextTimer();
UO.Print("Timestamp ms: " + Convert.ToString(value));
}
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:
- Journal(0) wählt einen neuen Eintrag aus. Index und Wert werden bis Print gelesen.
- Mit der Indexprüfung können Sie zwischen dem Fehlen eines Datensatzes und einem gültigen Null- oder Leerfeld unterscheiden.
return RunScenario();
object? RunScenario()
{
var text = UO.Journal(0);
var index = UO.LineIndex();
var value = UO.GetFoundedTextTimer();
if (Truth(index >= 0))
{
UO.Print(Convert.ToString(value));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Parameter und Ablauf:
- Die erste Suche wählt erfolgreich aus, die zweite ersetzt oder setzt die Auswahl zurück. Das gespeicherte Feld enthält bereits eine Kopie des erforderlichen Felds.
- Der gespeicherte var ändert sich bei einer erneuten Suche, dem Löschen oder Empfangen von Nachrichten nicht.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
if (Truth(UO.InJournal("success") > 0))
{
var saved = UO.GetFoundedTextTimer();
var nextMatch = UO.InJournal("failed");
UO.Print("Saved: " + Convert.ToString(saved));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.
Parameter: Keine Parameter.
Ergebnis: int / Integer.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.GetFoundedTextTimer. -
InjectionScript.Runtime.InjectionApiUO.JournalEntryTime:JournalEntryTime(selectedJournalEntry.Timestamp).
Interner Implementierungscode; kein eigenständiges Skript.
public int GetFoundedTextTimer() => selectedJournalEntry != null ? JournalEntryTime(selectedJournalEntry.Timestamp) : 0;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
string UO.GetJournal(object? index);Liest den Text einer Zeile am aktuellen Index und wählt diesen Eintrag für GetFoundedText/Zeile* aus.
-
index– Obligatorisch int – aktueller Index: 0 bedeutet die neueste Zeile, 1 – die vorherige. Indizes werden verschoben, wenn Nachrichten eintreffen. Dies ist keine serial-, keine ID-Variante des Musters und kein positives Ergebnis von InJournal.
string – Text der Zeichenfolge oder eine leere Zeichenfolge, wenn der Index falsch ist/das Journal leer ist. Eine bestehende Zeile kann auch leeren Text enthalten: Nach dem Lesen bestätigt LineIndex >= 0, dass der Eintrag ausgewählt wurde. Es ist nicht die Anzahl der Zeilen.
- Suchen und Journal/GetJournal/LastJournalMessage Speichern Sie den Text und die Felder eines einzelnen Eintrags im aktuellen Skript. Neue Nachrichten ersetzen diese Felder nicht. Wenn ein Datensatz aus einem begrenzten Journal entfernt wird, bleiben die beibehaltenen Felder erhalten, aber LineIndex/GetFoundedTextIndex gibt -1 zurück. Beim nächsten Suchen oder Lesen wird ein anderer Eintrag ausgewählt; Eine erfolglose Suche, ein ungültiger Index und das Löschen über dieses Skript setzen die Auswahl zurück.
- Direkte Lese-Resets ID Alternativen; Auf GetFoundedTextID/FoundedParamId folgt 0. Das Journal selbst berechnet LineCount nicht neu.
- https://forum.yoko.com.ua/viewtopic.php?p=27633 ; .
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.GetJournal(0);
UO.Print("GetJournal: " + Convert.ToString(result));Parameter und Ablauf:
- 0 ist die neueste Zeile. Zuerst werden Text und Autor gelesen, dann wird das Ergebnis angezeigt.
- Print kann eine Nachricht hinzufügen; Der gespeicherte Text/Autor bezieht sich auf den zuvor ausgewählten Eintrag.
var text = UO.GetJournal(0);
var author = UO.LineName();
UO.Print(author + ": " + text);Parameter und Ablauf:
- 1 ist der vorherige Eintrag, HighJournal ist der maximal verfügbare Index.
- Das Protokoll kann sich zwischen Anrufen ändern. Für Daten einer bereits gefundenen Zeile verwenden Sie GetFoundedText.
return RunScenario();
object? RunScenario()
{
if (Truth(UO.HighJournal() >= 1))
{
var text = UO.GetJournal(1);
UO.Print(text);
}
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:
- LineIndex=-1 bedeutet, dass der ausgewählte Eintrag fehlt/gelöscht ist. Len(text)=0 allein bedeutet dies nicht.
- Speichern Sie das Testergebnis, bis die Diagnoseausgabe zum Protokoll hinzugefügt wird.
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 text = UO.GetJournal(0);
var index = UO.LineIndex();
if (Truth(index < 0))
{
UO.Print("No record");
}
else
{
UO.Print("Text length: " + Convert.ToString(Len(text)));
}
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;
}C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.
Parameter: index (Integer)
Ergebnis: string / String.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.GetJournalText. -
InjectionScript.Runtime.InjectionApiUO.SelectJournalEntry:SelectJournalEntry(ReadJournalSnapshot(index)). -
InjectionScript.Runtime.InjectionApiUO.ReadJournalSnapshot:ReadJournalSnapshot(index).
Interner Implementierungscode; kein eigenständiges Skript.
public string GetJournalText(int index)
{
SelectJournalEntry(ReadJournalSnapshot(index));
return selectedJournalEntry?.Text ?? string.Empty;
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
string UO.GetJournalColor(object? index);Liest das hue-Feld der Zeile am aktuellen Index, ohne den ausgewählten Eintrag zu ändern.
-
index– Obligatorisch int – aktueller Index: 0 bedeutet die neueste Zeile, 1 – die vorherige. Indizes werden verschoben, wenn Nachrichten eintreffen. Dies ist keine serial-, keine ID-Variante des Musters und kein positives Ergebnis von InJournal.
string - UO hue als 0x0044; wenn der Index 0x0000 falsch ist. Das ist nicht RGB.
- Bei jedem Aufruf wird die aktuelle Position ausgelesen. Für konsistenten Text und Felder desselben Datensatzes zuerst Journal(index), dann GetFoundedText/Line*. Nullwerte können echte Daten sein.
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.GetJournalColor(0);
UO.Print("GetJournalColor: " + Convert.ToString(result));Parameter und Ablauf:
- 0 ist der Index der neuen Zeile. Das Vorhandensein eines Puffers wird überprüft.
- string - UO hue als 0x0044; wenn der Index 0x0000 falsch ist. Das ist nicht RGB.
if (Truth(UO.HighJournal() >= 0))
{
var value = UO.GetJournalColor(0);
UO.Print(Convert.ToString(value));
}
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:
- 1 ist die vorherige Zeile, nicht serial=1.
- Der durch die Suche ausgewählte Eintrag GetFoundedText/Line* wird nicht verändert.
return RunScenario();
object? RunScenario()
{
if (Truth(UO.HighJournal() >= 1))
{
var value = UO.GetJournalColor(1);
UO.Print(Convert.ToString(value));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Parameter und Ablauf:
- value kopiert das Feld zum Zeitpunkt des Aufrufs. Beim Warten wird die Variable nicht aktualisiert.
- Um die aktuelle Zeile 0 erneut zu lesen, rufen Sie den Befehl erneut auf; Dies kann bereits ein weiterer Eintrag sein.
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 value = UO.GetJournalColor(0);
UO.Wait(100);
UO.Print("Saved value: " + Convert.ToString(value));
return null;
}
}C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.
Parameter: index (Integer)
Ergebnis: string / String.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.JournalColor. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.JournalColor:bridge.JournalColor(index).
Interner Implementierungscode; kein eigenständiges Skript.
public string JournalColor(int index) => bridge.JournalColor(index);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
string UO.GetJournalSerial(object? index);Liest das serial-Feld der Zeile am aktuellen Index, ohne den ausgewählten Eintrag zu ändern.
-
index– Obligatorisch int – aktueller Index: 0 bedeutet die neueste Zeile, 1 – die vorherige. Indizes werden verschoben, wenn Nachrichten eintreffen. Dies ist keine serial-, keine ID-Variante des Musters und kein positives Ergebnis von InJournal.
string - serial des Autors als 0x00001234; wenn der Index 0x00000000 falsch ist.
- Bei jedem Aufruf wird die aktuelle Position ausgelesen. Für konsistenten Text und Felder desselben Datensatzes zuerst Journal(index), dann GetFoundedText/Line*. Nullwerte können echte Daten sein.
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.GetJournalSerial(0);
UO.Print("GetJournalSerial: " + Convert.ToString(result));Parameter und Ablauf:
- 0 ist der Index der neuen Zeile. Das Vorhandensein eines Puffers wird überprüft.
- string - serial des Autors als 0x00001234; wenn der Index 0x00000000 falsch ist.
if (Truth(UO.HighJournal() >= 0))
{
var value = UO.GetJournalSerial(0);
UO.Print(Convert.ToString(value));
}
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:
- 1 ist die vorherige Zeile, nicht serial=1.
- Der durch die Suche ausgewählte Eintrag GetFoundedText/Line* wird nicht verändert.
return RunScenario();
object? RunScenario()
{
if (Truth(UO.HighJournal() >= 1))
{
var value = UO.GetJournalSerial(1);
UO.Print(Convert.ToString(value));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Parameter und Ablauf:
- value kopiert das Feld zum Zeitpunkt des Aufrufs. Beim Warten wird die Variable nicht aktualisiert.
- Um die aktuelle Zeile 0 erneut zu lesen, rufen Sie den Befehl erneut auf; Dies kann bereits ein weiterer Eintrag sein.
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 value = UO.GetJournalSerial(0);
UO.Wait(100);
UO.Print("Saved value: " + Convert.ToString(value));
return null;
}
}C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.
Parameter: index (Integer)
Ergebnis: string / String.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.JournalSerial. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.JournalSerial:bridge.JournalSerial(index).
Interner Implementierungscode; kein eigenständiges Skript.
public string JournalSerial(int index) => bridge.JournalSerial(index);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.HighJournal();Gibt den maximal verfügbaren Protokollindex zurück.
Es gibt keine Parameter.
int: -1 wenn das Magazin leer ist; andernfalls ist die Anzahl der gespeicherten Datensätze minus 1 der Index des ältesten verfügbaren Datensatzes. Journal/GetJournal verwenden Nullindizes vom neuen zum alten Datensatz; ein positives Ergebnis InJournal verwendet eine andere Einzelzählung.
- Neue Nachrichten und Aufräumarbeiten verändern die Grenzen. Die Reihenfolge hier ist Journal(0) vom neuen Eintrag zum alten Eintrag.
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.HighJournal();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Parameter und Ablauf:
- Eine negative Grenze bedeutet einen leeren Puffer.
- Wenn der Puffer nicht leer ist, liest Journal(0) einen neuen Eintrag.
if (Truth(UO.HighJournal() >= 0))
{
var text = UO.Journal(0);
UO.Print(text);
}
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:
- HighJournal=-1, wenn das Protokoll leer ist, also total=0. LowJournal beschreibt die untere Grenze, nicht die Anzahl der Zeilen.
- Dies ist die Gesamtzahl der lokal gespeicherten Zeilen; LineCount bezieht sich auf die letzte Suche.
return RunScenario();
object? RunScenario()
{
var total = UO.HighJournal() + 1;
UO.Print("Rows: " + Convert.ToString(total));
return null;
}Parameter und Ablauf:
- Der Index wird direkt an Journal übergeben, ohne dass eins abgezogen wird.
- Der Index kann sich mit eingehenden Nachrichten verschieben; Der Puffer wird zwischen Aufrufen nicht eingefroren.
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 index = UO.HighJournal();
if (Truth(index >= 0))
{
var text = UO.Journal(index);
UO.Print(text);
}
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: dynamic / Any.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.JournalEntryCount:bridge.JournalEntryCount().
Interner Implementierungscode; kein eigenständiges Skript.
case "highjournal": return new InjectionValue(bridge.JournalEntryCount() == 0 ? -1 : bridge.JournalEntryCount() - 1);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.InJournal(object? pattern);
int UO.InJournal(object? pattern, object? maxLinesOrIgnoreCase);
int UO.InJournal(object? pattern, object? serial, object? color);
int UO.InJournal(object? pattern, object? serial, object? color, object? startTime);
int UO.InJournal(object? pattern, object? serial, object? color, object? startTime, object? endTime);
int UO.InJournal(object? pattern, object? serial, object? color, object? startTime, object? endTime, object? newestOnly);
int UO.InJournal(object? pattern, object? serial, object? color, object? startTime, object? endTime, object? newestOnly, object? caseSensitive);Sucht im lokalen Protokoll nach einer Nachricht und speichert den gefundenen Datensatz mit seinen Feldern.
-
pattern– Der gesuchte Teilstring oder mehrere Alternativen über |, zum Beispiel success|failed. Leerzeichen an den Rändern jeder Alternative werden entfernt, leere Alternativen werden übersprungen. Dies ist reiner Text, kein regulärer Ausdruck. Verwenden Sie eine nicht leere Vorlage. -
maxLinesOrIgnoreCase– Nur die Form von zwei Argumenten: -1 – das gesamte verfügbare Protokoll, ohne Berücksichtigung der Groß-/Kleinschreibung; 0 – keine Leitungen prüfen; positive Zahl – prüfen Sie nicht mehr als diese Anzahl der letzten Zeilen, Groß-/Kleinschreibung beachten. Andere negative Werte sind auf 0 begrenzt. -
serial– Das dritte und die folgenden Argumente enthalten die erweiterte Form. Das zweite Argument dieser Form ist der numerische serial des Nachrichtenautors, nicht graphic/type. -1 deaktiviert den Filter; 0 wählt serial=0. Ein Hex-String, der eine Zahl enthält, wird ebenfalls in eine Zahl umgewandelt; Der Objektaliasname ist hier nicht zulässig. -
color– Das dritte Argument der erweiterten Form ist numerisch UO hue; -1 oder 0xFFFF deaktiviert den Filter. 0 wählt hue=0. Das ist nicht RGB. -
startTime– Optionales Startlabel Now(), int in Millisekunden. Bei einem positiven endTime bedeutet der Wert startTime=0 den Beginn der Ausführung. Fehlen beide Markierungen/nicht positiv, gibt es keinen Zeitfilter. -
endTime– Optionales Endlabel Now(), int in Millisekunden. Abwesend oder 0 – aktuelle Uhrzeit. Die Reihenfolge der positiven Grenzen ist nicht von Bedeutung. Die Zukunftsbezeichnung ist auf die aktuelle Zeit beschränkt. -
newestOnly– Optional bool, Standard false. true stoppt die Suche nach der ersten Übereinstimmung; LineCount dann 0 oder 1. false zählt alle übereinstimmenden Zeilen und wählt immer noch die neueste aus. -
caseSensitive– Optionale erweiterte Form bool, Standard false. Bei true wird die Groß-/Kleinschreibung beachtet. Bei einem Nur-Muster-Formular hingegen muss immer die Groß-/Kleinschreibung beachtet werden.
int: 0 – es gibt keine passende Linie; Eine positive Zahl ist die Position des neuesten übereinstimmenden Eintrags, gezählt vom Ende des gesamten Protokolls, beginnend mit 1. Dabei handelt es sich nicht um die Anzahl der Übereinstimmungen oder die Anzahl der Musteralternativen. Für den Nullindex verwenden Sie LineIndex/GetFoundedTextIndex, für die Anzahl der Übereinstimmungen verwenden Sie LineCount, für die alternative Zahl verwenden Sie GetFoundedTextID. Nachfolgende neue Nachrichten können den Index ändern, die gespeicherten Felder des ausgewählten Datensatzes bleiben jedoch verfügbar.
- Suchen und Journal/GetJournal/LastJournalMessage Speichern Sie den Text und die Felder eines einzelnen Eintrags im aktuellen Skript. Neue Nachrichten ersetzen diese Felder nicht. Wenn ein Datensatz aus einem begrenzten Journal entfernt wird, bleiben die beibehaltenen Felder erhalten, aber LineIndex/GetFoundedTextIndex gibt -1 zurück. Beim nächsten Suchen oder Lesen wird ein anderer Eintrag ausgewählt; Eine erfolglose Suche, ein ungültiger Index und das Löschen über dieses Skript setzen die Auswahl zurück.
- Die Suche erwartet keinen neuen Text. Das leere Muster im aktuellen InJournal passt zu jeder Zeichenfolge, gibt ID jedoch keine Alternative; Um nach Zeichenfolgen zu suchen, verwenden Sie HighJournal/LowJournal.
- Die Form mit zwei Argumenten gibt den Grenzwert/Fall an, nicht serial. Für serial ist es zwingend erforderlich, auch Farbe zu übergeben. Ein Ein-Argument SetJournalLine kann den Suchbereich einschränken.
- https://forum.yoko.com.ua/viewtopic.php?p=27633 ; .
Now() stellt den Host der aktuellen Ausführung bereit: Dies ist eine ganzzahlige Anzahl von Millisekunden derselben nativen Uhr, die das Protokoll verwendet. Ersetzen Sie es nicht durch Environment.TickCount, Unix-Zeit oder Ihre eigene Stoppuhr: Der Ursprung wird anders sein. Rufen Sie in einem normalen .cs/.csproj-Programm context.Now() für die übergebenen CSharpScriptGlobals auf.
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.InJournal("You see");
UO.Print("InJournal: " + Convert.ToString(result));Parameter und Ablauf:
- Muster=Sie sehen, es handelt sich um eine Teilzeichenfolge. Die Groß-/Kleinschreibung ist wichtig. „found=0“ bedeutet „abwesend“.
- Der Text wird aus dem gefundenen Eintrag kopiert; Das Eintreffen einer neuen Nachricht ersetzt diese nicht.
var found = UO.InJournal("You see");
if (Truth(found > 0))
{
var text = UO.GetFoundedText();
UO.Print(text);
}
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 zweite Argument -1 entfernt die Zeilenbeschränkung und deaktiviert die Groß-/Kleinschreibung.
- Ergebnis=0 für Erfolg, 1 für fehlgeschlagen; Dies ist die Nummer der Alternative, nicht die ID des Sprechers.
return RunScenario();
object? RunScenario()
{
var found = UO.InJournal("success|failed", -1);
if (Truth(found > 0))
{
var outcome = UO.GetFoundedTextID();
UO.Print("Alternative: " + Convert.ToString(outcome));
}
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:
- 20 – maximale Anzahl der zu prüfenden Zeilen, Groß-/Kleinschreibung ist wichtig. Übereinstimmungen – die Anzahl der übereinstimmenden Zeilen im überprüften Bereich.
- gefunden enthält die Position plus 1, keine Übereinstimmungen. Das Schreiben von Diagnosetext kann ebenfalls zum Protokoll hinzugefügt werden.
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 found = UO.InJournal("bank", 20);
var matches = UO.LineCount();
UO.Print("Matches: " + Convert.ToString(matches));
return null;
}
}Parameter und Ablauf:
- serial=0x00001234 – Beispiel des Autors, Farbe=0x0044 – hue. Durch reale Werte ersetzen. gestartet/endTime – Millisekundenmarkierungen.
- true stoppt die Suche in der ersten Zeile; Bei false wird die Groß-/Kleinschreibung nicht beachtet. 350 ms separat wartend, InJournal wartet nicht selbst.
var started = Now();
UO.Wait(350);
var found = UO.InJournal("hello", 0x00001234, 0x0044, started, Now(), true, false);
if (Truth(found > 0))
{
UO.Print(UO.GetFoundedText());
}
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:
- serial=-1 und color=-1 deaktivieren beide Filter. Zwei Markierungen begrenzen die Zeit.
- newestOnly und caseSensitive entfallen: false und false. Ohne Übereinstimmung wird 0 zurückgegeben.
return RunScenario();
object? RunScenario()
{
var started = Now();
UO.Wait(100);
var found = UO.InJournal("notice", -1, -1, started, Now());
if (Truth(found == 0))
{
UO.Print("No matching message");
}
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: pattern (Any/String)
Ergebnis: int / Any.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.InJournal:InJournal(Text(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(0).
Interner Implementierungscode; kein eigenständiges Skript.
case "injournal": return new InjectionValue(InJournal(Text(0)));Parameter: pattern (Any/String)
Ergebnis: int / Integer.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.InJournal. -
InjectionScript.Runtime.InjectionApiUO.InJournalCore:InJournalCore(pattern, -1, ignoreCase: false).
Interner Implementierungscode; kein eigenständiges Skript.
public int InJournal(string pattern)
=> InJournalCore(pattern, -1, ignoreCase: false);Parameter: pattern (String), maxLinesOrIgnoreCase (Integer)
Ergebnis: int / Integer.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.InJournal. -
InjectionScript.Runtime.InjectionApiUO.InJournalCore:InJournalCore(pattern, maxLinesOrIgnoreCase == -1 ? -1 : Math.Max(0, maxLinesOrIgnoreCase), ignoreCase: maxLinesOrIgnoreCase == -1).
Interner Implementierungscode; kein eigenständiges Skript.
public int InJournal(string pattern, int maxLinesOrIgnoreCase)
=> InJournalCore(pattern,
maxLinesOrIgnoreCase == -1 ? -1 : Math.Max(0, maxLinesOrIgnoreCase),
ignoreCase: maxLinesOrIgnoreCase == -1);Parameter: pattern (Any), serial (Any), color (Any)
Ergebnis: int / Integer.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.Register [InJournal]. -
InjectionScript.Runtime.InjectionApiUO.CompactInJournal:CompactInJournal(values).
Der Aufruf führt den gespeicherten Handler-Delegate aus. Die Registrierungsmethode erzeugt ihn beim Aufbau der API.
Interner Implementierungscode; kein eigenständiges Skript.
values => new InjectionValue(CompactInJournal(values))Parameter: pattern (Any), serial (Any), color (Any), startTime (Any)
Ergebnis: int / Integer.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.Register [InJournal]. -
InjectionScript.Runtime.InjectionApiUO.CompactInJournal:CompactInJournal(values).
Der Aufruf führt den gespeicherten Handler-Delegate aus. Die Registrierungsmethode erzeugt ihn beim Aufbau der API.
Interner Implementierungscode; kein eigenständiges Skript.
values => new InjectionValue(CompactInJournal(values))Parameter: pattern (Any), serial (Any), color (Any), startTime (Any), endTime (Any)
Ergebnis: int / Integer.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.Register [InJournal]. -
InjectionScript.Runtime.InjectionApiUO.CompactInJournal:CompactInJournal(values).
Der Aufruf führt den gespeicherten Handler-Delegate aus. Die Registrierungsmethode erzeugt ihn beim Aufbau der API.
Interner Implementierungscode; kein eigenständiges Skript.
values => new InjectionValue(CompactInJournal(values))
UO.InJournal(pattern, serial, color, startTime, endTime, newestOnly) — UO.InJournal(Any,Any,Any,Any,Any,Any)
Parameter: pattern (Any), serial (Any), color (Any), startTime (Any), endTime (Any), newestOnly (Any)
Ergebnis: int / Integer.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.Register [InJournal]. -
InjectionScript.Runtime.InjectionApiUO.CompactInJournal:CompactInJournal(values).
Der Aufruf führt den gespeicherten Handler-Delegate aus. Die Registrierungsmethode erzeugt ihn beim Aufbau der API.
Interner Implementierungscode; kein eigenständiges Skript.
values => new InjectionValue(CompactInJournal(values))
UO.InJournal(pattern, serial, color, startTime, endTime, newestOnly, caseSensitive) — UO.InJournal(Any,Any,Any,Any,Any,Any,Any)
Parameter: pattern (Any), serial (Any), color (Any), startTime (Any), endTime (Any), newestOnly (Any), caseSensitive (Any)
Ergebnis: int / Integer.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.Register [InJournal]. -
InjectionScript.Runtime.InjectionApiUO.CompactInJournal:CompactInJournal(values).
Der Aufruf führt den gespeicherten Handler-Delegate aus. Die Registrierungsmethode erzeugt ihn beim Aufbau der API.
Interner Implementierungscode; kein eigenständiges Skript.
values => new InjectionValue(CompactInJournal(values))Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.InJournalBetweenTimes(object? pattern, object? startTime);
int UO.InJournalBetweenTimes(object? pattern, object? startTime, object? endTime);
int UO.InJournalBetweenTimes(object? pattern, object? startTime, object? endTime, object? limit);Sucht nach einer Zeichenfolge zwischen zwei Ausführungszeitstempeln und speichert den neuesten übereinstimmenden Eintrag.
-
pattern– Der gesuchte Teilstring oder mehrere Alternativen über |, zum Beispiel success|failed. Leerzeichen an den Rändern jeder Alternative werden entfernt, leere Alternativen werden übersprungen. Dies ist reiner Text, kein regulärer Ausdruck. Verwenden Sie eine nicht leere Vorlage. -
startTime– Obligatorische Bezeichnung Now(): int Millisekunden ab dem Start der Laufzeit. 0 – Beginn der Ausführung. Dabei handelt es sich nicht um das Alter des Datensatzes oder das Bruchdatum LineTime. -
endTime– Optionale Now()-Endbezeichnung. Wenn es weggelassen wird oder nicht positiv ist, wird die aktuelle Zeit verwendet. Positive Grenzen können in umgekehrter Reihenfolge übermittelt werden; Die zukünftige Grenze ist auf die aktuelle Zeit begrenzt. -
limit– Optionales viertes Argument: -1 – keine Einschränkung und keine Berücksichtigung der Groß-/Kleinschreibung; positive Zahl – maximale Zeilenzahl im Intervall, Groß-/Kleinschreibung beachten; 0 und negative Werte außer -1 – Zeichenfolgen werden nicht überprüft.
int: 0 – es gibt keine passende Linie; Eine positive Zahl ist die Position des neuesten übereinstimmenden Eintrags, gezählt vom Ende des gesamten Protokolls, beginnend mit 1. Dabei handelt es sich nicht um die Anzahl der Übereinstimmungen oder die Anzahl der Musteralternativen. Für den Nullindex verwenden Sie LineIndex/GetFoundedTextIndex, für die Anzahl der Übereinstimmungen verwenden Sie LineCount, für die alternative Zahl verwenden Sie GetFoundedTextID. Nachfolgende neue Nachrichten können den Index ändern, die gespeicherten Felder des ausgewählten Datensatzes bleiben jedoch verfügbar.
- Suchen und Journal/GetJournal/LastJournalMessage Speichern Sie den Text und die Felder eines einzelnen Eintrags im aktuellen Skript. Neue Nachrichten ersetzen diese Felder nicht. Wenn ein Datensatz aus einem begrenzten Journal entfernt wird, bleiben die beibehaltenen Felder erhalten, aber LineIndex/GetFoundedTextIndex gibt -1 zurück. Beim nächsten Suchen oder Lesen wird ein anderer Eintrag ausgewählt; Eine erfolglose Suche, ein ungültiger Index und das Löschen über dieses Skript setzen die Auswahl zurück.
- Bei Formularen mit zwei oder drei Argumenten muss die Groß-/Kleinschreibung beachtet werden. Ränder sind enthalten. Durch die Berechnung des Intervalls wird das Skript nicht angehalten.
- Übergeben Sie hier ganze Beschriftungen an Now(). LineTime gibt eine andere Einheit zurück. Primärverzeichnis: .
Now() stellt den Host der aktuellen Ausführung bereit: Dies ist eine ganzzahlige Anzahl von Millisekunden derselben nativen Uhr, die das Protokoll verwendet. Ersetzen Sie es nicht durch Environment.TickCount, Unix-Zeit oder Ihre eigene Stoppuhr: Der Ursprung wird anders sein. Rufen Sie in einem normalen .cs/.csproj-Programm context.Now() für die übergebenen CSharpScriptGlobals auf.
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.InJournalBetweenTimes("You see", 0, Now());
UO.Print("InJournalBetweenTimes: " + Convert.ToString(result));Parameter und Ablauf:
- Der gestartete Wert wird bis UseSkill gespeichert. endTime weggelassen – bis zum aktuellen Zeitpunkt; „hidden“ ist ein Beispiel für serverseitigen Text.
- Der Fall wird berücksichtigt. Die Nachricht stellt keinen Beweis für den aktuellen Status dar; UO.Hidden() liest den Status des Charakters.
var started = Now();
UO.UseSkill("Hiding");
UO.Wait(500);
if (Truth(UO.InJournalBetweenTimes("hidden", started) > 0))
{
UO.Print(UO.GetFoundedText());
}
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:
- startTime=0 — Beginn der Ausführung; beendet – gespeicherte Endbezeichnung in Millisekunden.
- Neue Nachrichten nach dem Ende werden nicht berücksichtigt. Auch alte Datensätze vor der Laufzeit liegen außerhalb des Intervalls.
return RunScenario();
object? RunScenario()
{
var ended = Now();
var found = UO.InJournalBetweenTimes("notice", 0, ended);
UO.Print("Search result: " + Convert.ToString(found));
return null;
}Parameter und Ablauf:
- Der letzte -1 entfernt die Zeilenbegrenzung und deaktiviert die Groß-/Kleinschreibung. Das dritte Argument ist die Endbezeichnung, nicht die Verzögerung.
- Ergebnis ID: 0 für Erfolg, 1 für fehlgeschlagen. Überprüfung gefunden > 0 ist erforderlich.
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 started = Now();
UO.Wait(350);
var found = UO.InJournalBetweenTimes("success|failed", started, Now(), -1);
if (Truth(found > 0))
{
UO.Print(Convert.ToString(UO.GetFoundedTextID()));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
private int Now() => global::ClassicUO.CSharp.CSharpScriptContext.Current.Now();
}C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.
Parameter: pattern (Any/String), startTime (Any/Integer)
Ergebnis: int / Any.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.InJournalBetweenTimes:InJournalBetweenTimes(Text(0), Arg(1), Arg(2), Arg(3)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(0). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(1). -
InjectionScript.Runtime.InjectionApiUO.InJournalBetweenTimes:InJournalBetweenTimes(Text(0), Arg(1), Arg(2)). -
InjectionScript.Runtime.InjectionApiUO.InJournalBetweenTimes:InJournalBetweenTimes(Text(0), Arg(1)).
Interner Implementierungscode; kein eigenständiges Skript.
case "injournalbetweentimes":
if (arguments.Length > 3)
return new InjectionValue(InJournalBetweenTimes(Text(0), Arg(1), Arg(2), Arg(3)));
if (arguments.Length > 2)
return new InjectionValue(InJournalBetweenTimes(Text(0), Arg(1), Arg(2)));
return new InjectionValue(InJournalBetweenTimes(Text(0), Arg(1)));Parameter: pattern (Any/String), startTime (Any/Integer)
Ergebnis: int / Integer.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.InJournalBetweenTimes. -
InjectionScript.Runtime.InjectionApiUO.InJournalBetweenTimesCore:InJournalBetweenTimesCore(pattern, startTime, CurrentJournalTime(), -1, ignoreCase: false). -
InjectionScript.Runtime.InjectionApiUO.CurrentJournalTime:CurrentJournalTime().
Interner Implementierungscode; kein eigenständiges Skript.
public int InJournalBetweenTimes(string pattern, int startTime)
=> InJournalBetweenTimesCore(pattern, startTime, CurrentJournalTime(), -1, ignoreCase: false);Parameter: pattern (Any/String), startTime (Any/Integer), endTime (Any/Integer)
Ergebnis: int / Any.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.InJournalBetweenTimes:InJournalBetweenTimes(Text(0), Arg(1), Arg(2), Arg(3)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(0). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(1). -
InjectionScript.Runtime.InjectionApiUO.InJournalBetweenTimes:InJournalBetweenTimes(Text(0), Arg(1), Arg(2)). -
InjectionScript.Runtime.InjectionApiUO.InJournalBetweenTimes:InJournalBetweenTimes(Text(0), Arg(1)).
Interner Implementierungscode; kein eigenständiges Skript.
case "injournalbetweentimes":
if (arguments.Length > 3)
return new InjectionValue(InJournalBetweenTimes(Text(0), Arg(1), Arg(2), Arg(3)));
if (arguments.Length > 2)
return new InjectionValue(InJournalBetweenTimes(Text(0), Arg(1), Arg(2)));
return new InjectionValue(InJournalBetweenTimes(Text(0), Arg(1)));
UO.InJournalBetweenTimes(pattern, startTime, endTime) — UO.InJournalBetweenTimes(String,Integer,Integer)
Parameter: pattern (Any/String), startTime (Any/Integer), endTime (Any/Integer)
Ergebnis: int / Integer.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.InJournalBetweenTimes. -
InjectionScript.Runtime.InjectionApiUO.InJournalBetweenTimesCore:InJournalBetweenTimesCore(pattern, startTime, endTime, -1, ignoreCase: false).
Interner Implementierungscode; kein eigenständiges Skript.
public int InJournalBetweenTimes(string pattern, int startTime, int endTime)
=> InJournalBetweenTimesCore(pattern, startTime, endTime, -1, ignoreCase: false);
UO.InJournalBetweenTimes(pattern, startTime, endTime, limit) — UO.InJournalBetweenTimes(Any,Any,Any,Any)
Parameter: pattern (Any/String), startTime (Any/Integer), endTime (Any/Integer), limit (Any/Integer)
Ergebnis: int / Any.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.InJournalBetweenTimes:InJournalBetweenTimes(Text(0), Arg(1), Arg(2), Arg(3)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(0). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(1). -
InjectionScript.Runtime.InjectionApiUO.InJournalBetweenTimes:InJournalBetweenTimes(Text(0), Arg(1), Arg(2)). -
InjectionScript.Runtime.InjectionApiUO.InJournalBetweenTimes:InJournalBetweenTimes(Text(0), Arg(1)).
Interner Implementierungscode; kein eigenständiges Skript.
case "injournalbetweentimes":
if (arguments.Length > 3)
return new InjectionValue(InJournalBetweenTimes(Text(0), Arg(1), Arg(2), Arg(3)));
if (arguments.Length > 2)
return new InjectionValue(InJournalBetweenTimes(Text(0), Arg(1), Arg(2)));
return new InjectionValue(InJournalBetweenTimes(Text(0), Arg(1)));
UO.InJournalBetweenTimes(pattern, startTime, endTime, limit) — UO.InJournalBetweenTimes(String,Integer,Integer,Integer)
Parameter: pattern (Any/String), startTime (Any/Integer), endTime (Any/Integer), limit (Any/Integer)
Ergebnis: int / Integer.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.InJournalBetweenTimes. -
InjectionScript.Runtime.InjectionApiUO.InJournalBetweenTimesCore:InJournalBetweenTimesCore(pattern, startTime, endTime, limit == -1 ? -1 : Math.Max(0, limit), ignoreCase: limit == -1).
Interner Implementierungscode; kein eigenständiges Skript.
public int InJournalBetweenTimes(string pattern, int startTime, int endTime, int limit)
=> InJournalBetweenTimesCore(pattern, startTime, endTime,
limit == -1 ? -1 : Math.Max(0, limit), ignoreCase: limit == -1);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
string UO.Journal(object? index);Liest den Text einer Zeile am aktuellen Index und wählt diesen Eintrag für GetFoundedText/Zeile* aus.
-
index– Obligatorisch int – aktueller Index: 0 bedeutet die neueste Zeile, 1 – die vorherige. Indizes werden verschoben, wenn Nachrichten eintreffen. Dies ist keine serial-, keine ID-Variante des Musters und kein positives Ergebnis von InJournal.
string – Text der Zeichenfolge oder eine leere Zeichenfolge, wenn der Index falsch ist/das Journal leer ist. Eine bestehende Zeile kann auch leeren Text enthalten: Nach dem Lesen bestätigt LineIndex >= 0, dass der Eintrag ausgewählt wurde. Es ist nicht die Anzahl der Zeilen.
- Suchen und Journal/GetJournal/LastJournalMessage Speichern Sie den Text und die Felder eines einzelnen Eintrags im aktuellen Skript. Neue Nachrichten ersetzen diese Felder nicht. Wenn ein Datensatz aus einem begrenzten Journal entfernt wird, bleiben die beibehaltenen Felder erhalten, aber LineIndex/GetFoundedTextIndex gibt -1 zurück. Beim nächsten Suchen oder Lesen wird ein anderer Eintrag ausgewählt; Eine erfolglose Suche, ein ungültiger Index und das Löschen über dieses Skript setzen die Auswahl zurück.
- Direkte Lese-Resets ID Alternativen; Auf GetFoundedTextID/FoundedParamId folgt 0. Das Journal selbst berechnet LineCount nicht neu.
- https://forum.yoko.com.ua/viewtopic.php?p=27633 ; .
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.Journal(0);
UO.Print("Journal: " + Convert.ToString(result));Parameter und Ablauf:
- 0 ist die neueste Zeile. Zuerst werden Text und Autor gelesen, dann wird das Ergebnis angezeigt.
- Print kann eine Nachricht hinzufügen; Der gespeicherte Text/Autor bezieht sich auf den zuvor ausgewählten Eintrag.
var text = UO.Journal(0);
var author = UO.LineName();
UO.Print(author + ": " + text);Parameter und Ablauf:
- 1 ist der vorherige Eintrag, HighJournal ist der maximal verfügbare Index.
- Das Protokoll kann sich zwischen Anrufen ändern. Für Daten einer bereits gefundenen Zeile verwenden Sie GetFoundedText.
return RunScenario();
object? RunScenario()
{
if (Truth(UO.HighJournal() >= 1))
{
var text = UO.Journal(1);
UO.Print(text);
}
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:
- LineIndex=-1 bedeutet, dass der ausgewählte Eintrag fehlt/gelöscht ist. Len(text)=0 allein bedeutet dies nicht.
- Speichern Sie das Testergebnis, bis die Diagnoseausgabe zum Protokoll hinzugefügt wird.
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 text = UO.Journal(0);
var index = UO.LineIndex();
if (Truth(index < 0))
{
UO.Print("No record");
}
else
{
UO.Print("Text length: " + Convert.ToString(Len(text)));
}
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;
}C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.
Parameter: index (Any/Integer)
Ergebnis: string / Any.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.GetJournalText:GetJournalText(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
Interner Implementierungscode; kein eigenständiges Skript.
case "journal": return new InjectionValue(GetJournalText(Arg(0)));Parameter: index (Any/Integer)
Ergebnis: string / String.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.GetJournalText. -
InjectionScript.Runtime.InjectionApiUO.SelectJournalEntry:SelectJournalEntry(ReadJournalSnapshot(index)). -
InjectionScript.Runtime.InjectionApiUO.ReadJournalSnapshot:ReadJournalSnapshot(index).
Interner Implementierungscode; kein eigenständiges Skript.
public string GetJournalText(int index)
{
SelectJournalEntry(ReadJournalSnapshot(index));
return selectedJournalEntry?.Text ?? string.Empty;
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
string UO.JournalColor(object? index);Liest das hue-Feld der Zeile am aktuellen Index, ohne den ausgewählten Eintrag zu ändern.
-
index– Obligatorisch int – aktueller Index: 0 bedeutet die neueste Zeile, 1 – die vorherige. Indizes werden verschoben, wenn Nachrichten eintreffen. Dies ist keine serial-, keine ID-Variante des Musters und kein positives Ergebnis von InJournal.
string - UO hue als 0x0044; wenn der Index 0x0000 falsch ist. Das ist nicht RGB.
- Bei jedem Aufruf wird die aktuelle Position ausgelesen. Für konsistenten Text und Felder desselben Datensatzes zuerst Journal(index), dann GetFoundedText/Line*. Nullwerte können echte Daten sein.
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.JournalColor(0);
UO.Print("JournalColor: " + Convert.ToString(result));Parameter und Ablauf:
- 0 ist der Index der neuen Zeile. Das Vorhandensein eines Puffers wird überprüft.
- string - UO hue als 0x0044; wenn der Index 0x0000 falsch ist. Das ist nicht RGB.
if (Truth(UO.HighJournal() >= 0))
{
var value = UO.JournalColor(0);
UO.Print(Convert.ToString(value));
}
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:
- 1 ist die vorherige Zeile, nicht serial=1.
- Der durch die Suche ausgewählte Eintrag GetFoundedText/Line* wird nicht verändert.
return RunScenario();
object? RunScenario()
{
if (Truth(UO.HighJournal() >= 1))
{
var value = UO.JournalColor(1);
UO.Print(Convert.ToString(value));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Parameter und Ablauf:
- value kopiert das Feld zum Zeitpunkt des Aufrufs. Beim Warten wird die Variable nicht aktualisiert.
- Um die aktuelle Zeile 0 erneut zu lesen, rufen Sie den Befehl erneut auf; Dies kann bereits ein weiterer Eintrag sein.
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 value = UO.JournalColor(0);
UO.Wait(100);
UO.Print("Saved value: " + Convert.ToString(value));
return null;
}
}C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.
Parameter: index (Integer)
Ergebnis: string / String.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.JournalColor. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.JournalColor:bridge.JournalColor(index).
Interner Implementierungscode; kein eigenständiges Skript.
public string JournalColor(int index) => bridge.JournalColor(index);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
string UO.JournalSerial(object? index);Liest das serial-Feld der Zeile am aktuellen Index, ohne den ausgewählten Eintrag zu ändern.
-
index– Obligatorisch int – aktueller Index: 0 bedeutet die neueste Zeile, 1 – die vorherige. Indizes werden verschoben, wenn Nachrichten eintreffen. Dies ist keine serial-, keine ID-Variante des Musters und kein positives Ergebnis von InJournal.
string - serial des Autors als 0x00001234; wenn der Index 0x00000000 falsch ist.
- Bei jedem Aufruf wird die aktuelle Position ausgelesen. Für konsistenten Text und Felder desselben Datensatzes zuerst Journal(index), dann GetFoundedText/Line*. Nullwerte können echte Daten sein.
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.JournalSerial(0);
UO.Print("JournalSerial: " + Convert.ToString(result));Parameter und Ablauf:
- 0 ist der Index der neuen Zeile. Das Vorhandensein eines Puffers wird überprüft.
- string - serial des Autors als 0x00001234; wenn der Index 0x00000000 falsch ist.
if (Truth(UO.HighJournal() >= 0))
{
var value = UO.JournalSerial(0);
UO.Print(Convert.ToString(value));
}
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:
- 1 ist die vorherige Zeile, nicht serial=1.
- Der durch die Suche ausgewählte Eintrag GetFoundedText/Line* wird nicht verändert.
return RunScenario();
object? RunScenario()
{
if (Truth(UO.HighJournal() >= 1))
{
var value = UO.JournalSerial(1);
UO.Print(Convert.ToString(value));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Parameter und Ablauf:
- value kopiert das Feld zum Zeitpunkt des Aufrufs. Beim Warten wird die Variable nicht aktualisiert.
- Um die aktuelle Zeile 0 erneut zu lesen, rufen Sie den Befehl erneut auf; Dies kann bereits ein weiterer Eintrag sein.
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 value = UO.JournalSerial(0);
UO.Wait(100);
UO.Print("Saved value: " + Convert.ToString(value));
return null;
}
}C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.
Parameter: index (Integer)
Ergebnis: string / String.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.JournalSerial. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.JournalSerial:bridge.JournalSerial(index).
Interner Implementierungscode; kein eigenständiges Skript.
public string JournalSerial(int index) => bridge.JournalSerial(index);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.JournalTimer(object? index);Liest das Zeitstempelfeld einer Zeile am aktuellen Index, ohne den ausgewählten Eintrag zu ändern.
-
index– Obligatorisch int – aktueller Index: 0 bedeutet die neueste Zeile, 1 – die vorherige. Indizes werden verschoben, wenn Nachrichten eintreffen. Dies ist keine serial-, keine ID-Variante des Musters und kein positives Ergebnis von InJournal.
int – Aufnahmebezeichnung in Millisekunden ab dem Start der Laufzeit, kompatibel mit Now(). 0 für die Aufnahme vor der Laufzeit; -1 für ungültigen Index/Zeit. Dies ist nicht das Alter des Rekords oder Zehntelsekunden UO.Timer().
- Bei jedem Aufruf wird die aktuelle Position ausgelesen. Für konsistenten Text und Felder desselben Datensatzes zuerst Journal(index), dann GetFoundedText/Line*. Nullwerte können echte Daten sein.
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.JournalTimer(0);
UO.Print("JournalTimer: " + Convert.ToString(result));Parameter und Ablauf:
- 0 ist der Index der neuen Zeile. Das Vorhandensein eines Puffers wird überprüft.
- int – Aufnahmebezeichnung in Millisekunden ab dem Start der Laufzeit, kompatibel mit Now(). 0 für die Aufnahme vor der Laufzeit; -1 für ungültigen Index/Zeit. Dies ist nicht das Alter des Rekords oder Zehntelsekunden UO.Timer().
if (Truth(UO.HighJournal() >= 0))
{
var value = UO.JournalTimer(0);
UO.Print(Convert.ToString(value));
}
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:
- 1 ist die vorherige Zeile, nicht serial=1.
- Der durch die Suche ausgewählte Eintrag GetFoundedText/Line* wird nicht verändert.
return RunScenario();
object? RunScenario()
{
if (Truth(UO.HighJournal() >= 1))
{
var value = UO.JournalTimer(1);
UO.Print(Convert.ToString(value));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Parameter und Ablauf:
- value kopiert das Feld zum Zeitpunkt des Aufrufs. Beim Warten wird die Variable nicht aktualisiert.
- Um die aktuelle Zeile 0 erneut zu lesen, rufen Sie den Befehl erneut auf; Dies kann bereits ein weiterer Eintrag sein.
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 value = UO.JournalTimer(0);
UO.Wait(100);
UO.Print("Saved value: " + Convert.ToString(value));
return null;
}
}C# unterscheidet Groß- und Kleinschreibung. Verwenden Sie den genauen UO-Namen. Numerische Flags mit 0 vergleichen; bool nur bei Rückgabetyp bool verwenden.
Parameter: index (Integer)
Ergebnis: int / Integer.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.JournalTimer. -
InjectionScript.Runtime.InjectionApiUO.JournalEntryTime:JournalEntryTime(index).
Interner Implementierungscode; kein eigenständiges Skript.
public int JournalTimer(int index) => JournalEntryTime(index);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.LastJournalMessage();Liest den Text des neuesten lokalen Protokolleintrags.
Es gibt keine Parameter.
string – Text des neuen Eintrags; leere Zeichenfolge, wenn kein Protokoll vorhanden ist oder der Eintrag selbst leeren Text enthält.
- Suchen und Journal/GetJournal/LastJournalMessage Speichern Sie den Text und die Felder eines einzelnen Eintrags im aktuellen Skript. Neue Nachrichten ersetzen diese Felder nicht. Wenn ein Datensatz aus einem begrenzten Journal entfernt wird, bleiben die beibehaltenen Felder erhalten, aber LineIndex/GetFoundedTextIndex gibt -1 zurück. Beim nächsten Suchen oder Lesen wird ein anderer Eintrag ausgewählt; Eine erfolglose Suche, ein ungültiger Index und das Löschen über dieses Skript setzen die Auswahl zurück.
- Aktualisiert die Zeilen*-Auswahl und die Felder auf die gleiche Weise wie Journal(0).
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.LastJournalMessage();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Parameter und Ablauf:
- Es gibt keine Argumente; text kopiert die aktuelle letzte Zeile.
- Der Ausdruck nach dem Lesen kann selbst zur letzten Nachricht werden.
var text = UO.LastJournalMessage();
UO.Print(text);Parameter und Ablauf:
- FindText gibt die Position von 1 oder 0 zurück. Es wird nur die letzte Zeile überprüft.
- Um das gesamte Protokoll zu durchsuchen, verwenden Sie InJournal.
return RunScenario();
object? RunScenario()
{
var text = UO.LastJournalMessage();
if (Truth(FindText(text, "bank") > 0))
{
UO.Print("Text contains bank");
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
int FindText(object? text, object? value) => (Convert.ToString(text) ?? "").IndexOf(Convert.ToString(value) ?? "", StringComparison.Ordinal) + 1;
int FindText(int start, object? text, object? value)
{
string input = Convert.ToString(text) ?? "";
return input.IndexOf(Convert.ToString(value) ?? "", Math.Clamp(start - 1, 0, input.Length), StringComparison.Ordinal) + 1;
}Parameter und Ablauf:
- Der übereinstimmende Wert wird gespeichert, bis der letzte gelesen wird, sodass er sich bei einer neuen Auswahl nicht ändert.
- Die letzte Nachricht kann sich von der gefundenen unterscheiden; gefunden > 0 bedeutet erfolgreiche Suche.
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 found = UO.InJournal("needle");
var matched = UO.GetFoundedText();
var latest = UO.LastJournalMessage();
UO.Print("Found: " + matched);
UO.Print("Latest: " + latest);
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. -
InjectionScript.Runtime.InjectionApiUO.GetJournalText:GetJournalText(0).
Interner Implementierungscode; kein eigenständiges Skript.
case "lastjournalmessage": return new InjectionValue(GetJournalText(0));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
string UO.LastMessage();Liest den Text des neuesten lokalen Protokolleintrags.
Es gibt keine Parameter.
string – Text des neuen Eintrags; leere Zeichenfolge, wenn kein Protokoll vorhanden ist oder der Eintrag selbst leeren Text enthält.
- Dieser Getter liest den neuen Eintrag, behält aber die alte Auswahl GetFoundedText/Line* bei. Um den neuesten Eintrag auszuwählen, verwenden Sie LastJournalMessage oder Journal (0).
- Primärverzeichnis: https://forum.yoko.com.ua/viewtopic.php?p=27633.
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.LastMessage();
UO.Print("LastMessage: " + Convert.ToString(result));Parameter und Ablauf:
- Es gibt keine Argumente; text kopiert die aktuelle letzte Zeile.
- Der Ausdruck nach dem Lesen kann selbst zur letzten Nachricht werden.
var text = UO.LastMessage();
UO.Print(text);Parameter und Ablauf:
- FindText gibt die Position von 1 oder 0 zurück. Es wird nur die letzte Zeile überprüft.
- Um das gesamte Protokoll zu durchsuchen, verwenden Sie InJournal.
return RunScenario();
object? RunScenario()
{
var text = UO.LastMessage();
if (Truth(FindText(text, "bank") > 0))
{
UO.Print("Text contains bank");
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
int FindText(object? text, object? value) => (Convert.ToString(text) ?? "").IndexOf(Convert.ToString(value) ?? "", StringComparison.Ordinal) + 1;
int FindText(int start, object? text, object? value)
{
string input = Convert.ToString(text) ?? "";
return input.IndexOf(Convert.ToString(value) ?? "", Math.Clamp(start - 1, 0, input.Length), StringComparison.Ordinal) + 1;
}Parameter und Ablauf:
- Der übereinstimmende Wert wird gespeichert, bis der letzte gelesen wird, sodass er sich bei einer neuen Auswahl nicht ändert.
- Die letzte Nachricht kann sich von der gefundenen unterscheiden; gefunden > 0 bedeutet erfolgreiche Suche.
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 found = UO.InJournal("needle");
var matched = UO.GetFoundedText();
var latest = UO.LastMessage();
UO.Print("Found: " + matched);
UO.Print("Latest: " + latest);
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: string / String.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.LastMessage. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.LastMessage:bridge.LastMessage().
Interner Implementierungscode; kein eigenständiges Skript.
public string LastMessage() => bridge.LastMessage();Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.LineCount();Liest die Anzahl der übereinstimmenden Zeilen aus der letzten Suche.
Es gibt keine Parameter.
int ist die Anzahl der übereinstimmenden Datensätze im zuletzt überprüften Bereich. 0 wenn es keine Übereinstimmungen gibt; für newestOnly=true nicht mehr als 1. Dabei handelt es sich nicht um die Anzahl der Zeilen im gesamten Protokoll, noch um die Anzahl des Vorkommens einer Teilzeichenfolge in einer Nachricht, noch um die Position des gefundenen Textes.
- Die Suche berücksichtigt Grenzwert, Zeit, serial, hue und ein Argument SetJournalLine. Direkt Journal/GetJournal berechnet den Zähler nicht neu. Durch die Reinigung wird es zurückgesetzt. Der Zähler gehört zur Bridge des aktuellen Skripts.
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.LineCount();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Parameter und Ablauf:
- Unbegrenzt suchen und registrieren. Es werden die Linien gezählt, nicht die Anzahl der Erze innerhalb der Linie.
- Ergebnis – Position plus 1; Streichhölzer - eine separate Menge.
var result = UO.InJournal("ore", -1);
var matches = UO.LineCount();
UO.Print(Convert.ToString(matches));Parameter und Ablauf:
- 10 – maximale Anzahl der zu prüfenden Zeilen; Fall berücksichtigt wird.
- Die Anzahl kann von 0 bis 10 reichen, auch wenn es noch viel mehr ältere Übereinstimmungen gibt.
return RunScenario();
object? RunScenario()
{
var result = UO.InJournal("ore", 10);
UO.Print(Convert.ToString(UO.LineCount()));
return null;
}Parameter und Ablauf:
- serial/Farbe=-1, Zeit=0/0 – Filter sind deaktiviert. true stoppt die Suche bei der ersten passenden Zeile.
- checkedMatches ist gleich 0 oder 1 und gibt nicht die Gesamtzahl der Übereinstimmungen im gesamten Protokoll 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 result = UO.InJournal("ore", -1, -1, 0, 0, true, false);
var checkedMatches = UO.LineCount();
UO.Print(Convert.ToString(checkedMatches));
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.JournalMatchCount:bridge.JournalMatchCount().
Interner Implementierungscode; kein eigenständiges Skript.
case "linecount": return new InjectionValue(bridge.JournalMatchCount());Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.LineID();Gibt den numerischen serial des Autors des ausgewählten Journaleintrags zurück.
Es gibt keine Parameter.
int - 32-Bit serial des Autors. Keine Wahl – 0. Das höchstwertige Bit kann aufgrund des vorzeichenbehafteten int zu einer negativen Zahl führen; GetFoundedTextSerial behält die vollständige Hex-Darstellung bei. Dies ist nicht graphic/type.
- Suchen und Journal/GetJournal/LastJournalMessage Speichern Sie den Text und die Felder eines einzelnen Eintrags im aktuellen Skript. Neue Nachrichten ersetzen diese Felder nicht. Wenn ein Datensatz aus einem begrenzten Journal entfernt wird, bleiben die beibehaltenen Felder erhalten, aber LineIndex/GetFoundedTextIndex gibt -1 zurück. Beim nächsten Suchen oder Lesen wird ein anderer Eintrag ausgewählt; Eine erfolglose Suche, ein ungültiger Index und das Löschen über dieses Skript setzen die Auswahl zurück.
- Getter führt keine Suche durch und wählt nicht die neueste Zeile aus. Null-/Leerwerte können gültige Daten sein; Betrachten Sie das Suchergebnis.
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.LineID();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Parameter und Ablauf:
- hinweis – ein Beispiel des gesuchten Textes. Der Getter wird ohne Parameter erst nach erfolgreicher Suche aufgerufen.
- int - 32-Bit serial des Autors. Keine Wahl – 0. Das höchstwertige Bit kann aufgrund des vorzeichenbehafteten int zu einer negativen Zahl führen; GetFoundedTextSerial behält die vollständige Hex-Darstellung bei. Dies ist nicht graphic/type.
if (Truth(UO.InJournal("notice") > 0))
{
var value = UO.LineID();
UO.Print("Speaker serial: " + Convert.ToString(value));
}
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:
- Journal(0) wählt einen neuen Eintrag aus. Index und Wert werden bis Print gelesen.
- Mit der Indexprüfung können Sie zwischen dem Fehlen eines Datensatzes und einem gültigen Null- oder Leerfeld unterscheiden.
return RunScenario();
object? RunScenario()
{
var text = UO.Journal(0);
var index = UO.LineIndex();
var value = UO.LineID();
if (Truth(index >= 0))
{
UO.Print(Convert.ToString(value));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Parameter und Ablauf:
- Die erste Suche wählt erfolgreich aus, die zweite ersetzt oder setzt die Auswahl zurück. Das gespeicherte Feld enthält bereits eine Kopie des erforderlichen Felds.
- Der gespeicherte var ändert sich bei einer erneuten Suche, dem Löschen oder Empfangen von Nachrichten nicht.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
if (Truth(UO.InJournal("success") > 0))
{
var saved = UO.LineID();
var nextMatch = UO.InJournal("failed");
UO.Print("Saved: " + Convert.ToString(saved));
}
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: dynamic / Any.
Beim Aufruf:
Interner Implementierungscode; kein eigenständiges Skript.
case "lineid": return new InjectionValue(selectedJournalEntry?.Serial ?? 0);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.LineIndex();Gibt den aktuellen Index des ausgewählten Eintrags zurück, sofern dieser noch im Protokoll gespeichert ist.
Es gibt keine Parameter.
int ist der aktuelle Index von 0 (neueste Zeile). -1 bedeutet, dass es keine Auswahl gibt oder der ausgewählte Eintrag bereits gelöscht/vorbelegt wurde. Dies ist nicht das Ergebnis von InJournal: 1 muss nicht vom Index abgezogen werden.
- Suchen und Journal/GetJournal/LastJournalMessage Speichern Sie den Text und die Felder eines einzelnen Eintrags im aktuellen Skript. Neue Nachrichten ersetzen diese Felder nicht. Wenn ein Datensatz aus einem begrenzten Journal entfernt wird, bleiben die beibehaltenen Felder erhalten, aber LineIndex/GetFoundedTextIndex gibt -1 zurück. Beim nächsten Suchen oder Lesen wird ein anderer Eintrag ausgewählt; Eine erfolglose Suche, ein ungültiger Index und das Löschen über dieses Skript setzen die Auswahl zurück.
- Der Index wird basierend auf der Identität des Datensatzes neu berechnet. Neue Nachrichten erhöhen es. Der alte gespeicherte Index ist nicht konstant ID; Für Text ist GetFoundedText sicherer.
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.LineIndex();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Parameter und Ablauf:
- Getter ohne Argumente liest die Auswahl des aktuellen Skripts. 0 – neue Zeile, -1 – keine Zeile im aktuellen Puffer.
- Der Text wird aus dem gespeicherten Eintrag übernommen, sodass er nicht durch neue Nachrichten ersetzt wird.
if (Truth(UO.InJournal("notice") > 0))
{
var index = UO.LineIndex();
var text = UO.GetFoundedText();
UO.Print(Convert.ToString(index) + ": " + text);
}
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:
- Journal(0) wählt den letzten Eintrag aus; Die Prüfung schließt ein leeres Protokoll aus.
- Für einen gültigen Eintrag ist leerer Text zulässig.
return RunScenario();
object? RunScenario()
{
var text = UO.Journal(0);
if (Truth(UO.LineIndex() >= 0))
{
UO.Print(text);
}
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 auf 100 ms ermöglicht den Eingang neuer Nachrichten. after findet den gleichen Eintrag wieder.
- nach kann zunehmen oder zu -1 werden, wenn es entfernt wird; GetFoundedText enthält noch den gespeicherten Text.
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.InJournal("needle") > 0))
{
var before = UO.LineIndex();
UO.Wait(100);
var after = UO.LineIndex();
UO.Print(Convert.ToString(before) + " -> " + Convert.ToString(after));
}
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: dynamic / Any.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.GetFoundedTextIndex:GetFoundedTextIndex().
Interner Implementierungscode; kein eigenständiges Skript.
case "lineindex": return new InjectionValue(GetFoundedTextIndex());Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.LineMsgType();Gibt den Netzwerknachrichtentyp des ausgewählten Protokolleintrags zurück.
Es gibt keine Parameter.
int - Code MessageType: 0 Regular, 1 System, 2 Emote, 3 Limit3Spell, 6 Label, 7 Focus, 8 Whisper, 9 Yell, 10 Zauber, 13 Gilde, 14 Allianz, 15 Kommando, 16 GmChat, 192 Verschlüsselt, 255 Gruppe. Keine Wahl 0. Dies sind die Classic-Codes UO; Ersetzen Sie sie nicht durch andere Nummern aus Beispielen von Drittanbietern.
- Suchen und Journal/GetJournal/LastJournalMessage Speichern Sie den Text und die Felder eines einzelnen Eintrags im aktuellen Skript. Neue Nachrichten ersetzen diese Felder nicht. Wenn ein Datensatz aus einem begrenzten Journal entfernt wird, bleiben die beibehaltenen Felder erhalten, aber LineIndex/GetFoundedTextIndex gibt -1 zurück. Beim nächsten Suchen oder Lesen wird ein anderer Eintrag ausgewählt; Eine erfolglose Suche, ein ungültiger Index und das Löschen über dieses Skript setzen die Auswahl zurück.
- Getter führt keine Suche durch und wählt nicht die neueste Zeile aus. Null-/Leerwerte können gültige Daten sein; Betrachten Sie das Suchergebnis.
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.LineMsgType();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Parameter und Ablauf:
- hinweis – ein Beispiel des gesuchten Textes. Der Getter wird ohne Parameter erst nach erfolgreicher Suche aufgerufen.
- int - Code MessageType: 0 Regular, 1 System, 2 Emote, 3 Limit3Spell, 6 Label, 7 Focus, 8 Whisper, 9 Yell, 10 Zauber, 13 Gilde, 14 Allianz, 15 Kommando, 16 GmChat, 192 Verschlüsselt, 255 Gruppe. Keine Wahl 0. Dies sind die Classic-Codes UO; Ersetzen Sie sie nicht durch andere Nummern aus Beispielen von Drittanbietern.
if (Truth(UO.InJournal("notice") > 0))
{
var value = UO.LineMsgType();
UO.Print("Message type: " + Convert.ToString(value));
}
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:
- Journal(0) wählt einen neuen Eintrag aus. Index und Wert werden bis Print gelesen.
- Mit der Indexprüfung können Sie zwischen dem Fehlen eines Datensatzes und einem gültigen Null- oder Leerfeld unterscheiden.
return RunScenario();
object? RunScenario()
{
var text = UO.Journal(0);
var index = UO.LineIndex();
var value = UO.LineMsgType();
if (Truth(index >= 0))
{
UO.Print(Convert.ToString(value));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Parameter und Ablauf:
- Die erste Suche wählt erfolgreich aus, die zweite ersetzt oder setzt die Auswahl zurück. Das gespeicherte Feld enthält bereits eine Kopie des erforderlichen Felds.
- Der gespeicherte var ändert sich bei einer erneuten Suche, dem Löschen oder Empfangen von Nachrichten nicht.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
if (Truth(UO.InJournal("success") > 0))
{
var saved = UO.LineMsgType();
var nextMatch = UO.InJournal("failed");
UO.Print("Saved: " + Convert.ToString(saved));
}
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: dynamic / Any.
Beim Aufruf:
Interner Implementierungscode; kein eigenständiges Skript.
case "linemsgtype": return new InjectionValue(selectedJournalEntry?.MessageType ?? 0);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.LineName();Gibt den Autorennamen des ausgewählten Journaleintrags zurück.
Es gibt keine Parameter.
string – der Name des Autors des ausgewählten Eintrags, zum Beispiel System oder der Name des Charakters; leere Zeichenfolge ohne Auswahl/ohne Namen. Ein Name garantiert nicht die Einzigartigkeit eines Charakters.
- Suchen und Journal/GetJournal/LastJournalMessage Speichern Sie den Text und die Felder eines einzelnen Eintrags im aktuellen Skript. Neue Nachrichten ersetzen diese Felder nicht. Wenn ein Datensatz aus einem begrenzten Journal entfernt wird, bleiben die beibehaltenen Felder erhalten, aber LineIndex/GetFoundedTextIndex gibt -1 zurück. Beim nächsten Suchen oder Lesen wird ein anderer Eintrag ausgewählt; Eine erfolglose Suche, ein ungültiger Index und das Löschen über dieses Skript setzen die Auswahl zurück.
- Getter führt keine Suche durch und wählt nicht die neueste Zeile aus. Null-/Leerwerte können gültige Daten sein; Betrachten Sie das Suchergebnis.
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.LineName();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Parameter und Ablauf:
- hinweis – ein Beispiel des gesuchten Textes. Der Getter wird ohne Parameter erst nach erfolgreicher Suche aufgerufen.
- string – der Name des Autors des ausgewählten Eintrags, zum Beispiel System oder der Name des Charakters; leere Zeichenfolge ohne Auswahl/ohne Namen. Ein Name garantiert nicht die Einzigartigkeit eines Charakters.
if (Truth(UO.InJournal("notice") > 0))
{
var value = UO.LineName();
UO.Print("Speaker: " + Convert.ToString(value));
}
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:
- Journal(0) wählt einen neuen Eintrag aus. Index und Wert werden bis Print gelesen.
- Mit der Indexprüfung können Sie zwischen dem Fehlen eines Datensatzes und einem gültigen Null- oder Leerfeld unterscheiden.
return RunScenario();
object? RunScenario()
{
var text = UO.Journal(0);
var index = UO.LineIndex();
var value = UO.LineName();
if (Truth(index >= 0))
{
UO.Print(Convert.ToString(value));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Parameter und Ablauf:
- Die erste Suche wählt erfolgreich aus, die zweite ersetzt oder setzt die Auswahl zurück. Das gespeicherte Feld enthält bereits eine Kopie des erforderlichen Felds.
- Der gespeicherte var ändert sich bei einer erneuten Suche, dem Löschen oder Empfangen von Nachrichten nicht.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
if (Truth(UO.InJournal("success") > 0))
{
var saved = UO.LineName();
var nextMatch = UO.InJournal("failed");
UO.Print("Saved: " + Convert.ToString(saved));
}
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: dynamic / Any.
Beim Aufruf:
Interner Implementierungscode; kein eigenständiges Skript.
case "linename": return new InjectionValue(selectedJournalEntry?.Name ?? string.Empty);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.LineTextColor();Gibt die numerische Farbe des ausgewählten Protokolleintrags zurück.
Es gibt keine Parameter.
int - UO hue des ausgewählten Eintrags (0…65535); keine Wahl 0. Als Farbe ist Null akzeptabel. Dies ist nicht das RGB oder ID des Autors.
- Suchen und Journal/GetJournal/LastJournalMessage Speichern Sie den Text und die Felder eines einzelnen Eintrags im aktuellen Skript. Neue Nachrichten ersetzen diese Felder nicht. Wenn ein Datensatz aus einem begrenzten Journal entfernt wird, bleiben die beibehaltenen Felder erhalten, aber LineIndex/GetFoundedTextIndex gibt -1 zurück. Beim nächsten Suchen oder Lesen wird ein anderer Eintrag ausgewählt; Eine erfolglose Suche, ein ungültiger Index und das Löschen über dieses Skript setzen die Auswahl zurück.
- Getter führt keine Suche durch und wählt nicht die neueste Zeile aus. Null-/Leerwerte können gültige Daten sein; Betrachten Sie das Suchergebnis.
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.LineTextColor();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Parameter und Ablauf:
- hinweis – ein Beispiel des gesuchten Textes. Der Getter wird ohne Parameter erst nach erfolgreicher Suche aufgerufen.
- int - UO hue des ausgewählten Eintrags (0…65535); keine Wahl 0. Als Farbe ist Null akzeptabel. Dies ist nicht das RGB oder ID des Autors.
if (Truth(UO.InJournal("notice") > 0))
{
var value = UO.LineTextColor();
UO.Print("Hue: " + Convert.ToString(value));
}
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:
- Journal(0) wählt einen neuen Eintrag aus. Index und Wert werden bis Print gelesen.
- Mit der Indexprüfung können Sie zwischen dem Fehlen eines Datensatzes und einem gültigen Null- oder Leerfeld unterscheiden.
return RunScenario();
object? RunScenario()
{
var text = UO.Journal(0);
var index = UO.LineIndex();
var value = UO.LineTextColor();
if (Truth(index >= 0))
{
UO.Print(Convert.ToString(value));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Parameter und Ablauf:
- Die erste Suche wählt erfolgreich aus, die zweite ersetzt oder setzt die Auswahl zurück. Das gespeicherte Feld enthält bereits eine Kopie des erforderlichen Felds.
- Der gespeicherte var ändert sich bei einer erneuten Suche, dem Löschen oder Empfangen von Nachrichten nicht.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
if (Truth(UO.InJournal("success") > 0))
{
var saved = UO.LineTextColor();
var nextMatch = UO.InJournal("failed");
UO.Print("Saved: " + Convert.ToString(saved));
}
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: dynamic / Any.
Beim Aufruf:
Interner Implementierungscode; kein eigenständiges Skript.
case "linetextcolor":
return new InjectionValue(selectedJournalEntry?.Color ?? 0);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.LineTextFont();Gibt die Schriftart des ausgewählten Protokolleintrags zurück.
Es gibt keine Parameter.
int — UO Schriftart ID des ausgewählten Datensatzes (0…255 im Client); keine Wahl 0. Dies ist die ID-Spielschriftart, nicht die IDE-Schriftgröße.
- Suchen und Journal/GetJournal/LastJournalMessage Speichern Sie den Text und die Felder eines einzelnen Eintrags im aktuellen Skript. Neue Nachrichten ersetzen diese Felder nicht. Wenn ein Datensatz aus einem begrenzten Journal entfernt wird, bleiben die beibehaltenen Felder erhalten, aber LineIndex/GetFoundedTextIndex gibt -1 zurück. Beim nächsten Suchen oder Lesen wird ein anderer Eintrag ausgewählt; Eine erfolglose Suche, ein ungültiger Index und das Löschen über dieses Skript setzen die Auswahl zurück.
- Getter führt keine Suche durch und wählt nicht die neueste Zeile aus. Null-/Leerwerte können gültige Daten sein; Betrachten Sie das Suchergebnis.
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.LineTextFont();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Parameter und Ablauf:
- hinweis – ein Beispiel des gesuchten Textes. Der Getter wird ohne Parameter erst nach erfolgreicher Suche aufgerufen.
- int — UO Schriftart ID des ausgewählten Datensatzes (0…255 im Client); keine Wahl 0. Dies ist die ID-Spielschriftart, nicht die IDE-Schriftgröße.
if (Truth(UO.InJournal("notice") > 0))
{
var value = UO.LineTextFont();
UO.Print("Font ID: " + Convert.ToString(value));
}
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:
- Journal(0) wählt einen neuen Eintrag aus. Index und Wert werden bis Print gelesen.
- Mit der Indexprüfung können Sie zwischen dem Fehlen eines Datensatzes und einem gültigen Null- oder Leerfeld unterscheiden.
return RunScenario();
object? RunScenario()
{
var text = UO.Journal(0);
var index = UO.LineIndex();
var value = UO.LineTextFont();
if (Truth(index >= 0))
{
UO.Print(Convert.ToString(value));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Parameter und Ablauf:
- Die erste Suche wählt erfolgreich aus, die zweite ersetzt oder setzt die Auswahl zurück. Das gespeicherte Feld enthält bereits eine Kopie des erforderlichen Felds.
- Der gespeicherte var ändert sich bei einer erneuten Suche, dem Löschen oder Empfangen von Nachrichten nicht.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
if (Truth(UO.InJournal("success") > 0))
{
var saved = UO.LineTextFont();
var nextMatch = UO.InJournal("failed");
UO.Print("Saved: " + Convert.ToString(saved));
}
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: dynamic / Any.
Beim Aufruf:
Interner Implementierungscode; kein eigenständiges Skript.
case "linetextfont": return new InjectionValue(selectedJournalEntry?.Font ?? 0);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.LineTime();Gibt den Kalenderzeitstempel des ausgewählten Protokolleintrags zurück.
Es gibt keine Parameter.
double — OLE Automatisierung Date, Anzahl der Tage ab 30.12.1899, der Nachkommateil gibt die Tageszeit an. Keine Wahl 0. Es handelt sich nicht um Now()-Millisekunden oder einen ganzen Unix-Zeitstempel. Die Differenz zweier solcher Markierungen wird für Millisekunden mit 86400000 multipliziert.
- Suchen und Journal/GetJournal/LastJournalMessage Speichern Sie den Text und die Felder eines einzelnen Eintrags im aktuellen Skript. Neue Nachrichten ersetzen diese Felder nicht. Wenn ein Datensatz aus einem begrenzten Journal entfernt wird, bleiben die beibehaltenen Felder erhalten, aber LineIndex/GetFoundedTextIndex gibt -1 zurück. Beim nächsten Suchen oder Lesen wird ein anderer Eintrag ausgewählt; Eine erfolglose Suche, ein ungültiger Index und das Löschen über dieses Skript setzen die Auswahl zurück.
- Getter führt keine Suche durch und wählt nicht die neueste Zeile aus. Null-/Leerwerte können gültige Daten sein; Betrachten Sie das Suchergebnis.
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.LineTime();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Parameter und Ablauf:
- hinweis – ein Beispiel des gesuchten Textes. Der Getter wird ohne Parameter erst nach erfolgreicher Suche aufgerufen.
- double — OLE Automatisierung Date, Anzahl der Tage ab 30.12.1899, der Nachkommateil gibt die Tageszeit an. Keine Wahl 0. Es handelt sich nicht um Now()-Millisekunden oder einen ganzen Unix-Zeitstempel. Die Differenz zweier solcher Markierungen wird für Millisekunden mit 86400000 multipliziert.
if (Truth(UO.InJournal("notice") > 0))
{
var value = UO.LineTime();
UO.Print("OLE date: " + Convert.ToString(value));
}
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:
- Journal(0) wählt einen neuen Eintrag aus. Index und Wert werden bis Print gelesen.
- Mit der Indexprüfung können Sie zwischen dem Fehlen eines Datensatzes und einem gültigen Null- oder Leerfeld unterscheiden.
return RunScenario();
object? RunScenario()
{
var text = UO.Journal(0);
var index = UO.LineIndex();
var value = UO.LineTime();
if (Truth(index >= 0))
{
UO.Print(Convert.ToString(value));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Parameter und Ablauf:
- Die erste Suche wählt erfolgreich aus, die zweite ersetzt oder setzt die Auswahl zurück. Das gespeicherte Feld enthält bereits eine Kopie des erforderlichen Felds.
- Der gespeicherte var ändert sich bei einer erneuten Suche, dem Löschen oder Empfangen von Nachrichten nicht.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
if (Truth(UO.InJournal("success") > 0))
{
var saved = UO.LineTime();
var nextMatch = UO.InJournal("failed");
UO.Print("Saved: " + Convert.ToString(saved));
}
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: dynamic / Any.
Beim Aufruf:
Interner Implementierungscode; kein eigenständiges Skript.
case "linetime": return new InjectionValue(selectedJournalEntry?.Timestamp ?? 0d);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.LineType();Gibt die Textkategorie des ausgewählten Protokolleintrags zurück.
Es gibt keine Parameter.
int - Kategorie TextType des Kunden: 0 CLIENT, 1 SYSTEM, 2 OBJECT, 3 GUILD_ALLY. Keine Wahl 0. Dies ist eine Anzeigekategorie, nicht serial, nicht graphic und nicht MessageType.
- Suchen und Journal/GetJournal/LastJournalMessage Speichern Sie den Text und die Felder eines einzelnen Eintrags im aktuellen Skript. Neue Nachrichten ersetzen diese Felder nicht. Wenn ein Datensatz aus einem begrenzten Journal entfernt wird, bleiben die beibehaltenen Felder erhalten, aber LineIndex/GetFoundedTextIndex gibt -1 zurück. Beim nächsten Suchen oder Lesen wird ein anderer Eintrag ausgewählt; Eine erfolglose Suche, ein ungültiger Index und das Löschen über dieses Skript setzen die Auswahl zurück.
- Getter führt keine Suche durch und wählt nicht die neueste Zeile aus. Null-/Leerwerte können gültige Daten sein; Betrachten Sie das Suchergebnis.
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.LineType();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Parameter und Ablauf:
- hinweis – ein Beispiel des gesuchten Textes. Der Getter wird ohne Parameter erst nach erfolgreicher Suche aufgerufen.
- int - Kategorie TextType des Kunden: 0 CLIENT, 1 SYSTEM, 2 OBJECT, 3 GUILD_ALLY. Keine Wahl 0. Dies ist eine Anzeigekategorie, nicht serial, nicht graphic und nicht MessageType.
if (Truth(UO.InJournal("notice") > 0))
{
var value = UO.LineType();
UO.Print("Text category: " + Convert.ToString(value));
}
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:
- Journal(0) wählt einen neuen Eintrag aus. Index und Wert werden bis Print gelesen.
- Mit der Indexprüfung können Sie zwischen dem Fehlen eines Datensatzes und einem gültigen Null- oder Leerfeld unterscheiden.
return RunScenario();
object? RunScenario()
{
var text = UO.Journal(0);
var index = UO.LineIndex();
var value = UO.LineType();
if (Truth(index >= 0))
{
UO.Print(Convert.ToString(value));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Parameter und Ablauf:
- Die erste Suche wählt erfolgreich aus, die zweite ersetzt oder setzt die Auswahl zurück. Das gespeicherte Feld enthält bereits eine Kopie des erforderlichen Felds.
- Der gespeicherte var ändert sich bei einer erneuten Suche, dem Löschen oder Empfangen von Nachrichten nicht.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
if (Truth(UO.InJournal("success") > 0))
{
var saved = UO.LineType();
var nextMatch = UO.InJournal("failed");
UO.Print("Saved: " + Convert.ToString(saved));
}
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: dynamic / Any.
Beim Aufruf:
Interner Implementierungscode; kein eigenständiges Skript.
case "linetype": return new InjectionValue(selectedJournalEntry?.TextType ?? 0);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.LowJournal();Gibt den minimal verfügbaren Protokollindex zurück.
Es gibt keine Parameter.
int: -1 wenn das Magazin leer ist; andernfalls ist 0 der Index des neuesten verfügbaren Datensatzes. Journal/GetJournal verwenden Nullindizes vom neuen zum alten Datensatz; ein positives Ergebnis InJournal verwendet eine andere Einzelzählung.
- Neue Nachrichten und Aufräumarbeiten verändern die Grenzen. Die Reihenfolge hier ist Journal(0) vom neuen Eintrag zum alten Eintrag.
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.LowJournal();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Parameter und Ablauf:
- Eine negative Grenze bedeutet einen leeren Puffer.
- Wenn der Puffer nicht leer ist, liest Journal(0) einen neuen Eintrag.
if (Truth(UO.LowJournal() >= 0))
{
var text = UO.Journal(0);
UO.Print(text);
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Parameter und Ablauf:
- Der Index wird direkt an Journal übergeben, ohne dass eins abgezogen wird.
- Der Index kann sich mit eingehenden Nachrichten verschieben; Der Puffer wird zwischen Aufrufen nicht eingefroren.
return RunScenario();
object? RunScenario()
{
var index = UO.LowJournal();
if (Truth(index >= 0))
{
var text = UO.Journal(index);
UO.Print(text);
}
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:
- LowJournal und HighJournal bilden die Grenzen der Indizes. Es ist nicht die Anzahl der Zeilen; Der Protokollinhalt kann sich zwischen den Anrufen ändern.
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()
{
int first = UO.LowJournal();
int last = UO.HighJournal();
if (first > last)
return null;
for (int index = first; index <= last; index++)
UO.Print($"{index}: {UO.Journal(index)}");
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.JournalEntryCount:bridge.JournalEntryCount().
Interner Implementierungscode; kein eigenständiges Skript.
case "lowjournal": return new InjectionValue(bridge.JournalEntryCount() == 0 ? -1 : 0);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.SetJournalLine(object? index);
void UO.SetJournalLine(object? stringIndex, object? text);Ändert den Text einer Zeile; Ein separates Formular mit einem Argument gibt die Untergrenze der Suche an.
-
index– Für Formular (Index, Text): aktueller Index von 0, wobei 0 eine neue Zeile ist. Für Formular (Index): Anzahl der alten Zeilen, die vom Anfang des internen Puffers übersprungen wurden, nicht Index Journal; 0 hebt die Einschränkung auf. Die negative Ein-Argument-Grenze ist auf 0 beschränkt. -
stringIndex– Der Name des Index in der kompatiblen Protokollierung mit zwei Argumenten: der aktuelle Index Journal von 0. -
text– Neuer Text einer vorhandenen Zeile, einschließlich einer Leerzeile. Erforderlich im Textersetzungsformular.
void – kein Rückgabewert. Wenn der Index ungültig ist, ändert die Form mit zwei Argumenten nichts. Die Ein-Argument-Form ändert den Text nicht.
- Der Ersatz erfolgt lokal, es wird nichts an den Server gesendet. Die Felder „Autor/Zeit“ bleiben erhalten. Ein bereits ausgewählter Text-Snapshot bleibt unverändert, bis das Journal oder die Suche wiederholt wird.
- Die Ein-Argument-Grenze ist eine veraltete Erweiterung: die Anzahl der alten Zeilen im aktuellen Puffer; Wenn Datensätze verdrängt/gelöscht werden, ändert sich ihre Bedeutung. Für eine zuverlässige Grenze zwischen Aktionen verwenden Sie InJournalBetweenTimes mit Now().
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.SetJournalLine");
UO.SetJournalLine(0);Parameter und Ablauf:
- 0 – neue Zeile; Das zweite Argument ist der neue Volltext.
- Dadurch ändert sich der lokale Puffer. Zwischen Lesen und Schreiben können neue Nachrichten eintreffen; der Index ist nicht konstant ID.
if (Truth(UO.HighJournal() >= 0))
{
var text = UO.Journal(0);
UO.SetJournalLine(0, "[read] " + text);
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Parameter und Ablauf:
- Eine leere Zeile ersetzt den Text, entfernt jedoch weder den Eintrag noch seinen Autor.
- Ungültiger Index wird übersprungen. existiert kann true sein, auch mit text="".
return RunScenario();
object? RunScenario()
{
UO.SetJournalLine(0, "");
var text = UO.Journal(0);
var exists = UO.LineIndex() >= 0;
UO.Print(Convert.ToString(exists));
return null;
}Parameter und Ablauf:
- Ein Argument 0 bedeutet, alte Zeilen nicht zu überspringen; Dies ist eine andere Form des Befehls.
- Suche ohne Einschränkungen und ohne Berücksichtigung der Groß-/Kleinschreibung. Durch dieses Formular wird kein Text ersetzt.
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.SetJournalLine(0);
var found = UO.InJournal("notice", -1);
UO.Print(Convert.ToString(found));
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: index (Integer)
Ergebnis: void / Unit.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.SetJournalLine. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetJournalLine:bridge.SetJournalLine(index).
Interner Implementierungscode; kein eigenständiges Skript.
public void SetJournalLine(int index) => bridge.SetJournalLine(index);Parameter: stringIndex (Any/Integer), text (Any/String)
Ergebnis: void / Unit.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetJournalLine:bridge.SetJournalLine(Arg(0), Text(1)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(1). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetJournalLine:bridge.SetJournalLine(Arg(0)).
Interner Implementierungscode; kein eigenständiges Skript.
case "setjournalline":
if (arguments.Length > 1) bridge.SetJournalLine(Arg(0), Text(1));
else bridge.SetJournalLine(Arg(0));
return InjectionValue.Unit;Parameter: stringIndex (Any/Integer), text (Any/String)
Ergebnis: void / Unit.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.SetJournalLine. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetJournalLine:bridge.SetJournalLine(index, text).
Interner Implementierungscode; kein eigenständiges Skript.
public void SetJournalLine(int index, string text) => bridge.SetJournalLine(index, text);ClassicUO — Bad Newbie & C# Scripts IDE