Page 1 of 1

Player list

Posted: 2011 Sep 08 17:36
by morka
Kaip atvaizduot serveryje esanciu zaideju sarasa menu formoje?

main menu

1. player
2. zero
3. jack
.....

Paspaudi 2 ir permeta varda i kintamaji.

Re: Player list

Posted: 2011 Sep 08 18:17
by hleV

Code: Select all

//    new iMenu = menu_create("Pavadinimas", "OnMenu");     new iPlayers[32], iCount;    get_players(iPlayers, iCount); // Galima flag'u dadet del HLTV, botu     for (new i, szName[32]; i < iCount; i++)    {        get_user_name(iPlayers[i], szName, charsmax(szName));        menu_additem(iMenu, szName);    }// public OnMenu(iClient, iMenu, iItem){    if (iItem == MENU_EXIT)    {        menu_destroy(iMenu);         return;    }     new iAccess, szName[32], iCallback;    menu_item_getinfo(iMenu, iItem, iAccess, szName, 0, szName, charsmax(szName), iCallback);     // szName[] dabar turi pasirinkto zaidejo varda. Galima gauti ID su get_user_index(szName)     menu_destroy(iMenu);}

Re: Player list

Posted: 2011 Sep 08 21:25
by morka
Padariau taip ir nelabai veikia, prisijungia 2 zaidejai paspaudi ir nieko nevyksta. Su 1 zaideju viskas veikia.

Code: Select all

public player_list_menu(id){    new item[99]    formatex(item, charsmax(item), "%L", LANG_PLAYER, "TITLE_PLAYER_LIST");    new iMenu = menu_create(item, "player_list_menu_handler")        new iPlayers[32], iCount;    get_players(iPlayers, iCount); // Galima flag'u dadet del HLTV, botu        for (new i, szName[32]; i < iCount; i++)    {        get_user_name(iPlayers[i], szName, charsmax(szName));        menu_additem(iMenu, szName);        menu_setprop(iMenu, MPROP_EXIT, MEXIT_ALL)        menu_display(id, iMenu, 0)    }} public player_list_menu_handler(id, iMenu, item){    if (item == MENU_EXIT)    {        menu_destroy(iMenu);        return;    }    new iAccess, szName[32], iCallback;    menu_item_getinfo(iMenu, item, iAccess, szName, 0, szName, charsmax(szName), iCallback);    copy(gName[id], charsmax(gName), szName);    transfer_menu(id)    menu_destroy(iMenu);}

Re: Player list

Posted: 2011 Sep 09 12:21
by hleV
Tuos menu_setprop() ir menu_display() dek už for() ciklo, o ne jame.

Re: Player list

Posted: 2011 Sep 09 14:13
by newb
Galima dar taip padaryt

Code: Select all

#include <amxmodx> new Players[32] public plugin_init() {    register_clcmd("say a", "Create_Menu")} public Create_Menu(id) {    new num, Menu = menu_create("\rPlayers:", "MainMenu_Handler")        get_players(Players, num)        for (new i, Name[33]; i < num; i++) {        get_user_name(Players[i], Name, charsmax(Name))                menu_additem(Menu, Name)    }        menu_setprop(Menu, MPROP_EXIT, MEXIT_ALL)    menu_display(id, Menu)      }  public MainMenu_Handler(id, Menu, item) {        if (item == MENU_EXIT) {        menu_destroy(Menu)        return    }        new Name[33]; get_user_name(Players[item], Name, charsmax(Name))    client_print(id, 3, "name %s", Name)        menu_destroy(Menu)}
Nors nezinau ar tai optimaliau ^_^

Re: Player list

Posted: 2011 Sep 16 12:28
by hleV
Man visai patinka newb'o variantas. Vienmačio masyvo pagalba nereikia naudot nei menu_item_getinfo(), nei get_user_index(), nei num_to_str(). Manojo varianto pliusas, kad jei žaidėjas atsijungė (arba pasikeitė vardą :|), get_user_index() jo neras. Išsaugant žaidėjo ID, žaidėją rastų, bet nebūtų aišku ar tai tas pats žaidėjas (gal senas atsijungė ir prisijungė naujas, gavęs tą patį ID).