Skip to content

ES UO Topic client connection

Codex edited this page Oct 12, 2026 · 4 revisions

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

Cliente y conexión

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

Conexión, estado de entrada mundial, latencia, dirección del servidor y lista de caracteres.

Secciones

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

Todos los comandos del tema

Conexión

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

Ejemplos sobre el tema.

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.

UO.Connected

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;

UO.GameServerIPString

Parámetros, resultado y todos los escenarios

var address = UO.GameServerIPString();
UO.Print(address);

Referencia completa de comandos


UO.CheckLag

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

Firmas de C#

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.

Parámetros

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

Valor devuelto

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.

Comportamiento

  • 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

Scripts independientes de C#

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

Ejemplo sencillo

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

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

var result = UO.CheckLag();
UO.Print("CheckLag: " + Convert.ToString(result));

1. CheckLag - 1 - guión directo

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;

2. CheckLag — 2 — función de secuencia de comandos

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;

3. CheckLag - 3 - clase de escenario

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

Implementación del comando

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

UO.CheckLag() — UO.CheckLag()

Parámetros: Sin parámetros.

Resultado: int / Integer.

Durante la llamada:

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

public int CheckLag() => bridge.CheckLag(10_000);

UO.CheckLag(timeoutMS) — UO.CheckLag(Any)

Parámetros: timeoutMS (Any)

Resultado: dynamic / Any.

Durante la llamada:

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

case "checklag": return new InjectionValue(bridge.CheckLag(Arg(0, 10_000)));

UO.CheckLag(timeout, retries) — UO.CheckLag(Any,Any)

Parámetros: timeout (Any), retries (Any)

Resultado: int / Integer.

Durante la llamada:

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;

        }

UO.CloseUO

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

Firmas de C#

void UO.CloseUO();

Solicita que la aplicación cliente actual salga a través de Client.Game.Exit.

Parámetros

No hay parámetros.

Valor devuelto

void: sin valor de retorno.

Comportamiento

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

Scripts independientes de C#

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

Ejemplo sencillo

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

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

UO.Print("Calling UO.CloseUO");
UO.CloseUO();

1. Terminar cliente - Script directo

Parámetros y flujo de ejecución:

  • La llamada solicita la finalización de la aplicación del cliente.
UO.CloseUO();

2. Condición de terminación explícita: función de script

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;

3. Procedimiento de finalización: clase de script

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

Implementación del comando

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

UO.CloseUO() — UO.CloseUO()

Parámetros: Sin parámetros.

Resultado: void / Unit.

Durante la llamada:

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

case "closeuo": bridge.CloseHandle(); break;

UO.Connect

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

Firmas de C#

void UO.Connect();

Solicita conexión o reconexión de la sesión actual del cliente.

Parámetros

No hay parámetros.

Valor devuelto

void: sin valor de retorno.

Comportamiento

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

Scripts independientes de C#

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

Ejemplo sencillo

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

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

UO.Print("Calling UO.Connect");
UO.Connect();

1. Conectar - guión directo

Parámetros y flujo de ejecución:

  • La llamada sólo inicia una conexión.
UO.Connect();

2. Conectarse cuando no hay conexión - función de script

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;

3. Verificar estado más tarde - Clase de script

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

Implementación del comando

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

UO.Connect() — UO.Connect()

Parámetros: Sin parámetros.

Resultado: void / Unit.

Durante la llamada:

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

case "connect": bridge.ConnectClient(); return InjectionValue.Unit;

UO.Connected

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

Firmas de C#

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.

Parámetros

No hay parámetros.

Valor devuelto

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

Comportamiento

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

Scripts independientes de C#

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

Ejemplo sencillo

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

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

object? result = UO.Connected();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));

1. No realices la habilidad del juego sin conexión: guión directo

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;

2. Solicitar conexión cuando no hay conexión: función de script

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;

3. Espere a que el mundo esté listo con límite de tiempo - clase de escenario

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

Implementación del comando

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

UO.Connected() — UO.Connected()

Parámetros: Sin parámetros.

Resultado: dynamic / Any.

Durante la llamada:

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

case "connected": return new InjectionValue(bridge.IsOnline());

UO.ConnectedTime

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

Firmas de C#

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.

Parámetros

No hay parámetros.

Valor devuelto

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.

Comportamiento

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

Scripts independientes de C#

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

Ejemplo sencillo

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

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

object? result = UO.ConnectedTime();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));

1. Solicite la primera entrada: guión directo

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;

2. Restablecer el objetivo esperado después de un nuevo inicio de sesión: función de script

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;

3. Pruebe la conexión antes de continuar: clase de secuencia de comandos

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

Implementación del comando

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

UO.ConnectedTime() — UO.ConnectedTime()

Parámetros: Sin parámetros.

Resultado: dynamic / Any.

Durante la llamada:

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

UO.Disconnect

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

Firmas de C#

void UO.Disconnect();

Desconecta el transporte del cliente actual o instalado y prepara scripts para la reconexión.

Parámetros

No hay parámetros.

Valor devuelto

void: sin valor de retorno.

Comportamiento

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

Scripts independientes de C#

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

Ejemplo sencillo

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

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

UO.Print("Calling UO.Disconnect");
UO.Disconnect();

1. Desconectar sesión - script directo

Parámetros y flujo de ejecución:

  • El comando cancela tanto el transporte activo como el instalado.
UO.Disconnect();

2. Reconexión explícita: función de script

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

3. Deshabilitar solo la sesión conectada - clase de script

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

Implementación del comando

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

UO.Disconnect() — UO.Disconnect()

Parámetros: Sin parámetros.

Resultado: void / Unit.

Durante la llamada:

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

case "disconnect": bridge.DisconnectClient(); return InjectionValue.Unit;

UO.DisconnectedTime

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

Firmas de C#

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.

Parámetros

No hay parámetros.

Valor devuelto

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.

Comportamiento

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

Scripts independientes de C#

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

Ejemplo sencillo

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

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

object? result = UO.DisconnectedTime();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));

1. Estimar la duración de una conexión completa - guión directo

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;

2. Solicitar inicio de sesión después de una breve espera fuera de línea: función de script

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;

3. Observe la pausa entre comprobaciones: clase de script

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

Implementación del comando

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

UO.DisconnectedTime() — UO.DisconnectedTime()

Parámetros: Sin parámetros.

Resultado: dynamic / Any.

Durante la llamada:

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

case "disconnectedtime":

                    UpdateConnectionState();

                    return new InjectionValue(state.DisconnectedTime.ToOADate());

UO.GameServerIPString

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

Firmas de C#

dynamic UO.GameServerIPString();

Lee la dirección del servidor configurado desde la configuración global del cliente.

Parámetros

No hay parámetros.

Valor devuelto

string — Configuración.GlobalSettings.IP o una cadena vacía si no hay ningún valor.

Comportamiento

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

Scripts independientes de C#

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

Ejemplo sencillo

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

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

object? result = UO.GameServerIPString();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));

1. Leer dirección - guión directo

Parámetros y flujo de ejecución:

  • Se devuelve la configuración global actual IP.
var address = UO.GameServerIPString();
UO.Print(address);

2. Comprobar si hay una dirección vacía: función de script

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;

3. Guardar instantánea: clase de secuencia de comandos

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

Implementación del comando

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

UO.GameServerIPString() — UO.GameServerIPString()

Parámetros: Sin parámetros.

Resultado: dynamic / Any.

Durante la llamada:

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

case "gameserveripstring": return new InjectionValue(bridge.GameServerAddress);

UO.GetCharsListForShard

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

Firmas de C#

dynamic UO.GetCharsListForShard();

Devuelve los nombres de los personajes del fragmento actual conocido por el cliente.

Parámetros

No hay parámetros.

Valor devuelto

Conjunto de cuerdas. No hay nombres conocidos y el carácter actual es una matriz vacía.

Comportamiento

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

Scripts independientes de C#

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

Ejemplo sencillo

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

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

object? result = UO.GetCharsListForShard();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));

1. Imprimir nombres - guión directo

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;

2. Primer nombre conocido: función de secuencia de comandos

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;

3. Número de nombres - clase de script

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

Implementación del comando

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

UO.GetCharsListForShard() — UO.GetCharsListForShard()

Parámetros: Sin parámetros.

Resultado: dynamic / Any.

Durante la llamada:

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

case "getcharslistforshard": return StringArray(bridge.GetCharactersForCurrentShard());

UO.GetPing

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

Firmas de C#

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.

Parámetros

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

Valor devuelto

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.

Comportamiento

  • 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

Scripts independientes de C#

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

Ejemplo sencillo

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

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

var result = UO.GetPing();
UO.Print("GetPing: " + Convert.ToString(result));

1. GetPing - 1 - guión directo

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;

2. GetPing — 2 — función de secuencia de comandos

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;

3. GetPing - 3 - clase de escenario

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

Implementación del comando

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

UO.GetPing() — UO.GetPing()

Parámetros: Sin parámetros.

Resultado: int / Integer.

Durante la llamada:

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

public int GetPing() => bridge.GetPing();

UO.GetPing(timeout) — UO.GetPing(Any)

Parámetros: timeout (Any)

Resultado: int / Integer.

Durante la llamada:

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

public int GetPing(InjectionValue timeout) => bridge.GetPing(Math.Max(0, NumberConversions.ToInt(timeout)));

UO.IsOnline

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

Firmas de C#

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.

Parámetros

No hay parámetros.

Valor devuelto

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

Comportamiento

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

Scripts independientes de C#

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

Ejemplo sencillo

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

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

var result = UO.IsOnline();
UO.Print("IsOnline: " + Convert.ToString(result));

1. No realices la habilidad del juego sin conexión: guión directo

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;

2. Solicitar conexión cuando no hay conexión: función de script

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;

3. Espere a que el mundo esté listo con límite de tiempo - clase de escenario

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

Implementación del comando

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

UO.IsOnline() — UO.IsOnline()

Parámetros: Sin parámetros.

Resultado: int / Integer.

Durante la llamada:

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

public int IsOnline() => bridge.IsOnline();

UO.Online

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

Firmas de C#

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.

Parámetros

No hay parámetros.

Valor devuelto

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

Comportamiento

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

Scripts independientes de C#

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

Ejemplo sencillo

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

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

var result = UO.Online();
UO.Print("Online: " + Convert.ToString(result));

1. No realices la habilidad del juego sin conexión: guión directo

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;

2. Solicitar conexión cuando no hay conexión: función de script

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;

3. Espere a que el mundo esté listo con límite de tiempo - clase de escenario

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

Implementación del comando

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

UO.Online() — UO.Online()

Parámetros: Sin parámetros.

Resultado: int / Integer.

Durante la llamada:

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.


UO.Resend

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

Firmas de C#

void UO.Resend();

Envía una solicitud para resincronizar el mundo.

Parámetros

No hay parámetros.

Valor devuelto

void - sin valor. Llame en una línea separada; la finalización no confirma la acción del servidor.

Comportamiento

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

Scripts independientes de C#

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

Ejemplo sencillo

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

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

UO.Print("Calling UO.Resend");
UO.Resend();

1. Llamada directa - guión directo

Parámetros y flujo de ejecución:

  • Envía una solicitud para resincronizar el mundo.
UO.Resend();

2. Opción explícita: función de script

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;

3. Función auxiliar completa: clase de script

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

Implementación del comando

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

UO.Resend() — UO.Resend()

Parámetros: Sin parámetros.

Resultado: void / Unit.

Durante la llamada:

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

case "resend": bridge.Resync(); break;

UO.ShardName

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

Firmas de C#

dynamic UO.ShardName();

Lee el nombre del fragmento.

Parámetros

No hay parámetros.

Valor devuelto

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.

Comportamiento

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

Scripts independientes de C#

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

Ejemplo sencillo

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

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

object? result = UO.ShardName();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));

1. Llamada directa - guión directo

Parámetros y flujo de ejecución:

  • Lee el nombre del fragmento.
var value = UO.ShardName();
UO.Print(value);

2. Opción explícita: función de script

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;

3. Función auxiliar completa: clase de script

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

Implementación del comando

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

UO.ShardName() — UO.ShardName()

Parámetros: Sin parámetros.

Resultado: dynamic / Any.

Durante la llamada:

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

case "shardname":

                case "profileshardname": return new InjectionValue(bridge.ShardName);

UO.ShardPath

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

Firmas de C#

dynamic UO.ShardPath();

Lee la ruta del perfil actual.

Parámetros

No hay parámetros.

Valor devuelto

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.

Comportamiento

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

Scripts independientes de C#

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

Ejemplo sencillo

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

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

object? result = UO.ShardPath();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));

1. Llamada directa - guión directo

Parámetros y flujo de ejecución:

  • Lee la ruta del perfil actual.
var value = UO.ShardPath();
UO.Print(value);

2. Opción explícita: función de script

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;

3. Función auxiliar completa: clase de script

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

Implementación del comando

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

UO.ShardPath() — UO.ShardPath()

Parámetros: Sin parámetros.

Resultado: dynamic / Any.

Durante la llamada:

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

case "shardpath":

                case "clientprofilepath": return new InjectionValue(bridge.CurrentProfilePath);

Clone this wiki locally