Repository navigation
ES UO Topic journal Part 2
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
Inicio · C# · IDE · UO API · A–Z · Ejemplos · Idiomas
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.WaitJournalLine(object? startTime, object? str, object? maxWaitTimeMS);Espera un mensaje adecuado en el registro local.
-
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.
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ó.
- 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.
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.
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));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;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;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;
}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.
Parámetros: startTime (Any), str (Any), maxWaitTimeMS (Any)
Resultado: dynamic / Any.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.WaitJournalLine:WaitJournalLine(arguments, false).
Código interno de implementación; no es un script independiente.
case "waitjournalline": return WaitJournalLine(arguments, false);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.WaitJournalLineSystem(object? startTime, object? str, object? maxWaitTimeMS);Espera un mensaje adecuado con el nombre del autor Sistema.
-
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.
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ó.
- 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.
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.
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));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;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;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;
}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.
Parámetros: startTime (Any), str (Any), maxWaitTimeMS (Any)
Resultado: dynamic / Any.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.WaitJournalLine:WaitJournalLine(arguments, true).
Código interno de implementación; no es un script independiente.
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);Espera texto con modos de comparación adicionales y lanzamiento opcional de habilidades/elementos.
-
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.
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.
- 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.
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.
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");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;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;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();
}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:
-
InjectionScript.Runtime.InjectionApiUO.WaitingForJournalText. -
InjectionScript.Runtime.InjectionApiUO.WaitingForJournalText:WaitingForJournalText(startTime, maxDelay, text, 0, 0, InjectionValue.Zero).
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:
-
InjectionScript.Runtime.InjectionApiUO.WaitingForJournalText. -
InjectionScript.Runtime.InjectionApiUO.WaitingForJournalText:WaitingForJournalText(startTime, maxDelay, text, equals, 0, InjectionValue.Zero).
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:
-
InjectionScript.Runtime.InjectionApiUO.WaitingForJournalText. -
InjectionScript.Runtime.InjectionApiUO.WaitingForJournalText:WaitingForJournalText(startTime, maxDelay, text, equals, ignoreCase, InjectionValue.Zero).
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:
-
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))).
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);
}ClassicUO — Bad Newbie & C# Scripts IDE