Skip to content

Diálogos

El diálogo es una función de uso común en el proceso de desarrollo. Infernus proporciona soporte orientado a objetos y async, para que puedas usarlo de forma más elegante.

Al mismo tiempo, en términos generales, ya no es necesario seguir el id del diálogo de la forma tradicional, y el código se generará aleatoriamente.

El tradicional evento de callback PlayerEvent.OnDialogResponse puede seguir siendo utilizado, pero no es recomendable.

Ejemplo

Con el ejemplo, puede utilizar diálogos de forma elegante y continua para almacenar la lógica relevante en el mismo segmento de código, en lugar de tan complejo como el desarrollo nativo en el pasado.

Comprobación de registro

ts
import { PlayerEvent, Dialog, DialogStylesEnum } from "@infernus/core";

PlayerEvent.onCommandText("registro", async ({ player, next }) => {
  const dialog = new Dialog({
    style: DialogStylesEnum.PASSWORD,
    caption: "Registro",
    info: "Por favor, ingresa la contraseña",
    button1: "ok",
  });

  const { inputText: password } = await dialog.show(player);

  // Puede reutilizar una instancia de diálogo existente, modificar su información y volver a utilizarla más adelante.
  // Hay muchos setter además de info.
  dialog.info = "Por favor, ingresa la contraseña nuevamente";

  const { inputText: againPassword } = await dialog.show(player);

  if (password !== againPassword) {
    player.sendClientMessage(
      "#f00",
      "La contraseña que ha introducido dos veces no es la misma, inténtelo de nuevo."
    );
  }

  return next();
});
ts
import { PlayerEvent, Player, Dialog } from "@infernus/core";

PlayerEvent.onCommandText("cerrarDialogo", ({ player, subcommand, next }) => {
  const [playerId] = subcommand;

  if (!playerId) {
    player.sendClientMessage(
      "#f00",
      "Introduzca el cuadro de diálogo del jugador que desea cerrar"
    );
    return next();
  }

  // Los comandos introducidos por el jugador son todos cadenas, por lo que es necesario convertir el tipo a un tipo numérico.
  const closePlayer = Player.getInstance(+playerId);

  if (!closePlayer) {
    player.sendClientMessage("#f00", "El jugador no está conectado.");
  } else {
    // Método estático de diálogo
    Dialog.close(closePlayer);
    player.sendClientMessage("#ff0", "Has cerrado el diálogo del jugador.");
  }

  return next();
});