ES UO Topic skills - LIHACHTETAN/ClassicUO-Bad-Newbie-CSharp-Scripts-IDE GitHub Wiki

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

Habilidades

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

Aplicar habilidades, leer valores y gestionar bloqueos de habilidades. El nombre de la habilidad y la disponibilidad de la acción dependen de los datos soportados por el cliente/servidor.

Habilidades: nombres y números exactos.

Abrir catálogo completo y ejemplos

Secciones

Tema Comandos y explicaciones
UseSkill UO.UseSkill
Skill Value UO.GetSkillValue · UO.SkillVal
Skill Current Value UO.GetSkillCurrentValue
Skill Cap UO.GetSkillCap
Skill Locks UO.GetSkillLockState · UO.SetSkillLockState
Tracking UO.Track
Snooping UO.Snoop
Stealth UO.StealthCnt · UO.UseSkill

Todos los comandos del tema

Habilidades

UO.UseSkill · UO.GetSkillCap · UO.GetSkillCurrentValue · UO.GetSkillValue · UO.GetSkillLockState · UO.SetSkillLockState · UO.SkillLockState · UO.SkillVal · UO.Track · UO.Snoop · UO.StealthCnt · UO.TicksSkill

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

Parámetros, resultado y todos los escenarios

if (!(Truth(UO.Connected())) || Truth(UO.Dead()) || Truth(UO.Hidden()))
{
    return null;
}
if (!(Truth(UO.UseSkill("Hiding"))))
{
    UO.Print("Hiding request rejected");
    return null;
}
await Delay(1000);
if (Truth(UO.Hidden()))
{
    UO.Print("Character is hidden");
}
else
{
    UO.Print("Not hidden yet; check the game journal");
}

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;

UO.GetSkillValue

Parámetros, resultado y todos los escenarios

var selector = "Mining";
var value = UO.GetSkillValue(selector);
UO.Print(Convert.ToString(value));

Referencia completa de comandos


UO.GetSkillCap

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

Firmas de C#

double UO.GetSkillCap(object? skillName);

Lee el límite de habilidades recibido del servidor.

Parámetros

  • skillName - Habilidad requerida: un nombre de los datos del cliente, como "Minería" o "Conocimiento de animales", o un índice decimal de 0 a Skills.Length−1, número o cadena. El caso del nombre no es importante, los espacios finales se eliminan y _ se reemplaza por un espacio. El índice no es el ID de la materia ni el índice de 1. Una cadena numérica siempre significa un índice.

Valor devuelto

double (Double): puntos de habilidad en incrementos de 0,1, por ejemplo 95,1, no 951. El campo CapFixed se divide por 10 directamente en Double. 0 significa cero habilidad o ningún personaje/habilidad. El resultado no es bool. Legacy SkillVal/BaseVal tiene una escala diferente; no mezcle estas familias.

Comportamiento

  • La lectura se realiza mediante Invoke en el hilo del juego en función de los datos ya recibidos; Los paquetes de red no se envían. La habilidad no se utiliza ni se entrena. Dos solicitudes, dos instantáneas separadas.
  • Habilidad requerida: un nombre de los datos del cliente, como "Minería" o "Conocimiento de animales", o un índice decimal de 0 a Skills.Length−1, número o cadena. El caso del nombre no es importante, los espacios finales se eliminan y _ se reemplaza por un espacio. El índice no es el ID del sujeto ni el índice de 1. Una cadena numérica siempre significa un índice.
  • ExecuteClientApiCompatibility selecciona la rama de comando. El texto lee el selector de habilidades, Arg lee los números y modos numéricos. Un argumento no convertible puede fallar en la llamada con un error de conversión.

Scripts independientes de C#

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

Ejemplo sencillo

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

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

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

1. Lectura y salida: guión directo

Parámetros y flujo de ejecución:

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

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()
{
    if (Truth(UO.GetSkillLockState("Mining") >= 0))
    {
        var value = UO.GetSkillCap("Mining");
        if (Truth(value >= 95.1))
        {
            UO.Print("Value >= 95.1: " + Convert.ToString(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: 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.

Habilidades

Habilidades

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("Animal_Lore");
        await Delay(1000);
        var after = ReadValue("Animal Lore");
        UO.Print(Convert.ToString(after - before));
        return null;
    }

    dynamic ReadValue(dynamic selector)
    {
        return UO.GetSkillCap(selector);
    }

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

Implementación del comando

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

UO.GetSkillCap(skillName) — UO.GetSkillCap(Any)

Parámetros: skillName (Any)

Resultado: double / Decimal.

Durante la llamada:

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

case "getskillcap": return new InjectionValue(bridge.GetSkillValue(Text(0), false, true));

UO.GetSkillCurrentValue

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

Firmas de C#

double UO.GetSkillCurrentValue(object? skillName);

Lee el valor efectivo de la habilidad con modificadores.

Parámetros

  • skillName - Habilidad requerida: un nombre de los datos del cliente, como "Minería" o "Conocimiento de animales", o un índice decimal de 0 a Skills.Length−1, número o cadena. El caso del nombre no es importante, los espacios finales se eliminan y _ se reemplaza por un espacio. El índice no es el ID de la materia ni el índice de 1. Una cadena numérica siempre significa un índice.

Valor devuelto

double (Double): puntos de habilidad en incrementos de 0,1, por ejemplo 95,1, no 951. El campo ValueFixed se divide por 10 directamente en Double. 0 significa cero habilidad o ningún personaje/habilidad. El resultado no es bool. Legacy SkillVal/BaseVal tiene una escala diferente; no mezcle estas familias.

Comportamiento

  • La lectura se realiza mediante Invoke en el hilo del juego en función de los datos ya recibidos; Los paquetes de red no se envían. La habilidad no se utiliza ni se entrena. Dos solicitudes, dos instantáneas separadas.
  • Habilidad requerida: un nombre de los datos del cliente, como "Minería" o "Conocimiento de animales", o un índice decimal de 0 a Skills.Length−1, número o cadena. El caso del nombre no es importante, los espacios finales se eliminan y _ se reemplaza por un espacio. El índice no es el ID del sujeto ni el índice de 1. Una cadena numérica siempre significa un índice.
  • ExecuteClientApiCompatibility selecciona la rama de comando. El texto lee el selector de habilidades, Arg lee los números y modos numéricos. Un argumento no convertible puede fallar en la llamada con un error de conversión.

Scripts independientes de C#

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

Ejemplo sencillo

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

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

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

1. Lectura y salida: guión directo

Parámetros y flujo de ejecución:

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

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()
{
    if (Truth(UO.GetSkillLockState("Mining") >= 0))
    {
        var value = UO.GetSkillCurrentValue("Mining");
        if (Truth(value >= 95.1))
        {
            UO.Print("Value >= 95.1: " + Convert.ToString(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: 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.

Habilidades

Habilidades

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("Animal_Lore");
        await Delay(1000);
        var after = ReadValue("Animal Lore");
        UO.Print(Convert.ToString(after - before));
        return null;
    }

    dynamic ReadValue(dynamic selector)
    {
        return UO.GetSkillCurrentValue(selector);
    }

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

Implementación del comando

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

UO.GetSkillCurrentValue(skillName) — UO.GetSkillCurrentValue(Any)

Parámetros: skillName (Any)

Resultado: double / Decimal.

Durante la llamada:

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

case "getskillcurrentvalue": return new InjectionValue(bridge.GetSkillValue(Text(0), true, false));

UO.GetSkillLockState

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

Firmas de C#

int UO.GetSkillLockState(object? skillName);

Lee el modo de cambio de habilidad local.

Parámetros

  • skillName - Habilidad requerida: un nombre de los datos del cliente, como "Minería" o "Conocimiento de animales", o un índice decimal de 0 a Skills.Length−1, número o cadena. El caso del nombre no es importante, los espacios finales se eliminan y _ se reemplaza por un espacio. El índice no es el ID de la materia ni el índice de 1. Una cadena numérica siempre significa un índice.

Valor devuelto

int: 0 - aumentar, 1 - disminuir, 2 - bloquear. Este es un código de modo, no true/false. Para una habilidad desconocida o un personaje faltante, se devuelve −1.

Comportamiento

  • La lectura se realiza mediante Invoke en el hilo del juego en función de los datos ya recibidos; Los paquetes de red no se envían. La habilidad no se utiliza ni se entrena. Dos solicitudes, dos instantáneas separadas.
  • Habilidad requerida: un nombre de los datos del cliente, como "Minería" o "Conocimiento de animales", o un índice decimal de 0 a Skills.Length−1, número o cadena. El caso del nombre no es importante, los espacios finales se eliminan y _ se reemplaza por un espacio. El índice no es el ID del sujeto ni el índice de 1. Una cadena numérica siempre significa un índice.
  • ExecuteClientApiCompatibility selecciona la rama de comando. El texto lee el selector de habilidades, Arg lee los números y modos numéricos. Un argumento no convertible puede fallar en la llamada con un error de conversión.

Scripts independientes de C#

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

Ejemplo sencillo

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

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

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

1. Lectura y salida: guión directo

Parámetros y flujo de ejecución:

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

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

Parámetros y flujo de ejecución:

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

    return null;
}

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

3. Función auxiliar completa: clase de script

Parámetros y flujo de ejecución:

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

Habilidades

Habilidades

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

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

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

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

Implementación del comando

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

UO.GetSkillLockState(skillName) — UO.GetSkillLockState(Any)

Parámetros: skillName (Any)

Resultado: int / Integer.

Durante la llamada:

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

case "getskilllockstate": return new InjectionValue(bridge.GetSkillLockState(Text(0)));

UO.GetSkillValue

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

Firmas de C#

double UO.GetSkillValue(object? skillName);

Lee el valor base de la habilidad sin modificadores.

Parámetros

  • skillName - Habilidad requerida: un nombre de los datos del cliente, como "Minería" o "Conocimiento de animales", o un índice decimal de 0 a Skills.Length−1, número o cadena. El caso del nombre no es importante, los espacios finales se eliminan y _ se reemplaza por un espacio. El índice no es el ID de la materia ni el índice de 1. Una cadena numérica siempre significa un índice.

Valor devuelto

double (Double): puntos de habilidad en incrementos de 0,1, por ejemplo 95,1, no 951. El campo BaseFixed se divide por 10 directamente en Double. 0 significa cero habilidad o ningún personaje/habilidad. El resultado no es bool. Legacy SkillVal/BaseVal tiene una escala diferente; no mezcle estas familias.

Comportamiento

  • La lectura se realiza mediante Invoke en el hilo del juego en función de los datos ya recibidos; Los paquetes de red no se envían. La habilidad no se utiliza ni se entrena. Dos solicitudes, dos instantáneas separadas.
  • Habilidad requerida: un nombre de los datos del cliente, como "Minería" o "Conocimiento de animales", o un índice decimal de 0 a Skills.Length−1, número o cadena. El caso del nombre no es importante, los espacios finales se eliminan y _ se reemplaza por un espacio. El índice no es el ID del sujeto ni el índice de 1. Una cadena numérica siempre significa un índice.
  • ExecuteClientApiCompatibility selecciona la rama de comando. El texto lee el selector de habilidades, Arg lee los números y modos numéricos. Un argumento no convertible puede fallar en la llamada con un error de conversión.

Scripts independientes de C#

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

Ejemplo sencillo

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

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

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

1. Lectura y salida: guión directo

Parámetros y flujo de ejecución:

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

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()
{
    if (Truth(UO.GetSkillLockState("Mining") >= 0))
    {
        var value = UO.GetSkillValue("Mining");
        if (Truth(value >= 95.1))
        {
            UO.Print("Value >= 95.1: " + Convert.ToString(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: 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.

Habilidades

Habilidades

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("Animal_Lore");
        await Delay(1000);
        var after = ReadValue("Animal Lore");
        UO.Print(Convert.ToString(after - before));
        return null;
    }

    dynamic ReadValue(dynamic selector)
    {
        return UO.GetSkillValue(selector);
    }

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

Implementación del comando

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

UO.GetSkillValue(skillName) — UO.GetSkillValue(Any)

Parámetros: skillName (Any)

Resultado: double / Decimal.

Durante la llamada:

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

case "getskillvalue": return new InjectionValue(bridge.GetSkillValue(Text(0), false, false));

UO.SetSkillLockState

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

Firmas de C#

void UO.SetSkillLockState(object? skillName, object? skillState);

Solicita un cambio al modo de habilidad.

Parámetros

  • skillName - Habilidad requerida: un nombre de los datos del cliente, como "Minería" o "Conocimiento de animales", o un índice decimal de 0 a Skills.Length−1, número o cadena. El caso del nombre no es importante, los espacios finales se eliminan y _ se reemplaza por un espacio. El índice no es el ID de la materia ni el índice de 1. Una cadena numérica siempre significa un índice.
  • skillState — 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.
  • Habilidad requerida: un nombre de los datos del cliente, como "Minería" o "Conocimiento de animales", o un índice decimal de 0 a Skills.Length−1, número o cadena. El caso del nombre no es importante, los espacios finales se eliminan y _ se reemplaza por un espacio. El índice no es el ID del sujeto ni el índice de 1. Una cadena numérica siempre significa un índice.
  • 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.SetSkillLockState");
UO.SetSkillLockState("Mining", 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 = "Mining";
var mode = 2;
UO.SetSkillLockState(selector, mode);
UO.Print(Convert.ToString(UO.GetSkillLockState(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 = "Mining";
    var before = UO.GetSkillLockState(selector);
    if (Truth(before >= 0) && Truth(before <= 2))
    {
        UO.SetSkillLockState(selector, 0);
        UO.Print(Convert.ToString(UO.GetSkillLockState(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.

Habilidades

Habilidades

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("Mining", 2);
        return null;
    }

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

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

        UO.SetSkillLockState(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.SetSkillLockState(skillName, skillState) — UO.SetSkillLockState(Any,Any)

Parámetros: skillName (Any), skillState (Any)

Resultado: void / Unit.

Durante la llamada:

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

case "setskilllockstate":

                case "skilllockstate": bridge.SetSkillLockState(Text(0), Arg(1)); return InjectionValue.Unit;

UO.SkillLockState

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

Firmas de C#

void UO.SkillLockState(object? skillName, object? skillState);

Solicita un cambio al modo de habilidad.

Parámetros

  • skillName - Habilidad requerida: un nombre de los datos del cliente, como "Minería" o "Conocimiento de animales", o un índice decimal de 0 a Skills.Length−1, número o cadena. El caso del nombre no es importante, los espacios finales se eliminan y _ se reemplaza por un espacio. El índice no es el ID de la materia ni el índice de 1. Una cadena numérica siempre significa un índice.
  • skillState — 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.
  • Habilidad requerida: un nombre de los datos del cliente, como "Minería" o "Conocimiento de animales", o un índice decimal de 0 a Skills.Length−1, número o cadena. El caso del nombre no es importante, los espacios finales se eliminan y _ se reemplaza por un espacio. El índice no es el ID del sujeto ni el índice de 1. Una cadena numérica siempre significa un índice.
  • 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.SkillLockState");
UO.SkillLockState("Mining", 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 = "Mining";
var mode = 2;
UO.SkillLockState(selector, mode);
UO.Print(Convert.ToString(UO.GetSkillLockState(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 = "Mining";
    var before = UO.GetSkillLockState(selector);
    if (Truth(before >= 0) && Truth(before <= 2))
    {
        UO.SkillLockState(selector, 0);
        UO.Print(Convert.ToString(UO.GetSkillLockState(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("Mining", 2);
        return null;
    }

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

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

        UO.SkillLockState(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.SkillLockState(skillName, skillState) — UO.SkillLockState(Any,Any)

Parámetros: skillName (Any), skillState (Any)

Resultado: void / Unit.

Durante la llamada:

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

case "setskilllockstate":

                case "skilllockstate": bridge.SetSkillLockState(Text(0), Arg(1)); return InjectionValue.Unit;

UO.SkillVal

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

Firmas de C#

int UO.SkillVal(object? skillName);
int UO.SkillVal(object? skill, object? variant);

Lee el valor heredado de una habilidad o su modo/crecimiento.

Parámetros

  • variant - Opcional int: 0 - valor efectivo (predeterminado), 1 - valor base, 2 - aumento en el valor base desde la primera lectura de esta habilidad en tiempo de ejecución, 3 - modo de bloqueo.
  • skillName: nombre del diccionario de tiempo de ejecución skillNameToSkillId, por ejemplo, "Minería". Las mayúsculas y minúsculas no son importantes, pero los espacios no se recortan y _ no se reemplaza. El texto numérico de esta función heredada no es un índice; El nombre desconocido muestra un mensaje y da 0.
  • skill: nombre del diccionario de tiempo de ejecución skillNameToSkillId, por ejemplo, "Minería". Las mayúsculas y minúsculas no son importantes, pero los espacios no se recortan y _ no se reemplaza. El texto numérico de esta función heredada no es un índice; El nombre desconocido muestra un mensaje y da 0.

Valor devuelto

int: opciones 0/1/2 - décimas de puntos de habilidad (951 = 95.1); opción 3 - modo 0/1/2 o -1 si no hay ningún jugador/habilidad. El nombre/variante desconocido da 0. La opción 2 puede ser negativa si la base es menor que el tiempo de ejecución de referencia guardado, incluso en ausencia de Player y base=0. Este no es bool.

Comportamiento

  • Antes de elegir la variante, se toma SkillBaseVal y, si la habilidad se lee por primera vez, se guarda la línea base. Por lo tanto, incluso leer variante=0/1/3 establece el punto de partida para el crecimiento futuro variante=2.
  • Una variante incorrecta muestra un mensaje y muestra 0, pero es posible que la línea base ya se haya creado. Los valores GetSkillValue/GetSkillCurrentValue se miden con gafas double y tienen una escala diferente.

Scripts independientes de C#

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

Ejemplo sencillo

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

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

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

1. Llamada directa - guión directo

Parámetros y flujo de ejecución:

  • Lee el valor heredado de una habilidad o su modo/crecimiento.
UO.Print(UO.SkillVal("Mining"));
UO.Print(UO.SkillVal("Mining", 1));

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

Parámetros y flujo de ejecución:

  • Antes de elegir la variante, se toma SkillBaseVal y, si la habilidad se lee por primera vez, se guarda la línea base. Por lo tanto, incluso leer variante=0/1/3 establece el punto de partida para el crecimiento futuro variante=2.
return  RunScenario();
 object? RunScenario()
{
    var baseline = UO.SkillVal("Mining", 2);
    UO.Wait(1000);
    UO.Print(UO.SkillVal("Mining", 2) - baseline);
    return null;
}

3. Función auxiliar completa: clase de script

Parámetros y flujo de ejecución:

  • Una variante incorrecta muestra un mensaje y muestra 0, pero es posible que la línea base ya se haya creado. Los valores GetSkillValue/GetSkillCurrentValue se miden con gafas double y tienen una escala diferente.

Habilidades

Habilidades

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 lockMode = UO.SkillVal("Mining", 3);
        if (Truth(lockMode == 2))
        {
            UO.Print("Skill locked");
        }

        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.SkillVal(skillName) — UO.SkillVal(String)

Parámetros: skillName (String)

Resultado: int / Integer.

Durante la llamada:

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

public int SkillVal(string skillName) => SkillVal(skillName, 0);

UO.SkillVal(skill, variant) — UO.SkillVal(Any,Any)

Parámetros: skill (Any), variant (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.

values => new InjectionValue(SkillVal(values[0].ToString(), NumberConversions.ToInt(values[1])))

UO.Snoop

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

Firmas de C#

void UO.Snoop();
void UO.Snoop(object? container);

Utiliza un contenedor/objeto y normalmente solicita que se abra.

Parámetros

  • container - Opcional serial/alias. El valor predeterminado es puente.LastTarget. El comando no marca IsContainer ni afiliación.

Valor devuelto

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

Comportamiento

  • ExecuteLegacyManualAlias llama al puente.UseObject(Arg(0,puente.LastTarget)). Esta es una solicitud normal de clic double, no un algoritmo de cliente separado para la habilidad Snooping.
  • 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.Snoop");
UO.Snoop();

1. Llamada directa - guión directo

Parámetros y flujo de ejecución:

  • Utiliza un contenedor/objeto y normalmente solicita que se abra.
UO.Snoop();

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

Parámetros y flujo de ejecución:

  • ExecuteLegacyManualAlias llama al puente.UseObject(Arg(0,puente.LastTarget)). Esta es una solicitud normal de clic double, no un algoritmo de cliente separado para la habilidad Snooping.
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.IsContainer("lasttarget")))
    {
        UO.Snoop("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:

  • 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()
    {
        var id = UO.GetSerial("lasttarget");
        if (Truth(UO.Exists(id)))
        {
            UO.Snoop(id);
            UO.Wait(500);
            UO.Print(UO.GetContent(id));
        }

        return null;
    }

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

Implementación del comando

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

UO.Snoop() — UO.Snoop()

Parámetros: Sin parámetros.

Resultado: void / Unit.

Durante la llamada:

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

case "snoop": bridge.UseObject(Arg(0, bridge.LastTarget)); break;

UO.Snoop(container) — UO.Snoop(Any)

Parámetros: container (Any)

Resultado: void / Unit.

Durante la llamada:

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

case "snoop": bridge.UseObject(Arg(0, bridge.LastTarget)); break;

UO.StealthCnt

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

Firmas de C#

int UO.StealthCnt();

Lee el contador de compensación de sigilo local del personaje.

Parámetros

No hay parámetros.

Valor devuelto

int es la suma acumulada max(abs(deltaX),abs(deltaY)) entre llamadas en IsHidden. Este no es un número garantizado de pasos sigilosos del servidor ni el límite restante.

Comportamiento

  • Sin el Reproductor o cuando el Reproductor no está oculto, restablece el recuento=0 y guarda el X/Y actual (o -1). Cuando es sigiloso, se compara con el X/Y guardado anteriormente, agrega desplazamiento y actualiza las coordenadas.
  • El contador cambia a medida que se lee. Se puede omitir el avance y retroceso entre llamadas; cambiar Z sin X/Y no aumenta el contador.

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

1. Llamada directa - guión directo

Parámetros y flujo de ejecución:

  • Lee el contador de compensación de sigilo local del personaje.
UO.Print(UO.StealthCnt());

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

Parámetros y flujo de ejecución:

  • Sin el Reproductor o cuando el Reproductor no está oculto, restablece el recuento=0 y guarda el X/Y actual (o -1). Cuando es sigiloso, se compara con el X/Y guardado anteriormente, agrega desplazamiento y actualiza las coordenadas.
return  RunScenario();
 object? RunScenario()
{
    var before = UO.StealthCnt();
    UO.Wait(500);
    UO.Print(UO.StealthCnt() - before);
    return null;
}

3. Función auxiliar completa: clase de script

Parámetros y flujo de ejecución:

  • El contador cambia a medida que se lee. Se puede omitir el avance y retroceso entre llamadas; cambiar Z sin X/Y no aumenta el contador.
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.Hidden()))
        {
            UO.Print(UO.StealthCnt());
        }
        else
        {
            UO.Print(UO.StealthCnt());
        }

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

Parámetros: Sin parámetros.

Resultado: int / Integer.

Durante la llamada:

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

public int StealthCnt() => bridge.StealthCnt();

UO.TicksSkill

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

Firmas de C#

int UO.TicksSkill();

Lee la marca guardada TicksSkill.

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 ticksSkill. Se actualiza con el UseSkill/UseSkillAtTarget 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.TicksSkill();
UO.Print("TicksSkill: " + Convert.ToString(result));

1. Llamada directa - guión directo

Parámetros y flujo de ejecución:

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

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

Parámetros y flujo de ejecución:

  • Devuelve el campo ticksSkill. Se actualiza con el UseSkill/UseSkillAtTarget 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.TicksSkill();
    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.

Habilidades

Habilidades

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

Parámetros: Sin parámetros.

Resultado: int / Integer.

Durante la llamada:

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

public int TicksSkill() => ticksSkill;

UO.Track

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

Firmas de C#

void UO.Track();
void UO.Track(object? flag);
void UO.Track(object? flagRaw, object? x, object? y);

Crea o elimina una flecha local a las coordenadas. Ayuda a marcar el lugar de regreso. No activa la habilidad de Rastreo, no busca criaturas y no mueve al personaje.

Parámetros

  • flag — 0 — elimina la flecha local; cualquier otro todo - espectáculo. UO.Track() y UO.Track(1) lo colocan en el X/Y actual del personaje. UO.Track(1, x, y) lo coloca en el punto indicado; UO.Track(0, x, y) ignora las coordenadas. La forma de dos parámetros no está incluida en el API registrado.
  • flagRaw — 0 — elimina la flecha local; cualquier otro todo - espectáculo. UO.Track() y UO.Track(1) lo colocan en el X/Y actual del personaje. UO.Track(1, x, y) lo coloca en el punto indicado; UO.Track(0, x, y) ignora las coordenadas. La forma de dos parámetros no está incluida en el API registrado.
  • x: coordenadas de celda en el mapa actual, no píxeles de ventana. No se aceptan Z ni número de tarjeta. Seleccione un punto existente en su mapa; el equipo no comprueba el terreno, no traza una ruta ni sigue un objetivo en movimiento.
  • y: coordenadas de celda en el mapa actual, no píxeles de ventana. No se aceptan Z ni número de tarjeta. Seleccione un punto existente en su mapa; el equipo no comprueba el terreno, no traza una ruta ni sigue un objetivo en movimiento.

Valor devuelto

void - sin valor; el comando no devuelve movimiento exitoso o bool. Sólo se cambia el token local.

Comportamiento

  • Las flechas locales y del servidor se almacenan por separado. Track(0) no elimina la flecha del servidor. Sin gráficos, el marcador se guarda y aparece cuando se abre la ventana. Cerrar la ventana del juego no elimina los marcadores; romper la conexión los borra. El servidor puede mover o quitar su flecha. Las coordenadas no prueban que el objetivo sea alcanzable.
  • Coordenadas de celda en el mapa actual, no píxeles de ventana. No se aceptan Z ni número de tarjeta. Seleccione un punto existente en su mapa; el equipo no comprueba el terreno, no traza una ruta ni sigue un objetivo en movimiento.
  • 0 — elimina la flecha local; cualquier otro todo - espectáculo. UO.Track() y UO.Track(1) lo colocan en el X/Y actual del personaje. UO.Track(1, x, y) lo coloca en el punto indicado; UO.Track(0, x, y) ignora las coordenadas. La forma de dos parámetros no está incluida en el API registrado.

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

1. Aplicación directa - guión directo

Parámetros y flujo de ejecución:

  • UO.Track() recuerda el punto actual: después de salir, la flecha apunta hacia atrás. El punto no se actualiza automáticamente siguiendo el carácter.
UO.Track();

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

Parámetros y flujo de ejecución:

  • Muestra una flecha local a 1450,1690 en el mapa actual. Si ya estás dentro de un cuadrado, Track(0) lo elimina. Sustituye tus coordenadas.
return  RunScenario();
 object? RunScenario()
{
    var x = 1450;
    var y = 1690;
    UO.Track(1, x, y);
    if (Truth(UO.GetDistance(x, y) <= 1))
    {
        UO.Track(0);
    }

    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:

  • La función MarkIfDistant usa el mismo X/Y y distancia: si el objetivo está a más de dos celdas, coloca una flecha; de lo contrario, la elimina. La función completa se muestra a continuación; aquí no hay movimiento ni expectativa de logro.
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()
    {
        MarkIfDistant(1450, 1690);
        return null;
    }

    void MarkIfDistant(dynamic x, dynamic y)
    {
        if (Truth(UO.GetDistance(x, y) > 2))
        {
            UO.Track(1, x, y);
        }
        else
        {
            UO.Track(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.Track() — UO.Track()

Parámetros: Sin parámetros.

Resultado: void / Unit.

Durante la llamada:

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

public void Track() => Track(1, GetX(), GetY());

UO.Track(flag) — UO.Track(Any)

Parámetros: flag (Any)

Resultado: void / Unit.

Durante la llamada:

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

public void Track(InjectionValue flag) => Track(NumberConversions.ToInt(flag), GetX(), GetY());

UO.Track(flagRaw, x, y) — UO.Track(Any,Any,Any)

Parámetros: flagRaw (Any), x (Any), y (Any)

Resultado: void / Unit.

Durante la llamada:

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

public void Track(InjectionValue flagRaw, InjectionValue x, InjectionValue y)

            => Track(NumberConversions.ToInt(flagRaw), NumberConversions.ToInt(x), NumberConversions.ToInt(y));

UO.UseSkill

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

Firmas de C#

int UO.UseSkill(object? skillName);

Le pide al servidor que use la habilidad por su nombre. Exactamente un parámetro: skillName. UO.UseSkill("Hiding") intenta ocultar su propio carácter. Si la habilidad necesita un objetivo, selecciónelo con la mira del juego o con anticipación con un comando separado WaitTargetObject.

Parámetros

  • skillName - Cadena requerida: el nombre exacto en inglés de la habilidad, como "Ocultar", "Anatomía" o "Meditación". El caso no es importante; los espacios y guiones bajos no se corrigen automáticamente. El número de habilidad, serial, self, la distancia, la notoriedad, maxZ y la espera no se transfieren aquí. Todos los nombres.

Valor devuelto

int: 1/true—el cliente aceptó la solicitud; 0/false: nombre desconocido o error local. Esto no es un éxito de habilidad, un crecimiento de habilidad o una señal de sigilo. Para sigilo, lea Hidden(). Puedes escribir if UO.UseSkill("Hiding") {... } o comparar con 1/true. Un argumento faltante o adicional es un error de llamada.

Comportamiento

  • Forma única: UO.UseSkill(skillName). No hay segundos parámetros ni posteriores. La búsqueda, el objetivo y la espera se realizan mediante otros comandos.
  • Esconderse y Meditar no requieren que se seleccione otro objeto. No te prepares WaitTargetObject para ellos: la ráfaga restante puede responder a la vista del siguiente forastero.
  • La anatomía utiliza un alcance. Llame a UseSkill("Anatomía") y seleccione el personaje con el mouse. Para responder automáticamente, primero ejecuta WaitTargetObject, luego UseSkill: de esta forma no te perderás la respuesta rápida del servidor.
  • UseSkill no crea ni borra la cola de destino. Si ha preparado una respuesta, borrela CancelWaitTarget en caso de falla/tiempo de espera. No ejecute otros escenarios de avistamiento al mismo tiempo.
  • El envenenamiento, la provocación y otras habilidades de varios pasos requieren un procesamiento separado de objetivos/herramientas adicionales. Un objeto preseleccionado no completa ninguna habilidad.
  • El nombre en el diccionario no garantiza el uso sin herramienta. La minería requiere una herramienta; Los hechizos son lanzados por Cast. Las reglas y el éxito los determina el servidor.
  • Una solicitud aceptada actualiza TicksSkill. El equipo no espera sigilo, efecto, aumento de habilidades o consumo de cola.

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

1. Ocultar mediante Ocultación - script directo

Parámetros y flujo de ejecución:

  • Esconderse es el único argumento. UO.Wait(1000) da tiempo para responder; Hidden lee la bandera recibida. Regresar 1 desde UseSkill no significa que hayas escapado.
if (!(Truth(UO.Connected())) || Truth(UO.Dead()) || Truth(UO.Hidden()))
{
    return null;
}
if (!(Truth(UO.UseSkill("Hiding"))))
{
    UO.Print("Hiding request rejected");
    return null;
}
await Delay(1000);
if (Truth(UO.Hidden()))
{
    UO.Print("Character is hidden");
}
else
{
    UO.Print("Not hidden yet; check the game journal");
}

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. Anatomía con un objetivo preparado por separado: función de script

Parámetros y flujo de ejecución:

  • La anatomía es el único parámetro UseSkill; mobile se refiere a WaitTargetObject. ASC convierte la cadena hexadecimal GetSerial en un número para verificar el rango. 1500: milisegundos de espera en el ejemplo. Finalmente borra la cola restante; Mira el resultado de Anatomía en el juego.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var mobile = Asc(UO.GetSerial("lasttarget"), 0);
    if (Truth(mobile <= 0) || Truth(mobile >= 0x40000000) || !(Truth(UO.Exists(mobile))))
    {
        return null;
    }

    UO.CancelWaitTarget();
    try
    {
        UO.WaitTargetObject(mobile);
        if (Truth(UO.UseSkill("Anatomy")))
        {
            await Delay(1500);
        }
    }
    finally
    {
        UO.CancelWaitTarget();
    }

    return null;
}

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;

3. Meditación y observación de maná - Clase de guión

Parámetros y flujo de ejecución:

  • La meditación se invoca sin ningún propósito. antes de almacenar el maná anterior, 2000 es el período de observación. El crecimiento de maná puede tener otras razones; Esto no es una prueba de meditación ni una promesa de un ritmo fijo de recuperación.

Habilidades

Habilidades

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

    async public Task<object?> RunScenarioAsync()
    {
        if (!(Truth(UO.Connected())) || Truth(UO.Dead()))
        {
            return null;
        }

        var before = UO.Mana();
        if (!(Truth(UO.UseSkill("Meditation"))))
        {
            UO.Print("Meditation request rejected");
            return null;
        }

        await Delay(2000);
        if (Truth(UO.Mana() > before))
        {
            UO.Print("Mana increased");
        }
        else
        {
            UO.Print("No mana increase observed yet");
        }

        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.UseSkill(skillName) — UO.UseSkill(String)

Parámetros: skillName (String)

Resultado: int / Integer.

Durante la llamada:

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

public int UseSkill(string skillName)

        {

            return UseSkillCore(skillName) ? 1 : 0;

        }
⚠️ **GitHub.com Fallback** ⚠️