DE UO Topic journal Part 2 - LIHACHTETAN/ClassicUO-Bad-Newbie-CSharp-Scripts-IDE GitHub Wiki
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
Home · C# · IDE · UO API · A–Z · Beispiele · Sprachen
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.WaitJournalLine(object? startTime, object? str, object? maxWaitTimeMS);Wartet auf eine passende Meldung im lokalen Protokoll.
-
startTime– Erforderliches Startlabel: int Now() in Millisekunden, 0 – Beginn der Ausführung. Ebenfalls akzeptiert wird das Datum double OLE ab LineTime (moderne Daten 20000…100000 Tage). Ganze 20000…100000 sind immer Millisekunden, kein Datum. Geben Sie nicht das Alter des Eintrags an. -
str– 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. Suche ohne Berücksichtigung der Groß-/Kleinschreibung. -
maxWaitTimeMS– Obligatorisches int-Timeout in Millisekunden; Ein positiver Wert begrenzt das Warten, 0 bedeutet Warten ohne Begrenzung. Negative Werte sind auf 0 begrenzt. Das Anhalten des Skripts unterbricht die Wartezeit.
bool - true, wenn der Text gefunden wird, false, wenn ein positiver Timeout ohne Übereinstimmung vorliegt. Dies ist kein Index oder eine Größe. Boolesche Werte können im Skript auch als 1/0 angezeigt werden.
Das Ergebnis des Befehls ist ein numerisches Flag: 1 bedeutet eine erfüllte Bedingung, 0 bedeutet eine nicht erfüllte Bedingung. Nach var result = command(...) prüfen, ob (result != 0) oder if (result == 0). Speichern Sie das Ergebnis eines Aufrufs: Ein wiederholter Aufruf kann die Aktion erneut ausführen oder den Status lesen, der sich bereits geändert hat.
- 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 anfängliche Grenze ist beim Aufruf festgelegt, die Abfrage erfolgt ungefähr alle 25 ms. Die Vorfreude selbst löst die Fertigkeit oder den Gegenstand nicht aus. LineCount nach dem Warten bezieht sich auf die letzte Suche.
- Um nur Systemzeichenfolgen zu filtern, verwenden Sie WaitJournalLineSystem.
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.WaitJournalLine(Now(), "success|failed", 3000);
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Parameter und Ablauf:
- begonnen – die Grenze vor dem Warten. 3000 – maximale Wartezeit in Millisekunden. Das Muster enthält zwei Ergebnisse.
- false – Text wurde innerhalb dieses Zeitraums nicht gefunden; Der Server hätte eine andere Formulierung verwenden können.
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;Parameter und Ablauf:
- 0 – Start der Laufzeit, Timeout nicht deaktivieren. 100 – Zeitüberschreitung.
- Die gefundene Zeile befindet sich möglicherweise bereits vor dem Anruf im Protokoll.
return RunScenario();
object? RunScenario()
{
if (Truth(UO.WaitJournalLine(0, "notice", 100)))
{
var author = UO.LineName();
UO.Print(author);
}
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:
- Stempel speichert double LineTime ohne Konvertieren.ToInt32/Konvertieren.ToString: Dies ist ein Kalenderdatum, nicht Now(). 1500 – Millisekunden warten.
- Der Rand ist aktiviert. Die ausgewählte Zeichenfolge selbst kann geeignet sein, wenn sie eine Antwort enthält.
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);
if (Truth(UO.LineIndex() >= 0))
{
var stamp = UO.LineTime();
var found = UO.WaitJournalLine(stamp, "response", 1500);
UO.Print(Convert.ToString(found));
}
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: startTime (Any), str (Any), maxWaitTimeMS (Any)
Ergebnis: dynamic / Any.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.WaitJournalLine:WaitJournalLine(arguments, false).
Interner Implementierungscode; kein eigenständiges Skript.
case "waitjournalline": return WaitJournalLine(arguments, false);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.WaitJournalLineSystem(object? startTime, object? str, object? maxWaitTimeMS);Wartet auf eine passende Nachricht mit dem Namen des Autors System.
-
startTime– Erforderliches Startlabel: int Now() in Millisekunden, 0 – Beginn der Ausführung. Ebenfalls akzeptiert wird das Datum double OLE ab LineTime (moderne Daten 20000…100000 Tage). Ganze 20000…100000 sind immer Millisekunden, kein Datum. Geben Sie nicht das Alter des Eintrags an. -
str– 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. Suche ohne Berücksichtigung der Groß-/Kleinschreibung. -
maxWaitTimeMS– Obligatorisches int-Timeout in Millisekunden; Ein positiver Wert begrenzt das Warten, 0 bedeutet Warten ohne Begrenzung. Negative Werte sind auf 0 begrenzt. Das Anhalten des Skripts unterbricht die Wartezeit.
bool - true, wenn der Text gefunden wird, false, wenn ein positiver Timeout ohne Übereinstimmung vorliegt. Dies ist kein Index oder eine Größe. Boolesche Werte können im Skript auch als 1/0 angezeigt werden.
Das Ergebnis des Befehls ist ein numerisches Flag: 1 bedeutet eine erfüllte Bedingung, 0 bedeutet eine nicht erfüllte Bedingung. Nach var result = command(...) prüfen, ob (result != 0) oder if (result == 0). Speichern Sie das Ergebnis eines Aufrufs: Ein wiederholter Aufruf kann die Aktion erneut ausführen oder den Status lesen, der sich bereits geändert hat.
- 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 anfängliche Grenze ist beim Aufruf festgelegt, die Abfrage erfolgt ungefähr alle 25 ms. Die Vorfreude selbst löst die Fertigkeit oder den Gegenstand nicht aus. LineCount nach dem Warten bezieht sich auf die letzte Suche.
- In dieser Anpassung wird System durch den Namen des Autors identifiziert, wobei die Groß- und Kleinschreibung nicht beachtet wird. Das Team arbeitet mit der allgemeinen Zeitschrift ClassicUO zusammen.
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.WaitJournalLineSystem(Now(), "success|failed", 3000);
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Parameter und Ablauf:
- begonnen – die Grenze vor dem Warten. 3000 – maximale Wartezeit in Millisekunden. Das Muster enthält zwei Ergebnisse.
- false – Text wurde innerhalb dieses Zeitraums nicht gefunden; Der Server hätte eine andere Formulierung verwenden können.
var started = Now();
var found = UO.WaitJournalLineSystem(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;Parameter und Ablauf:
- 0 – Start der Laufzeit, Timeout nicht deaktivieren. 100 – Zeitüberschreitung.
- Die gefundene Zeile befindet sich möglicherweise bereits vor dem Anruf im Protokoll.
return RunScenario();
object? RunScenario()
{
if (Truth(UO.WaitJournalLineSystem(0, "notice", 100)))
{
var author = UO.LineName();
UO.Print(author);
}
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:
- Stempel speichert double LineTime ohne Konvertieren.ToInt32/Konvertieren.ToString: Dies ist ein Kalenderdatum, nicht Now(). 1500 – Millisekunden warten.
- Der Rand ist aktiviert. Die ausgewählte Zeichenfolge selbst kann geeignet sein, wenn sie eine Antwort enthält.
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);
if (Truth(UO.LineIndex() >= 0))
{
var stamp = UO.LineTime();
var found = UO.WaitJournalLineSystem(stamp, "response", 1500);
UO.Print(Convert.ToString(found));
}
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: startTime (Any), str (Any), maxWaitTimeMS (Any)
Ergebnis: dynamic / Any.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.WaitJournalLine:WaitJournalLine(arguments, true).
Interner Implementierungscode; kein eigenständiges Skript.
case "waitjournallinesystem": return WaitJournalLine(arguments, true);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.WaitingForJournalText(object? startTime, object? maxDelay, object? text);
void UO.WaitingForJournalText(object? startTime, object? maxDelay, object? text, object? equals);
void UO.WaitingForJournalText(object? startTime, object? maxDelay, object? text, object? equals, object? ignoreCase);
void UO.WaitingForJournalText(object? startTime, object? maxDelay, object? text, object? equals, object? ignoreCase, object? skillNameOrObjectId);Erwartet Text mit zusätzlichen Vergleichsmodi und optionalem Fertigkeits-/Gegenstandsstart.
-
startTime– Obligatorische Bezeichnung Now(), int Millisekunden ab dem Start der Laufzeit. Zeilen mit einer Beschriftung nicht kleiner als startTime werden überprüft; 0 umfasst Einträge mit der Bezeichnung Null. -
maxDelay– Obligatorische maximale Wartezeit in Millisekunden. 0 und negative Werte bedeuten einen sofortigen Durchgang und nicht ein unendliches Warten. -
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. -
equals– Optionaler int: 0 (Standard) – Teilzeichenfolge; Wert ungleich Null – der gesamte Text muss mit einer Alternative übereinstimmen. -
ignoreCase– Optionaler int: 0 (Standard) – Groß- und Kleinschreibung beachten; ungleich Null – ignorieren. -
skillNameOrObjectId– Optionaler Skill nach Name, serial/Hex-Zeichenfolge oder auflösbarem Objektalias. Zuerst wird der Name der Fertigkeit erkannt, andernfalls wird das Objekt verwendet. 0/leere Zeile deaktiviert die Aktion. Die Fertigkeit/der Gegenstand wird vor der Suche einmal ausgelöst.
void – kein Rückgabewert, weisen Sie den Aufruf keiner Variablen zu. Nach Abschluss bedeutet GetFoundedTextIndex >= 0, dass der ausgewählte Eintrag noch verfügbar ist; -1 – nicht gefunden/Datensatz gelöscht. GetFoundedTextID zeigt die passende Alternative nur bei erfolgreicher Auswahl an.
- 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.
- Umfrage mit Pause bis 25 ms; Wenn Sie das Skript stoppen, wird es unterbrochen. Eine leere Liste mit Alternativen findet keinen Text. Für das bool-Ergebnis verwenden Sie WaitJournalLine mit seinen eigenen Parametern und der Bedeutung eines Null-Timeouts.
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.WaitingForJournalText");
UO.WaitingForJournalText(Now(), 2000, "notice");Parameter und Ablauf:
- startTime – vor dem Warten markieren; maxDelay=2000 ms; Vergleich von Teilzeichenfolgen unter Berücksichtigung der Groß- und Kleinschreibung.
- Der Befehl gibt nicht true/false zurück: Der ausgewählte Eintrag wird überprüft.
var started = Now();
UO.WaitingForJournalText(started, 2000, "notice");
if (Truth(UO.GetFoundedTextIndex() >= 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; maxDelay=0 – ein Durchgang. equal=1 – vollständiger Text, ignoreCase=1 – keine Groß-/Kleinschreibung.
- Die Alternativnummer 0 oder 1 wird angezeigt; eine lange Zeile mit zusätzlichen Wörtern wird nicht funktionieren.
return RunScenario();
object? RunScenario()
{
UO.WaitingForJournalText(0, 0, "success|failed", 1, 1);
if (Truth(UO.GetFoundedTextIndex() >= 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;Parameter und Ablauf:
- Das sechste Argument von Hiding führt den Skill einmal aus. equal=0 – Teilzeichenfolge, ignoreCase=1 – kein Fall.
- Die Wörter „hidden/failed“ sind Beispiele. Ersetzen Sie sie durch den Text Ihres Servers. Anstelle einer Fertigkeit können Sie serial oder lastobject angeben, um den Gegenstand zu verwenden.
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.WaitingForJournalText(started, 3000, "hidden|failed", 0, 1, "Hiding");
if (Truth(UO.GetFoundedTextIndex() >= 0))
{
UO.Print(UO.GetFoundedText());
}
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.
UO.WaitingForJournalText(startTime, maxDelay, text) — UO.WaitingForJournalText(Integer,Integer,String)
Parameter: startTime (Integer), maxDelay (Integer), text (String)
Ergebnis: void / Unit.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.WaitingForJournalText. -
InjectionScript.Runtime.InjectionApiUO.WaitingForJournalText:WaitingForJournalText(startTime, maxDelay, text, 0, 0, InjectionValue.Zero).
Interner Implementierungscode; kein eigenständiges Skript.
public void WaitingForJournalText(int startTime, int maxDelay, string text)
=> WaitingForJournalText(startTime, maxDelay, text, 0, 0, InjectionValue.Zero);
UO.WaitingForJournalText(startTime, maxDelay, text, equals) — UO.WaitingForJournalText(Integer,Integer,String,Integer)
Parameter: startTime (Integer), maxDelay (Integer), text (String), equals (Integer)
Ergebnis: void / Unit.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.WaitingForJournalText. -
InjectionScript.Runtime.InjectionApiUO.WaitingForJournalText:WaitingForJournalText(startTime, maxDelay, text, equals, 0, InjectionValue.Zero).
Interner Implementierungscode; kein eigenständiges Skript.
public void WaitingForJournalText(int startTime, int maxDelay, string text, int equals)
=> WaitingForJournalText(startTime, maxDelay, text, equals, 0, InjectionValue.Zero);
UO.WaitingForJournalText(startTime, maxDelay, text, equals, ignoreCase) — UO.WaitingForJournalText(Integer,Integer,String,Integer,Integer)
Parameter: startTime (Integer), maxDelay (Integer), text (String), equals (Integer), ignoreCase (Integer)
Ergebnis: void / Unit.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.WaitingForJournalText. -
InjectionScript.Runtime.InjectionApiUO.WaitingForJournalText:WaitingForJournalText(startTime, maxDelay, text, equals, ignoreCase, InjectionValue.Zero).
Interner Implementierungscode; kein eigenständiges Skript.
public void WaitingForJournalText(int startTime, int maxDelay, string text, int equals, int ignoreCase)
=> WaitingForJournalText(startTime, maxDelay, text, equals, ignoreCase, InjectionValue.Zero);
UO.WaitingForJournalText(startTime, maxDelay, text, equals, ignoreCase, skillNameOrObjectId) — UO.WaitingForJournalText(Integer,Integer,String,Integer,Integer,Any)
Parameter: startTime (Integer), maxDelay (Integer), text (String), equals (Integer), ignoreCase (Integer), skillNameOrObjectId (Any)
Ergebnis: void / Unit.
Beim Aufruf:
-
InjectionScript.Runtime.InjectionApiUO.WaitingForJournalText. -
InjectionScript.Runtime.InjectionApiUO.SelectJournalEntry:SelectJournalEntry(null). -
InjectionScript.Runtime.InjectionApiUO.TriggerWaitAction:TriggerWaitAction(skillNameOrObjectId). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.JournalEntryCount:bridge.JournalEntryCount(). -
InjectionScript.Runtime.InjectionApiUO.ReadJournalSnapshot:ReadJournalSnapshot(index). -
InjectionScript.Runtime.InjectionApiUO.JournalEntryTime:JournalEntryTime(entry.Timestamp). -
InjectionScript.Runtime.InjectionApiUO.FindJournalPatternId:FindJournalPatternId(journalText, pattern, exactMatch, caseInsensitive). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Wait:bridge.Wait(Math.Min(25, Math.Max(1, timeout))).
Interner Implementierungscode; kein eigenständiges Skript.
public void WaitingForJournalText(int startTime, int maxDelay, string text, int equals, int ignoreCase, InjectionValue skillNameOrObjectId)
{
int timeout = Math.Max(0, maxDelay);
bool exactMatch = equals != 0;
bool caseInsensitive = ignoreCase != 0;
string pattern = text ?? string.Empty;
DateTime deadline = timeSource.Now.AddMilliseconds(timeout);
SelectJournalEntry(null);
TriggerWaitAction(skillNameOrObjectId);
do
{
int journalCount = Math.Max(0, bridge.JournalEntryCount());
for (int index = 0; index < journalCount; index++)
{
JournalEntrySnapshot entry = ReadJournalSnapshot(index);
int lineTime = entry == null ? -1 : JournalEntryTime(entry.Timestamp);
if (lineTime < 0 || lineTime < startTime)
continue;
string journalText = entry.Text;
int matchId = FindJournalPatternId(journalText, pattern, exactMatch, caseInsensitive);
if (matchId >= 0)
{
SelectJournalEntry(entry);
foundedTextId = matchId;
return;
}
}
if (timeSource.Now >= deadline)
break;
bridge.Wait(Math.Min(25, Math.Max(1, timeout)));
}
while (true);
}