Skip to content

ES UO Topic character Part 3

Codex edited this page Oct 12, 2026 · 3 revisions

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

Personaje — 3

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

Partes de la referencia

1 · 2 · 3 · 4 · 5

Referencia completa de comandos


UO.GetSex

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

Firmas de C#

int UO.GetSex();

Lee el código de género y raza del modelo del cliente.

Parámetros

No hay parámetros.

Valor devuelto

int - código compatible: 0=hombre humano, 1=mujer humana, 2=hombre elfo, 3=mujer elfo, 4=hombre gárgola, 5=mujer gárgola. Sin carácter también 0, así que verifique la disponibilidad de Exists(self). Esta no es una simple hembra bool.

Comportamiento

  • Se leen los datos locales ya recibidos. La solicitud no abre el estado y no obliga al servidor a enviar una actualización. Después de la muerte, la transición del mapa o la eliminación de un objeto, los valores pueden cambiar entre dos llamadas.
  • 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.

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

1. Muestra el valor actual de tu personaje - script directo

Parámetros y flujo de ejecución:

  • La llamada sin argumentos hace referencia a self. El código de género y raza se almacena en valor.
  • Convertir.ToString convierte el número que se generará y no cambia el significado del resultado.
var value = UO.GetSex();
UO.Print("GetSex: " + Convert.ToString(value));

2. Usar valor en la validación de la aplicación: función de secuencia de comandos

Parámetros y flujo de ejecución:

  • El valor se lee una vez sin ningún argumento. El código de género y raza se utiliza en el cálculo o condición que se muestra.
  • Los umbrales numéricos son ejemplos de condiciones de script y no de límites de nuevos clientes. El campo almacena las unidades de servidor y las restricciones descritas anteriormente.
return  RunScenario();
 object? RunScenario()
{
    var value = UO.GetSex();
    if (Truth(value == 4) || Truth(value == 5))
    {
        UO.Print("Gargoyle sex/race code");
    }

    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. Mira el cambio en un segundo - clase de guión

Parámetros y flujo de ejecución:

  • Ambas llamadas sin argumento leen su valor actual. UO.Wait(1000) da una pausa de milisegundos entre disparos.
  • Se compara el cambio: género y código racial. Un ejemplo no cambia nada en el mundo y no espera sin cesar. Es posible que se pierdan los eventos ocurridos dentro de este segundo.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

    async public Task<object?> RunScenarioAsync()
    {
        var before = UO.GetSex();
        await Delay(1000);
        var after = UO.GetSex();
        if (Truth(before != after))
        {
            UO.Print("Before: " + Convert.ToString(before) + "; after: " + Convert.ToString(after));
        }

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

Parámetros: Sin parámetros.

Resultado: int / Integer.

Durante la llamada:

La llamada ejecuta el delegate del controlador guardado. El método de registro crea ese delegate al construir la API.

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

() => bridge.Sex

Creación de API: Estas funciones registran la API. No se ejecutan de nuevo en cada llamada al comando.


UO.GetStam

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

Firmas de C#

int UO.GetStam();
dynamic UO.GetStam(object? objID);

Lee la resistencia actual del modelo local.

Parámetros

  • objID: objeto opcional en los formularios que se muestran: serial por número/cadena hexadecimal, self, lasttarget o nombre registrado AddObject. Esto no es type. Sin argumentos, lea self. El texto desconocido en algunos formularios provoca un error de conversión; Verifique el nombre antes de llamar.

Valor devuelto

int es el valor del campo Stamina, no un porcentaje o bool. 0 puede ser un valor real o una indicación de datos faltantes. El máximo cero no se puede utilizar como divisor. Para el mobile de otra persona, es posible que se desconozcan los significados. HP/HitsMax puede contener una escala relativa del servidor en lugar de puntos exactos. HP=0 no prueba la muerte; hay Dead/IsDead para esto.

Comportamiento

  • El comando no abre el estado y no solicita una actualización del servidor. El cliente sólo lee los datos ya cargados. No cambia características y no envía paquetes.
  • El resultado es una lectura separada. El mundo puede cambiar entre Exists y el próximo desafío; varias consultas no forman una instantánea atómica.
  • Al leer un objeto, World.Get rechaza el o IsDestroyed faltante y da como resultado 0. HP/HitsMax se leen de la Entidad, incluidos los elementos con estos campos; Mana/Stamina: solo para dispositivos móviles. Sin argumentos, lea self. La variante del mismo nombre sin parámetros no necesariamente tiene una variante con ID: ver firmas.
  • La lectura sin argumentos también devuelve 0 para un jugador perdido o destruido. Esto se aplica a Mana/Stamina directo y sus máximos, no solo a los formularios a través de World.Get. Un personaje muerto presente puede conservar valores.

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

1. Imprime el valor de tu personaje - guión directo

Parámetros y flujo de ejecución:

  • La llamada sin argumentos dice self. value almacena un número, Convert.ToString lo convierte solo para mensaje.
var value = UO.GetStam();
UO.Print("GetStam: " + Convert.ToString(value));

2. Aplicar valor en verificación o cálculo - función de script

Parámetros y flujo de ejecución:

  • Se muestra el umbral o cálculo aplicado para este campo. Los números en la condición son configuraciones de ejemplo, no límites del servidor. Antes de dividir por el máximo se comprueba su positividad.
return  RunScenario();
 object? RunScenario()
{
    var value = UO.GetStam();
    if (Truth(value < 15))
    {
        UO.Print("Known stamina is below the movement threshold of 15");
    }

    return null;
}

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

3. Función auxiliar completa ReadValue - Clase de script

Parámetros y flujo de ejecución:

  • lasttarget — objeto previamente seleccionado; Exists comprueba la disponibilidad. obj es el único parámetro de ReadValue. La función devuelve el número de comando sin cambios y se proporciona en su totalidad.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        if (Truth(UO.Exists("lasttarget")))
        {
            var value = ReadValue("lasttarget");
            UO.Print("Selected value: " + Convert.ToString(value));
        }

        return null;
    }

    dynamic ReadValue(dynamic obj)
    {
        return UO.GetStam(obj);
    }

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

Parámetros: Sin parámetros.

Resultado: int / Integer.

Durante la llamada:

La llamada ejecuta el delegate del controlador guardado. El método de registro crea ese delegate al construir la API.

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

() => bridge.Stamina

Creación de API: Estas funciones registran la API. No se ejecutan de nuevo en cada llamada al comando.

UO.GetStam(objID) — UO.GetStam(Any)

Parámetros: objID (Any)

Resultado: dynamic / Any.

Durante la llamada:

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

case "getstam": return new InjectionValue(arguments.Length > 0 ? bridge.GetStamina(Arg(0)) : bridge.Stamina);

UO.GetStamina

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

Firmas de C#

int UO.GetStamina();

Lee la resistencia actual del modelo local.

Parámetros

No hay parámetros.

Valor devuelto

int es el valor del campo Stamina, no un porcentaje o bool. 0 puede ser un valor real o una indicación de datos faltantes. El máximo cero no se puede utilizar como divisor. Para el mobile de otra persona, es posible que se desconozcan los significados. HP/HitsMax puede contener una escala relativa del servidor en lugar de puntos exactos. HP=0 no prueba la muerte; hay Dead/IsDead para esto.

Comportamiento

  • El comando no abre el estado y no solicita una actualización del servidor. El cliente sólo lee los datos ya cargados. No cambia características y no envía paquetes.
  • El resultado es una lectura separada. El mundo puede cambiar entre Exists y el próximo desafío; varias consultas no forman una instantánea atómica.
  • Al leer un objeto, World.Get rechaza el o IsDestroyed faltante y da como resultado 0. HP/HitsMax se leen de la Entidad, incluidos los elementos con estos campos; Mana/Stamina: solo para dispositivos móviles. Sin argumentos, lea self. La variante del mismo nombre sin parámetros no necesariamente tiene una variante con ID: ver firmas.
  • La lectura sin argumentos también devuelve 0 para un jugador perdido o destruido. Esto se aplica a Mana/Stamina directo y sus máximos, no solo a los formularios a través de World.Get. Un personaje muerto presente puede conservar valores.

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

1. Imprime el valor de tu personaje - guión directo

Parámetros y flujo de ejecución:

  • La llamada sin argumentos dice self. value almacena un número, Convert.ToString lo convierte solo para mensaje.
var value = UO.GetStamina();
UO.Print("GetStamina: " + Convert.ToString(value));

2. Aplicar valor en verificación o cálculo - función de script

Parámetros y flujo de ejecución:

  • Se muestra el umbral o cálculo aplicado para este campo. Los números en la condición son configuraciones de ejemplo, no límites del servidor. Antes de dividir por el máximo se comprueba su positividad.
return  RunScenario();
 object? RunScenario()
{
    var value = UO.GetStamina();
    if (Truth(value < 15))
    {
        UO.Print("Known stamina is below the movement threshold of 15");
    }

    return null;
}

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

3. Función auxiliar completa ReadValue - Clase de script

Parámetros y flujo de ejecución:

  • Este nombre no tiene forma con ID. ReadValue sin parámetros lee self; las dos llamadas están separadas por UO.Wait(1000). La comparación de dos instantáneas puede pasar por alto cambios intermedios.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

    async public Task<object?> RunScenarioAsync()
    {
        var before = ReadValue();
        await Delay(1000);
        var after = ReadValue();
        UO.Print("Before: " + Convert.ToString(before) + "; after: " + Convert.ToString(after));
        return null;
    }

    dynamic ReadValue()
    {
        return UO.GetStamina();
    }

    Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
}

Implementación del comando

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

UO.GetStamina() — UO.GetStamina()

Parámetros: Sin parámetros.

Resultado: int / Integer.

Durante la llamada:

La llamada ejecuta el delegate del controlador guardado. El método de registro crea ese delegate al construir la API.

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

() => bridge.Stamina

Creación de API: Estas funciones registran la API. No se ejecutan de nuevo en cada llamada al comando.


UO.GetStatLockState

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

Firmas de C#

int UO.GetStatLockState(object? statNum);

Lee el modo de cambio de característica local.

Parámetros

  • statNum - Número de característica obligatoria: 0 - Convertir.ToString, 1 - DEX, 2 - INT. Este no es su valor actual ni el nombre de la cadena.

Valor devuelto

int: 0 - aumentar, 1 - disminuir, 2 - bloquear. Este es un código de modo, no true/false. Para un número fuera de 0..2 devuelve −1. Si falta el carácter, se devuelve un número válido 0 de forma predeterminada; esto no es una confirmación del estado del servidor.

Comportamiento

  • La lectura se realiza mediante Invoke en el hilo del juego en función de los datos ya recibidos; Los paquetes de red no se envían. La habilidad no se utiliza ni se entrena. Dos solicitudes, dos instantáneas separadas.
  • Número de característica obligatoria: 0 - Convertir.ToString, 1 - DEX, 2 - INT. Este no es su valor actual ni el nombre de la cadena.
  • ExecuteClientApiCompatibility selecciona la rama de comando. El texto lee el selector de habilidades, Arg lee los números y modos numéricos. Un argumento no convertible puede fallar en la llamada con un error de conversión.

Scripts independientes de C#

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

Ejemplo sencillo

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

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

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

1. Lectura y salida: guión directo

Parámetros y flujo de ejecución:

  • En el ejemplo, el selector y, al grabar, el modo se especifican explícitamente. La primera línea selecciona una habilidad por nombre o una característica por número. Print solo muestra el resultado.
var selector = 0;
var mode = UO.GetStatLockState(selector);
UO.Print(Convert.ToString(mode));

2. Aplicar en condición o comparación - función de script

Parámetros y flujo de ejecución:

  • El umbral 95.1 y los modos 0/1/2 se dan como ejemplo. −1 se marca antes de cambiar de modo. Después de escribir, sólo se lee la copia local; no está esperando que el servidor responda.
return  RunScenario();
 object? RunScenario()
{
    var mode = UO.GetStatLockState(0);
    if (Truth(mode == 2))
    {
        UO.Print("Locked");
    }
    else
    {
        if (Truth(mode == -1))
        {
            UO.Print("Unknown selector");
        }
        else
        {
            UO.Print("Mode: " + Convert.ToString(mode));
        }
    }

    return null;
}

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

3. Función auxiliar completa: clase de script

Parámetros y flujo de ejecución:

  • Todo el código de ayuda se proporciona debajo de Principal. El selector selecciona una habilidad/característica, el modo establece el modo de grabación. ReadValue/ReadMode devuelve el número original; ApplyMode verifica los argumentos, realiza la acción y no devuelve ningún valor. UO.Wait(1000) en el ejemplo de lectura separa dos imágenes.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

    async public Task<object?> RunScenarioAsync()
    {
        var before = ReadMode(0);
        await Delay(1000);
        var after = ReadMode(0);
        UO.Print(Convert.ToString(before) + " -> " + Convert.ToString(after));
        return null;
    }

    dynamic ReadMode(dynamic selector)
    {
        return UO.GetStatLockState(selector);
    }

    Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
}

Implementación del comando

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

UO.GetStatLockState(statNum) — UO.GetStatLockState(Any)

Parámetros: statNum (Any)

Resultado: int / Integer.

Durante la llamada:

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

case "getstatlockstate": return new InjectionValue(bridge.GetStatLockState(Arg(0)));

UO.GetStatus

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

Firmas de C#

void UO.GetStatus(object? id);

Envía una solicitud al servidor para conocer el estado del mobile especificado.

Parámetros

  • id — Serie del objeto o nombre admitido de self/backpack/lasttarget/objeto guardado; Las cadenas numéricas y las cadenas 0x se resuelven en tiempo de ejecución.

Valor devuelto

void: sin valor de retorno.

Comportamiento

  • El formulario string resuelve el nombre mediante GetObject; La forma int representa serial directamente. Llamadas de puente GameActions.RequestMobileStatus(world,serial,true). El comando no devuelve datos y no espera una respuesta. Lea GetHP/GetMaxHP y otros captadores por separado después de la actualización mundial.

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

1. Solicitando estado propio - guión directo

Parámetros y flujo de ejecución:

  • Se envía una solicitud de estado sin esperar respuesta.
UO.GetStatus("self");

2. Consulta por serial - función de script

Parámetros y flujo de ejecución:

  • El formulario int envía la misma solicitud.
return  RunScenario();
 object? RunScenario()
{
    var id = UO.Self();
    UO.GetStatus(id);
    return null;
}

3. Lectura después de una pausa - clase de guión

Parámetros y flujo de ejecución:

  • Una pausa no garantiza una nueva respuesta; Los captadores devuelven el modelo local actual.
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.GetStatus("self");
        await Delay(500);
        UO.Print(Convert.ToString(UO.GetHP()) + "/" + Convert.ToString(UO.GetMaxHP()));
        return null;
    }

    Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
}

Implementación del comando

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

UO.GetStatus(id) — UO.GetStatus(Integer)

Parámetros: id (Integer/String)

Resultado: void / Unit.

Durante la llamada:

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

public void GetStatus(int id) => bridge.GetStatus(id);

UO.GetStatus(id) — UO.GetStatus(String)

Parámetros: id (Integer/String)

Resultado: void / Unit.

Durante la llamada:

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

public void GetStatus(string id) => GetStatus(GetObject(id));

UO.GetStr

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

Firmas de C#

int UO.GetStr();
int UO.GetStr(object? objID);

Lee la potencia actual (Strength, Str) del personaje.

Parámetros

  • objID: ObjID en el formato que se muestra únicamente, con un argumento: serial número de carácter, cadena decimal/0x hexadecimal, "self", "lasttarget" o nombre AddObject. Selecciona un objeto distinto de graphic/type. Sin argumento, se lee el carácter actual.

Valor devuelto

int — puntos de estadísticas actuales, 0...65535 en el modelo del cliente; no porcentaje, ID, habilidad, modo de bloqueo o bool. 0 también significa carácter faltante/eliminado u objeto inaccesible. Compare con el requisito numérico, no == true. Este no es un límite de estadísticas ni un valor base garantizado sin modificadores.

Comportamiento

  • Se admiten () para self y (ObjID) para un objeto explícito. No hay otros argumentos opcionales.
  • Lee Player.Strength si Player existe y no ha sido destruido; en caso contrario 0. Un personaje muerto presente no es un objeto eliminado. La estadística no se calcula a partir de HP, maná o resistencia.
  • GetStr/GetInt/GetDex acepta ObjID. Los datos de PlayerMobile solo están disponibles para self; para otro serial - 0, incluso para mobile cargado. Las características de otra persona no se sustituyen ni se adivinan.
  • Invoca lecturas en la transmisión del juego con la capacidad de cancelar la espera mediante script. No consulta el estado, no abre el destino, no envía un paquete, no cambia la característica y no agrega retraso.
  • Cada llamada lee los datos locales de nuevo. La variable almacena la instantánea; las lecturas individuales pueden recibir diferentes actualizaciones del servidor. Un resultado distinto de cero no prueba la conexión. Cero puede ser un valor o ningún dato.
  • 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.Str(), UO.Strength(), UO.GetStr(), UO.GetStrength().
  • ExecuteClientApiCompatibility.Arg primero resuelve el nombre del objeto y luego convierte el número. Una cadena no numérica desconocida provoca un error de conversión, no un destino. double se reduce a int, Array/void se reduce a 0. Para seleccionar un personaje, use el serial correcto, no tales transformaciones.

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

1. Leer y mostrar puntos: guión directo

Parámetros y flujo de ejecución:

  • el valor almacena el resultado numérico; Convertir.ToString simplemente lo formatea para la revista. No hay argumentos ni acciones de personajes.
var value = UO.GetStr();
UO.Print("Strength: " + Convert.ToString(value));

2. Comparar dos imágenes - función de script

Parámetros y flujo de ejecución:

  • antes y después separados 1000 ms; UO.Wait agregado al ejemplo. cambio=después-antes puede ser positivo, cero o negativo. Por sí solo, no distingue entre todas las actualizaciones intermedias y la salida del mundo.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var before = UO.GetStr();
    await Delay(1000);
    var after = UO.GetStr();
    var change = after - before;
    UO.Print("Change: " + Convert.ToString(change));
    return null;
}

Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));

3. Función de validación de requisitos completa: clase de secuencia de comandos

Parámetros y flujo de ejecución:

  • mínimo=80 es un ejemplo de requisito, no de límite de clientes. AttributeAtLeast(mínimo) rechaza el carácter faltante, lee la característica una vez y devuelve bool: true o false si >= mínimo. El significado lógico lo da la comparación, no la característica en sí.
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(Truth(AttributeAtLeast(80)) == true))
        {
            UO.Print("Requirement met");
        }
        else
        {
            UO.Print("Requirement not met or no player");
        }

        return null;
    }

    dynamic AttributeAtLeast(dynamic minimum)
    {
        if (Truth(UO.Self() == 0))
        {
            return false;
        }

        var value = UO.GetStr();
        return value >= minimum;
    }

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

4. Seleccione el carácter por serial y el nombre del objeto - script directo

Parámetros y flujo de ejecución:

  • id es el resultado de UO.Self(), no de type. AddObject almacena ID como statSubject sin alcance porque se especifica el segundo argumento. Ambas llamadas seleccionan el mismo carácter, pero las lecturas no son atómicas.
var id = UO.Self();
if (Truth(id != 0))
{
    UO.AddObject("statSubject", id);
    var direct = UO.GetStr(id);
    var byName = UO.GetStr("statSubject");
    UO.Print("Direct: " + Convert.ToString(direct) + "; alias: " + Convert.ToString(byName));
}

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

Parámetros: Sin parámetros.

Resultado: int / Integer.

Durante la llamada:

La llamada ejecuta el delegate del controlador guardado. El método de registro crea ese delegate al construir la API.

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

() => bridge.Strength

Creación de API: Estas funciones registran la API. No se ejecutan de nuevo en cada llamada al comando.

UO.GetStr(objID) — UO.GetStr(Any)

Parámetros: objID (Any)

Resultado: int / Integer.

Durante la llamada:

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

case "getstr": return new InjectionValue(arguments.Length > 0 ? bridge.GetStrength(Arg(0)) : bridge.Strength);

UO.GetStrength

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

Firmas de C#

int UO.GetStrength();

Lee la potencia actual (Strength, Str) del personaje.

Parámetros

No hay parámetros.

Valor devuelto

int — puntos de estadísticas actuales, 0...65535 en el modelo del cliente; no porcentaje, ID, habilidad, modo de bloqueo o bool. 0 también significa carácter faltante/eliminado u objeto inaccesible. Compare con el requisito numérico, no == true. Este no es un límite de estadísticas ni un valor base garantizado sin modificadores.

Comportamiento

  • El comando no acepta argumentos. Utilice las firmas exactas anteriores.
  • Lee Player.Strength si Player existe y no ha sido destruido; en caso contrario 0. Un personaje muerto presente no es un objeto eliminado. La estadística no se calcula a partir de HP, maná o resistencia.
  • GetStr/GetInt/GetDex acepta ObjID. Los datos de PlayerMobile solo están disponibles para self; para otro serial - 0, incluso para mobile cargado. Las características de otra persona no se sustituyen ni se adivinan.
  • Invoca lecturas en la transmisión del juego con la capacidad de cancelar la espera mediante script. No consulta el estado, no abre el destino, no envía un paquete, no cambia la característica y no agrega retraso.
  • Cada llamada lee los datos locales de nuevo. La variable almacena la instantánea; las lecturas individuales pueden recibir diferentes actualizaciones del servidor. Un resultado distinto de cero no prueba la conexión. Cero puede ser un valor o ningún dato.
  • 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.Str(), UO.Strength(), UO.GetStr(), UO.GetStrength().

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

1. Leer y mostrar puntos: guión directo

Parámetros y flujo de ejecución:

  • el valor almacena el resultado numérico; Convertir.ToString simplemente lo formatea para la revista. No hay argumentos ni acciones de personajes.
var value = UO.GetStrength();
UO.Print("Strength: " + Convert.ToString(value));

2. Comparar dos imágenes - función de script

Parámetros y flujo de ejecución:

  • antes y después separados 1000 ms; UO.Wait agregado al ejemplo. cambio=después-antes puede ser positivo, cero o negativo. Por sí solo, no distingue entre todas las actualizaciones intermedias y la salida del mundo.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var before = UO.GetStrength();
    await Delay(1000);
    var after = UO.GetStrength();
    var change = after - before;
    UO.Print("Change: " + Convert.ToString(change));
    return null;
}

Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));

3. Función de validación de requisitos completa: clase de secuencia de comandos

Parámetros y flujo de ejecución:

  • mínimo=80 es un ejemplo de requisito, no de límite de clientes. AttributeAtLeast(mínimo) rechaza el carácter faltante, lee la característica una vez y devuelve bool: true o false si >= mínimo. El significado lógico lo da la comparación, no la característica en sí.
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(Truth(AttributeAtLeast(80)) == true))
        {
            UO.Print("Requirement met");
        }
        else
        {
            UO.Print("Requirement not met or no player");
        }

        return null;
    }

    dynamic AttributeAtLeast(dynamic minimum)
    {
        if (Truth(UO.Self() == 0))
        {
            return false;
        }

        var value = UO.GetStrength();
        return value >= minimum;
    }

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

Parámetros: Sin parámetros.

Resultado: int / Integer.

Durante la llamada:

La llamada ejecuta el delegate del controlador guardado. El método de registro crea ese delegate al construir la API.

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

() => bridge.Strength

Creación de API: Estas funciones registran la API. No se ejecutan de nuevo en cada llamada al comando.


UO.GetTitle

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

Firmas de C#

dynamic UO.GetTitle(object? objID);

Lee el título del personaje conocido por el cliente: por ejemplo, profesión o firma después del nombre.

Parámetros

  • objID: objeto serial/ID obligatorio, no type ni cliloc. Acepta int, cadena decimal/hexadecimal, self, backpack, lasttarget, buscar elemento o nombre AddObject. 0 significa sin objeto.

Valor devuelto

string: texto del campo Título para dispositivos móviles. Cadena vacía si se desconoce el título, el objeto no es un carácter o falta ID. No es serial, un nombre completo ni una serie de propiedades. GetAltName usa el mismo campo que GetTitle.

Comportamiento

  • La llamada en sí lee datos locales, no espera al servidor y no envía un solo clic. Para solicitar un nombre/título, utilice ClickOnObject solo; la respuesta llega de forma asincrónica.
  • También se acepta una cadena vacía para un carácter existente. La verificación Exists responde a otra pregunta: si el objeto está cargado.
  • En esta implementación, el nombre alternativo se asigna al campo Título 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 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.GetTitle("self");
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));

1. Título de tu personaje - guión directo

Parámetros y flujo de ejecución:

  • ObjID=self: carácter del cliente actual.
  • título contiene sólo el título; un campo vacío no significa un error de script.
var title = UO.GetTitle("self");
UO.Print(title);

2. Comprobar carácter seleccionado - función script

Parámetros y flujo de ejecución:

  • ObjID=id — serial del último objetivo. GetName y el título se leen por separado.
  • El destino del elemento no tiene un campo Título y proporcionará una cadena vacía.
return  RunScenario();
 object? RunScenario()
{
    var id = UO.GetSerial("lasttarget");
    if (Truth(UO.Exists(id)))
    {
        var title = UO.GetTitle(id);
        if (Truth(title != ""))
        {
            UO.Print(UO.GetName(id) + " " + title);
        }
    }

    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. Solicitar el nombre antes de leer: clase de script

Parámetros y flujo de ejecución:

  • 350: ejemplo de una pausa en milisegundos después de un solo clic; este no es un parámetro captador.
  • El servidor puede responder más tarde o no transferir el título. Preservar el manejo de cadenas vacías.
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.ClickOnObject(id);
            UO.Wait(350);
            UO.Print(UO.GetTitle(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.GetTitle(objID) — UO.GetTitle(Any)

Parámetros: objID (Any)

Resultado: dynamic / Any.

Durante la llamada:

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

case "gettitle": return new InjectionValue(bridge.GetTitle(Arg(0, bridge.Self)));

UO.GetWeight

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

Firmas de C#

int UO.GetWeight();

Lee el contador de estado de tu personaje: peso actual en piedras.

Parámetros

No hay parámetros.

Valor devuelto

int — peso actual en piedras, 0...65535 en el modelo del cliente. 0 puede ser un valor real, sin datos o un jugador perdido/destruido. Esta es una cantidad, no bool, ID o type: 1 significa una unidad, no éxito. El comando no itera sobre objetos y no devuelve una matriz.

Comportamiento

  • El comando no acepta argumentos. Utilice las firmas exactas anteriores.
  • La lectura del hilo del juego requiere Jugador.Weight si el Jugador actual existe y no ha sido destruido; en caso contrario 0. El equipo no se clasifica, las bonificaciones no se recalculan, no se solicita el estado y no hay que esperar actualizaciones. Un fantasma presente no es igual a un Jugador destruido.
  • Weight lee el peso total reportado por el servidor en piedras. El peso del cuerpo, del equipo y de las bolsas incluidas en la cantidad está determinado por las reglas del casco. El equipo no revisa los contenedores, no suma el peso de los artículos ni actualiza las bolsas cerradas. Esta no es la propiedad Weight de un elemento individual, ni es el número de elementos.
  • CharacterStatus verifica el cuerpo requerido antes de actualizar. Weight está disponible en su propio estado extendido, ranuras - desde type 3, Luck - desde type 4, servidor WeightMax - desde type 5. Un paquete compacto/antiguo sin contador opcional deja su caché anterior. El nuevo Jugador empieza desde cero; la llamada no prueba la recepción de un estado nuevo.
  • Estas funciones registran la API. No se ejecutan de nuevo en cada llamada al 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.
  • Cada llamada lee los datos locales de nuevo. La variable almacena la instantánea; las lecturas individuales pueden recibir diferentes actualizaciones del servidor. Un resultado distinto de cero no prueba la conexión. Cero puede ser un valor o ningún dato.

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

1. Mostrar contador guardado - script directo

Parámetros y flujo de ejecución:

  • value almacena una llamada sin argumentos a su propio carácter; Convertir.ToString formatea el número del registro sin cambiar su significado.
var value = UO.GetWeight();
UO.Print("Weight: " + Convert.ToString(value));

2. Observar cambio: función de secuencia de comandos

Parámetros y flujo de ejecución:

  • UO.Wait(500) separa el antes y el después en 500 milisegundos. la diferencia puede ser positiva, cero o negativa; Es posible que se omitan las actualizaciones provisionales y los cambios de personajes. La pausa es un ejemplo.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var before = UO.GetWeight();
    await Delay(500);
    var after = UO.GetWeight();
    var difference = after - before;
    UO.Print("Counter change: " + Convert.ToString(difference));
    return null;
}

Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));

3. Función auxiliar completa: clase de script

Parámetros y flujo de ejecución:

  • CanCarry(extra) gana peso extra en piedras; 10 es un ejemplo, no el número de pilas. Rechaza extra negativo, sin Jugador, o máximo <= 0, lee el peso y límite actual, luego devuelve bool: true o false por extra <= máximo - actual. La resta evita el desbordamiento actual + adicional. Cuando se sobrecarga, el resultado es false incluso para extra=0. Esta es una evaluación local, no una resolución del servidor; las lecturas no son atómicas y el peso cero puede ser desconocido.
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(Truth(CanCarry(10)) == true))
        {
            UO.Print("Local check passed");
        }
        else
        {
            UO.Print("Local check failed or data unavailable");
        }

        return null;
    }

    dynamic CanCarry(dynamic extra)
    {
        if (Truth(extra < 0) || Truth(UO.Self() == 0))
        {
            return false;
        }

        var current = UO.GetWeight();
        var maximum = UO.MaxWeight();
        if (Truth(maximum <= 0))
        {
            return false;
        }

        return extra <= maximum - current;
    }

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

Parámetros: Sin parámetros.

Resultado: int / Integer.

Durante la llamada:

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

public int Weight() => bridge.Weight;

UO.GetYellowBar

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

Firmas de C#

int UO.GetYellowBar(object? id);

Comprueba la bandera amarilla de la barra de salud mobile.

Parámetros

  • id — Obligatorio serial/ID de un objeto específico: int, cadena hexadecimal o alias self, backpack, lasttarget, lastobject, lastcontainer, último estado, elemento de búsqueda, último cadáver o nombre AddObject. Esto no es graphic/type. El nombre no especificado se resuelve en 0; el comando no abre ningún objetivo nuevo. El argumento es necesario; para usted, pase self.

Valor devuelto

int 1 - cargado mobile tiene el atributo IsYellowHits. int 0: falta el atributo, el objeto no es mobile, desconocido o eliminado. Esta es una bandera compatible/servidor, no un color de tema IDE o una cantidad HP. La ausencia de una bandera no prueba la vulnerabilidad: el servidor puede indicar la protección de manera diferente.

El resultado del comando es una bandera numérica: 1 significa una condición cumplida, 0 significa una condición no cumplida. Después de var resultado = comando(...) verifique si (resultado! = 0) o si (resultado == 0). Guarde el resultado de una llamada: una llamada repetida puede realizar la acción nuevamente o leer el estado que ya cambió.

Comportamiento

  • Se lee el modelo del cliente local; No hay solicitudes al servidor, ni esperas ni movimientos.
  • El resultado se refiere al momento de la lectura. Después de UO.Wait u otra acción, el objeto y sus indicadores pueden cambiar.
  • Esta es una bandera compatible/servidor, no el color del tema IDE o la cantidad HP. La ausencia de una bandera no prueba la vulnerabilidad: el servidor puede indicar la protección de manera diferente.

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

1. Comprueba tu propio estado - guión directo

Parámetros y flujo de ejecución:

  • El argumento self selecciona explícitamente su carácter. estado: 1/0 únicamente.
  • Esta es una bandera compatible/servidor, no el color del tema IDE o la cantidad HP. La ausencia de una bandera no prueba la vulnerabilidad: el servidor puede indicar la protección de manera diferente.
var state = UO.GetYellowBar("self");
var hp = UO.GetHP("self");
UO.Print("Yellow flag: " + Convert.ToString(state));
UO.Print("Known HP: " + Convert.ToString(hp));

2. Marque seleccionado mobile - función de script

Parámetros y flujo de ejecución:

  • IsNpc excluye sujeto y objeto desconocido. El objetivo almacena un único serial en lugar de una referencia activa a un lasttarget cambiante.
  • El resultado se refiere al campo IsYellowHits. Los datos se actualizan solo después de que el cliente recibe el estado apropiado.
return  RunScenario();
 object? RunScenario()
{
    var target = UO.GetSerial("lasttarget");
    if (Truth(UO.IsNPC(target)))
    {
        var state = UO.GetYellowBar(target);
        UO.Print("Selected mobile state 1/0: " + Convert.ToString(state));
    }
    else
    {
        UO.Print("No loaded mobile selected");
    }

    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. Comparar el estado antes y después de la pausa - clase de script

Parámetros y flujo de ejecución:

  • UO.Wait(500): pausa en milisegundos. Después, se comprueba por separado que mobile todavía existe.
  • Se comparan dos fotografías. Es posible que se pierdan los cambios intermedios y esta no es una suscripción continua a los eventos del servidor.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

    async public Task<object?> RunScenarioAsync()
    {
        var target = UO.GetSerial("lasttarget");
        if (Truth(UO.IsNPC(target)))
        {
            var before = UO.GetYellowBar(target);
            await Delay(500);
            if (Truth(UO.IsNPC(target)))
            {
                var after = UO.GetYellowBar(target);
                if (Truth(before != after))
                {
                    UO.Print("Flag changed: " + Convert.ToString(before) + " -> " + Convert.ToString(after));
                }
            }
            else
            {
                UO.Print("Mobile left the local world");
            }
        }

        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.GetYellowBar(id) — UO.GetYellowBar(Any)

Parámetros: id (Any)

Resultado: int / Integer.

Durante la llamada:

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

public int GetYellowBar(InjectionValue id) => bridge.GetYellowBar(GetObject(id));

UO.Gold

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

Firmas de C#

dynamic UO.Gold();

Lee la cantidad de oro del estado actual del personaje.

Parámetros

No hay parámetros.

Valor devuelto

int/double es la suma no negativa 0...4294967295. Hasta 2147483647 inclusive se devuelve int, arriba de double (Double), lo que representa exactamente cualquier entero sin signo de 32. 0 también significa que no hay ningún jugador recuperado actualmente ni ninguna cantidad recibida. No es bool, ID, número de pilas o bypass de mochila/banco.

Comportamiento

  • No hay parámetros. Lee el caché de Player.Gold desde CharacterStatus (0x11). El servidor determina qué oro se incluye en su contador; el equipo no revisa las bolsas ni pide saldos bancarios. Jugador nulo/destruido - 0; un fantasma presente puede mantener una cantidad de estado.
  • ReadGoldValue lee el puente una vez.Gold. El antiguo puente C# conserva la firma Int32 y transmite bits UInt32. la conversión no comprobada restaura la suma sin firmar; una pequeña cantidad se convierte en int, una gran cantidad en double. El bit más significativo ya no hace que el saldo sea negativo. La conversión es local, no hay paquetes.
  • Cada llamada lee los datos locales de nuevo. La variable almacena la instantánea; las lecturas individuales pueden recibir diferentes actualizaciones del servidor. Un resultado distinto de cero no prueba la conexión. Cero puede ser un valor o ningún dato.

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

1. Retirar el importe recibido - guión directo

Parámetros y flujo de ejecución:

  • la cantidad almacena un resultado; Convertir.ToString lo formatea para revista. El oro no se busca, ni se lleva ni se gasta.
var amount = UO.Gold();
UO.Print("Status gold: " + Convert.ToString(amount));

2. Función completa CanAfford a un precio elevado: función de script

Parámetros y flujo de ejecución:

  • price=3000000000.0 es un ejemplo de precio, no del límite. CanAfford(precio) rechaza un precio negativo o ningún jugador, lee el monto una vez y devuelve bool: true o false si monto >= precio. La cantidad en sí no es bool. La función está completamente definida a continuación.
return  RunScenario();
 object? RunScenario()
{
    var price = 3000000000.0;
    if (Truth(Truth(CanAfford(price)) == true))
    {
        UO.Print("Local balance is sufficient");
    }
    else
    {
        UO.Print("Local check failed");
    }

    return null;
}

dynamic CanAfford(dynamic price)
{
    if (Truth(price < 0) || Truth(UO.Self() == 0))
    {
        return false;
    }

    var amount = UO.Gold();
    return amount >= price;
}

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

3. Observar el cambio de saldo: clase de script

Parámetros y flujo de ejecución:

  • antes/después separa UO.Wait(500) milisegundos. diferencia = después-antes puede ser negativo cuando el saldo disminuye; Este no es un desbordamiento de contador fijo y sin firmar. Es posible que se pierdan actualizaciones provisionales y cambios de personajes.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

    async public Task<object?> RunScenarioAsync()
    {
        var before = UO.Gold();
        await Delay(500);
        var after = UO.Gold();
        var difference = after - before;
        UO.Print("Balance change: " + Convert.ToString(difference));
        return null;
    }

    Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
}

Implementación del comando

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

UO.Gold() — UO.Gold()

Parámetros: Sin parámetros.

Resultado: dynamic / Any.

Durante la llamada:

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

case "gold": return ReadGoldValue();

UO.HP

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

Firmas de C#

int UO.HP();

Lee el estado actual del modelo local.

Parámetros

No hay parámetros.

Valor devuelto

int es el valor del campo Hits, no el porcentaje ni bool. 0 puede ser un valor real o una indicación de datos faltantes. El máximo cero no se puede utilizar como divisor. Para el mobile de otra persona, es posible que se desconozcan los significados. HP/HitsMax puede contener una escala relativa del servidor en lugar de puntos exactos. HP=0 no prueba la muerte; hay Dead/IsDead para esto.

Comportamiento

  • El comando no abre el estado y no solicita una actualización del servidor. El cliente sólo lee los datos ya cargados. No cambia características y no envía paquetes.
  • El resultado es una lectura separada. El mundo puede cambiar entre Exists y el próximo desafío; varias consultas no forman una instantánea atómica.
  • Al leer un objeto, World.Get rechaza el o IsDestroyed faltante y da como resultado 0. HP/HitsMax se leen de la Entidad, incluidos los elementos con estos campos; Mana/Stamina: solo para dispositivos móviles. Sin argumentos, lea self. La variante del mismo nombre sin parámetros no necesariamente tiene una variante con ID: ver firmas.
  • La lectura sin argumentos también devuelve 0 para un jugador perdido o destruido. Esto se aplica a Mana/Stamina directo y sus máximos, no solo a los formularios a través de World.Get. Un personaje muerto presente puede conservar valores.

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

1. Imprime el valor de tu personaje - guión directo

Parámetros y flujo de ejecución:

  • La llamada sin argumentos dice self. value almacena un número, Convert.ToString lo convierte solo para mensaje.
var value = UO.HP();
UO.Print("HP: " + Convert.ToString(value));

2. Aplicar valor en verificación o cálculo - función de script

Parámetros y flujo de ejecución:

  • Se muestra el umbral o cálculo aplicado para este campo. Los números en la condición son configuraciones de ejemplo, no límites del servidor. Antes de dividir por el máximo se comprueba su positividad.
return  RunScenario();
 object? RunScenario()
{
    var value = UO.HP();
    var maximum = UO.GetMaxHP();
    if (Truth(maximum > 0) && Truth(value * 100 / maximum < 50))
    {
        UO.Print("Health below half of the known maximum");
    }

    return null;
}

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

3. Función auxiliar completa ReadValue - Clase de script

Parámetros y flujo de ejecución:

  • Este nombre no tiene forma con ID. ReadValue sin parámetros lee self; las dos llamadas están separadas por UO.Wait(1000). La comparación de dos instantáneas puede pasar por alto cambios intermedios.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

    async public Task<object?> RunScenarioAsync()
    {
        var before = ReadValue();
        await Delay(1000);
        var after = ReadValue();
        UO.Print("Before: " + Convert.ToString(before) + "; after: " + Convert.ToString(after));
        return null;
    }

    dynamic ReadValue()
    {
        return UO.HP();
    }

    Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
}

Implementación del comando

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

UO.HP() — UO.HP()

Parámetros: Sin parámetros.

Resultado: int / Integer.

Durante la llamada:

La llamada ejecuta el delegate del controlador guardado. El método de registro crea ese delegate al construir la API.

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

() => bridge.GetHP(bridge.Self)

Creación de API: Estas funciones registran la API. No se ejecutan de nuevo en cada llamada al comando.


UO.Hidden

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

Firmas de C#

int UO.Hidden();
int UO.Hidden(object? id);

Pone a prueba el sigilo del personaje.

Parámetros

  • id: objeto opcional en los formularios que se muestran: serial por número/cadena hexadecimal, self, lasttarget o nombre registrado AddObject. Esto no es type. Sin argumentos, lea self. El texto desconocido en algunos formularios provoca un error de conversión; Verifique el nombre antes de llamar.

Valor devuelto

Bandera numérica int: 1 (condición cumplida), 0 (condición no cumplida). Esta es una bandera numérica: en C# verifique el resultado! = 0 o resultado == 0. Comparación directa de int con true/false y si (resultado) no está permitido. 1 - mobile tiene IsHidden, 0 no tiene bandera o mobile falta. Esta es una bandera del servidor, no visibilidad detrás de una pared.

El resultado del comando es una bandera numérica: 1 significa una condición cumplida, 0 significa una condición no cumplida. Después de var resultado = comando(...) verifique si (resultado! = 0) o si (resultado == 0). Guarde el resultado de una llamada: una llamada repetida puede realizar la acción nuevamente o leer el estado que ya cambió.

Comportamiento

  • Lee el modelo local: no abre el destino, no solicita el estado, no cambia la bandera y no envía el paquete. Un objeto destruido se considera perdido incluso antes de que la entrada se elimine del diccionario.
  • El resultado es una lectura separada. El mundo puede cambiar entre Exists y el próximo desafío; varias consultas no forman una instantánea atómica.

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

1. Comprueba tu propio estado - guión directo

Parámetros y flujo de ejecución:

  • Los paréntesis vacíos dicen self. activo guarda el resultado una vez; true y false definen dos ramas. Print solo muestra un mensaje de ejemplo.
var active = UO.Hidden();
if (Truth(Truth(active) == true))
{
    UO.Print("State is active");
}
else
{
    UO.Print("State is inactive or unavailable");
}

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

2. Objeto seleccionado y función completa ReadState - función de script

Parámetros y flujo de ejecución:

  • lasttarget – objeto previamente seleccionado. Exists comprueba su presencia. obj es el único parámetro ReadState; la función devuelve el resultado del comando sin modificación. Su definición está incluida en el código copiado.
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.Exists("lasttarget")))
    {
        var observed = ReadState("lasttarget");
        UO.Print("State 1/0: " + Convert.ToString(observed));
    }

    return null;
}

dynamic ReadState(dynamic obj)
{
    return UO.Hidden(obj);
}

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

3. Observe un cambio en medio segundo - clase de script

Parámetros y flujo de ejecución:

  • Dos llamadas sin argumentos leen self, UO.Wait(500) establece 500 milisegundos. Se comparan dos imágenes; se pueden omitir las transiciones intermedias. No hay una espera interminable.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

    async public Task<object?> RunScenarioAsync()
    {
        var before = UO.Hidden();
        await Delay(500);
        var after = UO.Hidden();
        if (Truth(before != after))
        {
            UO.Print("State changed: " + Convert.ToString(before) + " -> " + Convert.ToString(after));
        }

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

Parámetros: Sin parámetros.

Resultado: int / Integer.

Durante la llamada:

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

public int Hidden() => Hidden("self");

UO.Hidden(id) — UO.Hidden(Integer)

Parámetros: id (Integer/String)

Resultado: int / Integer.

Durante la llamada:

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

public int Hidden(int id) => bridge.Hidden(id);

UO.Hidden(id) — UO.Hidden(String)

Parámetros: id (Integer/String)

Resultado: int / Integer.

Durante la llamada:

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

public int Hidden(string idText) => Hidden(GetObject(idText));

UO.Int

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

Firmas de C#

int UO.Int();

Lee la inteligencia actual (Intelligence, INT) del personaje.

Parámetros

No hay parámetros.

Valor devuelto

int — puntos de estadísticas actuales, 0...65535 en el modelo del cliente; no porcentaje, ID, habilidad, modo de bloqueo o bool. 0 también significa carácter faltante/eliminado u objeto inaccesible. Compare con el requisito numérico, no == true. Este no es un límite de estadísticas ni un valor base garantizado sin modificadores.

Comportamiento

  • El comando no acepta argumentos. Utilice las firmas exactas anteriores.
  • Lee Player.Intelligence si Player existe y no ha sido destruido; en caso contrario 0. Un personaje muerto presente no es un objeto eliminado. La estadística no se calcula a partir de HP, maná o resistencia.
  • GetStr/GetInt/GetDex acepta ObjID. Los datos de PlayerMobile solo están disponibles para self; para otro serial - 0, incluso para mobile cargado. Las características de otra persona no se sustituyen ni se adivinan.
  • Invoca lecturas en la transmisión del juego con la capacidad de cancelar la espera mediante script. No consulta el estado, no abre el destino, no envía un paquete, no cambia la característica y no agrega retraso.
  • Cada llamada lee los datos locales de nuevo. La variable almacena la instantánea; las lecturas individuales pueden recibir diferentes actualizaciones del servidor. Un resultado distinto de cero no prueba la conexión. Cero puede ser un valor o ningún dato.
  • 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.Int(), UO.Intelligence(), UO.GetInt(), UO.GetIntelligence().

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

1. Leer y mostrar puntos: guión directo

Parámetros y flujo de ejecución:

  • el valor almacena el resultado numérico; Convertir.ToString simplemente lo formatea para la revista. No hay argumentos ni acciones de personajes.
var value = UO.Int();
UO.Print("Intelligence: " + Convert.ToString(value));

2. Comparar dos imágenes - función de script

Parámetros y flujo de ejecución:

  • antes y después separados 1000 ms; UO.Wait agregado al ejemplo. cambio=después-antes puede ser positivo, cero o negativo. Por sí solo, no distingue entre todas las actualizaciones intermedias y la salida del mundo.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var before = UO.Int();
    await Delay(1000);
    var after = UO.Int();
    var change = after - before;
    UO.Print("Change: " + Convert.ToString(change));
    return null;
}

Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));

3. Función de validación de requisitos completa: clase de secuencia de comandos

Parámetros y flujo de ejecución:

  • mínimo=80 es un ejemplo de requisito, no de límite de clientes. AttributeAtLeast(mínimo) rechaza el carácter faltante, lee la característica una vez y devuelve bool: true o false si >= mínimo. El significado lógico lo da la comparación, no la característica en sí.
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(Truth(AttributeAtLeast(80)) == true))
        {
            UO.Print("Requirement met");
        }
        else
        {
            UO.Print("Requirement not met or no player");
        }

        return null;
    }

    dynamic AttributeAtLeast(dynamic minimum)
    {
        if (Truth(UO.Self() == 0))
        {
            return false;
        }

        var value = UO.Int();
        return value >= minimum;
    }

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

Parámetros: Sin parámetros.

Resultado: int / Integer.

Durante la llamada:

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

case "int": return new InjectionValue(bridge.Intelligence);

UO.Intelligence

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

Firmas de C#

int UO.Intelligence();

Lee la inteligencia actual (Intelligence, INT) del personaje.

Parámetros

No hay parámetros.

Valor devuelto

int — puntos de estadísticas actuales, 0...65535 en el modelo del cliente; no porcentaje, ID, habilidad, modo de bloqueo o bool. 0 también significa carácter faltante/eliminado u objeto inaccesible. Compare con el requisito numérico, no == true. Este no es un límite de estadísticas ni un valor base garantizado sin modificadores.

Comportamiento

  • El comando no acepta argumentos. Utilice las firmas exactas anteriores.
  • Lee Player.Intelligence si Player existe y no ha sido destruido; en caso contrario 0. Un personaje muerto presente no es un objeto eliminado. La estadística no se calcula a partir de HP, maná o resistencia.
  • GetStr/GetInt/GetDex acepta ObjID. Los datos de PlayerMobile solo están disponibles para self; para otro serial - 0, incluso para mobile cargado. Las características de otra persona no se sustituyen ni se adivinan.
  • Invoca lecturas en la transmisión del juego con la capacidad de cancelar la espera mediante script. No consulta el estado, no abre el destino, no envía un paquete, no cambia la característica y no agrega retraso.
  • Cada llamada lee los datos locales de nuevo. La variable almacena la instantánea; las lecturas individuales pueden recibir diferentes actualizaciones del servidor. Un resultado distinto de cero no prueba la conexión. Cero puede ser un valor o ningún dato.
  • 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.Int(), UO.Intelligence(), UO.GetInt(), UO.GetIntelligence().

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

1. Leer y mostrar puntos: guión directo

Parámetros y flujo de ejecución:

  • el valor almacena el resultado numérico; Convertir.ToString simplemente lo formatea para la revista. No hay argumentos ni acciones de personajes.
var value = UO.Intelligence();
UO.Print("Intelligence: " + Convert.ToString(value));

2. Comparar dos imágenes - función de script

Parámetros y flujo de ejecución:

  • antes y después separados 1000 ms; UO.Wait agregado al ejemplo. cambio=después-antes puede ser positivo, cero o negativo. Por sí solo, no distingue entre todas las actualizaciones intermedias y la salida del mundo.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var before = UO.Intelligence();
    await Delay(1000);
    var after = UO.Intelligence();
    var change = after - before;
    UO.Print("Change: " + Convert.ToString(change));
    return null;
}

Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));

3. Función de validación de requisitos completa: clase de secuencia de comandos

Parámetros y flujo de ejecución:

  • mínimo=80 es un ejemplo de requisito, no de límite de clientes. AttributeAtLeast(mínimo) rechaza el carácter faltante, lee la característica una vez y devuelve bool: true o false si >= mínimo. El significado lógico lo da la comparación, no la característica en sí.
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(Truth(AttributeAtLeast(80)) == true))
        {
            UO.Print("Requirement met");
        }
        else
        {
            UO.Print("Requirement not met or no player");
        }

        return null;
    }

    dynamic AttributeAtLeast(dynamic minimum)
    {
        if (Truth(UO.Self() == 0))
        {
            return false;
        }

        var value = UO.Intelligence();
        return value >= minimum;
    }

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

Parámetros: Sin parámetros.

Resultado: int / Integer.

Durante la llamada:

La llamada ejecuta el delegate del controlador guardado. El método de registro crea ese delegate al construir la API.

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

() => bridge.Intelligence

Creación de API: Estas funciones registran la API. No se ejecutan de nuevo en cada llamada al comando.


UO.IsAlive

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

Firmas de C#

int UO.IsAlive();
int UO.IsAlive(object? value);

Comprueba la presencia de un objeto sin signos de muerte.

Parámetros

  • value: objeto opcional en los formularios que se muestran: serial por número/cadena hexadecimal, self, lasttarget o nombre registrado AddObject. Esto no es type. Sin argumentos, lea self. El texto desconocido en algunos formularios provoca un error de conversión; Verifique el nombre antes de llamar.

Valor devuelto

Bandera numérica int: 1 (condición cumplida), 0 (condición no cumplida). Esta es una bandera numérica: en C# verifique el resultado! = 0 o resultado == 0. Comparación directa de int con true/false y si (resultado) no está permitido. 1: el serial positivo existe y no está marcado como muerto. El famoso elemento también indica 1: este no es el filtro mobile. Un objeto muerto/perdido da 0.

El resultado del comando es una bandera numérica: 1 significa una condición cumplida, 0 significa una condición no cumplida. Después de var resultado = comando(...) verifique si (resultado! = 0) o si (resultado == 0). Guarde el resultado de una llamada: una llamada repetida puede realizar la acción nuevamente o leer el estado que ya cambió.

Comportamiento

  • Lee el modelo local: no abre el destino, no solicita el estado, no cambia la bandera y no envía el paquete. Un objeto destruido se considera perdido incluso antes de que la entrada se elimine del diccionario.
  • El resultado es una lectura separada. El mundo puede cambiar entre Exists y el próximo desafío; varias consultas no forman una instantánea atómica.

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

1. Comprueba tu propio estado - guión directo

Parámetros y flujo de ejecución:

  • Los paréntesis vacíos dicen self. activo guarda el resultado una vez; true y false definen dos ramas. Print solo muestra un mensaje de ejemplo.
var active = UO.IsAlive();
if (Truth(Truth(active) == true))
{
    UO.Print("State is active");
}
else
{
    UO.Print("State is inactive or unavailable");
}

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

2. Objeto seleccionado y función completa ReadState - función de script

Parámetros y flujo de ejecución:

  • lasttarget – objeto previamente seleccionado. Exists comprueba su presencia. obj es el único parámetro ReadState; la función devuelve el resultado del comando sin modificación. Su definición está incluida en el código copiado.
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.Exists("lasttarget")))
    {
        var observed = ReadState("lasttarget");
        UO.Print("State 1/0: " + Convert.ToString(observed));
    }

    return null;
}

dynamic ReadState(dynamic obj)
{
    return UO.IsAlive(obj);
}

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

3. Observe un cambio en medio segundo - clase de script

Parámetros y flujo de ejecución:

  • Dos llamadas sin argumentos leen self, UO.Wait(500) establece 500 milisegundos. Se comparan dos imágenes; se pueden omitir las transiciones intermedias. No hay una espera interminable.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

    async public Task<object?> RunScenarioAsync()
    {
        var before = UO.IsAlive();
        await Delay(500);
        var after = UO.IsAlive();
        if (Truth(before != after))
        {
            UO.Print("State changed: " + Convert.ToString(before) + " -> " + Convert.ToString(after));
        }

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

Parámetros: Sin parámetros.

Resultado: int / Integer.

Durante la llamada:

La llamada ejecuta el delegate del controlador guardado. El método de registro crea ese delegate al construir la API.

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

serial => serial > 0 && bridge.Exists(serial) != 0 && IsDeadState(serial) == 0 ? 1 : 0

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

() => getter(bridge.Self)

Creación de API: Estas funciones registran la API. No se ejecutan de nuevo en cada llamada al comando.

UO.IsAlive(value) — UO.IsAlive(Any)

Parámetros: value (Any)

Resultado: int / Integer.

Durante la llamada:

La llamada ejecuta el delegate del controlador guardado. El método de registro crea ese delegate al construir la API.

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

serial => serial > 0 && bridge.Exists(serial) != 0 && IsDeadState(serial) == 0 ? 1 : 0

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

value => getter(GetObject(value))

Creación de API: Estas funciones registran la API. No se ejecutan de nuevo en cada llamada al comando.


UO.IsDead

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

Firmas de C#

int UO.IsDead();
dynamic UO.IsDead(object? objID);

Comprueba la muerte del personaje.

Parámetros

  • objID: objeto opcional en los formularios que se muestran: serial por número/cadena hexadecimal, self, lasttarget o nombre registrado AddObject. Esto no es type. Sin argumentos, lea self. El texto desconocido en algunos formularios provoca un error de conversión; Verifique el nombre antes de llamar.

Valor devuelto

Bandera numérica int: 1 (condición cumplida), 0 (condición no cumplida). Esta es una bandera numérica: en C# verifique el resultado! = 0 o resultado == 0. Comparación directa de int con true/false y si (resultado) no está permitido. 1 - mobile tiene IsDead, 0 no tiene signo o mobile está ausente. HP=0 por sí solo no significa muerte.

El resultado del comando es una bandera numérica: 1 significa una condición cumplida, 0 significa una condición no cumplida. Después de var resultado = comando(...) verifique si (resultado! = 0) o si (resultado == 0). Guarde el resultado de una llamada: una llamada repetida puede realizar la acción nuevamente o leer el estado que ya cambió.

Comportamiento

  • Lee el modelo local: no abre el destino, no solicita el estado, no cambia la bandera y no envía el paquete. Un objeto destruido se considera perdido incluso antes de que la entrada se elimine del diccionario.
  • El resultado es una lectura separada. El mundo puede cambiar entre Exists y el próximo desafío; varias consultas no forman una instantánea atómica.

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

1. Comprueba tu propio estado - guión directo

Parámetros y flujo de ejecución:

  • Los paréntesis vacíos dicen self. activo guarda el resultado una vez; true y false definen dos ramas. Print solo muestra un mensaje de ejemplo.
var active = UO.IsDead();
if (Truth(Truth(active) == true))
{
    UO.Print("State is active");
}
else
{
    UO.Print("State is inactive or unavailable");
}

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

2. Objeto seleccionado y función completa ReadState - función de script

Parámetros y flujo de ejecución:

  • lasttarget – objeto previamente seleccionado. Exists comprueba su presencia. obj es el único parámetro ReadState; la función devuelve el resultado del comando sin modificación. Su definición está incluida en el código copiado.
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.Exists("lasttarget")))
    {
        var observed = ReadState("lasttarget");
        UO.Print("State 1/0: " + Convert.ToString(observed));
    }

    return null;
}

dynamic ReadState(dynamic obj)
{
    return UO.IsDead(obj);
}

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

3. Observe un cambio en medio segundo - clase de script

Parámetros y flujo de ejecución:

  • Dos llamadas sin argumentos leen self, UO.Wait(500) establece 500 milisegundos. Se comparan dos imágenes; se pueden omitir las transiciones intermedias. No hay una espera interminable.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

    async public Task<object?> RunScenarioAsync()
    {
        var before = UO.IsDead();
        await Delay(500);
        var after = UO.IsDead();
        if (Truth(before != after))
        {
            UO.Print("State changed: " + Convert.ToString(before) + " -> " + Convert.ToString(after));
        }

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

Parámetros: Sin parámetros.

Resultado: int / Integer.

Durante la llamada:

La llamada ejecuta el delegate del controlador guardado. El método de registro crea ese delegate al construir la API.

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

IsDeadState

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

() => getter(bridge.Self)

Creación de API: Estas funciones registran la API. No se ejecutan de nuevo en cada llamada al comando.

UO.IsDead(objID) — UO.IsDead(Any)

Parámetros: objID (Any)

Resultado: dynamic / Any.

Durante la llamada:

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

case "isdead": return new InjectionValue(arguments.Length > 0 ? bridge.IsDead(Arg(0)) : bridge.Dead());

UO.IsFemale

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

Firmas de C#

int UO.IsFemale(object? objID);

Comprueba el atributo de género femenino mobile.

Parámetros

  • objID — Obligatorio serial/ID de un objeto específico: int, cadena hexadecimal o alias self, backpack, lasttarget, lastobject, lastcontainer, último estado, elemento de búsqueda, último cadáver o nombre AddObject. Esto no es graphic/type. El nombre no especificado se resuelve en 0; el comando no abre ningún objetivo nuevo. El argumento es necesario; para usted, pase self.

Valor devuelto

int 1 - cargado mobile tiene el atributo IsFemale. int 0: falta el atributo, el objeto no es mobile, desconocido o eliminado. No determina la raza, nombre, edad o tipo del propietario del objeto.

El resultado del comando es una bandera numérica: 1 significa una condición cumplida, 0 significa una condición no cumplida. Después de var resultado = comando(...) verifique si (resultado! = 0) o si (resultado == 0). Guarde el resultado de una llamada: una llamada repetida puede realizar la acción nuevamente o leer el estado que ya cambió.

Comportamiento

  • Se lee el modelo del cliente local; No hay solicitudes al servidor, ni esperas ni movimientos.
  • El resultado se refiere al momento de la lectura. Después de UO.Wait u otra acción, el objeto y sus indicadores pueden cambiar.
  • No determina la raza, nombre, edad o tipo del propietario del objeto.

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

1. Comprueba tu propio estado - guión directo

Parámetros y flujo de ejecución:

  • El argumento self selecciona explícitamente su carácter. estado: 1/0 únicamente.
  • No determina la raza, nombre, edad o tipo del propietario del objeto.
var state = UO.IsFemale("self");
if (Truth(state))
{
    UO.Print("Female flag is set");
}
else
{
    UO.Print("Female flag is not set");
}

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

2. Marque seleccionado mobile - función de script

Parámetros y flujo de ejecución:

  • IsNpc excluye sujeto y objeto desconocido. El objetivo almacena un único serial en lugar de una referencia activa a un lasttarget cambiante.
  • El resultado se refiere al campo IsFemale. Los datos se actualizan solo después de que el cliente recibe el estado apropiado.
return  RunScenario();
 object? RunScenario()
{
    var target = UO.GetSerial("lasttarget");
    if (Truth(UO.IsNPC(target)))
    {
        var state = UO.IsFemale(target);
        UO.Print("Selected mobile state 1/0: " + Convert.ToString(state));
    }
    else
    {
        UO.Print("No loaded mobile selected");
    }

    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. Comparar el estado antes y después de la pausa - clase de script

Parámetros y flujo de ejecución:

  • UO.Wait(500): pausa en milisegundos. Después, se comprueba por separado que mobile todavía existe.
  • Se comparan dos fotografías. Es posible que se pierdan los cambios intermedios y esta no es una suscripción continua a los eventos del servidor.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

    async public Task<object?> RunScenarioAsync()
    {
        var target = UO.GetSerial("lasttarget");
        if (Truth(UO.IsNPC(target)))
        {
            var before = UO.IsFemale(target);
            await Delay(500);
            if (Truth(UO.IsNPC(target)))
            {
                var after = UO.IsFemale(target);
                if (Truth(before != after))
                {
                    UO.Print("Flag changed: " + Convert.ToString(before) + " -> " + Convert.ToString(after));
                }
            }
            else
            {
                UO.Print("Mobile left the local world");
            }
        }

        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.IsFemale(objID) — UO.IsFemale(Any)

Parámetros: objID (Any)

Resultado: int / Integer.

Durante la llamada:

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

case "isfemale": return new InjectionValue(bridge.IsFemale(Arg(0, bridge.Self)));

UO.IsFlying

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

Firmas de C#

int UO.IsFlying();
int UO.IsFlying(object? value);

Comprueba si el personaje está volando actualmente. Esto suele ser necesario para Gargoyle: por ejemplo, antes de iniciar una ruta o antes de solicitar habilitar un vuelo. Responde a la pregunta “¿mi personaje está volando ahora?” sin argumento. El comando sólo lee el estado: no permite volar, aterrizar ni mover al personaje.

Parámetros

  • value: carácter serial opcional: número, cadena hexadecimal, self, lasttarget o nombre almacenado mediante UO.AddObject. Sin argumentos, se utiliza tu personaje. Esto es ID de mobile específico, no graphic/type y no la coordenada de Z. Un nombre desconocido, falta/eliminado mobile o un elemento indica 0.

Valor devuelto

Bandera numérica int: 1 (condición cumplida), 0 (condición no cumplida). Esta es una bandera numérica: en C# verifique el resultado! = 0 o resultado == 0. Comparación directa de int con true/false y si (resultado) no está permitido. 1 - mobile tiene IsFlying, 0 no tiene bandera o mobile falta. La altitud Z por sí sola no significa vuelo.

El resultado del comando es una bandera numérica: 1 significa una condición cumplida, 0 significa una condición no cumplida. Después de var resultado = comando(...) verifique si (resultado! = 0) o si (resultado == 0). Guarde el resultado de una llamada: una llamada repetida puede realizar la acción nuevamente o leer el estado que ya cambió.

Comportamiento

  • La principal aplicación del juego es el vuelo de Gargoyle. Sin embargo, el captador no verifica la carrera: en este cliente lee el bit 0x04 de mobile con la versión de protocolo 7.0.0.0 y posterior. En el protocolo anterior, devuelve 0. Pararse sobre un techo, Z alto, animaciones de alas o la carrera de Gárgolas en sí no son pruebas de vuelo habilitadas.
  • Hay un UO.ToggleFly() separado para cambiar de estado: envía una solicitud de cambio en lugar de un comando de "encendido". Si ya está volando, una nueva llamada solicita el aterrizaje. El servidor puede fallar; después de que se le indique, lea Flying nuevamente con una espera limitada. false también es posible sin caracteres/datos disponibles, así que marca Connected antes de realizar la acción.
  • Lee el modelo local: no abre el destino, no solicita el estado, no cambia la bandera y no envía el paquete. Un objeto destruido se considera perdido incluso antes de que la entrada se elimine del diccionario.
  • El resultado es una lectura separada. El mundo puede cambiar entre Exists y el próximo desafío; varias consultas no forman una instantánea atómica.

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

1. Modo de verificación antes del siguiente paso del guión: guión directo

Parámetros y flujo de ejecución:

  • Los paréntesis vacíos indican self. true es igual a 1, false es igual a 0; si UO.Flying() {...} es aceptable. Este ejemplo no cambia nada.
var active = UO.IsFlying();
if (Truth(Truth(active) == true))
{
    UO.Print("Flying mode active");
}
else
{
    UO.Print("Ground mode or character data unavailable");
}

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

2. Verificar carácter previamente seleccionado - función script

Parámetros y flujo de ejecución:

  • ReadState(obj) toma serial/alias y devuelve el estado. La definición completa se encuentra a continuación; la ausencia de un objeto se maneja antes de la lectura. El carácter de otra persona también se compara con los datos ya recibidos por el cliente.
return  RunScenario();
 object? RunScenario()
{
    var target = Asc(UO.GetSerial("lasttarget"), 0);
    if (Truth(target != 0) && Truth(UO.Exists(target)))
    {
        if (Truth(ReadState(target)))
        {
            UO.AddObject("flying_mobile", target);
        }
    }

    return null;
}

dynamic ReadState(dynamic obj)
{
    if (!(Truth(UO.Exists(obj))))
    {
        return false;
    }

    return UO.IsFlying(obj);
}

int Asc(object? value, int fallback = 0)
{
    string text = Convert.ToString(value) ?? "";
    if (text.StartsWith("0x", StringComparison.OrdinalIgnoreCase))
        return int.TryParse(text[2..], System.Globalization.NumberStyles.HexNumber, System.Globalization.CultureInfo.InvariantCulture, out int hex) ? hex : fallback;
    return int.TryParse(text, out int number) ? number : fallback;
}

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

3. Solicite un vuelo una vez y espere el resultado - clase de escenario

Parámetros y flujo de ejecución:

  • El ejemplo es para tu Gargoyle en un servidor que admite vuelos. EnsureFlight(timeoutMs) devuelve 1/true si se observa vuelo; en caso contrario, 0/false. 2000 — límite de espera en milisegundos; comprueba cada 50 ms. Si ya estás volando, no se llama a ToggleFly. Se envía como máximo una solicitud y luego se verifica el estado de la respuesta. La pausa del script/el retraso del programador pueden aumentar el tiempo real.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

    async public Task<object?> RunScenarioAsync()
    {
        if (Truth(await EnsureFlight(2000)))
        {
            UO.Print("Flight confirmed; ready for the next stage");
        }
        else
        {
            UO.Print("Flight not confirmed; route was not started");
        }

        return null;
    }

    async Task<dynamic> EnsureFlight(dynamic timeoutMs)
    {
        if (!(Truth(UO.Connected())) || Truth(UO.Dead()))
        {
            return false;
        }

        if (Truth(UO.IsFlying()))
        {
            return true;
        }

        UO.ToggleFly();
        var waited = 0;
        while (Truth(waited < timeoutMs))
        {
            if (!(Truth(UO.Connected())))
            {
                return false;
            }

            if (Truth(UO.IsFlying()))
            {
                return true;
            }

            await Delay(50);
            waited += 50;
        }

        return UO.IsFlying();
    }

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

Parámetros: Sin parámetros.

Resultado: int / Integer.

Durante la llamada:

La llamada ejecuta el delegate del controlador guardado. El método de registro crea ese delegate al construir la API.

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

serial => bridge.Flying(serial)

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

() => getter(bridge.Self)

Creación de API: Estas funciones registran la API. No se ejecutan de nuevo en cada llamada al comando.

UO.IsFlying(value) — UO.IsFlying(Any)

Parámetros: value (Any)

Resultado: int / Integer.

Durante la llamada:

La llamada ejecuta el delegate del controlador guardado. El método de registro crea ese delegate al construir la API.

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

serial => bridge.Flying(serial)

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

value => getter(GetObject(value))

Creación de API: Estas funciones registran la API. No se ejecutan de nuevo en cada llamada al comando.


UO.IsFrozen

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

Firmas de C#

int UO.IsFrozen();
int UO.IsFrozen(object? value);

Comprueba la bandera de parálisis del personaje conocida por el cliente.

Parámetros

  • value - Opcional serial/ID mobile: número, cadena hexadecimal, self, lasttarget u otro nombre de objeto estándar o nombre AddObject. Esto no es graphic/type. Sin argumento, se utiliza self. El nombre desconocido se resuelve en 0; El objetivo no se abre.

Valor devuelto

Indicador numérico int: 1 (condición cumplida): cargado mobile tiene el indicador IsParalyzed; 0 (condición no cumplida): sin indicador, mobile desconocido, eliminado o el objeto es un elemento. Este no es un momento de parálisis y no garantiza la capacidad de moverse con un resultado de 0.

Comportamiento

  • Utilice Paralyzed para comprobar la bandera de parálisis. Las variantes Is/Get, GetParalisa, Frozen y GetLocked leen la misma bandera.
  • El comando solo lee datos locales. No aplica ni elimina la parálisis, no espera a que finalice y no envía una solicitud de actualización al servidor.
  • El resultado de este comando es de tipo int: use if (valor!= 0) o if (valor == 0). No se permiten comparaciones directas con true/false y si (valor) en C#. El valor conserva el significado de la bandera, no la cantidad o ID.

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

1. Ponte a prueba a través de true - script directo

Parámetros y flujo de ejecución:

  • Los paréntesis vacíos seleccionan self. el estado almacena una instantánea de la bandera; true es la constante numérica 1.
  • Un resultado de false no descarta una pared, falta de resistencia u otra razón para detenerse.
var state = UO.IsFrozen();
if (Truth(Truth(state) == true))
{
    UO.Print("Paralysis flag is set");
}
else
{
    UO.Print("Paralysis flag is absent or unavailable");
}

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

2. Marque seleccionado mobile - función de script

Parámetros y flujo de ejecución:

  • El objetivo almacena la cadena hexadecimal serial del último objetivo. IsNpc comprueba que sea el mobile cargado, incluidos los jugadores.
  • El comando con el argumento dice objetivo. Ella no elige un nuevo personaje ni cambia lasttarget.
return  RunScenario();
 object? RunScenario()
{
    var target = UO.GetSerial("lasttarget");
    if (Truth(UO.IsNPC(target)))
    {
        var state = UO.IsFrozen(target);
        UO.Print("Selected mobile paralysis 1/0: " + Convert.ToString(state));
    }
    else
    {
        UO.Print("No loaded mobile selected");
    }

    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. Espera limitada para que se elimine la parálisis: clase de escenario

Parámetros y flujo de ejecución:

  • No más de 10 pausas durante 100 ms. Cada llamada sin argumento se lee self nuevamente.
  • Después del ciclo, se comprueba por separado la presencia de self. Esta es una observación durante aproximadamente un segundo más la ejecución de comandos, y no una eliminación garantizada de la parálisis.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

    async public Task<object?> RunScenarioAsync()
    {
        var attempts = 0;
        while (Truth(Truth(UO.IsFrozen()) == true) && Truth(attempts < 10))
        {
            await Delay(100);
            attempts = attempts + 1;
        }

        if (Truth(UO.IsNPC("self")))
        {
            if (Truth(Truth(UO.IsFrozen()) == false))
            {
                UO.Print("Paralysis flag is clear");
            }
            else
            {
                UO.Print("Still paralyzed");
            }
        }
        else
        {
            UO.Print("Self is unavailable");
        }

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

Parámetros: Sin parámetros.

Resultado: int / Integer.

Durante la llamada:

La llamada ejecuta el delegate del controlador guardado. El método de registro crea ese delegate al construir la API.

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

serial => bridge.GetLocked(serial)

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

() => getter(bridge.Self)

Creación de API: Estas funciones registran la API. No se ejecutan de nuevo en cada llamada al comando.

UO.IsFrozen(value) — UO.IsFrozen(Any)

Parámetros: value (Any)

Resultado: int / Integer.

Durante la llamada:

La llamada ejecuta el delegate del controlador guardado. El método de registro crea ese delegate al construir la API.

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

serial => bridge.GetLocked(serial)

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

value => getter(GetObject(value))

Creación de API: Estas funciones registran la API. No se ejecutan de nuevo en cada llamada al comando.


UO.IsHidden

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

Firmas de C#

int UO.IsHidden();
dynamic UO.IsHidden(object? objID);

Pone a prueba el sigilo del personaje.

Parámetros

  • objID: objeto opcional en los formularios que se muestran: serial por número/cadena hexadecimal, self, lasttarget o nombre registrado AddObject. Esto no es type. Sin argumentos, lea self. El texto desconocido en algunos formularios provoca un error de conversión; Verifique el nombre antes de llamar.

Valor devuelto

Bandera numérica int: 1 (condición cumplida), 0 (condición no cumplida). Esta es una bandera numérica: en C# verifique el resultado! = 0 o resultado == 0. Comparación directa de int con true/false y si (resultado) no está permitido. 1 - mobile tiene IsHidden, 0 no tiene bandera o mobile falta. Esta es una bandera del servidor, no visibilidad detrás de una pared.

El resultado del comando es una bandera numérica: 1 significa una condición cumplida, 0 significa una condición no cumplida. Después de var resultado = comando(...) verifique si (resultado! = 0) o si (resultado == 0). Guarde el resultado de una llamada: una llamada repetida puede realizar la acción nuevamente o leer el estado que ya cambió.

Comportamiento

  • Lee el modelo local: no abre el destino, no solicita el estado, no cambia la bandera y no envía el paquete. Un objeto destruido se considera perdido incluso antes de que la entrada se elimine del diccionario.
  • El resultado es una lectura separada. El mundo puede cambiar entre Exists y el próximo desafío; varias consultas no forman una instantánea atómica.

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

1. Comprueba tu propio estado - guión directo

Parámetros y flujo de ejecución:

  • Los paréntesis vacíos dicen self. activo guarda el resultado una vez; true y false definen dos ramas. Print solo muestra un mensaje de ejemplo.
var active = UO.IsHidden();
if (Truth(Truth(active) == true))
{
    UO.Print("State is active");
}
else
{
    UO.Print("State is inactive or unavailable");
}

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

2. Objeto seleccionado y función completa ReadState - función de script

Parámetros y flujo de ejecución:

  • lasttarget – objeto previamente seleccionado. Exists comprueba su presencia. obj es el único parámetro ReadState; la función devuelve el resultado del comando sin modificación. Su definición está incluida en el código copiado.
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.Exists("lasttarget")))
    {
        var observed = ReadState("lasttarget");
        UO.Print("State 1/0: " + Convert.ToString(observed));
    }

    return null;
}

dynamic ReadState(dynamic obj)
{
    return UO.IsHidden(obj);
}

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

3. Observe un cambio en medio segundo - clase de script

Parámetros y flujo de ejecución:

  • Dos llamadas sin argumentos leen self, UO.Wait(500) establece 500 milisegundos. Se comparan dos imágenes; se pueden omitir las transiciones intermedias. No hay una espera interminable.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

    async public Task<object?> RunScenarioAsync()
    {
        var before = UO.IsHidden();
        await Delay(500);
        var after = UO.IsHidden();
        if (Truth(before != after))
        {
            UO.Print("State changed: " + Convert.ToString(before) + " -> " + Convert.ToString(after));
        }

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

Parámetros: Sin parámetros.

Resultado: int / Integer.

Durante la llamada:

La llamada ejecuta el delegate del controlador guardado. El método de registro crea ese delegate al construir la API.

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

serial => bridge.Hidden(serial)

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

() => getter(bridge.Self)

Creación de API: Estas funciones registran la API. No se ejecutan de nuevo en cada llamada al comando.

UO.IsHidden(objID) — UO.IsHidden(Any)

Parámetros: objID (Any)

Resultado: dynamic / Any.

Durante la llamada:

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

case "ishidden": return new InjectionValue(bridge.Hidden(Arg(0, bridge.Self)));

UO.IsParalysed

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

Firmas de C#

int UO.IsParalysed();
int UO.IsParalysed(object? value);

Comprueba la bandera de parálisis del personaje conocida por el cliente.

Parámetros

  • value - Opcional serial/ID mobile: número, cadena hexadecimal, self, lasttarget u otro nombre de objeto estándar o nombre AddObject. Esto no es graphic/type. Sin argumento, se utiliza self. El nombre desconocido se resuelve en 0; El objetivo no se abre.

Valor devuelto

Indicador numérico int: 1 (condición cumplida): cargado mobile tiene el indicador IsParalyzed; 0 (condición no cumplida): sin indicador, mobile desconocido, eliminado o el objeto es un elemento. Este no es un momento de parálisis y no garantiza la capacidad de moverse con un resultado de 0.

Comportamiento

  • Utilice Paralyzed para comprobar la bandera de parálisis. Las variantes Is/Get, GetParalisa, Frozen y GetLocked leen la misma bandera.
  • El comando solo lee datos locales. No aplica ni elimina la parálisis, no espera a que finalice y no envía una solicitud de actualización al servidor.
  • El resultado de este comando es de tipo int: use if (valor!= 0) o if (valor == 0). No se permiten comparaciones directas con true/false y si (valor) en C#. El valor conserva el significado de la bandera, no la cantidad o ID.

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

1. Ponte a prueba a través de true - script directo

Parámetros y flujo de ejecución:

  • Los paréntesis vacíos seleccionan self. el estado almacena una instantánea de la bandera; true es la constante numérica 1.
  • Un resultado de false no descarta una pared, falta de resistencia u otra razón para detenerse.
var state = UO.IsParalysed();
if (Truth(Truth(state) == true))
{
    UO.Print("Paralysis flag is set");
}
else
{
    UO.Print("Paralysis flag is absent or unavailable");
}

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

2. Marque seleccionado mobile - función de script

Parámetros y flujo de ejecución:

  • El objetivo almacena la cadena hexadecimal serial del último objetivo. IsNpc comprueba que sea el mobile cargado, incluidos los jugadores.
  • El comando con el argumento dice objetivo. Ella no elige un nuevo personaje ni cambia lasttarget.
return  RunScenario();
 object? RunScenario()
{
    var target = UO.GetSerial("lasttarget");
    if (Truth(UO.IsNPC(target)))
    {
        var state = UO.IsParalysed(target);
        UO.Print("Selected mobile paralysis 1/0: " + Convert.ToString(state));
    }
    else
    {
        UO.Print("No loaded mobile selected");
    }

    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. Espera limitada para que se elimine la parálisis: clase de escenario

Parámetros y flujo de ejecución:

  • No más de 10 pausas durante 100 ms. Cada llamada sin argumento se lee self nuevamente.
  • Después del ciclo, se comprueba por separado la presencia de self. Esta es una observación durante aproximadamente un segundo más la ejecución de comandos, y no una eliminación garantizada de la parálisis.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

    async public Task<object?> RunScenarioAsync()
    {
        var attempts = 0;
        while (Truth(Truth(UO.IsParalysed()) == true) && Truth(attempts < 10))
        {
            await Delay(100);
            attempts = attempts + 1;
        }

        if (Truth(UO.IsNPC("self")))
        {
            if (Truth(Truth(UO.IsParalysed()) == false))
            {
                UO.Print("Paralysis flag is clear");
            }
            else
            {
                UO.Print("Still paralyzed");
            }
        }
        else
        {
            UO.Print("Self is unavailable");
        }

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

Parámetros: Sin parámetros.

Resultado: int / Integer.

Durante la llamada:

La llamada ejecuta el delegate del controlador guardado. El método de registro crea ese delegate al construir la API.

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

serial => bridge.GetLocked(serial)

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

() => getter(bridge.Self)

Creación de API: Estas funciones registran la API. No se ejecutan de nuevo en cada llamada al comando.

UO.IsParalysed(value) — UO.IsParalysed(Any)

Parámetros: value (Any)

Resultado: int / Integer.

Durante la llamada:

La llamada ejecuta el delegate del controlador guardado. El método de registro crea ese delegate al construir la API.

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

serial => bridge.GetLocked(serial)

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

value => getter(GetObject(value))

Creación de API: Estas funciones registran la API. No se ejecutan de nuevo en cada llamada al comando.


UO.IsParalyzed

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

Firmas de C#

int UO.IsParalyzed();
int UO.IsParalyzed(object? objID);

Comprueba la bandera de parálisis del personaje conocida por el cliente.

Parámetros

  • objID - Opcional serial/ID mobile: número, cadena hexadecimal, self, lasttarget u otro nombre de objeto estándar o nombre AddObject. Esto no es graphic/type. Sin argumento, se utiliza self. El nombre desconocido se resuelve en 0; El objetivo no se abre.

Valor devuelto

Indicador numérico int: 1 (condición cumplida): cargado mobile tiene el indicador IsParalyzed; 0 (condición no cumplida): sin indicador, mobile desconocido, eliminado o el objeto es un elemento. Este no es un momento de parálisis y no garantiza la capacidad de moverse con un resultado de 0.

Comportamiento

  • Utilice Paralyzed para comprobar la bandera de parálisis. Las variantes Is/Get, GetParalisa, Frozen y GetLocked leen la misma bandera.
  • El comando solo lee datos locales. No aplica ni elimina la parálisis, no espera a que finalice y no envía una solicitud de actualización al servidor.
  • El resultado de este comando es de tipo int: use if (valor!= 0) o if (valor == 0). No se permiten comparaciones directas con true/false y si (valor) en C#. El valor conserva el significado de la bandera, no la cantidad o ID.

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

1. Ponte a prueba a través de true - script directo

Parámetros y flujo de ejecución:

  • Los paréntesis vacíos seleccionan self. el estado almacena una instantánea de la bandera; true es la constante numérica 1.
  • Un resultado de false no descarta una pared, falta de resistencia u otra razón para detenerse.
var state = UO.IsParalyzed();
if (Truth(Truth(state) == true))
{
    UO.Print("Paralysis flag is set");
}
else
{
    UO.Print("Paralysis flag is absent or unavailable");
}

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

2. Marque seleccionado mobile - función de script

Parámetros y flujo de ejecución:

  • El objetivo almacena la cadena hexadecimal serial del último objetivo. IsNpc comprueba que sea el mobile cargado, incluidos los jugadores.
  • El comando con el argumento dice objetivo. Ella no elige un nuevo personaje ni cambia lasttarget.
return  RunScenario();
 object? RunScenario()
{
    var target = UO.GetSerial("lasttarget");
    if (Truth(UO.IsNPC(target)))
    {
        var state = UO.IsParalyzed(target);
        UO.Print("Selected mobile paralysis 1/0: " + Convert.ToString(state));
    }
    else
    {
        UO.Print("No loaded mobile selected");
    }

    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. Espera limitada para que se elimine la parálisis: clase de escenario

Parámetros y flujo de ejecución:

  • No más de 10 pausas durante 100 ms. Cada llamada sin argumento se lee self nuevamente.
  • Después del ciclo, se comprueba por separado la presencia de self. Esta es una observación durante aproximadamente un segundo más la ejecución de comandos, y no una eliminación garantizada de la parálisis.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

    async public Task<object?> RunScenarioAsync()
    {
        var attempts = 0;
        while (Truth(Truth(UO.IsParalyzed()) == true) && Truth(attempts < 10))
        {
            await Delay(100);
            attempts = attempts + 1;
        }

        if (Truth(UO.IsNPC("self")))
        {
            if (Truth(Truth(UO.IsParalyzed()) == false))
            {
                UO.Print("Paralysis flag is clear");
            }
            else
            {
                UO.Print("Still paralyzed");
            }
        }
        else
        {
            UO.Print("Self is unavailable");
        }

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

Parámetros: Sin parámetros.

Resultado: int / Integer.

Durante la llamada:

La llamada ejecuta el delegate del controlador guardado. El método de registro crea ese delegate al construir la API.

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

serial => bridge.GetLocked(serial)

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

() => getter(bridge.Self)

Creación de API: Estas funciones registran la API. No se ejecutan de nuevo en cada llamada al comando.

UO.IsParalyzed(objID) — UO.IsParalyzed(Any)

Parámetros: objID (Any)

Resultado: int / Integer.

Durante la llamada:

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

case "isparalyzed": return new InjectionValue(bridge.GetLocked(Arg(0, bridge.Self)));

UO.IsPoisoned

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

Firmas de C#

int UO.IsPoisoned();
dynamic UO.IsPoisoned(object? objID);

Comprueba el envenenamiento del personaje.

Parámetros

  • objID: objeto opcional en los formularios que se muestran: serial por número/cadena hexadecimal, self, lasttarget o nombre registrado AddObject. Esto no es type. Sin argumentos, lea self. El texto desconocido en algunos formularios provoca un error de conversión; Verifique el nombre antes de llamar.

Valor devuelto

Bandera numérica int: 1 (condición cumplida), 0 (condición no cumplida). Esta es una bandera numérica: en C# verifique el resultado! = 0 o resultado == 0. Comparación directa de int con true/false y si (resultado) no está permitido. 1 - mobile tiene IsPoisoned, 0 no tiene bandera o mobile falta. No se devuelve el grado de veneno ni el tiempo restante.

El resultado del comando es una bandera numérica: 1 significa una condición cumplida, 0 significa una condición no cumplida. Después de var resultado = comando(...) verifique si (resultado! = 0) o si (resultado == 0). Guarde el resultado de una llamada: una llamada repetida puede realizar la acción nuevamente o leer el estado que ya cambió.

Comportamiento

  • Lee el modelo local: no abre el destino, no solicita el estado, no cambia la bandera y no envía el paquete. Un objeto destruido se considera perdido incluso antes de que la entrada se elimine del diccionario.
  • El resultado es una lectura separada. El mundo puede cambiar entre Exists y el próximo desafío; varias consultas no forman una instantánea atómica.
  • Para Poisoned/Flying se tiene en cuenta la versión del protocolo: hasta 7.0.0.0 el bit 0x04 significa veneno; comenzando con 7.0.0.0 significa vuelo y el veneno se almacena por separado. El vuelo no se calcula a partir de Z.

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

1. Comprueba tu propio estado - guión directo

Parámetros y flujo de ejecución:

  • Los paréntesis vacíos dicen self. activo guarda el resultado una vez; true y false definen dos ramas. Print solo muestra un mensaje de ejemplo.
var active = UO.IsPoisoned();
if (Truth(Truth(active) == true))
{
    UO.Print("State is active");
}
else
{
    UO.Print("State is inactive or unavailable");
}

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

2. Objeto seleccionado y función completa ReadState - función de script

Parámetros y flujo de ejecución:

  • lasttarget – objeto previamente seleccionado. Exists comprueba su presencia. obj es el único parámetro ReadState; la función devuelve el resultado del comando sin modificación. Su definición está incluida en el código copiado.
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.Exists("lasttarget")))
    {
        var observed = ReadState("lasttarget");
        UO.Print("State 1/0: " + Convert.ToString(observed));
    }

    return null;
}

dynamic ReadState(dynamic obj)
{
    return UO.IsPoisoned(obj);
}

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

3. Observe un cambio en medio segundo - clase de script

Parámetros y flujo de ejecución:

  • Dos llamadas sin argumentos leen self, UO.Wait(500) establece 500 milisegundos. Se comparan dos imágenes; se pueden omitir las transiciones intermedias. No hay una espera interminable.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

    async public Task<object?> RunScenarioAsync()
    {
        var before = UO.IsPoisoned();
        await Delay(500);
        var after = UO.IsPoisoned();
        if (Truth(before != after))
        {
            UO.Print("State changed: " + Convert.ToString(before) + " -> " + Convert.ToString(after));
        }

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

Parámetros: Sin parámetros.

Resultado: int / Integer.

Durante la llamada:

La llamada ejecuta el delegate del controlador guardado. El método de registro crea ese delegate al construir la API.

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

serial => bridge.Poisoned(serial)

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

() => getter(bridge.Self)

Creación de API: Estas funciones registran la API. No se ejecutan de nuevo en cada llamada al comando.

UO.IsPoisoned(objID) — UO.IsPoisoned(Any)

Parámetros: objID (Any)

Resultado: dynamic / Any.

Durante la llamada:

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

case "ispoisoned": return new InjectionValue(bridge.Poisoned(Arg(0, bridge.Self)));

UO.IsYellowHits

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

Firmas de C#

int UO.IsYellowHits(object? objID);

Comprueba la bandera amarilla de la barra de salud mobile.

Parámetros

  • objID — Obligatorio serial/ID de un objeto específico: int, cadena hexadecimal o alias self, backpack, lasttarget, lastobject, lastcontainer, último estado, elemento de búsqueda, último cadáver o nombre AddObject. Esto no es graphic/type. El nombre no especificado se resuelve en 0; el comando no abre ningún objetivo nuevo. El argumento es necesario; para usted, pase self.

Valor devuelto

int 1 - cargado mobile tiene el atributo IsYellowHits. int 0: falta el atributo, el objeto no es mobile, desconocido o eliminado. Esta es una bandera compatible/servidor, no un color de tema IDE o una cantidad HP. La ausencia de una bandera no prueba la vulnerabilidad: el servidor puede indicar la protección de manera diferente.

El resultado del comando es una bandera numérica: 1 significa una condición cumplida, 0 significa una condición no cumplida. Después de var resultado = comando(...) verifique si (resultado! = 0) o si (resultado == 0). Guarde el resultado de una llamada: una llamada repetida puede realizar la acción nuevamente o leer el estado que ya cambió.

Comportamiento

  • Se lee el modelo del cliente local; No hay solicitudes al servidor, ni esperas ni movimientos.
  • El resultado se refiere al momento de la lectura. Después de UO.Wait u otra acción, el objeto y sus indicadores pueden cambiar.
  • Esta es una bandera compatible/servidor, no el color del tema IDE o la cantidad HP. La ausencia de una bandera no prueba la vulnerabilidad: el servidor puede indicar la protección de manera diferente.

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

1. Comprueba tu propio estado - guión directo

Parámetros y flujo de ejecución:

  • El argumento self selecciona explícitamente su carácter. estado: 1/0 únicamente.
  • Esta es una bandera compatible/servidor, no el color del tema IDE o la cantidad HP. La ausencia de una bandera no prueba la vulnerabilidad: el servidor puede indicar la protección de manera diferente.
var state = UO.IsYellowHits("self");
var hp = UO.GetHP("self");
UO.Print("Yellow flag: " + Convert.ToString(state));
UO.Print("Known HP: " + Convert.ToString(hp));

2. Marque seleccionado mobile - función de script

Parámetros y flujo de ejecución:

  • IsNpc excluye sujeto y objeto desconocido. El objetivo almacena un único serial en lugar de una referencia activa a un lasttarget cambiante.
  • El resultado se refiere al campo IsYellowHits. Los datos se actualizan solo después de que el cliente recibe el estado apropiado.
return  RunScenario();
 object? RunScenario()
{
    var target = UO.GetSerial("lasttarget");
    if (Truth(UO.IsNPC(target)))
    {
        var state = UO.IsYellowHits(target);
        UO.Print("Selected mobile state 1/0: " + Convert.ToString(state));
    }
    else
    {
        UO.Print("No loaded mobile selected");
    }

    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. Comparar el estado antes y después de la pausa - clase de script

Parámetros y flujo de ejecución:

  • UO.Wait(500): pausa en milisegundos. Después, se comprueba por separado que mobile todavía existe.
  • Se comparan dos fotografías. Es posible que se pierdan los cambios intermedios y esta no es una suscripción continua a los eventos del servidor.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

    async public Task<object?> RunScenarioAsync()
    {
        var target = UO.GetSerial("lasttarget");
        if (Truth(UO.IsNPC(target)))
        {
            var before = UO.IsYellowHits(target);
            await Delay(500);
            if (Truth(UO.IsNPC(target)))
            {
                var after = UO.IsYellowHits(target);
                if (Truth(before != after))
                {
                    UO.Print("Flag changed: " + Convert.ToString(before) + " -> " + Convert.ToString(after));
                }
            }
            else
            {
                UO.Print("Mobile left the local world");
            }
        }

        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.IsYellowHits(objID) — UO.IsYellowHits(Any)

Parámetros: objID (Any)

Resultado: int / Integer.

Durante la llamada:

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

case "isyellowhits": return new InjectionValue(bridge.GetYellowBar(Arg(0, bridge.Self)));

UO.LastStatus

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

Firmas de C#

int UO.LastStatus();

Devuelve el serial del último objeto cuyo estado el cliente aceptó.

Parámetros

No hay parámetros.

Valor devuelto

int es 32 bit serial, no type y no es el resultado lógico. 0: aún no se ha aceptado ningún estado o el mundo ha sido despejado. Se conserva la parte más significativa; un número negativo también puede representar serial. Marque != 0, no > 0 y no == true.

Comportamiento

  • Sin parámetros. La lectura no envía paquetes, no abre una ventana ni espera una respuesta. UO.GetStatus(id), RequestStats y UpdateObject solo solicitan datos: el envío no cambia LastStatus.
  • El paquete aceptado 0x11 almacena X/Y serial y conocido por el cliente juntos en World para todos los scripts. Un objeto desconocido/destruido y un paquete base incompleto no reemplazan la entrada. Paquetes posteriores de otros objetos pueden reemplazarlo.
  • X/Y es una instantánea de la Entidad en el momento de la recepción, no de la posición actual. Para mobile estas son células mundiales; para un artículo dentro de un contenedor, estas podrían ser las coordenadas del contenido. El paquete de estado en sí no transmite X/Y. Mover/quitar un objeto después de la recepción no cambia la imagen; World.Clear lo restablece. Para las coordenadas actuales de una característica existente, use GetX/GetY.
  • Las llamadas individuales no forman una instantánea atómica; el servidor puede actualizar el registro entre ellos. La igualdad serial no prueba una nueva respuesta específicamente a su consulta. laststatus sin paréntesis es un valor incorporado activo si el script no lo ha anulado con una variable; UO.LastStatus() es una función registrada.

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

1. Leer el último valor - guión directo

Parámetros y flujo de ejecución:

  • El valor se lee una vez. Para serial, HEX conserva la notación hexadecimal conveniente; para la coordenada Convertir.ToString imprime el número. La llamada no selecciona un objeto.
var value = UO.LastStatus();
UO.Print("Saved value: " + Hex(value));

string Hex(object? value) => Convert.ToInt64(value).ToString("X");

2. Consultar estado y leer datos conocidos: función de script

Parámetros y flujo de ejecución:

  • asunto — serial self. 500 es una pausa en milisegundos, elegida solo a modo de ejemplo. No garantiza respuesta: se muestra el registro actual, que podría quedar antiguo o pertenecer a otro objeto.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var subject = UO.Self();
    if (Truth(subject != 0))
    {
        UO.GetStatus(subject);
        await Delay(500);
        var value = UO.LastStatus();
        UO.Print("Known value: " + Hex(value));
    }

    return null;
}

Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
string Hex(object? value) => Convert.ToInt64(value).ToString("X");
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

3. Ayudante completo ReadSavedStatus - Clase de script

Parámetros y flujo de ejecución:

  • expectedId - serial, saved in Main. The helper is fully defined below; -1 significa que la entrada seleccionada ya no existe y no es el resultado del comando en sí. La verificación antes/después reduce el riesgo de mezclar objetos, pero no garantiza la atomicidad al actualizar el mismo serial.
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 expectedId = UO.LastStatus();
        if (Truth(expectedId != 0))
        {
            var value = ReadSavedStatus(expectedId);
            UO.Print("Checked value: " + Convert.ToString(value));
        }

        return null;
    }

    dynamic ReadSavedStatus(dynamic expectedId)
    {
        if (Truth(expectedId == 0) || Truth(UO.LastStatus() != expectedId))
        {
            return -1;
        }

        var value = UO.LastStatus();
        if (Truth(UO.LastStatus() != expectedId))
        {
            return -1;
        }

        return value;
    }

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

Parámetros: Sin parámetros.

Resultado: int / Integer.

Durante la llamada:

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

case "laststatus": return new InjectionValue(bridge.LastStatus);

UO.LastStatusX

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

Firmas de C#

int UO.LastStatusX();

Devuelve la coordenada X almacenada del último objeto de estado aceptado.

Parámetros

No hay parámetros.

Valor devuelto

int es la coordenada X guardada, no un píxel de la ventana de estado ni un bool. Antes del primer estado o después de limpiar el mundo - 0; también es admisible la propia coordenada 0. Marque UO.LastStatus() para distinguir entre las entradas que faltan.

Comportamiento

  • Sin parámetros. La lectura no envía paquetes, no abre una ventana ni espera una respuesta. UO.GetStatus(id), RequestStats y UpdateObject solo solicitan datos: el envío no cambia LastStatus.
  • El paquete aceptado 0x11 almacena X/Y serial y conocido por el cliente juntos en World para todos los scripts. Un objeto desconocido/destruido y un paquete base incompleto no reemplazan la entrada. Paquetes posteriores de otros objetos pueden reemplazarlo.
  • X/Y es una instantánea de la Entidad en el momento de la recepción, no de la posición actual. Para mobile estas son células mundiales; para un artículo dentro de un contenedor, estas podrían ser las coordenadas del contenido. El paquete de estado en sí no transmite X/Y. Mover/quitar un objeto después de la recepción no cambia la imagen; World.Clear lo restablece. Para las coordenadas actuales de una característica existente, use GetX/GetY.
  • Las llamadas individuales no forman una instantánea atómica; el servidor puede actualizar el registro entre ellos. La igualdad serial no prueba una nueva respuesta específicamente a su consulta. laststatus sin paréntesis es un valor incorporado activo si el script no lo ha anulado con una variable; UO.LastStatus() es una función registrada.

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

1. Leer el último valor - guión directo

Parámetros y flujo de ejecución:

  • El valor se lee una vez. Para serial, HEX conserva la notación hexadecimal conveniente; para la coordenada Convertir.ToString imprime el número. La llamada no selecciona un objeto.
var value = UO.LastStatusX();
UO.Print("Saved value: " + Convert.ToString(value));

2. Consultar estado y leer datos conocidos: función de script

Parámetros y flujo de ejecución:

  • asunto — serial self. 500 es una pausa en milisegundos, elegida solo a modo de ejemplo. No garantiza respuesta: se muestra el registro actual, que podría quedar antiguo o pertenecer a otro objeto.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var subject = UO.Self();
    if (Truth(subject != 0))
    {
        UO.GetStatus(subject);
        await Delay(500);
        var value = UO.LastStatusX();
        UO.Print("Known value: " + Convert.ToString(value));
    }

    return null;
}

Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

3. Ayudante completo ReadSavedStatus - Clase de script

Parámetros y flujo de ejecución:

  • expectedId - serial, saved in Main. The helper is fully defined below; -1 significa que la entrada seleccionada ya no existe y no es el resultado del comando en sí. La verificación antes/después reduce el riesgo de mezclar objetos, pero no garantiza la atomicidad al actualizar el mismo serial.
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 expectedId = UO.LastStatus();
        if (Truth(expectedId != 0))
        {
            var value = ReadSavedStatus(expectedId);
            UO.Print("Checked value: " + Convert.ToString(value));
        }

        return null;
    }

    dynamic ReadSavedStatus(dynamic expectedId)
    {
        if (Truth(expectedId == 0) || Truth(UO.LastStatus() != expectedId))
        {
            return -1;
        }

        var value = UO.LastStatusX();
        if (Truth(UO.LastStatus() != expectedId))
        {
            return -1;
        }

        return value;
    }

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

Parámetros: Sin parámetros.

Resultado: int / Integer.

Durante la llamada:

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

public int LastStatusX() => bridge is IStatusSnapshotBridge snapshot ? snapshot.LastStatusX : bridge.GetX(bridge.LastStatus);

UO.LastStatusY

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

Firmas de C#

int UO.LastStatusY();

Devuelve la coordenada Y almacenada del último objeto de estado aceptado.

Parámetros

No hay parámetros.

Valor devuelto

int es la coordenada Y guardada, no un píxel de la ventana de estado ni un bool. Antes del primer estado o después de limpiar el mundo - 0; también es admisible la propia coordenada 0. Marque UO.LastStatus() para distinguir entre las entradas que faltan.

Comportamiento

  • Sin parámetros. La lectura no envía paquetes, no abre una ventana ni espera una respuesta. UO.GetStatus(id), RequestStats y UpdateObject solo solicitan datos: el envío no cambia LastStatus.
  • El paquete aceptado 0x11 almacena X/Y serial y conocido por el cliente juntos en World para todos los scripts. Un objeto desconocido/destruido y un paquete base incompleto no reemplazan la entrada. Paquetes posteriores de otros objetos pueden reemplazarlo.
  • X/Y es una instantánea de la Entidad en el momento de la recepción, no de la posición actual. Para mobile estas son células mundiales; para un artículo dentro de un contenedor, estas podrían ser las coordenadas del contenido. El paquete de estado en sí no transmite X/Y. Mover/quitar un objeto después de la recepción no cambia la imagen; World.Clear lo restablece. Para las coordenadas actuales de una característica existente, use GetX/GetY.
  • Las llamadas individuales no forman una instantánea atómica; el servidor puede actualizar el registro entre ellos. La igualdad serial no prueba una nueva respuesta específicamente a su consulta. laststatus sin paréntesis es un valor incorporado activo si el script no lo ha anulado con una variable; UO.LastStatus() es una función registrada.

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

1. Leer el último valor - guión directo

Parámetros y flujo de ejecución:

  • El valor se lee una vez. Para serial, HEX conserva la notación hexadecimal conveniente; para la coordenada Convertir.ToString imprime el número. La llamada no selecciona un objeto.
var value = UO.LastStatusY();
UO.Print("Saved value: " + Convert.ToString(value));

2. Consultar estado y leer datos conocidos: función de script

Parámetros y flujo de ejecución:

  • asunto — serial self. 500 es una pausa en milisegundos, elegida solo a modo de ejemplo. No garantiza respuesta: se muestra el registro actual, que podría quedar antiguo o pertenecer a otro objeto.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var subject = UO.Self();
    if (Truth(subject != 0))
    {
        UO.GetStatus(subject);
        await Delay(500);
        var value = UO.LastStatusY();
        UO.Print("Known value: " + Convert.ToString(value));
    }

    return null;
}

Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

3. Ayudante completo ReadSavedStatus - Clase de script

Parámetros y flujo de ejecución:

  • expectedId - serial, saved in Main. The helper is fully defined below; -1 significa que la entrada seleccionada ya no existe y no es el resultado del comando en sí. La verificación antes/después reduce el riesgo de mezclar objetos, pero no garantiza la atomicidad al actualizar el mismo serial.
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 expectedId = UO.LastStatus();
        if (Truth(expectedId != 0))
        {
            var value = ReadSavedStatus(expectedId);
            UO.Print("Checked value: " + Convert.ToString(value));
        }

        return null;
    }

    dynamic ReadSavedStatus(dynamic expectedId)
    {
        if (Truth(expectedId == 0) || Truth(UO.LastStatus() != expectedId))
        {
            return -1;
        }

        var value = UO.LastStatusY();
        if (Truth(UO.LastStatus() != expectedId))
        {
            return -1;
        }

        return value;
    }

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

Parámetros: Sin parámetros.

Resultado: int / Integer.

Durante la llamada:

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

public int LastStatusY() => bridge is IStatusSnapshotBridge snapshot ? snapshot.LastStatusY : bridge.GetY(bridge.LastStatus);

UO.Life

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

Firmas de C#

dynamic UO.Life();

Lee el estado actual del modelo local.

Parámetros

No hay parámetros.

Valor devuelto

int es el valor del campo Hits, no el porcentaje ni bool. 0 puede ser un valor real o una indicación de datos faltantes. El máximo cero no se puede utilizar como divisor. Para el mobile de otra persona, es posible que se desconozcan los significados. HP/HitsMax puede contener una escala relativa del servidor en lugar de puntos exactos. HP=0 no prueba la muerte; hay Dead/IsDead para esto.

Comportamiento

  • El comando no abre el estado y no solicita una actualización del servidor. El cliente sólo lee los datos ya cargados. No cambia características y no envía paquetes.
  • El resultado es una lectura separada. El mundo puede cambiar entre Exists y el próximo desafío; varias consultas no forman una instantánea atómica.
  • Al leer un objeto, World.Get rechaza el o IsDestroyed faltante y da como resultado 0. HP/HitsMax se leen de la Entidad, incluidos los elementos con estos campos; Mana/Stamina: solo para dispositivos móviles. Sin argumentos, lea self. La variante del mismo nombre sin parámetros no necesariamente tiene una variante con ID: ver firmas.
  • La lectura sin argumentos también devuelve 0 para un jugador perdido o destruido. Esto se aplica a Mana/Stamina directo y sus máximos, no solo a los formularios a través de World.Get. Un personaje muerto presente puede conservar valores.

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

1. Imprime el valor de tu personaje - guión directo

Parámetros y flujo de ejecución:

  • La llamada sin argumentos dice self. value almacena un número, Convert.ToString lo convierte solo para mensaje.
var value = UO.Life();
UO.Print("Life: " + Convert.ToString(value));

2. Aplicar valor en verificación o cálculo - función de script

Parámetros y flujo de ejecución:

  • Se muestra el umbral o cálculo aplicado para este campo. Los números en la condición son configuraciones de ejemplo, no límites del servidor. Antes de dividir por el máximo se comprueba su positividad.
return  RunScenario();
 object? RunScenario()
{
    var value = UO.Life();
    var maximum = UO.GetMaxHP();
    if (Truth(maximum > 0) && Truth(value * 100 / maximum < 50))
    {
        UO.Print("Health below half of the known maximum");
    }

    return null;
}

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

3. Función auxiliar completa ReadValue - Clase de script

Parámetros y flujo de ejecución:

  • Este nombre no tiene forma con ID. ReadValue sin parámetros lee self; las dos llamadas están separadas por UO.Wait(1000). La comparación de dos instantáneas puede pasar por alto cambios intermedios.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

    async public Task<object?> RunScenarioAsync()
    {
        var before = ReadValue();
        await Delay(1000);
        var after = ReadValue();
        UO.Print("Before: " + Convert.ToString(before) + "; after: " + Convert.ToString(after));
        return null;
    }

    dynamic ReadValue()
    {
        return UO.Life();
    }

    Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
}

Implementación del comando

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

UO.Life() — UO.Life()

Parámetros: Sin parámetros.

Resultado: dynamic / Any.

Durante la llamada:

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

case "life": return new InjectionValue(bridge.GetHP(bridge.Self));

UO.Luck

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

Firmas de C#

int UO.Luck();

Lee el contador de estado de tu personaje: puntos de suerte.

Parámetros

No hay parámetros.

Valor devuelto

int - puntos de suerte, 0...65535 en el modelo de cliente. 0 puede ser un valor real, sin datos o un jugador perdido/destruido. Esta es una cantidad, no bool, ID o type: 1 significa una unidad, no éxito. El comando no itera sobre objetos y no devuelve una matriz.

Comportamiento

  • El comando no acepta argumentos. Utilice las firmas exactas anteriores.
  • La lectura del hilo del juego requiere Jugador.Luck si el Jugador actual existe y no ha sido destruido; en caso contrario 0. El equipo no se clasifica, las bonificaciones no se recalculan, no se solicita el estado y no hay que esperar actualizaciones. Un fantasma presente no es igual a un Jugador destruido.
  • Luck lee los puntos de suerte del servidor almacenados como UInt16 desde el estado type >= 4. Esto no es un porcentaje, un número aleatorio ni una garantía de la calidad del botín. Al leer, el cliente no calcula la tasa de caída y no agrega bonificaciones de equipo.
  • CharacterStatus verifica el cuerpo requerido antes de actualizar. Weight está disponible en su propio estado extendido, ranuras - desde type 3, Luck - desde type 4, servidor WeightMax - desde type 5. Un paquete compacto/antiguo sin contador opcional deja su caché anterior. El nuevo Jugador empieza desde cero; la llamada no prueba la recepción de un estado nuevo.
  • Estas funciones registran la API. No se ejecutan de nuevo en cada llamada al 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.
  • Cada llamada lee los datos locales de nuevo. La variable almacena la instantánea; las lecturas individuales pueden recibir diferentes actualizaciones del servidor. Un resultado distinto de cero no prueba la conexión. Cero puede ser un valor o ningún dato.

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

1. Mostrar contador guardado - script directo

Parámetros y flujo de ejecución:

  • value almacena una llamada sin argumentos a su propio carácter; Convertir.ToString formatea el número del registro sin cambiar su significado.
var value = UO.Luck();
UO.Print("Luck: " + Convert.ToString(value));

2. Observar cambio: función de secuencia de comandos

Parámetros y flujo de ejecución:

  • UO.Wait(500) separa el antes y el después en 500 milisegundos. la diferencia puede ser positiva, cero o negativa; Es posible que se omitan las actualizaciones provisionales y los cambios de personajes. La pausa es un ejemplo.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var before = UO.Luck();
    await Delay(500);
    var after = UO.Luck();
    var difference = after - before;
    UO.Print("Counter change: " + Convert.ToString(difference));
    return null;
}

Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));

3. Función auxiliar completa: clase de script

Parámetros y flujo de ejecución:

  • LuckAtLeast(mínimo) recibe un requisito numérico; 1000 es un ejemplo, no un límite o porcentaje. Rechaza la ausencia de un Jugador, lee la suerte una vez y devuelve bool: true o false por valor >= mínimo. La suerte en sí no es bool. Los puntos almacenados en caché se comparan y no se predicen las caídas de botín.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        if (Truth(Truth(LuckAtLeast(1000)) == true))
        {
            UO.Print("Local check passed");
        }
        else
        {
            UO.Print("Local check failed or data unavailable");
        }

        return null;
    }

    dynamic LuckAtLeast(dynamic minimum)
    {
        if (Truth(UO.Self() == 0))
        {
            return false;
        }

        var value = UO.Luck();
        return value >= minimum;
    }

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

Parámetros: Sin parámetros.

Resultado: int / Integer.

Durante la llamada:

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

case "luck": return new InjectionValue(bridge.Luck);

UO.Mana

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

Firmas de C#

dynamic UO.Mana();

Lee el maná actual del modelo local.

Parámetros

No hay parámetros.

Valor devuelto

int es el valor del campo Mana, no un porcentaje o bool. 0 puede ser un valor real o una indicación de datos faltantes. El máximo cero no se puede utilizar como divisor. Para el mobile de otra persona, es posible que se desconozcan los significados. HP/HitsMax puede contener una escala relativa del servidor en lugar de puntos exactos. HP=0 no prueba la muerte; hay Dead/IsDead para esto.

Comportamiento

  • El comando no abre el estado y no solicita una actualización del servidor. El cliente sólo lee los datos ya cargados. No cambia características y no envía paquetes.
  • El resultado es una lectura separada. El mundo puede cambiar entre Exists y el próximo desafío; varias consultas no forman una instantánea atómica.
  • Al leer un objeto, World.Get rechaza el o IsDestroyed faltante y da como resultado 0. HP/HitsMax se leen de la Entidad, incluidos los elementos con estos campos; Mana/Stamina: solo para dispositivos móviles. Sin argumentos, lea self. La variante del mismo nombre sin parámetros no necesariamente tiene una variante con ID: ver firmas.
  • La lectura sin argumentos también devuelve 0 para un jugador perdido o destruido. Esto se aplica a Mana/Stamina directo y sus máximos, no solo a los formularios a través de World.Get. Un personaje muerto presente puede conservar valores.

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

1. Imprime el valor de tu personaje - guión directo

Parámetros y flujo de ejecución:

  • La llamada sin argumentos dice self. value almacena un número, Convert.ToString lo convierte solo para mensaje.
var value = UO.Mana();
UO.Print("Mana: " + Convert.ToString(value));

2. Aplicar valor en verificación o cálculo - función de script

Parámetros y flujo de ejecución:

  • Se muestra el umbral o cálculo aplicado para este campo. Los números en la condición son configuraciones de ejemplo, no límites del servidor. Antes de dividir por el máximo se comprueba su positividad.
return  RunScenario();
 object? RunScenario()
{
    var value = UO.Mana();
    if (Truth(value >= 10))
    {
        UO.Print("At least ten mana points are known");
    }

    return null;
}

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

3. Función auxiliar completa ReadValue - Clase de script

Parámetros y flujo de ejecución:

  • Este nombre no tiene forma con ID. ReadValue sin parámetros lee self; las dos llamadas están separadas por UO.Wait(1000). La comparación de dos instantáneas puede pasar por alto cambios intermedios.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

    async public Task<object?> RunScenarioAsync()
    {
        var before = ReadValue();
        await Delay(1000);
        var after = ReadValue();
        UO.Print("Before: " + Convert.ToString(before) + "; after: " + Convert.ToString(after));
        return null;
    }

    dynamic ReadValue()
    {
        return UO.Mana();
    }

    Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
}

Implementación del comando

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

UO.Mana() — UO.Mana()

Parámetros: Sin parámetros.

Resultado: dynamic / Any.

Durante la llamada:

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

case "mana": return new InjectionValue(bridge.Mana);

UO.MaxHP

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

Firmas de C#

int UO.MaxHP();

Lee la salud máxima del modelo local.

Parámetros

No hay parámetros.

Valor devuelto

int es el valor del campo HitsMax, no un porcentaje o bool. 0 puede ser un valor real o una indicación de datos faltantes. El máximo cero no se puede utilizar como divisor. Para el mobile de otra persona, es posible que se desconozcan los significados. HP/HitsMax puede contener una escala relativa del servidor en lugar de puntos exactos. HP=0 no prueba la muerte; hay Dead/IsDead para esto.

Comportamiento

  • El comando no abre el estado y no solicita una actualización del servidor. El cliente sólo lee los datos ya cargados. No cambia características y no envía paquetes.
  • El resultado es una lectura separada. El mundo puede cambiar entre Exists y el próximo desafío; varias consultas no forman una instantánea atómica.
  • Al leer un objeto, World.Get rechaza el o IsDestroyed faltante y da como resultado 0. HP/HitsMax se leen de la Entidad, incluidos los elementos con estos campos; Mana/Stamina: solo para dispositivos móviles. Sin argumentos, lea self. La variante del mismo nombre sin parámetros no necesariamente tiene una variante con ID: ver firmas.
  • La lectura sin argumentos también devuelve 0 para un jugador perdido o destruido. Esto se aplica a Mana/Stamina directo y sus máximos, no solo a los formularios a través de World.Get. Un personaje muerto presente puede conservar valores.

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

1. Imprime el valor de tu personaje - guión directo

Parámetros y flujo de ejecución:

  • La llamada sin argumentos dice self. value almacena un número, Convert.ToString lo convierte solo para mensaje.
var value = UO.MaxHP();
UO.Print("MaxHP: " + Convert.ToString(value));

2. Aplicar valor en verificación o cálculo - función de script

Parámetros y flujo de ejecución:

  • Se muestra el umbral o cálculo aplicado para este campo. Los números en la condición son configuraciones de ejemplo, no límites del servidor. Antes de dividir por el máximo se comprueba su positividad.
return  RunScenario();
 object? RunScenario()
{
    var value = UO.MaxHP();
    if (Truth(value > 0))
    {
        UO.Print("Known HP percent: " + Convert.ToString(UO.GetHP() * 100 / value));
    }
    else
    {
        UO.Print("HP maximum unavailable");
    }

    return null;
}

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

3. Función auxiliar completa ReadValue - Clase de script

Parámetros y flujo de ejecución:

  • Este nombre no tiene forma con ID. ReadValue sin parámetros lee self; las dos llamadas están separadas por UO.Wait(1000). La comparación de dos instantáneas puede pasar por alto cambios intermedios.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

    async public Task<object?> RunScenarioAsync()
    {
        var before = ReadValue();
        await Delay(1000);
        var after = ReadValue();
        UO.Print("Before: " + Convert.ToString(before) + "; after: " + Convert.ToString(after));
        return null;
    }

    dynamic ReadValue()
    {
        return UO.MaxHP();
    }

    Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
}

Implementación del comando

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

UO.MaxHP() — UO.MaxHP()

Parámetros: Sin parámetros.

Resultado: int / Integer.

Durante la llamada:

La llamada ejecuta el delegate del controlador guardado. El método de registro crea ese delegate al construir la API.

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

() => bridge.GetMaxHP(bridge.Self)

Creación de API: Estas funciones registran la API. No se ejecutan de nuevo en cada llamada al comando.


UO.MaxLife

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

Firmas de C#

dynamic UO.MaxLife();

Lee la salud máxima del modelo local.

Parámetros

No hay parámetros.

Valor devuelto

int es el valor del campo HitsMax, no un porcentaje o bool. 0 puede ser un valor real o una indicación de datos faltantes. El máximo cero no se puede utilizar como divisor. Para el mobile de otra persona, es posible que se desconozcan los significados. HP/HitsMax puede contener una escala relativa del servidor en lugar de puntos exactos. HP=0 no prueba la muerte; hay Dead/IsDead para esto.

Comportamiento

  • El comando no abre el estado y no solicita una actualización del servidor. El cliente sólo lee los datos ya cargados. No cambia características y no envía paquetes.
  • El resultado es una lectura separada. El mundo puede cambiar entre Exists y el próximo desafío; varias consultas no forman una instantánea atómica.
  • Al leer un objeto, World.Get rechaza el o IsDestroyed faltante y da como resultado 0. HP/HitsMax se leen de la Entidad, incluidos los elementos con estos campos; Mana/Stamina: solo para dispositivos móviles. Sin argumentos, lea self. La variante del mismo nombre sin parámetros no necesariamente tiene una variante con ID: ver firmas.
  • La lectura sin argumentos también devuelve 0 para un jugador perdido o destruido. Esto se aplica a Mana/Stamina directo y sus máximos, no solo a los formularios a través de World.Get. Un personaje muerto presente puede conservar valores.

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

1. Imprime el valor de tu personaje - guión directo

Parámetros y flujo de ejecución:

  • La llamada sin argumentos dice self. value almacena un número, Convert.ToString lo convierte solo para mensaje.
var value = UO.MaxLife();
UO.Print("MaxLife: " + Convert.ToString(value));

2. Aplicar valor en verificación o cálculo - función de script

Parámetros y flujo de ejecución:

  • Se muestra el umbral o cálculo aplicado para este campo. Los números en la condición son configuraciones de ejemplo, no límites del servidor. Antes de dividir por el máximo se comprueba su positividad.
return  RunScenario();
 object? RunScenario()
{
    var value = UO.MaxLife();
    if (Truth(value > 0))
    {
        UO.Print("Known HP percent: " + Convert.ToString(UO.GetHP() * 100 / value));
    }
    else
    {
        UO.Print("HP maximum unavailable");
    }

    return null;
}

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

3. Función auxiliar completa ReadValue - Clase de script

Parámetros y flujo de ejecución:

  • Este nombre no tiene forma con ID. ReadValue sin parámetros lee self; las dos llamadas están separadas por UO.Wait(1000). La comparación de dos instantáneas puede pasar por alto cambios intermedios.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

    async public Task<object?> RunScenarioAsync()
    {
        var before = ReadValue();
        await Delay(1000);
        var after = ReadValue();
        UO.Print("Before: " + Convert.ToString(before) + "; after: " + Convert.ToString(after));
        return null;
    }

    dynamic ReadValue()
    {
        return UO.MaxLife();
    }

    Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
}

Implementación del comando

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

UO.MaxLife() — UO.MaxLife()

Parámetros: Sin parámetros.

Resultado: dynamic / Any.

Durante la llamada:

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

case "maxlife": return new InjectionValue(bridge.GetMaxHP(bridge.Self));

UO.MaxMana

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

Firmas de C#

dynamic UO.MaxMana();

Lee el maná máximo del modelo local.

Parámetros

No hay parámetros.

Valor devuelto

int es el valor del campo ManaMax, no un porcentaje o bool. 0 puede ser un valor real o una indicación de datos faltantes. El máximo cero no se puede utilizar como divisor. Para el mobile de otra persona, es posible que se desconozcan los significados. HP/HitsMax puede contener una escala relativa del servidor en lugar de puntos exactos. HP=0 no prueba la muerte; hay Dead/IsDead para esto.

Comportamiento

  • El comando no abre el estado y no solicita una actualización del servidor. El cliente sólo lee los datos ya cargados. No cambia características y no envía paquetes.
  • El resultado es una lectura separada. El mundo puede cambiar entre Exists y el próximo desafío; varias consultas no forman una instantánea atómica.
  • Al leer un objeto, World.Get rechaza el o IsDestroyed faltante y da como resultado 0. HP/HitsMax se leen de la Entidad, incluidos los elementos con estos campos; Mana/Stamina: solo para dispositivos móviles. Sin argumentos, lea self. La variante del mismo nombre sin parámetros no necesariamente tiene una variante con ID: ver firmas.
  • La lectura sin argumentos también devuelve 0 para un jugador perdido o destruido. Esto se aplica a Mana/Stamina directo y sus máximos, no solo a los formularios a través de World.Get. Un personaje muerto presente puede conservar valores.

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

1. Imprime el valor de tu personaje - guión directo

Parámetros y flujo de ejecución:

  • La llamada sin argumentos dice self. value almacena un número, Convert.ToString lo convierte solo para mensaje.
var value = UO.MaxMana();
UO.Print("MaxMana: " + Convert.ToString(value));

2. Aplicar valor en verificación o cálculo - función de script

Parámetros y flujo de ejecución:

  • Se muestra el umbral o cálculo aplicado para este campo. Los números en la condición son configuraciones de ejemplo, no límites del servidor. Antes de dividir por el máximo se comprueba su positividad.
return  RunScenario();
 object? RunScenario()
{
    var value = UO.MaxMana();
    if (Truth(value > 0))
    {
        UO.Print("Mana percent: " + Convert.ToString(UO.Mana() * 100 / value));
    }

    return null;
}

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

3. Función auxiliar completa ReadValue - Clase de script

Parámetros y flujo de ejecución:

  • Este nombre no tiene forma con ID. ReadValue sin parámetros lee self; las dos llamadas están separadas por UO.Wait(1000). La comparación de dos instantáneas puede pasar por alto cambios intermedios.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

    async public Task<object?> RunScenarioAsync()
    {
        var before = ReadValue();
        await Delay(1000);
        var after = ReadValue();
        UO.Print("Before: " + Convert.ToString(before) + "; after: " + Convert.ToString(after));
        return null;
    }

    dynamic ReadValue()
    {
        return UO.MaxMana();
    }

    Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
}

Implementación del comando

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

UO.MaxMana() — UO.MaxMana()

Parámetros: Sin parámetros.

Resultado: dynamic / Any.

Durante la llamada:

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

case "maxmana": return new InjectionValue(bridge.MaxMana);

UO.MaxStam

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

Firmas de C#

dynamic UO.MaxStam();

Lee la resistencia máxima del modelo local.

Parámetros

No hay parámetros.

Valor devuelto

int es el valor del campo StaminaMax, no un porcentaje o bool. 0 puede ser un valor real o una indicación de datos faltantes. El máximo cero no se puede utilizar como divisor. Para el mobile de otra persona, es posible que se desconozcan los significados. HP/HitsMax puede contener una escala relativa del servidor en lugar de puntos exactos. HP=0 no prueba la muerte; hay Dead/IsDead para esto.

Comportamiento

  • El comando no abre el estado y no solicita una actualización del servidor. El cliente sólo lee los datos ya cargados. No cambia características y no envía paquetes.
  • El resultado es una lectura separada. El mundo puede cambiar entre Exists y el próximo desafío; varias consultas no forman una instantánea atómica.
  • Al leer un objeto, World.Get rechaza el o IsDestroyed faltante y da como resultado 0. HP/HitsMax se leen de la Entidad, incluidos los elementos con estos campos; Mana/Stamina: solo para dispositivos móviles. Sin argumentos, lea self. La variante del mismo nombre sin parámetros no necesariamente tiene una variante con ID: ver firmas.
  • La lectura sin argumentos también devuelve 0 para un jugador perdido o destruido. Esto se aplica a Mana/Stamina directo y sus máximos, no solo a los formularios a través de World.Get. Un personaje muerto presente puede conservar valores.

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

1. Imprime el valor de tu personaje - guión directo

Parámetros y flujo de ejecución:

  • La llamada sin argumentos dice self. value almacena un número, Convert.ToString lo convierte solo para mensaje.
var value = UO.MaxStam();
UO.Print("MaxStam: " + Convert.ToString(value));

2. Aplicar valor en verificación o cálculo - función de script

Parámetros y flujo de ejecución:

  • Se muestra el umbral o cálculo aplicado para este campo. Los números en la condición son configuraciones de ejemplo, no límites del servidor. Antes de dividir por el máximo se comprueba su positividad.
return  RunScenario();
 object? RunScenario()
{
    var value = UO.MaxStam();
    if (Truth(value > 0))
    {
        UO.Print("Stamina percent: " + Convert.ToString(UO.Stamina() * 100 / value));
    }

    return null;
}

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

3. Función auxiliar completa ReadValue - Clase de script

Parámetros y flujo de ejecución:

  • Este nombre no tiene forma con ID. ReadValue sin parámetros lee self; las dos llamadas están separadas por UO.Wait(1000). La comparación de dos instantáneas puede pasar por alto cambios intermedios.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

    async public Task<object?> RunScenarioAsync()
    {
        var before = ReadValue();
        await Delay(1000);
        var after = ReadValue();
        UO.Print("Before: " + Convert.ToString(before) + "; after: " + Convert.ToString(after));
        return null;
    }

    dynamic ReadValue()
    {
        return UO.MaxStam();
    }

    Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
}

Implementación del comando

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

UO.MaxStam() — UO.MaxStam()

Parámetros: Sin parámetros.

Resultado: dynamic / Any.

Durante la llamada:

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

case "maxstam": return new InjectionValue(bridge.MaxStamina);

Clone this wiki locally