[Duda] Pasar variable
#1

Tengo una duda respecto a los dialogos, aquн un ejemplo

Hago un dialogo tipo LIST, cuando escribo el comando /ir me saldrнan 2 items, perfecto.. pero como podrнa hacer que al seleccionar uno de estos tenga un listitem diferente a 0..1..2..3,? como podrнa hacer que el item 2 tenga el valor (por ejemplo 959) en ves de 1?

No se si me explique bien xD, Saludos!!
Reply
#2

Para eso estб OnDialogResponse...

El primero en la lista equivale al case 0: el segundo en la lista al case 1:

Entonces si tu dialog se llama LUGARES_TP y le asignas el ID 1 y quieres que el primero en la lista te lleve a X ubicaciуn haces esto.

pawn Код:
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    switch(dialogid)
    {
        case 1:
        {
            if(!response)return SendClientMessage(playerid, 0xFF0000FF, "Cancelado");
            switch(listitem)
            {
                case 0://item 1
                {
                    SetPlayerPos....
                }
                case 1://item 2
                {
                    SetPlayerPos....
                }
            }
        }
       
    }
    return 0;
}
Reply
#3

Necesitas tres variables, las cuales he nombrado en inglйs por conveniencia y por que es el idioma universal del cуdigo:
pawn Код:
new ItemsList[MAX_PLAYERS][500]; // la lista de objetos por jugador (500 objetos en la lista del diбlogo)
new ItemsListID[MAX_PLAYERS][500]; // las ID de cada objeto de la lista (por ejemplo, 2 = 500 serнa listitem 2 tiene un valor de 500)
new Options[MAX_PLAYERS]; // la opciуn seleccionada en OnDialogResponse
Luego, al mostrar un diбlogo debes configurar estas variables dependiendo de tus necesidades:
pawn Код:
new count; // necesitamos una variable para llevar la cuenta (ID) del iterador
for(new i = 0; i != 50; i++)
{
    // dentro de estб loop harбs format a el diбlogo, agregando 1 linea ъnicamente por iteraciуn.
   
    ItemsList[playerid][count] = count; // el valor de la cuenta fue agregado a la lista
    ItemsListID[playerid][count] = i; // la ID (i) es asignada a la array de los ID de la lista, esta ID puede ser cualquier valor.
    count++; // se incrementa la cuenta
}
Y al recibir el dialogo (OnDialogResponse) debes detectar cual ha sido la ID seleccionada y almacenarla en una variable para su posterior uso.
pawn Код:
for( new i = 0; i != 50; i++ )
{
    if( ItemsListID[playerid][i] != -1 ) // evitar iteraciones inutiles, revisar si la ID del for() ha sido configurada
    {
        if( listitem == ItemsList[playerid][i] ) // si el "listitem" es igual a una ID que ha sido pasada a esta variable anteriormente...
        {
            Options[playerid] = ItemsListID[playerid][i]; // la opciуn es la ID de dicha lista
            break;
        }
    }
}
printf("Usted ha seleccionado: %d.", Options[playerid]);
Estoy seguro de que quieres un ejemplo un poco mбs funcional, asн que aqui tienes un cуdigo por el cual te puedas guiar:
pawn Код:
new ItemsList[MAX_PLAYERS][500];
new ItemsListID[MAX_PLAYERS][500];
new Options[MAX_PLAYERS];
#define DIALOG_JUGADORES        9995
pawn Код:
new string_dialog[512]; // cadena del diбlogo que debe ser formateada (1 linea = 1 iteraciуn)
CMD:jugadores(playerid, params[]) // lista de jugadores por diбlogo, con interacciуn por ID
{
    new name[24], count; // variables para almacenar el nombre y la cuenta
    foreach(Player, i)
    {
        GetPlayerName(i, name, 24);
        format(string_dialog, sizeof string_dialog, "%s\n%s (%d)", string_dialog, name, i);
        // aqui se formatea el diбlogo, agregando al final una nueva linea y el nombre, creando asн una sucesiуn de cadenas
       
        ItemsList[playerid][count] = count;
        ItemsListID[playerid][count] = i;
        count++;
    }
    /* ya que el diбlogo ha sido formateado, mostrarlo FUERA DEL FOREACH!
    para evitar que se muestre muchas veces
    (esto es algo obvio y redudante pero no estб de mбs remarcarlo).*/

   
    ShowPlayerDialog(playerid, DIALOG_JUGADORES, DIALOG_STYLE_LIST, "Lista de jugadores", string_dialog, "Seleccionar", "Cerrar");
    return 1;
}
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    if(dialogid == DIALOG_JUGADORES)
    {
        for( new i = 0; i != 50; i++ )
        {
            if( ItemsListID[playerid][i] != -1 )
            {
                if( listitem == ItemsList[playerid][i] )
                {
                    Options[playerid] = ItemsListID[playerid][i];
                    break;
                }
            }
        }
        new message[64], name[24], id;
        id = Options[playerid]; // la id del jugador seleccionado es Options[playerid]
        GetPlayerName(id, name, 24); // almacenar su nombre para ser mostrado

        format(message, sizeof message, "Usted ha seleccionado al jugador: %s (ID %d).", name, id);
        SendClientMessage(playerid, 0xFFFFFFFF, message);
    }
    return 1;
}
Es todo, espero que puedas resolver el resto tu mismo
Reply
#4

@Goncho28 Gracias por la intencion de ayudarme, pero lo que estaba buscando resolver era lo que comento @admantis, gracias viejo, en algo asн estaba pensando ya que no encontraba maneras de hacerlo, una vez mas muchas gracias!
Reply


Forum Jump:


Users browsing this thread: 2 Guest(s)