Skip to content

ES UO Topic magic

Codex edited this page Oct 12, 2026 · 4 revisions

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

Magia

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

Hechizos, habilidades y movimiento con magia. Para una acción específica, establezca el objetivo con anticipación y verifique las condiciones de la aplicación.

Hechizos: todos los nombres y números.

Abrir catálogo completo y ejemplos

Secciones

Tema Comandos y explicaciones
Cast UO.Cast
CastToObject UO.CastToObject
CastAbility UO.CastAbility
Active Spell Ability UO.IsActiveSpellAbility
Spell Timers UO.TicksSpell

Todos los comandos del tema

Fundición

UO.Cast · UO.CastToObject · UO.CastAbility · UO.IsActiveSpellAbility · UO.TicksSpell

Viajar

UO.AddRecall · UO.AddGate

Ejemplos sobre el tema.

Cada tarjeta de comando tiene varios escenarios independientes: código directo, funciones y clases. A continuación se muestran escenarios breves seleccionados; restricciones y análisis completos están en las cartas.

UO.Cast

Parámetros, resultado y todos los escenarios

UO.CancelWaitTarget();
if (Truth(UO.Cast("Cure")))
{
    UO.Print("Choose the character with the spell cursor");
}
else
{
    UO.Print("Cure request rejected");
}

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

UO.CastToObject

Parámetros, resultado y todos los escenarios

var accepted = UO.CastToObject("Heal", "self");
UO.Print(Convert.ToString(accepted));

Referencia completa de comandos


UO.AddGate

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

Firmas de C#

void UO.AddGate(object? bookSerial);

Parámetros

  • bookSerial es un valor de identificador que el script compatible guarda como una entrada de lista heredada. En el tiempo de ejecución actual, el valor se serializa en una cadena; El comando no verifica la existencia de un objeto en el mundo.

Valor devuelto

void. El equipo no confirma la disponibilidad del libro ni la creación del portal del juego.

Comportamiento

  • El valor se agrega a la lista AddGate del estado de ejecución actual. En ClassicUO, esta lista de compatibilidad no activa una acción de juego y no tiene un captador público documentado para leer.

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.AddGate");
UO.AddGate("0x40012345");

1. Guarde la identificación como datos heredados sin abrir la puerta. - guión directo

Parámetros y flujo de ejecución:

  • Guarde la identificación como datos heredados sin abrir la puerta.
UO.AddGate("0x40012345");

2. Utilice el valor de la cadena pasada a un script compatible. - función de guión

Parámetros y flujo de ejecución:

  • Utilice el valor de la cadena pasada a un script compatible.
return  RunScenario();
 object? RunScenario()
{
    var bookSerial = "0x40012345";
    UO.AddGate(bookSerial);
    return null;
}

3. Escriba el valor en la lista de tiempo de ejecución AddGate. - clase de guión

Parámetros y flujo de ejecución:

  • Escriba el valor en la lista de tiempo de ejecución AddGate.
  • La llamada almacena datos de compatibilidad; No usa el libro en el mundo.
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()
    {
        RememberGateBook("0x40012345");
        return null;
    }

    void RememberGateBook(dynamic bookSerial)
    {
        UO.AddGate(bookSerial);
    }
}

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.AddGate(bookSerial) — UO.AddGate(Any)

Parámetros: bookSerial (Any)

Resultado: void / Unit.

Durante la llamada:

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

case "adddir":

                case "addfindlist":

                case "addgate":

                case "addrecall":

                case "addstep":

                    LegacyList(name).Add(string.Join("|", arguments.Select(value => value.ToString())));

                    break;

UO.AddRecall

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

Firmas de C#

void UO.AddRecall(object? bookSerial);

Parámetros

  • bookSerial es un valor de identificador que el script compatible guarda como una entrada de lista heredada. Runtime serializa el valor pasado en una cadena.

Valor devuelto

void. La llamada no arroja resultado y no confirma la presencia del libro.

Comportamiento

  • El valor se agrega a la lista AddRecall del estado de ejecución actual. En ClassicUO, esta lista de compatibilidad en sí misma no envía comandos del juego y no tiene un captador público documentado para leer.

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.AddRecall");
UO.AddRecall("0x40012345");

1. Guarde el valor como datos de compatibilidad, no ejecute Recall. - guión directo

Parámetros y flujo de ejecución:

  • Guarde el valor como datos de compatibilidad, no ejecute Recall.
UO.AddRecall("0x40012345");

2. Pase el identificador a través de una variable de cadena. - función de guión

Parámetros y flujo de ejecución:

  • Pase el identificador a través de una variable de cadena.
return  RunScenario();
 object? RunScenario()
{
    var bookSerial = "0x40012345";
    UO.AddRecall(bookSerial);
    return null;
}

3. Cada llamada agrega una entrada separada a AddRecall del tiempo de ejecución actual. - clase de guión

Parámetros y flujo de ejecución:

  • Cada llamada agrega una entrada separada a AddRecall del tiempo de ejecución actual.
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.AddRecall("0x40012345");
        UO.AddRecall("0x40012346");
        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.AddRecall(bookSerial) — UO.AddRecall(Any)

Parámetros: bookSerial (Any)

Resultado: void / Unit.

Durante la llamada:

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

case "adddir":

                case "addfindlist":

                case "addgate":

                case "addrecall":

                case "addstep":

                    LegacyList(name).Add(string.Join("|", arguments.Select(value => value.ToString())));

                    break;

UO.Cast

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

Firmas de C#

int UO.Cast(object? spellName);

Solicita el uso de un hechizo por su nombre. Exactamente un parámetro: spellName, por ejemplo UO.Cast("Heal"). El objetivo se selecciona por separado: con el mouse usando la mira que aparece o mediante WaitTargetObject antes de Cast. Aceptar una solicitud no confirma un efecto exitoso.

Parámetros

  • spellName - Línea obligatoria: el nombre en inglés del hechizo entre comillas: "Heal", "Cure", "Greater Heal". Los nombres no se traducen junto con la interfaz. El diccionario también reconoce alias integrados y deletrea palabras. El número ID, incluida la cadena "29", el objetivo, la distancia, la notoriedad, maxZ y la espera no son parámetros de Cast. Todos los nombres y escuelas.

Valor devuelto

int: 1/true—el cliente aceptó la solicitud; 0/false: el nombre no se reconoce o la solicitud se rechaza localmente. Puedes escribir if UO.Cast("Heal") {... } o comparar con 1/true. Estos no son hechizos ID ni pruebas de curación/daño. Un argumento faltante o adicional provoca un error. El comando no espera apuntar y completar el hechizo.

Comportamiento

  • Forma única: UO.Cast(spellName). No hay argumentos segundos ni posteriores. La búsqueda de un objetivo, la preparación de una respuesta, la espera y la limpieza se realizan mediante comandos separados.
  • Para seleccionar manualmente, borre su cola anterior CancelWaitTarget, llame a Cast y haga clic en el objeto deseado con la mira. Cast por sí solo no borra la cola: el script podría haberlo preparado con antelación.
  • Para un objetivo automático, primero llame a WaitTargetObject(serial/alias), luego a Cast(nombre). Esta orden le permite responder al objetivo rápido del servidor. Para hechizos sin alcance, no prepares una respuesta.
  • El servidor determina la disponibilidad, los recursos, el objetivo válido, el alcance y el efecto del hechizo. Un resultado positivo sólo confirma la aceptación local de la solicitud.
  • La cola preparada puede permanecer desatendida si falla el servidor. Elimínelo CancelWaitTarget después de una espera limitada o una falla local. No ejecute otros scripts en paralelo con el objetivo.
  • Una solicitud aceptada actualiza TicksSpell. Cast no espera a que HP sea animado, curado o cambiado. El catálogo ID explica el protocolo interno, pero no reemplaza el nombre en el argumento.

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

1. Cura: seleccione el objetivo con el mouse - script directo

Parámetros y flujo de ejecución:

  • La cura es el único argumento para Cast. Después del lanzamiento, selecciona el personaje con la vista del juego. Comprueba el fallo del servidor y el resultado del juego.
UO.CancelWaitTarget();
if (Truth(UO.Cast("Cure")))
{
    UO.Print("Choose the character with the spell cursor");
}
else
{
    UO.Print("Cure request rejected");
}

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

2. Curar: objetivo separado para usted - función de script

Parámetros y flujo de ejecución:

  • self — argumento WaitTargetObject; Sanar es el único argumento de Cast. 3000: tres segundos para apuntar en este ejemplo, no es garantía de que se complete la curación. Finalmente elimina la respuesta restante y en caso de error.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    UO.CancelWaitTarget();
    try
    {
        UO.WaitTargetObject("self");
        if (Truth(UO.Cast("Heal")))
        {
            await Delay(3000);
        }
    }
    finally
    {
        UO.CancelWaitTarget();
    }

    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. Función completa para el aliado seleccionado - clase de escenario

Parámetros y flujo de ejecución:

  • spellName, objetivo, cleanupDelayMs: parámetros de su función CastAtObject, no sobrecargar UO.Cast. Internamente, Cast solo acepta spellName. ASC convierte la cadena ID en un número; 4000 — retraso en el borrado de la cola. true significa aceptación de la solicitud, no éxito del tratamiento.

Hechizos / Hechizos

Hechizos/Hechizos

return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

    async public Task<object?> RunScenarioAsync()
    {
        var target = Asc(UO.GetSerial("lasttarget"), 0);
        if (Truth(await CastAtObject("Greater Heal", target, 4000)))
        {
            UO.Print("Request sent; verify healing in the game");
        }

        return null;
    }

    async Task<dynamic> CastAtObject(dynamic spellName, dynamic target, dynamic cleanupDelayMs)
    {
        if (!(Truth(UO.Connected())) || Truth(UO.Dead()) || Truth(target <= 0) || !(Truth(UO.Exists(target))))
        {
            return false;
        }

        dynamic accepted = false;
        UO.CancelWaitTarget();
        try
        {
            UO.WaitTargetObject(target);
            accepted = UO.Cast(spellName);
            if (Truth(accepted))
            {
                await Delay(cleanupDelayMs);
            }
        }
        finally
        {
            UO.CancelWaitTarget();
        }

        return accepted;
    }

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

    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.Cast(spellName) — UO.Cast(String)

Parámetros: spellName (String)

Resultado: int / Integer.

Durante la llamada:

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

public int Cast(string spellName)

        {

            if (NumberConversions.TryStr2Int((spellName ?? string.Empty).Trim(), out _))

            {

                SystemMessage("UO.Cast: use one spell name, for example UO.Cast(\"Heal\").");

                return 0;

            }

            return CastCore(spellName) ? 1 : 0;

        }

UO.CastAbility

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

Firmas de C#

int UO.CastAbility(object? abilityId);

Alterna la habilidad actualmente seleccionada del arma actual a través de UseAbility: al llamar nuevamente a una habilidad ya seleccionada se anula su selección.

Parámetros

  • abilityId — Nombre de habilidad o cadena numérica resuelta por ResolveClassicUOAbilityId; el valor desconocido da 0.

Valor devuelto

int 1 — el cliente llamó a la habilidad primaria/secundaria actual; 0: sin personaje, ID desconocido o la habilidad no coincide con el arma actual.

Comportamiento

  • 1 describe la aceptación de una solicitud de cliente, en lugar de un éxito o cancelación de recursos por parte del servidor. ID, que no es la habilidad primaria/secundaria actual, devuelve 0 incluso si está en el directorio.
  • GameActions.UsePrimaryAbility/UseSecondaryAbility verifique el bit 0x80. Cuando el bit esté apagado, deselecciona la otra opción y envía la habilidad seleccionada; cuando ya esté habilitado, envíe ID 0 para deshabilitarlo. Luego se cambia el bit. Al devolver 1 se confirma la llamada a esta rama del cliente, incluido el cierre.

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

1. Resolver nombre de habilidad: secuencia de comandos directa

Parámetros y flujo de ejecución:

  • La disponibilidad en el catálogo es independiente de la combinación de armas.
var id = UO.GetAbilityID("Armor Ignore");
if (Truth(id > 0))
{
    var accepted = UO.CastAbility(id);
    UO.Print(Convert.ToString(accepted));
}

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

2. Llamar por nombre - función de script

Parámetros y flujo de ejecución:

  • El nombre se resuelve en ID y se compara con el arma actual.
return  RunScenario();
 object? RunScenario()
{
    var accepted = UO.CastAbility("Armor Ignore");
    UO.Print(Convert.ToString(accepted));
    return null;
}

3. ID no válido - clase de script

Parámetros y flujo de ejecución:

  • Zero está fuera del directorio y devuelve 0 sin activación.

Hechizos / Hechizos

Hechizos/Hechizos

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 accepted = UO.CastAbility(0);
        UO.Print(Convert.ToString(accepted));
        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.CastAbility(abilityId) — UO.CastAbility(Integer)

Parámetros: abilityId (Integer/String)

Resultado: int / Integer.

Durante la llamada:

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

public int UseAbility(int abilityId) => bridge.UseAbility(abilityId);

UO.CastAbility(abilityId) — UO.CastAbility(String)

Parámetros: abilityId (Integer/String)

Resultado: int / Integer.

Durante la llamada:

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

public int UseAbility(string abilityName)

        {

            int abilityId = bridge.ResolveAbility(abilityName);

            return abilityId > 0 ? bridge.UseAbility(abilityId) : 0;

        }

UO.CastToObject

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

Firmas de C#

dynamic UO.CastToObject(object? spellName, object? objID);

Coloca un objetivo de objeto en espera y envía un hechizo por nombre o numérico ID.

Parámetros

  • spellName - string con el nombre del hechizo, incluyendo un guión bajo en lugar de un espacio, o un ID numérico para puente.Cast.
  • objID — Serie del objeto o nombre admitido de self/backpack/lasttarget/objeto guardado; Las cadenas numéricas y las cadenas 0x se resuelven en tiempo de ejecución.

Valor devuelto

int/boolean result 1: el cliente aceptó la solicitud Cast; 0 — solicitud rechazada. El servidor no confirma el éxito del hechizo.

Comportamiento

  • La forma de cadena pasa por CastAtTarget; la forma numérica pone WaitTargetObject, luego puente.Cast. Si Cast falla, el objetivo pendiente se cancela. Tras la aceptación, ticksSpell se actualiza.
  • El puente rechaza spellId no positivo, sin conexión y con carácter inactivo. El cronómetro marca el envío, no el final del reparto; el resultado del impacto sobre el objeto depende 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 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.CastToObject("Heal", "self");
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));

1. Date un capricho - guión directo

Parámetros y flujo de ejecución:

  • Heal convierte a self en el objetivo del siguiente cursor del servidor.
var accepted = UO.CastToObject("Heal", "self");
UO.Print(Convert.ToString(accepted));

2. Numérico ID - función de script

Parámetros y flujo de ejecución:

  • La forma numérica pasa ID 4 al cliente; 1 significa enviar una solicitud.
return  RunScenario();
 object? RunScenario()
{
    var accepted = UO.CastToObject(4, UO.Self());
    UO.Print(Convert.ToString(accepted));
    return null;
}

3. Comprobar objeto seleccionado: clase de secuencia de comandos

Parámetros y flujo de ejecución:

  • Una verificación de existencia local ayuda a evitar el uso del lasttarget que falta.

Hechizos / Hechizos

Hechizos/Hechizos

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 target = UO.LastTarget();
        if (Truth(UO.Exists(target)))
        {
            var accepted = UO.CastToObject("Greater Heal", target);
            UO.Print(Convert.ToString(accepted));
        }

        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.CastToObject(spellName, objID) — UO.CastToObject(Any,Any)

Parámetros: spellName (Any), objID (Any)

Resultado: dynamic / Any.

Durante la llamada:

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

case "casttoobject":

                    if (arguments[0].Kind == InjectionValueKind.String)

                        return CastAtTarget(arguments[0], arguments[1]) != 0 ? InjectionValue.True : InjectionValue.False;



                    WaitTargetObject(Arg(1));

                    int castAccepted = bridge.Cast(Arg(0));

                    if (castAccepted != 0)

                    {

                        ticksSpell = Timer();

                        return InjectionValue.True;

                    }



                    bridge.CancelTarget();

                    return InjectionValue.False;

UO.IsActiveSpellAbility

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

Firmas de C#

dynamic UO.IsActiveSpellAbility(object? spellName);

Comprueba si el servidor ha informado del estado activo de la habilidad/hechizo seleccionado. Útil antes de reactivar una habilidad canalizada. No enciende nada, no lanza ni selecciona un objetivo.

Parámetros

  • spellName: el único parámetro requerido: un nombre en inglés del catálogo de hechizos o el ID completo. Por ejemplo, "Confianza" y 402 representan el mismo hechizo Bushido. El caso no es importante; los guiones bajos en el nombre se reemplazan por espacios. También se reconoce la recta numérica. No pases el carácter ID, el elemento type o el número de habilidad.

Valor devuelto

int: 1 - el servidor informó el estado activo de este ID; 0: ahora no existe tal estado activo. En C# verifica el resultado numérico: if (UO.IsActiveSpellAbility(402) != 0) { ... }. Este es un signo lógico, no el número, tiempo o resultado del último lanzamiento. Nombre desconocido, ID fuera de 1…65535 y ningún estado resultante también proporciona 0.

Comportamiento

  • La lista actualiza el paquete del servidor 0xBF/0x25: habilitar agrega ID, deshabilitarlo lo elimina. Funciona sin ventana gráfica y sin botón de hechizo en la pantalla. Cerrar una ventana guarda el estado; romper la conexión la borra. Responder 0 no prueba que el personaje no pueda lanzar el hechizo. El servidor debería enviar este estado; Esta no es una verificación universal para todos los aficionados. Para curación/recuperación instantánea, un ejemplo de este tipo no confirma un lanzamiento exitoso. Este comando no determina la duración del hechizo, el maná restante, la disponibilidad y el éxito.

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

1. Comprobando el estado usando ID - script directo

Parámetros y flujo de ejecución:

  • 402 - ID Confianza. La variable activa contiene 1 o 0; true es equivalente a 1 aquí. El mensaje describe el estado recibido, no el resultado del intento de transmisión.
var active = UO.IsActiveSpellAbility(402);
if (Truth(Truth(active) == true))
{
    UO.Print("Confidence is active");
}
else
{
    UO.Print("No active Confidence state received");
}

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

2. No repetir habilidad activa: función de secuencia de comandos

Parámetros y flujo de ejecución:

  • "Confianza" - lo mismo ID 402. Cast solo acepta el nombre. La solicitud se envía una vez si no hay ningún estado activo; no garantiza el éxito en el servidor. No ejecute este fragmento en un bucle rápido; la respuesta del servidor puede retrasarse.
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.IsActiveSpellAbility("Confidence") == 0))
    {
        UO.Cast("Confidence");
    }

    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. Esperando reconocimiento con límite: clase de secuencia de comandos

Parámetros y flujo de ejecución:

  • deletrear - nombre o ID; esperado: true para encender, false para apagar; timeoutMs: límite de espera en milisegundos. Main espera hasta 500 ms con comprobaciones cada 25 ms y no emite nada. La función devuelve true si hay una coincidencia; en caso contrario, false. Ésta es una expectativa limitada de un estado local, no una prueba del motivo de su cambio; El tiempo real puede aumentar si el script está en pausa o bajo carga.

Hechizos / Hechizos

Hechizos/Hechizos

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(WaitAbilityState("Confidence", true, 500)))
        {
            UO.Print("Active state received");
        }
        else
        {
            UO.Print("No active state before timeout");
        }

        return null;
    }

    dynamic WaitAbilityState(dynamic spell, dynamic expected, dynamic timeoutMs)
    {
        var elapsed = 0;
        while (Truth(elapsed < timeoutMs))
        {
            if (Truth((UO.IsActiveSpellAbility(spell) == 1) == expected))
            {
                return true;
            }

            UO.Wait(25);
            elapsed = elapsed + 25;
        }

        return Truth((UO.IsActiveSpellAbility(spell) == 1) == expected);
    }

    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.IsActiveSpellAbility(spellName) — UO.IsActiveSpellAbility(Any)

Parámetros: spellName (Any)

Resultado: dynamic / Any.

Durante la llamada:

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

case "isactivespellability":

                {

                    int? spellId = arguments[0].Kind == InjectionValueKind.String

                        ? ConvertSpellName(Text(0).Replace('_', ' '))

                        : (int?)Arg(0);

                    return new InjectionValue(spellId.HasValue ? bridge.IsActiveSpell(spellId.Value) : 0);

                }

UO.TicksSpell

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

Firmas de C#

int UO.TicksSpell();

Lee la marca guardada TicksSpell.

Parámetros

No hay parámetros.

Valor devuelto

int: marca UO.Timer en décimas de segundo desde el inicio del tiempo de ejecución. 0 - la marca aún no se ha fijado o el evento ocurrió en la primera décima de segundo; No son milisegundos ni tiempo calendario.

Comportamiento

  • Devuelve el campo ticksSpell. Se actualiza mediante Cast/CastAtTarget aceptado exitosamente; no es una observación automática de todas las actividades manuales/del servidor. El comando en sí no cambia la marca.
  • UO.Timer() - la marca calcula la edad en décimas de segundo. Las marcas no se comparan entre diferentes tiempos de ejecución.

Scripts independientes de C#

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

Ejemplo sencillo

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

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

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

1. Llamada directa - guión directo

Parámetros y flujo de ejecución:

  • Lee la marca guardada TicksSpell.
var stamp = UO.TicksSpell();
UO.Print(stamp);

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

Parámetros y flujo de ejecución:

  • Devuelve el campo ticksSpell. Se actualiza mediante Cast/CastAtTarget aceptado exitosamente; no es una observación automática de todas las actividades manuales/del servidor. El comando en sí no cambia la marca.
return  RunScenario();
 object? RunScenario()
{
    var stamp = UO.TicksSpell();
    var ageTenths = UO.Timer() - stamp;
    UO.Print(ageTenths);
    return null;
}

3. Función auxiliar completa: clase de script

Parámetros y flujo de ejecución:

  • UO.Timer() - la marca calcula la edad en décimas de segundo. Las marcas no se comparan entre diferentes tiempos de ejecución.

Hechizos / Hechizos

Hechizos/Hechizos

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.TicksSpell();
        UO.Wait(250);
        var after = UO.TicksSpell();
        UO.Print(before = after);
        return null;
    }
}

Implementación del comando

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

UO.TicksSpell() — UO.TicksSpell()

Parámetros: Sin parámetros.

Resultado: int / Integer.

Durante la llamada:

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

public int TicksSpell() => ticksSpell;

Clone this wiki locally