Skip to content

ES UO Topic character Part 4

Codex edited this page Oct 12, 2026 · 4 revisions

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

Personaje — 4

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

Partes de la referencia

1 · 2 · 3 · 4 · 5

Referencia completa de comandos


UO.MaxStamina

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

Firmas de C#

int UO.MaxStamina();

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

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

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

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

Firmas de C#

int UO.MaxWeight();

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.MaxWeight();
UO.Print("MaxWeight: " + 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.MaxWeight();
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.MaxWeight();
    await Delay(500);
    var after = UO.MaxWeight();
    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.MaxWeight();
        if (Truth(maximum <= 0))
        {
            return false;
        }

        return extra <= maximum - current;
    }

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

Implementación del comando

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

UO.MaxWeight() — UO.MaxWeight()

Parámetros: Sin parámetros.

Resultado: int / Integer.

Durante la llamada:

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

public int MaxWeight() => bridge.MaxWeight;

UO.Mount

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

Firmas de C#

void UO.Mount();
void UO.Mount(object? mount);

Solicitudes para montar el montaje/artículo seleccionado.

Parámetros

  • mount - Objetivos serial opcionales. Sin argumento, se toma LastTarget. Esto es ID, no graphic/type. Se debe cargar un mobile activo y a no más de una celda de distancia; el objeto debe estar en el inventario del personaje (por ejemplo, una montura etérea). Un elemento arbitrario del inventario no se puede montar: el servidor decide.

Valor devuelto

void: sin valor de retorno. Llame como una línea separada, no compare el resultado con 1/true. Verifique la capa 25 después de que el servidor responda.

Comportamiento

  • El comando envía una solicitud para utilizar el objeto de protocolo UO (0x06), sin emulación de mouse. Omite el controlador común de clic double de la interfaz: en modo guerra, la solicitud no es reemplazada por un ataque.
  • El estado de la montura se lee desde la capa 25. Cambia después de los datos del servidor; regresar del comando no confirma la finalización del aterrizaje/desmontaje.
  • Las solicitudes repetidas de montaje/desmontaje se fusionan temporalmente: no se envía ninguna solicitud nueva hasta que hayan pasado un cambio de capa, un cambio de carácter o 5 segundos. Esto protege contra la duplicación entre scripts.
  • Si el personaje está ausente, fuera del juego o por un personaje muerto, la solicitud no se envía. Las reglas finales de propiedad, disponibilidad y asientos las determina el servidor.
  • Si el personaje ya está montado, el objetivo es 0/self, está destruido, muerto o no está disponible en las condiciones especificadas, la solicitud no se envía. El objeto en el suelo es rechazado.

Scripts independientes de C#

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

Ejemplo sencillo

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

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

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

1. Aterrizando en lasttarget sin parámetros - script directo

Parámetros y flujo de ejecución:

  • Sin argumentos: se utiliza LastTarget. Print no confirma el consentimiento del servidor.
if (Truth(UO.GetSerial("lasttarget") == "0x00000000"))
{
    UO.Print("Mount target not selected");
    return null;
}
UO.Mount();
UO.Print("Mount request processed locally");

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

2. Pase ID explícito y verifique la capa - función de script

Parámetros y flujo de ejecución:

  • mount=target, el número 25 se refiere a la capa de carácter personalizado. Si ya viaja, no se requiere una nueva solicitud.
return  RunScenario();
 object? RunScenario()
{
    var target = UO.GetSerial("lasttarget");
    if (Truth(target == "0x00000000"))
    {
        return null;
    }

    if (Truth(UO.ObjAtLayer(25) == 0))
    {
        UO.Mount(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. Función completa con espera limitada: clase de secuencia de comandos

Parámetros y flujo de ejecución:

  • objetivo — objetivos ID. Una solicitud, luego hasta 20 espera 50 ms. true/false devuelve nuestro ayudante, UO.Mount mismo devuelve Unidad.
  • false significa que la capa no apareció durante este período; Aún es posible una respuesta tardía del servidor.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

    async public Task<object?> RunScenarioAsync()
    {
        var mounted = await TryMount("lasttarget");
        UO.Print("Mounted within one second: " + Convert.ToString(mounted));
        return null;
    }

    async Task<dynamic> TryMount(dynamic target)
    {
        if (Truth(UO.ObjAtLayer(25) != 0))
        {
            return true;
        }

        if (Truth(target == "0x00000000"))
        {
            return false;
        }

        UO.Mount(target);
        var attempts = 0;
        while (Truth(attempts < 20))
        {
            if (Truth(UO.ObjAtLayer(25) != 0))
            {
                return true;
            }

            await Delay(50);
            attempts = attempts + 1;
        }

        return false;
    }

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

Parámetros: Sin parámetros.

Resultado: void / Unit.

Durante la llamada:

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

case "mount": bridge.Mount(Arg(0, bridge.LastTarget)); break;

UO.Mount(mount) — UO.Mount(Any)

Parámetros: mount (Any)

Resultado: void / Unit.

Durante la llamada:

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

case "mount": bridge.Mount(Arg(0, bridge.LastTarget)); break;

UO.ObjAtLayer

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

Firmas de C#

dynamic UO.ObjAtLayer(object? layer);

Encuentra un elemento en la capa especificada del equipo de tu propio personaje.

Parámetros

  • layer: un argumento obligatorio: número de capa 1...29 o un nombre de cadena de la lista siguiente. El número 0 y el nombre Inválido dan 0. Se ignoran las mayúsculas y minúsculas y los espacios finales del nombre. Un nombre de cadena desconocido provoca un error de secuencia de comandos; la cadena numérica "1" no reemplaza el número 1.

Valor devuelto

La forma numérica devuelve int - serial para el elemento, o 0 para una capa vacía/no válida. El formato de cadena devuelve string del formulario "0x40001001" si se encuentra el elemento; de lo contrario, int 0. Este es el ID del artículo, no el número de capa, graphic/type o la cantidad. ¿Metadatos object? La forma de cadena refleja dos posibles tipos de resultados.

Comportamiento

  • Se lee el modelo del cliente local; No hay solicitudes al servidor, ni esperas ni movimientos.
  • El resultado se refiere al momento de la lectura. Después de UO.Wait u otra acción, el objeto y sus indicadores pueden cambiar.
  • Se verifican los datos del equipo self. El equipo no abre la bolsa, no se pone el artículo ni envía una solicitud de inspección.
  • Los números fuera de 1..29 dan 0 sin conversión de módulo 256; por ejemplo, 257 no puede seleccionar la mano derecha.
  • Todas las capas numéricas y nombres de cadenas admitidos:
  • 1 OneHanded/Rhand/RightHand; 2 TwoHanded/Lhand/LeftHand; 3 Shoes; 4 Pants; 5 Shirt; 6 Helmet/Hat; 7 Gloves; 8 Ring; 9 Talisman; 10 Necklace/Neck.
  • 11 Hair; 12 Waist; 13 Torso; 14 Bracelet/Brace; 15 Face; 16 Beard; 17 Tunic; 18 Earrings/Ear; 19 Arms; 20 Cloak.
  • 21 Backpack/Bpack/BackpackLayer; 22 Robe; 23 Skirt; 24 Legs; 25 Mount; 26 ShopBuyRestock/Rstk; 27 ShopBuy/NRstk; 28 ShopSell/Sell; 29 Bank.

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.

object? item = UO.ObjAtLayer("Rhand");
if (item is string serial) UO.Print("Equipped serial: " + serial);
else UO.Print("The layer is empty");

1. Elemento a la derecha por nombre de capa: secuencia de comandos directa

Parámetros y flujo de ejecución:

  • Rhand selecciona la capa 1. Si tiene éxito, la mano es una cadena hexadecimal; en caso de ausencia, el número 0.
  • Convert.ToString le permite generar ambos tipos posibles. El resultado no puede tomarse como el graphic del arma.
object? hand = UO.ObjAtLayer("Rhand");
if (hand is string serial)
{
    UO.Print("Right hand serial: " + serial);
}
else
{
    UO.Print("Right hand is empty 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. Propiedades de elementos y capas numéricas: función de secuencia de comandos

Parámetros y flujo de ejecución:

  • El número 2 selecciona TwoHanded. Este formulario siempre devuelve int.
  • Exists comprueba que el elemento esté disponible para leer sus propiedades. GetGraphic devuelve un type separado.
return  RunScenario();
 object? RunScenario()
{
    var item = UO.ObjAtLayer(2);
    if (Truth(UO.Exists(item)))
    {
        UO.Print("Two-handed layer serial: " + Convert.ToString(item));
        UO.Print("Graphic: " + UO.GetGraphic(item));
    }

    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. Obtenga la mochila y verifique si hay una capa no válida: clase de secuencia de comandos

Parámetros y flujo de ejecución:

  • 21—capa Backpack; El resultado 0 es posible antes de cargar el equipo.
  • 257 está fuera de la lista y siempre da 0. Esta no es una designación alternativa para la capa 1.
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 bag = UO.ObjAtLayer(21);
        var invalid = UO.ObjAtLayer(257);
        UO.Print("Backpack serial: " + Convert.ToString(bag));
        UO.Print("Invalid layer: " + Convert.ToString(invalid));
        return null;
    }
}

Implementación del comando

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

UO.ObjAtLayer(layer) — UO.ObjAtLayer(Any)

Parámetros: layer (Any/String)

Resultado: dynamic / Integer.

Durante la llamada:

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

case "objatlayer":

                    return new InjectionValue(arguments[0].Kind == InjectionValueKind.String

                        ? GetObject(ObjAtLayer(Text(0))) : bridge.ObjAtLayer(Arg(0)));

UO.ObjAtLayer(layer) — UO.ObjAtLayer(String)

Parámetros: layer (Any/String)

Resultado: dynamic / Any.

Durante la llamada:

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

public InjectionValue ObjAtLayer(string layer)

        {

            var id = bridge.ObjAtLayer(ConvertLayer(layer));

            if (id == 0)

                return InjectionValue.Zero;



            return new InjectionValue("0x" + id.ToString("X8"));

        }

UO.ObjAtLayerEx

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

Firmas de C#

int UO.ObjAtLayerEx(object? layerType, object? playerID);

Lee un elemento/contenedor en la capa especificada para el carácter cargado especificado.

Parámetros

  • layerType — Número numérico de la capa 1...29. Acepta un número entero o una cadena numérica, como 26 o "0x1A". Los nombres de cadenas Rhand/ShopBuyRestock y las constantes de capa desnuda no se convierten a números aquí. Utilice un número.
  • playerID: serie de caracteres/mobile, un número, una cadena hexadecimal o un nombre de objeto que se puede resolver, como "self"/"lasttarget". El gráfico/type del artículo o ID del propio contenedor no son adecuados.

Valor devuelto

int: serial del artículo/contenedor en la capa o 0 si la capa está vacía/desconocida, el número no es válido o no hay ningún Móvil cargado. Esto no es un bool ni un número de capa.

Comportamiento

  • La lectura es local, sin target, compra, apertura de contenedores y solicitud de red.
  • Se comprueba el rango 1..29. La conversión de un parámetro de cadena inadecuado puede provocar un error; No se debe pasar un nombre de capa arbitrario en lugar de un número.
  • Hay un UO.ObjAtLayer separado disponible para un carácter personalizado con un nombre de capa de cadena. No confunda la capa con world Z, el índice estático o la coordenada gump.

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.ObjAtLayerEx(26, UO.GetSerial("lasttarget"));
UO.Print("ObjAtLayerEx: " + Convert.ToString(result));

1. Recibir un contenedor de tienda y enumerar productos: guión directo

Parámetros y flujo de ejecución:

  • LayerType=26; ID del jugador=proveedor; tienda - contenedor serial. Para GetContent se pasa la tienda, no el número de capa.
  • La matriz está indexada desde 0 hasta la longitud menos 1. Cada elemento es serial. Una matriz vacía significa que no hay elementos inmediatos cargados; la compra no se cumple.
var vendor = UO.GetSerial("lasttarget");
if (Truth(vendor == "0x00000000"))
{
    UO.Print("Vendor not selected");
    return null;
}
var shop = UO.ObjAtLayerEx(26, vendor);
if (Truth(shop == 0))
{
    UO.Print("ShopBuyRestock container is not loaded");
    return null;
}
UO.Print("Shop container ID: " + Convert.ToString(shop));
var items = UO.GetContent(shop);
var i = 0;
while (Truth(i < ArrayLength(items)))
{
    var item = items[i];
    UO.Print(UO.GetName(item) + " | ID: " + Convert.ToString(item));
    UO.Print("Graphic: " + Convert.ToString(UO.GetType(item)));
    i = i + 1;
}
UO.Print("Loaded entries: " + Convert.ToString(ArrayLength(items)));

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;

2. Seleccione los productos del graphic deseado y cuente las unidades - función de script

Parámetros y flujo de ejecución:

  • wantedType es graphic y el artículo es ID de un artículo individual. pilas cuenta registros/pilas; unidades suma el número que hay en ellas.
  • Esta es una lectura de la cantidad ya recibida, no del saldo garantizado por una compra futura. No hay ningún precio especificado aquí.
return  RunScenario();
 object? RunScenario()
{
    var vendor = UO.GetSerial("lasttarget");
    if (Truth(vendor == "0x00000000"))
    {
        UO.Print("Vendor not selected");
        return null;
    }

    var shop = UO.ObjAtLayerEx(26, vendor);
    if (Truth(shop == 0))
    {
        UO.Print("Shop layer is not loaded");
        return null;
    }

    var wantedType = 0x1766;
    var stacks = 0;
    var units = 0;
    var items = UO.GetContent(shop);
    var i = 0;
    while (Truth(i < ArrayLength(items)))
    {
        var item = items[i];
        if (Truth(UO.GetType(item) == wantedType))
        {
            stacks = stacks + 1;
            units = units + UO.GetQuantity(item);
        }

        i = i + 1;
    }

    UO.Print("Stacks: " + Convert.ToString(stacks) + " | Units: " + Convert.ToString(units));
    return null;
}

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

3. Compare tres capas de tienda mediante el procedimiento completo: clase de secuencia de comandos

Parámetros y flujo de ejecución:

  • ShowVendorLayer se declara en su totalidad. proveedor: ID NPC, layerNumber - 26/27/28, título: solo firma.
  • Es posible que el cliente desconozca los contenedores. 0 se verifica antes de GetContent: un GetContent(0) explícito significaría solicitar elementos en el terreno, lo cual no es necesario aquí.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var vendor = UO.GetSerial("lasttarget");
        if (Truth(vendor == "0x00000000"))
        {
            UO.Print("Vendor not selected");
            return null;
        }

        ShowVendorLayer(vendor, 26, "ShopBuyRestock / Rstk");
        ShowVendorLayer(vendor, 27, "ShopBuy / NRstk");
        ShowVendorLayer(vendor, 28, "ShopSell / Sell");
        return null;
    }

    void ShowVendorLayer(dynamic vendor, dynamic layerNumber, dynamic caption)
    {
        var container = UO.ObjAtLayerEx(layerNumber, vendor);
        if (Truth(container == 0))
        {
            UO.Print(caption + ": not loaded");
            return;
        }

        var items = UO.GetContent(container);
        UO.Print(caption + " | Container ID: " + Convert.ToString(container));
        UO.Print("Loaded entries: " + Convert.ToString(ArrayLength(items)));
    }

    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.ObjAtLayerEx(layerType, playerID) — UO.ObjAtLayerEx(Any,Any)

Parámetros: layerType (Any), playerID (Any)

Resultado: int / Integer.

Durante la llamada:

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

case "objatlayerex": return new InjectionValue(bridge.ObjAtLayerEx(Arg(0), Arg(1)));

UO.Paralyzed

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

Firmas de C#

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

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

Parámetros: Sin parámetros.

Resultado: int / Integer.

Durante la llamada:

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

case "paralyzed": return new InjectionValue(bridge.GetLocked(bridge.Self));

UO.Paralyzed(value) — UO.Paralyzed(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.PhysicalResist

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

Firmas de C#

int UO.PhysicalResist();

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

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

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

Firmas de C#

void UO.Poison();
void UO.Poison(object? target);

Utiliza la habilidad Envenenamiento, si es necesario, en un objetivo determinado.

Parámetros

  • target - Opcional serial/alias de destino. Sin argumentos, sólo UseSkill("Envenenamiento"). Con argumento - UseSkillAtTarget("Envenenamiento", objetivo).

Valor devuelto

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

Comportamiento

  • El comando heredado registrado no capta la resistencia al veneno ni el estado del veneno. La rama invoca la habilidad y la descarta 1/0.
  • En una forma con un objetivo, UseSkillAtTarget comprueba si hay un serial positivo, prepara el objetivo antes de solicitar la habilidad; si la habilidad no es aceptada, cancela el objetivo. No se garantiza el envenenamiento del objetivo por parte del servidor.

Scripts independientes de C#

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

Ejemplo sencillo

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

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

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

1. Llamada directa - guión directo

Parámetros y flujo de ejecución:

  • Utiliza la habilidad Envenenamiento, si es necesario, en un objetivo determinado.
UO.Poison();

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

Parámetros y flujo de ejecución:

  • El comando heredado registrado no capta la resistencia al veneno ni el estado del veneno. La rama invoca la habilidad y la descarta 1/0.
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.Exists("lasttarget")))
    {
        UO.Poison("lasttarget");
    }

    return null;
}

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

3. Función auxiliar completa: clase de script

Parámetros y flujo de ejecución:

  • En una forma con un objetivo, UseSkillAtTarget comprueba si hay un serial positivo, prepara el objetivo antes de solicitar la habilidad; si la habilidad no es aceptada, cancela el objetivo. No se garantiza el envenenamiento del objetivo por parte del servidor.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var id = UO.GetSerial("lasttarget");
        if (Truth(UO.Exists(id)))
        {
            UO.Poison(id);
            UO.Print(UO.Waiting());
        }

        return null;
    }

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

Implementación del comando

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

UO.Poison() — UO.Poison()

Parámetros: Sin parámetros.

Resultado: void / Unit.

Durante la llamada:

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

case "poison":

                    if (arguments.Length > 0) UseSkillAtTarget(new InjectionValue("Poisoning"), arguments[0]);

                    else UseSkill("Poisoning");

                    break;

UO.Poison(target) — UO.Poison(Any)

Parámetros: target (Any)

Resultado: void / Unit.

Durante la llamada:

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

case "poison":

                    if (arguments.Length > 0) UseSkillAtTarget(new InjectionValue("Poisoning"), arguments[0]);

                    else UseSkill("Poisoning");

                    break;

UO.PoisonResist

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

Firmas de C#

int UO.PoisonResist();

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

Parámetros: Sin parámetros.

Resultado: int / Integer.

Durante la llamada:

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

case "poisonresist": return new InjectionValue(bridge.PoisonResistance);

UO.Poisoned

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

Firmas de C#

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

Comprueba el envenenamiento del personaje.

Parámetros

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

Valor devuelto

Bandera numérica int: 1 (condición cumplida), 0 (condición no cumplida). Esta es una bandera numérica: en C# verifique el resultado! = 0 o resultado == 0. Comparación directa de int con true/false y si (resultado) no está permitido. 1 - mobile tiene 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.Poisoned();
UO.Print("Poisoned: " + 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.Poisoned();
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.Poisoned(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.Poisoned();
        await Delay(500);
        var after = UO.Poisoned();
        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.Poisoned() — UO.Poisoned()

Parámetros: Sin parámetros.

Resultado: int / Integer.

Durante la llamada:

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

public int Poisoned() => bridge.Poisoned(bridge.Self);

UO.Poisoned(id) — UO.Poisoned(Any)

Parámetros: id (Any)

Resultado: int / Integer.

Durante la llamada:

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

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

UO.Race

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

Firmas de C#

dynamic UO.Race();

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.

object? result = UO.Race();
UO.Print(result is Array values ? "Count: " + values.Length : 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.Race();
UO.Print("Race: " + 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.Race();
    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.Race();
        await Delay(1000);
        var after = UO.Race();
        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.Race() — UO.Race()

Parámetros: Sin parámetros.

Resultado: dynamic / Any.

Durante la llamada:

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

case "race": return new InjectionValue(bridge.Race);

UO.RemoveEarrings

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

Firmas de C#

void UO.RemoveEarrings();

Solicita la eliminación de un elemento de la capa Oreja.

Parámetros

No hay parámetros.

Valor devuelto

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

Comportamiento

  • ExecuteLegacyManualAlias llama a Unequip("Oído"). ConvertLayer selecciona la capa numérica, puente. Unequip solicita la transferencia a la mochila.
  • El resultado del Unequip (1/0) interno del comando heredado se descarta; llamar en una línea separada. Si no hay ningún artículo/mochila, es posible que la solicitud no se ejecute. La verificación ObjAtLayer después de la llamada solo lee el estado local.

Scripts independientes de C#

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

Ejemplo sencillo

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

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

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

1. Llamada directa - guión directo

Parámetros y flujo de ejecución:

  • Solicita la eliminación de un elemento de la capa Oreja.
UO.RemoveEarrings();

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

Parámetros y flujo de ejecución:

  • ExecuteLegacyManualAlias llama a Unequip("Oído"). ConvertLayer selecciona la capa numérica, puente. Unequip solicita la transferencia a la mochila.
return  RunScenario();
 object? RunScenario()
{
    UO.Print(UO.ObjAtLayer("Ear"));
    UO.RemoveEarrings();
    return null;
}

3. Función auxiliar completa: clase de script

Parámetros y flujo de ejecución:

  • El resultado del Unequip (1/0) interno del comando heredado se descarta; llamar en una línea separada. Si no hay ningún artículo/mochila, es posible que la solicitud no se ejecute. La verificación ObjAtLayer después de la llamada solo lee el estado local.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        UO.RemoveEarrings();
        UO.Wait(500);
        UO.Print(UO.ObjAtLayer("Ear"));
        return null;
    }
}

Implementación del comando

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

UO.RemoveEarrings() — UO.RemoveEarrings()

Parámetros: Sin parámetros.

Resultado: void / Unit.

Durante la llamada:

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

case "removeearrings": Unequip("Ear"); break;

UO.RemoveHat

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

Firmas de C#

void UO.RemoveHat();

Solicita la eliminación de un elemento de la capa Hat.

Parámetros

No hay parámetros.

Valor devuelto

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

Comportamiento

  • ExecuteLegacyManualAlias llama a Unequip("Sombrero"). ConvertLayer selecciona la capa numérica, puente. Unequip solicita traslado a la mochila.
  • El resultado del Unequip (1/0) interno del comando heredado se descarta; llamar en una línea separada. Si no hay ningún artículo/mochila, es posible que la solicitud no se ejecute. La verificación ObjAtLayer después de la llamada solo lee el estado local.

Scripts independientes de C#

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

Ejemplo sencillo

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

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

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

1. Llamada directa - guión directo

Parámetros y flujo de ejecución:

  • Solicita la eliminación de un elemento de la capa Hat.
UO.RemoveHat();

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

Parámetros y flujo de ejecución:

  • ExecuteLegacyManualAlias llama a Unequip("Sombrero"). ConvertLayer selecciona la capa numérica, puente. Unequip solicita traslado a la mochila.
return  RunScenario();
 object? RunScenario()
{
    UO.Print(UO.ObjAtLayer("Hat"));
    UO.RemoveHat();
    return null;
}

3. Función auxiliar completa: clase de script

Parámetros y flujo de ejecución:

  • El resultado del Unequip (1/0) interno del comando heredado se descarta; llamar en una línea separada. Si no hay ningún artículo/mochila, es posible que la solicitud no se ejecute. La verificación ObjAtLayer después de la llamada solo lee el estado local.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        UO.RemoveHat();
        UO.Wait(500);
        UO.Print(UO.ObjAtLayer("Hat"));
        return null;
    }
}

Implementación del comando

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

UO.RemoveHat() — UO.RemoveHat()

Parámetros: Sin parámetros.

Resultado: void / Unit.

Durante la llamada:

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

case "removehat": Unequip("Hat"); break;

UO.RemoveNeckless

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

Firmas de C#

void UO.RemoveNeckless();

Solicita que se elimine un elemento de la capa Cuello.

Parámetros

No hay parámetros.

Valor devuelto

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

Comportamiento

  • ExecuteLegacyManualAlias llama a Unequip("Cuello"). ConvertLayer selecciona la capa numérica, puente. Unequip solicita traslado a la mochila.
  • El resultado del Unequip (1/0) interno del comando heredado se descarta; llamar en una línea separada. Si no hay ningún artículo/mochila, es posible que la solicitud no se ejecute. La verificación ObjAtLayer después de la llamada solo lee el estado local.

Scripts independientes de C#

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

Ejemplo sencillo

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

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

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

1. Llamada directa - guión directo

Parámetros y flujo de ejecución:

  • Solicita que se elimine un elemento de la capa Cuello.
UO.RemoveNeckless();

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

Parámetros y flujo de ejecución:

  • ExecuteLegacyManualAlias llama a Unequip("Cuello"). ConvertLayer selecciona la capa numérica, puente. Unequip solicita traslado a la mochila.
return  RunScenario();
 object? RunScenario()
{
    UO.Print(UO.ObjAtLayer("Neck"));
    UO.RemoveNeckless();
    return null;
}

3. Función auxiliar completa: clase de script

Parámetros y flujo de ejecución:

  • El resultado del Unequip (1/0) interno del comando heredado se descarta; llamar en una línea separada. Si no hay ningún artículo/mochila, es posible que la solicitud no se ejecute. La verificación ObjAtLayer después de la llamada solo lee el estado local.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        UO.RemoveNeckless();
        UO.Wait(500);
        UO.Print(UO.ObjAtLayer("Neck"));
        return null;
    }
}

Implementación del comando

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

UO.RemoveNeckless() — UO.RemoveNeckless()

Parámetros: Sin parámetros.

Resultado: void / Unit.

Durante la llamada:

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

case "removeneckless": Unequip("Neck"); break;

UO.RemoveRing

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

Firmas de C#

void UO.RemoveRing();

Solicita la eliminación de un elemento de la capa Anillo.

Parámetros

No hay parámetros.

Valor devuelto

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

Comportamiento

  • ExecuteLegacyManualAlias llama a Unequip("Anillo"). ConvertLayer selecciona la capa numérica, puente. Unequip solicita traslado a la mochila.
  • El resultado del Unequip (1/0) interno del comando heredado se descarta; llamar en una línea separada. Si no hay ningún artículo/mochila, es posible que la solicitud no se ejecute. La verificación ObjAtLayer después de la llamada solo lee el estado local.

Scripts independientes de C#

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

Ejemplo sencillo

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

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

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

1. Llamada directa - guión directo

Parámetros y flujo de ejecución:

  • Solicita la eliminación de un elemento de la capa Anillo.
UO.RemoveRing();

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

Parámetros y flujo de ejecución:

  • ExecuteLegacyManualAlias llama a Unequip("Anillo"). ConvertLayer selecciona la capa numérica, puente. Unequip solicita traslado a la mochila.
return  RunScenario();
 object? RunScenario()
{
    UO.Print(UO.ObjAtLayer("Ring"));
    UO.RemoveRing();
    return null;
}

3. Función auxiliar completa: clase de script

Parámetros y flujo de ejecución:

  • El resultado del Unequip (1/0) interno del comando heredado se descarta; llamar en una línea separada. Si no hay ningún artículo/mochila, es posible que la solicitud no se ejecute. La verificación ObjAtLayer después de la llamada solo lee el estado local.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        UO.RemoveRing();
        UO.Wait(500);
        UO.Print(UO.ObjAtLayer("Ring"));
        return null;
    }
}

Implementación del comando

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

UO.RemoveRing() — UO.RemoveRing()

Parámetros: Sin parámetros.

Resultado: void / Unit.

Durante la llamada:

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

case "removering": Unequip("Ring"); break;

UO.RequestStats

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

Firmas de C#

void UO.RequestStats(object? objID);

Solicita el estado del personaje vía serial.

Parámetros

  • objID — Objeto serial/ID: int, cadena numérica/hexadecimal o alias establecido, por ejemplo "lasttarget". Esto no es graphic/type. Verifique el objeto cargado antes de actuar.

Valor devuelto

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

Comportamiento

  • RequestStats llama a RequestMobileStatus(_world, serial, true). La llamada no devuelve una serie de características y no espera una respuesta; A GetHP/GetStr le sigue la lectura del modelo local.
  • Bridge envía la solicitud en la transmisión del juego. Se aplican las reglas del servidor; No hay espera de confirmación incorporada.

Scripts independientes de C#

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

Ejemplo sencillo

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

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

UO.Print("Calling UO.RequestStats");
UO.RequestStats(UO.GetSerial("lasttarget"));

1. Llamada directa - guión directo

Parámetros y flujo de ejecución:

  • Solicita el estado del personaje vía serial.
var id = UO.GetSerial("lasttarget");
if (Truth(UO.Exists(id)))
{
    UO.RequestStats(id);
}

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

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

Parámetros y flujo de ejecución:

  • RequestStats llama a RequestMobileStatus(_world, serial, true). La llamada no devuelve una serie de características y no espera una respuesta; A GetHP/GetStr le sigue la lectura del modelo local.
return  RunScenario();
 object? RunScenario()
{
    var id = UO.GetSerial("self");
    if (Truth(UO.Exists(id)))
    {
        UO.RequestStats(id);
    }

    return null;
}

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

3. Función auxiliar completa: clase de script

Parámetros y flujo de ejecución:

  • Bridge envía la solicitud en la transmisión del juego. Se aplican las reglas del servidor; No hay espera de confirmación incorporada.
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()
    {
        ApplyToLoaded(UO.GetSerial("lasttarget"));
        return null;
    }

    void ApplyToLoaded(dynamic id)
    {
        if (Truth(UO.Exists(id)))
        {
            UO.RequestStats(id);
        }
    }

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

Parámetros: objID (Any)

Resultado: void / Unit.

Durante la llamada:

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

case "requeststats": bridge.RequestStats(Arg(0)); return InjectionValue.Unit;

UO.ResistCold

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

Firmas de C#

int UO.ResistCold();

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

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

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

Firmas de C#

int UO.ResistEnergy();

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

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

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

Firmas de C#

int UO.ResistFire();

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

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

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

Firmas de C#

int UO.ResistPhysical();

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

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

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

Firmas de C#

int UO.ResistPoison();

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

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

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

Firmas de C#

int UO.Self();

Devuelve ID del carácter actual.

Parámetros

No hay parámetros.

Valor devuelto

int - serial/ID, no graphic/type, capa, número de elementos o bool. 0: no hay ningún objeto actual. Se guardan todos los bits 32 serial; marque != 0, no == true o > 0. El resultado guardado no se actualiza por sí solo. Lee World.Player.Serial; un jugador perdido o destruido da 0. La muerte es diferente de la eliminación: el fantasma presente conserva el ID del personaje.

Comportamiento

  • No hay parámetros. Lee datos locales a través de Invoke en la transmisión del juego; cancelar el script interrumpe la espera de ese hilo. No envía el paquete, no abre el contenedor/destino y no transfiere el artículo.
  • El self/backpack integrado sin paréntesis se lee nuevamente a menos que lo anule una variable de script. Los nombres de cadenas son procesados ​​por el comando de recepción. En el destino de transporte, "self" significa la mochila y UO.Self() devuelve el serial del personaje. Para el contenedor ID, utilice UO.Backpack() explícitamente.
  • World.Clear elimina al jugador; las lecturas posteriores arrojan 0. Entrar al mundo o cambiar la bolsa equipada puede cambiar ID. Las lecturas individuales no son atómicas. Un ID distinto de cero no prueba la conexión, la resolución del servidor ni la carga de contenido.

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

1. Lectura y salida ID - script directo

Parámetros y flujo de ejecución:

  • id almacena el resultado de una llamada; HEX formatea serial para el registro. El ejemplo no selecciona ni usa nada.
var id = UO.Self();
UO.Print("ID: " + Hex(id));

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

2. Detectar cambio ID - Función de secuencia de comandos

Parámetros y flujo de ejecución:

  • antes/después se leen a intervalos de 250 ms. UO.Wait agregado solo por ejemplo. Igualdad significa idéntica final ID; Es posible que se pasen por alto los cambios intermedios.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var before = UO.Self();
    await Delay(250);
    var after = UO.Self();
    if (Truth(before != after))
    {
        UO.Print("ID changed: " + Hex(after));
    }

    return null;
}

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

3. Función completa IsOwnSerial - clase de script

Parámetros y flujo de ejecución:

  • candidato - guardado ID LastTarget. IsOwnSerial(candidato) toma uno serial y devuelve bool: true para el actual ID distinto de cero; de lo contrario, false. La definición de la función se proporciona en su totalidad; El objetivo no cambia.
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 candidate = UO.LastTarget();
        if (Truth(Truth(IsOwnSerial(candidate)) == true))
        {
            UO.Print("Own object selected");
        }
        else
        {
            UO.Print("Different object or no own object");
        }

        return null;
    }

    dynamic IsOwnSerial(dynamic candidate)
    {
        var current = UO.Self();
        return Truth(current != 0) && Truth(current == candidate);
    }

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

Parámetros: Sin parámetros.

Resultado: int / Integer.

Durante la llamada:

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

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

UO.SetARExtParams

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

Firmas de C#

void UO.SetARExtParams();
void UO.SetARExtParams(object? shardName);
void UO.SetARExtParams(object? shardName, object? charName);
void UO.SetARExtParams(object? shardName, object? charName, object? useAtEveryConnect);

Especifica un servidor de la lista de fragmentos y un carácter para el inicio de sesión posterior. Útil cuando un determinado personaje de la misma cuenta necesita volver a conectar el script.

Parámetros

  • shardName: nombre para mostrar opcional del servidor de la lista de inicio de sesión, no IP ni puerto. El ShardName actual toma un valor vacío o faltante. Se eliminan los espacios en blanco alrededor de los bordes.
  • charName: nombre opcional de un personaje de cuenta existente. Un valor vacío o faltante toma el nombre self si se conoce. Este es el nombre, no el número de ranura o serial; un nombre que no esté vacío tiene prioridad sobre un espacio de perfil.
  • useAtEveryConnect - Bandera opcional: false/0 por defecto - selección única; true/1 u otro número entero distinto de cero: guarde la selección para futuros inicios de sesión en esta sesión.

Valor devuelto

void - sin valor. Esto configura la siguiente entrada, no confirma la conexión o existencia del personaje.

Comportamiento

  • En el administrador, los nonces se guardan en intentos fallidos de red y solo se consumen después de ingresar al mundo. La siguiente conexión vuelve a la configuración del perfil. Una elección persistente dura hasta que finaliza una nueva configuración o el propietario de la sesión; El archivo de perfil del administrador no se sobrescribe. La nueva configuración durante el inicio de sesión se aplica al siguiente inicio de sesión y no se pierde cuando se completa el actual.
  • En un cliente gráfico independiente, el servidor se guarda como LastServerName, el carácter se guarda como LastCharacterManager. Después de un inicio de sesión exitoso, el personaje también se convierte en el último utilizado: la desechabilidad no significa un retorno automático al personaje anterior. La anulación permanente vive en el proceso actual.
  • El comando en sí no habilita la reconexión automática y no interrumpe la conexión. Para hacer esto, use SetARStatus, Connect y Disconnect por separado. Los nombres deben estar presentes en las listas de servidores; la comparación no distingue entre mayúsculas y minúsculas. Si la entrada automática de caracteres está desactivada en el administrador, la selección manual permanece. Es posible que no se conozca el nombre sin conexión self: especifique los nombres explícitamente. El comando no cambia la cuenta, contraseña, IP, puerto y cifrado; Los valores vacíos sin un nombre actual disponible no borran la selección establecida previamente.

Scripts independientes de C#

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

Ejemplo sencillo

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

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

UO.Print("Calling UO.SetARExtParams");
UO.SetARExtParams("", "", true);

1. SetARExtParams - 1 - guión directo

Parámetros y flujo de ejecución:

  • El primer ejemplo sólo funciona en línea. Las dos líneas vacías toman los nombres actuales; true los guarda para inicios de sesión repetidos, SetARStatus(true) habilita la política de reconexión automática. No hay reconexión inmediata.
if (!(Truth(UO.Connected())))
{
    return null;
}
UO.SetARExtParams("", "", true);
UO.SetARStatus(true);

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

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

Parámetros y flujo de ejecución:

  • El segundo ejemplo selecciona Carácter de ejemplo solo si este nombre está en el GetCharsListForShard real. La matriz está indexada con 0; ToLowerInvariant compara nombres sin distinguir entre mayúsculas y minúsculas. false significa una entrada exitosa; después de la configuración, se habilita la reconexión automática y se llama a Disconnect. Reemplaza el nombre por el tuyo. Si no hay ningún nombre, la conexión se conserva. La pausa automática puede retrasar el regreso hasta que se restablezca la conexión.
return  RunScenario();
 object? RunScenario()
{
    if (!(Truth(UO.Connected())))
    {
        return null;
    }

    var wanted = "Example Character";
    var names = UO.GetCharsListForShard();
    var i = 0;
    while (Truth(i < ArrayLength(names)))
    {
        if (Truth(Convert.ToString(names[i]) == Convert.ToString(wanted)))
        {
            UO.SetARExtParams("", names[i], false);
            UO.SetARStatus(true);
            UO.Disconnect();
            return null;
        }

        i += 1;
    }

    return null;
}

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

3. SetARExtParams - 3 - clase de escenario

Parámetros y flujo de ejecución:

  • El tercer ejemplo se inicia desde un script en ejecución sin conexión. El fragmento de ejemplo y el carácter de ejemplo se especifican explícitamente; reemplácelos con nombres reales. true guarda la selección, false en SetARStatus desactiva las repeticiones automáticas, Connect solicita una entrada. Necesita los detalles de su cuenta guardada. Connect no espera a que el mundo esté preparado; Un script pausado automáticamente no llegará a estas líneas sin continuar.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        if (Truth(UO.Connected()))
        {
            return null;
        }

        UO.SetARExtParams("Example Shard", "Example Character", true);
        UO.SetARStatus(false);
        UO.Connect();
        return null;
    }

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

Implementación del comando

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

UO.SetARExtParams() — UO.SetARExtParams()

Parámetros: Sin parámetros.

Resultado: void / Unit.

Durante la llamada:

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

case "setarextparams":

                {

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

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

                    state.AutoReconnectShard = string.IsNullOrWhiteSpace(requestedShard)

                        ? bridge.ShardName

                        : requestedShard;

                    state.AutoReconnectCharacter = string.IsNullOrWhiteSpace(requestedCharacter)

                        ? bridge.GetName(bridge.Self) ?? string.Empty

                        : requestedCharacter;

                    int useAtEveryConnect = arguments.Length > 2 ? Arg(2) : 0;

                    bridge.SetReconnectSelection(state.AutoReconnectShard, state.AutoReconnectCharacter, useAtEveryConnect);

                    return InjectionValue.Unit;

                }

UO.SetARExtParams(shardName) — UO.SetARExtParams(Any)

Parámetros: shardName (Any)

Resultado: void / Unit.

Durante la llamada:

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

case "setarextparams":

                {

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

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

                    state.AutoReconnectShard = string.IsNullOrWhiteSpace(requestedShard)

                        ? bridge.ShardName

                        : requestedShard;

                    state.AutoReconnectCharacter = string.IsNullOrWhiteSpace(requestedCharacter)

                        ? bridge.GetName(bridge.Self) ?? string.Empty

                        : requestedCharacter;

                    int useAtEveryConnect = arguments.Length > 2 ? Arg(2) : 0;

                    bridge.SetReconnectSelection(state.AutoReconnectShard, state.AutoReconnectCharacter, useAtEveryConnect);

                    return InjectionValue.Unit;

                }

UO.SetARExtParams(shardName, charName) — UO.SetARExtParams(Any,Any)

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

Resultado: void / Unit.

Durante la llamada:

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

case "setarextparams":

                {

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

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

                    state.AutoReconnectShard = string.IsNullOrWhiteSpace(requestedShard)

                        ? bridge.ShardName

                        : requestedShard;

                    state.AutoReconnectCharacter = string.IsNullOrWhiteSpace(requestedCharacter)

                        ? bridge.GetName(bridge.Self) ?? string.Empty

                        : requestedCharacter;

                    int useAtEveryConnect = arguments.Length > 2 ? Arg(2) : 0;

                    bridge.SetReconnectSelection(state.AutoReconnectShard, state.AutoReconnectCharacter, useAtEveryConnect);

                    return InjectionValue.Unit;

                }

UO.SetARExtParams(shardName, charName, useAtEveryConnect) — UO.SetARExtParams(Any,Any,Any)

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

Resultado: void / Unit.

Durante la llamada:

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

case "setarextparams":

                {

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

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

                    state.AutoReconnectShard = string.IsNullOrWhiteSpace(requestedShard)

                        ? bridge.ShardName

                        : requestedShard;

                    state.AutoReconnectCharacter = string.IsNullOrWhiteSpace(requestedCharacter)

                        ? bridge.GetName(bridge.Self) ?? string.Empty

                        : requestedCharacter;

                    int useAtEveryConnect = arguments.Length > 2 ? Arg(2) : 0;

                    bridge.SetReconnectSelection(state.AutoReconnectShard, state.AutoReconnectCharacter, useAtEveryConnect);

                    return InjectionValue.Unit;

                }

UO.SetARStatus

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

Firmas de C#

void UO.SetARStatus(object? value);

Activa o desactiva la reconexión automática.

Parámetros

  • value - 0 se apaga; cualquier número entero distinto de cero incluye.

Valor devuelto

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

Comportamiento

  • Puente.SetAutoReconnect cambia la configuración de reconexión automática. El valor se interpreta como habilitado != 0; No hay ningún inicio/cierre de sesión inmediato en el servidor.
  • Cambia la configuración del cliente. El valor no es el resultado de una prueba de conexión y no confirma el procesamiento por parte del servidor.

Scripts independientes de C#

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

Ejemplo sencillo

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

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

UO.Print("Calling UO.SetARStatus");
UO.SetARStatus(1);

1. Llamada directa - guión directo

Parámetros y flujo de ejecución:

  • Activa o desactiva la reconexión automática.
UO.SetARStatus(1);

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

Parámetros y flujo de ejecución:

  • Puente.SetAutoReconnect cambia la configuración de reconexión automática. El valor se interpreta como habilitado != 0; No hay ningún inicio/cierre de sesión inmediato en el servidor.
return  RunScenario();
 object? RunScenario()
{
    UO.SetARStatus(0);
    return null;
}

3. Función auxiliar completa: clase de script

Parámetros y flujo de ejecución:

  • Cambia la configuración del cliente. El valor no es el resultado de una prueba de conexión y no confirma el procesamiento por parte del servidor.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        ApplyMode(1);
        return null;
    }

    void ApplyMode(dynamic mode)
    {
        UO.SetARStatus(mode);
    }
}

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.SetARStatus(value) — UO.SetARStatus(Any)

Parámetros: value (Any)

Resultado: void / Unit.

Durante la llamada:

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

case "setarstatus": bridge.SetAutoReconnect(Arg(0)); return InjectionValue.Unit;

UO.SetArm

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

Firmas de C#

void UO.SetArm(object? name);

Recuerda el arma y el escudo actuales en un conjunto con nombre.

Parámetros

  • name: nombre de cadena del conjunto, como "viaje" o "batalla". Los nombres no distinguen entre mayúsculas y minúsculas. Los conjuntos de ropa y armas se almacenan por separado: se permite el mismo nombre en ambos. Esto no es una cosa ID ni un nombre de archivo. Sólo SetDress permite la ausencia de un nombre: entonces se registra un conjunto separado para DressSavedSet/EquipDressSet.

Valor devuelto

void - sin valor. Llame en una línea separada; no asigne el resultado ni lo compare con true. Guardar y eliminar cambia la entrada, no el equipo.

Comportamiento

  • Ropa: capas 3,4,5,6,7,8,10,12,13,14,17,18,19,20,22,23,24. Armas: 1 y 2 únicamente. Pelo, barba, mochila, animal y banco no están incluidos en estos sets.
  • Los elementos específicos serial ya cargados se registran en sus propias capas. Guardar el mismo nombre nuevamente reemplaza la entrada. Las capas vacías también tienen sentido: cuando se restauren, la capa ocupada correspondiente se liberará en su propia mochila. Por lo tanto, un conjunto guardado completamente vacío elimina elementos de sus capas.
  • El conjunto se almacena en el estado de tiempo de ejecución. La llamada en sí no crea un archivo y no garantiza que el conjunto se transfiera a otro perfil o a un nuevo tiempo de ejecución. Primero, guarde el conjunto deseado en su estado usado. Cargar/guardar el estado general del cliente es un mecanismo separado.
  • UO.SetDress · UO.Dress · UO.DressSavedSet · UO.SetArm · UO.Arm · UO.DressSpeed
  • En un host de cliente normal, estos datos de estado se toman del administrador GetPersistentState y son comunes a los scripts/chat/macros del mismo mundo/perfil, y no pertenecen a un solo script. Otro proceso o un InjectionRuntimeState aparentemente separado tiene un estado diferente. Cargar/borrar un perfil puede reemplazarlo; guardados serial todavía se comparan con el mundo cargado.

Scripts independientes de C#

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

Ejemplo sencillo

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

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

UO.Print("Calling UO.SetArm");
UO.SetArm("battle");

1. Uso directo - guión directo

Parámetros y flujo de ejecución:

  • La foto está tomada ahora, cuando ya se han puesto las cosas necesarias. El desafío no equipa elementos de la mochila.
UO.SetArm("battle");

2. Nombres y modo de consulta: función de secuencia de comandos

Parámetros y flujo de ejecución:

  • El mismo nombre se utiliza en diferentes repositorios. SetDress() también almacena el conjunto sin nombre por separado; no es una selección de un nombre previamente grabado.
return  RunScenario();
 object? RunScenario()
{
    UO.SetArm("battle");
    UO.SetDress("battle");
    return null;
}

3. Script auxiliar completo - Clase de script

Parámetros y flujo de ejecución:

  • SaveIfReady comprueba la capa de control: 3 - zapatos para ropa, 1 - mano derecha para armas. Si está vacío, la instantánea no se sobrescribe. El 1/0 devuelto pertenece al ayudante, no a SetDress/SetArm.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        return SaveIfReady("battle");
        return null;
    }

    dynamic SaveIfReady(dynamic name)
    {
        if (Truth(UO.ObjAtLayerEx(1, UO.Self()) == 0))
        {
            return 0;
        }

        UO.SetArm(name);
        return 1;
    }

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

Parámetros: name (String)

Resultado: void / Unit.

Durante la llamada:

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

public void SetArm(string name)

            => SetEquip(name, armSets, weaponLayers, "Arm set.");

UO.SetDress

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

Firmas de C#

void UO.SetDress();
void UO.SetDress(object? name);

Recuerda ropa y armaduras actualmente usadas para su posterior restauración.

Parámetros

  • name: nombre de cadena del conjunto, como "viaje" o "batalla". Los nombres no distinguen entre mayúsculas y minúsculas. Los conjuntos de ropa y armas se almacenan por separado: se permite el mismo nombre en ambos. Esto no es una cosa ID ni un nombre de archivo. Sólo SetDress permite la ausencia de un nombre: entonces se registra un conjunto separado para DressSavedSet/EquipDressSet.

Valor devuelto

void - sin valor. Llame en una línea separada; no asigne el resultado ni lo compare con true. Guardar y eliminar cambia la entrada, no el equipo.

Comportamiento

  • Ropa: capas 3,4,5,6,7,8,10,12,13,14,17,18,19,20,22,23,24. Armas: 1 y 2 únicamente. Pelo, barba, mochila, animal y banco no están incluidos en estos sets.
  • Los elementos específicos serial ya cargados se registran en sus propias capas. Guardar el mismo nombre nuevamente reemplaza la entrada. Las capas vacías también tienen sentido: cuando se restauren, la capa ocupada correspondiente se liberará en su propia mochila. Por lo tanto, un conjunto guardado completamente vacío elimina elementos de sus capas.
  • El conjunto se almacena en el estado de tiempo de ejecución. La llamada en sí no crea un archivo y no garantiza que el conjunto se transfiera a otro perfil o a un nuevo tiempo de ejecución. Primero, guarde el conjunto deseado en su estado usado. Cargar/guardar el estado general del cliente es un mecanismo separado.
  • UO.SetDress · UO.Dress · UO.DressSavedSet · UO.SetArm · UO.Arm · UO.DressSpeed
  • En un host de cliente normal, estos datos de estado se toman del administrador GetPersistentState y son comunes a los scripts/chat/macros del mismo mundo/perfil, y no pertenecen a un solo script. Otro proceso o un InjectionRuntimeState aparentemente separado tiene un estado diferente. Cargar/borrar un perfil puede reemplazarlo; guardados serial todavía se comparan con el mundo cargado.

Scripts independientes de C#

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

Ejemplo sencillo

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

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

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

1. Uso directo - guión directo

Parámetros y flujo de ejecución:

  • La foto está tomada ahora, cuando ya se han puesto las cosas necesarias. El desafío no equipa elementos de la mochila.
UO.SetDress("travel");

2. Nombres y modo de consulta: función de secuencia de comandos

Parámetros y flujo de ejecución:

  • El mismo nombre se utiliza en diferentes repositorios. SetDress() también almacena el conjunto sin nombre por separado; no es una selección de un nombre previamente grabado.
return  RunScenario();
 object? RunScenario()
{
    UO.SetArm("battle");
    UO.SetDress("battle");
    UO.SetDress();
    return null;
}

3. Script auxiliar completo - Clase de script

Parámetros y flujo de ejecución:

  • SaveIfReady comprueba la capa de control: 3 - zapatos para ropa, 1 - mano derecha para armas. Si está vacío, la instantánea no se sobrescribe. El 1/0 devuelto pertenece al ayudante, no a SetDress/SetArm.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        return SaveIfReady("travel");
        return null;
    }

    dynamic SaveIfReady(dynamic name)
    {
        if (Truth(UO.ObjAtLayerEx(3, UO.Self()) == 0))
        {
            return 0;
        }

        UO.SetDress(name);
        return 1;
    }

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

Parámetros: Sin parámetros.

Resultado: void / Unit.

Durante la llamada:

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

case "setdress": SetDress("__stealth_saved_set__"); return InjectionValue.Unit;

UO.SetDress(name) — UO.SetDress(String)

Parámetros: name (String)

Resultado: void / Unit.

Durante la llamada:

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

public void SetDress(string name)

            => SetEquip(name, dressSets, dressLayers, "Clothing set.");

UO.SetDressSpeed

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

Firmas de C#

void UO.SetDressSpeed(object? delayms);

Establece una pausa entre las solicitudes de cambio de ropa.

Parámetros

  • delayms — int, milisegundos. El valor está limitado a 10..10000 inclusive.

Valor devuelto

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

Comportamiento

  • SetDressSpeed guarda el estado.DressSpeed = max(10, min(10000, delayms)). Las operaciones de conjuntos guardados aprovechan esto; la velocidad de las acciones permitidas por el servidor no cambia.
  • Un valor menor que 10 se convierte en 10, un valor mayor que 10000 se convierte en 10000. El equipo no se pone ni se quita prendas.
  • En un host de cliente normal, estos datos de estado se toman del administrador GetPersistentState y son comunes a los scripts/chat/macros del mismo mundo/perfil, y no pertenecen a un solo script. Otro proceso o un InjectionRuntimeState aparentemente separado tiene un estado diferente. Cargar/borrar un perfil puede reemplazarlo; guardados serial todavía se comparan con el mundo cargado.

Scripts independientes de C#

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

Ejemplo sencillo

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

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

UO.Print("Calling UO.SetDressSpeed");
UO.SetDressSpeed(250);

1. Llamada directa - guión directo

Parámetros y flujo de ejecución:

  • Establece una pausa entre las solicitudes de cambio de ropa.
UO.SetDressSpeed(250);

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

Parámetros y flujo de ejecución:

  • SetDressSpeed guarda el estado.DressSpeed = max(10, min(10000, delayms)). Las operaciones de conjuntos guardados aprovechan esto; la velocidad de las acciones permitidas por el servidor no cambia.
return  RunScenario();
 object? RunScenario()
{
    UO.SetDressSpeed(0);
    UO.Print(UO.DressSpeed());
    return null;
}

3. Función auxiliar completa: clase de script

Parámetros y flujo de ejecución:

  • Un valor menor que 10 se convierte en 10, un valor mayor que 10000 se convierte en 10000. El equipo no se pone ni se quita prendas.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        UO.SetDressSpeed(20000);
        UO.Print(UO.DressSpeed());
        return null;
    }
}

Implementación del comando

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

UO.SetDressSpeed(delayms) — UO.SetDressSpeed(Integer)

Parámetros: delayms (Integer)

Resultado: void / Unit.

Durante la llamada:

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

public void SetDressSpeed(int delayms) => state.DressSpeed = Math.Max(10, Math.Min(10_000, delayms));

UO.SetStatLockState

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

Firmas de C#

void UO.SetStatLockState(object? statNum, object? statState);

Solicita un cambio al modo característico.

Parámetros

  • statNum - Número de característica obligatoria: 0 - Convertir.ToString, 1 - DEX, 2 - INT. Este no es su valor actual ni el nombre de la cadena.
  • statState — Modo obligatorio: 0 — aumentar, 1 — disminuir, 2 — bloquear. Estos son tres códigos, no bool; true/false no reemplazan los nombres de todos los modos.

Valor devuelto

void: sin valor de retorno. El resultado no puede utilizarse como éxito/fracaso ni compararse con true. La lectura posterior muestra el modelo local, no la confirmación del servidor.

Comportamiento

  • Una solicitud válida envía un paquete a través de GameActions e inmediatamente cambia el modo local. El servidor puede aplicar sus propias restricciones; No se garantizan aumentos en habilidades o estadísticas. La habilidad desconocida, el índice/modo no válido y el carácter faltante se ignoran sin un paquete.
  • Número de característica obligatoria: 0 - Convertir.ToString, 1 - DEX, 2 - INT. Este no es su valor actual ni el nombre de la cadena.
  • ExecuteClientApiCompatibility selecciona la rama de comando. El texto lee el selector de habilidades, Arg lee los números y modos numéricos. Un argumento no convertible puede fallar en la llamada con un error de conversión.

Scripts independientes de C#

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

Ejemplo sencillo

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

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

UO.Print("Calling UO.SetStatLockState");
UO.SetStatLockState(0, 2);

1. Lectura y salida: guión directo

Parámetros y flujo de ejecución:

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

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

Parámetros y flujo de ejecución:

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

    return null;
}

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

3. Función auxiliar completa: clase de script

Parámetros y flujo de ejecución:

  • Todo el código de ayuda se proporciona debajo de Principal. El selector selecciona una habilidad/característica, el modo establece el modo de grabación. ReadValue/ReadMode devuelve el número original; ApplyMode verifica los argumentos, realiza la acción y no devuelve ningún valor. UO.Wait(1000) en el ejemplo de lectura separa dos imágenes.
return  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()
    {
        ApplyMode(0, 2);
        return null;
    }

    void ApplyMode(dynamic selector, dynamic mode)
    {
        if (Truth(mode < 0) || Truth(mode > 2))
        {
            return;
        }

        if (Truth(UO.GetStatLockState(selector) < 0))
        {
            return;
        }

        UO.SetStatLockState(selector, mode);
    }

    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.SetStatLockState(statNum, statState) — UO.SetStatLockState(Any,Any)

Parámetros: statNum (Any), statState (Any)

Resultado: void / Unit.

Durante la llamada:

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

case "setstatlockstate":

                case "setstatstate": bridge.SetStatLockState(Arg(0), Arg(1)); return InjectionValue.Unit;

UO.SetStatState

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

Firmas de C#

void UO.SetStatState(object? statNum, object? statState);

Solicita un cambio al modo característico.

Parámetros

  • statNum - Número de característica obligatoria: 0 - Convertir.ToString, 1 - DEX, 2 - INT. Este no es su valor actual ni el nombre de la cadena.
  • statState — Modo obligatorio: 0 — aumentar, 1 — disminuir, 2 — bloquear. Estos son tres códigos, no bool; true/false no reemplazan los nombres de todos los modos.

Valor devuelto

void: sin valor de retorno. El resultado no puede utilizarse como éxito/fracaso ni compararse con true. La lectura posterior muestra el modelo local, no la confirmación del servidor.

Comportamiento

  • Una solicitud válida envía un paquete a través de GameActions e inmediatamente cambia el modo local. El servidor puede aplicar sus propias restricciones; No se garantizan aumentos en habilidades o estadísticas. La habilidad desconocida, el índice/modo no válido y el carácter faltante se ignoran sin un paquete.
  • Número de característica obligatoria: 0 - Convertir.ToString, 1 - DEX, 2 - INT. Este no es su valor actual ni el nombre de la cadena.
  • ExecuteClientApiCompatibility selecciona la rama de comando. El texto lee el selector de habilidades, Arg lee los números y modos numéricos. Un argumento no convertible puede fallar en la llamada con un error de conversión.

Scripts independientes de C#

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

Ejemplo sencillo

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

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

UO.Print("Calling UO.SetStatState");
UO.SetStatState(0, 2);

1. Lectura y salida: guión directo

Parámetros y flujo de ejecución:

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

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

Parámetros y flujo de ejecución:

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

    return null;
}

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

3. Función auxiliar completa: clase de script

Parámetros y flujo de ejecución:

  • Todo el código de ayuda se proporciona debajo de Principal. El selector selecciona una habilidad/característica, el modo establece el modo de grabación. ReadValue/ReadMode devuelve el número original; ApplyMode verifica los argumentos, realiza la acción y no devuelve ningún valor. UO.Wait(1000) en el ejemplo de lectura separa dos imágenes.
return  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()
    {
        ApplyMode(0, 2);
        return null;
    }

    void ApplyMode(dynamic selector, dynamic mode)
    {
        if (Truth(mode < 0) || Truth(mode > 2))
        {
            return;
        }

        if (Truth(UO.GetStatLockState(selector) < 0))
        {
            return;
        }

        UO.SetStatState(selector, mode);
    }

    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.SetStatState(statNum, statState) — UO.SetStatState(Any,Any)

Parámetros: statNum (Any), statState (Any)

Resultado: void / Unit.

Durante la llamada:

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

case "setstatlockstate":

                case "setstatstate": bridge.SetStatLockState(Arg(0), Arg(1)); return InjectionValue.Unit;

UO.Sex

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

Firmas de C#

dynamic UO.Sex();

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

Parámetros

No hay parámetros.

Valor devuelto

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

Comportamiento

  • Se leen los datos locales ya recibidos. La solicitud no abre el estado y no obliga al servidor a enviar una actualización. Después de la muerte, la transición del mapa o la eliminación de un objeto, los valores pueden cambiar entre dos llamadas.
  • C# distingue mayúsculas y minúsculas. Use el nombre UO exacto. Compare indicadores numéricos con 0; use bool solo si la firma devuelve bool.

Scripts independientes de C#

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

Ejemplo sencillo

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

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

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

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

Parámetros y flujo de ejecución:

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

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

Parámetros y flujo de ejecución:

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

    return null;
}

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

3. Mira el cambio en un segundo - clase de guión

Parámetros y flujo de ejecución:

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

    async public Task<object?> RunScenarioAsync()
    {
        var before = UO.Sex();
        await Delay(1000);
        var after = UO.Sex();
        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.Sex() — UO.Sex()

Parámetros: Sin parámetros.

Resultado: dynamic / Any.

Durante la llamada:

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

case "sex": return new InjectionValue(bridge.Sex);

UO.Stam

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

Firmas de C#

dynamic UO.Stam();

Lee la resistencia actual del modelo local.

Parámetros

No hay parámetros.

Valor devuelto

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

Comportamiento

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

Scripts independientes de C#

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

Ejemplo sencillo

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

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

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

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

Parámetros y flujo de ejecución:

  • La llamada sin argumentos dice self. value almacena un número, Convert.ToString lo convierte solo para mensaje.
var value = UO.Stam();
UO.Print("Stam: " + 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.Stam();
    if (Truth(value < 15))
    {
        UO.Print("Known stamina is below the movement threshold of 15");
    }

    return null;
}

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

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

Parámetros y flujo de ejecución:

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

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

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

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

Parámetros: Sin parámetros.

Resultado: dynamic / Any.

Durante la llamada:

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

case "stam": return new InjectionValue(bridge.Stamina);

UO.Stamina

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

Firmas de C#

int UO.Stamina();

Lee la resistencia actual del modelo local.

Parámetros

No hay parámetros.

Valor devuelto

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

Comportamiento

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

Scripts independientes de C#

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

Ejemplo sencillo

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

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

var result = UO.Stamina();
UO.Print("Stamina: " + 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.Stamina();
UO.Print("Stamina: " + 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.Stamina();
    if (Truth(value < 15))
    {
        UO.Print("Known stamina is below the movement threshold of 15");
    }

    return null;
}

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

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

Parámetros y flujo de ejecución:

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

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

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

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

Parámetros: Sin parámetros.

Resultado: int / Integer.

Durante la llamada:

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

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

() => bridge.Stamina

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


UO.Str

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

Firmas de C#

int UO.Str();

Lee la fuerza actual (Strength) del personaje.

Parámetros

No hay parámetros.

Valor devuelto

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

Comportamiento

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

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.Str();
UO.Print("Str: " + 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.Str();
UO.Print("Strength: " + Convert.ToString(value));

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

Parámetros y flujo de ejecución:

  • antes y después separados 1000 ms; UO.Wait agregado al ejemplo. cambio=después-antes puede ser positivo, cero o negativo. Por sí solo, no distingue entre todas las actualizaciones intermedias y la salida del mundo.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var before = UO.Str();
    await Delay(1000);
    var after = UO.Str();
    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.Str();
        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.Str() — UO.Str()

Parámetros: Sin parámetros.

Resultado: int / Integer.

Durante la llamada:

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

case "str": return new InjectionValue(bridge.Strength);

UO.Strength

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

Firmas de C#

int UO.Strength();

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

Parámetros

No hay parámetros.

Valor devuelto

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

Comportamiento

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

Scripts independientes de C#

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

Ejemplo sencillo

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

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

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

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

Parámetros y flujo de ejecución:

  • antes y después separados 1000 ms; UO.Wait agregado al ejemplo. cambio=después-antes puede ser positivo, cero o negativo. Por sí solo, no distingue entre todas las actualizaciones intermedias y la salida del mundo.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var before = UO.Strength();
    await Delay(1000);
    var after = UO.Strength();
    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.Strength();
        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.Strength() — UO.Strength()

Parámetros: Sin parámetros.

Resultado: int / Integer.

Durante la llamada:

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

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

() => bridge.Strength

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


UO.TicksDead

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

Firmas de C#

int UO.TicksDead();

Lee o marca una muerte notada por primera vez.

Parámetros

No hay parámetros.

Valor devuelto

int — UO.Timer en décimas de segundo desde el inicio del tiempo de ejecución, inicialmente 0. Ni el número de muertes ni la duración de la muerte.

Comportamiento

  • En cada llamada, si bridge.Dead()!=0 y ticksDead==0, guarda Timer(). En caso contrario devuelve el ticksDead anterior. Después de la reactivación, el campo no se restablece mediante este método.
  • Esta es la marca de la primera llamada TicksDead en el momento de la muerte observada, no la hora exacta del evento del servidor. En la primera décima de segundo se puede restablecer el valor de 0.

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

1. Llamada directa - guión directo

Parámetros y flujo de ejecución:

  • Lee o marca una muerte notada por primera vez.
UO.Print(UO.TicksDead());

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

Parámetros y flujo de ejecución:

  • En cada llamada, si bridge.Dead()!=0 y ticksDead==0, guarda Timer(). En caso contrario devuelve el ticksDead anterior. Después de la reactivación, el campo no se restablece mediante este método.
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.IsDead()))
    {
        var stamp = UO.TicksDead();
        UO.Print(UO.Timer() - stamp);
    }

    return null;
}

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

3. Función auxiliar completa: clase de script

Parámetros y flujo de ejecución:

  • Esta es la marca de la primera llamada TicksDead en el momento de la muerte observada, no la hora exacta del evento del servidor. En la primera décima de segundo se puede restablecer el valor de 0.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var before = UO.TicksDead();
        UO.Wait(500);
        UO.Print(before = UO.TicksDead());
        return null;
    }
}

Implementación del comando

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

UO.TicksDead() — UO.TicksDead()

Parámetros: Sin parámetros.

Resultado: int / Integer.

Durante la llamada:

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

public int TicksDead()

        {

            if (bridge.Dead() != 0 && ticksDead == 0)

                ticksDead = Timer();

            return ticksDead;

        }

UO.ToggleFly

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

Firmas de C#

void UO.ToggleFly();

Solicita cambiar el vuelo de tu propia Gárgola: de tierra a vuelo, de vuelo a tierra. Esta es una acción y UO.Flying() solo verifica el estado. El comando será útil ante una ruta que requiera un determinado modo.

Parámetros

No hay parámetros.

Valor devuelto

void - sin valor. Esto no es true/false ni la confirmación del servidor. Verifique el resultado real mediante UO.Flying() después de procesar la respuesta del servidor.

Comportamiento

  • La única forma es UO.ToggleFly(), sin ID, coordenadas y parámetro true/false. Se relaciona con tu personaje; el vuelo de otro mobile no se puede cambiar.
  • Envía una solicitud 0xBF con un subcomando 0x0032. La llamada en sí no verifica la raza, la versión del protocolo, los permisos del servidor o el modo actual; elígelo para tu propia Gárgola en un servidor habilitado para vuelos.
  • El servidor puede fallar y la actualización del estado llega más tarde. No llame a ToggleFly en un bucle de espera: llamar nuevamente puede cancelar el cambio anterior. Envíe una solicitud y lea Flying hasta que se agote el tiempo.
  • La altitud Z y la señal de vuelo son datos diferentes. UO.Flying() devuelve int 1/true o 0/false; false también es posible si no hay ningún carácter o el protocolo anterior.

Scripts independientes de C#

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

Ejemplo sencillo

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

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

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

1. Habilite el vuelo si es necesario y verifique el resultado - script directo

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.
if (Truth(await EnsureFlight(2000)))
{
    UO.Print("Flight confirmed; ready for the next stage");
}
else
{
    UO.Print("Flight not confirmed; route was not started");
}

async Task<dynamic> EnsureFlight(dynamic timeoutMs)
{
    if (!(Truth(UO.Connected())) || Truth(UO.Dead()))
    {
        return false;
    }
    if (Truth(UO.Flying()))
    {
        return true;
    }
    UO.ToggleFly();
    var waited = 0;
    while (Truth(waited < timeoutMs))
    {
        if (!(Truth(UO.Connected())))
        {
            return false;
        }
        if (Truth(UO.Flying()))
        {
            return true;
        }
        await Delay(50);
        waited += 50;
    }
    return UO.Flying();
}

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

2. Solicitar embarque sólo durante el vuelo - función script

Parámetros y flujo de ejecución:

  • Hasta 40 espera 50 ms, solo una solicitud. La verificación Connected impide que la parada sea aceptada como un aterrizaje exitoso. Pausar el guión puede aumentar el tiempo real.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    if (Truth(UO.Connected()) && Truth(UO.Flying()))
    {
        UO.ToggleFly();
        var checks = 0;
        while (Truth(UO.Connected()) && Truth(UO.Flying()) && Truth(checks < 40))
        {
            await Delay(50);
            checks += 1;
        }

        if (Truth(UO.Connected()) && !(Truth(UO.Flying())))
        {
            UO.Print("Landing state observed");
        }
        else
        {
            UO.Print("Landing not confirmed");
        }
    }

    return null;
}

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

3. Comando de alternancia manual para teclas de acceso rápido: clase de secuencia de comandos

Parámetros y flujo de ejecución:

  • Asigne Main a una clave para una solicitud de cambio. Esto no es EnsureFlight: presionar nuevamente durante el vuelo solicita aterrizaje. Una repetición de clave o dos scripts paralelos pueden enviar múltiples solicitudes; aquí no hay ningún limitador instalado.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        if (Truth(UO.Connected()) && !(Truth(UO.Dead())))
        {
            UO.ToggleFly();
        }

        return null;
    }

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

Implementación del comando

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

UO.ToggleFly() — UO.ToggleFly()

Parámetros: Sin parámetros.

Resultado: void / Unit.

Durante la llamada:

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

case "togglefly": bridge.ToggleFly(); return InjectionValue.Unit;

Clone this wiki locally