Skip to content

Diálogos

Los diálogos son un componente común en el desarrollo de SA:MP. Infernus proporciona una API orientada a objetos con soporte asíncrono para una experiencia más elegante.

Ya no necesita gestionar manualmente los ID de los diálogos — se generan automáticamente.

La retrollamada tradicional PlayerEvent.OnDialogResponse sigue disponible, pero no se recomienda.

Ejemplo

Con este enfoque, puede manejar diálogos de forma elegante y mantener la lógica relacionada en un solo lugar, a diferencia de la complejidad del desarrollo nativo tradicional.

Verificació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, ingrese su contraseña",
    button1: "ok",
  });

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

  // Las instancias de diálogo existentes se pueden reutilizar — solo modifique sus propiedades.
  // Hay otros setters además de info.
  dialog.info = "Por favor, ingrese su contraseña nuevamente";

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

  if (password !== againPassword) {
    player.sendClientMessage(
      "#f00",
      "Las contraseñas ingresadas no coinciden. ¡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", "Especifique qué diálogo de jugador desea cerrar.");
    return next();
  }

  // La entrada del jugador siempre es texto — conviértalo a número.
  const closePlayer = Player.getInstance(+playerId);

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

  return next();
});