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