Skip to content

ES UO Topic profiles configuration

Bad Newbie edited this page Oct 16, 2026 · 5 revisions

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

Perfiles y configuración

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

Perfiles, configuración de guardado, valores globales y teclas de acceso rápido. El valor de tiempo de ejecución global y la variable de procedimiento local tienen duraciones diferentes.

Secciones

Tema Comandos y explicaciones
GetProfile UO.GetProfile
ProfileName UO.ProfileName
ProfileShardName UO.ProfileShardName
ChangeProfile UO.ChangeProfile
ExtChangeProfile UO.ExtChangeProfile
ResetProfile UO.ResetProfile
SaveConfig UO.SaveConfig
Global Variables UO.GetGlobal · UO.SetGlobal · UO.GListGet · UO.GListSet · UO.GListSize
EasyUO Variables UO.GetEasyUO · UO.SetEasyUO
MUL Path UO.SetMulPath

Todos los comandos del tema

Perfiles

UO.GetProfile · UO.ProfileName · UO.ProfileShardName · UO.ChangeProfile · UO.ExtChangeProfile · UO.ResetProfile · UO.SaveConfig · UO.ReqProfile · UO.ClientProfilePath · UO.ClientPath · UO.SetMulPath

Variables globales

UO.GetGlobal · UO.SetGlobal · UO.GetEasyUO · UO.SetEasyUO · UO.GListClear · UO.GListGet · UO.GListPosName · UO.GListPosValue · UO.GListSet · UO.GListSize

Teclas de acceso rápido / Configuración

UO.LoadHotkeys · UO.SaveHotkeys · UO.Set · UO.SetDefault

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

Parámetros, resultado y todos los escenarios

var text = UO.GetGlobal("manual.delay");
var delayMs = 350;
if (Truth(text != "N/A") && Truth(IsNumeric(text)))
{
    var parsed = Val(text);
    if (Truth(parsed >= 50) && Truth(parsed <= 5000))
    {
        delayMs = checked((int)parsed);
    }
}
await Delay(delayMs);

Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
bool IsNumeric(object? value) => double.TryParse(Convert.ToString(value), System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture, out _);
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
double Val(object? value) => double.TryParse(Convert.ToString(value), System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture, out var number) ? number : 0;

UO.SetGlobal

Parámetros, resultado y todos los escenarios

UO.SetGlobal("manual.delay", 350);
UO.SetGlobal("manual.delay", 600);
var text = UO.GetGlobal("manual.delay");
if (Truth(IsNumeric(text)))
{
    await Delay(Val(text));
}

Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
bool IsNumeric(object? value) => double.TryParse(Convert.ToString(value), System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture, out _);
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
double Val(object? value) => double.TryParse(Convert.ToString(value), System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture, out var number) ? number : 0;

Referencia completa de comandos


UO.ChangeProfile

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

Firmas de C#

dynamic UO.ChangeProfile(object? name);

Cambia el perfil seleccionado para la siguiente conexión de autocliente cuando se desconecta la sesión.

Parámetros

  • name: nombre de perfil/personaje guardado resuelto por TryResolveProfileCharacter para el fragmento seleccionado. Un nombre vacío/desconocido da -4.

Valor devuelto

int: 0 — la selección está preparada; -2 — la sesión del administrador o la conexión/mundo del juego está activa; -3 — se ejecuta más de un script; -4: el nombre/fragmento del perfil no está permitido.

Comportamiento

  • ChangeProfile pasa fragmento/carácter vacío; ExtChangeProfile permite fragmentos y caracteres explícitos. En la sesión del administrador, debe seleccionar otra sesión en ClassicUO Manager; la sesión en ejecución guarda su perfil.
  • Si tiene éxito, guarda y descarga el perfil actual, cambia LastServerName, guarda la configuración y asigna el siguiente carácter. La conexión en sí no se inicia; Connect se llama 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.

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

1. Verificar código de falla - script directo

Parámetros y flujo de ejecución:

  • Utilice el nombre del perfil guardado real; un código negativo describe una falla.
var status = UO.ChangeProfile("ExampleProfile");
UO.Print(Convert.ToString(status));

2. Nombre vacío - función de script

Parámetros y flujo de ejecución:

  • Un cliente independiente deshabilitado sin ninguna otra infracción devuelve -4 para un nombre vacío.
return  RunScenario();
 object? RunScenario()
{
    var status = UO.ChangeProfile("");
    UO.Print(Convert.ToString(status));
    return null;
}

3. Conexión después de una selección exitosa - clase de script

Parámetros y flujo de ejecución:

  • Connect se llama solo después del código 0; La respuesta del servidor aún no ha sido confirmada.
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 status = UO.ChangeProfile("ExampleProfile");
        if (Truth(status == 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;
}

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.ChangeProfile(name) — UO.ChangeProfile(Any)

Parámetros: name (Any)

Resultado: dynamic / Any.

Durante la llamada:

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

case "changeprofile":

                    return new InjectionValue(bridge.ChangeProfileSelection(Text(0), string.Empty, string.Empty));

UO.ClientPath

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

Firmas de C#

string UO.ClientPath();

Devuelve el directorio de instalación/ejecutable del cliente.

Parámetros

No hay parámetros.

Valor devuelto

string: ruta al directorio. No es bool, ni una matriz, ni ID. Una ruta vacía significa que el valor no está disponible; no lo use como su carpeta de trabajo actual predeterminada.

Comportamiento

  • Lea CUOEnviroment.ExecutablePath. Esta no es una ruta de conducción, una lista de puntos de referencia, una carpeta de secuencias de comandos ni una ruta a los datos del juego.
  • El comando solo lee la ruta, no abre, crea ni guarda nada. No se debe asumir el delimitador final; el ejemplo auxiliar lo agrega si es necesario.
  • El nombre es el nombre del juego/cliente API y se escribe con UO. ClientPath devuelve el directorio del cliente, ClientProfilePath devuelve el directorio del perfil activo.

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

1. Ruta de lectura: guión directo

Parámetros y flujo de ejecución:

  • No hay argumentos. carpeta - cadena; un valor vacío se procesa por separado.
var folder = UO.ClientPath();
if (Truth(folder == ""))
{
    UO.Print("Folder is not available");
    return null;
}
UO.Print(folder);

bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

2. Comparar la carpeta del cliente con la carpeta del perfil: función de secuencia de comandos

Parámetros y flujo de ejecución:

  • Estas carpetas tienen diferentes propósitos. El script genera ambas líneas sin cambiar la configuración o el perfil.
return  RunScenario();
 object? RunScenario()
{
    var client = UO.ClientPath();
    var profile = UO.ClientProfilePath();
    UO.Print("Client: " + client);
    if (Truth(profile == ""))
    {
        UO.Print("No current profile");
    }
    else
    {
        UO.Print("Profile: " + profile);
    }

    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 completa para construir la ruta a su archivo - clase de script

Parámetros y flujo de ejecución:

  • ChildPath se muestra en su totalidad: la carpeta es el directorio resultante, la hoja es el nombre del archivo. Esta es una concatenación de cadenas para un nombre determinado, no un normalizador de ruta universal.
  • El archivo no se crea ni se lee; Primero puedes comprobar la cadena resultante.
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 folder = UO.ClientPath();
        var filePath = ChildPath(folder, "sample.json");
        if (Truth(filePath != ""))
        {
            UO.Print("Example path: " + filePath);
        }

        return null;
    }

    dynamic ChildPath(dynamic folder, dynamic leaf)
    {
        if (Truth(folder == ""))
        {
            return "";
        }

        var last = Right(folder, 1);
        if (Truth(last == "/") || Truth(last == "\\"))
        {
            return folder + leaf;
        }

        return folder + "/" + leaf;
    }

    string Right(object? value, int count)
    {
        string text = Convert.ToString(value) ?? "";
        return text[Math.Max(0, text.Length - count)..];
    }

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

Parámetros: Sin parámetros.

Resultado: string / String.

Durante la llamada:

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

case "clientpath": return new InjectionValue(bridge.ClientPath);

UO.ClientProfilePath

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

Firmas de C#

string UO.ClientProfilePath();

Devuelve el directorio del perfil del cliente actual.

Parámetros

No hay parámetros.

Valor devuelto

string: ruta al directorio. No es bool, ni una matriz, ni ID. Una ruta vacía significa que el valor no está disponible; no lo use como su carpeta de trabajo actual predeterminada.

Comportamiento

  • Leer ProfileManager.ProfilePath; si el perfil aún no se ha seleccionado, se devuelve una cadena vacía. La llamada en sí no crea un perfil y no transfiere configuraciones.
  • El comando solo lee la ruta, no abre, crea ni guarda nada. No se debe asumir el delimitador final; el ejemplo auxiliar lo agrega si es necesario.
  • El nombre es el nombre del juego/cliente API y se escribe con UO. ClientPath devuelve el directorio del cliente, ClientProfilePath devuelve el directorio del perfil activo.

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

1. Ruta de lectura: guión directo

Parámetros y flujo de ejecución:

  • No hay argumentos. carpeta - cadena; un valor vacío se procesa por separado.
var folder = UO.ClientProfilePath();
if (Truth(folder == ""))
{
    UO.Print("Folder is not available");
    return null;
}
UO.Print(folder);

bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

2. Comparar la carpeta del cliente con la carpeta del perfil: función de secuencia de comandos

Parámetros y flujo de ejecución:

  • Estas carpetas tienen diferentes propósitos. El script genera ambas líneas sin cambiar la configuración o el perfil.
return  RunScenario();
 object? RunScenario()
{
    var client = UO.ClientPath();
    var profile = UO.ClientProfilePath();
    UO.Print("Client: " + client);
    if (Truth(profile == ""))
    {
        UO.Print("No current profile");
    }
    else
    {
        UO.Print("Profile: " + profile);
    }

    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 completa para construir la ruta a su archivo - clase de script

Parámetros y flujo de ejecución:

  • ChildPath se muestra en su totalidad: la carpeta es el directorio resultante, la hoja es el nombre del archivo. Esta es una concatenación de cadenas para un nombre determinado, no un normalizador de ruta universal.
  • El archivo no se crea ni se lee; Primero puedes comprobar la cadena resultante.
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 folder = UO.ClientProfilePath();
        var filePath = ChildPath(folder, "sample.json");
        if (Truth(filePath != ""))
        {
            UO.Print("Example path: " + filePath);
        }

        return null;
    }

    dynamic ChildPath(dynamic folder, dynamic leaf)
    {
        if (Truth(folder == ""))
        {
            return "";
        }

        var last = Right(folder, 1);
        if (Truth(last == "/") || Truth(last == "\\"))
        {
            return folder + leaf;
        }

        return folder + "/" + leaf;
    }

    string Right(object? value, int count)
    {
        string text = Convert.ToString(value) ?? "";
        return text[Math.Max(0, text.Length - count)..];
    }

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

Parámetros: Sin parámetros.

Resultado: string / String.

Durante la llamada:

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

case "shardpath":

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

UO.ExtChangeProfile

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

Firmas de C#

dynamic UO.ExtChangeProfile(object? profileName);
dynamic UO.ExtChangeProfile(object? profileName, object? shardName);
dynamic UO.ExtChangeProfile(object? profileName, object? shardName, object? charName);

Cambia el perfil seleccionado para la siguiente conexión de autocliente cuando se desconecta la sesión.

Parámetros

  • profileName: nombre de perfil/personaje guardado resuelto por TryResolveProfileCharacter para el fragmento seleccionado. Un nombre vacío/desconocido da -4.
  • shardName: nombre de fragmento opcional. Un valor vacío utiliza CurrentProfile.ServerName, World.ServerName o LastServerName.
  • charName: nombre de personaje opcional. Un valor vacío utiliza el nombre del perfil guardado.

Valor devuelto

int: 0 — la selección está preparada; -2 — la sesión del administrador o la conexión/mundo del juego está activa; -3 — se ejecuta más de un script; -4: el nombre/fragmento del perfil no está permitido.

Comportamiento

  • ChangeProfile pasa fragmento/carácter vacío; ExtChangeProfile permite fragmentos y caracteres explícitos. En la sesión del administrador, debe seleccionar otra sesión en ClassicUO Manager; la sesión en ejecución guarda su perfil.
  • Si tiene éxito, guarda y descarga el perfil actual, cambia LastServerName, guarda la configuración y asigna el siguiente carácter. La conexión en sí no se inicia; Connect se llama 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.

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

1. Verificar código de falla - script directo

Parámetros y flujo de ejecución:

  • Utilice el nombre del perfil guardado real; un código negativo describe una falla.
var status = UO.ExtChangeProfile("ExampleProfile");
UO.Print(Convert.ToString(status));

2. Nombre vacío - función de script

Parámetros y flujo de ejecución:

  • Un cliente independiente deshabilitado sin ninguna otra infracción devuelve -4 para un nombre vacío.
return  RunScenario();
 object? RunScenario()
{
    var status = UO.ExtChangeProfile("");
    UO.Print(Convert.ToString(status));
    return null;
}

3. Conexión después de una selección exitosa - clase de script

Parámetros y flujo de ejecución:

  • Connect se llama solo después del código 0; La respuesta del servidor aún no ha sido confirmada.
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 status = UO.ExtChangeProfile("ExampleProfile");
        if (Truth(status == 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;
}

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.ExtChangeProfile(profileName) — UO.ExtChangeProfile(Any)

Parámetros: profileName (Any)

Resultado: dynamic / Any.

Durante la llamada:

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

case "extchangeprofile":

                {

                    string requestedProfile = Text(0);

                    string requestedShard = arguments.Length > 1 ? Text(1) : string.Empty;

                    string requestedCharacter = arguments.Length > 2 ? Text(2) : string.Empty;

                    return new InjectionValue(bridge.ChangeProfileSelection(requestedProfile, requestedShard, requestedCharacter));

                }

UO.ExtChangeProfile(profileName, shardName) — UO.ExtChangeProfile(Any,Any)

Parámetros: profileName (Any), shardName (Any)

Resultado: dynamic / Any.

Durante la llamada:

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

case "extchangeprofile":

                {

                    string requestedProfile = Text(0);

                    string requestedShard = arguments.Length > 1 ? Text(1) : string.Empty;

                    string requestedCharacter = arguments.Length > 2 ? Text(2) : string.Empty;

                    return new InjectionValue(bridge.ChangeProfileSelection(requestedProfile, requestedShard, requestedCharacter));

                }

UO.ExtChangeProfile(profileName, shardName, charName) — UO.ExtChangeProfile(Any,Any,Any)

Parámetros: profileName (Any), shardName (Any), charName (Any)

Resultado: dynamic / Any.

Durante la llamada:

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

case "extchangeprofile":

                {

                    string requestedProfile = Text(0);

                    string requestedShard = arguments.Length > 1 ? Text(1) : string.Empty;

                    string requestedCharacter = arguments.Length > 2 ? Text(2) : string.Empty;

                    return new InjectionValue(bridge.ChangeProfileSelection(requestedProfile, requestedShard, requestedCharacter));

                }

UO.GListClear

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

Firmas de C#

void UO.GListClear();

Borra toda la lista temporal antes de una nueva serie de acciones.

Parámetros

No hay parámetros.

Valor devuelto

void - sin resultado. Después de borrar, GListSize() devuelve 0.

Comportamiento

  • La lista pertenece a la instancia de tiempo de ejecución. Otras ejecuciones de scripts tienen sus propias listas. GList no es un almacenamiento compartido entre perfiles; Estos comandos no escriben un archivo y no ingresan a un estado de perfil guardado. El nuevo tiempo de ejecución obtiene una lista vacía. Tampoco es var/declaración de variable ni UO.SetGlobal.
  • El nuevo nombre se añade al final. La repetición de un nombre que no distingue entre mayúsculas y minúsculas reemplaza el significado y la ortografía del nombre en su lugar original. La lectura no borra nada. No puede borrar ni agregar registros en medio de una búsqueda si necesita índices estables.
  • Las operaciones son locales: sin paquetes, sin búsquedas de objetos, sin latencia. Set/Get busca el nombre de forma secuencial; para conjuntos más grandes utilice el Diccionario. No existe un comando independiente para eliminar una clave de esta familia; Borrar borra todas las entradas.

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

1. GListClear - 1 - guión directo

Parámetros y flujo de ejecución:

  • Borrar elimina ambas reglas, Tamaño confirma el vacío. Los elementos del personaje permanecen en su lugar.
UO.GListClear();
UO.GListSet("bandage", 0x0E21);
UO.GListSet("gold", 0x0EED);
UO.GListClear();
if (Truth(UO.GListSize() == 0))
{
    UO.Print("Batch rules cleared");
}

bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

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

Parámetros y flujo de ejecución:

  • Las reglas antiguas se eliminan antes de agregar el mineral; la búsqueda solo muestra la nueva regla con graphic 0x19B9.
return  RunScenario();
 object? RunScenario()
{
    UO.GListClear();
    UO.GListSet("bandage", 0x0E21);
    UO.GListSet("gold", 0x0EED);
    UO.GListClear();
    UO.GListSet("ore", 0x19B9);
    var i = 0;
    while (Truth(i < UO.GListSize()))
    {
        var name = UO.GListPosName(i);
        var graphic = UO.GListPosValue(i);
        UO.Print(name + " | graphic: " + Convert.ToString(graphic));
        i = i + 1;
    }

    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. GListClear - 3 - clase de escenario

Parámetros y flujo de ejecución:

  • Un número leído previamente en retenido permanece disponible después de que se borra la lista. La lista ya contiene entradas 0.
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.GListClear();
        UO.GListSet("bandage", 0x0E21);
        UO.GListSet("gold", 0x0EED);
        var retained = UO.GListGet("bandage");
        UO.GListClear();
        UO.Print("Retained graphic: " + Convert.ToString(retained));
        UO.Print("Remaining entries: " + Convert.ToString(UO.GListSize()));
        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.GListClear() — UO.GListClear()

Parámetros: Sin parámetros.

Resultado: void / Unit.

Durante la llamada:

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

public void GListClear() => globalList.Clear();

UO.GListGet

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

Firmas de C#

dynamic UO.GListGet(object? nameValue);

Lee un valor de una lista temporal por regla o nombre de contador.

Parámetros

  • nameValue — object? se convierte en una cadena. Los nombres se comparan sin distinguir entre mayúsculas y minúsculas: "vendaje" y "BANDAGE" son una clave. Se recomienda un nombre de cadena que no esté vacío; un nombre vacío también es aceptable.

Valor devuelto

object? — valor guardado con el mismo tipo. Si no hay clave, int 0. El 0 conservado es indistinguible del GListGet ausente; revisa los nombres.

Comportamiento

  • La lista pertenece a la instancia de tiempo de ejecución. Otras ejecuciones de scripts tienen sus propias listas. GList no es un almacenamiento compartido entre perfiles; Estos comandos no escriben un archivo y no ingresan a un estado de perfil guardado. El nuevo tiempo de ejecución obtiene una lista vacía. Tampoco es var/declaración de variable ni UO.SetGlobal.
  • El nuevo nombre se añade al final. La repetición de un nombre que no distingue entre mayúsculas y minúsculas reemplaza el significado y la ortografía del nombre en su lugar original. La lectura no borra nada. No puede borrar ni agregar registros en medio de una búsqueda si necesita índices estables.
  • Las operaciones son locales: sin paquetes, sin búsquedas de objetos, sin latencia. Set/Get busca el nombre de forma secuencial; para conjuntos más grandes utilice el Diccionario. No existe un comando independiente para eliminar una clave de esta familia; Borrar borra todas las entradas.

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.

UO.GListSet("simple_value", 42);
object? result = UO.GListGet("simple_value");
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));

1. GListGet - 1 - guión directo

Parámetros y flujo de ejecución:

  • BANDAGE encuentra la llave del vendaje. 0x0E21 - graphic vendaje, no su único serial.
UO.GListClear();
UO.GListSet("bandage", 0x0E21);
UO.GListSet("gold", 0x0EED);
var graphic = UO.GListGet("BANDAGE");
if (Truth(graphic == 0x0E21))
{
    UO.Print("Bandage rule selected");
}

bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

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

Parámetros y flujo de ejecución:

  • La función completa HasEntry itera a través de nombres; entonces 0 procesado es diferente de faltante. Para claves propias, aquí se utilizan los nombres ASCII.
return  RunScenario();
 object? RunScenario()
{
    UO.GListClear();
    UO.GListSet("processed", 0);
    if (Truth(HasEntry("processed")))
    {
        var count = UO.GListGet("processed");
        UO.Print("Recorded count: " + Convert.ToString(count));
    }

    if (!(Truth(HasEntry("missing"))))
    {
        UO.Print("No entry named missing");
    }

    return null;
}

dynamic HasEntry(dynamic name)
{
    var i = 0;
    while (Truth(i < UO.GListSize()))
    {
        if (Truth(Convert.ToString(UO.GListPosName(i)) == Convert.ToString(name)))
        {
            return true;
        }

        i = i + 1;
    }

    return false;
}

bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

3. GListGet - 3 - clase de escenario

Parámetros y flujo de ejecución:

  • retraso: número de milisegundos; UO.Wait se llama solo para un valor en el rango 50–5000. El ejemplo espera 350 ms.
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.GListClear();
        UO.GListSet("delay", 350);
        var delayMs = UO.GListGet("delay");
        if (Truth(delayMs >= 50) && Truth(delayMs <= 5000))
        {
            await Delay(delayMs);
        }
        else
        {
            UO.Print("Delay outside the accepted range");
        }

        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.GListGet(nameValue) — UO.GListGet(Any)

Parámetros: nameValue (Any)

Resultado: dynamic / Any.

Durante la llamada:

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

public InjectionValue GListGet(InjectionValue nameValue)

        {

            string name = nameValue.ToString();

            int index = globalList.FindIndex(pair => pair.Key.Equals(name, StringComparison.OrdinalIgnoreCase));

            return index >= 0 ? globalList[index].Value : InjectionValue.Zero;

        }

UO.GListPosName

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

Firmas de C#

string UO.GListPosName(object? index);

Lee el nombre del registro por su posición para enumerar las reglas.

Parámetros

  • index - int: índice de 0 a GListSize()-1 inclusive. No es serial, graphic ni el número de unidades en la pila.

Valor devuelto

string es el nombre en la última forma registrada del registro. El índice no válido devuelve ""; una clave vacía también devuelve "".

Comportamiento

  • La lista pertenece a la instancia de tiempo de ejecución. Otras ejecuciones de scripts tienen sus propias listas. GList no es un almacenamiento compartido entre perfiles; Estos comandos no escriben un archivo y no ingresan a un estado de perfil guardado. El nuevo tiempo de ejecución obtiene una lista vacía. Tampoco es var/declaración de variable ni UO.SetGlobal.
  • El nuevo nombre se añade al final. La repetición de un nombre que no distingue entre mayúsculas y minúsculas reemplaza el significado y la ortografía del nombre en su lugar original. La lectura no borra nada. No puede borrar ni agregar registros en medio de una búsqueda si necesita índices estables.
  • Las operaciones son locales: sin paquetes, sin búsquedas de objetos, sin latencia. Set/Get busca el nombre de forma secuencial; para conjuntos más grandes utilice el Diccionario. No existe un comando independiente para eliminar una clave de esta familia; Borrar borra todas las entradas.

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.

UO.GListClear();
UO.GListSet("simple_value", 42);
var result = UO.GListPosName(0);
UO.Print("GListPosName: " + Convert.ToString(result));

1. GListPosName - 1 - guión directo

Parámetros y flujo de ejecución:

  • El índice 0 significa la primera regla. Antes de leer se comprueba que la lista no esté vacía.
UO.GListClear();
UO.GListSet("bandage", 0x0E21);
UO.GListSet("gold", 0x0EED);
if (Truth(UO.GListSize() > 0))
{
    var first = UO.GListPosName(0);
    UO.Print("First rule: " + first);
}

bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

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

Parámetros y flujo de ejecución:

  • HasEntry devuelve true para un contador cero registrado y false para un nombre faltante.
return  RunScenario();
 object? RunScenario()
{
    UO.GListClear();
    UO.GListSet("processed", 0);
    if (Truth(HasEntry("processed")))
    {
        var count = UO.GListGet("processed");
        UO.Print("Recorded count: " + Convert.ToString(count));
    }

    if (!(Truth(HasEntry("missing"))))
    {
        UO.Print("No entry named missing");
    }

    return null;
}

dynamic HasEntry(dynamic name)
{
    var i = 0;
    while (Truth(i < UO.GListSize()))
    {
        if (Truth(Convert.ToString(UO.GListPosName(i)) == Convert.ToString(name)))
        {
            return true;
        }

        i = i + 1;
    }

    return false;
}

bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

3. GListPosName - 3 - clase de escenario

Parámetros y flujo de ejecución:

  • Repetir BANDAGE cambia la ortografía del nombre en la primera posición; el oro sigue en segundo lugar.
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.GListClear();
        UO.GListSet("bandage", 0x0E21);
        UO.GListSet("gold", 0x0EED);
        UO.GListSet("BANDAGE", 0x0E21);
        var i = 0;
        while (Truth(i < UO.GListSize()))
        {
            var name = UO.GListPosName(i);
            var graphic = UO.GListPosValue(i);
            UO.Print(name + " | graphic: " + Convert.ToString(graphic));
            i = i + 1;
        }

        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.GListPosName(index) — UO.GListPosName(Integer)

Parámetros: index (Integer)

Resultado: string / String.

Durante la llamada:

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

public string GListPosName(int index) => index >= 0 && index < globalList.Count ? globalList[index].Key : string.Empty;

UO.GListPosValue

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

Firmas de C#

dynamic UO.GListPosValue(object? index);

Lee el valor de una entrada por posición, como graphic, de una lista previamente completada.

Parámetros

  • index - int: índice de 0 a GListSize()-1 inclusive. No es serial, graphic ni el número de unidades en la pila.

Valor devuelto

object? — valor con tipo conservado; El índice no válido devuelve int 0. Verifique los límites, ya que el verdadero 0 es aceptable.

Comportamiento

  • La lista pertenece a la instancia de tiempo de ejecución. Otras ejecuciones de scripts tienen sus propias listas. GList no es un almacenamiento compartido entre perfiles; Estos comandos no escriben un archivo y no ingresan a un estado de perfil guardado. El nuevo tiempo de ejecución obtiene una lista vacía. Tampoco es var/declaración de variable ni UO.SetGlobal.
  • El nuevo nombre se añade al final. La repetición de un nombre que no distingue entre mayúsculas y minúsculas reemplaza el significado y la ortografía del nombre en su lugar original. La lectura no borra nada. No puede borrar ni agregar registros en medio de una búsqueda si necesita índices estables.
  • Las operaciones son locales: sin paquetes, sin búsquedas de objetos, sin latencia. Set/Get busca el nombre de forma secuencial; para conjuntos más grandes utilice el Diccionario. No existe un comando independiente para eliminar una clave de esta familia; Borrar borra todas las entradas.

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.

UO.GListClear();
UO.GListSet("simple_value", 42);
object? result = UO.GListPosValue(0);
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));

1. GListPosValue - 1 - guión directo

Parámetros y flujo de ejecución:

  • El índice 1 selecciona la segunda regla de oro. La verificación de límites precede a la lectura del valor.
UO.GListClear();
UO.GListSet("bandage", 0x0E21);
UO.GListSet("gold", 0x0EED);
var index = 1;
if (Truth(index >= 0) && Truth(index < UO.GListSize()))
{
    var graphic = UO.GListPosValue(index);
    UO.Print("Second rule graphic: " + Convert.ToString(graphic));
}

bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

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

Parámetros y flujo de ejecución:

  • La fuerza bruta busca el vendaje graphic en las reglas, no el objeto en el mundo; no se envían solicitudes de juego.
return  RunScenario();
 object? RunScenario()
{
    UO.GListClear();
    UO.GListSet("bandage", 0x0E21);
    UO.GListSet("gold", 0x0EED);
    var total = UO.GListSize();
    var i = 0;
    while (Truth(i < total))
    {
        var graphic = UO.GListPosValue(i);
        if (Truth(graphic == 0x0E21))
        {
            UO.Print("Bandage rule at index " + Convert.ToString(i));
        }

        i = i + 1;
    }

    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. GListPosValue - 3 - clase de escenario

Parámetros y flujo de ejecución:

  • El índice 0 existe, por lo que el valor 0 es un contador válido; verificar el valor no nulo sería un error aquí.
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.GListClear();
        UO.GListSet("processed", 0);
        var index = 0;
        if (Truth(index < UO.GListSize()))
        {
            var count = UO.GListPosValue(index);
            UO.Print("Valid zero count: " + Convert.ToString(count));
        }

        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.GListPosValue(index) — UO.GListPosValue(Integer)

Parámetros: index (Integer)

Resultado: dynamic / Any.

Durante la llamada:

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

public InjectionValue GListPosValue(int index) => index >= 0 && index < globalList.Count ? globalList[index].Value : InjectionValue.Zero;

UO.GListSet

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

Firmas de C#

void UO.GListSet(object? nameValue, object? value);

Escribe un valor con nombre en una lista temporal: por ejemplo, graphic reglas de botín o contador de elementos procesados.

Parámetros

  • nameValue — object? se convierte en una cadena. Los nombres se comparan sin distinguir entre mayúsculas y minúsculas: "vendaje" y "BANDAGE" son una clave. Se recomienda un nombre de cadena que no esté vacío; un nombre vacío también es aceptable.

Valor devuelto

void - sin resultado; un comando separado, sin asignación.

Comportamiento

  • La lista pertenece a la instancia de tiempo de ejecución. Otras ejecuciones de scripts tienen sus propias listas. GList no es un almacenamiento compartido entre perfiles; Estos comandos no escriben un archivo y no ingresan a un estado de perfil guardado. El nuevo tiempo de ejecución obtiene una lista vacía. Tampoco es var/declaración de variable ni UO.SetGlobal.
  • El nuevo nombre se añade al final. La repetición de un nombre que no distingue entre mayúsculas y minúsculas reemplaza el significado y la ortografía del nombre en su lugar original. La lectura no borra nada. No puede borrar ni agregar registros en medio de una búsqueda si necesita índices estables.
  • Las operaciones son locales: sin paquetes, sin búsquedas de objetos, sin latencia. Set/Get busca el nombre de forma secuencial; para conjuntos más grandes utilice el Diccionario. No existe un comando independiente para eliminar una clave de esta familia; Borrar borra todas las entradas.

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.GListSet");
UO.GListSet("gold", 0x0EED);

1. GListSet - 1 - guión directo

Parámetros y flujo de ejecución:

  • vendaje y oro son los nombres de las reglas, los números son graphic. BANDAGE reemplaza la primera entrada, no crea una tercera; la salida muestra el orden.
UO.GListClear();
UO.GListSet("bandage", 0x0E21);
UO.GListSet("gold", 0x0EED);
UO.GListSet("BANDAGE", 0x0E21);
var i = 0;
while (Truth(i < UO.GListSize()))
{
    var name = UO.GListPosName(i);
    var graphic = UO.GListPosValue(i);
    UO.Print(name + " | graphic: " + Convert.ToString(graphic));
    i = i + 1;
}

bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

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

Parámetros y flujo de ejecución:

  • procesado comienza con 0. Tres pasos incrementan el contador almacenado a 3; Los elementos del juego no se mueven aquí.
return  RunScenario();
 object? RunScenario()
{
    UO.GListClear();
    UO.GListSet("processed", 0);
    for (int i = (int)(1); i <= 3; i += (int)(1))
    {
        UO.GListSet("processed", UO.GListGet("processed") + 1);
    }

    UO.Print("Recorded count: " + Convert.ToString(UO.GListGet("processed")));
    return null;
}

3. GListSet - 3 - clase de escenario

Parámetros y flujo de ejecución:

  • modo - cadena, límite - número 2. El modo selecciona la sucursal, el número limita el procesamiento a dos pasos.
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.GListClear();
        UO.GListSet("mode", "inspect");
        UO.GListSet("limit", 2);
        if (Truth(UO.GListGet("mode") == "inspect"))
        {
            for (int i = (int)(1); i <= UO.GListGet("limit"); i += (int)(1))
            {
                UO.Print("Inspect batch: " + Convert.ToString(i));
            }
        }

        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.GListSet(nameValue, value) — UO.GListSet(Any,Any)

Parámetros: nameValue (Any), value (Any)

Resultado: void / Unit.

Durante la llamada:

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

public void GListSet(InjectionValue nameValue, InjectionValue value)

        {

            string name = nameValue.ToString();

            int index = globalList.FindIndex(pair => pair.Key.Equals(name, StringComparison.OrdinalIgnoreCase));

            var entry = new KeyValuePair<string, InjectionValue>(name, value);

            if (index >= 0)

                globalList[index] = entry;

            else

                globalList.Add(entry);

        }

UO.GListSize

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

Firmas de C#

int UO.GListSize();

Cuenta las entradas con nombre en una lista temporal para comprobar si están vacías o limitar la fuerza bruta.

Parámetros

No hay parámetros.

Valor devuelto

int >= 0: la cantidad de nombres únicos, no la cantidad de elementos o unidades en las pilas.

Comportamiento

  • La lista pertenece a la instancia de tiempo de ejecución. Otras ejecuciones de scripts tienen sus propias listas. GList no es un almacenamiento compartido entre perfiles; Estos comandos no escriben un archivo y no ingresan a un estado de perfil guardado. El nuevo tiempo de ejecución obtiene una lista vacía. Tampoco es var/declaración de variable ni UO.SetGlobal.
  • El nuevo nombre se añade al final. La repetición de un nombre que no distingue entre mayúsculas y minúsculas reemplaza el significado y la ortografía del nombre en su lugar original. La lectura no borra nada. No puede borrar ni agregar registros en medio de una búsqueda si necesita índices estables.
  • Las operaciones son locales: sin paquetes, sin búsquedas de objetos, sin latencia. Set/Get busca el nombre de forma secuencial; para conjuntos más grandes utilice el Diccionario. No existe un comando independiente para eliminar una clave de esta familia; Borrar borra todas las entradas.

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

1. GListSize - 1 - guión directo

Parámetros y flujo de ejecución:

  • Un conjunto vacío detiene el procedimiento antes de que se procesen las reglas.
UO.GListClear();
if (Truth(UO.GListSize() == 0))
{
    UO.Print("No batch rules; stop here");
    return null;
}

bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

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

Parámetros y flujo de ejecución:

  • Las dos reglas se repiten sobre los índices 0 y 1; la condición i < Tamaño no permite el acceso al índice 2.
return  RunScenario();
 object? RunScenario()
{
    UO.GListClear();
    UO.GListSet("bandage", 0x0E21);
    UO.GListSet("gold", 0x0EED);
    var i = 0;
    while (Truth(i < UO.GListSize()))
    {
        var name = UO.GListPosName(i);
        var graphic = UO.GListPosValue(i);
        UO.Print(name + " | graphic: " + Convert.ToString(graphic));
        i = i + 1;
    }

    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. GListSize - 3 - clase de escenario

Parámetros y flujo de ejecución:

  • La sustitución BANDAGE no aumenta el número de nombres; antes y después El tamaño es 2.
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.GListClear();
        UO.GListSet("bandage", 0x0E21);
        UO.GListSet("gold", 0x0EED);
        var before = UO.GListSize();
        UO.GListSet("BANDAGE", 0x0E21);
        if (Truth(UO.GListSize() == before))
        {
            UO.Print("Existing rule updated without an extra entry");
        }

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

Parámetros: Sin parámetros.

Resultado: int / Integer.

Durante la llamada:

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

public int GListSize() => globalList.Count;

UO.GetEasyUO

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

Firmas de C#

string UO.GetEasyUO(object? number);

Lee una cadena del registro de Windows del usuario EasyUO.

Parámetros

  • number es el int/valor que será convertido por NumberConversions.ToInt. Forma el valor del registro de nombres decimales.

Valor devuelto

string — valor HKCU\Software\EasyUO<número>; si no está presente, se marca el nombre *<número>. Si falta la clave/valor o está fuera de Windows, se devuelve una cadena vacía.

Comportamiento

  • La lectura no crea una clave ni accede al mundo del juego. La interfaz de registro heredada es diferente de GetGlobal. El error de acceso al registro del sistema puede extenderse; no hay cierre separado en el puente.

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

1. Leer entrada 1 - guión directo

Parámetros y flujo de ejecución:

  • El nombre se lee primero 1, luego *1.
var value = UO.GetEasyUO(1);
UO.Print(value);

2. Comprobar si hay resultados vacíos: función de script

Parámetros y flujo de ejecución:

  • Una cadena vacía puede no tener valor o contener texto vacío almacenado.
return  RunScenario();
 object? RunScenario()
{
    var value = UO.GetEasyUO(999);
    if (Truth(Len(value) == 0))
    {
        UO.Print("empty");
    }

    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. Número guardado - clase de script

Parámetros y flujo de ejecución:

  • El número define el valor del registro, no el serial del objeto.
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 number = 2;
        var value = UO.GetEasyUO(number);
        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.GetEasyUO(number) — UO.GetEasyUO(Any)

Parámetros: number (Any)

Resultado: string / String.

Durante la llamada:

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

public string GetEasyUO(InjectionValue number) => bridge.GetEasyUO(NumberConversions.ToInt(number));

UO.GetGlobal

Firmas C#

string UO.GetGlobal(object? name);
dynamic UO.GetGlobal(object? globalRegion, object? varName);

Comportamiento y resultado

SetGlobal y GetGlobal comparten valores entre todos los scripts, perfiles y procesos Full Client/Client. Los valores son cadenas; una clave ausente devuelve "N/A". Se distingue mayúsculas; las formas region usan region/name. Manager/Game Manager/CSharp/globals.json persiste y se relee bajo bloqueo entre procesos. Las formas Shared usan el mismo almacén.

Parámetros

  • globalRegion — Espacio de nombres combinado con la clave.
  • name — Nombre de clave compartida que distingue mayúsculas.
  • varName — Nombre de clave compartida que distingue mayúsculas.

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

Comandos del chat

#getglobal team.target
#get global team.message

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 value = UO.GetGlobal("team.target");
UO.Print(value);

2

string value = UO.GetGlobal("team.delay");
if (int.TryParse(value, out int milliseconds))
    UO.Print(milliseconds.ToString());

3

UO.Print(Convert.ToString(UO.GetGlobal("team", "delay")));

4

new CommandSample().Execute(UO);

sealed class CommandSample
{
    public void Execute(global::ClassicUO.CSharp.CSharpGameApi api)
    {
        string value = api.GetGlobal("team.target");
        api.Print(value);
    }
}

Llamadas internas

CSharpGameApi.GetGlobal
  -> CSharpScriptGlobals
  -> InjectionScript.Runtime.InjectionApiUO.RegisterClientApiCompatibility
  -> InjectionScript.Runtime.State.Globals.GetGlobal
Globals -> SharedGlobalStore -> named mutex -> atomic JSON replacement


UO.GetProfile

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

Firmas de C#

string UO.GetProfile(object? serial);

Lee la descripción del carácter público que envía el servidor para la ventana Perfil. Útil para leer notas o buscar texto en la descripción del personaje seleccionado. Estas no son configuraciones de perfil de administrador.

Parámetros

  • serial — Serie de caracteres: un número, una cadena con ID 0x... o un selector de objetos como "self" o "lasttarget". Este no es un tipo de cuerpo, un nombre de archivo ni un perfil de administrador.

Valor devuelto

string — texto de la descripción principal, sin título ni firma. La descripción vacía es legal; También es posible obtener un resultado en blanco si no hay respuesta en 3 segundos. Esto no es true/false. Se envía una solicitud en cada llamada; si la descripción ya está guardada en la sesión, se devuelve inmediatamente, incluido un borrador de la ventana abierta. Esto no es garantía de una nueva respuesta del servidor.

Comportamiento

  • La descripción y su borrador pertenecen a la sesión. Cerrar la ventana del juego los guarda sin publicarlos, abrirlos restaura la ventana de Perfil. Al cerrar explícitamente su propio perfil, se envía el texto modificado una vez; el texto de otra persona no se envía. La nueva respuesta del servidor reemplaza los datos antiguos; desconectar la conexión los borra. GetProfile no edita nada por sí mismo.

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

1. Aplicación directa - guión directo

Parámetros y flujo de ejecución:

  • "self" - descripción de tu personaje; no configuración de cuenta. Se muestra el texto recibido del servidor o ya guardado en la sesión.
var note = UO.GetProfile("self");
if (Truth(note != ""))
{
    UO.Print(note);
}

bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

2. Condición de juego - función de escenario

Parámetros y flujo de ejecución:

  • Requiere lasttarget existente. FindText busca la palabra "Sanador" que distingue entre mayúsculas y minúsculas en texto libre. Si hay una coincidencia, AddObject guarda el serial seleccionado con el nombre healerNote. Esta es una nota de usuario, no una prueba de profesión NPC.
return  RunScenario();
 object? RunScenario()
{
    if (!(Truth(UO.Exists("lasttarget"))))
    {
        return null;
    }

    var note = UO.GetProfile("lasttarget");
    if (Truth(FindText(note, "Healer") > 0))
    {
        UO.AddObject("healerNote", "lasttarget");
    }

    return null;
}

bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
int FindText(object? text, object? value) => (Convert.ToString(text) ?? "").IndexOf(Convert.ToString(value) ?? "", StringComparison.Ordinal) + 1;
int FindText(int start, object? text, object? value)
{
    string input = Convert.ToString(text) ?? "";
    return input.IndexOf(Convert.ToString(value) ?? "", Math.Clamp(start - 1, 0, input.Length), StringComparison.Ordinal) + 1;
}

3. Función auxiliar completa: clase de script

Parámetros y flujo de ejecución:

  • La función completa HasPublicNote se detalla a continuación. Prueba la existencia de un objeto y una subcadena y devuelve true/false. "Gremio" - texto de demostración; una respuesta vacía no confirma la ausencia de dicho registro 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()
    {
        if (Truth(HasPublicNote("lasttarget", "Guild")))
        {
            UO.AddObject("guildNote", "lasttarget");
        }

        return null;
    }

    dynamic HasPublicNote(dynamic serial, dynamic phrase)
    {
        if (!(Truth(UO.Exists(serial))))
        {
            return false;
        }

        return FindText(UO.GetProfile(serial), phrase) > 0;
    }

    bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
    int FindText(object? text, object? value) => (Convert.ToString(text) ?? "").IndexOf(Convert.ToString(value) ?? "", StringComparison.Ordinal) + 1;
    int FindText(int start, object? text, object? value)
    {
        string input = Convert.ToString(text) ?? "";
        return input.IndexOf(Convert.ToString(value) ?? "", Math.Clamp(start - 1, 0, input.Length), StringComparison.Ordinal) + 1;
    }
}

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.GetProfile(serial) — UO.GetProfile(Any)

Parámetros: serial (Any)

Resultado: string / String.

Durante la llamada:

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

public string GetProfile(InjectionValue serial) => bridge.GetProfile(GetObject(serial));

UO.LoadHotkeys

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

Firmas de C#

void UO.LoadHotkeys();

Carga macros y teclas de acceso rápido guardadas.

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

  • LoadHotkeys llama a _world.Macros.Load mediante Invoke. La tabla de macros actual se reemplaza con datos de perfil local.
  • 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.LoadHotkeys");
UO.LoadHotkeys();

1. Llamada directa - guión directo

Parámetros y flujo de ejecución:

  • Carga macros y teclas de acceso rápido guardadas.
UO.LoadHotkeys();

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

Parámetros y flujo de ejecución:

  • LoadHotkeys llama a _world.Macros.Load mediante Invoke. La tabla de macros actual se reemplaza con datos de perfil local.
return  RunScenario();
 object? RunScenario()
{
    UO.Print(UO.ProfileName());
    UO.LoadHotkeys();
    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.LoadHotkeys();
        UO.Print("Macros loaded");
        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.LoadHotkeys() — UO.LoadHotkeys()

Parámetros: Sin parámetros.

Resultado: void / Unit.

Durante la llamada:

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

case "loadhotkeys": bridge.LoadHotkeys(); break;

UO.ProfileName

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

Firmas de C#

dynamic UO.ProfileName();

Lee el nombre del perfil actual.

Parámetros

No hay parámetros.

Valor devuelto

string — texto del campo puente.ProfileName; 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.ProfileName 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.ProfileName();
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 perfil actual.
var value = UO.ProfileName();
UO.Print(value);

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

Parámetros y flujo de ejecución:

  • ExecuteClientApiCompatibility devuelve el puente.ProfileName sin cambiar el perfil o la selección del servidor.
return  RunScenario();
 object? RunScenario()
{
    var value = UO.ProfileName();
    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.ProfileName();
        UO.Wait(500);
        var after = UO.ProfileName();
        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.ProfileName() — UO.ProfileName()

Parámetros: Sin parámetros.

Resultado: dynamic / Any.

Durante la llamada:

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

case "profilename": return new InjectionValue(bridge.ProfileName);

UO.ProfileShardName

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

Firmas de C#

dynamic UO.ProfileShardName();

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.ProfileShardName();
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.ProfileShardName();
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.ProfileShardName();
    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.ProfileShardName();
        UO.Wait(500);
        var after = UO.ProfileShardName();
        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.ProfileShardName() — UO.ProfileShardName()

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

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

Firmas de C#

void UO.ReqProfile();
void UO.ReqProfile(object? mobile);

Imprime el texto del perfil conocido del personaje.

Parámetros

  • mobile - Opcional serial/alias. Sin argumento - "lasttarget". Este no es un perfil de configuración local ClassicUO.

Valor devuelto

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

Comportamiento

  • ExecuteLegacyManualAlias llama a GetProfile, luego SystemMessage. Bridge.GetProfile envía RequestProfile, luego hasta 3 segundos verifica CharacterPanels.Profile.CurrentText con pausas 25 ms. El texto ya existente se puede devolver inmediatamente; con el tiempo de espera, muestra un mensaje y muestra una línea vacía. Este comando imprime el texto pero no lo devuelve.
  • Para el valor de string utilice UO.GetProfile. La presencia de texto no es prueba de un cambio de nombre exitoso o del estado del personaje.

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

1. Llamada directa - guión directo

Parámetros y flujo de ejecución:

  • Imprime el texto del perfil conocido del personaje.
UO.ReqProfile();

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

Parámetros y flujo de ejecución:

  • ExecuteLegacyManualAlias llama a GetProfile, luego SystemMessage. Bridge.GetProfile envía RequestProfile, luego hasta 3 segundos verifica CharacterPanels.Profile.CurrentText con pausas 25 ms. El texto ya existente se puede devolver inmediatamente; con el tiempo de espera, muestra un mensaje y muestra una línea vacía. Este comando imprime el texto pero no lo devuelve.
return  RunScenario();
 object? RunScenario()
{
    UO.ReqProfile("self");
    return null;
}

3. Función auxiliar completa: clase de script

Parámetros y flujo de ejecución:

  • Para el valor de string utilice UO.GetProfile. La presencia de texto no es prueba de un cambio de nombre exitoso o del estado del personaje.
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.GetSerial("lasttarget");
        if (Truth(UO.Exists(id)))
        {
            UO.ReqProfile(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.ReqProfile() — UO.ReqProfile()

Parámetros: Sin parámetros.

Resultado: void / Unit.

Durante la llamada:

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

case "reqprofile":

                    SystemMessage(GetProfile(arguments.Length > 0 ? arguments[0] : new InjectionValue("lasttarget")));

                    break;

UO.ReqProfile(mobile) — UO.ReqProfile(Any)

Parámetros: mobile (Any)

Resultado: void / Unit.

Durante la llamada:

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

case "reqprofile":

                    SystemMessage(GetProfile(arguments.Length > 0 ? arguments[0] : new InjectionValue("lasttarget")));

                    break;

UO.ResetProfile

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

Firmas de C#

void UO.ResetProfile();

Restablece el perfil activo a los valores predeterminados.

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

  • ResetProfile llama a ProfileManager.ResetCurrentProfileToDefault; si no hay ningún perfil activo, se muestra un error. Cambia la configuración local, por lo que los valores de usuario guardados pueden perderse.
  • 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.ResetProfile");
UO.ResetProfile();

1. Llamada directa - guión directo

Parámetros y flujo de ejecución:

  • Restablece el perfil activo a los valores predeterminados.
UO.ResetProfile();

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

Parámetros y flujo de ejecución:

  • ResetProfile llama a ProfileManager.ResetCurrentProfileToDefault; si no hay ningún perfil activo, se muestra un error. Cambia la configuración local, por lo que los valores de usuario guardados pueden perderse.
return  RunScenario();
 object? RunScenario()
{
    UO.Print(UO.ProfileName());
    UO.ResetProfile();
    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.ResetProfile();
        UO.SaveConfig();
        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.ResetProfile() — UO.ResetProfile()

Parámetros: Sin parámetros.

Resultado: void / Unit.

Durante la llamada:

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

case "resetprofile": bridge.ResetProfile(); break;

UO.SaveConfig

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

Firmas de C#

void UO.SaveConfig();

Guarda el perfil ClassicUO actual.

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

  • SaveConfig llama a ProfileManager.SaveCurrentProfile a través de Invocar. El comando escribe la configuración del perfil local; el camino se toma desde ProfileManager.
  • 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.SaveConfig");
UO.SaveConfig();

1. Llamada directa - guión directo

Parámetros y flujo de ejecución:

  • Guarda el perfil ClassicUO actual.
UO.SaveConfig();

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

Parámetros y flujo de ejecución:

  • SaveConfig llama a ProfileManager.SaveCurrentProfile a través de Invocar. El comando escribe la configuración del perfil local; el camino se toma desde ProfileManager.
return  RunScenario();
 object? RunScenario()
{
    UO.Print(UO.ProfileName());
    UO.SaveConfig();
    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.SaveConfig();
        UO.Print(UO.ShardPath());
        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.SaveConfig() — UO.SaveConfig()

Parámetros: Sin parámetros.

Resultado: void / Unit.

Durante la llamada:

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

public void SaveConfig() => bridge.SaveConfig();

UO.SaveHotkeys

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

Firmas de C#

void UO.SaveHotkeys();

Guarda macros y teclas de acceso rápido.

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

  • SaveHotkeys llama a _world.Macros.Save mediante Invoke. Se guarda la tabla de macros local del perfil actual.
  • 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.SaveHotkeys");
UO.SaveHotkeys();

1. Llamada directa - guión directo

Parámetros y flujo de ejecución:

  • Guarda macros y teclas de acceso rápido.
UO.SaveHotkeys();

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

Parámetros y flujo de ejecución:

  • SaveHotkeys llama a _world.Macros.Save mediante Invoke. Se guarda la tabla de macros local del perfil actual.
return  RunScenario();
 object? RunScenario()
{
    UO.Print(UO.ProfileName());
    UO.SaveHotkeys();
    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.SaveHotkeys();
        UO.LoadHotkeys();
        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.SaveHotkeys() — UO.SaveHotkeys()

Parámetros: Sin parámetros.

Resultado: void / Unit.

Durante la llamada:

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

case "savehotkeys": bridge.SaveHotkeys(); break;

UO.Set

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

Firmas de C#

void UO.Set(object? name, object? value);

Cambia una de las tres configuraciones heredadas.

Parámetros

  • name — Cadena que no distingue entre mayúsculas y minúsculas: "finddistance", "grabdelay" o "equipfordress". El nombre desconocido se ignora silenciosamente.
  • value — int o double/0x-text. Para la forma de cadena TryStr2Int; El texto incorrecto se convierte en 0, no en un error.

Valor devuelto

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

Comportamiento

  • puente de llamadas de distancia.SetFindDistance, puente de llamadas de retardo.SetGrabDelay, equipofordress asigna estado.UseEquipForDress. Estas son tres configuraciones separadas; No existe un fijador universal para propiedades arbitrarias.
  • El valor de la cadena se convierte primero a TryStr2Int con fallback=0. Por lo tanto, un error tipográfico puede escribir 0 en la configuración reconocida. Set no busca objetos y no se cambia de ropa.

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.Set");
UO.Set("finddistance", 10);

1. Llamada directa - guión directo

Parámetros y flujo de ejecución:

  • Cambia una de las tres configuraciones heredadas.
UO.Set("finddistance", 10);

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

Parámetros y flujo de ejecución:

  • puente de llamadas de distancia.SetFindDistance, puente de llamadas de retardo.SetGrabDelay, equipofordress asigna estado.UseEquipForDress. Estas son tres configuraciones separadas; No existe un fijador universal para propiedades arbitrarias.
return  RunScenario();
 object? RunScenario()
{
    UO.Set("grabdelay", "250");
    return null;
}

3. Función auxiliar completa: clase de script

Parámetros y flujo de ejecución:

  • El valor de la cadena se convierte primero a TryStr2Int con fallback=0. Por lo tanto, un error tipográfico puede escribir 0 en la configuración reconocida. Set no busca objetos y no se cambia de ropa.
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.Set("equipfordress", 1);
        UO.Print(UO.FindDistance());
        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.Set(name, value) — UO.Set(String,Integer)

Parámetros: name (String), value (Integer/String)

Resultado: void / Unit.

Durante la llamada:

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

public void Set(string name, int value)

        {

            if (name.Equals("finddistance", StringComparison.OrdinalIgnoreCase))

            {

                bridge.SetFindDistance(value);

            }

            else if (name.Equals("grabdelay", StringComparison.OrdinalIgnoreCase))

            {

                bridge.SetGrabDelay(value);

            }

            else if (name.Equals("equipfordress", StringComparison.OrdinalIgnoreCase))

            {

                state.UseEquipForDress = value;

            }

        }

UO.Set(name, value) — UO.Set(String,String)

Parámetros: name (String), value (Integer/String)

Resultado: void / Unit.

Durante la llamada:

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

public void Set(string name, string valueStr)

        {

            int valueInt = NumberConversions.TryStr2Int(valueStr, out var value) ? value : 0;

            Set(name, valueInt);

        }

UO.SetDefault

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

Firmas de C#

void UO.SetDefault(object? name, object? @object);

Guarda el alias serial nombrado en el estado de tiempo de ejecución.

Parámetros

  • name: alias del nombre como texto, el caso maneja el diccionario de objetos.
  • object — Serie/alias vía Arg/GetObject. El nombre y el serial vienen en ese orden.

Valor devuelto

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

Comportamiento

  • ExecuteLegacyManualAlias llama a state.Objects.Set(Text(0),Arg(1)). No hay opción interactiva; No se comprueba la existencia de serial.
  • Se trata de registrar el nombre del objeto, no de restablecer el perfil ni de cambiar todas las configuraciones a los valores predeterminados. En llamadas posteriores, el alias se resuelve nuevamente.
  • En un host de cliente normal, estos datos de estado se toman del administrador GetPersistentState y son comunes a los scripts/chat/macros del mismo mundo/perfil, y no pertenecen a un solo script. Otro proceso o un InjectionRuntimeState aparentemente separado tiene un estado diferente. Cargar/borrar un perfil puede reemplazarlo; guardados serial todavía se comparan con el mundo cargado.

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.SetDefault");
UO.SetDefault("manualObject", UO.Self());

1. Llamada directa - guión directo

Parámetros y flujo de ejecución:

  • Guarda el alias serial nombrado en el estado de tiempo de ejecución.
UO.SetDefault("manualObject", UO.Self());

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

Parámetros y flujo de ejecución:

  • ExecuteLegacyManualAlias llama a state.Objects.Set(Text(0),Arg(1)). No hay opción interactiva; No se comprueba la existencia de serial.
return  RunScenario();
 object? RunScenario()
{
    UO.SetDefault("manualBag", UO.Backpack());
    UO.Print(UO.GetSerial("manualBag"));
    return null;
}

3. Función auxiliar completa: clase de script

Parámetros y flujo de ejecución:

  • Se trata de registrar el nombre del objeto, no de restablecer el perfil ni de cambiar todas las configuraciones a los valores predeterminados. En llamadas posteriores, el alias se resuelve nuevamente.
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.GetSerial("lasttarget");
        if (Truth(UO.Exists(id)))
        {
            UO.SetDefault("manualTarget", id);
            UO.Print(UO.GetName("manualTarget"));
        }

        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.SetDefault(name, object) — UO.SetDefault(Any,Any)

Parámetros: name (Any), object (Any)

Resultado: void / Unit.

Durante la llamada:

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

case "setdefault":

                    if (arguments.Length > 1) state.Objects.Set(Text(0), Arg(1));

                    break;

UO.SetEasyUO

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

Firmas de C#

void UO.SetEasyUO(object? number, object? value);

Escribe un valor de cadena en el registro de Windows EasyUO.

Parámetros

  • number: número de valor int, formato double sin prefijo *.
  • value — Texto a través de ToString; guardado como transmitido.

Valor devuelto

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

Comportamiento

  • En Windows, abre/crea HKCU\Software\EasyUO con permiso de escritura, SetValue(decimalNumber,valor,RegistryValueKind.string). En otros sistemas operativos muestra un mensaje y no lo graba.
  • Esta es una entrada externa permanente en el registro del usuario actual, sin alcance del tiempo de ejecución global ni del serial del juego. Esta función no oculta los errores de acceso al registro.

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.SetEasyUO");
UO.SetEasyUO(9001, "manual-example");

1. Llamada directa - guión directo

Parámetros y flujo de ejecución:

  • Escribe un valor de cadena en el registro de Windows EasyUO.
UO.SetEasyUO(9001, "manual-example");

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

Parámetros y flujo de ejecución:

  • En Windows, abre/crea HKCU\Software\EasyUO con permiso de escritura, SetValue(decimalNumber,valor,RegistryValueKind.String). En otros sistemas operativos muestra un mensaje y no lo graba.
return  RunScenario();
 object? RunScenario()
{
    UO.SetEasyUO(9001, "");
    return null;
}

3. Función auxiliar completa: clase de script

Parámetros y flujo de ejecución:

  • Esta es una entrada externa permanente en el registro del usuario actual, sin alcance del tiempo de ejecución global ni del serial del juego. Esta función no oculta los errores de acceso al registro.
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.SetEasyUO(9001, "manual-example");
        UO.Print(UO.GetEasyUO(9001));
        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.SetEasyUO(number, value) — UO.SetEasyUO(Any,Any)

Parámetros: number (Any), value (Any)

Resultado: void / Unit.

Durante la llamada:

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

public void SetEasyUO(InjectionValue number, InjectionValue value)

            => bridge.SetEasyUO(NumberConversions.ToInt(number), value.ToString());

UO.SetGlobal

Firmas C#

void UO.SetGlobal(object? name, object? value);
void UO.SetGlobal(object? globalRegion, object? varName, object? varValue);

Comportamiento y resultado

SetGlobal y GetGlobal comparten valores entre todos los scripts, perfiles y procesos Full Client/Client. Los valores son cadenas; una clave ausente devuelve "N/A". Se distingue mayúsculas; las formas region usan region/name. Manager/Game Manager/CSharp/globals.json persiste y se relee bajo bloqueo entre procesos. Las formas Shared usan el mismo almacén.

Parámetros

  • globalRegion — Espacio de nombres combinado con la clave.
  • name — Nombre de clave compartida que distingue mayúsculas.
  • value — Valor guardado como texto.
  • varName — Nombre de clave compartida que distingue mayúsculas.
  • varValue — Valor guardado como texto.

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

Comandos del chat

#setglobal team.target 0x40001234
#set global team.message Привіт усім

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.SetGlobal("team.target", 0x40001234);
UO.Print(UO.GetGlobal("team.target"));

2

UO.SetGlobal("team.message", "Привіт");
UO.Print(UO.GetGlobal("team.message"));

3

UO.SetGlobal("team", "delay", "350");
UO.Print(Convert.ToString(UO.GetGlobal("team", "delay")));

4

new CommandSample().Execute(UO);

sealed class CommandSample
{
    public void Execute(global::ClassicUO.CSharp.CSharpGameApi api)
    {
        api.SetGlobal("team.target", 0x40001234);
        api.Print(api.GetGlobal("team.target"));
    }
}

Llamadas internas

CSharpGameApi.SetGlobal
  -> CSharpScriptGlobals
  -> InjectionScript.Runtime.InjectionApiUO.RegisterClientApiCompatibility
  -> InjectionScript.Runtime.State.Globals.SetGlobal
Globals -> SharedGlobalStore -> named mutex -> atomic JSON replacement


UO.SetMulPath

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

Firmas de C#

void UO.SetMulPath(object? pathValue);

Guarda la cadena de ruta mulPath en tiempo de ejecución.

Parámetros

  • pathValue — Texto a través de ToString; guardado como transmitido.

Valor devuelto

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

Comportamiento

  • Asigna mulPath = ToString o la cadena vacía. El archivo no se abre, los datos del mapa no se recargan y esta función no verifica la disponibilidad de la ruta.
  • Este es el almacenamiento de compatibilidad del tiempo de ejecución actual. No hay consumidores en el proyecto privado mulPath/showZ; el cambio no recarga los recursos ni cambia la visualización de la altura.

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.SetMulPath");
UO.SetMulPath("C:\\Ultima Online");

1. Llamada directa - guión directo

Parámetros y flujo de ejecución:

  • Guarda la cadena de ruta mulPath en tiempo de ejecución.
UO.SetMulPath("C:\\Ultima Online");

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

Parámetros y flujo de ejecución:

  • Asigna mulPath = ToString o la cadena vacía. El archivo no se abre, los datos del mapa no se recargan y esta función no verifica la disponibilidad de la ruta.
return  RunScenario();
 object? RunScenario()
{
    UO.SetMulPath("");
    return null;
}

3. Función auxiliar completa: clase de script

Parámetros y flujo de ejecución:

  • Este es el almacenamiento de compatibilidad del tiempo de ejecución actual. No hay consumidores en el proyecto privado mulPath/showZ; el cambio no recarga los recursos ni cambia la visualización de la altura.
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()
    {
        ApplyValue("C:\\Ultima Online");
        return null;
    }

    void ApplyValue(dynamic value)
    {
        UO.SetMulPath(value);
    }
}

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.SetMulPath(pathValue) — UO.SetMulPath(Any)

Parámetros: pathValue (Any)

Resultado: void / Unit.

Durante la llamada:

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

public void SetMulPath(InjectionValue pathValue) => mulPath = pathValue.ToString() ?? string.Empty;

Clone this wiki locally