Repository navigation
ES UO Topic client connection
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
Inicio · C# · IDE · UO API · A–Z · Ejemplos · Idiomas
Conexión, estado de entrada mundial, latencia, dirección del servidor y lista de caracteres.
| Tema | Comandos y explicaciones |
|---|---|
| Connect | UO.Connect |
| Disconnect | UO.Disconnect |
| Connected | UO.Connected |
| Online | UO.Online |
| Ping | UO.GetPing |
| Server IP | UO.GameServerIPString |
| Shard Name | UO.ShardName |
| Shard Path | UO.ShardPath |
| Lista de personajes | UO.GetCharsListForShard |
| Resend | UO.Resend |
| CheckLag | UO.CheckLag |
UO.Connect · UO.Disconnect · UO.Connected · UO.Online · UO.IsOnline · UO.ConnectedTime · UO.DisconnectedTime · UO.GetPing · UO.CheckLag · UO.GameServerIPString · UO.ShardName · UO.ShardPath · UO.GetCharsListForShard · UO.Resend · UO.CloseUO
Cada tarjeta de comando tiene varios escenarios independientes: código directo, funciones y clases. A continuación se muestran escenarios breves seleccionados; restricciones y análisis completos están en las cartas.
Parámetros, resultado y todos los escenarios
if (Truth(Truth(UO.Connected()) == false))
{
return null;
}
UO.UseSkill("Hiding");
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Parámetros, resultado y todos los escenarios
var address = UO.GameServerIPString();
UO.Print(address);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.CheckLag();
dynamic UO.CheckLag(object? timeoutMS);
int UO.CheckLag(object? timeout, object? retries);Comprueba si se ha recibido una nueva respuesta del servidor del juego dentro del tiempo asignado. Conveniente antes de continuar con el script después de un retraso en la red.
-
timeout— tiempo de espera / timeoutMS — tiempo de espera para un intento en milisegundos, convertido a int. Un valor negativo está limitado a cero. Con 0 se puede enviar la solicitud, pero no hay expectativa de respuesta; No es un tiempo de espera infinito. -
timeoutMS— tiempo de espera / timeoutMS — tiempo de espera para un intento en milisegundos, convertido a int. Un valor negativo está limitado a cero. Con 0 se puede enviar la solicitud, pero no hay expectativa de respuesta; No es un tiempo de espera infinito. -
retries- reintentos: número TOTAL de intentos, no el número de repeticiones adicionales. Se convierte a int y está limitado desde abajo a uno. Por ejemplo, (250, 3): hasta tres intentos en 250 ms; una respuesta exitosa completa la verificación temprano.
Indicador numérico int: 1 (condición cumplida): nueva respuesta recibida; 0 (condición no cumplida): la solicitud es imposible o el plazo ha expirado. ¿Registro de parámetro único object? en realidad devuelve esto int. Este no es el valor de ping ni el número de intentos.
- CheckLag() hace un intento, esperando hasta 10000 ms. CheckLag(timeoutMS): un intento con la expectativa especificada. CheckLag(tiempo de espera, reintentos) repite la verificación hasta que se logra o se agota el número total de intentos.
- La espera retrasa el script de llamada en lugar de confirmar la acción del juego. El comando no se vuelve a conectar y no cambia la configuración de la red. Es posible que el servidor no responda al eco: el fallo en sí mismo no prueba que la conexión se haya interrumpido. El momento también depende de la programación del flujo; No llame a la verificación activa en cada cuadro. Detener el guión interrumpe la espera.
- UO.GetPing · UO.CheckLag · UO.IsOnline
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.
var result = UO.CheckLag();
UO.Print("CheckLag: " + Convert.ToString(result));Parámetros y flujo de ejecución:
- Un formulario sin parámetros puede esperar hasta 10 segundos. true significa respuesta de eco reciente. La ocultación se activa mediante un comando separado y la mecánica del juego puede anularla.
if (Truth(Truth(UO.CheckLag()) == true))
{
UO.UseSkill("Hiding");
}
else
{
UO.Print("No fresh server response");
}
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:
- 250 — esperando un intento, 3 — intentos totales. Si tiene éxito, no se realizan más intentos; con 0 el guión no continúa. Esta no es una medición de ping de 250 ms ni tres repeticiones adicionales.
return RunScenario();
object? RunScenario()
{
var responsive = UO.CheckLag(250, 3);
if (Truth(responsive == 0))
{
UO.Print("No response after the allowed attempts");
return null;
}
UO.Print("Fresh response received; the script can continue");
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:
- CanContinue(timeoutMs, intentos) primero verifica UO.IsOnline, luego la última respuesta. false y 0 son equivalentes para este predicado. Los intentos 500 ms y 2 se especifican por separado; La función no activa la reconexión automática.
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()
{
if (!(Truth(CanContinue(500, 2))))
{
return null;
}
UO.UseSkill("Hiding");
return null;
}
dynamic CanContinue(dynamic timeoutMs, dynamic attempts)
{
if (Truth(Truth(UO.IsOnline()) == false))
{
return false;
}
return Truth(Truth(UO.CheckLag(timeoutMs, attempts)) == true);
}
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: Sin parámetros.
Resultado: int / Integer.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.CheckLag. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.CheckLag:bridge.CheckLag(10_000).
Código interno de implementación; no es un script independiente.
public int CheckLag() => bridge.CheckLag(10_000);Parámetros: timeoutMS (Any)
Resultado: dynamic / Any.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.CheckLag:bridge.CheckLag(Arg(0, 10_000)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0, 10_000).
Código interno de implementación; no es un script independiente.
case "checklag": return new InjectionValue(bridge.CheckLag(Arg(0, 10_000)));Parámetros: timeout (Any), retries (Any)
Resultado: int / Integer.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.CheckLag. -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(timeout). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.CheckLag:bridge.CheckLag(timeoutMs).
Código interno de implementación; no es un script independiente.
public int CheckLag(InjectionValue timeout, InjectionValue retries)
{
int timeoutMs = Math.Max(0, NumberConversions.ToInt(timeout));
int attempts = Math.Max(1, NumberConversions.ToInt(retries));
for (int attempt = 0; attempt < attempts; attempt++)
{
if (bridge.CheckLag(timeoutMs) != 0)
return 1;
}
return 0;
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.CloseUO();Solicita que la aplicación cliente actual salga a través de Client.Game.Exit.
No hay parámetros.
void: sin valor de retorno.
- CloseUO se envía al mismo puente.CloseHandle. La salida se ejecuta en el hilo del juego; si falta Client.Game, no hay ninguna acción. El comando no es apagar un gump separado.
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.CloseUO");
UO.CloseUO();Parámetros y flujo de ejecución:
- La llamada solicita la finalización de la aplicación del cliente.
UO.CloseUO();Parámetros y flujo de ejecución:
- El ejemplo muestra una condición controlada; el valor 0 mantiene abierto al cliente.
return RunScenario();
object? RunScenario()
{
var finishClient = 0;
if (Truth(finishClient))
{
UO.CloseUO();
}
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:
- Un asistente completamente declarado permite la habilitación de salida explícita.
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()
{
FinishClient(0);
return null;
}
void FinishClient(dynamic enabled)
{
if (Truth(enabled))
{
UO.CloseUO();
}
}
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: Sin parámetros.
Resultado: void / Unit.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.CloseHandle:bridge.CloseHandle().
Código interno de implementación; no es un script independiente.
case "closeuo": bridge.CloseHandle(); break;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.Connect();Solicita conexión o reconexión de la sesión actual del cliente.
No hay parámetros.
void: sin valor de retorno.
- En una sesión de administrador, llama a SessionControl.RequestConnect. En el cliente independiente, la conexión activa/preparada no se modifica.
- Para GameScene planea una reconexión guardada para no cambiar de escena durante su Actualización. LoginScene usa la cuenta actual y la contraseña guardada, activa Reconectar y llama a Connect con el fragmento/carácter recordado incluso cuando la reconexión automática está desactivada.
- El equipo no está esperando a entrar al mundo. Marque UO.Connected después de una espera separada si otras acciones requieren una conexión.
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.Connect");
UO.Connect();Parámetros y flujo de ejecución:
- La llamada sólo inicia una conexión.
UO.Connect();Parámetros y flujo de ejecución:
- La verificación puede evitar una nueva solicitud.
return RunScenario();
object? RunScenario()
{
if (!(Truth(UO.Connected())))
{
UO.Connect();
}
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:
- Esperar 1000 ms no garantiza la entrada; la salida muestra la bandera actual real.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
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;
}
async public Task<object?> RunScenarioAsync()
{
UO.Connect();
await Delay(1000);
UO.Print(Convert.ToString(UO.Connected()));
return null;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
}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: Sin parámetros.
Resultado: void / Unit.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.ConnectClient:bridge.ConnectClient().
Código interno de implementación; no es un script independiente.
case "connect": bridge.ConnectClient(); return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.Connected();Comprueba si la sesión actual está en el mundo del juego y si su conexión al juego está abierta. Úselo antes de la acción de un personaje o mientras espera la entrada.
No hay parámetros.
int. 1 - hay un jugador, una carta cargada y un zócalo de juego activo al mismo tiempo; en caso contrario 0. Una ventana de cliente abierta, una lista de caracteres o una conexión TCP en la etapa de inicio de sesión no significa 1. Bandera numérica int: 1 (condición cumplida), 0 (condición no cumplida). Esta es una bandera numérica: en C# verifique el resultado! = 0 o resultado == 0. Comparación directa de int con true/false y si (resultado) no está permitido.
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ó.
- No hay parámetros: serial, type, el nombre del personaje y IP no se pueden transferir. UO.Online(), UO.Connected() y UO.IsOnline() comprueban lo mismo. Este es el estado del propietario de la sesión determinada, no de otro perfil de administrador.
- El comando solo lee el estado local. No envía ping, no se conecta, no pausa y no verifica la disponibilidad de Internet. Después de leer, la conexión puede cambiar; 1 no garantiza el éxito de la siguiente acción.
- UO.Wait tarda milisegundos. La pausa automática cuando se pierde la conexión y la pausa manual retrasan la ejecución de los ejemplos: la verificación del tiempo de espera continuará solo después de que se elimine la pausa. Estos comandos no se reanudan y no habilitan la reconexión automática.
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.Connected();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Parámetros y flujo de ejecución:
- false es equivalente a 0. el retorno termina Principal en UseSkill. Ocultar es el único parámetro de UseSkill, el nombre de la habilidad. Con 1 el script sólo pide usar la habilidad; el resultado depende del estado del personaje y del servidor.
- El comando solo lee el estado local. No envía ping, no se conecta, no pausa y no verifica la disponibilidad de Internet. Después de leer, la conexión puede cambiar; 1 no garantiza el éxito de la siguiente acción.
if (Truth(Truth(UO.Connected()) == false))
{
return null;
}
UO.UseSkill("Hiding");
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:
- La comparación con 0 verifica la conexión actual, no la configuración de reconexión automática. Connect sin argumentos utiliza la configuración guardada y no espera a que se complete el inicio de sesión. Repetir un comando durante un inicio de sesión que ya comenzó no debería crear una segunda sesión.
- El comando solo lee el estado local. No envía ping, no se conecta, no pausa y no verifica la disponibilidad de Internet. Después de leer, la conexión puede cambiar; 1 no garantiza el éxito de la siguiente acción.
return RunScenario();
object? RunScenario()
{
if (Truth(UO.Connected() == 0))
{
UO.Connect();
}
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:
- WaitForWorld(timeoutMs) es una función definida por el usuario que se muestra completamente, no un comando integrado. 5000 — presupuesto en ms, UO.Wait(50) — intervalo de verificación. Un valor negativo da false; 0 solo permite un mundo ya hecho. Timer mide segundos, por lo que la diferencia se multiplica por 1000. La pausa automática debe desactivarse con antelación; de lo contrario, se cerrará la salida principal. La función no llama a Connect y no cancela la entrada iniciada cuando expira el tiempo.
- El comando solo lee el estado local. No envía ping, no se conecta, no pausa y no verifica la disponibilidad de Internet. Después de leer, la conexión puede cambiar; 1 no garantiza el éxito de la siguiente acción.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
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;
}
async public Task<object?> RunScenarioAsync()
{
if (Truth(UO.GetPauseScriptOnDisconnectStatus()))
{
return null;
}
if (Truth(await WaitForWorld(5000)))
{
UO.UseSkill("Hiding");
}
return null;
}
async Task<dynamic> WaitForWorld(dynamic timeoutMs)
{
if (Truth(timeoutMs < 0))
{
return false;
}
var started = Environment.TickCount;
while (!(Truth(UO.Connected())))
{
if (Truth((Environment.TickCount - started) * 1000.0 >= timeoutMs))
{
return false;
}
await Delay(50);
}
return true;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
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: Sin parámetros.
Resultado: dynamic / Any.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.IsOnline:bridge.IsOnline().
Código interno de implementación; no es un script independiente.
case "connected": return new InjectionValue(bridge.IsOnline());Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.ConnectedTime();Devuelve el sello del calendario de la última entrada exitosa del personaje al mundo. Le ayuda a comprender si la conexión ha cambiado mientras espera o hace una pausa antes de continuar con la misma tarea.
No hay parámetros.
double: número de días desde 1899-12-30, parte fraccionaria - hora del día (OLE fecha de automatización). 0 significa que el propietario de esta sesión aún no ha ingresado al mundo. Después de la desconexión se conserva la última marca de entrada. No es bool ni la duración en segundos.
- No hay argumentos. El historial es común para scripts del mismo propietario de sesión: inicio tardío, pausa y cierre IDE no cambian las marcas. Un nuevo proceso de sesión inicia una nueva historia; no es un registro de todas las conexiones.
- Un intento fallido de inicio de sesión sin que el personaje aparezca en el mundo no se considera un inicio de sesión exitoso. Las comprobaciones repetidas fuera de línea no cambian el tiempo de apagado. Para el estado actual, utilice UO.Connected() en lugar de una fecha distinta de cero.
- Los relojes se toman del reloj local de la computadora. La diferencia multiplicada por 86400 da segundos calendario; Cambiar el reloj/zona horaria puede distorsionar los resultados. Para tiempos de espera, use Timer() monótono. Las llamadas individuales no forman una instantánea atómica; la misma marca no es una conexión ID única.
- UO.Wait tarda milisegundos. La pausa automática cuando se pierde la conexión y la pausa manual retrasan la ejecución de los ejemplos: la verificación del tiempo de espera continuará solo después de que se elimine la pausa. Estos comandos no se reanudan y no habilitan la reconexión automática.
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.ConnectedTime();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Parámetros y flujo de ejecución:
- 0 comprueba la ausencia de entradas en este proceso en particular. Connect utiliza el perfil guardado y solo solicita iniciar sesión. Este ejemplo no restaura intencionalmente una conexión ya finalizada.
- UO.Wait tarda milisegundos. La pausa automática cuando se pierde la conexión y la pausa manual retrasan la ejecución de los ejemplos: la verificación del tiempo de espera continuará solo después de que se elimine la pausa. Estos comandos no se reanudan y no habilitan la reconexión automática.
if (Truth(UO.ConnectedTime() == 0))
{
UO.Connect();
}
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:
- 30.0 — seguimiento del presupuesto en segundos Timer; 250 — intervalo UO.Wait en ms. Después de cambiar la marca de entrada, CancelWaitTarget borra el objetivo diferido anterior. Si no hay ninguna entrada nueva, el ciclo finaliza sin esta acción.
- UO.Wait tarda milisegundos. La pausa automática cuando se pierde la conexión y la pausa manual retrasan la ejecución de los ejemplos: la verificación del tiempo de espera continuará solo después de que se elimine la pausa. Estos comandos no se reanudan y no habilitan la reconexión automática.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var login = UO.ConnectedTime();
var started = Environment.TickCount;
while (Truth(Environment.TickCount - started < 30.0))
{
if (Truth(UO.Connected()) && Truth(UO.ConnectedTime() != login))
{
UO.CancelWaitTarget();
return null;
}
await Delay(250);
}
return null;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
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:
- SameConnection(iniciar sesión) devuelve bool. Guardamos la marca, esperamos 500 ms, luego prohibimos la continuación si no hay conexión o la entrada cambia. Esta es una nueva prueba y no una garantía de disponibilidad futura del servidor.
- UO.Wait tarda milisegundos. La pausa automática cuando se pierde la conexión y la pausa manual retrasan la ejecución de los ejemplos: la verificación del tiempo de espera continuará solo después de que se elimine la pausa. Estos comandos no se reanudan y no habilitan la reconexión automática.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
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;
}
async public Task<object?> RunScenarioAsync()
{
var login = UO.ConnectedTime();
await Delay(500);
if (!(Truth(SameConnection(login))))
{
return null;
}
UO.AddToSystemJournal("Same connection; continue this batch");
return null;
}
dynamic SameConnection(dynamic login)
{
return Truth(login != 0) && Truth(UO.Connected()) && Truth(UO.ConnectedTime() == login);
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
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: Sin parámetros.
Resultado: dynamic / Any.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.UpdateConnectionState:UpdateConnectionState().
Código interno de implementación; no es un script independiente.
case "connectedtime":
UpdateConnectionState();
return new InjectionValue(state.ConnectedTime == default(DateTime) ? 0d : state.ConnectedTime.ToOADate());Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.Disconnect();Desconecta el transporte del cliente actual o instalado y prepara scripts para la reconexión.
No hay parámetros.
void: sin valor de retorno.
- Si la reconexión automática está desactivada, BeginScriptControlledDisconnect guarda al trabajador que realiza la llamada para más tarde UO.Connect. La sesión del administrador recibe RequestDisconnect.
- El cliente independiente llama a Socket.Disconnect y PrepareForReconnect. Cuando la reconexión global está habilitada, programa explícitamente la transición de la escena guardada. En LoginScene borra la ventana emergente y regresa Principal.
- Devolver void no informa el resultado de la reconexión. El estado de la conexión se lee por separado; La configuración de reconexión automática puede iniciar un nuevo inicio de sesión.
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.Disconnect");
UO.Disconnect();Parámetros y flujo de ejecución:
- El comando cancela tanto el transporte activo como el instalado.
UO.Disconnect();Parámetros y flujo de ejecución:
- Con AR desactivado, el trabajador que llama puede comunicarse con Connect él mismo.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
UO.Disconnect();
await Delay(1000);
UO.Connect();
return null;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));Parámetros y flujo de ejecución:
- La condición utiliza una bandera local para la sesión actual.
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()
{
if (Truth(UO.Connected()))
{
UO.Disconnect();
}
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: Sin parámetros.
Resultado: void / Unit.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.DisconnectClient:bridge.DisconnectClient().
Código interno de implementación; no es un script independiente.
case "disconnect": bridge.DisconnectClient(); return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.DisconnectedTime();Devuelve el sello del calendario de la última vez que se perdió la conexión del juego. Es necesario para diagnosticar una interrupción y estimar la duración de una conexión completa, y no para determinar el número de intentos de inicio de sesión.
No hay parámetros.
double: número de días desde 1899-12-30 con parte fraccionaria del día. Después del descanso: el momento en que el cliente notó la interrupción; antes de la primera pausa es el momento en que se creó el propietario de la sesión. Esta no es una bandera fuera de línea ni milisegundos.
- No hay argumentos. El historial es común para scripts del mismo propietario de sesión: inicio tardío, pausa y cierre IDE no cambian las marcas. Un nuevo proceso de sesión inicia una nueva historia; no es un registro de todas las conexiones.
- Un intento fallido de inicio de sesión sin que el personaje aparezca en el mundo no se considera un inicio de sesión exitoso. Las comprobaciones repetidas fuera de línea no cambian el tiempo de apagado. Para el estado actual, utilice UO.Connected() en lugar de una fecha distinta de cero.
- Los relojes se toman del reloj local de la computadora. La diferencia multiplicada por 86400 da segundos calendario; Cambiar el reloj/zona horaria puede distorsionar los resultados. Para tiempos de espera, use Timer() monótono. Las llamadas individuales no forman una instantánea atómica; la misma marca no es una conexión ID única.
- UO.Wait tarda milisegundos. La pausa automática cuando se pierde la conexión y la pausa manual retrasan la ejecución de los ejemplos: la verificación del tiempo de espera continuará solo después de que se elimine la pausa. Estos comandos no se reanudan y no habilitan la reconexión automática.
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.DisconnectedTime();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Parámetros y flujo de ejecución:
- CompletedConnectionSeconds() devuelve segundos o -1 si no hay una conexión completa o la entrada ha cambiado entre lecturas. 86400 — segundos en un día. Sólo se recalcula el último par de entrada/interrupción; La función no resume el historial de todas las sesiones.
- UO.Wait tarda milisegundos. La pausa automática cuando se pierde la conexión y la pausa manual retrasan la ejecución de los ejemplos: la verificación del tiempo de espera continuará solo después de que se elimine la pausa. Estos comandos no se reanudan y no habilitan la reconexión automática.
var seconds = CompletedConnectionSeconds();
if (Truth(seconds >= 0))
{
UO.AddToSystemJournal("Completed connection seconds: " + Convert.ToString(seconds));
}
dynamic CompletedConnectionSeconds()
{
var login = UO.ConnectedTime();
var loss = UO.DisconnectedTime();
if (Truth(login == 0) || Truth(loss < login) || Truth(UO.Connected()))
{
return -1;
}
if (Truth(UO.ConnectedTime() != login))
{
return -1;
}
return (loss - login) * 86400.0;
}
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:
- Cuando se habilita la pausa automática, este controlador sale inmediatamente; Para trabajar sin conexión se debe apagar previamente. Después de UO.Wait(1000) fuera de línea y se verifica nuevamente la marca de interrupción anterior. Connect no garantiza el éxito y no reemplaza la configuración de reconexión automática.
- UO.Wait tarda milisegundos. La pausa automática cuando se pierde la conexión y la pausa manual retrasan la ejecución de los ejemplos: la verificación del tiempo de espera continuará solo después de que se elimine la pausa. Estos comandos no se reanudan y no habilitan la reconexión automática.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
if (Truth(UO.GetPauseScriptOnDisconnectStatus()))
{
return null;
}
if (Truth(UO.Connected()))
{
return null;
}
var loss = UO.DisconnectedTime();
await Delay(1000);
if (!(Truth(UO.Connected())) && Truth(UO.DisconnectedTime() == loss))
{
UO.Connect();
}
return null;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
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:
- La comparación con previousLoss muestra un punto de equilibrio después de que ya se haya producido el reingreso. 30 segundos limitan la supervisión mientras se ejecuta el script, WaitAsync(250) libera el hilo entre comprobaciones. Se pueden combinar varias interrupciones en una sola notificación.
- UO.Wait tarda milisegundos. La pausa automática cuando se pierde la conexión y la pausa manual retrasan la ejecución de los ejemplos: la verificación del tiempo de espera continuará solo después de que se elimine la pausa. Estos comandos no se reanudan y no habilitan la reconexión automática.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
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;
}
async public Task<object?> RunScenarioAsync()
{
var previousLoss = UO.DisconnectedTime();
var started = Environment.TickCount;
while (Truth(Environment.TickCount - started < 30.0))
{
if (Truth(UO.DisconnectedTime() != previousLoss))
{
UO.AddToSystemJournal("A connection loss occurred; check the session");
return null;
}
await Delay(250);
}
return null;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
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: Sin parámetros.
Resultado: dynamic / Any.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.UpdateConnectionState:UpdateConnectionState().
Código interno de implementación; no es un script independiente.
case "disconnectedtime":
UpdateConnectionState();
return new InjectionValue(state.DisconnectedTime.ToOADate());Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.GameServerIPString();Lee la dirección del servidor configurado desde la configuración global del cliente.
No hay parámetros.
string — Configuración.GlobalSettings.IP o una cadena vacía si no hay ningún valor.
- GameServerAddress en el puente actual lee la configuración global IP. Esta no es una solicitud DNS/red, ni verifica la dirección real del par; una sesión de administrador puede tener sus propios parámetros de conexión.
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.GameServerIPString();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Parámetros y flujo de ejecución:
- Se devuelve la configuración global actual IP.
var address = UO.GameServerIPString();
UO.Print(address);Parámetros y flujo de ejecución:
- Un valor en blanco indica que no hay configuración y no se ha medido un error de red.
return RunScenario();
object? RunScenario()
{
var address = UO.GameServerIPString();
if (Truth(Len(address) == 0))
{
UO.Print("no configured address");
}
return null;
}
int Len(object? value) => Convert.ToString(value)?.Length ?? 0;
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:
- La variable almacena la cadena obtenida en la primera llamada.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
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;
}
async public Task<object?> RunScenarioAsync()
{
var address = UO.GameServerIPString();
await Delay(100);
UO.Print(address);
return null;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
}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: Sin parámetros.
Resultado: dynamic / Any.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GameServerAddress:bridge.GameServerAddress.
Código interno de implementación; no es un script independiente.
case "gameserveripstring": return new InjectionValue(bridge.GameServerAddress);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.GetCharsListForShard();Devuelve los nombres de los personajes del fragmento actual conocido por el cliente.
No hay parámetros.
Conjunto de cuerdas. No hay nombres conocidos y el carácter actual es una matriz vacía.
- La sesión del administrador dice SessionControl.Caracteres. De forma independiente, LastCharacterManager se usa primero para la cuenta/servidor; si la lista está vacía, lea LoginScene.Caracteres sin nombres vacíos; entonces el Player.Name actual se utiliza como único elemento.
- Estos son nombres locales famosos; el comando no solicita una lista completa del servidor y no garantiza la actualización del caché.
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.GetCharsListForShard();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Parámetros y flujo de ejecución:
- El bucle opera sobre una serie real de nombres conocidos.
var names = UO.GetCharsListForShard();
for (int i = (int)(0); i <= ArrayLength(names)-1; i += (int)(1))
{
UO.Print(names[i]);
}
int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;Parámetros y flujo de ejecución:
- El índice 0 solo se usa para una matriz que no está vacía.
return RunScenario();
object? RunScenario()
{
var names = UO.GetCharsListForShard();
if (Truth(ArrayLength(names) > 0))
{
UO.Print(names[0]);
}
return null;
}
int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;
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 tamaño de la lista no indica la cantidad de espacios de cuenta en el servidor.
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 names = UO.GetCharsListForShard();
UO.Print(Convert.ToString(ArrayLength(names)));
return null;
}
int ArrayLength(object? value) => value is System.Array array ? array.Length : 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: Sin parámetros.
Resultado: dynamic / Any.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.StringArray:StringArray(bridge.GetCharactersForCurrentShard()). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetCharactersForCurrentShard:bridge.GetCharactersForCurrentShard().
Código interno de implementación; no es un script independiente.
case "getcharslistforshard": return StringArray(bridge.GetCharactersForCurrentShard());Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.GetPing();
int UO.GetPing(object? timeout);Lee el retraso de respuesta del servidor del juego. Sin argumento, utiliza la última dimensión; con un tiempo de espera solicita una nueva respuesta.
-
timeout— tiempo de espera / timeoutMS — tiempo de espera para un intento en milisegundos, convertido a int. Un valor negativo está limitado a cero. Con 0 se puede enviar la solicitud, pero no hay expectativa de respuesta; No es un tiempo de espera infinito.
int, milisegundos. Valor >= 0 – medición; 0 ms también son aceptables. -1 - sin medición: para un formulario con argumento, la solicitud no se completó o la respuesta no se recibió a tiempo. Esto NO es bool; 0 no puede considerarse un fracaso y -1 un éxito.
- GetPing() no envía nada e inmediatamente lee el último ServerPing. El valor anterior por sí solo no prueba que la conexión funcione ahora. Esta es la última medición del eco del servidor, no el ping del indicador TCP suavizado/de respaldo ni el ping ICMP (host). GetPing(tiempo de espera) espera una nueva respuesta y luego lee la última medición del servidor.
- La espera retrasa el script de llamada en lugar de confirmar la acción del juego. El comando no se vuelve a conectar y no cambia la configuración de la red. Es posible que el servidor no responda al eco: el fallo en sí mismo no prueba que la conexión se haya interrumpido. El momento también depende de la programación del flujo; No llame a la verificación activa en cada cuadro. Detener el guión interrumpe la espera.
- UO.GetPing · UO.CheckLag · UO.IsOnline
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.
var result = UO.GetPing();
UO.Print("GetPing: " + Convert.ToString(result));Parámetros y flujo de ejecución:
- Leer caché sin nueva solicitud de red. El ejemplo selecciona 50 o 200 ms para esperar el script en un umbral de 250 ms. La dimensión desconocida se procesa por separado. Estos números son una configuración de ejemplo, no un límite de servidor universal.
var pingMs = UO.GetPing();
if (Truth(pingMs < 0))
{
UO.Print("No server latency sample");
return null;
}
var delayMs = 50;
if (Truth(pingMs > 250))
{
delayMs = 200;
}
await Delay(delayMs);
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
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:
- 1000: espera máxima para una nueva respuesta en milisegundos. En -1 finaliza el procedimiento. Si la medición es exitosa, se solicita Ocultar; una respuesta de eco no demuestra el uso exitoso de la habilidad.
return RunScenario();
object? RunScenario()
{
var pingMs = UO.GetPing(1000);
if (Truth(pingMs == -1))
{
UO.Print("No fresh server response");
return null;
}
UO.UseSkill("Hiding");
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:
- MeanPing(muestras, timeoutMs) se muestra en su totalidad: 3 intenta en 500 ms; las mediciones fallidas se excluyen del promedio. Si no hay ninguno exitoso, se devuelve -1. muestras limitadas a 1–10; UO.Wait(100) reduce la tasa de solicitudes entre intentos.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
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;
}
async public Task<object?> RunScenarioAsync()
{
var meanMs = await MeanPing(3, 500);
if (Truth(meanMs < 0))
{
UO.Print("No successful samples");
}
else
{
UO.Print("Measured mean, ms: " + Convert.ToString(meanMs));
}
return null;
}
async Task<dynamic> MeanPing(dynamic samples, dynamic timeoutMs)
{
if (Truth(samples < 1) || Truth(samples > 10))
{
return -1;
}
var total = 0;
var count = 0;
for (int i = (int)(1); i <= samples; i += (int)(1))
{
var current = UO.GetPing(timeoutMs);
if (Truth(current >= 0))
{
total = total + current;
count = count + 1;
}
await Delay(100);
}
if (Truth(count == 0))
{
return -1;
}
return total / count;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
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: Sin parámetros.
Resultado: int / Integer.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.GetPing. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetPing:bridge.GetPing().
Código interno de implementación; no es un script independiente.
public int GetPing() => bridge.GetPing();Parámetros: timeout (Any)
Resultado: int / Integer.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.GetPing. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetPing:bridge.GetPing(Math.Max(0, NumberConversions.ToInt(timeout))). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(timeout).
Código interno de implementación; no es un script independiente.
public int GetPing(InjectionValue timeout) => bridge.GetPing(Math.Max(0, NumberConversions.ToInt(timeout)));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.IsOnline();Comprueba si la sesión actual está en el mundo del juego y si su conexión al juego está abierta. Úselo antes de la acción de un personaje o mientras espera la entrada.
No hay parámetros.
int. 1 - hay un jugador, una carta cargada y un zócalo de juego activo al mismo tiempo; en caso contrario 0. Una ventana de cliente abierta, una lista de caracteres o una conexión TCP en la etapa de inicio de sesión no significa 1. Bandera numérica int: 1 (condición cumplida), 0 (condición no cumplida). Esta es una bandera numérica: en C# verifique el resultado! = 0 o resultado == 0. Comparación directa de int con true/false y si (resultado) no está permitido.
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ó.
- No hay parámetros: serial, type, el nombre del personaje y IP no se pueden transferir. UO.Online(), UO.Connected() y UO.IsOnline() comprueban lo mismo. Este es el estado del propietario de la sesión determinada, no de otro perfil de administrador.
- El comando solo lee el estado local. No envía ping, no se conecta, no pausa y no verifica la disponibilidad de Internet. Después de leer, la conexión puede cambiar; 1 no garantiza el éxito de la siguiente acción.
- UO.Wait tarda milisegundos. La pausa automática cuando se pierde la conexión y la pausa manual retrasan la ejecución de los ejemplos: la verificación del tiempo de espera continuará solo después de que se elimine la pausa. Estos comandos no se reanudan y no habilitan la reconexión automática.
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.
var result = UO.IsOnline();
UO.Print("IsOnline: " + Convert.ToString(result));Parámetros y flujo de ejecución:
- false es equivalente a 0. el retorno termina Principal en UseSkill. Ocultar es el único parámetro de UseSkill, el nombre de la habilidad. Con 1 el script sólo pide usar la habilidad; el resultado depende del estado del personaje y del servidor.
- El comando solo lee el estado local. No envía ping, no se conecta, no pausa y no verifica la disponibilidad de Internet. Después de leer, la conexión puede cambiar; 1 no garantiza el éxito de la siguiente acción.
if (Truth(Truth(UO.IsOnline()) == false))
{
return null;
}
UO.UseSkill("Hiding");
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:
- La comparación con 0 verifica la conexión actual, no la configuración de reconexión automática. Connect sin argumentos utiliza la configuración guardada y no espera a que se complete el inicio de sesión. Repetir un comando durante un inicio de sesión que ya comenzó no debería crear una segunda sesión.
- El comando solo lee el estado local. No envía ping, no se conecta, no pausa y no verifica la disponibilidad de Internet. Después de leer, la conexión puede cambiar; 1 no garantiza el éxito de la siguiente acción.
return RunScenario();
object? RunScenario()
{
if (Truth(UO.IsOnline() == 0))
{
UO.Connect();
}
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:
- WaitForWorld(timeoutMs) es una función definida por el usuario que se muestra completamente, no un comando integrado. 5000 — presupuesto en ms, UO.Wait(50) — intervalo de verificación. Un valor negativo da false; 0 solo permite un mundo ya hecho. Timer mide segundos, por lo que la diferencia se multiplica por 1000. La pausa automática debe desactivarse con antelación; de lo contrario, se cerrará la salida principal. La función no llama a Connect y no cancela la entrada iniciada cuando expira el tiempo.
- El comando solo lee el estado local. No envía ping, no se conecta, no pausa y no verifica la disponibilidad de Internet. Después de leer, la conexión puede cambiar; 1 no garantiza el éxito de la siguiente acción.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
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;
}
async public Task<object?> RunScenarioAsync()
{
if (Truth(UO.GetPauseScriptOnDisconnectStatus()))
{
return null;
}
if (Truth(await WaitForWorld(5000)))
{
UO.UseSkill("Hiding");
}
return null;
}
async Task<dynamic> WaitForWorld(dynamic timeoutMs)
{
if (Truth(timeoutMs < 0))
{
return false;
}
var started = Environment.TickCount;
while (!(Truth(UO.IsOnline())))
{
if (Truth((Environment.TickCount - started) * 1000.0 >= timeoutMs))
{
return false;
}
await Delay(50);
}
return true;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
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: Sin parámetros.
Resultado: int / Integer.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.IsOnline. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.IsOnline:bridge.IsOnline().
Código interno de implementación; no es un script independiente.
public int IsOnline() => bridge.IsOnline();Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.Online();Comprueba si la sesión actual está en el mundo del juego y si su conexión al juego está abierta. Úselo antes de la acción de un personaje o mientras espera la entrada.
No hay parámetros.
int. 1 - hay un jugador, una carta cargada y un zócalo de juego activo al mismo tiempo; en caso contrario 0. Una ventana de cliente abierta, una lista de caracteres o una conexión TCP en la etapa de inicio de sesión no significa 1. Bandera numérica int: 1 (condición cumplida), 0 (condición no cumplida). Esta es una bandera numérica: en C# verifique el resultado! = 0 o resultado == 0. Comparación directa de int con true/false y si (resultado) no está permitido.
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ó.
- No hay parámetros: serial, type, el nombre del personaje y IP no se pueden transferir. UO.Online(), UO.Connected() y UO.IsOnline() comprueban lo mismo. Este es el estado del propietario de la sesión determinada, no de otro perfil de administrador.
- El comando solo lee el estado local. No envía ping, no se conecta, no pausa y no verifica la disponibilidad de Internet. Después de leer, la conexión puede cambiar; 1 no garantiza el éxito de la siguiente acción.
- UO.Wait tarda milisegundos. La pausa automática cuando se pierde la conexión y la pausa manual retrasan la ejecución de los ejemplos: la verificación del tiempo de espera continuará solo después de que se elimine la pausa. Estos comandos no se reanudan y no habilitan la reconexión automática.
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.
var result = UO.Online();
UO.Print("Online: " + Convert.ToString(result));Parámetros y flujo de ejecución:
- false es equivalente a 0. el retorno termina Principal en UseSkill. Ocultar es el único parámetro de UseSkill, el nombre de la habilidad. Con 1 el script sólo pide usar la habilidad; el resultado depende del estado del personaje y del servidor.
- El comando solo lee el estado local. No envía ping, no se conecta, no pausa y no verifica la disponibilidad de Internet. Después de leer, la conexión puede cambiar; 1 no garantiza el éxito de la siguiente acción.
if (Truth(Truth(UO.Online()) == false))
{
return null;
}
UO.UseSkill("Hiding");
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:
- La comparación con 0 verifica la conexión actual, no la configuración de reconexión automática. Connect sin argumentos utiliza la configuración guardada y no espera a que se complete el inicio de sesión. Repetir un comando durante un inicio de sesión que ya comenzó no debería crear una segunda sesión.
- El comando solo lee el estado local. No envía ping, no se conecta, no pausa y no verifica la disponibilidad de Internet. Después de leer, la conexión puede cambiar; 1 no garantiza el éxito de la siguiente acción.
return RunScenario();
object? RunScenario()
{
if (Truth(UO.Online() == 0))
{
UO.Connect();
}
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:
- WaitForWorld(timeoutMs) es una función definida por el usuario que se muestra completamente, no un comando integrado. 5000 — presupuesto en ms, UO.Wait(50) — intervalo de verificación. Un valor negativo da false; 0 solo permite un mundo ya hecho. Timer mide segundos, por lo que la diferencia se multiplica por 1000. La pausa automática debe desactivarse con antelación; de lo contrario, se cerrará la salida principal. La función no llama a Connect y no cancela la entrada iniciada cuando expira el tiempo.
- El comando solo lee el estado local. No envía ping, no se conecta, no pausa y no verifica la disponibilidad de Internet. Después de leer, la conexión puede cambiar; 1 no garantiza el éxito de la siguiente acción.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
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;
}
async public Task<object?> RunScenarioAsync()
{
if (Truth(UO.GetPauseScriptOnDisconnectStatus()))
{
return null;
}
if (Truth(await WaitForWorld(5000)))
{
UO.UseSkill("Hiding");
}
return null;
}
async Task<dynamic> WaitForWorld(dynamic timeoutMs)
{
if (Truth(timeoutMs < 0))
{
return false;
}
var started = Environment.TickCount;
while (!(Truth(UO.Online())))
{
if (Truth((Environment.TickCount - started) * 1000.0 >= timeoutMs))
{
return false;
}
await Delay(50);
}
return true;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
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: Sin parámetros.
Resultado: int / Integer.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases [Online]. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.IsOnline:bridge.IsOnline().
La llamada ejecuta el delegate del controlador guardado. El método de registro crea ese delegate al construir la API.
Código interno de implementación; no es un script independiente.
() => bridge.IsOnline()Creación de API: Estas funciones registran la API. No se ejecutan de nuevo en cada llamada al comando.
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.Resend();Envía una solicitud para resincronizar el mundo.
No hay parámetros.
void - sin valor. Llame en una línea separada; la finalización no confirma la acción del servidor.
- Resync envía NetClient.Socket.Send_Resync en el hilo del juego. Esta es una solicitud de actualización, no una reconexión ni un reconocimiento de que se han recibido datos.
- En los ejemplos, UO.Wait especifica solo una pausa del script; el final de la pausa no prueba que el servidor haya completado la solicitud.
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.Resend");
UO.Resend();Parámetros y flujo de ejecución:
- Envía una solicitud para resincronizar el mundo.
UO.Resend();Parámetros y flujo de ejecución:
- Resync envía NetClient.Socket.Send_Resync en el hilo del juego. Esta es una solicitud de actualización, no una reconexión ni un reconocimiento de que se han recibido datos.
return RunScenario();
object? RunScenario()
{
if (Truth(UO.IsOnline()))
{
UO.Resend();
}
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:
- En los ejemplos, UO.Wait especifica solo una pausa del script; el final de la pausa no prueba que el servidor haya completado la solicitud.
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()
{
UO.Resend();
UO.Wait(500);
UO.Print(UO.GetX());
return null;
}
}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: Sin parámetros.
Resultado: void / Unit.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Resync:bridge.Resync().
Código interno de implementación; no es un script independiente.
case "resend": bridge.Resync(); break;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.ShardName();Lee el nombre del fragmento.
No hay parámetros.
string — texto del campo puente.ShardName; sin datos disponibles, es posible una cadena vacía. Este no es un signo de conexión y no es un ID numérico.
- ExecuteClientApiCompatibility devuelve el puente.ShardName sin cambiar el perfil o la selección del servidor.
- Lee el estado local actual. No hay paquete, objetivo o actualización automática; las lecturas individuales pueden ver diferentes estados.
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.ShardName();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Parámetros y flujo de ejecución:
- Lee el nombre del fragmento.
var value = UO.ShardName();
UO.Print(value);Parámetros y flujo de ejecución:
- ExecuteClientApiCompatibility devuelve el puente.ShardName sin cambiar el perfil o la selección del servidor.
return RunScenario();
object? RunScenario()
{
var value = UO.ShardName();
if (Truth(Len(value) > 0))
{
UO.TextPrint(value);
}
return null;
}
int Len(object? value) => Convert.ToString(value)?.Length ?? 0;
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:
- Lee el estado local actual. No hay paquete, objetivo o actualización automática; las lecturas individuales pueden ver diferentes estados.
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 before = UO.ShardName();
UO.Wait(500);
var after = UO.ShardName();
UO.Print(before = after);
return null;
}
}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: Sin parámetros.
Resultado: dynamic / Any.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.ShardName:bridge.ShardName.
Código interno de implementación; no es un script independiente.
case "shardname":
case "profileshardname": return new InjectionValue(bridge.ShardName);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.ShardPath();Lee la ruta del perfil actual.
No hay parámetros.
string — texto del campo puente.CurrentProfilePath; sin datos disponibles, es posible una cadena vacía. Este no es un signo de conexión y no es un ID numérico.
- ExecuteClientApiCompatibility devuelve el puente.CurrentProfilePath sin cambiar el perfil o la selección del servidor.
- Lee el estado local actual. No hay paquete, objetivo o actualización automática; las lecturas individuales pueden ver diferentes estados.
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.ShardPath();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Parámetros y flujo de ejecución:
- Lee la ruta del perfil actual.
var value = UO.ShardPath();
UO.Print(value);Parámetros y flujo de ejecución:
- ExecuteClientApiCompatibility devuelve el puente.CurrentProfilePath sin cambiar el perfil o la selección del servidor.
return RunScenario();
object? RunScenario()
{
var value = UO.ShardPath();
if (Truth(Len(value) > 0))
{
UO.TextPrint(value);
}
return null;
}
int Len(object? value) => Convert.ToString(value)?.Length ?? 0;
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:
- Lee el estado local actual. No hay paquete, objetivo o actualización automática; las lecturas individuales pueden ver diferentes estados.
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 before = UO.ShardPath();
UO.Wait(500);
var after = UO.ShardPath();
UO.Print(before = after);
return null;
}
}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: Sin parámetros.
Resultado: dynamic / Any.
Durante la llamada:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.CurrentProfilePath:bridge.CurrentProfilePath.
Código interno de implementación; no es un script independiente.
case "shardpath":
case "clientprofilepath": return new InjectionValue(bridge.CurrentProfilePath);ClassicUO — Bad Newbie & C# Scripts IDE