Skip to content

IT UO Topic journal Part 2

Codex edited this page Oct 12, 2026 · 1 revision

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

Journal — 2

Home · C# · IDE · UO API · A–Z · Esempi · Lingue

Parti del riferimento

1 · 2

Riferimento completo dei comandi


UO.WaitJournalLine

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

Firme C#

dynamic UO.WaitJournalLine(object? startTime, object? str, object? maxWaitTimeMS);

Attende un messaggio adatto nel registro locale.

Parametri

  • 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.

Valore restituito

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.

Comportamento

  • 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.

Script C# autonomi

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.

Esempio semplice

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));

1. In attesa dopo un'etichetta salvata - script diretto

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;

2. Breve controllo dall'inizio dell'esecuzione - funzione script

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;

3. Confine del calendario della riga selezionata - Classe di script

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;
}

Implementazione del comando

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.WaitJournalLine(startTime, str, maxWaitTimeMS) — UO.WaitJournalLine(Any,Any,Any)

Parametri: startTime (Any), str (Any), maxWaitTimeMS (Any)

Risultato: dynamic / Any.

Durante la chiamata:

Codice interno di implementazione; non è uno script autonomo.

case "waitjournalline": return WaitJournalLine(arguments, false);

UO.WaitJournalLineSystem

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

Firme C#

dynamic UO.WaitJournalLineSystem(object? startTime, object? str, object? maxWaitTimeMS);

Attende un messaggio opportuno con il nome dell'autore System.

Parametri

  • 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.

Valore restituito

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.

Comportamento

  • 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.

Script C# autonomi

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.

Esempio semplice

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));

1. In attesa dopo un'etichetta salvata - script diretto

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;

2. Breve controllo dall'inizio dell'esecuzione - funzione script

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;

3. Confine del calendario della riga selezionata - Classe di script

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;
}

Implementazione del comando

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.WaitJournalLineSystem(startTime, str, maxWaitTimeMS) — UO.WaitJournalLineSystem(Any,Any,Any)

Parametri: startTime (Any), str (Any), maxWaitTimeMS (Any)

Risultato: dynamic / Any.

Durante la chiamata:

Codice interno di implementazione; non è uno script autonomo.

case "waitjournallinesystem": return WaitJournalLine(arguments, true);

UO.WaitingForJournalText

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

Firme C#

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.

Parametri

  • 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.

Valore restituito

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.

Comportamento

  • 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.

Script C# autonomi

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.

Esempio semplice

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");

1. È prevista una sottostringa: script diretto

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;

2. Corrispondenza esatta senza maiuscole e minuscole - funzione script

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;

3. Esegui l'abilità e aspettati il ​​risultato: classe di script

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();
}

Implementazione del comando

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:

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:

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:

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:

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);

        }

Clone this wiki locally