Skip to content

ES UO Topic journal Part 2

Codex edited this page Oct 12, 2026 · 1 revision

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

Journal — 2

Inicio · C# · IDE · UO API · A–Z · Ejemplos · Idiomas

Partes de la referencia

1 · 2

Referencia completa de comandos


UO.WaitJournalLine

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

Firmas de C#

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

Espera un mensaje adecuado en el registro local.

Parámetros

  • startTime - Etiqueta de inicio requerida: int Now() en milisegundos, 0 - inicio de ejecución. También se acepta la fecha double OLE de LineTime (fechas modernas 20000…100000 días). Los 20000…100000 completos son siempre milisegundos, no una fecha. No transmita la edad de la entrada.
  • str: la subcadena buscada o varias alternativas mediante |, por ejemplo, éxito|falló. Se eliminan los espacios en los bordes de cada alternativa y se omiten las alternativas vacías. Este es texto plano, no una expresión regular. Utilice una plantilla que no esté vacía. Búsqueda que no distingue entre mayúsculas y minúsculas.
  • maxWaitTimeMS — Tiempo de espera int obligatorio en milisegundos; un valor positivo limita la espera, 0 significa espera sin límite. Los valores negativos se limitan a 0. Detener el guión interrumpe la espera.

Valor devuelto

bool - true si se encuentra el texto, false si hay un tiempo de espera positivo sin coincidencia. Esto no es un índice ni una cantidad. Los valores booleanos también se pueden mostrar como 1/0 en el script.

El resultado del comando es una bandera numérica: 1 significa una condición cumplida, 0 significa una condición no cumplida. Después de var resultado = comando(...) verifique si (resultado! = 0) o si (resultado == 0). Guarde el resultado de una llamada: una llamada repetida puede realizar la acción nuevamente o leer el estado que ya cambió.

Comportamiento

  • Busque y Journal/GetJournal/LastJournalMessage guarde el texto y los campos de una sola entrada en el script actual. Los mensajes nuevos no reemplazan estos campos. Si se elimina un registro de un diario limitado, los campos retenidos permanecen, pero LineIndex/GetFoundedTextIndex devuelven -1. La siguiente búsqueda o lectura selecciona otra entrada; una búsqueda fallida, un índice no válido y la limpieza mediante este script restablecen la selección.
  • El límite inicial se fija cuando se llama, el sondeo se produce aproximadamente cada 25 ms. La anticipación en sí misma no activa la habilidad o el objeto. LineCount después de esperar se refiere a la última búsqueda.
  • Para filtrar solo cadenas del sistema, use WaitJournalLineSystem.

Scripts independientes de C#

Cada ejemplo se puede guardar como un archivo independiente .csx y ejecutar en IDE. Las funciones de objeto UO y de espera proporcionan el anfitrión de la sesión de juego actual. Reemplace los nombres, coordenadas y direcciones de la demostración serial por los suyos propios.

Ejemplo sencillo

Ejecuta este código en un archivo .csx independiente. Los argumentos aparecen en la llamada; sustituye los nombres, seriales y direcciones de ejemplo por los tuyos.

El resultado de una sola llamada se muestra en el diario. Un número no se convierte en bool; para un array se muestra su cantidad de elementos.

object? result = UO.WaitJournalLine(Now(), "success|failed", 3000);
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));

1. Esperando después de una etiqueta guardada - script directo

Parámetros y flujo de ejecución:

  • iniciado: el límite antes de esperar. 3000: espera máxima en milisegundos. El patrón contiene dos resultados.
  • false — texto no encontrado durante este período; el servidor podría haber usado una redacción diferente.
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. Comprobación breve desde el inicio de la ejecución: función de script

Parámetros y flujo de ejecución:

  • 0: inicio del tiempo de ejecución, sin deshabilitar el tiempo de espera. 100 - tiempo de espera.
  • Es posible que la línea encontrada ya esté en el registro antes de la llamada.
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. Límite del calendario de la fila seleccionada: clase de secuencia de comandos

Parámetros y flujo de ejecución:

  • el sello guarda double LineTime sin Convert.ToInt32/Convert.ToString: Esta es una fecha del calendario, no Now(). 1500: milisegundos de espera.
  • La frontera está encendida. La cadena seleccionada en sí puede ser adecuada si contiene una respuesta.
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;
}

Implementación del comando

C# distingue mayúsculas y minúsculas. Use el nombre UO exacto. Compare indicadores numéricos con 0; use bool solo si la firma devuelve bool.

UO.WaitJournalLine(startTime, str, maxWaitTimeMS) — UO.WaitJournalLine(Any,Any,Any)

Parámetros: startTime (Any), str (Any), maxWaitTimeMS (Any)

Resultado: dynamic / Any.

Durante la llamada:

Código interno de implementación; no es un script independiente.

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

UO.WaitJournalLineSystem

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

Firmas de C#

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

Espera un mensaje adecuado con el nombre del autor Sistema.

Parámetros

  • startTime - Etiqueta de inicio requerida: int Now() en milisegundos, 0 - inicio de ejecución. También se acepta la fecha double OLE de LineTime (fechas modernas 20000…100000 días). Los 20000…100000 completos son siempre milisegundos, no una fecha. No transmita la edad de la entrada.
  • str: la subcadena buscada o varias alternativas mediante |, por ejemplo, éxito|falló. Se eliminan los espacios en los bordes de cada alternativa y se omiten las alternativas vacías. Este es texto plano, no una expresión regular. Utilice una plantilla que no esté vacía. Búsqueda que no distingue entre mayúsculas y minúsculas.
  • maxWaitTimeMS — Tiempo de espera int obligatorio en milisegundos; un valor positivo limita la espera, 0 significa espera sin límite. Los valores negativos se limitan a 0. Detener el guión interrumpe la espera.

Valor devuelto

bool - true si se encuentra el texto, false si hay un tiempo de espera positivo sin coincidencia. Esto no es un índice ni una cantidad. Los valores booleanos también se pueden mostrar como 1/0 en el script.

El resultado del comando es una bandera numérica: 1 significa una condición cumplida, 0 significa una condición no cumplida. Después de var resultado = comando(...) verifique si (resultado! = 0) o si (resultado == 0). Guarde el resultado de una llamada: una llamada repetida puede realizar la acción nuevamente o leer el estado que ya cambió.

Comportamiento

  • Busque y Journal/GetJournal/LastJournalMessage guarde el texto y los campos de una sola entrada en el script actual. Los mensajes nuevos no reemplazan estos campos. Si se elimina un registro de un diario limitado, los campos retenidos permanecen, pero LineIndex/GetFoundedTextIndex devuelven -1. La siguiente búsqueda o lectura selecciona otra entrada; una búsqueda fallida, un índice no válido y la limpieza mediante este script restablecen la selección.
  • El límite inicial se fija cuando se llama, el sondeo se produce aproximadamente cada 25 ms. La anticipación en sí misma no activa la habilidad o el objeto. LineCount después de esperar se refiere a la última búsqueda.
  • En esta adaptación, Sistema se identifica por el nombre del autor, sin distinguir entre mayúsculas y minúsculas; El equipo trabaja con la revista general ClassicUO.

Scripts independientes de C#

Cada ejemplo se puede guardar como un archivo independiente .csx y ejecutar en IDE. Las funciones de objeto UO y de espera proporcionan el anfitrión de la sesión de juego actual. Reemplace los nombres, coordenadas y direcciones de la demostración serial por los suyos propios.

Ejemplo sencillo

Ejecuta este código en un archivo .csx independiente. Los argumentos aparecen en la llamada; sustituye los nombres, seriales y direcciones de ejemplo por los tuyos.

El resultado de una sola llamada se muestra en el diario. Un número no se convierte en bool; para un array se muestra su cantidad de elementos.

object? result = UO.WaitJournalLineSystem(Now(), "success|failed", 3000);
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));

1. Esperando después de una etiqueta guardada - script directo

Parámetros y flujo de ejecución:

  • iniciado: el límite antes de esperar. 3000: espera máxima en milisegundos. El patrón contiene dos resultados.
  • false — texto no encontrado durante este período; el servidor podría haber usado una redacción diferente.
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. Comprobación breve desde el inicio de la ejecución: función de script

Parámetros y flujo de ejecución:

  • 0: inicio del tiempo de ejecución, sin deshabilitar el tiempo de espera. 100 - tiempo de espera.
  • Es posible que la línea encontrada ya esté en el registro antes de la llamada.
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. Límite del calendario de la fila seleccionada: clase de secuencia de comandos

Parámetros y flujo de ejecución:

  • el sello guarda double LineTime sin Convert.ToInt32/Convert.ToString: Esta es una fecha del calendario, no Now(). 1500: milisegundos de espera.
  • La frontera está encendida. La cadena seleccionada en sí puede ser adecuada si contiene una respuesta.
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;
}

Implementación del comando

C# distingue mayúsculas y minúsculas. Use el nombre UO exacto. Compare indicadores numéricos con 0; use bool solo si la firma devuelve bool.

UO.WaitJournalLineSystem(startTime, str, maxWaitTimeMS) — UO.WaitJournalLineSystem(Any,Any,Any)

Parámetros: startTime (Any), str (Any), maxWaitTimeMS (Any)

Resultado: dynamic / Any.

Durante la llamada:

Código interno de implementación; no es un script independiente.

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

UO.WaitingForJournalText

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

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

Espera texto con modos de comparación adicionales y lanzamiento opcional de habilidades/elementos.

Parámetros

  • startTime: etiqueta obligatoria Now(), int milisegundos desde el inicio del tiempo de ejecución. Se marcan las líneas con una etiqueta no menor a startTime; 0 incluye entradas con una etiqueta cero.
  • maxDelay — Espera máxima obligatoria en milisegundos. 0 y los valores negativos significan un paso inmediato en lugar de una espera infinita.
  • text: la subcadena buscada o varias alternativas mediante |, por ejemplo, éxito|falló. Se eliminan los espacios en los bordes de cada alternativa y se omiten las alternativas vacías. Este es texto plano, no una expresión regular. Utilice una plantilla que no esté vacía.
  • equals - Opcional int: 0 (predeterminado) - subcadena; valor distinto de cero: todo el texto debe coincidir con una alternativa.
  • ignoreCase - Opcional int: 0 (predeterminado) - distingue entre mayúsculas y minúsculas; distinto de cero: ignorar.
  • skillNameOrObjectId: habilidad opcional por nombre, cadena serial/hexadecimal o alias de objeto resoluble. Primero se reconoce el nombre de la habilidad; en caso contrario, se utiliza el objeto. 0/línea vacía deshabilita la acción. La habilidad/objeto se activa una vez antes de la búsqueda.

Valor devuelto

void: sin valor de retorno, no asigne la llamada a una variable. Cuando se completa, GetFoundedTextIndex >= 0 significa que la entrada seleccionada todavía está disponible; -1 - no encontrado/registro eliminado. GetFoundedTextID muestra la alternativa coincidente solo si la selección es exitosa.

Comportamiento

  • Busque y Journal/GetJournal/LastJournalMessage guarde el texto y los campos de una sola entrada en el script actual. Los mensajes nuevos no reemplazan estos campos. Si se elimina un registro de un diario limitado, los campos retenidos permanecen, pero LineIndex/GetFoundedTextIndex devuelven -1. La siguiente búsqueda o lectura selecciona otra entrada; una búsqueda fallida, un índice no válido y la limpieza mediante este script restablecen la selección.
  • Encuesta con pausa hasta 25 ms; detener el guión lo interrumpe. Una lista vacía de alternativas no encuentra texto. Para obtener un resultado bool, utilice WaitJournalLine con sus propios parámetros y el significado de un tiempo de espera cero.

Scripts independientes de C#

Cada ejemplo se puede guardar como un archivo independiente .csx y ejecutar en IDE. Las funciones de objeto UO y de espera proporcionan el anfitrión de la sesión de juego actual. Reemplace los nombres, coordenadas y direcciones de la demostración serial por los suyos propios.

Ejemplo sencillo

Ejecuta este código en un archivo .csx independiente. Los argumentos aparecen en la llamada; sustituye los nombres, seriales y direcciones de ejemplo por los tuyos.

El comando es una instrucción independiente. El mensaje anterior indica el inicio de la llamada y no confirma una acción del servidor.

UO.Print("Calling UO.WaitingForJournalText");
UO.WaitingForJournalText(Now(), 2000, "notice");

1. Espere una subcadena: secuencia de comandos directa

Parámetros y flujo de ejecución:

  • startTime — marcar antes de esperar; maxDelay=2000 ms; comparación de subcadenas que distingue entre mayúsculas y minúsculas.
  • El comando no devuelve true/false: la entrada seleccionada está marcada.
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. Coincidencia exacta sin mayúsculas y minúsculas: función de script

Parámetros y flujo de ejecución:

  • startTime=0; maxDelay=0 - una pasada. es igual a1 - todo el texto, ignoreCase=1 - sin mayúsculas y minúsculas.
  • Se muestra el número alternativo 0 o 1; una fila larga con palabras adicionales no funcionará.
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. Ejecute la habilidad y espere el resultado: clase de script

Parámetros y flujo de ejecución:

  • El sexto argumento de Ocultar ejecuta la habilidad una vez. igual a =0 - subcadena, ignoreCase=1 - sin mayúsculas y minúsculas.
  • Las palabras oculto/fallido son ejemplos, reemplácelos con el texto de su servidor. En lugar de una habilidad, puedes especificar serial o lastobject para usar el elemento.
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();
}

Implementación del comando

C# distingue mayúsculas y minúsculas. Use el nombre UO exacto. Compare indicadores numéricos con 0; use bool solo si la firma devuelve bool.

UO.WaitingForJournalText(startTime, maxDelay, text) — UO.WaitingForJournalText(Integer,Integer,String)

Parámetros: startTime (Integer), maxDelay (Integer), text (String)

Resultado: void / Unit.

Durante la llamada:

Código interno de implementación; no es un script independiente.

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)

Parámetros: startTime (Integer), maxDelay (Integer), text (String), equals (Integer)

Resultado: void / Unit.

Durante la llamada:

Código interno de implementación; no es un script independiente.

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)

Parámetros: startTime (Integer), maxDelay (Integer), text (String), equals (Integer), ignoreCase (Integer)

Resultado: void / Unit.

Durante la llamada:

Código interno de implementación; no es un script independiente.

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)

Parámetros: startTime (Integer), maxDelay (Integer), text (String), equals (Integer), ignoreCase (Integer), skillNameOrObjectId (Any)

Resultado: void / Unit.

Durante la llamada:

Código interno de implementación; no es un script independiente.

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