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

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

Menús y menús contextuales

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

Menús antiguos, menús contextuales y entrada de texto. Estos son mecanismos separados; tome el número de elemento de la respuesta del menú deseado.

Secciones

Tema Comandos y explicaciones
AutoMenu UO.AutoMenu
WaitMenu UO.WaitMenu
Menu Hooks UO.MenuHookPresent · UO.CancelAllMenuHooks
Elementos del menú UO.GetMenuItems · UO.GetMenuItemsEx · UO.GetLastMenuItems
CancelMenu UO.CancelMenu
Context Menu UO.GetContextMenu · UO.ClearContextMenu
RequestContextMenu UO.RequestContextMenu
Context Menu Hooks UO.SetContextMenuHook

Todos los comandos del tema

Menús

UO.AutoMenu · UO.WaitMenu · UO.GetMenuItems · UO.GetMenuItemsEx · UO.GetLastMenuItems · UO.MenuHookPresent · UO.MenuPresent · UO.CancelAllMenuHooks · UO.CancelMenu · UO.CloseMenu · UO.WaitingForMenu · UO.WaitingMenu

Menú contextual

UO.GetContextMenu · UO.RequestContextMenu · UO.SetContextMenuHook · UO.ClearContextMenu

Entrada de texto

UO.WaitTextEntry · UO.ConsoleEntryReply · UO.ConsoleEntryUnicodeReply

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

Parámetros, resultado y todos los escenarios

var id = UO.GetSerial("lasttarget");
if (Truth(UO.Exists(id)))
{
    UO.RequestContextMenu(id);
}

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

UO.WaitMenu

Parámetros, resultado y todos los escenarios

UO.WaitMenu("Craft", "Tools");

Referencia completa de comandos


UO.AutoMenu

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

Firmas de C#

void UO.AutoMenu(object? prompt, object? choice);

Registra un enlace de menú persistente: cuando aparece un menú de servidor con un título adecuado, el cliente selecciona el elemento apropiado. La llamada no abre el menú y no lo espera de forma síncrona.

Parámetros

  • prompt: subcadena del título del menú del servidor.
  • choice: subcadena de la firma del elemento del menú.

Valor devuelto

void. La llamada solo registra un gancho y no informa si se encontró el menú o si el elemento se seleccionó exitosamente.

Comportamiento

  • Cada vez que se actualiza el cliente, el gancho busca un menú del servidor que aún no se ha cerrado y cuyo título contiene prompt. Si se encuentra un elemento cuya firma contiene choice, el cliente lo selecciona. El gancho permanece registrado después de la selección, por lo que funcionará en menús coincidentes posteriores. Puedes quitar los ganchos usando UO.CancelMenu().

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.AutoMenu");
UO.AutoMenu("Choose material", "Copper");

1. Espere un menú con el título "Elegir material" y seleccione el elemento con el texto "Cobre". - guión directo

Parámetros y flujo de ejecución:

  • Espere un menú con el título "Elegir material" y seleccione el elemento con el texto "Cobre".
UO.AutoMenu("Choose material", "Copper");

2. Las subcadenas se comparan sin distinguir entre mayúsculas y minúsculas; El gancho también afecta a los menús coincidentes posteriores. - función de guión

Parámetros y flujo de ejecución:

  • Las subcadenas se comparan sin distinguir entre mayúsculas y minúsculas; El gancho también afecta a los menús coincidentes posteriores.
return  RunScenario();
 object? RunScenario()
{
    var menuCaption = "choose color";
    var itemCaption = "blue";
    UO.AutoMenu(menuCaption, itemCaption);
    return null;
}

3. Registre un enlace mientras dure esta tarea y luego elimine todos los enlaces para este cliente. - clase de guión

Parámetros y flujo de ejecución:

  • Registre un enlace mientras dure esta tarea y luego elimine todos los enlaces para este cliente.
  • Se pueden realizar otras acciones del script antes de que aparezca el menú.
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.AutoMenu("Choose material", "Iron");
        UO.CancelMenu();
        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.AutoMenu(prompt, choice) — UO.AutoMenu(Any,Any)

Parámetros: prompt (Any), choice (Any)

Resultado: void / Unit.

Durante la llamada:

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

case "automenu":

                    if (arguments.Length >= 2) bridge.AddMenuHook(arguments[0].ToString(), arguments[1].ToString(), true);

                    break;

UO.CancelAllMenuHooks

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

Firmas de C#

void UO.CancelAllMenuHooks();

Elimina todos los enlaces automáticos registrados de los menús antiguos del servidor cliente.

Parámetros

No hay parámetros.

Valor devuelto

void: sin valor de retorno.

Comportamiento

  • Llama al administrador ClearMenuHooks. Se eliminan las reglas de selección únicas y persistentes, incluidas AutoMenu y WaitMenu. Este comando no cierra los menús ya abiertos; CloseMenu se utiliza para esto.

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

1. Eliminar todos los ganchos: script directo

Parámetros y flujo de ejecución:

  • La eliminación se aplica a todo el conjunto de enlaces del menú del cliente.
UO.CancelAllMenuHooks();

2. Restringir acción AutoMenu - función de script

Parámetros y flujo de ejecución:

  • El anzuelo se retira inmediatamente; Los menús futuros coincidentes ya no se seleccionan automáticamente.
return  RunScenario();
 object? RunScenario()
{
    UO.AutoMenu("Choose material", "Iron");
    UO.CancelAllMenuHooks();
    return null;
}

3. Detener la selección automática y cerrar el menú - clase de script

Parámetros y flujo de ejecución:

  • El primer comando elimina los ganchos; el segundo cancela por separado los menús antiguos abiertos.
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.CancelAllMenuHooks();
        UO.CloseMenu();
        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.CancelAllMenuHooks() — UO.CancelAllMenuHooks()

Parámetros: Sin parámetros.

Resultado: void / Unit.

Durante la llamada:

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

case "cancelallmenuhooks": bridge.ClearMenuHooks(); return InjectionValue.Unit;

UO.CancelMenu

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

Firmas de C#

void UO.CancelMenu();

Elimina todos los enlaces automáticos registrados de los menús antiguos del servidor cliente.

Parámetros

No hay parámetros.

Valor devuelto

void: sin valor de retorno.

Comportamiento

  • Llama al administrador ClearMenuHooks. Se eliminan las reglas de selección únicas y persistentes, incluidas AutoMenu y WaitMenu. Este comando no cierra los menús ya abiertos; CloseMenu se utiliza para esto.

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

1. Eliminar todos los ganchos: script directo

Parámetros y flujo de ejecución:

  • La eliminación se aplica a todo el conjunto de enlaces del menú del cliente.
UO.CancelMenu();

2. Restringir acción AutoMenu - función de script

Parámetros y flujo de ejecución:

  • El anzuelo se retira inmediatamente; Los menús futuros coincidentes ya no se seleccionan automáticamente.
return  RunScenario();
 object? RunScenario()
{
    UO.AutoMenu("Choose material", "Iron");
    UO.CancelMenu();
    return null;
}

3. Detener la selección automática y cerrar el menú - clase de script

Parámetros y flujo de ejecución:

  • El primer comando elimina los ganchos; el segundo cancela por separado los menús antiguos abiertos.
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.CancelMenu();
        UO.CloseMenu();
        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.CancelMenu() — UO.CancelMenu()

Parámetros: Sin parámetros.

Resultado: void / Unit.

Durante la llamada:

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

case "cancelmenu": bridge.ClearMenuHooks(); break;

UO.ClearContextMenu

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

Firmas de C#

void UO.ClearContextMenu();

Elimina el modelo de menú contextual local actual.

Parámetros

No hay parámetros.

Valor devuelto

void: sin valor de retorno.

Comportamiento

  • Llama a Dispose en ServerMenus.Context si hay un modelo; Es posible que aparezca un nuevo menú del servidor después de la siguiente solicitud. Este no es CloseMenu.

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

1. Estado claro: guión directo

Parámetros y flujo de ejecución:

  • Elimina el modelo de menú contextual local actual.
UO.ClearContextMenu();

2. Borrar después de la configuración: función de script

Parámetros y flujo de ejecución:

  • Elimine el menú contextual local después de leer la instantánea.
return  RunScenario();
 object? RunScenario()
{
    var entries = UO.GetContextMenu();
    UO.ClearContextMenu();
    return null;
}

3. Volver a purgar: clase de secuencia de comandos

Parámetros y flujo de ejecución:

  • Borrar un conjunto vacío es aceptable y no crea una nueva configuración.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        UO.ClearContextMenu();
        UO.ClearContextMenu();
        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.ClearContextMenu() — UO.ClearContextMenu()

Parámetros: Sin parámetros.

Resultado: void / Unit.

Durante la llamada:

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

case "clearcontextmenu": bridge.ClearContextMenu(); return InjectionValue.Unit;

UO.CloseMenu

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

Firmas de C#

void UO.CloseMenu();

Cancela todos los menús del servidor antiguo activo mediante CancelForYoko.

Parámetros

No hay parámetros.

Valor devuelto

void: sin valor de retorno.

Comportamiento

  • Itera a través de la instantánea ServerMenus y descarta cada modelo. No elimina los enlaces de menú automáticos y no cierra ventanas de interfaz/gump arbitrarias.

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

1. Cancelar menús abiertos - script directo

Parámetros y flujo de ejecución:

  • La cancelación se aplica a los menús antiguos de MenuGump/servidor.
UO.CloseMenu();

2. Quitar ganchos y cancelar menú - función de script

Parámetros y flujo de ejecución:

  • La selección automática y los menús abiertos se manejan mediante comandos separados.
return  RunScenario();
 object? RunScenario()
{
    UO.CancelAllMenuHooks();
    UO.CloseMenu();
    return null;
}

3. Cancelar después de la vista: clase de secuencia de comandos

Parámetros y flujo de ejecución:

  • Se guarda una instantánea de la lista en elementos incluso después de cancelar el menú.
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.GetLastMenuItems();
        UO.Print(Convert.ToString(ArrayLength(items)));
        UO.CloseMenu();
        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.CloseMenu() — UO.CloseMenu()

Parámetros: Sin parámetros.

Resultado: void / Unit.

Durante la llamada:

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

case "closemenu": bridge.CloseMenu(); return InjectionValue.Unit;

UO.ConsoleEntryReply

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

Firmas de C#

void UO.ConsoleEntryReply(object? text);

Responde con texto al mensaje del servidor activo a través de MessageManager.SendServerPromptResponse.

Parámetros

  • text: el valor que se convertirá en una cadena. Se envía una cadena vacía como respuesta vacía.

Valor devuelto

void: sin valor de retorno.

Comportamiento

  • Ambos equipos se dirigen a ReplyServerPrompt. El tipo de paquete ASCII/Unicode se selecciona según el estado del mensaje del servidor guardado; El nombre del comando no fuerza una codificación separada. Si no hay ningún mensaje activo, el administrador no envía una respuesta.

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

1. Respuesta al mensaje: guión directo

Parámetros y flujo de ejecución:

  • El envío se refiere a la solicitud de entrada del servidor actual.
UO.ConsoleEntryReply("reply");

2. Respuesta vacía: función de script

Parámetros y flujo de ejecución:

  • El texto vacío se envía al administrador como respuesta vacía.
return  RunScenario();
 object? RunScenario()
{
    UO.ConsoleEntryReply("");
    return null;
}

3. Respuesta de variable - clase de script

Parámetros y flujo de ejecución:

  • El nombre de la variable no afecta el formato de solicitud del servidor seleccionado.
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 reply = "New item name";
        UO.ConsoleEntryReply(reply);
        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.ConsoleEntryReply(text) — UO.ConsoleEntryReply(Any)

Parámetros: text (Any)

Resultado: void / Unit.

Durante la llamada:

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

case "consoleentryreply":

                case "consoleentryunicodereply": bridge.ReplyServerPrompt(Text(0)); return InjectionValue.Unit;

UO.ConsoleEntryUnicodeReply

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

Firmas de C#

void UO.ConsoleEntryUnicodeReply(object? text);

Responde con texto al mensaje del servidor activo a través de MessageManager.SendServerPromptResponse.

Parámetros

  • text: el valor que se convertirá en una cadena. Se envía una cadena vacía como respuesta vacía.

Valor devuelto

void: sin valor de retorno.

Comportamiento

  • Ambos equipos se dirigen a ReplyServerPrompt. El tipo de paquete ASCII/Unicode se selecciona según el estado del mensaje del servidor guardado; El nombre del comando no fuerza una codificación separada. Si no hay ningún mensaje activo, el administrador no envía una respuesta.

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

1. Respuesta al mensaje: guión directo

Parámetros y flujo de ejecución:

  • El envío se refiere a la solicitud de entrada del servidor actual.
UO.ConsoleEntryUnicodeReply("reply");

2. Respuesta vacía: función de script

Parámetros y flujo de ejecución:

  • El texto vacío se envía al administrador como respuesta vacía.
return  RunScenario();
 object? RunScenario()
{
    UO.ConsoleEntryUnicodeReply("");
    return null;
}

3. Respuesta de variable - clase de script

Parámetros y flujo de ejecución:

  • El nombre de la variable no afecta el formato de solicitud del servidor seleccionado.
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 reply = "New item name";
        UO.ConsoleEntryUnicodeReply(reply);
        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.ConsoleEntryUnicodeReply(text) — UO.ConsoleEntryUnicodeReply(Any)

Parámetros: text (Any)

Resultado: void / Unit.

Durante la llamada:

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

case "consoleentryreply":

                case "consoleentryunicodereply": bridge.ReplyServerPrompt(Text(0)); return InjectionValue.Unit;

UO.GetContextMenu

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

Firmas de C#

dynamic UO.GetContextMenu();

Lee las cadenas de elementos del modelo de menú contextual actual.

Parámetros

No hay parámetros.

Valor devuelto

Matriz de cadenas de ServerMenus.Context.GetYokoItems(); si no hay modelo, una matriz vacía.

Comportamiento

  • No envía RequestContextMenu y no espera una respuesta del servidor. Para obtener un nuevo menú, primero solicítalo por separado y espera a que aparezca el modelo. ClearContextMenu elimina el modelo después de leerlo.

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

1. Leer menú actual - guión directo

Parámetros y flujo de ejecución:

  • Se lee el modelo existente.
var entries = UO.GetContextMenu();
for (int i = (int)(0); i <= ArrayLength(entries)-1; i += (int)(1))
{
    UO.Print(entries[i]);
}

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

2. Solicitar y leer más tarde: función de secuencia de comandos

Parámetros y flujo de ejecución:

  • 500 ms: pausa de ejemplo, no garantiza una respuesta del servidor; una matriz vacía es aceptable.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    UO.RequestContextMenu(UO.Self());
    await Delay(500);
    var entries = UO.GetContextMenu();
    UO.Print(Convert.ToString(ArrayLength(entries)));
    return null;
}

int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));

3. Instantánea antes de la limpieza: clase de secuencia de comandos

Parámetros y flujo de ejecución:

  • La matriz guardada no desaparece después de borrar el modelo de menú.
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 entries = UO.GetContextMenu();
        UO.ClearContextMenu();
        UO.Print(Convert.ToString(ArrayLength(entries)));
        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.GetContextMenu() — UO.GetContextMenu()

Parámetros: Sin parámetros.

Resultado: dynamic / Any.

Durante la llamada:

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

case "getcontextmenu": return StringArray(bridge.GetContextMenu());

UO.GetLastMenuItems

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

Firmas de C#

dynamic UO.GetLastMenuItems();

Lee los elementos del menú del servidor antiguo ya abierto.

Parámetros

No hay parámetros.

Valor devuelto

Conjunto de cuerdas. Líneas de nombre/descripción del artículo GetYokoItems. La falta de un menú adecuado da como resultado una matriz vacía.

Comportamiento

  • Se selecciona el último menú de fotos ServerMenus. El comando no abre el menú, no coloca un gancho y no selecciona un elemento. Este no es un menú contextual ni un servidor normal.
  • El orden corresponde a los puntos del modelo. La lista es una instantánea; Los cambios de menú posteriores no actualizan la matriz guardada.

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

1. Mostrar todos los elementos: guión directo

Parámetros y flujo de ejecución:

  • Una matriz vacía es segura para bucles.
var items = UO.GetLastMenuItems();
for (int i = (int)(0); i <= ArrayLength(items)-1; i += (int)(1))
{
    UO.Print(items[i]);
}

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

2. El primer punto es la función del script.

Parámetros y flujo de ejecución:

  • El índice 0 se lee sólo después de comprobar el tamaño.
return  RunScenario();
 object? RunScenario()
{
    var items = UO.GetLastMenuItems();
    if (Truth(ArrayLength(items) > 0))
    {
        UO.Print(items[0]);
    }

    return null;
}

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

3. Guardar instantánea antes de cerrar: clase de secuencia de comandos

Parámetros y flujo de ejecución:

  • La matriz permanece disponible después de cancelar el menú del servidor.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var items = UO.GetLastMenuItems();
        UO.CloseMenu();
        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.GetLastMenuItems() — UO.GetLastMenuItems()

Parámetros: Sin parámetros.

Resultado: dynamic / Any.

Durante la llamada:

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

case "getlastmenuitems": return StringArray(bridge.GetLastMenuItems());

UO.GetMenuItems

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

Firmas de C#

dynamic UO.GetMenuItems(object? caption);

Lee los elementos del menú del servidor antiguo ya abierto.

Parámetros

  • caption — Subcadena del título del menú del servidor antiguo; buscar OrdinalIgnoreCase. Una línea vacía coincide con cualquier encabezado.

Valor devuelto

Conjunto de cuerdas. Líneas de nombre/descripción del artículo GetYokoItems. La falta de un menú adecuado da como resultado una matriz vacía.

Comportamiento

  • Se selecciona el último menú no eliminado con la subcadena de título coincidente. El comando no abre el menú, no coloca un gancho y no selecciona un elemento. Este no es un menú contextual ni un servidor normal.
  • El orden corresponde a los puntos del modelo. La lista es una instantánea; Los cambios de menú posteriores no actualizan la matriz guardada.

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

1. Mostrar todos los elementos: guión directo

Parámetros y flujo de ejecución:

  • Una matriz vacía es segura para bucles.
var items = UO.GetMenuItems("");
for (int i = (int)(0); i <= ArrayLength(items)-1; i += (int)(1))
{
    UO.Print(items[i]);
}

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

2. El primer punto es la función del script.

Parámetros y flujo de ejecución:

  • El índice 0 se lee sólo después de comprobar el tamaño.
return  RunScenario();
 object? RunScenario()
{
    var items = UO.GetMenuItems("");
    if (Truth(ArrayLength(items) > 0))
    {
        UO.Print(items[0]);
    }

    return null;
}

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

3. Guardar instantánea antes de cerrar: clase de secuencia de comandos

Parámetros y flujo de ejecución:

  • La matriz permanece disponible después de cancelar el menú del servidor.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var items = UO.GetMenuItems("");
        UO.CloseMenu();
        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.GetMenuItems(caption) — UO.GetMenuItems(Any)

Parámetros: caption (Any)

Resultado: dynamic / Any.

Durante la llamada:

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

case "getmenuitems": return StringArray(bridge.GetMenuItems(Text(0), false));

UO.GetMenuItemsEx

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

Firmas de C#

dynamic UO.GetMenuItemsEx(object? caption);

Lee los elementos del menú del servidor antiguo ya abierto.

Parámetros

  • caption — Subcadena del título del menú del servidor antiguo; buscar OrdinalIgnoreCase. Una línea vacía coincide con cualquier encabezado.

Valor devuelto

Conjunto de cuerdas. Cadenas graphicHex|hueHex|índice|nombre, por ejemplo 0x0001|0x0000|1|elección. La falta de un menú adecuado da como resultado una matriz vacía.

Comportamiento

  • Se selecciona el último menú no eliminado con la subcadena de título coincidente. El comando no abre el menú, no coloca un gancho y no selecciona un elemento. Este no es un menú contextual ni un servidor normal.
  • El orden corresponde a los puntos del modelo. La lista es una instantánea; Los cambios de menú posteriores no actualizan la matriz guardada.

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

1. Mostrar todos los elementos: guión directo

Parámetros y flujo de ejecución:

  • Una matriz vacía es segura para bucles.
var items = UO.GetMenuItemsEx("");
for (int i = (int)(0); i <= ArrayLength(items)-1; i += (int)(1))
{
    UO.Print(items[i]);
}

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

2. El primer punto es la función del script.

Parámetros y flujo de ejecución:

  • El índice 0 se lee sólo después de comprobar el tamaño.
return  RunScenario();
 object? RunScenario()
{
    var items = UO.GetMenuItemsEx("");
    if (Truth(ArrayLength(items) > 0))
    {
        UO.Print(items[0]);
    }

    return null;
}

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

3. Guardar instantánea antes de cerrar: clase de secuencia de comandos

Parámetros y flujo de ejecución:

  • La matriz permanece disponible después de cancelar el menú del servidor.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var items = UO.GetMenuItemsEx("");
        UO.CloseMenu();
        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.GetMenuItemsEx(caption) — UO.GetMenuItemsEx(Any)

Parámetros: caption (Any)

Resultado: dynamic / Any.

Durante la llamada:

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

case "getmenuitemsex": return StringArray(bridge.GetMenuItems(Text(0), true));

UO.MenuHookPresent

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

Firmas de C#

dynamic UO.MenuHookPresent();

Lee la presencia de ganchos de menú registrados.

Parámetros

No hay parámetros.

Valor devuelto

Bandera numérica int: 1 - _manager.HasMenuHooks, 0 - sin ganchos. Es posible que aún falte el menú en sí.

Comportamiento

  • Lee la presencia de ganchos de menú registrados. No espera un menú, no comprueba el servidor y no consume un gancho.
  • Lee el estado local actual. No hay paquete, objetivo o actualización automática; las lecturas individuales pueden ver diferentes estados.

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

1. Llamada directa - guión directo

Parámetros y flujo de ejecución:

  • Lee la presencia de ganchos de menú registrados.
UO.Print(UO.MenuHookPresent());

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

Parámetros y flujo de ejecución:

  • Lee la presencia de ganchos de menú registrados. No espera un menú, no comprueba el servidor y no consume un gancho.
return  RunScenario();
 object? RunScenario()
{
    UO.WaitMenu("Craft", "Tools");
    UO.Print(UO.MenuHookPresent());
    return null;
}

3. Función auxiliar completa: clase de script

Parámetros y flujo de ejecución:

  • Lee el estado local actual. No hay paquete, objetivo o actualización automática; las lecturas individuales pueden ver diferentes estados.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

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

Implementación del comando

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

UO.MenuHookPresent() — UO.MenuHookPresent()

Parámetros: Sin parámetros.

Resultado: dynamic / Any.

Durante la llamada:

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

case "menuhookpresent": return new InjectionValue(bridge.MenuHookPresent());

UO.MenuPresent

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

Firmas de C#

dynamic UO.MenuPresent();

MenuPresent llama directamente a WaitingMenu.

Parámetros

No hay parámetros.

Valor devuelto

Bandera numérica int: 1 - hay un menú de servidor, 0 - no.

Comportamiento

  • MenuPresent llama directamente a WaitingMenu. No marca GetGumpsCount, menús contextuales ni ganchos registrados.
  • Lee el estado local actual. No hay paquete, objetivo o actualización automática; las lecturas individuales pueden ver diferentes estados.

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

1. Llamada directa - guión directo

Parámetros y flujo de ejecución:

  • MenuPresent llama directamente a WaitingMenu.
UO.Print(UO.MenuPresent());

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

Parámetros y flujo de ejecución:

  • MenuPresent llama directamente a WaitingMenu. No marca GetGumpsCount, menús contextuales ni ganchos registrados.
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.MenuPresent()))
    {
        UO.Print(UO.GetLastMenuItems());
    }

    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:

  • Lee el estado local actual. No hay paquete, objetivo o actualización automática; las lecturas individuales pueden ver diferentes estados.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

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

Implementación del comando

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

UO.MenuPresent() — UO.MenuPresent()

Parámetros: Sin parámetros.

Resultado: dynamic / Any.

Durante la llamada:

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

case "menupresent": return new InjectionValue(bridge.MenuPresent());

UO.RequestContextMenu

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

Firmas de C#

void UO.RequestContextMenu(object? objID);

Solicita el menú contextual del objeto.

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

  • Llamadas de puente GameActions.OpenPopupMenu. La respuesta se guarda por separado y se lee GetContextMenu; El comando no selecciona la barra de menú.
  • Bridge envía la solicitud en la transmisión del juego. Se aplican las reglas del servidor; No hay espera de confirmación incorporada.

Scripts independientes de C#

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

Ejemplo sencillo

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

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

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

1. Llamada directa - guión directo

Parámetros y flujo de ejecución:

  • Solicita el menú contextual del objeto.
var id = UO.GetSerial("lasttarget");
if (Truth(UO.Exists(id)))
{
    UO.RequestContextMenu(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:

  • Llamadas de puente GameActions.OpenPopupMenu. La respuesta se guarda por separado y se lee GetContextMenu; El comando no selecciona la barra de menú.
return  RunScenario();
 object? RunScenario()
{
    var id = UO.GetSerial("self");
    if (Truth(UO.Exists(id)))
    {
        UO.RequestContextMenu(id);
    }

    return null;
}

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

3. Función auxiliar completa: clase de script

Parámetros y flujo de ejecución:

  • Bridge envía la solicitud en la transmisión del juego. Se aplican las reglas del servidor; No hay espera de confirmación incorporada.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

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

    void ApplyToLoaded(dynamic id)
    {
        if (Truth(UO.Exists(id)))
        {
            UO.RequestContextMenu(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.RequestContextMenu(objID) — UO.RequestContextMenu(Any)

Parámetros: objID (Any)

Resultado: void / Unit.

Durante la llamada:

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

case "requestcontextmenu": bridge.RequestContextMenu(Arg(0)); return InjectionValue.Unit;

UO.SetContextMenuHook

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

Firmas de C#

void UO.SetContextMenuHook(object? menuID, object? entryNumber);

Registra una selección única de un elemento del menú contextual.

Parámetros

  • menuID — Serie del objeto de menú, reducida a uint; 0 se adapta a cualquier serial. Esto no es un servidor gump ID.
  • entryNumber — Índice de punto cero; un valor negativo desactiva el enlace de contexto pendiente. 0..GetArrayLength(UO.GetContextMenu())-1.

Valor devuelto

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

Comportamiento

  • Bridge pasa datos a _manager.SetContextMenuHook, donde se almacena _contextMenuSerial/_contextMenuEntry. El controlador ProcessMenuHooks espera un menú contextual coincidente existente.
  • Si SelectYokoItem tiene éxito, los campos se borran a 0/-1. Este configurador no solicita el menú: use RequestContextMenu solo. La llamada en sí no bloquea ni confirma la acció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.SetContextMenuHook");
UO.SetContextMenuHook(0, 0);

1. Llamada directa - guión directo

Parámetros y flujo de ejecución:

  • Registra una selección única de un elemento del menú contextual.
UO.SetContextMenuHook(0, 0);

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

Parámetros y flujo de ejecución:

  • Bridge pasa datos a _manager.SetContextMenuHook, donde se almacena _contextMenuSerial/_contextMenuEntry. El controlador ProcessMenuHooks espera un menú contextual coincidente existente.
return  RunScenario();
 object? RunScenario()
{
    var id = UO.GetSerial("lasttarget");
    UO.SetContextMenuHook(UO.Hex2Int(id), 0);
    UO.RequestContextMenu(id);
    return null;
}

3. Función auxiliar completa: clase de script

Parámetros y flujo de ejecución:

  • Si SelectYokoItem tiene éxito, los campos se borran a 0/-1. Este configurador no solicita el menú: use RequestContextMenu solo. La llamada en sí no bloquea ni confirma la acció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.SetContextMenuHook(0, -1);
        UO.Print(UO.GetContextMenu());
        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.SetContextMenuHook(menuID, entryNumber) — UO.SetContextMenuHook(Any,Any)

Parámetros: menuID (Any), entryNumber (Any)

Resultado: void / Unit.

Durante la llamada:

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

case "setcontextmenuhook": bridge.SetContextMenuHook(Arg(0), Arg(1)); return InjectionValue.Unit;

UO.WaitMenu

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

Firmas de C#

void UO.WaitMenu(object? menuCaption, object? elementCaption);
void UO.WaitMenu(object? prompt1, object? choice1, object? prompt2, object? choice2);
void UO.WaitMenu(object? prompt1, object? choice1, object? prompt2, object? choice2, object? prompt3, object? choice3);

Registra hasta tres ganchos de menú de un solo uso.

Parámetros

  • menuCaption / prompt1 / prompt2 / prompt3: cadena de plantilla de título del menú del servidor. Los pares se pasan en orden encabezado, elemento.
  • menuCaption: cadena de plantilla de título del menú del servidor. Los pares se pasan en orden encabezado, elemento.
  • prompt1: cadena de plantilla de título del menú del servidor. Los pares se pasan en orden encabezado, elemento.
  • prompt2: cadena de plantilla de título del menú del servidor. Los pares se pasan en orden encabezado, elemento.
  • prompt3: cadena de plantilla de título del menú del servidor. Los pares se pasan en orden encabezado, elemento.
  • elementCaption / choice1 / choice2 / choice3 — Línea para seleccionar un elemento para el encabezado correspondiente. No el botón de goma normal ID.
  • elementCaption — Línea para seleccionar un elemento para el encabezado correspondiente. No el botón de goma normal ID.
  • choice1 — Línea para seleccionar un elemento para el encabezado correspondiente. No el botón de goma normal ID.
  • choice2 — Línea para seleccionar un elemento para el encabezado correspondiente. No el botón de goma normal ID.
  • choice3 — Línea para seleccionar un elemento para el encabezado correspondiente. No el botón de goma normal ID.

Valor devuelto

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

Comportamiento

  • Cada par se pasa a _manager.AddMenuHook(mensaje, elección, false). Los formularios registrados son argumentos 2/4/6. false indica gancho desechable; AutoMenu/dos argumentos VendorMenu usa un gancho constante.
  • No bloquea el script hasta que aparece el menú. El gerente consume el gancho cuando el menú es adecuado; el resultado de la ejecución por parte del servidor no se devuelve. Para un menú use WaitingMenu, para ganchos - MenuHookPresent.
  • Para formularios de menú/opción, el administrador selecciona el primer menú cuyo título contiene mensajes, sin distinguir entre mayúsculas y minúsculas; SessionMenu selecciona el primer elemento cuyo nombre contiene opciones, y tampoco distingue entre mayúsculas y minúsculas. El texto en blanco es adecuado para cualquier persona; El texto numérico es un fragmento del nombre, no un índice. Una selección exitosa envía una respuesta y cierra el menú local. Un enlace único se elimina sólo después de una selección exitosa; queda un gancho permanente.

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.WaitMenu");
UO.WaitMenu("Craft", "Tools");

1. Llamada directa - guión directo

Parámetros y flujo de ejecución:

  • Registra hasta tres ganchos de menú de un solo uso.
UO.WaitMenu("Craft", "Tools");

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

Parámetros y flujo de ejecución:

  • Cada par se pasa a _manager.AddMenuHook(mensaje, elección, false). Los formularios registrados son argumentos 2/4/6. false indica gancho desechable; AutoMenu/dos argumentos VendorMenu usa un gancho constante.
return  RunScenario();
 object? RunScenario()
{
    UO.WaitMenu("Craft", "Tools", "Tools", "Shovel");
    return null;
}

3. Función auxiliar completa: clase de script

Parámetros y flujo de ejecución:

  • No bloquea el script hasta que aparece el menú. El gerente consume el gancho cuando el menú es adecuado; el resultado de la ejecución por parte del servidor no se devuelve. Para un menú use WaitingMenu, para ganchos - MenuHookPresent.
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.WaitMenu("Craft", "Tools", "Tools", "Shovel", "Amount", "One");
        UO.Print(UO.MenuHookPresent());
        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.WaitMenu(menuCaption, elementCaption) — UO.WaitMenu(Any,Any)

Parámetros: menuCaption (Any/String), elementCaption (Any/String)

Resultado: void / Unit.

Durante la llamada:

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

case "waitmenu": bridge.WaitMenu(arguments.Select(value => value.ToString()).ToArray()); return InjectionValue.Unit;

UO.WaitMenu(menuCaption, elementCaption) — UO.WaitMenu(String,String)

Parámetros: menuCaption (Any/String), elementCaption (Any/String)

Resultado: void / Unit.

Durante la llamada:

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

public void WaitMenu(string prompt, string choice)

            => bridge.WaitMenu(prompt, choice);

UO.WaitMenu(prompt1, choice1, prompt2, choice2) — UO.WaitMenu(String,String,String,String)

Parámetros: prompt1 (String), choice1 (String), prompt2 (String), choice2 (String)

Resultado: void / Unit.

Durante la llamada:

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

public void WaitMenu(string prompt1, string choice1, string prompt2, string choice2)

            => bridge.WaitMenu(prompt1, choice1, prompt2, choice2);

UO.WaitMenu(prompt1, choice1, prompt2, choice2, prompt3, choice3) — UO.WaitMenu(String,String,String,String,String,String)

Parámetros: prompt1 (String), choice1 (String), prompt2 (String), choice2 (String), prompt3 (String), choice3 (String)

Resultado: void / Unit.

Durante la llamada:

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

public void WaitMenu(string prompt1, string choice1, string prompt2, string choice2, string prompt3, string choice3)

            => bridge.WaitMenu(prompt1, choice1, prompt2, choice2, prompt3, choice3);

UO.WaitTextEntry

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

Firmas de C#

void UO.WaitTextEntry(object? value);

Intenta escribir texto en la entrada de texto del gump actual.

Parámetros

  • value — Texto a través de ToString; guardado como transmitido.

Valor devuelto

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

Comportamiento

  • ExecuteClientApiCompatibility llama a SetGumpValue(-1, "entrada de texto", -1, Texto(0)). key=-1 no es un índice nulo normal: la escritura solo es posible si un campo existente se asigna a dicho ID en la implementación de gump.
  • No espera a un futuro gump, no abre un mensaje y no registra un gancho. Si no hay ningún campo coincidente, SetGumpValue muestra un mensaje. Para un campo conocido, utilice SetGump con un ID/index explícito.

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

1. Llamada directa - guión directo

Parámetros y flujo de ejecución:

  • Intenta escribir texto en la entrada de texto del gump actual.
UO.WaitTextEntry("Example");

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

Parámetros y flujo de ejecución:

  • ExecuteClientApiCompatibility llama a SetGumpValue(-1, "entrada de texto", -1, Texto(0)). key=-1 no es un índice nulo normal: la escritura solo es posible si un campo existente se asigna a dicho ID en la implementación de gump.
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.GetGumpsCount() > 0))
    {
        UO.WaitTextEntry("Example");
    }

    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:

  • No espera a un futuro gump, no abre un mensaje y no registra un gancho. Si no hay ningún campo coincidente, SetGumpValue muestra un mensaje. Para un campo conocido, utilice SetGump con un ID/index explícito.
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.WaitTextEntry("Example");
        UO.Print("Check the target field in the current gump");
        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.WaitTextEntry(value) — UO.WaitTextEntry(Any)

Parámetros: value (Any)

Resultado: void / Unit.

Durante la llamada:

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

case "waittextentry": bridge.SetGumpValue(-1, "textentry", -1, Text(0)); return InjectionValue.Unit;

UO.WaitingForMenu

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

Firmas de C#

int UO.WaitingForMenu(object? delay);
int UO.WaitingForMenu(object? delay, object? menuCount);
int UO.WaitingForMenu(object? delay, object? menuCount, object? blockMenu);
int UO.WaitingForMenu(object? delay, object? menuCount, object? blockMenu, object? menuName);
int UO.WaitingForMenu(object? delayValue, object? menuCountValue, object? blockMenuValue, object? menuNameValue, object? skillOrSerial);

El número requerido de apariciones del menú del servidor es limitado.

Parámetros

  • delay: tiempo de espera int en milisegundos, negativo se convierte en 0. Incluso con 0 se realiza una verificación.
  • delayValue: tiempo de espera int en milisegundos, negativo se convierte en 0. Incluso con 0 se realiza una verificación.
  • menuCount — Número opcional de apariciones, mínimo 1; el valor predeterminado es 1. Este no es el número de elementos del menú.
  • menuCountValue — Número opcional de apariciones, mínimo 1; el valor predeterminado es 1. Este no es el número de elementos del menú.
  • blockMenu: un número opcional distinto de cero cierra el menú cuando se cumple la condición; 0 lo deja.
  • blockMenuValue: un número opcional distinto de cero cierra el menú cuando se cumple la condición; 0 lo deja.
  • menuName - Título exacto opcional, distingue entre mayúsculas y minúsculas; vacío lo permite cualquiera.
  • menuNameValue - Título exacto opcional, distingue entre mayúsculas y minúsculas; vacío lo permite cualquiera.
  • skillOrSerial - Último argumento opcional: TriggerWaitAction puede usar la habilidad nombrada o el objeto llamado serial primero. De forma predeterminada, 0 no es ninguna acción.

Valor devuelto

Bandera numérica int: 1 - se notan al menos menuCount apariciones diferentes y la última tiene el título deseado; 0 - tiempo de espera. El menú existente se puede contar inmediatamente.

Comportamiento

  • Después de TriggerWaitAction se lee GetLastMenuIdentity; la nueva identidad aumenta el contador. Una identidad vacía restablece la memoria de la anterior, por lo que el mismo menú se puede volver a contar después de cerrar/reabrir.
  • El límite de conteo se verifica solo con una nueva identidad. Si y coincide, blockMenu cierra el menú. Entre controles UO.Wait a 25 ms; el encabezado lo verifica el ordinal, no la subcadena.

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

1. Llamada directa - guión directo

Parámetros y flujo de ejecución:

  • El número requerido de apariciones del menú del servidor es limitado.
UO.Print(UO.WaitingForMenu(3000));

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

Parámetros y flujo de ejecución:

  • Después de TriggerWaitAction se lee GetLastMenuIdentity; la nueva identidad aumenta el contador. Una identidad vacía restablece la memoria de la anterior, por lo que el mismo menú se puede volver a contar después de cerrar/reabrir.
return  RunScenario();
 object? RunScenario()
{
    UO.Print(UO.WaitingForMenu(3000, 1, 1, "Craft"));
    return null;
}

3. Función auxiliar completa: clase de script

Parámetros y flujo de ejecución:

  • El límite de conteo se verifica solo con una nueva identidad. Si y coincide, blockMenu cierra el menú. Entre controles UO.Wait a 25 ms; el encabezado lo verifica el ordinal, no la subcadena.
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.WaitingForMenu(3000, 1, 0, "Craft", "lasttarget");
        if (Truth(found))
        {
            UO.Print(UO.GetLastMenuItems());
        }

        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.WaitingForMenu(delay) — UO.WaitingForMenu(Any)

Parámetros: delay (Any)

Resultado: int / Integer.

Durante la llamada:

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

public int WaitingForMenu(InjectionValue delay) => WaitingForMenu(delay, InjectionValue.Zero, InjectionValue.Zero, new InjectionValue(string.Empty), InjectionValue.Zero);

UO.WaitingForMenu(delay, menuCount) — UO.WaitingForMenu(Any,Any)

Parámetros: delay (Any), menuCount (Any)

Resultado: int / Integer.

Durante la llamada:

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

public int WaitingForMenu(InjectionValue delay, InjectionValue menuCount) => WaitingForMenu(delay, menuCount, InjectionValue.Zero, new InjectionValue(string.Empty), InjectionValue.Zero);

UO.WaitingForMenu(delay, menuCount, blockMenu) — UO.WaitingForMenu(Any,Any,Any)

Parámetros: delay (Any), menuCount (Any), blockMenu (Any)

Resultado: int / Integer.

Durante la llamada:

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

public int WaitingForMenu(InjectionValue delay, InjectionValue menuCount, InjectionValue blockMenu) => WaitingForMenu(delay, menuCount, blockMenu, new InjectionValue(string.Empty), InjectionValue.Zero);

UO.WaitingForMenu(delay, menuCount, blockMenu, menuName) — UO.WaitingForMenu(Any,Any,Any,Any)

Parámetros: delay (Any), menuCount (Any), blockMenu (Any), menuName (Any)

Resultado: int / Integer.

Durante la llamada:

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

public int WaitingForMenu(InjectionValue delay, InjectionValue menuCount, InjectionValue blockMenu, InjectionValue menuName) => WaitingForMenu(delay, menuCount, blockMenu, menuName, InjectionValue.Zero);

UO.WaitingForMenu(delayValue, menuCountValue, blockMenuValue, menuNameValue, skillOrSerial) — UO.WaitingForMenu(Any,Any,Any,Any,Any)

Parámetros: delayValue (Any), menuCountValue (Any), blockMenuValue (Any), menuNameValue (Any), skillOrSerial (Any)

Resultado: int / Integer.

Durante la llamada:

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

public int WaitingForMenu(InjectionValue delayValue, InjectionValue menuCountValue, InjectionValue blockMenuValue, InjectionValue menuNameValue, InjectionValue skillOrSerial)

        {

            int delay = Math.Max(0, NumberConversions.ToInt(delayValue));

            int requiredMenuCount = Math.Max(1, NumberConversions.ToInt(menuCountValue));

            bool blockMenu = NumberConversions.ToInt(blockMenuValue) != 0;

            string expectedName = menuNameValue.ToString() ?? string.Empty;

            DateTime deadline = timeSource.Now.AddMilliseconds(delay);

            string previousIdentity = string.Empty;

            int observedMenuCount = 0;



            TriggerWaitAction(skillOrSerial);



            do

            {

                string identity = bridge.GetLastMenuIdentity() ?? string.Empty;

                if (identity.Length == 0)

                {

                    // Reset between server menus so an identical menu opened again

                    // still counts as a new appearance.

                    previousIdentity = string.Empty;

                }

                else if (!identity.Equals(previousIdentity, StringComparison.Ordinal))

                {

                    previousIdentity = identity;

                    observedMenuCount++;

                    string caption = bridge.GetLastMenuCaption() ?? string.Empty;

                    bool nameMatches = expectedName.Length == 0

                        || caption.Equals(expectedName, StringComparison.Ordinal);

                    if (observedMenuCount >= requiredMenuCount && nameMatches)

                    {

                        if (blockMenu)

                            bridge.CloseMenu();

                        return 1;

                    }

                }



                if (timeSource.Now >= deadline)

                    break;

                bridge.Wait(Math.Min(25, Math.Max(1, delay)));

            }

            while (true);



            return 0;

        }

UO.WaitingMenu

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

Firmas de C#

int UO.WaitingMenu();

Lee _world.ServerMenus.Snapshot().Length != 0.

Parámetros

No hay parámetros.

Valor devuelto

Bandera numérica int: 1 - ServerMenus tiene al menos un menú, 0 - no. Esto es tener un menú, no esperar un guión.

Comportamiento

  • Lee _world.ServerMenus.Snapshot().Length != 0. Los menús del servidor heredado están separados de los menús contextuales y del servidor normal.
  • Lee el estado local actual. No hay paquete, objetivo o actualización automática; las lecturas individuales pueden ver diferentes estados.

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

1. Llamada directa - guión directo

Parámetros y flujo de ejecución:

  • Lee _world.ServerMenus.Snapshot().Length != 0.
UO.Print(UO.WaitingMenu());

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

Parámetros y flujo de ejecución:

  • Lee _world.ServerMenus.Snapshot().Length != 0. Los menús del servidor heredado están separados de los menús contextuales y del servidor normal.
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.WaitingMenu()))
    {
        UO.Print(UO.GetLastMenuItems());
    }

    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:

  • Lee el estado local actual. No hay paquete, objetivo o actualización automática; las lecturas individuales pueden ver diferentes estados.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

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

Implementación del comando

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

UO.WaitingMenu() — UO.WaitingMenu()

Parámetros: Sin parámetros.

Resultado: int / Integer.

Durante la llamada:

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

public int WaitingMenu() => bridge.WaitingMenu();
⚠️ **GitHub.com Fallback** ⚠️