ES UO Topic diagnostics introspection - LIHACHTETAN/ClassicUO-Bad-Newbie-CSharp-Scripts-IDE GitHub Wiki

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

Diagnóstico e introspección

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

Inspección de objetos, tejas y gumps, comprobando nombres, parámetros y firmas API. La presencia de una firma no confirma la posibilidad de una acción del juego en el estado actual.

Secciones

Tema Comandos y explicaciones
Help UO.Help
Dump UO.Dump
Info UO.Info
InfoTile UO.InfoTile
InfoGump UO.InfoGump
API Name Exists UO.ApiNameExists
API Signature Exists UO.ApiSignatureExists
API Parameter Exists UO.ApiParameterExists
Version UO.Version

Todos los comandos del tema

Inspección

UO.Help · UO.Dump · UO.Info · UO.InfoColor · UO.GetInfo · UO.ExtendedInfo · UO.InfoTile · UO.InfoGump · UO.InfoGumps · UO.ApiNameExists · UO.ApiParameterExists · UO.ApiSignatureExists · UO.Version · UO.ClientInfo

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

Parámetros, resultado y todos los escenarios

UO.InfoGump();

UO.ApiNameExists

Parámetros, resultado y todos los escenarios

return UO.ApiNameExists("UO.GetType");

Referencia completa de comandos


UO.ApiNameExists

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

Firmas de C#

int UO.ApiNameExists(object? name);

Comprueba el registro del nombre de la función nativa que se llama.

Parámetros

  • name - Obligatorio string: el nombre registrado exacto, no la expresión de llamada. Los espacios entre mayúsculas y minúsculas no son importantes; UO. no se agrega automáticamente. Un nombre vacío o desconocido da 0. No se tienen en cuenta los procedimientos del usuario.

Valor devuelto

int: 1 significa que el nombre está registrado; 0, que no lo está. En C#, usa result != 0 o result == 0. Comparar int con true o false no es válido. El registro no confirma ninguna acción del servidor.

Comportamiento

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.ApiNameExists("UO.GetType");
UO.Print("ApiNameExists: " + Convert.ToString(result));

1. UO.ApiNameExists - 1 - guión directo

Parámetros y flujo de ejecución:

  • El primer ejemplo prueba el nombre del juego con un UO explícito. y devuelve 1. El nombre exacto que se está probando y la cantidad de argumentos cuando se requiere son visibles en la llamada.
return UO.ApiNameExists("UO.GetType");

2. UO.ApiNameExists — 2 — función de secuencia de comandos

Solo se comprueba el registro de nombres nativos. Convert.ToInt32 es un método de .NET, no una entrada de la API UO, por lo que ApiNameExists devuelve 0. El método sigue disponible en C# normal.

return  RunScenario();
 object? RunScenario()
{
    var name = "Convert.ToInt32";
    return UO.ApiNameExists(name);
    return null;
}

3. UO.ApiNameExists - 3 - clase de escenario

Cada resultado numérico se compara con 0; después, && combina dos valores bool. Para estos nombres, el resultado es false.

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()
    {
        return HasBoth("GetType", "UO.GetType");
        return null;
    }

    dynamic HasBoth(dynamic first, dynamic second)
    {
        return UO.ApiNameExists(first) != 0 && UO.ApiNameExists(second) != 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.ApiNameExists(name) — UO.ApiNameExists(String)

Parámetros: name (String)

Resultado: int / Integer.

Durante la llamada:

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

public int ApiNameExists(string name)

        {

            string normalized = NormalizeApiName(name);

            return metadata.NativeSubrutines.Any(definition =>

                definition.Name.Equals(normalized, StringComparison.OrdinalIgnoreCase)) ? 1 : 0;

        }

UO.ApiParameterExists

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

Firmas de C#

int UO.ApiParameterExists(object? name);

Comprueba si está registrado un valor de tiempo de ejecución o un objeto con nombre.

Parámetros

  • name - Obligatorio string: el nombre registrado exacto, no la expresión de llamada. Los espacios entre mayúsculas y minúsculas no son importantes; UO. no se agrega automáticamente. Un nombre vacío o desconocido da 0. No se tienen en cuenta los procedimientos del usuario.

Valor devuelto

int: 1 significa que el nombre está registrado; 0, que no lo está. En C#, usa result != 0 o result == 0. Comparar int con true o false no es válido. El registro no confirma ninguna acción del servidor.

Comportamiento

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.ApiParameterExists("backpack");
UO.Print("ApiParameterExists: " + Convert.ToString(result));

1. UO.ApiParameterExists - 1 - guión directo

Parámetros y flujo de ejecución:

  • El primer ejemplo prueba el nombre del juego con un UO explícito. y devuelve 1. El nombre exacto que se está probando y la cantidad de argumentos cuando se requiere son visibles en la llamada.
return UO.ApiParameterExists("UO.GetHP");

2. UO.ApiParameterExists — 2 — función de secuencia de comandos

Se comprueba el selector registrado backpack, que devuelve 1. Esto no inspecciona los parámetros de los métodos C# ni demuestra que exista una mochila en el mundo del juego.

return  RunScenario();
 object? RunScenario()
{
    var name = "backpack";
    return UO.ApiParameterExists(name);
    return null;
}

3. UO.ApiParameterExists - 3 - clase de escenario

Parámetros y flujo de ejecución:

  • El tercer ejemplo contiene una función auxiliar completa. Compara la forma corta eliminada o la aridad no compatible con la forma disponible. Los parámetros nombre, primero, segundo y recuento pasan nombres/cuentas sin cambios. El resultado es 0 para verificaciones de llamadas y 0:1 para verificaciones de valores.
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()
    {
        return CompareNames("GetHP", "UO.GetHP");
        return null;
    }

    dynamic CompareNames(dynamic first, dynamic second)
    {
        return Convert.ToString(UO.ApiParameterExists(first)) + ":" + Convert.ToString(UO.ApiParameterExists(second));
    }
}

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.ApiParameterExists(name) — UO.ApiParameterExists(String)

Parámetros: name (String)

Resultado: int / Integer.

Durante la llamada:

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

public int ApiParameterExists(string name)

        {

            string value = (name ?? string.Empty).Trim();

            if (value.Length == 0)

                return 0;



            if (Metadata.ShortcutVariables.Any(item => item.Equals(value, StringComparison.OrdinalIgnoreCase)))

                return 1;



            return metadata.IntrinsicVariableExists(value) ? 1 : 0;

        }

UO.ApiSignatureExists

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

Firmas de C#

int UO.ApiSignatureExists(object? name, object? argumentCount);

Prueba el registro de un nombre con el número de argumentos dado.

Parámetros

  • name - Obligatorio string: el nombre registrado exacto, no la expresión de llamada. Los espacios entre mayúsculas y minúsculas no son importantes; UO. no se agrega automáticamente. Un nombre vacío o desconocido da 0. No se tienen en cuenta los procedimientos del usuario.
  • argumentCount: int obligatorio: el número total de argumentos posicionales, incluidos los opcionales, pasados ​​explícitamente. Una cantidad negativa o no respaldada da 0. Los tipos de argumentos en sí no se verifican.

Valor devuelto

int: 1 significa que el nombre está registrado; 0, que no lo está. En C#, usa result != 0 o result == 0. Comparar int con true o false no es válido. El registro no confirma ninguna acción del servidor.

Comportamiento

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.ApiSignatureExists("UO.GetType", 1);
UO.Print("ApiSignatureExists: " + Convert.ToString(result));

1. UO.ApiSignatureExists - 1 - guión directo

Parámetros y flujo de ejecución:

  • El primer ejemplo prueba el nombre del juego con un UO explícito. y devuelve 1. El nombre exacto que se está probando y la cantidad de argumentos cuando se requiere son visibles en la llamada.
return UO.ApiSignatureExists("UO.GetType",1);

2. UO.ApiSignatureExists — 2 — función de secuencia de comandos

Se comprueban las formas de UO.FindType con uno y cero argumentos. El resultado es la cadena "1:0"; la forma sin argumentos no está registrada.

return  RunScenario();
 object? RunScenario()
{
    return Convert.ToString(UO.ApiSignatureExists("UO.FindType", 1)) + ":" + Convert.ToString(UO.ApiSignatureExists("UO.FindType", 0));
    return null;
}

3. UO.ApiSignatureExists - 3 - clase de escenario

Parámetros y flujo de ejecución:

  • El tercer ejemplo contiene una función auxiliar completa. Compara la forma corta eliminada o la aridad no compatible con la forma disponible. Los parámetros nombre, primero, segundo y recuento pasan nombres/cuentas sin cambios. El resultado es 0 para verificaciones de llamadas y 0:1 para verificaciones de valores.
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()
    {
        return CheckForm("UO.GetType", 0);
        return null;
    }

    dynamic CheckForm(dynamic name, dynamic count)
    {
        return UO.ApiSignatureExists(name, count);
    }
}

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.ApiSignatureExists(name, argumentCount) — UO.ApiSignatureExists(String,Integer)

Parámetros: name (String), argumentCount (Integer)

Resultado: int / Integer.

Durante la llamada:

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

public int ApiSignatureExists(string name, int argumentCount)

            => metadata.NativeSubrutineExists(NormalizeApiName(name), argumentCount) ? 1 : 0;

UO.ClientInfo

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

Firmas de C#

dynamic UO.ClientInfo();

Lee información breve sobre el cliente en ejecución.

Parámetros

No hay parámetros.

Valor devuelto

Matriz de tres string: [0] - nombre del producto, [1] - versión del cliente en ejecución, [2] - directorio del cliente. Los índices comienzan con 0. Esta no es la cadena JSON ni es un diccionario.

Comportamiento

  • Los datos se leen de RuntimeProductName, RuntimeProductVersion y ClientPath. El comando no cambia nada y no envía nada al servidor.
  • Utilice ArrayLength antes de indexar en una función auxiliar general. No confunda la información del cliente con las estadísticas del personaje o la versión del servidor.
  • Lee información sobre el cliente ClassicUO actual.

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.ClientInfo();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));

1. Leer los tres campos: guión directo

Parámetros y flujo de ejecución:

  • 0 - producto, 1 - versión, 2 - catálogo. El valor de la versión se toma al inicio; en el ejemplo no está arreglado.
var info = UO.ClientInfo();
UO.Print("Product: " + info[0]);
UO.Print("Client version: " + info[1]);
UO.Print("Client folder: " + info[2]);

2. Bucle a través de la matriz - función de script

Parámetros y flujo de ejecución:

  • ArrayLength devuelve el número de campos. El último índice válido es igual a la longitud menos 1.
return  RunScenario();
 object? RunScenario()
{
    var info = UO.ClientInfo();
    var i = 0;
    while (Truth(i < ArrayLength(info)))
    {
        UO.Print(Convert.ToString(i) + ": " + info[i]);
        i = i + 1;
    }

    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. Función completa de recuperación de firma del cliente: clase de secuencia de comandos

Parámetros y flujo de ejecución:

  • ClientCaption devuelve una cadena de título y versión. La matriz original no se modifica.
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.Print(ClientCaption());
        return null;
    }

    dynamic ClientCaption()
    {
        var info = UO.ClientInfo();
        if (Truth(ArrayLength(info) < 2))
        {
            return "Client information unavailable";
        }

        return info[0] + " / " + info[1];
    }

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

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.ClientInfo() — UO.ClientInfo()

Parámetros: Sin parámetros.

Resultado: dynamic / Array.

Durante la llamada:

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

case "clientinfo":

                    return new InjectionValue(new[]

                    {

                        new InjectionValue(bridge.RuntimeProductName),

                        new InjectionValue(bridge.RuntimeProductVersion),

                        new InjectionValue(bridge.ClientPath)

                    });

UO.Dump

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

Firmas de C#

void UO.Dump();
void UO.Dump(object? @object);

Imprime una instantánea de diagnóstico de un objeto conocido por el cliente.

Parámetros

  • object - Opcional serial/enlace. Sin argumento, se utiliza bridge.LastTarget.

Valor devuelto

void: sin valor de retorno.

Comportamiento

  • El mensaje contiene serial como 0xXXXXXXXX, nombre, graphic/type, hue y X/Y/Z. Los campos se leen del modelo local; un objeto faltante da un nombre vacío y campos nulos. El comando no solicita las propiedades más recientes del servidor.

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.Dump");
UO.Dump();

1. Instantánea del último objetivo: guión directo

Parámetros y flujo de ejecución:

  • Un argumento faltante significa LastTarget.
UO.Dump();

2. Autodisparo: función de guión

Parámetros y flujo de ejecución:

  • Todos los campos son específicos de tu propio personaje.
return  RunScenario();
 object? RunScenario()
{
    UO.Dump("self");
    return null;
}

3. Instantánea del objeto inspeccionado: clase de secuencia de comandos

Parámetros y flujo de ejecución:

  • La prueba Exists separa un modelo faltante de un objeto con cero campos.
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 id = UO.LastTarget();
        if (Truth(UO.Exists(id)))
        {
            UO.Dump(id);
        }

        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.Dump() — UO.Dump()

Parámetros: Sin parámetros.

Resultado: void / Unit.

Durante la llamada:

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

case "dump":

                {

                    int id = Arg(0, bridge.LastTarget);

                    SystemMessage($"0x{id:X8} {bridge.GetName(id)} type=0x{bridge.GetGraphics(id):X4} hue=0x{bridge.GetColor(id):X4} xyz={bridge.GetX(id)},{bridge.GetY(id)},{bridge.GetZ(id)}");

                    break;

                }

UO.Dump(object) — UO.Dump(Any)

Parámetros: object (Any)

Resultado: void / Unit.

Durante la llamada:

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

case "dump":

                {

                    int id = Arg(0, bridge.LastTarget);

                    SystemMessage($"0x{id:X8} {bridge.GetName(id)} type=0x{bridge.GetGraphics(id):X4} hue=0x{bridge.GetColor(id):X4} xyz={bridge.GetX(id)},{bridge.GetY(id)},{bridge.GetZ(id)}");

                    break;

                }

UO.ExtendedInfo

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

Firmas de C#

dynamic UO.ExtendedInfo();

Devuelve cuatro campos de la configuración de conexión del cliente actual.

Parámetros

No hay parámetros.

Valor devuelto

Array [ClientPath:string, CurrentProfilePath:string, GameServerAddress:string, GameServerPort:int].

Comportamiento

  • The order of the fields is fixed. ClientPath and CurrentProfilePath are client paths. GameServerAddress y GameServerPort leen la configuración global.GlobalSettings.IP/Puerto: esta es la dirección configurada, sin verificar la sesión real del administrador de pares. La lista no contiene una contraseña y no solicita información al servidor. Son posibles valores en blanco antes de seleccionar un perfil/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.ExtendedInfo();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));

1. Campos de salida: script directo

Parámetros y flujo de ejecución:

  • La matriz contiene tipos mixtos, por lo que se utiliza Convert.ToString.
var info = UO.ExtendedInfo();
for (int i = (int)(0); i <= ArrayLength(info)-1; i += (int)(1))
{
    UO.Print(Convert.ToString(info[i]));
}

int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;

2. Imprimir dirección y puerto - función de script

Parámetros y flujo de ejecución:

  • Los índices 2 y 3 son la dirección y el puerto.
return  RunScenario();
 object? RunScenario()
{
    var info = UO.ExtendedInfo();
    UO.Print(Convert.ToString(info[2]) + ":" + Convert.ToString(info[3]));
    return null;
}

3. Leer ruta de perfil: clase de secuencia de comandos

Parámetros y flujo de ejecución:

  • Índice 1 — CurrentProfilePath, no ClientPath.
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 info = UO.ExtendedInfo();
        var path = info[1];
        UO.Print(path);
        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.ExtendedInfo() — UO.ExtendedInfo()

Parámetros: Sin parámetros.

Resultado: dynamic / Any.

Durante la llamada:

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

case "extendedinfo":

                    return new InjectionValue(new[] { new InjectionValue(bridge.ClientPath), new InjectionValue(bridge.CurrentProfilePath), new InjectionValue(bridge.GameServerAddress), new InjectionValue(bridge.GameServerPort) });

UO.GetInfo

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

Firmas de C#

string UO.GetInfo(object? arg);

Devuelve el nombre del personaje solo para el selector de caracteres exacto.

Parámetros

  • arg - string. El valor exacto, que distingue entre mayúsculas y minúsculas, de las llamadas de caracteres GetName("self"); cualquier otro valor no se reconoce.

Valor devuelto

string — nombre de tu personaje para personaje; literal de cadena UNKNOWN para todos los demás argumentos. Si no hay ningún carácter, el nombre puede estar vacío.

Comportamiento

  • La comparación StringComparison.Ordinal distingue entre mayúsculas y minúsculas. Sólo se admite el selector de caracteres. El comando no realiza solicitudes de red: lee el nombre del modelo de carácter local. La ventana FillInfoWindow se controla por 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 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.GetInfo("character");
UO.Print("GetInfo: " + Convert.ToString(result));

1. Nombre del personaje - guión directo

Parámetros y flujo de ejecución:

  • El carácter literal exacto dice self.
var name = UO.GetInfo("character");
UO.Print(name);

2. Otro caso: función de secuencia de comandos

Parámetros y flujo de ejecución:

  • El carácter no coincide y devuelve UNKNOWN.
return  RunScenario();
 object? RunScenario()
{
    var value = UO.GetInfo("Character");
    UO.Print(value);
    return null;
}

3. Selector desconocido: clase de script

Parámetros y flujo de ejecución:

  • El perfil no es compatible con esta implementación.
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 value = UO.GetInfo("profile");
        UO.Print(value);
        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.GetInfo(arg) — UO.GetInfo(String)

Parámetros: arg (String)

Resultado: string / String.

Durante la llamada:

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

private string GetInfo(string arg)

        {

            if (arg.Equals("character", StringComparison.Ordinal))

                return GetName("self");



            return "UNKNOWN";

        }

UO.Help

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

Firmas de C#

void UO.Help();

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

  • Modifica o muestra solo los datos locales especificados. Este comando no tiene confirmación del servidor.

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.Help");
UO.Help();

1. Llamada directa - guión directo

Parámetros y flujo de ejecución:

  • Muestra una pista local sobre C# IDE.
UO.Help();

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

Parámetros y flujo de ejecución:

  • ExecuteLegacyManualAlias muestra una línea sobre UO.*, el prefijo de chat configurado y Opciones > C# IDE > Manual vía SystemMessage. No se envía una solicitud de ayuda al servidor.
return  RunScenario();
 object? RunScenario()
{
    UO.Help();
    UO.OpenIDE();
    return null;
}

3. Función auxiliar completa: clase de script

Parámetros y flujo de ejecución:

  • Modifica o muestra solo los datos locales especificados. Este comando no tiene confirmación del 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()
    {
        UO.Help();
        UO.Print("Options > C# IDE > Manual");
        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.Help() — UO.Help()

Parámetros: Sin parámetros.

Resultado: void / Unit.

Durante la llamada:

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

case "help": SystemMessage("C# Scripts IDE: use UO.* in scripts or the configured chat prefix. Open Options > C# Scripts IDE > Manual."); break;

UO.Info

Firmas C#

string UO.Info();
string UO.Info(object? serial);
string UO.Info(object? type, object? x, object? y);
string UO.Info(object? type, object? x, object? y, object? z);

Comportamiento y resultado

El origen determina la presentación: los comandos del chat gráfico abren una tabla con campos, valores, Ctrl+C y desplazamiento. Los scripts C# reciben texto sin ventanas ni cursor de objetivo, aunque el juego esté abierto. Solo se muestran datos conocidos por el cliente.

Info e InfoTile sin argumentos activan un objetivo en el chat gráfico. En un script Info() lee el último objeto objetivo o el jugador; InfoTile() el suelo bajo el jugador. serial, type y coordenadas permiten seleccionar un elemento concreto. El tercer argumento de InfoTile(x,y,map) es el mapa.

Parámetros

  • serial — Serial del objeto o alias guardado.
  • type — ID gráfico; -1 admite cualquier tipo en esa posición.
  • x — Coordenada X del mundo.
  • y — Coordenada Y del mundo.
  • z — Altura Z; la forma corta utiliza 0.

Configure el prefijo en C# Scripts IDE; # es un ejemplo. Separe parámetros con espacios y use comillas para un solo texto. id significa serial, type significa graphic. xy x y [z] elige el primer objeto cargado en el punto; type solo el primer resultado. El tercer argumento de InfoTile(x,y,map) es el mapa, no Z.

Comandos del chat

#info
#UO.Info id 0x40001234
#info type 0x0EED
#info xy 1450 1690
#info type 0x0EED xy 1450 1690 0

Ejemplos C# completos

Cada bloque es un .csx completo. Sustituya serials, tipos y coordenadas de ejemplo. El orden y los argumentos C# con nombre siguen la firma.

1

string report = UO.Info(0x40001234);
UO.Print(report);

2

string InspectSelf() => UO.Info("self");
UO.Print(InspectSelf());

3

foreach (int serial in new[] { 0x40001234, 0x40005678 })
{
    string report = UO.Info(serial);
    UO.Print(report);
}

4

new CommandSample().Execute(UO);

sealed class CommandSample
{
    public void Execute(global::ClassicUO.CSharp.CSharpGameApi api)
    {
        string report = api.Info(0x40001234);
        api.Print(report);
    }
}

Llamadas internas

CSharpGameApi.Info
  -> CSharpScriptGlobals
  -> InjectionScript.Runtime.InjectionApiUO.Info
ClassicUOInjectionApiBridge -> YokoInfoReport -> YokoInfoGump


UO.InfoColor

Firmas C#

string UO.InfoColor();
string UO.InfoColor(object? serial);

Comportamiento y resultado

El origen determina la presentación: los comandos del chat gráfico abren una tabla con campos, valores, Ctrl+C y desplazamiento. Los scripts C# reciben texto sin ventanas ni cursor de objetivo, aunque el juego esté abierto. Solo se muestran datos conocidos por el cliente.

Info e InfoTile sin argumentos activan un objetivo en el chat gráfico. En un script Info() lee el último objeto objetivo o el jugador; InfoTile() el suelo bajo el jugador. serial, type y coordenadas permiten seleccionar un elemento concreto. El tercer argumento de InfoTile(x,y,map) es el mapa.

Parámetros

  • serial — Serial del objeto o alias guardado.

Configure el prefijo en C# Scripts IDE; # es un ejemplo. Separe parámetros con espacios y use comillas para un solo texto. id significa serial, type significa graphic. xy x y [z] elige el primer objeto cargado en el punto; type solo el primer resultado. El tercer argumento de InfoTile(x,y,map) es el mapa, no Z.

Comandos del chat

#infocolor 0x40001234

Ejemplos C# completos

Cada bloque es un .csx completo. Sustituya serials, tipos y coordenadas de ejemplo. El orden y los argumentos C# con nombre siguen la firma.

1

UO.Print(UO.InfoColor(0x40001234));

2

string report = UO.InfoColor();
UO.Print(report);

3

foreach (int serial in new[] { 0x40001234, 0x40005678 })
    UO.Print(UO.InfoColor(serial));

4

new CommandSample().Execute(UO);

sealed class CommandSample
{
    public void Execute(global::ClassicUO.CSharp.CSharpGameApi api)
    {
        api.Print(api.InfoColor(0x40001234));
    }
}

Llamadas internas

CSharpGameApi.InfoColor
  -> CSharpScriptGlobals
  -> InjectionScript.Runtime.InjectionApiUO.InfoColor
ClassicUOInjectionApiBridge -> YokoInfoReport -> YokoInfoGump


UO.InfoGump

Firmas C#

string UO.InfoGump();
string UO.InfoGump(object? gump);

Comportamiento y resultado

El origen determina la presentación: los comandos del chat gráfico abren una tabla con campos, valores, Ctrl+C y desplazamiento. Los scripts C# reciben texto sin ventanas ni cursor de objetivo, aunque el juego esté abierto. Solo se muestran datos conocidos por el cliente.

InfoGump() lee la última ventana activa del servidor o del cliente. ID o índice selecciona una ventana; last, LastGump y Last Gump indican la última. InfoGumps devuelve la lista sin los inspectores. Solo los comandos gráficos abren la tabla.

Parámetros

  • gump — ID o índice de ventana del servidor; -1 elige la última activa.

Configure el prefijo en C# Scripts IDE; # es un ejemplo. Separe parámetros con espacios y use comillas para un solo texto. id significa serial, type significa graphic. xy x y [z] elige el primer objeto cargado en el punto; type solo el primer resultado. El tercer argumento de InfoTile(x,y,map) es el mapa, no Z.

Comandos del chat

#infogump
#infogump last
#info gump last gump
#infogump 0x12345678

Ejemplos C# completos

Cada bloque es un .csx completo. Sustituya serials, tipos y coordenadas de ejemplo. El orden y los argumentos C# con nombre siguen la firma.

1

string report = UO.InfoGump();
UO.Print(report);

2

UO.Print(UO.InfoGump(0x12345678));

3

string ReadLatestWindow() => UO.InfoGump();
UO.Print(ReadLatestWindow());

4

new CommandSample().Execute(UO);

sealed class CommandSample
{
    public void Execute(global::ClassicUO.CSharp.CSharpGameApi api)
    {
        string report = api.InfoGump();
        api.Print(report);
    }
}

Llamadas internas

CSharpGameApi.InfoGump
  -> CSharpScriptGlobals
  -> InjectionScript.Runtime.InjectionApiUO.InfoGump
ClassicUOInjectionApiBridge -> YokoInfoReport -> YokoInfoGump


UO.InfoGumps

Firmas C#

string UO.InfoGumps();
string UO.InfoGumps(object? gump);

Comportamiento y resultado

El origen determina la presentación: los comandos del chat gráfico abren una tabla con campos, valores, Ctrl+C y desplazamiento. Los scripts C# reciben texto sin ventanas ni cursor de objetivo, aunque el juego esté abierto. Solo se muestran datos conocidos por el cliente.

InfoGump() lee la última ventana activa del servidor o del cliente. ID o índice selecciona una ventana; last, LastGump y Last Gump indican la última. InfoGumps devuelve la lista sin los inspectores. Solo los comandos gráficos abren la tabla.

Parámetros

  • gump — ID o índice de ventana del servidor; -1 elige la última activa.

Configure el prefijo en C# Scripts IDE; # es un ejemplo. Separe parámetros con espacios y use comillas para un solo texto. id significa serial, type significa graphic. xy x y [z] elige el primer objeto cargado en el punto; type solo el primer resultado. El tercer argumento de InfoTile(x,y,map) es el mapa, no Z.

Comandos del chat

#infogumps

Ejemplos C# completos

Cada bloque es un .csx completo. Sustituya serials, tipos y coordenadas de ejemplo. El orden y los argumentos C# con nombre siguen la firma.

1

UO.Print(UO.InfoGumps());

2

string report = UO.InfoGumps(0x12345678);
UO.Print(report);

3

string ReadAllWindows() => UO.InfoGumps();
UO.Print(ReadAllWindows());

4

new CommandSample().Execute(UO);

sealed class CommandSample
{
    public void Execute(global::ClassicUO.CSharp.CSharpGameApi api)
    {
        api.Print(api.InfoGumps());
    }
}

Llamadas internas

CSharpGameApi.InfoGumps
  -> CSharpScriptGlobals
  -> InjectionScript.Runtime.InjectionApiUO.InfoGumps
ClassicUOInjectionApiBridge -> YokoInfoReport -> YokoInfoGump


UO.InfoTile

Firmas C#

string UO.InfoTile();
string UO.InfoTile(object? x);
string UO.InfoTile(object? x, object? y);
string UO.InfoTile(object? x, object? y, object? map);
string UO.InfoTile(object? type, object? x, object? y, object? z);
string UO.InfoTile(object? type, object? x, object? y, object? z, object? map);

Comportamiento y resultado

El origen determina la presentación: los comandos del chat gráfico abren una tabla con campos, valores, Ctrl+C y desplazamiento. Los scripts C# reciben texto sin ventanas ni cursor de objetivo, aunque el juego esté abierto. Solo se muestran datos conocidos por el cliente.

Info e InfoTile sin argumentos activan un objetivo en el chat gráfico. En un script Info() lee el último objeto objetivo o el jugador; InfoTile() el suelo bajo el jugador. serial, type y coordenadas permiten seleccionar un elemento concreto. El tercer argumento de InfoTile(x,y,map) es el mapa.

Parámetros

  • map — Número de mapa; si se omite utiliza el actual.
  • type — ID gráfico; -1 admite cualquier tipo en esa posición.
  • x — Coordenada X del mundo.
  • y — Coordenada Y del mundo.
  • z — Altura Z; la forma corta utiliza 0.

Configure el prefijo en C# Scripts IDE; # es un ejemplo. Separe parámetros con espacios y use comillas para un solo texto. id significa serial, type significa graphic. xy x y [z] elige el primer objeto cargado en el punto; type solo el primer resultado. El tercer argumento de InfoTile(x,y,map) es el mapa, no Z.

Comandos del chat

#infotile
#info tile xy 1450 1690
#infotile 1450 1690 0
#infotile type 0x0EED 1450 1690 0 0

Ejemplos C# completos

Cada bloque es un .csx completo. Sustituya serials, tipos y coordenadas de ejemplo. El orden y los argumentos C# con nombre siguen la firma.

1

UO.Print(UO.InfoTile(1450, 1690));

2

string report = UO.InfoTile(1450, 1690, 0);
UO.Print(report);

3

UO.Print(UO.InfoTile(0x0EED, 1450, 1690, 0, 0));

4

new CommandSample().Execute(UO);

sealed class CommandSample
{
    public void Execute(global::ClassicUO.CSharp.CSharpGameApi api)
    {
        api.Print(api.InfoTile(1450, 1690));
    }
}

Llamadas internas

CSharpGameApi.InfoTile
  -> CSharpScriptGlobals
  -> InjectionScript.Runtime.InjectionApiUO.InfoTile
ClassicUOInjectionApiBridge -> YokoInfoReport -> YokoInfoGump


UO.Version

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

Firmas de C#

void UO.Version();

Imprime el nombre y la versión de ejecución del producto.

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

  • ExecuteLegacyManualAlias emite puente.RuntimeProductName y puente.RuntimeProductVersion a través de SystemMessage. Esta es una cadena de registro, no el número de versión devuelto.
  • Modifica o muestra solo los datos locales especificados. Este comando no tiene confirmación del servidor.

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.Version");
UO.Version();

1. Llamada directa - guión directo

Parámetros y flujo de ejecución:

  • Imprime el nombre y la versión de ejecución del producto.
UO.Version();

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

Parámetros y flujo de ejecución:

  • ExecuteLegacyManualAlias emite puente.RuntimeProductName y puente.RuntimeProductVersion a través de SystemMessage. Esta es una cadena de registro, no el número de versión devuelto.
return  RunScenario();
 object? RunScenario()
{
    UO.Version();
    UO.Help();
    return null;
}

3. Función auxiliar completa: clase de script

Parámetros y flujo de ejecución:

  • Modifica o muestra solo los datos locales especificados. Este comando no tiene confirmación del 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()
    {
        UO.Version();
        UO.Print(UO.GetUserCodepage());
        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.Version() — UO.Version()

Parámetros: Sin parámetros.

Resultado: void / Unit.

Durante la llamada:

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

case "version": SystemMessage($"{bridge.RuntimeProductName} v{bridge.RuntimeProductVersion}"); break;
⚠️ **GitHub.com Fallback** ⚠️