Myślę, że łatwiej będzie Ci to zrozumieć:
Najpierw tworzymy jakby uchwyt i nazwę naszego menu:
new menu = menu_create("Lista Graczy:", "menu_handler");
Następnie przystępujemy to pętli, ty użyłeś do tego jeszcze funkcji get_players, ale ja osobiście jej nie lubię
, bo zawiera błędy itd.
Dlatego użyjemy samej pętli 
Najpierw zmienne
new maxplayers = get_maxplayers(); // ile osob moze byc maksymalnie na serwerze
new name[32] // zmienna przechowujaca nick gracza
new data[6] // to bedzie ID gracza, ktore wysylamy w info :)
Teraz pętla:
for(new i=1; i<=maxplayers; i++) // pętla od 1 DO MAKSYMALNEJ LICZBY GRACZY
{
if(!is_user_connected(i))
continue; // jezeli gracz o danym ID (i) nie jest polaczony to go pomijamy uzwajać "continue"
if(is_user_hltv(i) || is_user_bot(i))
continue; // jezeli dane ID to HLTV/BOT - pomijamy!
num_to_str(i, data, 5);
get_user_name(id, name, 31); // pobieramy nick
menu_additem(menu, name, data); // dodajemy do menu gracza.
}
Zakończenie menu, czyli wyświetlelnie:
menu_display(id, menu, item);
Teraz funkcja menu_handler 
public menu_handler(id, menu, item)
{
if(item == MENU_EXIT) // jezeli gracz wyszedl z MENU - nic nie robimy :)
return;
if(!is_user_connected(id)) // jezeli gracz, ktory wybieral cos z menu nie jest polaczony to konczymy interakcje :D
return;
// zmienne sa wymagane ;(
new name[32]; // ta zmienna bedzie przechowywala nick gracza, a inaczej tekst wybranej czesci menu.
new callback; // to jest callback na razie Ci nie potrzebny nie zwracaj uwagi
new data[6]; // to będzie ID gracza ;)
new dostep; // to Ci nie potrzebne;
menu_item_getinfo(menu, item, dostep, data, 5, name, 31, callback); // pobieramy dane wybranego/ej itemu/opcji z menu!
new id2 = str_to_num(data);
if(!is_user_connected(id2))
return;
// id2 - to id gracza wybranego z menu :)
// name - to jego nick.
client_print(id, print_chat, "Wybrales gracza: %s o ID: %d", name, id2); :)
}
Proszę.
Nie rozumiesz, pisz - wytłumaczymy w tym temacie.