Skip to content

ES UO Topic search Part 2

Codex edited this page Oct 12, 2026 · 3 revisions

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

Buscar — 2

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

Partes de la referencia

1 · 2

Referencia completa de comandos


UO.FindMan

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

Firmas de C#

void UO.FindMan();
dynamic UO.FindMan(object? notoriety);
dynamic UO.FindMan(object? notoriety, object? distance);
dynamic UO.FindMan(object? notoriety, object? distance, object? nearest);
dynamic UO.FindMan(object? notoriety, object? distance, object? nearest, object? maxZ);
dynamic UO.FindMan(object? notoriety, object? distance, object? nearest, object? maxZ, object? body);
dynamic UO.FindMan(object? notoriety, object? distance, object? nearest, object? maxZ, object? body, object? color);
dynamic UO.FindMan(object? notoriety, object? distance, object? nearest, object? maxZ, object? body, object? color, object? includeSelf);

Encuentra uno serial por notoriedad, distancia, altura, cuerpo y hue. Se utiliza para preseleccionar un objetivo sin ataque automático.

Parámetros

  • notoriety — Estado de relación con el personaje recibido del servidor: 0 — desconocido, 1 — Inocente, 2 — Aliado, 3 — Gris, 4 — Criminal, 5 — Enemigo, 6 — Asesino, 7 - Invulnerable. El número significa un estado; "5|6" o una serie de números: cualquiera de los anteriores. No es el color de la ropa ni la clase. Un número negativo (normalmente -1), 0xFFFF, "cualquiera", una cadena vacía o una matriz vacía desactivan este filtro por separado. Una cadena no válida sin números válidos no encuentra a nadie. El orden de los estados no establece prioridad. El filtro 5 selecciona Enemigo en lugar de seleccionar automáticamente cualquier NPC/monstruo; Los valores reales dependen del servidor.
  • distance — Radio horizontal en celdas inclusive: 5 permite la distancia 0..5. La distancia es máxima (abs (dx), abs (dy)), por lo que la diagonal adyacente también es 1. De forma predeterminada o si el número es negativo, se toma UO.FindDistance() en lugar de una búsqueda ilimitada. 0 sale de la misma celda X/Y. No la longitud de la ruta; Los obstáculos y los suelos no se controlan con este parámetro.
  • nearest - true/1 por defecto: el más cercano, con la misma distancia el serial más pequeño; false/0: el primero en la lista del cliente, no el más lejano.
  • maxZ — Abs máximos (Z del objetivo - Z del propio personaje), inclusive, en unidades Z del mundo. Este no es el número de pisos o celdas X/Y. maxZ=4 con el jugador Z 10 permite el objetivo Z 6..14; 0 requiere exactamente la misma altura. De forma predeterminada/para un número negativo, se toma UO.FindVertical(). En las escaleras, una Z igual puede eliminar el objetivo deseado. Incluso una pequeña diferencia en Z no demuestra la accesibilidad del suelo.
  • body - Gráfico del cuerpo del personaje/NPC, no ID de un personaje específico y no type de la armadura usada. Un número, una cadena hexadecimal, la cadena "0x0190|0x0191" o una matriz de números. 0x0190 (400) - hombre humano; 0x0191 (401) - humana femenina. La máscara une ambos cuerpos. La lista no incluye automáticamente otras razas, fantasmas o transformaciones; tabla de tipos de cuerpos gráficos estándar. Un número negativo (-1 por defecto), 0xFFFF, "cualquiera", una cadena vacía o una matriz vacía sola: cualquier cuerpo. El texto desconocido sin un número válido produce un resultado vacío.
  • color — Tono del propio mobile: int o cadena numérica/hexadecimal. Número negativo (-1 por defecto) y 0xFFFF - cualquier hue; 0 es exactamente hue 0, y no cualquier valor. Ni el color de la franja de notoriedad ni el tono de la ropa. Este parámetro no verifica el color del artículo que se usa.
  • includeSelf - true/1 permite self sujeto a otros filtros; false/0 excluye de forma predeterminada. Ignore también se aplica a self.

Valor devuelto

int serial, o 0 sin resultado. ¡Compruebe la identificación! = 0; no es bool ni una cantidad. No cambia FindItem/FindCount/GetFoundItems y no inicia un ataque.

Comportamiento

  • Búsqueda local: sólo móviles ya descargados. se tiene en cuenta Ignore; self está excluido, excepto el includeSelf=true explícito en los comandos que lo admiten. Los contenedores y artículos no son móviles.
  • Las condiciones se aplican juntas (AND). Las alternativas válidas dentro de body/notoriedad se combinan a través de OR. La búsqueda no cambia FindItem, FindCount y GetFoundItems.
  • En body/notoriedad, la máscara con números válidos usa estos: "cualquier|5" todavía la limita a 5. Los elementos en blanco/no válidos junto a números válidos se ignoran. Sin restricciones, pase -1 por separado. No lleve esta regla a classMask: el nombre de clase desconocido rechaza la lista completa.
  • Los equipos no abren una zona del mundo, no corren hacia la meta y no comprueban la transitabilidad de la ruta. Entre la selección y el procesamiento del servidor, el estado del mundo puede cambiar.
  • La transmisión de true y 1 es equivalente para las banderas, false y 0 también. Otros números distintos de cero también se convierten a true, pero 8/9 no son modos separados; use claro true/false.
  • Orden exacto: notoriedad, distancia, más cercano, maxZ, body, color, includeSelf. Diferente de AttackNearest y GetMobiles.
  • No hay parámetros classMask, aliveOnly o visibleOnly. Si es necesario, verifique el ID encontrado por separado; para seleccionar entre todos los vivos/visibles, use GetMobiles para que el muerto más cercano no oscurezca a los demás.

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

1. Encuentra y guarda al aliado más cercano: guión directo

Parámetros y flujo de ejecución:

  • 2 - Aliado, 12 - radio. El resto: más cercano=true, maxZ=FindVertical(), cualquier body/hue, self excluido. El equipo solo salva al objetivo, no ataca.
var ally = UO.FindMan(2, 12);
if (Truth(ally == 0))
{
    return null;
}
UO.AddObject("ally_nearby", ally);

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

2. Especifique cada condición antes de realizar más acciones: función de script

Parámetros y flujo de ejecución:

  • La verificación IsDead se realizó por separado. body especifica cuerpos; bodyHue=-1 no los limita a hue. Este equipo no clasifica por vestimenta.
return  RunScenario();
 object? RunScenario()
{
    var status = 5;
    var radius = 8;
    dynamic nearest = true;
    var height = 4;
    var bodies = "0x0190|0x0191";
    var bodyHue = -1;
    dynamic includeMe = false;
    var enemy = UO.FindMan(status, radius, nearest, height, bodies, bodyHue, includeMe);
    if (Truth(enemy != 0))
    {
        if (Truth(UO.IsDead(enemy) == 0))
        {
            UO.Attack(enemy);
        }
    }

    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. Encuentre primero mobile con hue específico - clase de script

Parámetros y flujo de ejecución:

  • El primero -1 desactiva la notoriedad, el segundo -1 desactiva body. false en la tercera posición desactiva la clasificación; el último false excluye a self. No se comprueba el tono de la ropa.
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 chosenHue = 0x0455;
        var mobile = UO.FindMan(-1, 10, false, 8, -1, chosenHue, false);
        if (Truth(mobile == 0))
        {
            return null;
        }

        UO.AddObject("body_hue_match", mobile);
        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.FindMan() — UO.FindMan()

Parámetros: Sin parámetros.

Resultado: void / Unit.

Durante la llamada:

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

case "findman":

                {

                    int mobile = bridge.GetMobiles().FirstOrDefault();

                    if (mobile != 0) state.Objects.Set(arguments.Length > 0 ? Text(0) : "findman", mobile);

                    break;

                }

UO.FindMan(notoriety) — UO.FindMan(Any)

Parámetros: notoriety (Any)

Resultado: dynamic / Any.

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(CompactFindMan(values))

UO.FindMan(notoriety, distance) — UO.FindMan(Any,Any)

Parámetros: notoriety (Any), distance (Any)

Resultado: dynamic / Any.

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(CompactFindMan(values))

UO.FindMan(notoriety, distance, nearest) — UO.FindMan(Any,Any,Any)

Parámetros: notoriety (Any), distance (Any), nearest (Any)

Resultado: dynamic / Any.

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(CompactFindMan(values))

UO.FindMan(notoriety, distance, nearest, maxZ) — UO.FindMan(Any,Any,Any,Any)

Parámetros: notoriety (Any), distance (Any), nearest (Any), maxZ (Any)

Resultado: dynamic / Any.

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(CompactFindMan(values))

UO.FindMan(notoriety, distance, nearest, maxZ, body) — UO.FindMan(Any,Any,Any,Any,Any)

Parámetros: notoriety (Any), distance (Any), nearest (Any), maxZ (Any), body (Any)

Resultado: dynamic / Any.

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(CompactFindMan(values))

UO.FindMan(notoriety, distance, nearest, maxZ, body, color) — UO.FindMan(Any,Any,Any,Any,Any,Any)

Parámetros: notoriety (Any), distance (Any), nearest (Any), maxZ (Any), body (Any), color (Any)

Resultado: dynamic / Any.

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(CompactFindMan(values))

UO.FindMan(notoriety, distance, nearest, maxZ, body, color, includeSelf) — UO.FindMan(Any,Any,Any,Any,Any,Any,Any)

Parámetros: notoriety (Any), distance (Any), nearest (Any), maxZ (Any), body (Any), color (Any), includeSelf (Any)

Resultado: dynamic / Any.

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(CompactFindMan(values))

UO.FindMobile

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

Firmas de C#

int UO.FindMobile();
int UO.FindMobile(object? stateFilter);
int UO.FindMobile(object? stateFilter, object? rangeFilter);
int UO.FindMobile(object? stateFilter, object? rangeFilter, object? verticalFilter);
int UO.FindMobile(object? stateFilter, object? rangeFilter, object? verticalFilter, object? directionOrKind);
int UO.FindMobile(object? stateFilter, object? rangeFilter, object? verticalFilter, object? directionFilter, object? kindFilter);

Encuentra el personaje/criatura cargado más cercano usando filtros de cadena conjunta. El propio jugador queda excluido.

Parámetros

  • stateFilter - Generalmente todos/vivos/muertos; opcional. Todos los argumentos de la implementación son cadenas de filtro, por lo que es aceptable combinar varias palabras en un argumento.
  • rangeFilter: normalmente todo/cerca (0..4)/medio (5..9)/lejos (desde 10 hasta el radio total). En esta posición no se aceptan radios numéricos; el límite general cambia a través de UO.FindDistance(value).
  • verticalFilter - todo/arriba/abajo. arriba: candidato.Z > self.Z, abajo: candidato.Z < self.Z. Esto no es un piso ni una tolerancia numérica Z.
  • directionOrKind — La cuarta posición del formulario con cuatro argumentos: todos, norte/sur/este/oeste o humano/npc/mob. Puede ser una cadena compuesta.
  • directionFilter — La cuarta posición del formulario con cinco argumentos: todos o la comparación X/Y norte/sur/este/oeste. Esta es la ubicación relativa a self, no la dirección de visión.
  • kindFilter - Quinta posición: todos/humanos/npc/mob. humano incluye cuerpos masculinos y femeninos: 0x0190 - humano masculino, 0x0191 - humana femenina, así como los cuerpos estándar de elfo/gárgola y fantasma. Lista completa: humano. npc - IsNpc y humano; mafia - IsNpc y NO humano. No se aceptan las palabras monstruo y mujer.

Valor devuelto

int: serial de un mobile, o 0 si no hay coincidencias. No es una cantidad, ni una matriz, ni type ni bool. ¡Comprobación encontrada! = 0 significa la presencia del resultado; comparación encontrada == true no es válido en C#: int no es comparable a bool.

Comportamiento

  • Se aplica a UO.FindMobile: argumentos de 0 a 5. Los argumentos de cola que faltan son todos. Cada argumento puede contener una palabra o varias palabras separadas por espacio, tabulación, coma, punto y coma, | o +. Todas las condiciones se combinan a través de AND; símbolo | no significa OR aquí.
  • La búsqueda solo analiza los móviles descargados, excluye self y limita la distancia al máximo (1, UO.FindDistance()). La distancia se mide según la regla max(abs(dx), abs(dy)); un cuadrado diagonal cuenta como uno. Para objetos en movimiento, la distancia puede tener en cuenta la cola de pasos, y las comparaciones X/Y/Z leen las coordenadas actuales.
  • Se selecciona el más cercano entre los que son adecuados; a la misma distancia - más pequeño serial. Devuelve int serial o 0 en lugar de true/false, recuento o matriz.
  • UO.FindMobile no cambia FindItem/FindCount/GetFoundItems, no aplica Ignore y UO.FindVertical, y no comprueba visibilidad, transitabilidad o línea de visión. No mueve, apunta ni carga objetos remotos.
  • Radios numéricos/Z/direcciones, palabras monstruo, noreste, noroeste, sureste, suroeste no son filtros. Una palabra desconocida provoca un error al comprobar un candidato; Si no hay candidatos, este apartado no podrá ejecutarse. Para un área diagonal, combine noreste, etc.; para verificación numérica, use propiedades de objetos encontrados o UO.GetMobiles().

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

1. Busca y comprueba el resultado - script directo

Parámetros y flujo de ejecución:

  • Pasó todo, todo, arriba: la altura del objeto es estrictamente mayor que la Z del personaje. Igual Z no es adecuado.
  • 0 se procesa antes de leer las propiedades. Print muestra ID, nombre y alturas; no se activa ninguna acción del juego.
var found = UO.FindMobile("all", "all", "above");
if (Truth(found == 0))
{
    UO.Print("No matching mobile");
    return null;
}
UO.Print("ID: " + Convert.ToString(found) + " | Name: " + UO.GetName(found));
UO.Print("Z: " + Convert.ToString(UO.GetZ(found)) + " | Self Z: " + Convert.ToString(UO.GetZ("self")));

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

2. Combinación de condiciones con radio de tiempo - función script

Parámetros y flujo de ejecución:

  • 18—límite externo; vivo, cerca, todos, todos, la multitud establece condiciones cooperativas. cerca sigue siendo el rango hasta 4, medio - 5...9, lejos - de 10.
  • Finalmente devuelve el radio anterior al finalizar normalmente o en un error controlado. El guión no expande la carga mundial.
return  RunScenario();
 object? RunScenario()
{
    var previous = UO.FindDistance();
    try
    {
        UO.FindDistance(18);
        var found = UO.FindMobile("alive", "near", "all", "all", "mob");
        if (Truth(found != 0))
        {
            UO.Print("Match: " + Convert.ToString(found));
            UO.Print("Distance: " + Convert.ToString(UO.GetDistance(found)));
        }
        else
        {
            UO.Print("No match in the loaded area");
        }
    }
    finally
    {
        UO.FindDistance(previous);
    }

    return null;
}

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

3. Función completa para filtro compuesto: clase de script

Parámetros y flujo de ejecución:

  • La cadena "noreste" se pasa al ayudante. Estas son varias condiciones de una solicitud y no una búsqueda secuencial de diferentes objetivos.
  • FindAndDescribe se declara en su totalidad. Devuelve ID/0 sin cambiar el objetivo o el personaje.
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 = FindAndDescribe("north east");
        UO.Print("Returned ID: " + Convert.ToString(id));
        return null;
    }

    dynamic FindAndDescribe(dynamic filters)
    {
        var id = UO.FindMobile(filters);
        if (Truth(id == 0))
        {
            UO.Print("Nothing matched: " + filters);
            return 0;
        }

        UO.Print(UO.GetName(id) + " | " + Convert.ToString(id));
        return id;
    }

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

4. Encuentra la criatura y comprueba por separado la distancia exacta - guión directo

Parámetros y flujo de ejecución:

  • vivo/todos/todos/todos/mob: cinco posiciones admitidas. La distancia 2 se verifica después de obtener el resultado más cercano.
  • Un script de este tipo no comprueba el camino hacia la criatura y no comienza a moverse.
var found = UO.FindMobile("alive", "all", "all", "all", "mob");
if (Truth(found == 0))
{
    UO.Print("No loaded creature");
    return null;
}
if (Truth(UO.GetDistance(found) <= 2))
{
    UO.Print("Creature within two tiles: " + Convert.ToString(found));
}
else
{
    UO.Print("Nearest creature is farther away");
}

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

Parámetros: Sin parámetros.

Resultado: int / Integer.

Durante la llamada:

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

public int FindMobile() => FindMobile(new InjectionValue("all"), new InjectionValue("all"),

            new InjectionValue("all"), new InjectionValue("all"));

UO.FindMobile(stateFilter) — UO.FindMobile(Any)

Parámetros: stateFilter (Any)

Resultado: int / Integer.

Durante la llamada:

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

public int FindMobile(InjectionValue stateFilter) => FindMobile(stateFilter, new InjectionValue("all"),

            new InjectionValue("all"), new InjectionValue("all"));

UO.FindMobile(stateFilter, rangeFilter) — UO.FindMobile(Any,Any)

Parámetros: stateFilter (Any), rangeFilter (Any)

Resultado: int / Integer.

Durante la llamada:

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

public int FindMobile(InjectionValue stateFilter, InjectionValue rangeFilter) => FindMobile(stateFilter,

            rangeFilter, new InjectionValue("all"), new InjectionValue("all"));

UO.FindMobile(stateFilter, rangeFilter, verticalFilter) — UO.FindMobile(Any,Any,Any)

Parámetros: stateFilter (Any), rangeFilter (Any), verticalFilter (Any)

Resultado: int / Integer.

Durante la llamada:

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

public int FindMobile(InjectionValue stateFilter, InjectionValue rangeFilter, InjectionValue verticalFilter) =>

            FindMobile(stateFilter, rangeFilter, verticalFilter, new InjectionValue("all"));

UO.FindMobile(stateFilter, rangeFilter, verticalFilter, directionOrKind) — UO.FindMobile(Any,Any,Any,Any)

Parámetros: stateFilter (Any), rangeFilter (Any), verticalFilter (Any), directionOrKind (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(

                    FindMobile(values[0], values[1], values[2], values[3]))

UO.FindMobile(stateFilter, rangeFilter, verticalFilter, directionFilter, kindFilter) — UO.FindMobile(Any,Any,Any,Any,Any)

Parámetros: stateFilter (Any), rangeFilter (Any), verticalFilter (Any), directionFilter (Any), kindFilter (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(

                    FindMobile(values[0], values[1], values[2], values[3], values[4]))

UO.FindNotoriety

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

Firmas de C#

dynamic UO.FindNotoriety(object? @type, object? notoriety);
dynamic UO.FindNotoriety(object? @type, object? notoriety, object? distance);
dynamic UO.FindNotoriety(object? @type, object? notoriety, object? distance, object? nearest);
dynamic UO.FindNotoriety(object? @type, object? notoriety, object? distance, object? nearest, object? maxZ);
dynamic UO.FindNotoriety(object? @type, object? notoriety, object? distance, object? nearest, object? maxZ, object? color);
dynamic UO.FindNotoriety(object? @type, object? notoriety, object? distance, object? nearest, object? maxZ, object? color, object? container);

Busca otro mobile uno por uno body/type y notoriedad permitida. Adecuado cuando se necesita cierto tipo de carácter con la actitud adecuada; Las formas avanzadas le permiten restringir el radio, la altura y hue. Esto es sólo una selección de objeto, no un ataque.

Parámetros

  • type: un cuerpo numérico graphic o cadena hexadecimal; no serial, no type del artículo desgastado y no la matriz. 0x0190 (400) - humano masculino, 0x0191 (401) - humano femenino; Estos son diferentes filtros de precisión. Los dos body requieren llamadas separadas o GetMobiles con máscara. -1 o 0xFFFF - cualquier cuerpo.
  • notoriety — Estado de relación con el personaje recibido del servidor: 0 — desconocido, 1 — Inocente, 2 — Aliado, 3 — Gris, 4 — Criminal, 5 — Enemigo, 6 — Asesino, 7 - Invulnerable. El número significa un estado; "5|6" o una serie de números: cualquiera de los anteriores. No es el color de la ropa ni la clase. Un número negativo (normalmente -1), 0xFFFF, "cualquiera", una cadena vacía o una matriz vacía desactivan este filtro por separado. Una cadena no válida sin números válidos no encuentra a nadie. El orden de los estados no establece prioridad. El filtro 5 selecciona Enemigo en lugar de seleccionar automáticamente cualquier NPC/monstruo; Los valores reales dependen del servidor. Se combinan varios valores como OR: el número 5, la cadena "5|6" o una matriz plana de números/cadenas numéricas. Puede combinar una matriz plana y argumentos individuales. El orden de valores no da prioridad. Se excluyen los tokens no numéricos; una máscara completamente errónea no encuentra nada. Las matrices anidadas no son números y se ignoran como elementos no válidos; No se admiten máscaras multidimensionales. Característica de la forma numérica de dos argumentos: sólo un código negativo desactiva el filtro, el numérico 0xFFFF se considera un código literal y normalmente no encuentra a nadie.
  • distance — Radio horizontal en celdas inclusive: 5 permite la distancia 0..5. La distancia es máxima (abs (dx), abs (dy)), por lo que la diagonal adyacente también es 1. De forma predeterminada o si el número es negativo, se toma UO.FindDistance() en lugar de una búsqueda ilimitada. 0 sale de la misma celda X/Y. No la longitud de la ruta; Los obstáculos y los suelos no se controlan con este parámetro.
  • nearest - false/0 predeterminado: primera coincidencia en el orden de enumeración mundial, no hay garantía de ID más cercano o más pequeño. true/1: más cercano, si es igual, más pequeño serial.
  • maxZ — Abs máximos (Z del objetivo - Z del propio personaje), inclusive, en unidades Z del mundo. Este no es el número de pisos o celdas X/Y. maxZ=4 con el jugador Z 10 permite el objetivo Z 6..14; 0 requiere exactamente la misma altura. De forma predeterminada/para un número negativo, se toma UO.FindVertical(). En las escaleras, una Z igual puede eliminar el objetivo deseado. Incluso una pequeña diferencia en Z no demuestra la accesibilidad del suelo.
  • color — Tono del propio mobile: int o cadena numérica/hexadecimal. Número negativo (-1 por defecto) y 0xFFFF - cualquier hue; 0 es exactamente hue 0, y no cualquier valor. Ni el color de la franja de notoriedad ni el tono de la ropa. Este parámetro no verifica el color del artículo que se usa.
  • container - Ausente por defecto: mundo. Cuando se especifica, ground/"ground"/UO.Ground(), los números 0/1 y -1/"my" son aceptables como designaciones mundiales compatibles en este comando en particular. Un contenedor serial explícito o "backpack" devuelve 0: no hay móviles dentro del contenedor. No agrega búsqueda de cosas.

Valor devuelto

int - serial del mobile seleccionado o 0 si no hay ninguno adecuado. Esto es ID, no graphic/type, el número de objetos encontrados o true/false: use if (found!= 0) {...}, not found == true. Un ID encontrado se puede pasar a UO.AddObject, UO.Attack o UO.Follow, pero cada acción del juego se llama por separado.

Comportamiento

  • La búsqueda sólo lee móviles ya descargados por el cliente; Se excluyen los registros destruidos y Ignore. La llamada en sí no abre el objetivo, no ataca, no va al objetivo y no solicita objetos remotos del servidor.
  • La distancia es máxima geométrica (abs(dx),abs(dy)), no la longitud de la ruta. La proximidad no garantiza la ausencia de una pared ni la accesibilidad de otro piso. La condición puede cambiar al regresar.
  • La vida, el sigilo y la línea de visión no se comprueban automáticamente. Si son importantes, use GetMobiles con aliveOnly/visibleOnly o sus propios controles. Tener un servidor con estado Enemigo no hace que ningún NPC sea elegible.
  • De los argumentos 2 a 7. Para transmitir maxZ es necesario especificar la distancia anterior y la más cercana. Para notoriedad múltiple en este comando, use una única máscara "5|6" o una matriz plana en el segundo argumento; el tercer argumento es la distancia, no el segundo estatus.
  • Una diferencia importante en la forma: dos argumentos con notoriedad NUMÉRICA llaman puente.FindNotoriety, descartando el antiguo FindItem/FindCount/GetFoundItems y registrando todas las coincidencias. Dos argumentos STRING/ARARY, así como cualquier formulario con argumentos 3..7, devuelven solo ID, conservando los mismos campos Buscar*. No lea FindCount como resultado de una consulta extendida.
  • Todos los formularios excluyen self y Ignore, use el límite Z; Filtros en vivo/visibles y sin línea de visión. No hay coincidencias devuelve 0. type/distance/maxZ/color ilegible provoca 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.

object? result = UO.FindNotoriety(0x0190, 5);
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));

1. Contar hombres y mujeres con reputación de Enemigo - guión directo

Parámetros y flujo de ejecución:

  • 0x0190 (400) es un cuerpo humano masculino, 0x0191 (401) es un cuerpo humano femenino. 5 - Enemigo. Cada llamada recibe UNO body; la cadena 0x0190|0x0191 no se admite en esta posición. Se utilizan los FindDistance/FindVertical actuales.
  • Después de la segunda llamada, FindItem/FindCount/GetFoundItems se refieren únicamente a cuerpos femeninos; la primera cantidad se almacena en menCount. El hombre/mujer devuelto es el primer serial o 0, no el número. NPC con dichos cuerpos también se puede incluir en el resultado; Los fantasmas y otras razas no están incluidos en estos dos body.
var man = UO.FindNotoriety(0x0190, 5);
var menCount = UO.FindCount();
var woman = UO.FindNotoriety(0x0191, 5);
var womenCount = UO.FindCount();
UO.Print("Male humans: " + Convert.ToString(menCount));
UO.Print("Female humans: " + Convert.ToString(womenCount));
UO.Print("Total humans: " + Convert.ToString(menCount + womenCount));

2. El más cercano de dos estados de altura limitada: función de script

Parámetros y flujo de ejecución:

  • -1 en el primer parámetro — cualquier cuerpo; -1 en el sexto - cualquier hue. ground - paz. FindCount no se ha actualizado desde este formulario; uso encontrado.
return  RunScenario();
 object? RunScenario()
{
    var found = UO.FindNotoriety(-1, "5|6", 12, true, 4, -1, "ground");
    if (Truth(found != 0))
    {
        UO.AddObject("near_enemy", found);
    }

    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. Matriz de estados en el segundo parámetro: clase de escenario

Parámetros y flujo de ejecución:

  • La matriz contiene dos códigos. Los argumentos de cola que faltan significan el radio actual/Z, el más cercano=false y cualquier hue. Esta no es la entrada UO.FindNotoriety(type,5,6): allí 6 estaría el radio.
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()
    {
        dynamic[] allowed = new dynamic[checked((int)(1) + 1)];
        allowed[0] = 5;
        allowed[1] = 6;
        var found = UO.FindNotoriety(0x0191, allowed);
        if (Truth(found != 0))
        {
            UO.AddObject("allowed_mobile", found);
            UO.Print("Selected ID: " + Convert.ToString(found));
        }

        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.FindNotoriety(type, notoriety) — UO.FindNotoriety(Any,Any)

Parámetros: type (Any), notoriety (Any)

Resultado: dynamic / Any.

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(CompactFindNotoriety(values))

UO.FindNotoriety(type, notoriety, distance) — UO.FindNotoriety(Any,Any,Any)

Parámetros: type (Any), notoriety (Any), distance (Any)

Resultado: dynamic / Any.

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(CompactFindNotoriety(values))

UO.FindNotoriety(type, notoriety, distance, nearest) — UO.FindNotoriety(Any,Any,Any,Any)

Parámetros: type (Any), notoriety (Any), distance (Any), nearest (Any)

Resultado: dynamic / Any.

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(CompactFindNotoriety(values))

UO.FindNotoriety(type, notoriety, distance, nearest, maxZ) — UO.FindNotoriety(Any,Any,Any,Any,Any)

Parámetros: type (Any), notoriety (Any), distance (Any), nearest (Any), maxZ (Any)

Resultado: dynamic / Any.

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(CompactFindNotoriety(values))

UO.FindNotoriety(type, notoriety, distance, nearest, maxZ, color) — UO.FindNotoriety(Any,Any,Any,Any,Any,Any)

Parámetros: type (Any), notoriety (Any), distance (Any), nearest (Any), maxZ (Any), color (Any)

Resultado: dynamic / Any.

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(CompactFindNotoriety(values))

UO.FindNotoriety(type, notoriety, distance, nearest, maxZ, color, container) — UO.FindNotoriety(Any,Any,Any,Any,Any,Any,Any)

Parámetros: type (Any), notoriety (Any), distance (Any), nearest (Any), maxZ (Any), color (Any), container (Any)

Resultado: dynamic / Any.

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(CompactFindNotoriety(values))

UO.FindQuantity

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

Firmas de C#

dynamic UO.FindQuantity();

Lee la cantidad actual en el primer resultado de la búsqueda.

Parámetros

No hay parámetros.

Valor devuelto

int: cantidad actual del artículo con serial FindItem, 1 para un carácter existente, 0 para un objeto faltante/eliminado. Otras pilas encontradas no son acumulativas. A diferencia de FindFullQuantity, la cantidad se lee del objeto actual cuando se llama.

Comportamiento

  • Los datos pertenecen a la última búsqueda normal de este script. FindType con argumentos 1–5, FindTypeEx, Count/CountEx/CountGround reemplaza los resultados. No se requieren comandos avanzados de caracteres filtrados para cambiar esta instantánea.
  • Una nueva búsqueda sin coincidencias borra FindItem, FindCount y FindFullQuantity y borra GetFoundItems. La lectura de un resultado por sí sola no desencadena una nueva búsqueda.

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.

UO.FindType(0x0EED, -1, "backpack");
object? result = UO.FindQuantity();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));

1. Medir los resultados de búsqueda de oro: script directo

Parámetros y flujo de ejecución:

  • type=0x0EED – oro; color=-1 - cualquier hue; backpack - solo el contenido directo de la mochila en este formulario FindType.
  • int: cantidad actual del artículo con serial FindItem, 1 para un carácter existente, 0 para un objeto faltante/eliminado. Otras pilas encontradas no son acumulativas. A diferencia de FindFullQuantity, la cantidad se lee del objeto actual cuando se llama.
var found = UO.FindType(0x0EED, -1, "backpack");
var value = UO.FindQuantity();
UO.Print(Convert.ToString(value));

2. Comparar artículos y unidades: función de secuencia de comandos

Parámetros y flujo de ejecución:

  • Las cuatro lecturas pertenecen a una búsqueda hasta que se llama a otra búsqueda en el medio.
  • Por ejemplo, dos pilas de 50: Artículos=2, Primera pila=50, Todas las unidades=100; El primero ID contiene el ID único de una pila.
return  RunScenario();
 object? RunScenario()
{
    var found = UO.FindType(0x0EED, -1, "backpack");
    UO.Print("Items: " + Convert.ToString(UO.FindCount()));
    UO.Print("First stack: " + Convert.ToString(UO.FindQuantity()));
    UO.Print("All units: " + Convert.ToString(UO.FindFullQuantity()));
    UO.Print("First ID: 0x" + Hex(UO.FindItem()));
    return null;
}

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

3. Guardar resultado hasta la próxima búsqueda - clase de script

Parámetros y flujo de ejecución:

  • El primer type es oro, el segundo 0x0F7A es un tipo de reactivo independiente. El nuevo equipo cambia el panorama general.
  • guardado sigue siendo el número de la primera búsqueda. La segunda lectura se aplica al reactivo incluso si no hay coincidencia.
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 found = UO.FindType(0x0EED, -1, "backpack");
        var saved = UO.FindQuantity();
        found = UO.FindType(0x0F7A, -1, "backpack");
        UO.Print("Saved: " + Convert.ToString(saved));
        UO.Print("Current: " + Convert.ToString(UO.FindQuantity()));
        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.FindQuantity() — UO.FindQuantity()

Parámetros: Sin parámetros.

Resultado: dynamic / Any.

Durante la llamada:

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

case "findquantity": return new InjectionValue(bridge.FindQuantity());

UO.FindType

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

Firmas de C#

string UO.FindType(object? @type);
string UO.FindType(object? @type, object? color);
string UO.FindType(object? @type, object? color, object? container);
string UO.FindType(object? @type, object? color, object? container, object? range);
string UO.FindType(object? @type, object? color, object? container, object? distance, object? recursive);
string UO.FindType(object? @type, object? color, object? container, object? distance, object? notoriety, object? nearest);
string UO.FindType(object? @type, object? color, object? container, object? distance, object? notoriety, object? nearest, object? maxZ);
string UO.FindType(object? @type, object? color, object? container, object? distance, object? notoriety, object? nearest, object? maxZ, object? mobileOnly);
string UO.FindType(object? @type, object? color, object? container, object? distance, object? notoriety, object? nearest, object? maxZ, object? mobileOnly, object? itemOnly);
string UO.FindType(object? @type, object? color, object? container, object? distance, object? notoriety, object? nearest, object? maxZ, object? mobileOnly, object? itemOnly, object? includeIgnored);
string UO.FindType(object? @type, object? color, object? container, object? distance, object? notoriety, object? nearest, object? maxZ, object? mobileOnly, object? itemOnly, object? includeIgnored, object? includeSelf);
string UO.FindType(object? @type, object? color, object? container, object? distance, object? notoriety, object? nearest, object? maxZ, object? mobileOnly, object? itemOnly, object? includeIgnored, object? includeSelf, object? aliveOnly);
string UO.FindType(object? @type, object? color, object? container, object? distance, object? notoriety, object? nearest, object? maxZ, object? mobileOnly, object? itemOnly, object? includeIgnored, object? includeSelf, object? aliveOnly, object? visibleOnly);
string UO.FindType(object? @type, object? color, object? container, object? distance, object? notoriety, object? nearest, object? maxZ, object? mobileOnly, object? itemOnly, object? includeIgnored, object? includeSelf, object? aliveOnly, object? visibleOnly, object? nameMask);

Busca entre elementos y personajes ya descargados por el cliente. Puedes buscar por tipo, color, contenedor, distancia y filtros adicionales. El resultado es la cadena hexadecimal serial del objeto seleccionado; una cadena vacía significa que no hay coincidencia. El comando en sí no abre contenedores, no recoge ningún objeto y no ataca al objetivo encontrado.

Parámetros

  • type: un elemento graphic o un carácter body: entero o cadena numérica. 0x0EED - oro; 0x0190 (400) - hombre humano; 0x0191 (401) - humana femenina. Un type 0x0190 no incluye 0x0191. Para enumerar caracteres de ambos géneros, use GetMobiles con body="0x0190|0x0191"; la máscara no se pasa a este único argumento FindType. Un valor negativo o 0xFFFF borra el filtro de tipo.
  • color - Tono/color: entero o cadena numérica. -1 o 0xFFFF significa cualquier color; 0 - específicamente hue 0. Característica de la forma de dos argumentos: las líneas "ground", "backpack", "my" en la segunda posición seleccionan el área de búsqueda en lugar del color. "my" permite omitir subcontenedores cargados.
  • container - Área de búsqueda: "ground" - el mundo, "backpack" - el nivel superior de tu mochila, "my" - una mochila con subcontenedores cargados en formato corto; También puede pasar serial del contenedor o el nombre guardado del objeto. Los contenedores no se abren automáticamente. Las formas extendidas 7–14 de los argumentos iteran sobre el contenido directo del contenedor dado y no tienen un indicador recursivo.
  • range — El cuarto argumento de la forma de cuatro argumentos: distancia en celdas. Un valor negativo utiliza la configuración general FindDistance; 0 solo deja coincidencias en la misma celda. Para un artículo en un contenedor, se tiene en cuenta la posición del contenedor en el mundo.
  • distance — Distancia en celdas en la posición 4 en forma de cinco argumentos. -1 usa FindDistance; el número 0 y superior establece un límite explícito. Este es el radio de búsqueda, no la longitud de la ruta.
  • recursive - SOLO el quinto argumento en forma de cinco argumentos: 1/true - también busca en subcontenedores cargados, 0/false - solo el nivel superior. Esto no es notoriedad. Cambiar a la forma de seis argumentos cambia el significado de la posición 5.
  • notoriety: posición de 5 en las formas de argumento 6–14. Reputación del personaje: 0 desconocido, 1 inocente, 2 aliado, 3 atacable, 4 criminal, 5 enemigo, 6 asesino, 7 invulnerable. Puede pasar un número, la cadena "3|6" o una matriz de valores. -1, 0xFFFF o "cualquiera" desactiva el filtro. Cuando el filtro está activo, los artículos quedan excluidos: no tienen notoriedad.
  • nearest - Posición 6: 1/true - seleccione el carácter adecuado más cercano y, en la forma extendida, 7–14 - el candidato más cercano de cualquier tipo permitido; si la distancia es igual, se utiliza serial. 0/false conserva el orden de búsqueda. En la forma de seis argumentos, se utiliza el orden de búsqueda de elementos normal al proceder a buscar elementos.
  • maxZ - Posición 7: máxima diferencia de altura absoluta Z con carácter propio. 0 - misma altura; -1 toma FindVertical. Para artículos dentro de un contenedor, se verifica la altura del contenedor. Este no es un número de piso.
  • mobileOnly — Posición 8: 1/true — deja solo personajes y mobs; 0/false: también permite elementos. Si no hay argumentos, false.
  • itemOnly — Posición 9: 1/true — dejar solo objetos; 0/false: también permite caracteres. Si falta, false. mobileOnly=true y itemOnly=true simultáneamente dan un resultado vacío.
  • includeIgnored — Posición 10: 1/true — permitir objetos de IgnoreList; 0/false - exclúyalos. El valor predeterminado es false. El comando IgnoreList en sí no cambia.
  • includeSelf — Posición 11: 1/true — permite tu propio personaje entre los candidatos mobile; 0/false - excluir. El valor predeterminado es false. No afecta los artículos.
  • aliveOnly - Posición 12: 1/true - excluye caracteres muertos; 0/false: permite ambos estados. El valor predeterminado es false. Este filtro no verifica el estado del artículo.
  • visibleOnly - Posición 13: 1/true - requiere verificación positiva IsVisible; 0/false - no lo utilices. El valor predeterminado es false. El comando todavía solo funciona con objetos conocidos por el cliente.
  • nameMask — Posición 14: parte del texto del nombre, sin distinguir entre mayúsculas y minúsculas. La cadena "orc|troll" permite cualquiera de las dos coincidencias; los delimitadores también pueden ser comas y punto y coma. Una cadena vacía, "cualquiera" o "-1" elimina el filtro. Esta es una búsqueda de subcadenas, no una expresión regular o una máscara con *. Si falta el argumento, el filtro está deshabilitado.

Valor devuelto

string: Por ejemplo, "0x40001234". Si no se encuentra nada - "". Verifique el resultado comparándolo con una cadena vacía. No lo confundas con la cantidad de objetos encontrados o la cantidad de pasos hasta ellos.

Comportamiento

  • Hay formularios con argumentos 1–14, pero esta no es una firma larga con parámetros omitidos arbitrariamente. Seleccione la línea de sintaxis exacta; Los argumentos se pasan posicionalmente.
  • Los formularios 1–5 utilizan la búsqueda normal y actualizan la lista FindItem/FindCount/ de resultados. Para los formularios 6–14, use la cadena devuelta directamente: el filtrado de caracteres se realiza de forma separada y no promete actualizar estos valores compartidos.
  • Para formularios cortos, por defecto la búsqueda es en el mundo, cualquier color, distancia FindDistance, sin recursividad. La cadena "my" es una forma abreviada especial de una mochila con subcontenedores.
  • La forma de seis argumentos primero busca un carácter coincidente; En ausencia de un filtro de notoriedad y de un personaje adecuado, la búsqueda de objetos es posible. Los formularios 7–14 combinan candidatos resueltos y aplican filtros adicionales.
  • El cambio en el número de argumentos de cinco a seis es especialmente importante: recursivo es reemplazado por notoriedad y el más cercano se convierte en el sexto argumento. El valor 1 en la posición 5 significa recorrido inocente, no recursivo.

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.FindType(0x0EED, -1, "backpack");
UO.Print("FindType: " + Convert.ToString(result));

1. Encuentra oro en el nivel superior de la mochila y procesa la falta de resultado - guión directo

Parámetros y flujo de ejecución:

  • 1: type=0x0EED - buscando oro.
  • 2: color=-1 — cualquier hue.
  • 3: contenedor="backpack" - solo el contenido directo de tu mochila.
  • el oro recibe la cadena serial. La verificación gold="" separa el elemento faltante del elemento encontrado. Info(oro) muestra información; el oro no se mueve.
var gold = UO.FindType(0x0EED, -1, "backpack");
if (Truth(gold == ""))
{
    UO.Print("Gold was not found in the loaded backpack");
}
else
{
    UO.Print("Gold serial: " + gold);
    UO.Info(gold);
}

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

2. Busque recursivamente un artículo en mochilas cargadas: función de script

Parámetros y flujo de ejecución:

  • 1: wantedType contiene graphic 0x0EED.
  • 2: -1 elimina el filtro de color.
  • 3: "backpack" selecciona el contenedor raíz.
  • 4: -1 usa el FindDistance actual.
  • 5: recursive=1 permite atravesar subcontenedores; esta es una forma de cinco argumentos. El contenido de una bolsa cerrada que el servidor aún no ha enviado no se carga de esta forma.
  • AddObject guarda el serial encontrado con el nombre found_gold solo después de verificar el resultado.
return  RunScenario();
 object? RunScenario()
{
    var wantedType = 0x0EED;
    var recursive = 1;
    var found = UO.FindType(wantedType, -1, "backpack", -1, recursive);
    if (Truth(found != ""))
    {
        UO.AddObject("found_gold", found);
        UO.Print("Saved object: " + found);
    }
    else
    {
        UO.Print("No matching item in loaded containers");
    }

    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. Encuentra el personaje más cercano con una de dos reputaciones: clase de escenario

Parámetros y flujo de ejecución:

  • 1: body=-1 permite cualquier body.
  • 2: color=-1 permite cualquier color.
  • 3: "ground" significa objetos del mundo cargados.
  • 4: radio=10 limita la distancia a diez celdas.
  • 5: reputación="3|6" - atacable o asesino. Es notoriedad, no recursivo.
  • 6: más cercano=1 te pide que elijas el más cercano. El filtro de reputación excluye elementos. El ejemplo solo muestra información y no ataca al objetivo.
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 body = -1;
        var radius = 10;
        var reputation = "3|6";
        var nearest = 1;
        var found = UO.FindType(body, -1, "ground", radius, reputation, nearest);
        if (Truth(found != ""))
        {
            UO.Print("Matching mobile: " + found);
            UO.Info(found);
        }
        else
        {
            UO.Print("No matching mobile within the radius");
        }

        return null;
    }

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

4. Los catorce parámetros: una mafia visible en vivo con un nombre adecuado - guión directo

Parámetros y flujo de ejecución:

  • 1 body=-1 y 2 hue=-1 no limitan el tipo ni el color.
  • 3 alcance="ground" - buscar en el mundo; 4 radio=5 - no más de cinco celdas.
  • 5 reputación=-1 permite cualquier notoriedad; 6 más cercano=1 selecciona el más cercano.
  • 7 maxZ=16 permite diferencias de altura absolutas de hasta 16 unidades.
  • 8 mobileOnly=1 excluye elementos; 9 itemOnly=0 no prohíbe mobs.
  • 10 includeIgnored=0 conserva el efecto de IgnoreList.
  • 11 includeSelf=0 excluye tu personaje.
  • 12 aliveOnly=1 y 13 visibleOnly=1 dejan con vida a los candidatos visibles.
  • 14 nombres="orc|troll" requiere la subcadena orc o troll en un nombre que el cliente ya conoce. Todos los filtros deben ejecutarse simultáneamente.
var body = -1;
var hue = -1;
var scope = "ground";
var radius = 5;
var reputation = -1;
var nearest = 1;
var maxZ = 16;
var mobileOnly = 1;
var itemOnly = 0;
var includeIgnored = 0;
var includeSelf = 0;
var aliveOnly = 1;
var visibleOnly = 1;
var names = "orc|troll";
var found = UO.FindType(body, hue, scope, radius, reputation, nearest, maxZ, mobileOnly, itemOnly, includeIgnored, includeSelf, aliveOnly, visibleOnly, names);
if (Truth(found == ""))
{
    UO.Print("No loaded mobile satisfies every filter");
}
else
{
    UO.Print("Selected serial: " + found);
}

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

5. Forma corta de búsqueda de mochila: función de script

Parámetros y flujo de ejecución:

  • 1 wantedType=0x0EED es oro.
  • 2 "my" es una cadena especial de dos argumentos: selecciona una mochila, incluye recursividad y cualquier color. Aquí el segundo argumento no es hue.
  • Para el nivel superior, en lugar de "my", pase "backpack"; para el mundo - "ground". El número en la segunda posición, por el contrario, será un filtro de color.
return  RunScenario();
 object? RunScenario()
{
    var wantedType = 0x0EED;
    var found = UO.FindType(wantedType, "my");
    if (Truth(found != ""))
    {
        UO.Print("Found in backpack or a loaded subcontainer: " + found);
    }
    else
    {
        UO.Print("Nothing found");
    }

    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.FindType(type) — UO.FindType(Any)

Parámetros: type (Any)

Resultado: string / String.

Durante la llamada:

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

public string FindType(InjectionValue type)

            => FindType(ResolveType(type));

UO.FindType(type, color) — UO.FindType(Any,Any)

Parámetros: type (Any), color (Any)

Resultado: string / String.

Durante la llamada:

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

public string FindType(InjectionValue type, InjectionValue color)

        {

            if (color.Kind == InjectionValueKind.String

                && (color.String.Equals("ground", StringComparison.OrdinalIgnoreCase)

                    || color.String.Equals("backpack", StringComparison.OrdinalIgnoreCase)

                    || color.String.Equals("my", StringComparison.OrdinalIgnoreCase)))

            {

                return FindType(ResolveType(type), -1, ConvertContainer(color), -1, color.String.Equals("my", StringComparison.OrdinalIgnoreCase));

            }



            return FindType(ResolveType(type), NumberConversions.ToInt(color), -1, -1, false);

        }

UO.FindType(type, color, container) — UO.FindType(Any,Any,Any)

Parámetros: type (Any), color (Any), container (Any)

Resultado: string / String.

Durante la llamada:

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

public string FindType(InjectionValue type, InjectionValue color, InjectionValue container)

            => FindType(type, color, container, new InjectionValue(-1));

UO.FindType(type, color, container, range) — UO.FindType(Any,Any,Any,Any)

Parámetros: type (Any), color (Any), container (Any), range (Any)

Resultado: string / String.

Durante la llamada:

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

public string FindType(InjectionValue type, InjectionValue color, InjectionValue container, InjectionValue range)

        {

            if (container.Kind == InjectionValueKind.String && container.String.Equals("my", StringComparison.OrdinalIgnoreCase))

                return FindType(ResolveType(type), NumberConversions.ToInt(color), ConvertContainer(container), NumberConversions.ToInt(range), true);

            else

                return FindType(ResolveType(type), NumberConversions.ToInt(color), ConvertContainer(container), NumberConversions.ToInt(range), false);

        }

UO.FindType(type, color, container, distance, recursive) — UO.FindType(Any,Any,Any,Any,Any)

Parámetros: type (Any), color (Any), container (Any), distance (Any), recursive (Any)

Resultado: string / String.

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(FindType(values[0], values[1], values[2], values[3], values[4]))

UO.FindType(type, color, container, distance, notoriety, nearest) — UO.FindType(Any,Any,Any,Any,Any,Any)

Parámetros: type (Any), color (Any), container (Any), distance (Any), notoriety (Any), nearest (Any)

Resultado: string / String.

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 =>

                CompactFindType(values[0], values[1], values[2], values[3], values[4], values[5])

UO.FindType(type, color, container, distance, notoriety, nearest, maxZ) — UO.FindType(Any,Any,Any,Any,Any,Any,Any)

Parámetros: type (Any), color (Any), container (Any), distance (Any), notoriety (Any), nearest (Any), maxZ (Any)

Resultado: string / String.

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 => CompactFindTypeExtended(values)

UO.FindType(type, color, container, distance, notoriety, nearest, maxZ, mobileOnly) — UO.FindType(Any,Any,Any,Any,Any,Any,Any,Any)

Parámetros: type (Any), color (Any), container (Any), distance (Any), notoriety (Any), nearest (Any), maxZ (Any), mobileOnly (Any)

Resultado: string / String.

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 => CompactFindTypeExtended(values)

UO.FindType(type, color, container, distance, notoriety, nearest, maxZ, mobileOnly, itemOnly) — UO.FindType(Any,Any,Any,Any,Any,Any,Any,Any,Any)

Parámetros: type (Any), color (Any), container (Any), distance (Any), notoriety (Any), nearest (Any), maxZ (Any), mobileOnly (Any), itemOnly (Any)

Resultado: string / String.

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 => CompactFindTypeExtended(values)

UO.FindType(type, color, container, distance, notoriety, nearest, maxZ, mobileOnly, itemOnly, includeIgnored) — UO.FindType(Any,Any,Any,Any,Any,Any,Any,Any,Any,Any)

Parámetros: type (Any), color (Any), container (Any), distance (Any), notoriety (Any), nearest (Any), maxZ (Any), mobileOnly (Any), itemOnly (Any), includeIgnored (Any)

Resultado: string / String.

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 => CompactFindTypeExtended(values)

UO.FindType(type, color, container, distance, notoriety, nearest, maxZ, mobileOnly, itemOnly, includeIgnored, includeSelf) — UO.FindType(Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any)

Parámetros: type (Any), color (Any), container (Any), distance (Any), notoriety (Any), nearest (Any), maxZ (Any), mobileOnly (Any), itemOnly (Any), includeIgnored (Any), includeSelf (Any)

Resultado: string / String.

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 => CompactFindTypeExtended(values)

UO.FindType(type, color, container, distance, notoriety, nearest, maxZ, mobileOnly, itemOnly, includeIgnored, includeSelf, aliveOnly) — UO.FindType(Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any)

Parámetros: type (Any), color (Any), container (Any), distance (Any), notoriety (Any), nearest (Any), maxZ (Any), mobileOnly (Any), itemOnly (Any), includeIgnored (Any), includeSelf (Any), aliveOnly (Any)

Resultado: string / String.

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 => CompactFindTypeExtended(values)

UO.FindType(type, color, container, distance, notoriety, nearest, maxZ, mobileOnly, itemOnly, includeIgnored, includeSelf, aliveOnly, visibleOnly) — UO.FindType(Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any)

Parámetros: type (Any), color (Any), container (Any), distance (Any), notoriety (Any), nearest (Any), maxZ (Any), mobileOnly (Any), itemOnly (Any), includeIgnored (Any), includeSelf (Any), aliveOnly (Any), visibleOnly (Any)

Resultado: string / String.

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 => CompactFindTypeExtended(values)

UO.FindType(type, color, container, distance, notoriety, nearest, maxZ, mobileOnly, itemOnly, includeIgnored, includeSelf, aliveOnly, visibleOnly, nameMask) — UO.FindType(Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any)

Parámetros: type (Any), color (Any), container (Any), distance (Any), notoriety (Any), nearest (Any), maxZ (Any), mobileOnly (Any), itemOnly (Any), includeIgnored (Any), includeSelf (Any), aliveOnly (Any), visibleOnly (Any), nameMask (Any)

Resultado: string / String.

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 => CompactFindTypeExtended(values)

UO.FindTypeEx

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

Firmas de C#

int UO.FindTypeEx(object? objType, object? color, object? container, object? inSub);

Busca un gráfico y color en un contenedor o en el suelo y devuelve uno encontrado ID.

Parámetros

  • objType - Gráfico/body, no elemento serial. 0..65534 - gráficos específicos; -1 o 0xFFFF - cualquiera. Otros negativos int en este cliente también eliminan el filtro.
  • color — Tono, no la cantidad de elementos. 0 - objeto sin pintar; -1 o 0xFFFF - cualquier hue. Otros negativos int también eliminan el filtro de color.
  • container - Tierra: UO.Ground(), 0, -1, 0xFFFFFFFF o cadena ground. Mochila: cuerda backpack o su serial. Se aceptan decimales/hexadecimales serial y nombre AddObject. my selecciona todo el inventario de su personaje, incluido el equipo y las bolsas adjuntas. Un nombre desconocido provoca un error de secuencia de comandos. Verifique el serial resultante: el 0 explícito selecciona el terreno. Los nombres ground/backpack son más claros que las designaciones numéricas, que difieren entre familias de comandos.
  • inSub - Obligatorio true/false (1/0). false - contenido directo de un contenedor específico; true – también bolsas anidadas cargadas. Para la Tierra, la recursividad no cambia nada. my ya selecciona todo el equipamiento del personaje.

Valor devuelto

int: serial primera coincidencia en orden transversal local; 0 si no hay coincidencias. No graphic, recuento, matriz o bool. ¡Compruebe el resultado! = 0, no el resultado == true o el resultado == 1. Una pila se considera un objeto; Móvil: un objeto y una unidad. El orden no implica cercanía y no está garantizado entre búsquedas.

Comportamiento

  • Se necesitan los cuatro argumentos posicionales. No hay argumentos opcionales.
  • Earth usa FindDistance y FindVertical de este script, excluye self e incluye el artículo y el móvil apropiados. La búsqueda dentro de un contenedor específico no aplica estos límites de distancia/altura. En ambos casos se excluyen Ignore y los objetos destruidos.
  • Antes de anular, se borran FindItem, FindCount, FindFullQuantity y GetFoundItems. Luego se relacionan con esta búsqueda; La búsqueda vacía deja ceros y una matriz vacía. FindFullQuantity resume el máximo (1, Cantidad) de artículos y por 1 para Móvil. FindQuantity lee la cantidad actual FindItem. Guarde GetFoundItems si, después de otra búsqueda, aún necesita la lista anterior.
  • El puente atraviesa los elementos cargados una vez y luego el móvil si se selecciona tierra. El tipo, el color y al menos un recipiente deben coincidir. Un objeto se cuenta una vez, incluso si cumple varias condiciones. No hay un recorrido completo repetido del mundo para cada combinación.
  • Sólo se leen los datos recibidos por el cliente. Los contenedores no se abren, las celdas del mapa no se cargan, no hay transferencia. Un resultado vacío no prueba que el cofre del servidor esté vacío. Si se necesita un enlace activo, marque Connected: la búsqueda en sí lee el estado local.
  • El primer partido local se almacena aquí; un nombre desconocido no cambia la búsqueda a la mochila. Ground también acepta 0; su FindDistance predeterminado 18, máximo 255. Estas son las características de este cliente.

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.FindTypeEx(0x0EED, -1, "backpack", false);
UO.Print("FindTypeEx: " + Convert.ToString(result));

1. Contenido directo de la mochila - guión directo

Parámetros y flujo de ejecución:

  • 0x0EED - oro, -1 - cualquier hue; backpack/false excluye bolsas anidadas. Las tres líneas generan el primer ID en hexadecimal sin 0x, el número de objetos y la suma de unos. Dos pilas de 20 y 50: objetos 2, unidades 70.
var item = UO.FindTypeEx(0x0EED, -1, "backpack", false);
UO.Print(Hex(item));
UO.Print(Convert.ToString(UO.FindCount()));
UO.Print(Convert.ToString(UO.FindFullQuantity()));

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

2. Función de búsqueda terrestre a tiempo completo: función de secuencia de comandos

Parámetros y flujo de ejecución:

  • radio=5 y altura=10 operan dentro de FindGoldNearSelf. Finalmente restaura ambos límites incluso en caso de devolución o error. La función devuelve serial oro o 0; Comprobaciones principales! = 0 antes de enviar.
return  RunScenario();
 object? RunScenario()
{
    var item = FindGoldNearSelf(5, 10);
    if (Truth(item != 0))
    {
        UO.Print(Hex(item));
    }
    else
    {
        UO.Print("Empty");
    }

    return null;
}

dynamic FindGoldNearSelf(dynamic radius, dynamic height)
{
    var oldDistance = UO.FindDistance();
    var oldVertical = UO.FindVertical();
    try
    {
        UO.FindDistance(radius);
        UO.FindVertical(height);
        return UO.FindTypeEx(0x0EED, -1, UO.Ground(), false);
    }
    finally
    {
        UO.FindDistance(oldDistance);
        UO.FindVertical(oldVertical);
    }
}

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

3. Nombre del contenedor y bolsas anidadas: clase de script

Parámetros y flujo de ejecución:

  • GetSerial permite backpack; La comprobación del cero evita la selección aleatoria del terreno. AddObject guarda ID como search_bag. true incluye bolsas anidadas. GetFoundItems almacena una matriz separada; IsObjectExists vuelve a comprobar cada ID.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var bag = UO.GetSerial("backpack");
        if (Truth(bag != "0x00000000"))
        {
            UO.AddObject("search_bag", bag);
            UO.FindTypeEx(0x0EED, -1, "search_bag", true);
            var items = UO.GetFoundItems();
            foreach (var item in items)
            {
                if (Truth(UO.IsObjectExists(item)))
                {
                    UO.Print(Hex(item));
                }
            }
        }

        return null;
    }

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

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.FindTypeEx(objType, color, container, inSub) — UO.FindTypeEx(Any,Any,Any,Any)

Parámetros: objType (Any), color (Any), container (Any), inSub (Any)

Resultado: int / Integer.

Durante la llamada:

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

case "findtypeex": return new InjectionValue(bridge.FindType(ResolveType(arguments[0]), Arg(1), StealthContainer(2), -1, Arg(3) != 0));

UO.FindTypesArrayEx

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

Firmas de C#

int UO.FindTypesArrayEx(object? objTypes, object? colors, object? containers, object? inSub);

En un recorrido busca diferentes gráficos, colores y contenedores y devuelve el encontrado ID. La lista completa se lee a través de GetFoundItems.

Parámetros

  • objTypes - Gráfico/body, no elemento serial. 0..65534 - gráficos específicos; -1 o 0xFFFF - cualquiera. Otros negativos int en este cliente también eliminan el filtro.
  • colors — Tono, no la cantidad de elementos. 0 - objeto sin pintar; -1 o 0xFFFF - cualquier hue. Otros negativos int también eliminan el filtro de color.
  • containers - Tierra: UO.Ground(), 0, -1, 0xFFFFFFFF o cadena ground. Mochila: cuerda backpack o su serial. Se aceptan decimales/hexadecimales serial y nombre AddObject. my selecciona todo el inventario de su personaje, incluido el equipo y las bolsas adjuntas. Un nombre desconocido provoca un error de secuencia de comandos. Verifique el serial resultante: el 0 explícito selecciona el terreno. Los nombres ground/backpack son más claros que las designaciones numéricas, que difieren entre familias de comandos.
  • inSub - Obligatorio true/false (1/0). false - contenido directo de un contenedor específico; true – también bolsas anidadas cargadas. Para la Tierra, la recursividad no cambia nada. my ya selecciona todo el equipamiento del personaje.

Valor devuelto

int: serial primera coincidencia en orden transversal local; 0 si no hay coincidencias. No graphic, recuento, matriz o bool. ¡Compruebe el resultado! = 0, no el resultado == true o el resultado == 1. Una pila se considera un objeto; Móvil: un objeto y una unidad. El orden no implica cercanía y no está garantizado entre búsquedas.

Comportamiento

  • Se pasa la matriz; un valor único también se trata como una matriz de un elemento. declarar los valores de la variable [1] crea índices 0 y 1: complete cada uno. Los tipos y colores son opciones independientes, no pares por índice. Una máscara "cualquiera" en cualquier posición o una matriz vacía de tipos/colores elimina este filtro. Una serie vacía de contenedores selecciona el inventario del personaje. Las repeticiones e intersecciones de contenedores no duplican ID.
  • Se necesitan los cuatro argumentos posicionales. No hay argumentos opcionales.
  • Earth usa FindDistance y FindVertical de este script, excluye self e incluye el artículo y el móvil apropiados. La búsqueda dentro de un contenedor específico no aplica estos límites de distancia/altura. En ambos casos se excluyen Ignore y los objetos destruidos.
  • Antes de anular, se borran FindItem, FindCount, FindFullQuantity y GetFoundItems. Luego se relacionan con esta búsqueda; La búsqueda vacía deja ceros y una matriz vacía. FindFullQuantity resume el máximo (1, Cantidad) de artículos y por 1 para Móvil. FindQuantity lee la cantidad actual FindItem. Guarde GetFoundItems si, después de otra búsqueda, aún necesita la lista anterior.
  • El puente atraviesa los elementos cargados una vez y luego el móvil si se selecciona tierra. El tipo, el color y al menos un recipiente deben coincidir. Un objeto se cuenta una vez, incluso si cumple varias condiciones. No hay un recorrido completo repetido del mundo para cada combinación.
  • Sólo se leen los datos recibidos por el cliente. Los contenedores no se abren, las celdas del mapa no se cargan, no hay transferencia. Un resultado vacío no prueba que el cofre del servidor esté vacío. Si se necesita un enlace activo, marque Connected: la búsqueda en sí lee el estado local.
  • El primer partido local se almacena aquí; un nombre desconocido no cambia la búsqueda a la mochila. Ground también acepta 0; su FindDistance predeterminado 18, máximo 255. Estas son las características de este cliente.

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.FindTypesArrayEx(new[] { 0x0EED }, new[] { -1 }, new[] { "backpack" }, false);
UO.Print("FindTypesArrayEx: " + Convert.ToString(result));

1. Dos gráficos sobre el terreno - guión directo

Parámetros y flujo de ejecución:

  • los tipos contienen oro 0x0EED y perla negra 0x0F7A; un color=-1 - cualquier hue, uno Ground - tierra. false no cambia nada en la tierra. Se aplican los límites de búsqueda actuales. ID, se genera el número de objetos y la suma de unidades.
dynamic[] types = new dynamic[checked((int)(1) + 1)];
types[0] = 0x0EED;
types[1] = 0x0F7A;
dynamic[] colors = new dynamic[checked((int)(0) + 1)];
colors[0] = -1;
dynamic[] containers = new dynamic[checked((int)(0) + 1)];
containers[0] = UO.Ground();
var first = UO.FindTypesArrayEx(types, colors, containers, false);
UO.Print(Hex(first));
UO.Print(Convert.ToString(UO.FindCount()));
UO.Print(Convert.ToString(UO.FindFullQuantity()));

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

2. Oro en la mochila y en el suelo - función de guión

Parámetros y flujo de ejecución:

  • tipos - solo oro; colores: cualquiera hue. Contenedores - backpack y tierra; true incluye bolsas anidadas. Se generan objetos/pilas y unidades de ambas áreas y cada objeto se cuenta una vez.
return  RunScenario();
 object? RunScenario()
{
    dynamic[] types = new dynamic[checked((int)(0) + 1)];
    types[0] = 0x0EED;
    dynamic[] colors = new dynamic[checked((int)(0) + 1)];
    colors[0] = -1;
    dynamic[] containers = new dynamic[checked((int)(1) + 1)];
    containers[0] = "backpack";
    containers[1] = UO.Ground();
    UO.FindTypesArrayEx(types, colors, containers, true);
    UO.Print(Convert.ToString(UO.FindCount()));
    UO.Print(Convert.ToString(UO.FindFullQuantity()));
    return null;
}

3. Función completa con lista de resultados: clase de secuencia de comandos

Parámetros y flujo de ejecución:

  • SearchTypesIn(contenedor,firstType,secondType) devuelve una matriz, mientras que el comando integrado devuelve un único int ID. La función completa anterior llena las matrices, busca recursivamente y copia inmediatamente GetFoundItems. Main comprueba cada ID almacenado y lo genera.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var items = SearchTypesIn("backpack", 0x0EED, 0x0F7A);
        foreach (var item in items)
        {
            if (Truth(UO.IsObjectExists(item)))
            {
                UO.Print(Hex(item));
            }
        }

        return null;
    }

    dynamic SearchTypesIn(dynamic container, dynamic firstType, dynamic secondType)
    {
        dynamic[] types = new dynamic[checked((int)(1) + 1)];
        types[0] = firstType;
        types[1] = secondType;
        dynamic[] colors = new dynamic[checked((int)(0) + 1)];
        colors[0] = -1;
        dynamic[] containers = new dynamic[checked((int)(0) + 1)];
        containers[0] = container;
        UO.FindTypesArrayEx(types, colors, containers, true);
        return UO.GetFoundItems();
    }

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

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.FindTypesArrayEx(objTypes, colors, containers, inSub) — UO.FindTypesArrayEx(Any,Any,Any,Any)

Parámetros: objTypes (Any), colors (Any), containers (Any), inSub (Any)

Resultado: int / Integer.

Durante la llamada:

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

case "findtypesarrayex":

                    InjectionValue[] searchContainers = arguments[2].Kind == InjectionValueKind.Array

                        ? arguments[2].Array : new[] { arguments[2] };

                    return new InjectionValue(bridge.FindTypes(arguments[0].Kind == InjectionValueKind.Array

                        ? arguments[0].Array.Select(ResolveType).ToArray() : new[] { ResolveType(arguments[0]) }, ArrayArg(1),

                        searchContainers.Select(ConvertClientSearchContainer).ToArray(), Arg(3) != 0));

UO.FindVertical

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

Firmas de C#

int UO.FindVertical();
void UO.FindVertical(object? value);

Lee o modifica la diferencia de altura permitida en la búsqueda predeterminada.

Parámetros

  • value - Opcional int. Sin argumento - lectura; valor - configuración. El valor está limitado al rango 0..120; el negativo se convierte en 0 en lugar de sin límite. En el nuevo tiempo de ejecución: 2; el estado restaurado puede contener un valor diferente. El número fraccionario se trunca a cero; Las cadenas numéricas double/0x también son aceptables. Utilice int para evitar la conversión implícita.

Valor devuelto

Sin argumentos: int - límite actual (diferencia en unidades mundiales Z), no encontrado ID, número de objetos o bool. 0 significa límite cero, no falla. Con valor: void - sin valor; esta no es true/false ni la configuración anterior. Una vez instalado, lea FindVertical() para averiguar el valor almacenado.

Comportamiento

  • Altura: abs(object.Z - jugador.Z), en ambos sentidos, incluido el borde. Para 0 solo es adecuado el mismo Z. Este no es el número del piso ni el número de celdas horizontales.
  • La configuración se almacena en el tiempo de ejecución del script actual; sus procedimientos utilizan un solo valor. Los tiempos de ejecución independientes tienen configuraciones separadas. La lectura y la escritura no activan una búsqueda, no borran FindItem/FindCount/GetFoundItems, envían un paquete, mueven un carácter ni cargan objetos distantes.
  • FindTypeEx y FindTypesArrayEx utilizan estos límites cuando buscan en el suelo, pero no dentro del contenedor. Los filtros restantes son type, hue, Ignore y la presencia de un objeto cargado. FindAtCoord ignora ambos límites. En comandos extendidos, la distancia explícita/maxZ puede anular la configuración; -1 en dichos parámetros significa tomar la configuración, en lugar de establecer la configuración en sí en -1. FindList también filtra Z cuando busca contenedores; la excepción de contenedor especificada no se aplica a él.
  • Antes de buscar temporalmente, guarde el valor y restáurelo en Finalmente. La instalación no se cancela automáticamente. Finalmente funciona con finalización normal y se detecta un error de script; La parada de emergencia no se puede utilizar como mecanismo de limpieza.

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

1. Lectura, configuración y límite de rango: secuencia de comandos directa

Parámetros y flujo de ejecución:

  • anterior guarda la configuración actual. value:=10 establece el límite normal; 1000 muestra el límite de 120. Print lee el resultado como una llamada separada sin argumento. Finalmente restaura lo anterior.
var previous = UO.FindVertical();
try
{
    UO.FindVertical(10);
    UO.Print(Convert.ToString(UO.FindVertical()));
    UO.FindVertical(1000);
    UO.Print(Convert.ToString(UO.FindVertical()));
}
finally
{
    UO.FindVertical(previous);
}

2. Búsqueda temporal en el terreno: función de secuencia de comandos

Parámetros y flujo de ejecución:

  • anterior guarda la configuración del código de llamada. 10 cambia solo FindVertical; el segundo límite sigue siendo el mismo. 0x0EED - gráficos dorados, -1 - cualquiera hue, Container=-1 - mundo, false - sin recursividad de contenedor. identificación - uno serial; != 0 comprueba la disponibilidad. FindCount cuenta objetos/pilas enteras. Finalmente restaura la configuración, no la lista de resultados.
return  RunScenario();
 object? RunScenario()
{
    var previous = UO.FindVertical();
    try
    {
        UO.FindVertical(10);
        var id = UO.FindTypeEx(0x0EED, -1, -1, false);
        if (Truth(id != 0))
        {
            UO.Print(Hex(id) + ":" + Convert.ToString(UO.FindCount()));
        }
        else
        {
            UO.Print("0");
        }
    }
    finally
    {
        UO.FindVertical(previous);
    }

    return null;
}

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

3. Función completa CountGroundInRange - clase de script

Parámetros y flujo de ejecución:

  • CountGroundInRange(graphic, radio, altura) almacena ambos límites, establece radio=5 y altura=10, busca graphic=0x0EED y devuelve FindCount(). Una pila se considera un objeto. La función completa se proporciona después de Main. Finalmente restablece ambos límites incluso al salir por retorno; el resultado de la búsqueda permanece disponible.
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 count = CountGroundInRange(0x0EED, 5, 10);
        UO.Print(Convert.ToString(count));
        return null;
    }

    dynamic CountGroundInRange(dynamic graphic, dynamic radius, dynamic height)
    {
        var oldDistance = UO.FindDistance();
        var oldVertical = UO.FindVertical();
        try
        {
            UO.FindDistance(radius);
            UO.FindVertical(height);
            UO.FindTypeEx(graphic, -1, -1, false);
            return UO.FindCount();
        }
        finally
        {
            UO.FindDistance(oldDistance);
            UO.FindVertical(oldVertical);
        }
    }
}

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

Parámetros: Sin parámetros.

Resultado: int / Integer.

Durante la llamada:

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

case "findvertical":

                    if (arguments.Length > 0) { bridge.SetFindVertical(Arg(0)); return InjectionValue.Unit; }

                    return new InjectionValue(bridge.GetFindVertical());

UO.FindVertical(value) — UO.FindVertical(Any)

Parámetros: value (Any)

Resultado: void / Unit.

Durante la llamada:

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

case "findvertical":

                    if (arguments.Length > 0) { bridge.SetFindVertical(Arg(0)); return InjectionValue.Unit; }

                    return new InjectionValue(bridge.GetFindVertical());

UO.GetFindedList

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

Firmas de C#

dynamic UO.GetFindedList(object? userList);

Crea una copia de la lista ID de la última búsqueda normal.

Parámetros

  • userList: argumento de compatibilidad requerido. En la implementación actual, no se completa ni se modifica: la lista se devuelve como resultado del comando. Puedes pasar 0. Para un formulario sin argumentos, utilice GetFoundItems.

Valor devuelto

Array es una matriz separada serial/ID en el último orden de búsqueda. Un Array vacío si no hubo coincidencias. No contiene graphic, hue ni Cantidad. Cambiar la matriz devuelta no edita la lista de búsqueda guardada.

Comportamiento

  • Se leen los datos ya descargados por el cliente. El comando no abre el contenedor, no mueve elementos ni descarga objetos de todo el servidor.
  • Matriz: matriz con índices que comienzan desde 0. Guárdalo en var, marca ArrayLength antes de acceder. Los elementos pueden desaparecer del mundo después de tomar una instantánea: marque Exists(serial) antes de actuar.
  • Los datos pertenecen a la última búsqueda normal de este script. FindType con argumentos 1–5, FindTypeEx, Count/CountEx/CountGround reemplaza los resultados. No se requieren comandos avanzados de caracteres filtrados para cambiar esta instantánea.
  • Una nueva búsqueda sin coincidencias borra FindItem, FindCount y FindFullQuantity y borra GetFoundItems. La lectura de un resultado por sí sola no desencadena una nueva búsqueda.

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.

UO.FindType(0x0EED, -1, "backpack");
object? result = UO.GetFindedList(0);
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));

1. Obtener tamaño de lista - script directo

Parámetros y flujo de ejecución:

  • El FindType habitual para el oro en la mochila está prefabricado. UserList=0 no es un parámetro de salida.
  • Longitud: número de registros/ID. Esta no es la cantidad de Monto en pilas. La lista vacía da 0.
var found = UO.FindType(0x0EED, -1, "backpack");
var items = UO.GetFindedList(0);
UO.Print(Convert.ToString(ArrayLength(items)));

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

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

Parámetros y flujo de ejecución:

  • El FindType habitual para el oro en la mochila está prefabricado. UserList=0 no es un parámetro de salida.
  • elementos [i] - numérico serial. Hex se utiliza sólo para salida. El bucle no accede al último índice.
return  RunScenario();
 object? RunScenario()
{
    var found = UO.FindType(0x0EED, -1, "backpack");
    var items = UO.GetFindedList(0);
    var i = 0;
    while (Truth(i < ArrayLength(items)))
    {
        UO.Print("0x" + Hex(items[i]));
        i = i + 1;
    }

    return null;
}

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

3. Verifique el primer registro antes de leer: clase de guión

Parámetros y flujo de ejecución:

  • El FindType habitual para el oro en la mochila está prefabricado. UserList=0 no es un parámetro de salida.
  • Se verifican dos cosas diferentes: el registro en la instantánea y la existencia del objeto ahora. Orden sin clasificación explícita no significa cercanía.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var found = UO.FindType(0x0EED, -1, "backpack");
        var items = UO.GetFindedList(0);
        if (Truth(ArrayLength(items) > 0))
        {
            var first = items[0];
            if (Truth(UO.Exists(first)))
            {
                UO.Print(UO.GetName(first));
            }
        }
        else
        {
            UO.Print("Empty list");
        }

        return null;
    }

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

Implementación del comando

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

UO.GetFindedList(userList) — UO.GetFindedList(Any)

Parámetros: userList (Any)

Resultado: dynamic / Any.

Durante la llamada:

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

case "getfindedlist":

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

UO.GetFoundItems

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

Firmas de C#

dynamic UO.GetFoundItems();

Crea una copia de la lista ID de la última búsqueda normal.

Parámetros

No hay parámetros.

Valor devuelto

Array es una matriz separada serial/ID en el último orden de búsqueda. Un Array vacío si no hubo coincidencias. No contiene graphic, hue ni Cantidad. Cambiar la matriz devuelta no edita la lista de búsqueda guardada.

Comportamiento

  • Se leen los datos ya descargados por el cliente. El comando no abre el contenedor, no mueve elementos ni descarga objetos de todo el servidor.
  • Matriz: matriz con índices que comienzan desde 0. Guárdalo en var, marca ArrayLength antes de acceder. Los elementos pueden desaparecer del mundo después de tomar una instantánea: marque Exists(serial) antes de actuar.
  • Los datos pertenecen a la última búsqueda normal de este script. FindType con argumentos 1–5, FindTypeEx, Count/CountEx/CountGround reemplaza los resultados. No se requieren comandos avanzados de caracteres filtrados para cambiar esta instantánea.
  • Una nueva búsqueda sin coincidencias borra FindItem, FindCount y FindFullQuantity y borra GetFoundItems. La lectura de un resultado por sí sola no desencadena una nueva búsqueda.

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.

UO.FindType(0x0EED, -1, "backpack");
object? result = UO.GetFoundItems();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));

1. Obtener tamaño de lista - script directo

Parámetros y flujo de ejecución:

  • El FindType habitual para el oro en la mochila está prefabricado. No hay parámetros.
  • Longitud: número de registros/ID. Esta no es la cantidad de Monto en pilas. La lista vacía da 0.
var found = UO.FindType(0x0EED, -1, "backpack");
var items = UO.GetFoundItems();
UO.Print(Convert.ToString(ArrayLength(items)));

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

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

Parámetros y flujo de ejecución:

  • El FindType habitual para el oro en la mochila está prefabricado. No hay parámetros.
  • elementos [i] - numérico serial. Hex se utiliza sólo para salida. El bucle no accede al último índice.
return  RunScenario();
 object? RunScenario()
{
    var found = UO.FindType(0x0EED, -1, "backpack");
    var items = UO.GetFoundItems();
    var i = 0;
    while (Truth(i < ArrayLength(items)))
    {
        UO.Print("0x" + Hex(items[i]));
        i = i + 1;
    }

    return null;
}

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

3. Verifique el primer registro antes de leer: clase de guión

Parámetros y flujo de ejecución:

  • El FindType habitual para el oro en la mochila está prefabricado. No hay parámetros.
  • Se verifican dos cosas diferentes: el registro en la instantánea y la existencia del objeto ahora. Orden sin clasificación explícita no significa cercanía.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var found = UO.FindType(0x0EED, -1, "backpack");
        var items = UO.GetFoundItems();
        if (Truth(ArrayLength(items) > 0))
        {
            var first = items[0];
            if (Truth(UO.Exists(first)))
            {
                UO.Print(UO.GetName(first));
            }
        }
        else
        {
            UO.Print("Empty list");
        }

        return null;
    }

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

Implementación del comando

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

UO.GetFoundItems() — UO.GetFoundItems()

Parámetros: Sin parámetros.

Resultado: dynamic / Any.

Durante la llamada:

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

case "getfounditems":

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

UO.GetIgnoreList

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

Firmas de C#

dynamic UO.GetIgnoreList();

Muestra ID específico agregado al filtro serial a través de Ignore. Ayuda a comprobar qué elementos ya han sido procesados ​​y están excluidos de la investigación. Las reglas nombradas type/hue de AddIgnoreList no están incluidas en esta matriz.

Parámetros

No hay parámetros.

Valor devuelto

Matriz - serial de la lista Ignore en orden ascendente de numérico ID. Matriz vacía cuando la lista está vacía. Es posible que ID ya no exista en el mundo; Estas son reglas de búsqueda, no una lista de elementos visibles.

Comportamiento

  • Se leen los datos ya descargados por el cliente. El comando no abre el contenedor, no mueve elementos ni descarga objetos de todo el servidor.
  • Matriz: matriz con índices que comienzan desde 0. Guárdalo en var, marca ArrayLength antes de acceder. Los elementos pueden desaparecer del mundo después de tomar una instantánea: marque Exists(serial) antes de actuar.
  • En el cliente, el conjunto pertenece al estado general de los scripts del perfil. La matriz es una copia: IgnoreOff(serial) borra una excepción, IgnoreReset borra todas serial. No desactivan las reglas seleccionadas type/hue; requieren SelectIgnoreList, DeleteIgnoreList o ClearIgnoreList. GetContent/GetEquipment y GetWorldItems sin argumentos no aplican este filtro por sí mismos.

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

1. Obtener tamaño de lista - script directo

Parámetros y flujo de ejecución:

  • No hay parámetros; Se lee una instantánea de las excepciones serial obvias. Una matriz vacía no significa que falten las reglas nombradas type/hue.
  • Longitud: número de registros/ID. Esta no es la cantidad de Monto en pilas. La lista vacía da 0.
var items = UO.GetIgnoreList();
UO.Print(Convert.ToString(ArrayLength(items)));

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

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

Parámetros y flujo de ejecución:

  • No hay parámetros; Se lee una instantánea de las excepciones serial obvias. Una matriz vacía no significa que falten las reglas nombradas type/hue.
  • elementos [i] - numérico serial. Hex se utiliza sólo para salida. El bucle no accede al último índice.
return  RunScenario();
 object? RunScenario()
{
    var items = UO.GetIgnoreList();
    var i = 0;
    while (Truth(i < ArrayLength(items)))
    {
        UO.Print("0x" + Hex(items[i]));
        i = i + 1;
    }

    return null;
}

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

3. Verifique el primer registro antes de leer: clase de guión

Parámetros y flujo de ejecución:

  • No hay parámetros; Se lee una instantánea de las excepciones serial obvias. Una matriz vacía no significa que falten las reglas nombradas type/hue.
  • Se verifican dos cosas diferentes: el registro en la instantánea y la existencia del objeto ahora. Orden sin clasificación explícita no significa cercanía.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var items = UO.GetIgnoreList();
        if (Truth(ArrayLength(items) > 0))
        {
            var first = items[0];
            if (Truth(UO.Exists(first)))
            {
                UO.Print(UO.GetName(first));
            }
        }
        else
        {
            UO.Print("Empty list");
        }

        return null;
    }

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

Implementación del comando

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

UO.GetIgnoreList() — UO.GetIgnoreList()

Parámetros: Sin parámetros.

Resultado: dynamic / Any.

Durante la llamada:

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

case "getignorelist":

                    return new InjectionValue(bridge.GetIgnoreList().Select(value => new InjectionValue(value)).ToArray());

UO.GetWorldItems

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

Firmas de C#

dynamic UO.GetWorldItems();
dynamic UO.GetWorldItems(object? @type);
dynamic UO.GetWorldItems(object? @type, object? color);
dynamic UO.GetWorldItems(object? @type, object? color, object? distance);
dynamic UO.GetWorldItems(object? @type, object? color, object? distance, object? container);
dynamic UO.GetWorldItems(object? @type, object? color, object? distance, object? container, object? nearest);
dynamic UO.GetWorldItems(object? @type, object? color, object? distance, object? container, object? nearest, object? maxZ);

Devuelve una matriz ID de elementos del mundo o el contenedor seleccionado.

Parámetros

  • type - Primer argumento de la forma filtrada: graphic/type, -1 o 0xFFFF - cualquiera. Esto no es serial. Sin todos los argumentos, se utiliza un formulario separado sin filtrado.
  • color - Tono; predeterminado - 1, cualquier color. 0xFFFF también acepta cualquier hue.
  • distance — Radio en celdas a lo largo de X/Y. Valor negativo o ausencia de uso FindDistance; 0 significa la misma celda. Para un contenedor, se verifica la distancia al contenedor, no su X/Y interno.
  • container: predeterminado a tierra. ground, numérico 0/1 y sus cuerdas están rectificadas. backpack, my y numérico -1 son el contenido directo de la mochila. Serie/cadena hexadecimal/alias del contenedor: su contenido directo; self selecciona elementos cuyo padre es un carácter. Un nombre desconocido y una mochila perdida dan un conjunto vacío, no un terreno.
  • nearest — Predeterminado false. true ordena por distancia y luego por número serial. Para un contenedor, la distancia para todos los resultados es la misma.
  • maxZ — Diferencia de altura permitida con respecto a self. Valor negativo o ausencia de uso FindVertical; 0 requiere la misma altura. En un contenedor, se toma la altura del propio contenedor.

Valor devuelto

Matriz - serial/ID elementos, no type, coordenadas o Cantidad. Una matriz vacía sin coincidencias. GetWorldItems() devuelve todos los elementos cargados fuera de los contenedores sin Ignore/range/height; GetWorldItems(type,...) usa los filtros enumerados y Ignore. NPC/jugadores no están incluidos de ninguna forma.

Comportamiento

  • Se leen los datos ya descargados por el cliente. El comando no abre el contenedor, no mueve elementos ni descarga objetos de todo el servidor.
  • Matriz: matriz con índices que comienzan desde 0. Guárdalo en var, marca ArrayLength antes de acceder. Los elementos pueden desaparecer del mundo después de tomar una instantánea: marque Exists(serial) antes de actuar.
  • La foto FindItem/FindCount/GetFoundItems no cambia. El equipo no abre el contenedor ni revisa las bolsas cerradas.
  • Para desactivar las restricciones, -1 no es suficiente: esta es la selección de la configuración actual, no el radio infinito. Especifique la distancia no negativa deseada/maxZ o utilice el formulario sin argumentos para todos los elementos terrestres cargados.

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

1. Cuente todos los elementos terrestres cargados: guión directo

Parámetros y flujo de ejecución:

  • Sin parámetros: formulario especial sin filtros.
  • El resultado no significa todos los elementos del mapa o del servidor. Ignore no se aplica aquí.
var items = UO.GetWorldItems();
UO.Print(Convert.ToString(ArrayLength(items)));

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

2. Encuentre la pila más cercana del tipo y color deseado: función de script

Parámetros y flujo de ejecución:

  • type=0x0EED — dorado, color=-1 — cualquiera; distancia=5, contenedor=ground, más cercano=true, maxZ=3.
  • La primera entrada es el elemento no ignorable que más se acerca; la distancia no controla las paredes ni conlleva accesibilidad.
return  RunScenario();
 object? RunScenario()
{
    var items = UO.GetWorldItems(0x0EED, -1, 5, "ground", true, 3);
    if (Truth(ArrayLength(items) > 0))
    {
        var item = items[0];
        if (Truth(UO.Exists(item)))
        {
            UO.Print("Nearest ID: 0x" + Hex(item));
        }
    }

    return null;
}

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

3. Contar el contenido directo de la mochila - clase de guión

Parámetros y flujo de ejecución:

  • Cualquier type/color; my selecciona una mochila. La distancia 20 y la diferencia Z 255 se refieren al contenedor. false conserva el orden original.
  • Se cuentan los artículos directos, no las unidades apiladas ni el contenido de las bolsas encajadas. Sin mochila, se devuelve un Array vacío.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var items = UO.GetWorldItems(-1, -1, 20, "my", false, 255);
        UO.Print(Convert.ToString(ArrayLength(items)));
        return null;
    }

    int ArrayLength(object? value) => value is System.Array array ? array.Length : 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.GetWorldItems() — UO.GetWorldItems()

Parámetros: Sin parámetros.

Resultado: dynamic / Any.

Durante la llamada:

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

case "getworlditems":

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

UO.GetWorldItems(type) — UO.GetWorldItems(Any)

Parámetros: type (Any)

Resultado: dynamic / Any.

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 => CompactGetWorldItems(values)

UO.GetWorldItems(type, color) — UO.GetWorldItems(Any,Any)

Parámetros: type (Any), color (Any)

Resultado: dynamic / Any.

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 => CompactGetWorldItems(values)

UO.GetWorldItems(type, color, distance) — UO.GetWorldItems(Any,Any,Any)

Parámetros: type (Any), color (Any), distance (Any)

Resultado: dynamic / Any.

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 => CompactGetWorldItems(values)

UO.GetWorldItems(type, color, distance, container) — UO.GetWorldItems(Any,Any,Any,Any)

Parámetros: type (Any), color (Any), distance (Any), container (Any)

Resultado: dynamic / Any.

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 => CompactGetWorldItems(values)

UO.GetWorldItems(type, color, distance, container, nearest) — UO.GetWorldItems(Any,Any,Any,Any,Any)

Parámetros: type (Any), color (Any), distance (Any), container (Any), nearest (Any)

Resultado: dynamic / Any.

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 => CompactGetWorldItems(values)

UO.GetWorldItems(type, color, distance, container, nearest, maxZ) — UO.GetWorldItems(Any,Any,Any,Any,Any,Any)

Parámetros: type (Any), color (Any), distance (Any), container (Any), nearest (Any), maxZ (Any)

Resultado: dynamic / Any.

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 => CompactGetWorldItems(values)

UO.Ignore

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

Firmas de C#

void UO.Ignore(object? objID);
void UO.Ignore(object? id, object? stateValue);

Agrega o elimina serial de la lista de ignorados de búsqueda normal.

Parámetros

  • id — Objeto serial/ID: int, cadena numérica/hexadecimal o alias establecido, por ejemplo "lasttarget". Esto no es graphic/type. Verifique el objeto cargado antes de actuar.
  • objID — Objeto serial/ID: int, cadena numérica/hexadecimal o alias establecido, por ejemplo "lasttarget". Esto no es graphic/type. Verifique el objeto cargado antes de actuar.
  • stateValue — Modo opcional. El número 0 se apaga, el número distinto de cero se enciende. Las líneas "off", "false" (no distingue entre mayúsculas y minúsculas) y exactamente "0" están desactivadas; cualquier otra línea incluye. Sin un argumento de modo: agregue.

Valor devuelto

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

Comportamiento

  • Ignore(id) llama al puente.Ignore(serial), lo que agrega serial al Estado.IgnoredSerials. Ignore(id,stateValue) selecciona Ignore o Dejar de ignorar. Cualquier cadena que no esté vacía no puede considerarse verdadera: las palabras de escape enumeradas se procesan por separado.
  • Este es un filtro de búsqueda, no oculta ni elimina un objeto. Los filtros con nombre de tipos AddIgnoreList se almacenan por separado.
  • En un host de cliente normal, estos datos de estado se toman del administrador GetPersistentState y son comunes a los scripts/chat/macros del mismo mundo/perfil, y no pertenecen a un solo script. Otro proceso o un InjectionRuntimeState aparentemente separado tiene un estado diferente. Cargar/borrar un perfil puede reemplazarlo; guardados serial todavía se comparan con el mundo cargado.

Scripts independientes de C#

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

Ejemplo sencillo

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

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

UO.Print("Calling UO.Ignore");
UO.Ignore("lasttarget");

1. Llamada directa - guión directo

Parámetros y flujo de ejecución:

  • Agrega o elimina serial de la lista de ignorados de búsqueda normal.
UO.Ignore("lasttarget");

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

Parámetros y flujo de ejecución:

  • Ignore(id) llama al puente.Ignore(serial), lo que agrega serial al Estado.IgnoredSerials. Ignore(id,stateValue) selecciona Ignore o Dejar de ignorar. Cualquier cadena que no esté vacía no puede considerarse verdadera: las palabras de escape enumeradas se procesan por separado.
return  RunScenario();
 object? RunScenario()
{
    UO.Ignore("lasttarget", "off");
    return null;
}

3. Función auxiliar completa: clase de script

Parámetros y flujo de ejecución:

  • Este es un filtro de búsqueda, no oculta ni elimina un objeto. Los filtros con nombre de tipos AddIgnoreList se almacenan por separado.
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.Ignore(id, 1);
            UO.Print(UO.GetIgnoreList());
            UO.Ignore(id, 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;
}

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

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

Resultado: void / Unit.

Durante la llamada:

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

case "ignore": bridge.Ignore(Arg(0)); return InjectionValue.Unit;

UO.Ignore(objID) — UO.Ignore(Integer)

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

Resultado: void / Unit.

Durante la llamada:

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

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

UO.Ignore(objID) — UO.Ignore(String)

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

Resultado: void / Unit.

Durante la llamada:

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

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

UO.Ignore(id, stateValue) — UO.Ignore(Any,Any)

Parámetros: id (Any), stateValue (Any)

Resultado: void / Unit.

Durante la llamada:

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

public void Ignore(InjectionValue id, InjectionValue stateValue)

        {

            int serial = GetObject(id);

            bool enabled = stateValue.Kind != InjectionValueKind.String

                ? NumberConversions.ToInt(stateValue) != 0

                : !stateValue.String.Equals("off", StringComparison.OrdinalIgnoreCase)

                    && !stateValue.String.Equals("false", StringComparison.OrdinalIgnoreCase)

                    && stateValue.String != "0";



            if (enabled)

                bridge.Ignore(serial);

            else

                bridge.Unignore(serial);

        }

UO.IgnoreOff

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

Firmas de C#

void UO.IgnoreOff(object? objID);

Elimina un serial de la lista de ignorados normal.

Parámetros

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

Valor devuelto

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

Comportamiento

  • Bridge.Unignore elimina ID del Estado.IgnoredSerials. Otros filtros serial y con nombre AddIgnoreList no se borran; Los elementos no se eliminan del mundo.
  • Cambio local de filtro de búsqueda; Los paquetes no se envían.
  • En un host de cliente normal, estos datos de estado se toman del administrador GetPersistentState y son comunes a los scripts/chat/macros del mismo mundo/perfil, y no pertenecen a un solo script. Otro proceso o un InjectionRuntimeState aparentemente separado tiene un estado diferente. Cargar/borrar un perfil puede reemplazarlo; guardados serial todavía se comparan con el mundo cargado.

Scripts independientes de C#

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

Ejemplo sencillo

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

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

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

1. Llamada directa - guión directo

Parámetros y flujo de ejecución:

  • Elimina un serial de la lista de ignorados normal.
var id = UO.GetSerial("lasttarget");
if (Truth(UO.Exists(id)))
{
    UO.IgnoreOff(id);
}

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

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

Parámetros y flujo de ejecución:

  • Bridge.Unignore elimina ID del Estado.IgnoredSerials. Otros filtros serial y con nombre AddIgnoreList no se borran; Los elementos no se eliminan del mundo.
return  RunScenario();
 object? RunScenario()
{
    var id = UO.GetSerial("self");
    if (Truth(UO.Exists(id)))
    {
        UO.IgnoreOff(id);
    }

    return null;
}

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

3. Función auxiliar completa: clase de script

Parámetros y flujo de ejecución:

  • Cambio local de filtro de búsqueda; Los paquetes no se envían.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        ApplyToLoaded(UO.GetSerial("lasttarget"));
        return null;
    }

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

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

Implementación del comando

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

UO.IgnoreOff(objID) — UO.IgnoreOff(Any)

Parámetros: objID (Any)

Resultado: void / Unit.

Durante la llamada:

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

case "ignoreoff": bridge.Unignore(Arg(0)); return InjectionValue.Unit;

UO.IgnoreReset

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

Firmas de C#

void UO.IgnoreReset();

Borra la lista normal de serial ignorados.

Parámetros

No hay parámetros.

Valor devuelto

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

Comportamiento

  • Puente.IgnoreReset llama al Estado.IgnoredSerials.Borrar. Elimina todos los serial de este filtro, incluidos los agregados por otra búsqueda en la sesión puente general.
  • No borra el nombre AddIgnoreList, no elimina objetos ni restablece los resultados de FindType.
  • En un host de cliente normal, estos datos de estado se toman del administrador GetPersistentState y son comunes a los scripts/chat/macros del mismo mundo/perfil, y no pertenecen a un solo script. Otro proceso o un InjectionRuntimeState aparentemente separado tiene un estado diferente. Cargar/borrar un perfil puede reemplazarlo; guardados serial todavía se comparan con el mundo cargado.

Scripts independientes de C#

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

Ejemplo sencillo

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

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

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

1. Llamada directa - guión directo

Parámetros y flujo de ejecución:

  • Borra la lista normal de serial ignorados.
UO.IgnoreReset();

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

Parámetros y flujo de ejecución:

  • Puente.IgnoreReset llama al Estado.IgnoredSerials.Borrar. Elimina todos los serial de este filtro, incluidos los agregados por otra búsqueda en la sesión puente general.
return  RunScenario();
 object? RunScenario()
{
    UO.Print(UO.GetIgnoreList());
    UO.IgnoreReset();
    return null;
}

3. Función auxiliar completa: clase de script

Parámetros y flujo de ejecución:

  • No borra el nombre AddIgnoreList, no elimina objetos ni restablece los resultados de FindType.
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.Ignore("lasttarget");
        UO.IgnoreReset();
        UO.Print(UO.GetIgnoreList());
        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.IgnoreReset() — UO.IgnoreReset()

Parámetros: Sin parámetros.

Resultado: void / Unit.

Durante la llamada:

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

public void IgnoreReset() => bridge.IgnoreReset();

UO.InfoFindList

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

Firmas de C#

void UO.InfoFindList();

Envía las definiciones guardadas AddFindList al registro local del cliente. Útil para verificar el nombre, el orden, type y hue después de agregar o eliminar reglas. No muestra objetos encontrados en el mundo.

Parámetros

No hay parámetros.

Valor devuelto

void: Sin valor de retorno. No asigne la llamada a una variable y no la pruebe en true/1. Se puede inferir el estado de las definiciones UO.InfoFindList(); la búsqueda en sí se inicia por separado a través de UO.FindList().

Comportamiento

  • No acepta argumentos; imprime todos los conjuntos del tiempo de ejecución actual en una línea.
  • La lista de entradas|type|color no tiene color si se llamó a AddFindList con dos argumentos. "|" se utiliza entre entradas. Los literales numéricos se muestran en texto decimal; El pedido corresponde a la adición.
  • No ejecuta FindList y no cambia FindItem/FindCount. Para una tienda vacía, se pasa una cadena vacía al canal de mensajes; Este no es un mensaje explícito de "la lista está vacía".
  • Las definiciones están en el estado del tiempo de ejecución del script dado. Un otro tiempo de ejecución independiente tiene su propio conjunto; cerrar la ventana IDE no borra estas reglas. Este no es un archivo de configuración ni una lista de objetos globales del juego.
  • AddFindList agrega la entrada al final; las repeticiones no se eliminan. Para reaprovisionar su kit, primero llame a ClearFindList("nombre"). Cambiar las definiciones no borra FindItem/FindCount/GetFoundItems que ya se han recibido.
  • El registro almacena campos de texto. El literal numérico 0x0EED se almacena como "3821", la cadena "0x0EED" se almacena como "0x0EED". La búsqueda convierte ambas opciones en un número y DeleteFindList compara el texto almacenado. Utilice el mismo formulario al agregar y eliminar.
  • El nombre desconocido en FindList no es un conjunto registrado vacío: el motor intenta analizarlo como una lista de tipos numéricos. Un nombre no numérico provoca un error de conversión. Después de eliminar la última entrada, cree un nuevo conjunto antes de buscar ese nombre.
  • En un host de cliente normal, estos datos de estado se toman del administrador GetPersistentState y son comunes a los scripts/chat/macros del mismo mundo/perfil, y no pertenecen a un solo script. Otro proceso o un InjectionRuntimeState aparentemente separado tiene un estado diferente. Cargar/borrar un perfil puede reemplazarlo; guardados serial todavía se comparan con el mundo cargado.

Scripts independientes de C#

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

Ejemplo sencillo

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

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

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

1. Verificar reglas creadas - script directo

Parámetros y flujo de ejecución:

  • Para esto, configure el botín de línea|3821|-1 | botín|3962|-1: 3821 = 0x0EED, 3962 = 0x0F7A. Esto es type, no serial de lo encontrado.
BuildLoot();
UO.InfoFindList();

void BuildLoot()
{
    UO.ClearFindList("loot");
    UO.AddFindList("loot", 0x0EED, -1);
    UO.AddFindList("loot", 0x0F7A, -1);
}

2. Comparar definiciones antes y después de la eliminación: función de script

Parámetros y flujo de ejecución:

  • La salida Antes/Después le permite ver la eliminación de un solo color; También se mostrarán otros conjuntos con nombre, si existen.
return  RunScenario();
 object? RunScenario()
{
    UO.ClearFindList("check");
    UO.AddFindList("check", 0x0EED, 0);
    UO.AddFindList("check", 0x0EED, 0x0044);
    UO.Print("Before:");
    UO.InfoFindList();
    UO.DeleteFindList("check", 0x0EED, 0x0044);
    UO.Print("After:");
    UO.InfoFindList();
    return null;
}

3. Distinguir entre reglas y la presencia real de las cosas - clase de escenario

Parámetros y flujo de ejecución:

  • La presencia de stock|3821 confirma la regla, pero no la presencia de oro. El número de serial y la suma de unidades se leen después de una búsqueda exitosa.
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.ClearFindList("stock");
        UO.AddFindList("stock", 0x0EED);
        UO.InfoFindList();
        var first = UO.FindList("stock", "backpack");
        if (Truth(first == ""))
        {
            UO.Print("Rule exists, but no matching item is loaded");
        }
        else
        {
            UO.Print("Objects: " + Convert.ToString(UO.FindCount()));
            UO.Print("Units: " + Convert.ToString(UO.FindFullQuantity()));
        }

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

Parámetros: Sin parámetros.

Resultado: void / Unit.

Durante la llamada:

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

case "infofindlist": SystemMessage(string.Join(" | ", LegacyList("AddFindList"))); break;

UO.MFGI

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

Firmas de C#

void UO.MFGI();

Imprime la lista actual de resultados de búsqueda.

Parámetros

No hay parámetros.

Valor devuelto

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

Comportamiento

  • ExecuteLegacyManualAlias lee GetFoundItems, formatea cada serial como 0xXXXXXXXX y concatena las líneas con un "|" delimitador. No se realiza ninguna nueva búsqueda; una lista vacía da una cadena vacía.
  • Modifica o muestra solo los datos locales especificados. Este comando no tiene confirmación del servidor.

Scripts independientes de C#

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

Ejemplo sencillo

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

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

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

1. Llamada directa - guión directo

Parámetros y flujo de ejecución:

  • Imprime la lista actual de resultados de búsqueda.
UO.MFGI();

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

Parámetros y flujo de ejecución:

  • ExecuteLegacyManualAlias lee GetFoundItems, formatea cada serial como 0xXXXXXXXX y concatena las líneas con un "|" delimitador. No se realiza ninguna nueva búsqueda; una lista vacía da una cadena vacía.
return  RunScenario();
 object? RunScenario()
{
    UO.FindType("0x0E21");
    UO.MFGI();
    return null;
}

3. Función auxiliar completa: clase de script

Parámetros y flujo de ejecución:

  • Modifica o muestra solo los datos locales especificados. Este comando no tiene confirmación del servidor.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        UO.MFGI();
        UO.Print(UO.GetArrayLength(UO.GetFoundItems()));
        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.MFGI() — UO.MFGI()

Parámetros: Sin parámetros.

Resultado: void / Unit.

Durante la llamada:

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

case "mfgi":

                    SystemMessage(string.Join(" | ", bridge.GetFoundItems().Select(id => $"0x{id:X8}")));

                    break;

UO.SelectIgnoreList

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

Firmas de C#

void UO.SelectIgnoreList(object? list);

Alterna el filtro de búsqueda con nombre activo. Es útil cambiar el conjunto de excepciones entre minería, clasificación y orientación sin eliminar las reglas guardadas. Este comando no realiza la búsqueda en sí.

Parámetros

  • list — Nombre arbitrario no vacío, por ejemplo "loot_skip". El nombre no distingue entre mayúsculas y minúsculas. Este no es el nombre del artículo, ni el contenedor serial, ni el nombre de FindList. La cadena vacía "" también es aceptable aquí: deshabilite las reglas con nombre.

Valor devuelto

void - sin valor. Úselo en una línea separada sin var resultado = y sin marcar =true. El comando cambia el filtro local; no devuelve el número de elementos y no envía nada al servidor.

Comportamiento

  • Un nombre inexistente selecciona un filtro vacío. El difunto AddIgnoreList con este nombre empezará a actuar en las próximas búsquedas. Normal Ignore(serial) continúa funcionando independientemente de la elección.
  • La lista nombrada contiene las reglas graphic/type + hue, y la Ignore normal contiene la serial específica. Son filtros diferentes: se combinan cuando la búsqueda los admite. Los objetos permanecen visibles y accesibles para dirigir UseObject/MoveItem; esto no es Hide ni prohibición de acciones.
  • El nombre de la lista no distingue entre mayúsculas y minúsculas; Se eliminan los espacios de los bordes. Una lista con nombre está activa, inicialmente predeterminada. AddIgnoreList no lo selecciona automáticamente. SelectIgnoreList("") deshabilita solo el filtro con nombre.
  • Las reglas se aplican a nuevas búsquedas, incluidos los elementos cargados DESPUÉS de haber sido agregados. La matriz ya recibida y el resultado anterior FindCount no se recalculan hasta una nueva búsqueda. No seleccione una lista con la regla -1,-1 a menos que desee excluir todo.
  • El filtro tiene en cuenta FindType/FindTypeEx/FindTypesArrayEx, FindList, FindAtCoord, FindNotoriety, Count/CountEx y selecciones extendidas GetMobiles, GetWorldItems, UseType, WaitTarget, Attack/AttackNearest/FindMan. includeIgnored=true, cuando esté incluido, omite tanto serial como type/hue. La enumeración completa GetContent/GetEquipment, GetWorldItems() sin argumentos, y la verbal FindMobile(humano,cerca,...) no utilizan estas reglas.
  • GetIgnoreList devuelve solo serial agregado explícitamente; las filas de la lista nombrada no están incluidas en esta matriz. IgnoreReset borra todo el filtro serial, IgnoreOff(serial) elimina una excepción serial; las reglas nombradas se conservan. ClearIgnoreList() sin argumentos borra ambas vistas.
  • El estado pertenece al estado general de los scripts del perfil del cliente; el cambio afecta a otros scripts con este estado. La configuración se incluye en la instantánea guardada. Después de cambiar las reglas, otro script ya puede realizar una búsqueda con la instantánea tomada anteriormente; la próxima búsqueda verá la actualización.
  • En un host de cliente normal, estos datos de estado se toman del administrador GetPersistentState y son comunes a los scripts/chat/macros del mismo mundo/perfil, y no pertenecen a un solo script. Otro proceso o un InjectionRuntimeState aparentemente separado tiene un estado diferente. Cargar/borrar un perfil puede reemplazarlo; guardados serial todavía se comparan con el mundo cargado.

Scripts independientes de C#

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

Ejemplo sencillo

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

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

UO.Print("Calling UO.SelectIgnoreList");
UO.SelectIgnoreList("SORT");

1. Cambiar modo de clasificación: guión directo

Parámetros y flujo de ejecución:

  • SORT y ordenar son una lista. La búsqueda selecciona el primer objeto de mochila permitido; guardar el nombre no lo transfiere.
UO.AddIgnoreList("sort", 0x0EED);
UO.SelectIgnoreList("SORT");
var item = UO.FindType(-1, -1, "backpack");
if (Truth(item != ""))
{
    UO.AddObject("sort_candidate", item);
}

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

2. Desactivar reglas type, guardando los conjuntos mismos - función de script

Parámetros y flujo de ejecución:

  • Una línea vacía deshabilita solo el filtro nombrado. Para restaurarlo más tarde, vuelva a pasar el nombre del conjunto.
return  RunScenario();
 object? RunScenario()
{
    UO.SelectIgnoreList("");
    var gold = UO.FindType(0x0EED, -1, "backpack");
    if (Truth(gold != ""))
    {
        UO.AddObject("gold_candidate", gold);
    }

    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. Prepare un filtro después de elegir un nombre: clase de script

Parámetros y flujo de ejecución:

  • Antes de agregar la regla más tarde está vacía. Una vez agregada, ninguna pila de oro pasa la siguiente búsqueda, incluso si acaba de aparecer.
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.SelectIgnoreList("later");
        UO.AddIgnoreList("later", 0x0EED);
        var item = UO.FindType(0x0EED, -1, "ground");
        if (Truth(item == ""))
        {
            UO.Print("Gold is excluded by the selected rule");
        }

        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.SelectIgnoreList(list) — UO.SelectIgnoreList(Any)

Parámetros: list (Any)

Resultado: void / Unit.

Durante la llamada:

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

case "selectignorelist": state.SelectedIgnoreList = Text(0).Trim(); break;

UO.SetBadLocation

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

Firmas de C#

void UO.SetBadLocation(object? x, object? y);

Agrega X/Y a la lista de celdas prohibidas para las siguientes rutas MoveXY, NewMoveXY, MoveXYZ, PMove y solicita GetPathArray/GetPathArray3D.

Parámetros

  • x — Mundo X de celda excluida.
  • y — Mundo Y de celda excluida.

Valor devuelto

void: sin valor de retorno. Llame en una línea separada; no es true/false ni el número de pasos.

Comportamiento

  • La clave consta de X/Y, sin mapa y Z. Las coordenadas deben ser números enteros dentro de 0..65535; salirse del rango provoca un error de secuencia de comandos.
  • Las prohibiciones se aplican al tiempo de ejecución del script de llamada. La nueva ruta o solicitud recibe una instantánea de la misma. Una ruta que ya se está ejecutando guarda su instantánea, incluido el recálculo interno. Después de cambiar la lista, comience una nueva ruta.
  • Esto no es un cambio de mapa: el movimiento manual normal y otras rutas en tiempo de ejecución no reciben esta prohibición. Puedes abandonar el cuadrado original, incluso si está marcado como prohibido.
  • En un host de cliente normal, estos datos de estado se toman del administrador GetPersistentState y son comunes a los scripts/chat/macros del mismo mundo/perfil, y no pertenecen a un solo script. Otro proceso o un InjectionRuntimeState aparentemente separado tiene un estado diferente. Cargar/borrar un perfil puede reemplazarlo; guardados serial todavía se comparan con el mundo cargado.

Scripts independientes de C#

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

Ejemplo sencillo

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

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

UO.Print("Calling UO.SetBadLocation");
UO.SetBadLocation(UO.GetX() + 1, UO.GetY());

1. Excluir la celda vecina del cálculo: secuencia de comandos directa

Parámetros y flujo de ejecución:

  • X/Y: celda al este del personaje.
  • Si es posible atravesarlo, se devuelve otra ruta completa; el personaje no se mueve.
UO.SetBadLocation(UO.GetX() + 1, UO.GetY());
var path = UO.GetPathArray(UO.GetX() + 3, UO.GetY(), true, 0);
UO.Print(Convert.ToString(ArrayLength(path)));

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

2. Agregar dos celdas - función de script

Parámetros y flujo de ejecución:

  • Cada llamada agrega un par X/Y.
  • La repetición de un par no crea una segunda prohibición separada; Z no es un parámetro.
return  RunScenario();
 object? RunScenario()
{
    UO.SetBadLocation(1445, 1690);
    UO.SetBadLocation(1445, 1691);
    return null;
}

3. Establecer un obstáculo conocido en una celda adyacente - clase de escenario

Parámetros y flujo de ejecución:

  • Reemplace las coordenadas con una celda realmente intransitable. El comando configura datos de ruta local y no crea un objeto 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()
    {
        int x = UO.GetX() + 1;
        int y = UO.GetY();
        UO.SetBadLocation(x, y);
        UO.Print($"Marked known blocked location: {x},{y}");
        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.SetBadLocation(x, y) — UO.SetBadLocation(Any,Any)

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

Resultado: void / Unit.

Durante la llamada:

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

case "setbadlocation":

                {

                    int x = Arg(0), y = Arg(1);

                    if (x < 0 || x > ushort.MaxValue || y < 0 || y > ushort.MaxValue)

                        throw new NativeSubrutineException("UO.SetBadLocation requires world X/Y in 0..65535.");

                    state.BadLocations.Add(x + "," + y);

                    return InjectionValue.Unit;

                }

UO.SetBadObject

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

Firmas de C#

void UO.SetBadObject(object? objType, object? color, object? radius);

Excluye de las siguientes rutas y consulta las rutas de las celdas alrededor de los objetos del mundo cargados seleccionados por graphic y hue.

Parámetros

  • objType - Gráfico/type del artículo, 0...65535. 0xFFFF o -1 permite cualquier tipo. Este no es un caso específico de serial.
  • color — Tono del elemento, 0...65535. 0xFFFF o -1 permite cualquier color; 0 significa exactamente hue 0.
  • radius — Radio en celdas, 0...255 inclusive. 0 excluye una celda de elemento. R excluye el cuadrado max(abs(dx),abs(dy)) <= R a su alrededor, incluidas las celdas diagonales.

Valor devuelto

void: sin valor de retorno. Llame en una línea separada; no es true/false ni el número de pasos.

Comportamiento

  • Se requieren parámetros. Un rango inadecuado provoca un error de secuencia de comandos en lugar de un truncamiento silencioso del número.
  • Las reglas se acumulan en el tiempo de ejecución actual. Las reglas de coincidencia se combinan: el radio más grande se aplica a un elemento. ClearBadObjectList elimina todas estas reglas.
  • Se tienen en cuenta los elementos dinámicos cargados con Container=0, incluidas las puertas accesibles al cliente. Este filtro no selecciona los elementos dentro de contenedores, NPC y la estática del mapa. Para caracteres use avoidMobiles, para celdas individuales use SetBadLocation.
  • Cuando inicia MoveXY/NewMoveXY/MoveXYZ/PMove o GetPathArray/GetPathArray3D, se crea una instantánea de las reglas y posiciones de los elementos. Otros cambios en el mundo y la lista no cambian esta instantánea; un nuevo lanzamiento recibe nuevos datos.
  • El filtro no envía nada al servidor, no fuerza al contenedor cerrado a cargar contenido y no cambia el movimiento manual. Las reglas X/Y no tienen un límite Z separado.
  • En un host de cliente normal, estos datos de estado se toman del administrador GetPersistentState y son comunes a los scripts/chat/macros del mismo mundo/perfil, y no pertenecen a un solo script. Otro proceso o un InjectionRuntimeState aparentemente separado tiene un estado diferente. Cargar/borrar un perfil puede reemplazarlo; guardados serial todavía se comparan con el mundo cargado.

Scripts independientes de C#

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

Ejemplo sencillo

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

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

UO.Print("Calling UO.SetBadObject");
UO.SetBadObject(0x398C, 0xFFFF, 1);

1. Omitir objetos de cierto tipo: script directo

Parámetros y flujo de ejecución:

  • ObjType=0x398C - ejemplo graphic: reemplace con el tipo de obstáculo en su servidor. Color=0xFFFF selecciona cualquier color; Radius=1 elimina un cuadrado 3×3 alrededor de cada elemento coincidente.
  • NewMoveXY va cinco celdas hacia el este, con X/Y exacto, a pie, sin devolución de llamada y con tiempo de espera=5000 ms. ok=1 significa lograr el objetivo; 0 no confirma la derivación.
UO.SetBadObject(0x398C, 0xFFFF, 1);
var ok = UO.NewMoveXY(UO.GetX() + 5, UO.GetY(), true, 0, false, 0, 5000);
UO.Print(Convert.ToString(ok));

2. Verificar ruta con color exacto sin movimiento - función de script

Parámetros y flujo de ejecución:

  • Color=0x0044 selecciona solo ese hue, y Radius=0 excluye solo la celda ocupada por el elemento. ClearBadObjectList elimina las reglas de tipo y color anteriores.
  • GetPathArray devuelve las entradas [x,y,z], incluido el origen. Una matriz vacía significa que no existe una ruta completa dadas las restricciones actuales. El personaje permanece en su lugar.
return  RunScenario();
 object? RunScenario()
{
    UO.ClearBadObjectList();
    UO.SetBadObject(0x398C, 0x0044, 0);
    var path = UO.GetPathArray(UO.GetX() + 4, UO.GetY(), true, 0);
    UO.Print("Path records: " + Convert.ToString(ArrayLength(path)));
    return null;
}

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

3. Excluir temporalmente celdas de cualquier objeto del mundo - clase de script

Parámetros y flujo de ejecución:

  • ObjType=-1 y Color=-1 son comodines. Radius=0 excluye las celdas de todos los elementos del mundo cargados, pero no NPC ni el contenido de las bolsas.
  • La limpieza se aplica a solicitudes futuras. La ruta ya recibida se guarda; Este es un conjunto de coordenadas, no la ruta activa.
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.SetBadObject(-1, -1, 0);
        var path = UO.GetPathArray(UO.GetX() + 2, UO.GetY(), true, 0);
        UO.ClearBadObjectList();
        UO.Print(Convert.ToString(ArrayLength(path)));
        return null;
    }

    int ArrayLength(object? value) => value is System.Array array ? array.Length : 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.SetBadObject(objType, color, radius) — UO.SetBadObject(Any,Any,Any)

Parámetros: objType (Any), color (Any), radius (Any)

Resultado: void / Unit.

Durante la llamada:

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

case "setbadobject":

                {

                    int type = ResolveType(arguments[0]), hue = Arg(1), radius = Arg(2);

                    if (type < -1 || type > ushort.MaxValue || hue < -1 || hue > ushort.MaxValue || radius < 0 || radius > byte.MaxValue)

                        throw new NativeSubrutineException("UO.SetBadObject requires type/color 0..65535 (or -1) and radius 0..255.");

                    state.BadObjects.Add(type + "," + hue + "," + radius);

                    return InjectionValue.Unit;

                }

Clone this wiki locally