Repository navigation
IT UO Topic journal Part 2
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
Home · C# · IDE · UO API · A–Z · Esempi · Lingue
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.WaitJournalLine(object? startTime, object? str, object? maxWaitTimeMS);Attende un messaggio adatto nel registro locale.
-
startTime- Etichetta di inizio richiesta: int Now() in millisecondi, 0 - inizio dell'esecuzione. È accettata anche la data double OLE da LineTime (date moderne 20000…100000 giorni). Gli interi 20000…100000 sono sempre millisecondi, non una data. Non comunicare l'età dell'iscrizione. -
str— La sottostringa cercata o diverse alternative tramite |, ad esempio successo|non riuscita. Gli spazi ai bordi di ciascuna alternativa vengono rimossi, le alternative vuote vengono saltate. Questo è testo semplice, non un'espressione regolare. Utilizza un modello non vuoto. Ricerca senza distinzione tra maiuscole e minuscole. -
maxWaitTimeMS- Timeout int obbligatorio in millisecondi; un valore positivo limita l'attesa, 0 significa attesa senza limite. I valori negativi sono limitati a 0. L'arresto dello script interrompe l'attesa.
bool - true se viene trovato il testo, false se c'è un timeout positivo senza corrispondenza. Questo non è un indice o una quantità. I valori booleani possono anche essere visualizzati come 1/0 nello script.
Il risultato del comando è un flag numerico: 1 significa una condizione soddisfatta, 0 significa una condizione non soddisfatta. Dopo var risultato = comando(...) controlla se (risultato != 0) o se (risultato == 0). Salva il risultato di una chiamata: una chiamata ripetuta può eseguire nuovamente l'azione o leggere lo stato che è già cambiato.
- Cerca e Journal/GetJournal/LastJournalMessage salva il testo e i campi di una singola voce nello script corrente. I nuovi messaggi non sostituiscono questi campi. Se un record viene eliminato da un giornale limitato, i campi conservati rimangono, ma LineIndex/GetFoundedTextIndex restituiscono -1. La successiva ricerca o lettura seleziona un'altra voce; una ricerca non riuscita, un indice non valido e la cancellazione tramite questo script reimpostano la selezione.
- Il limite iniziale è fisso quando viene chiamato, il polling avviene circa ogni 25 ms. L'anticipazione in sé non attiva l'abilità o l'oggetto. LineCount after wait si riferisce all'ultima ricerca.
- Per filtrare solo le stringhe di sistema, utilizzare WaitJournalLineSystem.
Ogni esempio può essere salvato come file separato .csx ed eseguito in IDE. Le funzioni oggetto UO e attesa forniscono l'host della sessione di gioco corrente. Sostituisci i nomi, le coordinate e gli indirizzi demo serial con i tuoi.
Esegui questo codice in un file .csx separato. Gli argomenti sono visibili nella chiamata; sostituisci nomi, serial e indirizzi di esempio con i tuoi.
Il risultato di una sola chiamata viene mostrato nel diario. Un numero non viene convertito in bool; per un array viene mostrato il numero di elementi.
object? result = UO.WaitJournalLine(Now(), "success|failed", 3000);
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Parametri e flusso di esecuzione:
- iniziato: il limite prima di aspettare. 3000: attesa massima in millisecondi. Il modello contiene due risultati.
- false: il testo non è stato trovato entro questo periodo; il server avrebbe potuto utilizzare una formulazione diversa.
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;Parametri e flusso di esecuzione:
- 0 - avvio del runtime, non disabilitazione del timeout. 100 - timeout.
- La riga trovata potrebbe già essere nel registro prima della chiamata.
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;Parametri e flusso di esecuzione:
- stamp salva double LineTime senza Convert.ToInt32/Convert.ToString: questa è una data di calendario, non Adesso(). 1500 — millisecondi di attesa.
- Il confine è attivato. La stringa selezionata stessa potrebbe essere adatta se contiene una risposta.
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# distingue maiuscole e minuscole. Usare il nome UO esatto. Confrontare i flag numerici con 0; usare bool solo se la firma restituisce bool.
Parametri: startTime (Any), str (Any), maxWaitTimeMS (Any)
Risultato: dynamic / Any.
Durante la chiamata:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.WaitJournalLine:WaitJournalLine(arguments, false).
Codice interno di implementazione; non è uno script autonomo.
case "waitjournalline": return WaitJournalLine(arguments, false);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.WaitJournalLineSystem(object? startTime, object? str, object? maxWaitTimeMS);Attende un messaggio opportuno con il nome dell'autore System.
-
startTime- Etichetta di inizio richiesta: int Now() in millisecondi, 0 - inizio dell'esecuzione. È accettata anche la data double OLE da LineTime (date moderne 20000…100000 giorni). Gli interi 20000…100000 sono sempre millisecondi, non una data. Non comunicare l'età dell'iscrizione. -
str— La sottostringa cercata o diverse alternative tramite |, ad esempio successo|non riuscita. Gli spazi ai bordi di ciascuna alternativa vengono rimossi, le alternative vuote vengono saltate. Questo è testo semplice, non un'espressione regolare. Utilizza un modello non vuoto. Ricerca senza distinzione tra maiuscole e minuscole. -
maxWaitTimeMS- Timeout int obbligatorio in millisecondi; un valore positivo limita l'attesa, 0 significa attesa senza limite. I valori negativi sono limitati a 0. L'arresto dello script interrompe l'attesa.
bool - true se viene trovato il testo, false se c'è un timeout positivo senza corrispondenza. Questo non è un indice o una quantità. I valori booleani possono anche essere visualizzati come 1/0 nello script.
Il risultato del comando è un flag numerico: 1 significa una condizione soddisfatta, 0 significa una condizione non soddisfatta. Dopo var risultato = comando(...) controlla se (risultato != 0) o se (risultato == 0). Salva il risultato di una chiamata: una chiamata ripetuta può eseguire nuovamente l'azione o leggere lo stato che è già cambiato.
- Cerca e Journal/GetJournal/LastJournalMessage salva il testo e i campi di una singola voce nello script corrente. I nuovi messaggi non sostituiscono questi campi. Se un record viene eliminato da un giornale limitato, i campi conservati rimangono, ma LineIndex/GetFoundedTextIndex restituiscono -1. La successiva ricerca o lettura seleziona un'altra voce; una ricerca non riuscita, un indice non valido e la cancellazione tramite questo script reimpostano la selezione.
- Il limite iniziale è fisso quando viene chiamato, il polling avviene circa ogni 25 ms. L'anticipazione in sé non attiva l'abilità o l'oggetto. LineCount after wait si riferisce all'ultima ricerca.
- In questo adattamento, System è identificato dal nome dell'autore, senza distinzione tra maiuscole e minuscole; Il team collabora con la rivista generale ClassicUO.
Ogni esempio può essere salvato come file separato .csx ed eseguito in IDE. Le funzioni oggetto UO e attesa forniscono l'host della sessione di gioco corrente. Sostituisci i nomi, le coordinate e gli indirizzi demo serial con i tuoi.
Esegui questo codice in un file .csx separato. Gli argomenti sono visibili nella chiamata; sostituisci nomi, serial e indirizzi di esempio con i tuoi.
Il risultato di una sola chiamata viene mostrato nel diario. Un numero non viene convertito in bool; per un array viene mostrato il numero di elementi.
object? result = UO.WaitJournalLineSystem(Now(), "success|failed", 3000);
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Parametri e flusso di esecuzione:
- iniziato: il limite prima di aspettare. 3000: attesa massima in millisecondi. Il modello contiene due risultati.
- false: il testo non è stato trovato entro questo periodo; il server avrebbe potuto utilizzare una formulazione diversa.
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;Parametri e flusso di esecuzione:
- 0 - avvio del runtime, non disabilitazione del timeout. 100 - timeout.
- La riga trovata potrebbe già essere nel registro prima della chiamata.
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;Parametri e flusso di esecuzione:
- stamp salva double LineTime senza Convert.ToInt32/Convert.ToString: questa è una data di calendario, non Adesso(). 1500 — millisecondi di attesa.
- Il confine è attivato. La stringa selezionata stessa potrebbe essere adatta se contiene una risposta.
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# distingue maiuscole e minuscole. Usare il nome UO esatto. Confrontare i flag numerici con 0; usare bool solo se la firma restituisce bool.
Parametri: startTime (Any), str (Any), maxWaitTimeMS (Any)
Risultato: dynamic / Any.
Durante la chiamata:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.WaitJournalLine:WaitJournalLine(arguments, true).
Codice interno di implementazione; non è uno script autonomo.
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);È previsto testo con modalità di confronto aggiuntive e lancio di abilità/oggetti opzionali.
-
startTime— Etichetta obbligatoria Now(), int millisecondi dall'inizio del runtime. Vengono controllate le righe con etichetta non inferiore a startTime; 0 include voci con etichetta zero. -
maxDelay- Attesa massima obbligatoria in millisecondi. 0 e valori negativi indicano un passaggio immediato anziché un'attesa infinita. -
text— La sottostringa cercata o diverse alternative tramite |, ad esempio successo|non riuscita. Gli spazi ai bordi di ciascuna alternativa vengono rimossi, le alternative vuote vengono saltate. Questo è testo semplice, non un'espressione regolare. Utilizza un modello non vuoto. -
equals- Opzionale int: 0 (predefinito) - sottostringa; valore diverso da zero: tutto il testo deve corrispondere a un'alternativa. -
ignoreCase- Opzionale int: 0 (predefinito) - con distinzione tra maiuscole e minuscole; diverso da zero: ignora. -
skillNameOrObjectId- Abilità opzionale per nome, serial/stringa esadecimale o alias oggetto risolvibile. Prima viene riconosciuto il nome dell'abilità, altrimenti viene utilizzato l'oggetto. 0/linea vuota disabilita l'azione. L'abilità/oggetto viene attivato una volta prima della ricerca.
void - nessun valore restituito, non assegnare la chiamata a una variabile. Una volta completato, GetFoundedTextIndex >= 0 significa che la voce selezionata è ancora disponibile; -1 - non trovato/record eliminato. GetFoundedTextID mostra l'alternativa corrispondente solo se la selezione ha successo.
- Cerca e Journal/GetJournal/LastJournalMessage salva il testo e i campi di una singola voce nello script corrente. I nuovi messaggi non sostituiscono questi campi. Se un record viene eliminato da un giornale limitato, i campi conservati rimangono, ma LineIndex/GetFoundedTextIndex restituiscono -1. La successiva ricerca o lettura seleziona un'altra voce; una ricerca non riuscita, un indice non valido e la cancellazione tramite questo script reimpostano la selezione.
- Interrogazione con pausa fino a 25 ms; l'interruzione dello script lo interrompe. Un elenco vuoto di alternative non trova il testo. Per il risultato bool, utilizzare WaitJournalLine con i propri parametri e il significato di un timeout pari a zero.
Ogni esempio può essere salvato come file separato .csx ed eseguito in IDE. Le funzioni oggetto UO e attesa forniscono l'host della sessione di gioco corrente. Sostituisci i nomi, le coordinate e gli indirizzi demo serial con i tuoi.
Esegui questo codice in un file .csx separato. Gli argomenti sono visibili nella chiamata; sostituisci nomi, serial e indirizzi di esempio con i tuoi.
Il comando è un’istruzione separata. Il messaggio precedente indica l’inizio della chiamata e non conferma un’azione del server.
UO.Print("Calling UO.WaitingForJournalText");
UO.WaitingForJournalText(Now(), 2000, "notice");Parametri e flusso di esecuzione:
- startTime — segna prima di attendere; maxDelay=2000ms; confronto di sottostringhe con distinzione tra maiuscole e minuscole.
- Il comando non restituisce true/false: la voce selezionata viene controllata.
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;Parametri e flusso di esecuzione:
- startTime=0; maxDelay=0 - un passaggio. è uguale a = 1 — tutto il testo, ignoreCase=1 — nessun caso.
- Viene visualizzato il numero alternativo 0 o 1; una lunga riga con parole aggiuntive non funzionerà.
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;Parametri e flusso di esecuzione:
- Il sesto argomento di Nascondersi esegue l'abilità una volta. equals=0 — sottostringa, ignoreCase=1 — nessun caso.
- Le parole nascosto/fallito sono esempi, sostituiscile con il testo del tuo server. Invece di una competenza, puoi specificare serial o lastobject per utilizzare l'oggetto.
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# distingue maiuscole e minuscole. Usare il nome UO esatto. Confrontare i flag numerici con 0; usare bool solo se la firma restituisce bool.
UO.WaitingForJournalText(startTime, maxDelay, text) — UO.WaitingForJournalText(Integer,Integer,String)
Parametri: startTime (Integer), maxDelay (Integer), text (String)
Risultato: void / Unit.
Durante la chiamata:
-
InjectionScript.Runtime.InjectionApiUO.WaitingForJournalText. -
InjectionScript.Runtime.InjectionApiUO.WaitingForJournalText:WaitingForJournalText(startTime, maxDelay, text, 0, 0, InjectionValue.Zero).
Codice interno di implementazione; non è uno script autonomo.
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)
Parametri: startTime (Integer), maxDelay (Integer), text (String), equals (Integer)
Risultato: void / Unit.
Durante la chiamata:
-
InjectionScript.Runtime.InjectionApiUO.WaitingForJournalText. -
InjectionScript.Runtime.InjectionApiUO.WaitingForJournalText:WaitingForJournalText(startTime, maxDelay, text, equals, 0, InjectionValue.Zero).
Codice interno di implementazione; non è uno script autonomo.
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)
Parametri: startTime (Integer), maxDelay (Integer), text (String), equals (Integer), ignoreCase (Integer)
Risultato: void / Unit.
Durante la chiamata:
-
InjectionScript.Runtime.InjectionApiUO.WaitingForJournalText. -
InjectionScript.Runtime.InjectionApiUO.WaitingForJournalText:WaitingForJournalText(startTime, maxDelay, text, equals, ignoreCase, InjectionValue.Zero).
Codice interno di implementazione; non è uno script autonomo.
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)
Parametri: startTime (Integer), maxDelay (Integer), text (String), equals (Integer), ignoreCase (Integer), skillNameOrObjectId (Any)
Risultato: void / Unit.
Durante la chiamata:
-
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))).
Codice interno di implementazione; non è uno script autonomo.
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);
}ClassicUO — Bad Newbie & C# Scripts IDE