Skip to content

ES UO Topic trade

Codex edited this page Oct 12, 2026 · 4 revisions

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

Comercio

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

Ventana de intercambio seguro entre jugadores: participante, contenedor, estado, confirmación y cancelación.

Secciones

Tema Comandos y explicaciones
IsTrade UO.IsTrade
Oponente comercial UO.GetTradeOpponent · UO.GetTradeOpponentName
Contenedor comercial UO.GetTradeContainer
ConfirmTrade UO.ConfirmTrade
CancelTrade UO.CancelTrade

Todos los comandos del tema

Comercio seguro

UO.IsTrade · UO.TradeCount · UO.TradeCheck · UO.TradeContainer · UO.GetTradeContainer · UO.TradeOpponent · UO.GetTradeOpponent · UO.TradeName · UO.GetTradeOpponentName · UO.ConfirmTrade · UO.CancelTrade

Ejemplos sobre el tema.

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

UO.GetTradeContainer

Parámetros, resultado y todos los escenarios

var value = UO.GetTradeContainer(1, 1);
UO.Print(Hex(value));

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

UO.ConfirmTrade

Parámetros, resultado y todos los escenarios

var result = UO.ConfirmTrade(1);
if (Truth(Truth(result) == true))
{
    UO.Print("Local request processed");
}

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

Referencia completa de comandos


UO.CancelTrade

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

Firmas de C#

dynamic UO.CancelTrade(object? tradeNum);

Cancela el intercambio seleccionado y cierra su ventana.

Parámetros

  • tradeNum — Entero: número de ventana actual de 1 a TradeCount(). 0 y valores negativos no están permitidos. Esto no es serial.

Valor devuelto

int: 1 (condición cumplida): la ventana se encuentra, se cierra y se envía una solicitud de cancelación mediante cierre; 0 (condición no cumplida): sin ventana. Esto no es esperar una respuesta del servidor. Cancelar nuevamente la ventana cerrada no envía el segundo paquete.

El resultado del comando es una bandera numérica: 1 significa una condición cumplida, 0 significa una condición no cumplida. Después de var resultado = comando(...) verifique si (resultado! = 0) o si (resultado == 0). Guarde el resultado de una llamada: una llamada repetida puede realizar la acción nuevamente o leer el estado que ya cambió.

Comportamiento

  • GetTradeContainer/GetTradeOpponent/GetTradeOpponentName/ConfirmTrade/CancelTrade número de ventanas con 1; TradeContainer/TradeOpponent/TradeName y todas las formas de TradeCheck - desde 0. Ésta es una compatibilidad obvia de este cliente: los libros de referencia externos para diferentes motores utilizan diferentes puntos de referencia.
  • La lectura se realiza en el hilo del juego utilizando ventanas en vivo del mundo actual. Las ventanas cerradas no cuentan. Las llamadas de lectura no envían paquetes y no esperan una respuesta. El orden de UI puede cambiar al abrir, cerrar y mover la ventana hacia la parte superior; el número no es un identificador permanente.
  • ConfirmTrade y su registro TradeCheck envían el paquete solo cuando cambia el consentimiento. El consentimiento de otra persona lo determina el servidor. CancelTrade envía la cancelación una vez. 1/true es el estado/procesamiento local y no una garantía de finalización del intercambio. Los nombres y ambos acuerdos no prueban que la composición de los artículos no haya cambiado.

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

1. Lectura directa o acción - guión directo

Parámetros y flujo de ejecución:

  • La llamada se realiza una vez, el resultado se almacena en valor/resultado. 0 es el primer índice, 1 es el primer número (consulte la sintaxis de este comando). HEX muestra el serial numérico; Convertir.ToString: número o cadena.
var result = UO.CancelTrade(1);
if (Truth(Truth(result) == true))
{
    UO.Print("Local request processed");
}

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

2. Otros scripts y opciones: función de script

Parámetros y flujo de ejecución:

  • ConfirmTrade y su registro TradeCheck envían el paquete solo cuando cambia el consentimiento. El consentimiento de otra persona lo determina el servidor. CancelTrade envía la cancelación una vez. 1/true es el estado/procesamiento local y no una garantía de finalización del intercambio. Los nombres y ambos acuerdos no prueban que la composición de los artículos no haya cambiado.
return  RunScenario();
 object? RunScenario()
{
    var tradeNumber = 2;
    if (Truth(UO.TradeCount() >= tradeNumber))
    {
        var result = UO.CancelTrade(tradeNumber);
        UO.Print(Convert.ToString(result));
    }

    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. Ayudante completo con todas las funciones: clase de script

Parámetros y flujo de ejecución:

  • El ayudante se proporciona en su totalidad y, de hecho, se llama desde Main. Las comprobaciones de rango/ID reducen el riesgo de error, pero las llamadas múltiples no son atómicas: la ventana puede cambiar entre ellas. Para la acción expectedPartner — carácter serial guardado; Esta no es una revisión del precio o contenido del intercambio.
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 expectedPartner = UO.GetTradeOpponent(1);
        var result = ApplyToPartner(1, expectedPartner);
        UO.Print(Convert.ToString(result));
        return null;
    }

    dynamic ApplyToPartner(dynamic tradeNumber, dynamic expectedPartner)
    {
        if (Truth(expectedPartner == 0))
        {
            return false;
        }

        if (Truth(UO.GetTradeOpponent(tradeNumber) != expectedPartner))
        {
            return false;
        }

        return UO.CancelTrade(tradeNumber);
    }

    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.CancelTrade(tradeNum) — UO.CancelTrade(Any)

Parámetros: tradeNum (Any)

Resultado: dynamic / Any.

Durante la llamada:

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

case "canceltrade": return new InjectionValue(bridge.CancelTrade(Arg(0)));

UO.ConfirmTrade

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

Firmas de C#

dynamic UO.ConfirmTrade(object? tradeNum);

Establece el indicador de consentimiento personalizado en el intercambio seleccionado.

Parámetros

  • tradeNum — Entero: número de ventana actual de 1 a TradeCount(). 0 y valores negativos no están permitidos. Esto no es serial.

Valor devuelto

int: 1 (condición cumplida): se encuentra la ventana y su propio acuerdo está activado (o ya se ha activado); 0 (condición no cumplida): sin ventana. No confirma la transferencia de artículos por parte del servidor. Llamar nuevamente no elimina el consentimiento.

El resultado del comando es una bandera numérica: 1 significa una condición cumplida, 0 significa una condición no cumplida. Después de var resultado = comando(...) verifique si (resultado! = 0) o si (resultado == 0). Guarde el resultado de una llamada: una llamada repetida puede realizar la acción nuevamente o leer el estado que ya cambió.

Comportamiento

  • GetTradeContainer/GetTradeOpponent/GetTradeOpponentName/ConfirmTrade/CancelTrade número de ventanas con 1; TradeContainer/TradeOpponent/TradeName y todas las formas de TradeCheck - desde 0. Ésta es una compatibilidad obvia de este cliente: los libros de referencia externos para diferentes motores utilizan diferentes puntos de referencia.
  • La lectura se realiza en el hilo del juego utilizando ventanas en vivo del mundo actual. Las ventanas cerradas no cuentan. Las llamadas de lectura no envían paquetes y no esperan una respuesta. El orden de UI puede cambiar al abrir, cerrar y mover la ventana hacia la parte superior; el número no es un identificador permanente.
  • ConfirmTrade y su registro TradeCheck envían el paquete solo cuando cambia el consentimiento. El consentimiento de otra persona lo determina el servidor. CancelTrade envía la cancelación una vez. 1/true es el estado/procesamiento local y no una garantía de finalización del intercambio. Los nombres y ambos acuerdos no prueban que la composición de los artículos no haya cambiado.

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

1. Lectura directa o acción - guión directo

Parámetros y flujo de ejecución:

  • La llamada se realiza una vez, el resultado se almacena en valor/resultado. 0 es el primer índice, 1 es el primer número (consulte la sintaxis de este comando). HEX muestra el serial numérico; Convertir.ToString: número o cadena.
var result = UO.ConfirmTrade(1);
if (Truth(Truth(result) == true))
{
    UO.Print("Local request processed");
}

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

2. Otros scripts y opciones: función de script

Parámetros y flujo de ejecución:

  • ConfirmTrade y su registro TradeCheck envían el paquete solo cuando cambia el consentimiento. El consentimiento de otra persona lo determina el servidor. CancelTrade envía la cancelación una vez. 1/true es el estado/procesamiento local y no una garantía de finalización del intercambio. Los nombres y ambos acuerdos no prueban que la composición de los artículos no haya cambiado.
return  RunScenario();
 object? RunScenario()
{
    var tradeNumber = 2;
    if (Truth(UO.TradeCount() >= tradeNumber))
    {
        var result = UO.ConfirmTrade(tradeNumber);
        UO.Print(Convert.ToString(result));
    }

    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. Ayudante completo con todas las funciones: clase de script

Parámetros y flujo de ejecución:

  • El ayudante se proporciona en su totalidad y, de hecho, se llama desde Main. Las comprobaciones de rango/ID reducen el riesgo de error, pero las llamadas múltiples no son atómicas: la ventana puede cambiar entre ellas. Para la acción expectedPartner — carácter serial guardado; Esta no es una revisión del precio o contenido del intercambio.
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 expectedPartner = UO.GetTradeOpponent(1);
        var result = ApplyToPartner(1, expectedPartner);
        UO.Print(Convert.ToString(result));
        return null;
    }

    dynamic ApplyToPartner(dynamic tradeNumber, dynamic expectedPartner)
    {
        if (Truth(expectedPartner == 0))
        {
            return false;
        }

        if (Truth(UO.GetTradeOpponent(tradeNumber) != expectedPartner))
        {
            return false;
        }

        return UO.ConfirmTrade(tradeNumber);
    }

    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.ConfirmTrade(tradeNum) — UO.ConfirmTrade(Any)

Parámetros: tradeNum (Any)

Resultado: dynamic / Any.

Durante la llamada:

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

case "confirmtrade": return new InjectionValue(bridge.ConfirmTrade(Arg(0)));

UO.GetTradeContainer

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

Firmas de C#

dynamic UO.GetTradeContainer(object? tradeNum, object? num);

Devuelve el número serial de uno de los dos contenedores de intercambio.

Parámetros

  • tradeNum — Entero: número de ventana actual de 1 a TradeCount(). 0 y valores negativos no están permitidos. Esto no es serial.
  • num - 1 - contenedor propio, 2 - contenedor del socio. Los valores restantes devuelven 0.

Valor devuelto

int: 32 bit serial contenedor; 0 si no hay ventana o Num. incorrecto. Esto no es type. Se conserva el bit más significativo: marque != 0, no > 0 o == true.

Comportamiento

  • GetTradeContainer/GetTradeOpponent/GetTradeOpponentName/ConfirmTrade/CancelTrade número de ventanas con 1; TradeContainer/TradeOpponent/TradeName y todas las formas de TradeCheck - desde 0. Ésta es una compatibilidad obvia de este cliente: los libros de referencia externos para diferentes motores utilizan diferentes puntos de referencia.
  • La lectura se realiza en el hilo del juego utilizando ventanas en vivo del mundo actual. Las ventanas cerradas no cuentan. Las llamadas de lectura no envían paquetes y no esperan una respuesta. El orden de UI puede cambiar al abrir, cerrar y mover la ventana hacia la parte superior; el número no es un identificador permanente.
  • ConfirmTrade y su registro TradeCheck envían el paquete solo cuando cambia el consentimiento. El consentimiento de otra persona lo determina el servidor. CancelTrade envía la cancelación una vez. 1/true es el estado/procesamiento local y no una garantía de finalización del intercambio. Los nombres y ambos acuerdos no prueban que la composición de los artículos no haya cambiado.

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

1. Lectura directa o acción - guión directo

Parámetros y flujo de ejecución:

  • La llamada se realiza una vez, el resultado se almacena en valor/resultado. 0 es el primer índice, 1 es el primer número (consulte la sintaxis de este comando). HEX muestra el serial numérico; Convertir.ToString: número o cadena.
var value = UO.GetTradeContainer(1, 1);
UO.Print(Hex(value));

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

2. Otros scripts y opciones: función de script

Parámetros y flujo de ejecución:

  • total — instantánea del número de ventanas; index - índice/número actual. El ejemplo de enumeración no confirma nada. En GetTradeContainer dos llamadas leen su contenedor (1) y el de otra persona (2) de la primera ventana (1).
return  RunScenario();
 object? RunScenario()
{
    var ours = UO.GetTradeContainer(1, 1);
    var theirs = UO.GetTradeContainer(1, 2);
    UO.Print(Hex(ours) + " / " + Hex(theirs));
    return null;
}

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

3. Ayudante completo con todas las funciones: clase de script

Parámetros y flujo de ejecución:

  • El ayudante se proporciona en su totalidad y, de hecho, se llama desde Main. Las comprobaciones de rango/ID reducen el riesgo de error, pero las llamadas múltiples no son atómicas: la ventana puede cambiar entre ellas. Para la acción expectedPartner — carácter serial guardado; Esta no es una revisión del precio o contenido del intercambio.
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 value = ReadTradeValue(1);
        UO.Print(Hex(value));
        return null;
    }

    dynamic ReadTradeValue(dynamic index)
    {
        var total = UO.TradeCount();
        if (Truth(index < 1) || Truth(index >= total + 1))
        {
            return 0;
        }

        return UO.GetTradeContainer(index, 1);
    }

    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.GetTradeContainer(tradeNum, num) — UO.GetTradeContainer(Any,Any)

Parámetros: tradeNum (Any), num (Any)

Resultado: dynamic / Any.

Durante la llamada:

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

case "gettradecontainer": return new InjectionValue(bridge.GetTradeContainer(Arg(0), Arg(1)));

UO.GetTradeOpponent

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

Firmas de C#

dynamic UO.GetTradeOpponent(object? tradeNum);

Devuelve el numérico serial del carácter asociado.

Parámetros

  • tradeNum — Entero: número de ventana actual de 1 a TradeCount(). 0 y valores negativos no están permitidos. Esto no es serial.

Valor devuelto

int: carácter serial de la ventana LocalSerial; 0 si no hay ventana. Ni un contenedor ni un bool; comprobar != 0.

Comportamiento

  • GetTradeContainer/GetTradeOpponent/GetTradeOpponentName/ConfirmTrade/CancelTrade número de ventanas con 1; TradeContainer/TradeOpponent/TradeName y todas las formas de TradeCheck - desde 0. Ésta es una compatibilidad obvia de este cliente: los libros de referencia externos para diferentes motores utilizan diferentes puntos de referencia.
  • La lectura se realiza en el hilo del juego utilizando ventanas en vivo del mundo actual. Las ventanas cerradas no cuentan. Las llamadas de lectura no envían paquetes y no esperan una respuesta. El orden de UI puede cambiar al abrir, cerrar y mover la ventana hacia la parte superior; el número no es un identificador permanente.
  • ConfirmTrade y su registro TradeCheck envían el paquete solo cuando cambia el consentimiento. El consentimiento de otra persona lo determina el servidor. CancelTrade envía la cancelación una vez. 1/true es el estado/procesamiento local y no una garantía de finalización del intercambio. Los nombres y ambos acuerdos no prueban que la composición de los artículos no haya cambiado.

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

1. Lectura directa o acción - guión directo

Parámetros y flujo de ejecución:

  • La llamada se realiza una vez, el resultado se almacena en valor/resultado. 0 es el primer índice, 1 es el primer número (consulte la sintaxis de este comando). HEX muestra el serial numérico; Convertir.ToString: número o cadena.
var value = UO.GetTradeOpponent(1);
UO.Print(Hex(value));

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

2. Otros scripts y opciones: función de script

Parámetros y flujo de ejecución:

  • total — instantánea del número de ventanas; index - índice/número actual. El ejemplo de enumeración no confirma nada. En GetTradeContainer dos llamadas leen su contenedor (1) y el de otra persona (2) de la primera ventana (1).
return  RunScenario();
 object? RunScenario()
{
    var total = UO.TradeCount();
    for (int index = (int)(1); index <= total - 0; index += (int)(1))
    {
        var value = UO.GetTradeOpponent(index);
        UO.Print(Convert.ToString(index) + ": " + Hex(value));
    }

    return null;
}

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

3. Ayudante completo con todas las funciones: clase de script

Parámetros y flujo de ejecución:

  • El ayudante se proporciona en su totalidad y, de hecho, se llama desde Main. Las comprobaciones de rango/ID reducen el riesgo de error, pero las llamadas múltiples no son atómicas: la ventana puede cambiar entre ellas. Para la acción expectedPartner — carácter serial guardado; Esta no es una revisión del precio o contenido del intercambio.
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 value = ReadTradeValue(1);
        UO.Print(Hex(value));
        return null;
    }

    dynamic ReadTradeValue(dynamic index)
    {
        var total = UO.TradeCount();
        if (Truth(index < 1) || Truth(index >= total + 1))
        {
            return 0;
        }

        return UO.GetTradeOpponent(index);
    }

    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.GetTradeOpponent(tradeNum) — UO.GetTradeOpponent(Any)

Parámetros: tradeNum (Any)

Resultado: dynamic / Any.

Durante la llamada:

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

case "gettradeopponent": return new InjectionValue(bridge.GetTradeOpponent(Arg(0)));

UO.GetTradeOpponentName

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

Firmas de C#

dynamic UO.GetTradeOpponentName(object? tradeNum);

Devuelve el nombre del socio recibido junto con la ventana de intercambio.

Parámetros

  • tradeNum — Entero: número de ventana actual de 1 a TradeCount(). 0 y valores negativos no están permitidos. Esto no es serial.

Valor devuelto

string: nombre del paquete de apertura de intercambio; cadena vacía si no hay ventana o nombre. No vuelve a preguntar el nombre.

Comportamiento

  • GetTradeContainer/GetTradeOpponent/GetTradeOpponentName/ConfirmTrade/CancelTrade número de ventanas con 1; TradeContainer/TradeOpponent/TradeName y todas las formas de TradeCheck - desde 0. Ésta es una compatibilidad obvia de este cliente: los libros de referencia externos para diferentes motores utilizan diferentes puntos de referencia.
  • La lectura se realiza en el hilo del juego utilizando ventanas en vivo del mundo actual. Las ventanas cerradas no cuentan. Las llamadas de lectura no envían paquetes y no esperan una respuesta. El orden de UI puede cambiar al abrir, cerrar y mover la ventana hacia la parte superior; el número no es un identificador permanente.
  • ConfirmTrade y su registro TradeCheck envían el paquete solo cuando cambia el consentimiento. El consentimiento de otra persona lo determina el servidor. CancelTrade envía la cancelación una vez. 1/true es el estado/procesamiento local y no una garantía de finalización del intercambio. Los nombres y ambos acuerdos no prueban que la composición de los artículos no haya cambiado.

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

1. Lectura directa o acción - guión directo

Parámetros y flujo de ejecución:

  • La llamada se realiza una vez, el resultado se almacena en valor/resultado. 0 es el primer índice, 1 es el primer número (consulte la sintaxis de este comando). HEX muestra el serial numérico; Convertir.ToString: número o cadena.
var value = UO.GetTradeOpponentName(1);
UO.Print(Convert.ToString(value));

2. Otros scripts y opciones: función de script

Parámetros y flujo de ejecución:

  • total — instantánea del número de ventanas; index - índice/número actual. El ejemplo de enumeración no confirma nada. En GetTradeContainer dos llamadas leen su contenedor (1) y el de otra persona (2) de la primera ventana (1).
return  RunScenario();
 object? RunScenario()
{
    var total = UO.TradeCount();
    for (int index = (int)(1); index <= total - 0; index += (int)(1))
    {
        var value = UO.GetTradeOpponentName(index);
        UO.Print(Convert.ToString(index) + ": " + Convert.ToString(value));
    }

    return null;
}

3. Ayudante completo con todas las funciones: clase de script

Parámetros y flujo de ejecución:

  • El ayudante se proporciona en su totalidad y, de hecho, se llama desde Main. Las comprobaciones de rango/ID reducen el riesgo de error, pero las llamadas múltiples no son atómicas: la ventana puede cambiar entre ellas. Para la acción expectedPartner — carácter serial guardado; Esta no es una revisión del precio o contenido del intercambio.
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 value = ReadTradeValue(1);
        UO.Print(Convert.ToString(value));
        return null;
    }

    dynamic ReadTradeValue(dynamic index)
    {
        var total = UO.TradeCount();
        if (Truth(index < 1) || Truth(index >= total + 1))
        {
            return "";
        }

        return UO.GetTradeOpponentName(index);
    }

    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.GetTradeOpponentName(tradeNum) — UO.GetTradeOpponentName(Any)

Parámetros: tradeNum (Any)

Resultado: dynamic / Any.

Durante la llamada:

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

case "gettradeopponentname": return new InjectionValue(bridge.GetTradeOpponentName(Arg(0)));

UO.IsTrade

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

Firmas de C#

int UO.IsTrade();

Comprueba si hay una ventana de intercambio segura abierta.

Parámetros

No hay parámetros.

Valor devuelto

int: 1 (condición cumplida): hay un intercambio abierto; 0 (condición no cumplida) - no.

El resultado del comando es una bandera numérica: 1 significa una condición cumplida, 0 significa una condición no cumplida. Después de var resultado = comando(...) verifique si (resultado! = 0) o si (resultado == 0). Guarde el resultado de una llamada: una llamada repetida puede realizar la acción nuevamente o leer el estado que ya cambió.

Comportamiento

  • GetTradeContainer/GetTradeOpponent/GetTradeOpponentName/ConfirmTrade/CancelTrade número de ventanas con 1; TradeContainer/TradeOpponent/TradeName y todas las formas de TradeCheck - desde 0. Ésta es una compatibilidad obvia de este cliente: los libros de referencia externos para diferentes motores utilizan diferentes puntos de referencia.
  • La lectura se realiza en el hilo del juego utilizando ventanas en vivo del mundo actual. Las ventanas cerradas no cuentan. Las llamadas de lectura no envían paquetes y no esperan una respuesta. El orden de UI puede cambiar al abrir, cerrar y mover la ventana hacia la parte superior; el número no es un identificador permanente.
  • ConfirmTrade y su registro TradeCheck envían el paquete solo cuando cambia el consentimiento. El consentimiento de otra persona lo determina el servidor. CancelTrade envía la cancelación una vez. 1/true es el estado/procesamiento local y no una garantía de finalización del intercambio. Los nombres y ambos acuerdos no prueban que la composición de los artículos no haya cambiado.

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

1. Lectura directa o acción - guión directo

Parámetros y flujo de ejecución:

  • La llamada se realiza una vez, el resultado se almacena en valor/resultado. 0 es el primer índice, 1 es el primer número (consulte la sintaxis de este comando). HEX muestra el serial numérico; Convertir.ToString: número o cadena.
var value = UO.IsTrade();
UO.Print(Convert.ToString(value));

2. Otros scripts y opciones: función de script

Parámetros y flujo de ejecución:

  • antes/después: dos instantáneas separadas con un intervalo de 500 milisegundos. La pausa no espera un intercambio específico; Entre lecturas el estado puede cambiar varias veces.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var before = UO.IsTrade();
    await Delay(500);
    var after = UO.IsTrade();
    UO.Print(Convert.ToString(before) + " -> " + Convert.ToString(after));
    return null;
}

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

3. Ayudante completo con todas las funciones: clase de script

Parámetros y flujo de ejecución:

  • El ayudante se proporciona en su totalidad y, de hecho, se llama desde Main. Las comprobaciones de rango/ID reducen el riesgo de error, pero las llamadas múltiples no son atómicas: la ventana puede cambiar entre ellas. Para la acción expectedPartner — carácter serial guardado; Esta no es una revisión del precio o contenido del intercambio.
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 value = ReadTradeState();
        UO.Print(Convert.ToString(value));
        return null;
    }

    dynamic ReadTradeState()
    {
        return UO.IsTrade();
    }
}

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

Parámetros: Sin parámetros.

Resultado: int / Integer.

Durante la llamada:

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

case "istrade": return new InjectionValue(bridge.IsTrade());

UO.TradeCheck

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

Firmas de C#

int UO.TradeCheck(object? windowIndex);
dynamic UO.TradeCheck(object? tradeNum, object? num);
int UO.TradeCheck(object? windowIndex, object? checkbox, object? stateValue);

Lee banderas de consentimiento; el formulario de tres parámetros también modifica su propia casilla de verificación.

Parámetros

  • windowIndex — Entero: índice de la ventana actual de 0 a TradeCount()-1. Un índice negativo o faltante produce un resultado en blanco. Esto no es serial.
  • tradeNum — Entero: índice de la ventana actual de 0 a TradeCount()-1. Un índice negativo o faltante produce un resultado en blanco. Esto no es serial.
  • num — Formulario de dos parámetros únicamente: 1 — bandera propia, 2 — bandera del socio; otros significados dan 0. TradeNum aquí comienza con 0.
  • checkbox: formulario de tres parámetros únicamente: 0: su propia bandera, 1: la de su socio. La bandera ajena sólo se lee; otro significado lo da 0.
  • stateValue: solo con casilla de verificación=0: 0/false elimina el consentimiento, cualquier número distinto de cero/true incluye. Si checkbox=1 el valor se ignora.

Valor devuelto

int: 1 (condición cumplida): la casilla de verificación seleccionada está seleccionada; 0 (condición no cumplida): eliminada, falta la ventana o el lado es incorrecto. El formulario de registro devuelve el estado en lugar de la indicación de una transacción exitosa: al borrar la casilla de verificación se devuelve 0.

El resultado del comando es una bandera numérica: 1 significa una condición cumplida, 0 significa una condición no cumplida. Después de var resultado = comando(...) verifique si (resultado! = 0) o si (resultado == 0). Guarde el resultado de una llamada: una llamada repetida puede realizar la acción nuevamente o leer el estado que ya cambió.

Comportamiento

  • GetTradeContainer/GetTradeOpponent/GetTradeOpponentName/ConfirmTrade/CancelTrade número de ventanas con 1; TradeContainer/TradeOpponent/TradeName y todas las formas de TradeCheck - desde 0. Ésta es una compatibilidad obvia de este cliente: los libros de referencia externos para diferentes motores utilizan diferentes puntos de referencia.
  • La lectura se realiza en el hilo del juego utilizando ventanas en vivo del mundo actual. Las ventanas cerradas no cuentan. Las llamadas de lectura no envían paquetes y no esperan una respuesta. El orden de UI puede cambiar al abrir, cerrar y mover la ventana hacia la parte superior; el número no es un identificador permanente.
  • ConfirmTrade y su registro TradeCheck envían el paquete solo cuando cambia el consentimiento. El consentimiento de otra persona lo determina el servidor. CancelTrade envía la cancelación una vez. 1/true es el estado/procesamiento local y no una garantía de finalización del intercambio. Los nombres y ambos acuerdos no prueban que la composición de los artículos no haya cambiado.

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

1. Lectura directa o acción - guión directo

Parámetros y flujo de ejecución:

  • UO.TradeCheck(0) y UO.TradeCheck(0,1) leen su acuerdo de la primera ventana; UO.TradeCheck(0,2) - de otra persona. No hay grabación ni confirmación automática.
var own = UO.TradeCheck(0);
var sameOwn = UO.TradeCheck(0, 1);
var other = UO.TradeCheck(0, 2);
UO.Print(Convert.ToString(own) + "/" + Convert.ToString(sameOwn) + "/" + Convert.ToString(other));

2. Otros scripts y opciones: función de script

Parámetros y flujo de ejecución:

  • UO.TradeCheck(0,0,false) retira su consentimiento. UO.TradeCheck(0,1,false) solo lee el consentimiento de la pareja: false no puede cambiar el bando de otra persona. Esperamos el resultado 0 después de la retirada.
return  RunScenario();
 object? RunScenario()
{
    var cleared = UO.TradeCheck(0, 0, false);
    var other = UO.TradeCheck(0, 1, false);
    UO.Print(Convert.ToString(cleared) + "/" + Convert.ToString(other));
    return null;
}

3. Ayudante completo con todas las funciones: clase de script

Parámetros y flujo de ejecución:

  • El ayudante se proporciona en su totalidad y, de hecho, se llama desde Main. Las comprobaciones de rango/ID reducen el riesgo de error, pero las llamadas múltiples no son atómicas: la ventana puede cambiar entre ellas. Para la acción expectedPartner — carácter serial guardado; Esta no es una revisión del precio o contenido del intercambio.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var accepted = BothAccepted(0);
        if (Truth(Truth(accepted) == true))
        {
            UO.Print("Both boxes are checked; server completion is not known");
        }

        return null;
    }

    dynamic BothAccepted(dynamic index)
    {
        if (Truth(index < 0) || Truth(index >= UO.TradeCount()))
        {
            return false;
        }

        var own = UO.TradeCheck(index, 1);
        var other = UO.TradeCheck(index, 2);
        return Truth(Truth(own) == true) && Truth(Truth(other) == true);
    }

    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.TradeCheck(windowIndex) — UO.TradeCheck(Any)

Parámetros: windowIndex (Any)

Resultado: int / Integer.

Durante la llamada:

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

public int TradeCheck(InjectionValue windowIndex)

            => bridge.TradeCheck(NumberConversions.ToInt(windowIndex), 0, 0, false);

UO.TradeCheck(tradeNum, num) — UO.TradeCheck(Any,Any)

Parámetros: tradeNum (Any), num (Any)

Resultado: dynamic / Any.

Durante la llamada:

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

case "tradecheck":

                    // The compatibility reader uses participants 1/2; the legacy

                    // one/three-argument forms use checkbox indices 0/1.

                    int tradeSide = Arg(1);

                    return new InjectionValue(tradeSide is 1 or 2

                        ? bridge.TradeCheck(Arg(0), tradeSide - 1, 0, false) : 0);

UO.TradeCheck(windowIndex, checkbox, stateValue) — UO.TradeCheck(Any,Any,Any)

Parámetros: windowIndex (Any), checkbox (Any), stateValue (Any)

Resultado: int / Integer.

Durante la llamada:

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

public int TradeCheck(InjectionValue windowIndex, InjectionValue checkbox, InjectionValue stateValue)

            => bridge.TradeCheck(NumberConversions.ToInt(windowIndex), NumberConversions.ToInt(checkbox), NumberConversions.ToInt(stateValue), true);

UO.TradeContainer

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

Firmas de C#

string UO.TradeContainer(object? windowIndex);

Devuelve serial de su contenedor de intercambio como una cadena hexadecimal.

Parámetros

  • windowIndex — Entero: índice de la ventana actual de 0 a TradeCount()-1. Un índice negativo o faltante produce un resultado en blanco. Esto no es serial.

Valor devuelto

string: hexadecimal de la forma "0x40000011"; "0x00000000" si no hay ventana. Este es el ID de su contenedor, no el bool ni la cadena vacía.

Comportamiento

  • GetTradeContainer/GetTradeOpponent/GetTradeOpponentName/ConfirmTrade/CancelTrade número de ventanas con 1; TradeContainer/TradeOpponent/TradeName y todas las formas de TradeCheck - desde 0. Ésta es una compatibilidad obvia de este cliente: los libros de referencia externos para diferentes motores utilizan diferentes puntos de referencia.
  • La lectura se realiza en el hilo del juego utilizando ventanas en vivo del mundo actual. Las ventanas cerradas no cuentan. Las llamadas de lectura no envían paquetes y no esperan una respuesta. El orden de UI puede cambiar al abrir, cerrar y mover la ventana hacia la parte superior; el número no es un identificador permanente.
  • ConfirmTrade y su registro TradeCheck envían el paquete solo cuando cambia el consentimiento. El consentimiento de otra persona lo determina el servidor. CancelTrade envía la cancelación una vez. 1/true es el estado/procesamiento local y no una garantía de finalización del intercambio. Los nombres y ambos acuerdos no prueban que la composición de los artículos no haya cambiado.

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

1. Lectura directa o acción - guión directo

Parámetros y flujo de ejecución:

  • La llamada se realiza una vez, el resultado se almacena en valor/resultado. 0 es el primer índice, 1 es el primer número (consulte la sintaxis de este comando). HEX muestra el serial numérico; Convertir.ToString: número o cadena.
var value = UO.TradeContainer(0);
UO.Print(Convert.ToString(value));

2. Otros scripts y opciones: función de script

Parámetros y flujo de ejecución:

  • total — instantánea del número de ventanas; index - índice/número actual. El ejemplo de enumeración no confirma nada. En GetTradeContainer dos llamadas leen su contenedor (1) y el de otra persona (2) de la primera ventana (1).
return  RunScenario();
 object? RunScenario()
{
    var total = UO.TradeCount();
    for (int index = (int)(0); index <= total - 1; index += (int)(1))
    {
        var value = UO.TradeContainer(index);
        UO.Print(Convert.ToString(index) + ": " + Convert.ToString(value));
    }

    return null;
}

3. Ayudante completo con todas las funciones: clase de script

Parámetros y flujo de ejecución:

  • El ayudante se proporciona en su totalidad y, de hecho, se llama desde Main. Las comprobaciones de rango/ID reducen el riesgo de error, pero las llamadas múltiples no son atómicas: la ventana puede cambiar entre ellas. Para la acción expectedPartner — carácter serial guardado; Esta no es una revisión del precio o contenido del intercambio.
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 value = ReadTradeValue(0);
        UO.Print(Convert.ToString(value));
        return null;
    }

    dynamic ReadTradeValue(dynamic index)
    {
        var total = UO.TradeCount();
        if (Truth(index < 0) || Truth(index >= total + 0))
        {
            return "0x00000000";
        }

        return UO.TradeContainer(index);
    }

    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.TradeContainer(windowIndex) — UO.TradeContainer(Any)

Parámetros: windowIndex (Any)

Resultado: string / String.

Durante la llamada:

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

public string TradeContainer(InjectionValue windowIndex) => NumberConversions.ToHex(bridge.TradeContainer(NumberConversions.ToInt(windowIndex)));

UO.TradeCount

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

Firmas de C#

int UO.TradeCount();

Devuelve el número de ventanas de intercambio abiertas.

Parámetros

No hay parámetros.

Valor devuelto

int: número de ventanas desde 0. Ésta es una cantidad, no un bool; para comprobar disponibilidad utilice > 0.

Comportamiento

  • GetTradeContainer/GetTradeOpponent/GetTradeOpponentName/ConfirmTrade/CancelTrade número de ventanas con 1; TradeContainer/TradeOpponent/TradeName y todas las formas de TradeCheck - desde 0. Ésta es una compatibilidad obvia de este cliente: los libros de referencia externos para diferentes motores utilizan diferentes puntos de referencia.
  • La lectura se realiza en el hilo del juego utilizando ventanas en vivo del mundo actual. Las ventanas cerradas no cuentan. Las llamadas de lectura no envían paquetes y no esperan una respuesta. El orden de UI puede cambiar al abrir, cerrar y mover la ventana hacia la parte superior; el número no es un identificador permanente.
  • ConfirmTrade y su registro TradeCheck envían el paquete solo cuando cambia el consentimiento. El consentimiento de otra persona lo determina el servidor. CancelTrade envía la cancelación una vez. 1/true es el estado/procesamiento local y no una garantía de finalización del intercambio. Los nombres y ambos acuerdos no prueban que la composición de los artículos no haya cambiado.

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

1. Lectura directa o acción - guión directo

Parámetros y flujo de ejecución:

  • La llamada se realiza una vez, el resultado se almacena en valor/resultado. 0 es el primer índice, 1 es el primer número (consulte la sintaxis de este comando). HEX muestra el serial numérico; Convertir.ToString: número o cadena.
var value = UO.TradeCount();
UO.Print(Convert.ToString(value));

2. Otros scripts y opciones: función de script

Parámetros y flujo de ejecución:

  • antes/después: dos instantáneas separadas con un intervalo de 500 milisegundos. La pausa no espera un intercambio específico; Entre lecturas el estado puede cambiar varias veces.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var before = UO.TradeCount();
    await Delay(500);
    var after = UO.TradeCount();
    UO.Print(Convert.ToString(before) + " -> " + Convert.ToString(after));
    return null;
}

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

3. Ayudante completo con todas las funciones: clase de script

Parámetros y flujo de ejecución:

  • El ayudante se proporciona en su totalidad y, de hecho, se llama desde Main. Las comprobaciones de rango/ID reducen el riesgo de error, pero las llamadas múltiples no son atómicas: la ventana puede cambiar entre ellas. Para la acción expectedPartner — carácter serial guardado; Esta no es una revisión del precio o contenido del intercambio.
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 value = ReadTradeState();
        UO.Print(Convert.ToString(value));
        return null;
    }

    dynamic ReadTradeState()
    {
        return UO.TradeCount();
    }
}

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

Parámetros: Sin parámetros.

Resultado: int / Integer.

Durante la llamada:

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

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

UO.TradeName

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

Firmas de C#

string UO.TradeName(object? windowIndex);

Devuelve el nombre del socio desde la ventana de intercambio por índice desde cero.

Parámetros

  • windowIndex — Entero: índice de la ventana actual de 0 a TradeCount()-1. Un índice negativo o faltante produce un resultado en blanco. Esto no es serial.

Valor devuelto

string: nombre del socio guardado; cadena vacía si no hay ventana/nombre. El nombre del elemento del contenedor no se utiliza.

Comportamiento

  • GetTradeContainer/GetTradeOpponent/GetTradeOpponentName/ConfirmTrade/CancelTrade número de ventanas con 1; TradeContainer/TradeOpponent/TradeName y todas las formas de TradeCheck - desde 0. Ésta es una compatibilidad obvia de este cliente: los libros de referencia externos para diferentes motores utilizan diferentes puntos de referencia.
  • La lectura se realiza en el hilo del juego utilizando ventanas en vivo del mundo actual. Las ventanas cerradas no cuentan. Las llamadas de lectura no envían paquetes y no esperan una respuesta. El orden de UI puede cambiar al abrir, cerrar y mover la ventana hacia la parte superior; el número no es un identificador permanente.
  • ConfirmTrade y su registro TradeCheck envían el paquete solo cuando cambia el consentimiento. El consentimiento de otra persona lo determina el servidor. CancelTrade envía la cancelación una vez. 1/true es el estado/procesamiento local y no una garantía de finalización del intercambio. Los nombres y ambos acuerdos no prueban que la composición de los artículos no haya cambiado.

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

1. Lectura directa o acción - guión directo

Parámetros y flujo de ejecución:

  • La llamada se realiza una vez, el resultado se almacena en valor/resultado. 0 es el primer índice, 1 es el primer número (consulte la sintaxis de este comando). HEX muestra el serial numérico; Convertir.ToString: número o cadena.
var value = UO.TradeName(0);
UO.Print(Convert.ToString(value));

2. Otros scripts y opciones: función de script

Parámetros y flujo de ejecución:

  • total — instantánea del número de ventanas; index - índice/número actual. El ejemplo de enumeración no confirma nada. En GetTradeContainer dos llamadas leen su contenedor (1) y el de otra persona (2) de la primera ventana (1).
return  RunScenario();
 object? RunScenario()
{
    var total = UO.TradeCount();
    for (int index = (int)(0); index <= total - 1; index += (int)(1))
    {
        var value = UO.TradeName(index);
        UO.Print(Convert.ToString(index) + ": " + Convert.ToString(value));
    }

    return null;
}

3. Ayudante completo con todas las funciones: clase de script

Parámetros y flujo de ejecución:

  • El ayudante se proporciona en su totalidad y, de hecho, se llama desde Main. Las comprobaciones de rango/ID reducen el riesgo de error, pero las llamadas múltiples no son atómicas: la ventana puede cambiar entre ellas. Para la acción expectedPartner — carácter serial guardado; Esta no es una revisión del precio o contenido del intercambio.
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 value = ReadTradeValue(0);
        UO.Print(Convert.ToString(value));
        return null;
    }

    dynamic ReadTradeValue(dynamic index)
    {
        var total = UO.TradeCount();
        if (Truth(index < 0) || Truth(index >= total + 0))
        {
            return "";
        }

        return UO.TradeName(index);
    }

    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.TradeName(windowIndex) — UO.TradeName(Any)

Parámetros: windowIndex (Any)

Resultado: string / String.

Durante la llamada:

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

public string TradeName(InjectionValue windowIndex) => bridge.TradeName(NumberConversions.ToInt(windowIndex));

UO.TradeOpponent

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

Firmas de C#

string UO.TradeOpponent(object? windowIndex);

Devuelve serial del contenedor asociado como una cadena hexadecimal; este no es un carácter ID.

Parámetros

  • windowIndex — Entero: índice de la ventana actual de 0 a TradeCount()-1. Un índice negativo o faltante produce un resultado en blanco. Esto no es serial.

Valor devuelto

string: hexadecimal serial del ID2 del contenedor de otra persona; "0x00000000" si no hay ventana. Para un carácter ID, use GetTradeOpponent(índice + 1).

Comportamiento

  • GetTradeContainer/GetTradeOpponent/GetTradeOpponentName/ConfirmTrade/CancelTrade número de ventanas con 1; TradeContainer/TradeOpponent/TradeName y todas las formas de TradeCheck - desde 0. Ésta es una compatibilidad obvia de este cliente: los libros de referencia externos para diferentes motores utilizan diferentes puntos de referencia.
  • La lectura se realiza en el hilo del juego utilizando ventanas en vivo del mundo actual. Las ventanas cerradas no cuentan. Las llamadas de lectura no envían paquetes y no esperan una respuesta. El orden de UI puede cambiar al abrir, cerrar y mover la ventana hacia la parte superior; el número no es un identificador permanente.
  • ConfirmTrade y su registro TradeCheck envían el paquete solo cuando cambia el consentimiento. El consentimiento de otra persona lo determina el servidor. CancelTrade envía la cancelación una vez. 1/true es el estado/procesamiento local y no una garantía de finalización del intercambio. Los nombres y ambos acuerdos no prueban que la composición de los artículos no haya cambiado.

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

1. Lectura directa o acción - guión directo

Parámetros y flujo de ejecución:

  • La llamada se realiza una vez, el resultado se almacena en valor/resultado. 0 es el primer índice, 1 es el primer número (consulte la sintaxis de este comando). HEX muestra el serial numérico; Convertir.ToString: número o cadena.
var value = UO.TradeOpponent(0);
UO.Print(Convert.ToString(value));

2. Otros scripts y opciones: función de script

Parámetros y flujo de ejecución:

  • total — instantánea del número de ventanas; index - índice/número actual. El ejemplo de enumeración no confirma nada. En GetTradeContainer dos llamadas leen su contenedor (1) y el de otra persona (2) de la primera ventana (1).
return  RunScenario();
 object? RunScenario()
{
    var total = UO.TradeCount();
    for (int index = (int)(0); index <= total - 1; index += (int)(1))
    {
        var value = UO.TradeOpponent(index);
        UO.Print(Convert.ToString(index) + ": " + Convert.ToString(value));
    }

    return null;
}

3. Ayudante completo con todas las funciones: clase de script

Parámetros y flujo de ejecución:

  • El ayudante se proporciona en su totalidad y, de hecho, se llama desde Main. Las comprobaciones de rango/ID reducen el riesgo de error, pero las llamadas múltiples no son atómicas: la ventana puede cambiar entre ellas. Para la acción expectedPartner — carácter serial guardado; Esta no es una revisión del precio o contenido del intercambio.
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 value = ReadTradeValue(0);
        UO.Print(Convert.ToString(value));
        return null;
    }

    dynamic ReadTradeValue(dynamic index)
    {
        var total = UO.TradeCount();
        if (Truth(index < 0) || Truth(index >= total + 0))
        {
            return "0x00000000";
        }

        return UO.TradeOpponent(index);
    }

    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.TradeOpponent(windowIndex) — UO.TradeOpponent(Any)

Parámetros: windowIndex (Any)

Resultado: string / String.

Durante la llamada:

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

public string TradeOpponent(InjectionValue windowIndex) => NumberConversions.ToHex(bridge.TradeOpponent(NumberConversions.ToInt(windowIndex)));

Clone this wiki locally