Skip to content

ES UO Topic character Part 2

Codex edited this page Oct 12, 2026 · 3 revisions

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

Personaje — 2

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

Partes de la referencia

1 · 2 · 3 · 4 · 5

Referencia completa de comandos


UO.GetEquipment

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

Firmas de C#

dynamic UO.GetEquipment(object? id);

Lee la lista de equipos en capas de objetos distintos de cero.

Parámetros

  • id — Serie/ID de un objeto específico: int, cadena decimal/hexadecimal o alias de conjunto self, backpack, lasttarget, lastobject o nombre AddObject. Esto no es graphic/type. Las líneas my/backpack seleccionan la mochila. Sólo se seleccionan terrenos explícitos 0, "0" o "ground". Un alias desconocido, una mochila perdida, un ID negativo o un tipo de valor inadecuado dan como resultado una matriz vacía.

Valor devuelto

Matriz - serial de cada elemento cuyo Contenedor es ID y Capa no es igual a Inválido. Para ground/0 se devuelve una matriz vacía. Sin entradas, se devuelve una matriz vacía. La lista contiene ID, no type y ninguna capa.

Comportamiento

  • Se leen los datos ya descargados por el cliente. El comando no abre el contenedor, no mueve elementos ni descarga objetos de todo el servidor.
  • Matriz: matriz con índices que comienzan desde 0. Guárdalo en var, marca ArrayLength antes de acceder. Los elementos pueden desaparecer del mundo después de tomar una instantánea: marque Exists(serial) antes de actuar.
  • No hay recorrido recursivo de bolsas anidadas, clasificación por distancia, filtro Ignore o FindDistance/FindVertical. La instantánea normal de FindType permanece sin cambios.
  • GetEquipment(self) incluye la mochila y otras capas conocidas distintas de cero; El mero hecho de una capa no significa que se esté usando un arma o armadura. GetContent(self) puede incluir equipo porque su padre es un 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.GetEquipment("self");
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));

1. Obtener tamaño de lista - script directo

Parámetros y flujo de ejecución:

  • ID="self" - el personaje actual, sus elementos directos con una capa distinta de cero están seleccionados.
  • Longitud: número de registros/ID. Esta no es la cantidad de Monto en pilas. La lista vacía da 0.
var items = UO.GetEquipment("self");
UO.Print(Convert.ToString(ArrayLength(items)));

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

2. Recorrer todo lo encontrado ID - función de script

Parámetros y flujo de ejecución:

  • ID="self" - el personaje actual, sus elementos directos con una capa distinta de cero están seleccionados.
  • elementos [i] - numérico serial. Hex se utiliza sólo para salida. El bucle no accede al último índice.
return  RunScenario();
 object? RunScenario()
{
    var items = UO.GetEquipment("self");
    var i = 0;
    while (Truth(i < ArrayLength(items)))
    {
        UO.Print("0x" + Hex(items[i]));
        i = i + 1;
    }

    return null;
}

int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;
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. Verifique el primer registro antes de leer: clase de guión

Parámetros y flujo de ejecución:

  • ID="self" - el personaje actual, sus elementos directos con una capa distinta de cero están seleccionados.
  • Se verifican dos cosas diferentes: el registro en la instantánea y la existencia del objeto ahora. Orden sin clasificación explícita no significa cercanía.
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 items = UO.GetEquipment("self");
        if (Truth(ArrayLength(items) > 0))
        {
            var first = items[0];
            if (Truth(UO.Exists(first)))
            {
                UO.Print(UO.GetName(first));
            }
        }
        else
        {
            UO.Print("Empty list");
        }

        return null;
    }

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

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

Parámetros: id (Any)

Resultado: dynamic / Any.

Durante la llamada:

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

case "getcontent":

                case "getequipment":

                {

                    InjectionValue selection = arguments[0];

                    bool ground = false, explicitZero;

                    int container;

                    if (selection.Kind == InjectionValueKind.String)

                    {

                        string text = Text(0).Trim();

                        ground = text.Equals("ground", StringComparison.OrdinalIgnoreCase);

                        explicitZero = NumberConversions.TryStr2Int(text, out int literal) && literal == 0;

                        container = ground ? 0 : text.Equals("my", StringComparison.OrdinalIgnoreCase)

                            ? bridge.Backpack : GetObject(text);

                    }

                    else

                    {

                        if (selection.Kind != InjectionValueKind.Integer && selection.Kind != InjectionValueKind.Decimal)

                            return new InjectionValue(Array.Empty<InjectionValue>());

                        container = Arg(0);

                        explicitZero = selection.Kind == InjectionValueKind.Integer ? selection.Integer == 0 : selection.Decimal == 0d;

                    }

                    // Only an explicit ground/zero selector may query world items.

                    if (container < 0 || container == 0 && !ground && !explicitZero)

                        return new InjectionValue(Array.Empty<InjectionValue>());

                    bool equipment = name.Equals("GetEquipment", StringComparison.OrdinalIgnoreCase);

                    int[] items = equipment

                        ? container == 0 ? Array.Empty<int>() : bridge.GetEquipment(container)

                        : bridge.GetContent(container);

                    return new InjectionValue(items.Select(serial => new InjectionValue(serial)).ToArray());

                }

UO.GetFireResist

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

Firmas de C#

int UO.GetFireResist();

Lee el campo de resistencia del personaje actual: fuego.

Parámetros

No hay parámetros.

Valor devuelto

int: valor de estado firmado, -32768..32767 en el modelo de cliente. El valor negativo se mantiene. 0 puede ser una resistencia real, falta de datos o un jugador perdido/destruido; GetResist también da 0 para un selector desconocido. Esto no es un límite bool, ID, de habilidad o resistencia. 1 significa un punto, no éxito.

Comportamiento

  • El comando no acepta argumentos. Utilice las firmas exactas anteriores.
  • La lectura del hilo del juego requiere Jugador.FireResistance 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.
  • Los campos elementales vienen en formato extendido CharacterStatus (0x11), type >= 4. El comando en sí no verifica la época del servidor. El estado compacto/antiguo sin estos campos deja el caché anterior; El nuevo jugador es inicialmente 0. La resistencia al veneno no es una bandera Poisoned; Tampoco es una habilidad de resistencia a hechizos.
  • CharacterStatus verifica el cuerpo requerido antes de cambiar el nombre, la salud y las características propias, luego traduce cada palabra de resistencia a un Int16 firmado. Un cuerpo obligatorio recortado no modifica los datos anteriores. La cola opcional type 6 conserva las mismas reglas; Los comandos de resistencia no leen los límites máximos.
  • 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.
  • 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.

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

1. Imprimir valor guardado - script directo

Parámetros y flujo de ejecución:

  • El valor almacena el resultado de una llamada. Convertir.ToString formatea el número del registro. No hay argumentos: puedes leer tu propio personaje.
var value = UO.GetFireResist();
UO.Print("FireResistance: " + Convert.ToString(value));

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

Parámetros y flujo de ejecución:

  • Entre antes y después hay UO.Wait(500) milisegundos; la diferencia puede ser negativa. Es posible que se pierdan actualizaciones provisionales. La pausa se refiere al ejemplo, no al retraso API.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var before = UO.GetFireResist();
    await Delay(500);
    var after = UO.GetFireResist();
    var difference = after - before;
    UO.Print("Resistance change: " + Convert.ToString(difference));
    return null;
}

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

3. Función de prueba de resistencia mínima completa: clase de script

Parámetros y flujo de ejecución:

  • mínimo=50 es un ejemplo de requisito, no de límite de clientes. ResistanceAtLeast rechaza al jugador que falta, lee un valor y devuelve bool: true o false si el valor >= mínimo. La resistencia en sí no es bool. La función se declara completamente a continuació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(ResistanceAtLeast(50)) == true))
        {
            UO.Print("Local resistance requirement met");
        }
        else
        {
            UO.Print("Requirement not met or no player");
        }

        return null;
    }

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

        var value = UO.GetFireResist();
        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.GetFireResist() — UO.GetFireResist()

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

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


UO.GetFlying

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

Firmas de C#

int UO.GetFlying();
int UO.GetFlying(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.GetFlying();
UO.Print("GetFlying: " + 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.GetFlying();
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.GetFlying(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.GetFlying()))
        {
            return true;
        }

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

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

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

        return UO.GetFlying();
    }

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

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.GetFlying(value) — UO.GetFlying(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.GetFrozen

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

Firmas de C#

int UO.GetFrozen();
int UO.GetFrozen(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.GetFrozen();
UO.Print("GetFrozen: " + 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.GetFrozen();
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.GetFrozen(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.GetFrozen()) == true) && Truth(attempts < 10))
        {
            await Delay(100);
            attempts = attempts + 1;
        }

        if (Truth(UO.IsNPC("self")))
        {
            if (Truth(Truth(UO.GetFrozen()) == 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.GetFrozen() — UO.GetFrozen()

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.GetFrozen(value) — UO.GetFrozen(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.GetGold

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

Firmas de C#

dynamic UO.GetGold();

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.GetGold();
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.GetGold();
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.GetGold();
    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.GetGold();
        await Delay(500);
        var after = UO.GetGold();
        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.GetGold() — UO.GetGold()

Parámetros: Sin parámetros.

Resultado: dynamic / Any.

Durante la llamada:

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

private InjectionValue ReadGoldValue()

        {

            // The existing bridge carries all 32 unsigned status-counter bits in

            // an Int32. Keep small results Integer; Double exactly represents

            // every UInt32 and avoids returning a negative large gold amount.

            uint amount = unchecked((uint)bridge.Gold);

            return amount <= int.MaxValue ? new InjectionValue((int)amount)

                : new InjectionValue((double)amount);

        }

UO.GetHP

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

Firmas de C#

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

Lee el estado actual del modelo local.

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

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.

Ejemplo .csx

int hp = UO.GetHP();
UO.Print($"HP = {hp}");

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.GetHP();
UO.Print("GetHP: " + 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.GetHP();
UO.Print("GetHP: " + 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.GetHP();
    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:

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

Parámetros: Sin parámetros.

Resultado: int / Integer.

Durante la llamada:

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

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

UO.GetHP(id) — UO.GetHP(Any)

Parámetros: id (Any/Integer/String)

Resultado: int / Any.

Durante la llamada:

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

case "gethp": return new InjectionValue(bridge.GetHP(Arg(0, bridge.Self)));

UO.GetHP(id) — UO.GetHP(Integer)

Parámetros: id (Any/Integer/String)

Resultado: int / Integer.

Durante la llamada:

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

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

UO.GetHP(id) — UO.GetHP(String)

Parámetros: id (Any/Integer/String)

Resultado: int / Integer.

Durante la llamada:

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

public int GetHP(string id) => GetHP(GetObject(id));

UO.GetHidden

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

Firmas de C#

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

Pone a prueba el sigilo del personaje.

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 - 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.GetHidden();
UO.Print("GetHidden: " + 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.GetHidden();
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.GetHidden(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.GetHidden();
        await Delay(500);
        var after = UO.GetHidden();
        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.GetHidden() — UO.GetHidden()

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

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

Firmas de C#

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

Lee la inteligencia actual (Intelligence, INT) 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.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().
  • 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.GetInt();
UO.Print("GetInt: " + 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.GetInt();
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.GetInt();
    await Delay(1000);
    var after = UO.GetInt();
    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.GetInt();
        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.GetInt(id);
    var byName = UO.GetInt("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.GetInt() — UO.GetInt()

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

Parámetros: objID (Any)

Resultado: int / Integer.

Durante la llamada:

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

case "getint": return new InjectionValue(arguments.Length > 0 ? bridge.GetIntelligence(Arg(0)) : bridge.Intelligence);

UO.GetIntelligence

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

Firmas de C#

int UO.GetIntelligence();

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.GetIntelligence();
UO.Print("GetIntelligence: " + 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.GetIntelligence();
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.GetIntelligence();
    await Delay(1000);
    var after = UO.GetIntelligence();
    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.GetIntelligence();
        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.GetIntelligence() — UO.GetIntelligence()

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

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

Firmas de C#

int UO.GetLife();

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.GetLife();
UO.Print("GetLife: " + 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.GetLife();
UO.Print("GetLife: " + 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.GetLife();
    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.GetLife();
    }

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

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

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

Firmas de C#

int UO.GetLuck();

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.GetLuck();
UO.Print("GetLuck: " + 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.GetLuck();
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.GetLuck();
    await Delay(500);
    var after = UO.GetLuck();
    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.GetLuck();
        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.GetLuck() — UO.GetLuck()

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

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


UO.GetMana

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

Firmas de C#

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

Lee el maná 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 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.

var result = UO.GetMana();
UO.Print("GetMana: " + 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.GetMana();
UO.Print("GetMana: " + 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.GetMana();
    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:

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

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

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

UO.GetMana(objID) — UO.GetMana(Any)

Parámetros: objID (Any)

Resultado: dynamic / Any.

Durante la llamada:

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

case "getmana": return new InjectionValue(arguments.Length > 0 ? bridge.GetMana(Arg(0)) : bridge.Mana);

UO.GetMaxHP

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

Firmas de C#

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

Lee la salud máxima del modelo local.

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

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.GetMaxHP();
UO.Print("GetMaxHP: " + 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.GetMaxHP();
UO.Print("GetMaxHP: " + 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.GetMaxHP();
    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:

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

Parámetros: Sin parámetros.

Resultado: int / Integer.

Durante la llamada:

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

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

UO.GetMaxHP(id) — UO.GetMaxHP(Any)

Parámetros: id (Any/Integer/String)

Resultado: int / Any.

Durante la llamada:

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

case "getmaxhp": return new InjectionValue(bridge.GetMaxHP(Arg(0, bridge.Self)));

UO.GetMaxHP(id) — UO.GetMaxHP(Integer)

Parámetros: id (Any/Integer/String)

Resultado: int / Integer.

Durante la llamada:

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

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

UO.GetMaxHP(id) — UO.GetMaxHP(String)

Parámetros: id (Any/Integer/String)

Resultado: int / Integer.

Durante la llamada:

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

public int GetMaxHP(string id) => GetMaxHP(GetObject(id));

UO.GetMaxLife

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

Firmas de C#

int UO.GetMaxLife();

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.GetMaxLife();
UO.Print("GetMaxLife: " + 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.GetMaxLife();
UO.Print("GetMaxLife: " + 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.GetMaxLife();
    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.GetMaxLife();
    }

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

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

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

Firmas de C#

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

Lee el maná máximo 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 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.

var result = UO.GetMaxMana();
UO.Print("GetMaxMana: " + 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.GetMaxMana();
UO.Print("GetMaxMana: " + 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.GetMaxMana();
    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:

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

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

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

UO.GetMaxMana(objID) — UO.GetMaxMana(Any)

Parámetros: objID (Any)

Resultado: dynamic / Any.

Durante la llamada:

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

case "getmaxmana": return new InjectionValue(bridge.GetMaxMana(Arg(0, bridge.Self)));

UO.GetMaxStam

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

Firmas de C#

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

Lee la resistencia máxima 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 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.

var result = UO.GetMaxStam();
UO.Print("GetMaxStam: " + 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.GetMaxStam();
UO.Print("GetMaxStam: " + 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.GetMaxStam();
    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:

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

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

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

UO.GetMaxStam(objID) — UO.GetMaxStam(Any)

Parámetros: objID (Any)

Resultado: dynamic / Any.

Durante la llamada:

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

case "getmaxstam": return new InjectionValue(bridge.GetMaxStamina(Arg(0, bridge.Self)));

UO.GetMaxStamina

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

Firmas de C#

int UO.GetMaxStamina();

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.

var result = UO.GetMaxStamina();
UO.Print("GetMaxStamina: " + 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.GetMaxStamina();
UO.Print("GetMaxStamina: " + 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.GetMaxStamina();
    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.GetMaxStamina();
    }

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

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

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


UO.GetMaxWeight

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

Firmas de C#

int UO.GetMaxWeight();

Lee el contador de estado de tu personaje: peso máximo en piedras.

Parámetros

No hay parámetros.

Valor devuelto

int — peso máximo 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.WeightMax 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.
  • MaxWeight lee el caché WeightMax. El estado nativo type >= 5 establece el límite del servidor en UInt16, incluso si es igual a 0. El antiguo estado extendido lo calcula una vez al recibirlo: protocolo UO >= 5.0.0a - 7 * piso(Strength / 2) + 40; el más antiguo es Strength * 4 + 25. El resultado se guarda como UInt16; los valores extremos están envueltos en módulo 65536. Convertir.ToString=101 da 390 o 429 respectivamente. Al cambiar Strength por separado, el captador no vuelve a calcular el límite.
  • 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.GetMaxWeight();
UO.Print("GetMaxWeight: " + 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.GetMaxWeight();
UO.Print("WeightMax: " + 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.GetMaxWeight();
    await Delay(500);
    var after = UO.GetMaxWeight();
    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.Weight();
        var maximum = UO.GetMaxWeight();
        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.GetMaxWeight() — UO.GetMaxWeight()

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

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


UO.GetParalisa

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

Firmas de C#

int UO.GetParalisa();
int UO.GetParalisa(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.GetParalisa();
UO.Print("GetParalisa: " + 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.GetParalisa();
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.GetParalisa(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.GetParalisa()) == true) && Truth(attempts < 10))
        {
            await Delay(100);
            attempts = attempts + 1;
        }

        if (Truth(UO.IsNPC("self")))
        {
            if (Truth(Truth(UO.GetParalisa()) == 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.GetParalisa() — UO.GetParalisa()

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.GetParalisa(value) — UO.GetParalisa(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.GetParalysed

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

Firmas de C#

int UO.GetParalysed();
int UO.GetParalysed(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.GetParalysed();
UO.Print("GetParalysed: " + 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.GetParalysed();
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.GetParalysed(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.GetParalysed()) == true) && Truth(attempts < 10))
        {
            await Delay(100);
            attempts = attempts + 1;
        }

        if (Truth(UO.IsNPC("self")))
        {
            if (Truth(Truth(UO.GetParalysed()) == 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.GetParalysed() — UO.GetParalysed()

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.GetParalysed(value) — UO.GetParalysed(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.GetParalyzed

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

Firmas de C#

int UO.GetParalyzed();
int UO.GetParalyzed(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.GetParalyzed();
UO.Print("GetParalyzed: " + 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.GetParalyzed();
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.GetParalyzed(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.GetParalyzed()) == true) && Truth(attempts < 10))
        {
            await Delay(100);
            attempts = attempts + 1;
        }

        if (Truth(UO.IsNPC("self")))
        {
            if (Truth(Truth(UO.GetParalyzed()) == 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.GetParalyzed() — UO.GetParalyzed()

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.GetParalyzed(value) — UO.GetParalyzed(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.GetPhysicalResist

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

Firmas de C#

int UO.GetPhysicalResist();

Lee el campo de resistencia del personaje actual: armadura física/resistencia.

Parámetros

No hay parámetros.

Valor devuelto

int: valor de estado firmado, -32768..32767 en el modelo de cliente. El valor negativo se mantiene. 0 puede ser una resistencia real, falta de datos o un jugador perdido/destruido; GetResist también da 0 para un selector desconocido. Esto no es un límite bool, ID, de habilidad o resistencia. 1 significa un punto, no éxito.

Comportamiento

  • El comando no acepta argumentos. Utilice las firmas exactas anteriores.
  • La lectura del hilo del juego requiere Jugador.PhysicalResistance 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.
  • PhysicalResistance - campo de armadura/estado del servidor: el servidor clásico puede transmitir la clasificación de armadura y las reglas con resistencias pueden transmitir resistencia física. API no convierte de uno a otro y no calcula el porcentaje de reducción de daño. Armor y los alias físicos leen el mismo campo.
  • CharacterStatus verifica el cuerpo requerido antes de cambiar el nombre, la salud y las características propias, luego traduce cada palabra de resistencia a un Int16 firmado. Un cuerpo obligatorio recortado no modifica los datos anteriores. La cola opcional type 6 conserva las mismas reglas; Los comandos de resistencia no leen los límites máximos.
  • 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.
  • 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.

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

1. Imprimir valor guardado - script directo

Parámetros y flujo de ejecución:

  • El valor almacena el resultado de una llamada. Convertir.ToString formatea el número del registro. No hay argumentos: puedes leer tu propio personaje.
var value = UO.GetPhysicalResist();
UO.Print("PhysicalResistance: " + Convert.ToString(value));

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

Parámetros y flujo de ejecución:

  • Entre antes y después hay UO.Wait(500) milisegundos; la diferencia puede ser negativa. Es posible que se pierdan actualizaciones provisionales. La pausa se refiere al ejemplo, no al retraso API.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var before = UO.GetPhysicalResist();
    await Delay(500);
    var after = UO.GetPhysicalResist();
    var difference = after - before;
    UO.Print("Resistance change: " + Convert.ToString(difference));
    return null;
}

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

3. Función de prueba de resistencia mínima completa: clase de script

Parámetros y flujo de ejecución:

  • mínimo=50 es un ejemplo de requisito, no de límite de clientes. ResistanceAtLeast rechaza al jugador que falta, lee un valor y devuelve bool: true o false si el valor >= mínimo. La resistencia en sí no es bool. La función se declara completamente a continuació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(ResistanceAtLeast(50)) == true))
        {
            UO.Print("Local resistance requirement met");
        }
        else
        {
            UO.Print("Requirement not met or no player");
        }

        return null;
    }

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

        var value = UO.GetPhysicalResist();
        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.GetPhysicalResist() — UO.GetPhysicalResist()

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

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


UO.GetPlayerStatusText

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

Firmas de C#

dynamic UO.GetPlayerStatusText(object? objID);

Genera un texto breve del nombre y la salud del objeto.

Parámetros

  • objID — Serie/ID de un objeto específico: int, cadena decimal/hexadecimal o alias de conjunto self, backpack, lasttarget, lastobject o nombre AddObject. Esto no es graphic/type.

Valor devuelto

string en el formato "nombre HP/MaxHP". Por ejemplo "Cuervo 75/100". Para un objeto desconocido, normalmente "0/0" con un espacio inicial. Esto es texto, no estructura, bool o un mensaje de estado abierto.

Comportamiento

  • GetName/GetHP/GetMaxHP se leen sin solicitar una actualización. No analice el texto por espacios para obtener ID o HP: el nombre puede contener espacios, use comandos getter separados para los números.

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

1. Muestra tu salud - guión directo

Parámetros y flujo de ejecución:

  • ObjID=self - carácter actual.
  • Print muestra el texto terminado en el diario.
UO.Print(UO.GetPlayerStatusText("self"));

2. Verifique el objetivo antes de mostrarlo: función de secuencia de comandos

Parámetros y flujo de ejecución:

  • ObjID=serial del último objetivo.
  • Exists evita la salida de un objeto desconocido como 0/0.
return  RunScenario();
 object? RunScenario()
{
    var target = UO.GetSerial("lasttarget");
    if (Truth(UO.Exists(target)))
    {
        UO.Print(UO.GetPlayerStatusText(target));
    }

    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. Guardar dos instantáneas: clase de secuencia de comandos

Parámetros y flujo de ejecución:

  • 500 - milisegundos entre lecturas.
  • Se compara el texto del nombre/HP, no todas las características del personaje.
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.GetPlayerStatusText("self");
        await Delay(500);
        var after = UO.GetPlayerStatusText("self");
        if (Truth(before != after))
        {
            UO.Print(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.GetPlayerStatusText(objID) — UO.GetPlayerStatusText(Any)

Parámetros: objID (Any)

Resultado: dynamic / Any.

Durante la llamada:

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

case "getplayerstatustext": return new InjectionValue(bridge.GetName(Arg(0)) + " " + bridge.GetHP(Arg(0)) + "/" + bridge.GetMaxHP(Arg(0)));

UO.GetPoisonResist

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

Firmas de C#

int UO.GetPoisonResist();

Lee el campo de resistencia del personaje actual: veneno.

Parámetros

No hay parámetros.

Valor devuelto

int: valor de estado firmado, -32768..32767 en el modelo de cliente. El valor negativo se mantiene. 0 puede ser una resistencia real, falta de datos o un jugador perdido/destruido; GetResist también da 0 para un selector desconocido. Esto no es un límite bool, ID, de habilidad o resistencia. 1 significa un punto, no éxito.

Comportamiento

  • El comando no acepta argumentos. Utilice las firmas exactas anteriores.
  • La lectura del hilo del juego requiere Jugador.PoisonResistance 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.
  • Los campos elementales vienen en formato extendido CharacterStatus (0x11), type >= 4. El comando en sí no verifica la época del servidor. El estado compacto/antiguo sin estos campos deja el caché anterior; El nuevo jugador es inicialmente 0. La resistencia al veneno no es una bandera Poisoned; Tampoco es una habilidad de resistencia a hechizos.
  • CharacterStatus verifica el cuerpo requerido antes de cambiar el nombre, la salud y las características propias, luego traduce cada palabra de resistencia a un Int16 firmado. Un cuerpo obligatorio recortado no modifica los datos anteriores. La cola opcional type 6 conserva las mismas reglas; Los comandos de resistencia no leen los límites máximos.
  • 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.
  • 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.

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

1. Imprimir valor guardado - script directo

Parámetros y flujo de ejecución:

  • El valor almacena el resultado de una llamada. Convertir.ToString formatea el número del registro. No hay argumentos: puedes leer tu propio personaje.
var value = UO.GetPoisonResist();
UO.Print("PoisonResistance: " + Convert.ToString(value));

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

Parámetros y flujo de ejecución:

  • Entre antes y después hay UO.Wait(500) milisegundos; la diferencia puede ser negativa. Es posible que se pierdan actualizaciones provisionales. La pausa se refiere al ejemplo, no al retraso API.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var before = UO.GetPoisonResist();
    await Delay(500);
    var after = UO.GetPoisonResist();
    var difference = after - before;
    UO.Print("Resistance change: " + Convert.ToString(difference));
    return null;
}

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

3. Función de prueba de resistencia mínima completa: clase de script

Parámetros y flujo de ejecución:

  • mínimo=50 es un ejemplo de requisito, no de límite de clientes. ResistanceAtLeast rechaza al jugador que falta, lee un valor y devuelve bool: true o false si el valor >= mínimo. La resistencia en sí no es bool. La función se declara completamente a continuació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(ResistanceAtLeast(50)) == true))
        {
            UO.Print("Local resistance requirement met");
        }
        else
        {
            UO.Print("Requirement not met or no player");
        }

        return null;
    }

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

        var value = UO.GetPoisonResist();
        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.GetPoisonResist() — UO.GetPoisonResist()

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

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


UO.GetPoisoned

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

Firmas de C#

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

Comprueba el envenenamiento del personaje.

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 - 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.GetPoisoned();
UO.Print("GetPoisoned: " + 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.GetPoisoned();
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.GetPoisoned(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.GetPoisoned();
        await Delay(500);
        var after = UO.GetPoisoned();
        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.GetPoisoned() — UO.GetPoisoned()

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.GetPoisoned(value) — UO.GetPoisoned(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.Poisoned(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.GetRace

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

Firmas de C#

int UO.GetRace();

Lee la raza del personaje del modelo del cliente.

Parámetros

No hay parámetros.

Valor devuelto

int — 1=humano, 2=elfo, 3=gárgola según el modelo del cliente. 0 significa que no hay ningún carácter cargado. No es body/graphic ni serial.

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.GetRace();
UO.Print("GetRace: " + 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. La raza del personaje se almacena en valor.
  • Convertir.ToString convierte el número que se generará y no cambia el significado del resultado.
var value = UO.GetRace();
UO.Print("GetRace: " + 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. La raza del personaje 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.GetRace();
    if (Truth(value == 3))
    {
        UO.Print("Player race is gargoyle");
    }

    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.
  • Cambio comparado: carrera de personajes. 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.GetRace();
        await Delay(1000);
        var after = UO.GetRace();
        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.GetRace() — UO.GetRace()

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

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


UO.GetResist

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

Firmas de C#

int UO.GetResist(object? resistance);

Lee una de las resistencias de tu personaje usando un selector numérico o de cadena.

Parámetros

  • resistance: se requiere resistencia. Números: 0=físico, 1=fuego, 2=frío, 3=veneno, 4=energía. Líneas: física/física/armadura, fuego, frío, veneno, energía. Se ignoran las mayúsculas y minúsculas y los espacios finales. No hay serial, type, hue, vista o segundo argumento.

Valor devuelto

int: valor de estado firmado, -32768..32767 en el modelo de cliente. El valor negativo se mantiene. 0 puede ser una resistencia real, falta de datos o un jugador perdido/destruido; GetResist también da 0 para un selector desconocido. Esto no es un límite bool, ID, de habilidad o resistencia. 1 significa un punto, no éxito.

Comportamiento

  • GetResistance primero distingue el tipo de valor: las cadenas "1" y "0" son nombres desconocidos, dan 0 y no son selectores numéricos. Un double que no es una cadena descarta la fracción a cero: 1.9 -> fuego, -0.9 -> físico. true=1 selecciona fuego, false=0 selecciona físico; Array/null también se convierte a 0. Utilice un número entero explícito o un nombre válido. Los nombres AddObject no están permitidos.
  • GetResistance selecciona exactamente un campo de puente. Los números/nombres desconocidos dan int 0 sin leer el campo. El comando no elimina cinco valores de forma atómica y no cambia la resistencia.
  • PhysicalResistance - campo de armadura/estado del servidor: el servidor clásico puede transmitir la clasificación de armadura y las reglas con resistencias pueden transmitir resistencia física. API no convierte de uno a otro y no calcula el porcentaje de reducción de daño. Armor y los alias físicos leen el mismo campo.
  • Los campos elementales vienen en formato extendido CharacterStatus (0x11), type >= 4. El comando en sí no verifica la época del servidor. El estado compacto/antiguo sin estos campos deja el caché anterior; El nuevo jugador es inicialmente 0. La resistencia al veneno no es una bandera Poisoned; Tampoco es una habilidad de resistencia a hechizos.
  • CharacterStatus verifica el cuerpo requerido antes de cambiar el nombre, la salud y las características propias, luego traduce cada palabra de resistencia a un Int16 firmado. Un cuerpo obligatorio recortado no modifica los datos anteriores. La cola opcional type 6 conserva las mismas reglas; Los comandos de resistencia no leen los límites máximos.
  • 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.

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

1. Seleccionar por nombre con mayúsculas y minúsculas diferentes: guión directo

Parámetros y flujo de ejecución:

  • Resistance=" FiRe " selecciona fuego después de eliminar los espacios finales y no distingue entre mayúsculas y minúsculas. el valor sigue siendo un número con signo; la vista no aparece.
var value = UO.GetResist(" FiRe ");
UO.Print("Fire resistance: " + Convert.ToString(value));

2. Comparar selectores numéricos y de cadena: función de script

Parámetros y flujo de ejecución:

  • 2 selecciona frío; "veneno" - veneno. Estos son selectores, no serial. Al comparar dos instantáneas se obtiene bool; La resistencia al veneno no indica si un personaje está envenenado.
return  RunScenario();
 object? RunScenario()
{
    var cold = UO.GetResist(2);
    var poison = UO.GetResist("poison");
    if (Truth(cold < poison))
    {
        UO.Print("Cold resistance is lower");
    }
    else
    {
        UO.Print("Cold resistance is equal or higher");
    }

    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 de prueba de resistencia mínima completa: clase de script

Parámetros y flujo de ejecución:

  • mínimo=50 es un ejemplo de requisito, no de límite de clientes. ResistanceAtLeast rechaza al jugador que falta, lee un valor y devuelve bool: true o false si el valor >= mínimo. La resistencia en sí no es bool. La función se declara completamente a continuación.
  • el selector se pasa de la función a GetResist sin cambios; el ejemplo usa "fuego". La función comprueba la presencia del jugador, pero no valida el selector arbitrario y no confirma la actualidad del estado. Utilice el selector de la lista anterior.
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(ResistanceAtLeast("fire", 50)) == true))
        {
            UO.Print("Local fire resistance requirement met");
        }
        else
        {
            UO.Print("Requirement not met or no player");
        }

        return null;
    }

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

        var value = UO.GetResist(selector);
        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.GetResist(resistance) — UO.GetResist(Any)

Parámetros: resistance (Any)

Resultado: int / Integer.

Durante la llamada:

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

private int GetResistance(InjectionValue resistance)

        {

            if (resistance.Kind != InjectionValueKind.String)

            {

                switch (NumberConversions.ToInt(resistance))

                {

                    case 0: return bridge.Armor;

                    case 1: return bridge.FireResistance;

                    case 2: return bridge.ColdResistance;

                    case 3: return bridge.PoisonResistance;

                    case 4: return bridge.EnergyResistance;

                    default: return 0;

                }

            }



            switch ((resistance.String ?? string.Empty).Trim().ToLowerInvariant())

            {

                case "physical":

                case "phys":

                case "armor": return bridge.Armor;

                case "fire": return bridge.FireResistance;

                case "cold": return bridge.ColdResistance;

                case "poison": return bridge.PoisonResistance;

                case "energy": return bridge.EnergyResistance;

                default: return 0;

            }

        }

UO.GetResistCold

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

Firmas de C#

int UO.GetResistCold();

Lee el campo de resistencia del personaje actual: frío.

Parámetros

No hay parámetros.

Valor devuelto

int: valor de estado firmado, -32768..32767 en el modelo de cliente. El valor negativo se mantiene. 0 puede ser una resistencia real, falta de datos o un jugador perdido/destruido; GetResist también da 0 para un selector desconocido. Esto no es un límite bool, ID, de habilidad o resistencia. 1 significa un punto, no éxito.

Comportamiento

  • El comando no acepta argumentos. Utilice las firmas exactas anteriores.
  • La lectura del hilo del juego requiere Jugador.ColdResistance 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.
  • Los campos elementales vienen en formato extendido CharacterStatus (0x11), type >= 4. El comando en sí no verifica la época del servidor. El estado compacto/antiguo sin estos campos deja el caché anterior; El nuevo jugador es inicialmente 0. La resistencia al veneno no es una bandera Poisoned; Tampoco es una habilidad de resistencia a hechizos.
  • CharacterStatus verifica el cuerpo requerido antes de cambiar el nombre, la salud y las características propias, luego traduce cada palabra de resistencia a un Int16 firmado. Un cuerpo obligatorio recortado no modifica los datos anteriores. La cola opcional type 6 conserva las mismas reglas; Los comandos de resistencia no leen los límites máximos.
  • 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.
  • 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.

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

1. Imprimir valor guardado - script directo

Parámetros y flujo de ejecución:

  • El valor almacena el resultado de una llamada. Convertir.ToString formatea el número del registro. No hay argumentos: puedes leer tu propio personaje.
var value = UO.GetResistCold();
UO.Print("ColdResistance: " + Convert.ToString(value));

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

Parámetros y flujo de ejecución:

  • Entre antes y después hay UO.Wait(500) milisegundos; la diferencia puede ser negativa. Es posible que se pierdan actualizaciones provisionales. La pausa se refiere al ejemplo, no al retraso API.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var before = UO.GetResistCold();
    await Delay(500);
    var after = UO.GetResistCold();
    var difference = after - before;
    UO.Print("Resistance change: " + Convert.ToString(difference));
    return null;
}

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

3. Función de prueba de resistencia mínima completa: clase de script

Parámetros y flujo de ejecución:

  • mínimo=50 es un ejemplo de requisito, no de límite de clientes. ResistanceAtLeast rechaza al jugador que falta, lee un valor y devuelve bool: true o false si el valor >= mínimo. La resistencia en sí no es bool. La función se declara completamente a continuació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(ResistanceAtLeast(50)) == true))
        {
            UO.Print("Local resistance requirement met");
        }
        else
        {
            UO.Print("Requirement not met or no player");
        }

        return null;
    }

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

        var value = UO.GetResistCold();
        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.GetResistCold() — UO.GetResistCold()

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

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


UO.GetResistEnergy

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

Firmas de C#

int UO.GetResistEnergy();

Lee el campo de resistencia del personaje actual: energía.

Parámetros

No hay parámetros.

Valor devuelto

int: valor de estado firmado, -32768..32767 en el modelo de cliente. El valor negativo se mantiene. 0 puede ser una resistencia real, falta de datos o un jugador perdido/destruido; GetResist también da 0 para un selector desconocido. Esto no es un límite bool, ID, de habilidad o resistencia. 1 significa un punto, no éxito.

Comportamiento

  • El comando no acepta argumentos. Utilice las firmas exactas anteriores.
  • La lectura del hilo del juego requiere Jugador.EnergyResistance 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.
  • Los campos elementales vienen en formato extendido CharacterStatus (0x11), type >= 4. El comando en sí no verifica la época del servidor. El estado compacto/antiguo sin estos campos deja el caché anterior; El nuevo jugador es inicialmente 0. La resistencia al veneno no es una bandera Poisoned; Tampoco es una habilidad de resistencia a hechizos.
  • CharacterStatus verifica el cuerpo requerido antes de cambiar el nombre, la salud y las características propias, luego traduce cada palabra de resistencia a un Int16 firmado. Un cuerpo obligatorio recortado no modifica los datos anteriores. La cola opcional type 6 conserva las mismas reglas; Los comandos de resistencia no leen los límites máximos.
  • 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.
  • 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.

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

1. Imprimir valor guardado - script directo

Parámetros y flujo de ejecución:

  • El valor almacena el resultado de una llamada. Convertir.ToString formatea el número del registro. No hay argumentos: puedes leer tu propio personaje.
var value = UO.GetResistEnergy();
UO.Print("EnergyResistance: " + Convert.ToString(value));

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

Parámetros y flujo de ejecución:

  • Entre antes y después hay UO.Wait(500) milisegundos; la diferencia puede ser negativa. Es posible que se pierdan actualizaciones provisionales. La pausa se refiere al ejemplo, no al retraso API.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var before = UO.GetResistEnergy();
    await Delay(500);
    var after = UO.GetResistEnergy();
    var difference = after - before;
    UO.Print("Resistance change: " + Convert.ToString(difference));
    return null;
}

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

3. Función de prueba de resistencia mínima completa: clase de script

Parámetros y flujo de ejecución:

  • mínimo=50 es un ejemplo de requisito, no de límite de clientes. ResistanceAtLeast rechaza al jugador que falta, lee un valor y devuelve bool: true o false si el valor >= mínimo. La resistencia en sí no es bool. La función se declara completamente a continuació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(ResistanceAtLeast(50)) == true))
        {
            UO.Print("Local resistance requirement met");
        }
        else
        {
            UO.Print("Requirement not met or no player");
        }

        return null;
    }

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

        var value = UO.GetResistEnergy();
        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.GetResistEnergy() — UO.GetResistEnergy()

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

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


UO.GetResistFire

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

Firmas de C#

int UO.GetResistFire();

Lee el campo de resistencia del personaje actual: fuego.

Parámetros

No hay parámetros.

Valor devuelto

int: valor de estado firmado, -32768..32767 en el modelo de cliente. El valor negativo se mantiene. 0 puede ser una resistencia real, falta de datos o un jugador perdido/destruido; GetResist también da 0 para un selector desconocido. Esto no es un límite bool, ID, de habilidad o resistencia. 1 significa un punto, no éxito.

Comportamiento

  • El comando no acepta argumentos. Utilice las firmas exactas anteriores.
  • La lectura del hilo del juego requiere Jugador.FireResistance 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.
  • Los campos elementales vienen en formato extendido CharacterStatus (0x11), type >= 4. El comando en sí no verifica la época del servidor. El estado compacto/antiguo sin estos campos deja el caché anterior; El nuevo jugador es inicialmente 0. La resistencia al veneno no es una bandera Poisoned; Tampoco es una habilidad de resistencia a hechizos.
  • CharacterStatus verifica el cuerpo requerido antes de cambiar el nombre, la salud y las características propias, luego traduce cada palabra de resistencia a un Int16 firmado. Un cuerpo obligatorio recortado no modifica los datos anteriores. La cola opcional type 6 conserva las mismas reglas; Los comandos de resistencia no leen los límites máximos.
  • 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.
  • 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.

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

1. Imprimir valor guardado - script directo

Parámetros y flujo de ejecución:

  • El valor almacena el resultado de una llamada. Convertir.ToString formatea el número del registro. No hay argumentos: puedes leer tu propio personaje.
var value = UO.GetResistFire();
UO.Print("FireResistance: " + Convert.ToString(value));

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

Parámetros y flujo de ejecución:

  • Entre antes y después hay UO.Wait(500) milisegundos; la diferencia puede ser negativa. Es posible que se pierdan actualizaciones provisionales. La pausa se refiere al ejemplo, no al retraso API.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var before = UO.GetResistFire();
    await Delay(500);
    var after = UO.GetResistFire();
    var difference = after - before;
    UO.Print("Resistance change: " + Convert.ToString(difference));
    return null;
}

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

3. Función de prueba de resistencia mínima completa: clase de script

Parámetros y flujo de ejecución:

  • mínimo=50 es un ejemplo de requisito, no de límite de clientes. ResistanceAtLeast rechaza al jugador que falta, lee un valor y devuelve bool: true o false si el valor >= mínimo. La resistencia en sí no es bool. La función se declara completamente a continuació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(ResistanceAtLeast(50)) == true))
        {
            UO.Print("Local resistance requirement met");
        }
        else
        {
            UO.Print("Requirement not met or no player");
        }

        return null;
    }

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

        var value = UO.GetResistFire();
        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.GetResistFire() — UO.GetResistFire()

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

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


UO.GetResistPhysical

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

Firmas de C#

int UO.GetResistPhysical();

Lee el campo de resistencia del personaje actual: armadura física/resistencia.

Parámetros

No hay parámetros.

Valor devuelto

int: valor de estado firmado, -32768..32767 en el modelo de cliente. El valor negativo se mantiene. 0 puede ser una resistencia real, falta de datos o un jugador perdido/destruido; GetResist también da 0 para un selector desconocido. Esto no es un límite bool, ID, de habilidad o resistencia. 1 significa un punto, no éxito.

Comportamiento

  • El comando no acepta argumentos. Utilice las firmas exactas anteriores.
  • La lectura del hilo del juego requiere Jugador.PhysicalResistance 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.
  • PhysicalResistance - campo de armadura/estado del servidor: el servidor clásico puede transmitir la clasificación de armadura y las reglas con resistencias pueden transmitir resistencia física. API no convierte de uno a otro y no calcula el porcentaje de reducción de daño. Armor y los alias físicos leen el mismo campo.
  • CharacterStatus verifica el cuerpo requerido antes de cambiar el nombre, la salud y las características propias, luego traduce cada palabra de resistencia a un Int16 firmado. Un cuerpo obligatorio recortado no modifica los datos anteriores. La cola opcional type 6 conserva las mismas reglas; Los comandos de resistencia no leen los límites máximos.
  • 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.
  • 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.

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

1. Imprimir valor guardado - script directo

Parámetros y flujo de ejecución:

  • El valor almacena el resultado de una llamada. Convertir.ToString formatea el número del registro. No hay argumentos: puedes leer tu propio personaje.
var value = UO.GetResistPhysical();
UO.Print("PhysicalResistance: " + Convert.ToString(value));

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

Parámetros y flujo de ejecución:

  • Entre antes y después hay UO.Wait(500) milisegundos; la diferencia puede ser negativa. Es posible que se pierdan actualizaciones provisionales. La pausa se refiere al ejemplo, no al retraso API.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var before = UO.GetResistPhysical();
    await Delay(500);
    var after = UO.GetResistPhysical();
    var difference = after - before;
    UO.Print("Resistance change: " + Convert.ToString(difference));
    return null;
}

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

3. Función de prueba de resistencia mínima completa: clase de script

Parámetros y flujo de ejecución:

  • mínimo=50 es un ejemplo de requisito, no de límite de clientes. ResistanceAtLeast rechaza al jugador que falta, lee un valor y devuelve bool: true o false si el valor >= mínimo. La resistencia en sí no es bool. La función se declara completamente a continuació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(ResistanceAtLeast(50)) == true))
        {
            UO.Print("Local resistance requirement met");
        }
        else
        {
            UO.Print("Requirement not met or no player");
        }

        return null;
    }

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

        var value = UO.GetResistPhysical();
        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.GetResistPhysical() — UO.GetResistPhysical()

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

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


UO.GetResistPoison

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

Firmas de C#

int UO.GetResistPoison();

Lee el campo de resistencia del personaje actual: veneno.

Parámetros

No hay parámetros.

Valor devuelto

int: valor de estado firmado, -32768..32767 en el modelo de cliente. El valor negativo se mantiene. 0 puede ser una resistencia real, falta de datos o un jugador perdido/destruido; GetResist también da 0 para un selector desconocido. Esto no es un límite bool, ID, de habilidad o resistencia. 1 significa un punto, no éxito.

Comportamiento

  • El comando no acepta argumentos. Utilice las firmas exactas anteriores.
  • La lectura del hilo del juego requiere Jugador.PoisonResistance 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.
  • Los campos elementales vienen en formato extendido CharacterStatus (0x11), type >= 4. El comando en sí no verifica la época del servidor. El estado compacto/antiguo sin estos campos deja el caché anterior; El nuevo jugador es inicialmente 0. La resistencia al veneno no es una bandera Poisoned; Tampoco es una habilidad de resistencia a hechizos.
  • CharacterStatus verifica el cuerpo requerido antes de cambiar el nombre, la salud y las características propias, luego traduce cada palabra de resistencia a un Int16 firmado. Un cuerpo obligatorio recortado no modifica los datos anteriores. La cola opcional type 6 conserva las mismas reglas; Los comandos de resistencia no leen los límites máximos.
  • 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.
  • 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.

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

1. Imprimir valor guardado - script directo

Parámetros y flujo de ejecución:

  • El valor almacena el resultado de una llamada. Convertir.ToString formatea el número del registro. No hay argumentos: puedes leer tu propio personaje.
var value = UO.GetResistPoison();
UO.Print("PoisonResistance: " + Convert.ToString(value));

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

Parámetros y flujo de ejecución:

  • Entre antes y después hay UO.Wait(500) milisegundos; la diferencia puede ser negativa. Es posible que se pierdan actualizaciones provisionales. La pausa se refiere al ejemplo, no al retraso API.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var before = UO.GetResistPoison();
    await Delay(500);
    var after = UO.GetResistPoison();
    var difference = after - before;
    UO.Print("Resistance change: " + Convert.ToString(difference));
    return null;
}

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

3. Función de prueba de resistencia mínima completa: clase de script

Parámetros y flujo de ejecución:

  • mínimo=50 es un ejemplo de requisito, no de límite de clientes. ResistanceAtLeast rechaza al jugador que falta, lee un valor y devuelve bool: true o false si el valor >= mínimo. La resistencia en sí no es bool. La función se declara completamente a continuació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(ResistanceAtLeast(50)) == true))
        {
            UO.Print("Local resistance requirement met");
        }
        else
        {
            UO.Print("Requirement not met or no player");
        }

        return null;
    }

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

        var value = UO.GetResistPoison();
        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.GetResistPoison() — UO.GetResistPoison()

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

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

Clone this wiki locally