W związku z przestarzałym tematem i kodem, który ciągle widzę, że się pojawia:
Spoiler
new players[32], pnum, tempid;
new szName[32], szTempid[10];
get_players(players, pnum);
for(new i; i<pnum; i++)
{
tempid = players[i];
if(!is_user_connected(tempid))
continue;
get_user_name(tempid, szName, charsmax(szName));
num_to_str(tempid, szTempid, charsmax(szTempid));
menu_additem(menu, szName, szTempid);
}
Dodaję na szybko wam snippet, który wygląda ładniej i generalnie nie używa starych metod:
Przekazywanie indeksu gracza AMXX 1.8.3 i niżej:
Spoiler
public myMenu(index)
{
new menuIndex = menu_create("Menu:", "myMenu_handler"),
userName[33],
userIndex[3];
for(new i = 1; i <= 32; i++)
{
if(!is_user_connected(i))
{
continue;
}
get_user_name(i, userName, charsmax(userName));
formatex(userIndex, charsmax(userIndex), "%i", i);
menu_additem(menuIndex, userName, userIndex);
}
menu_display(index, menuIndex);
return PLUGIN_HANDLED;
}
public myMenu_handler(index, menuIndex, item)
{
if(item == MENU_EXIT)
{
menu_destroy(menuIndex);
return PLUGIN_HANDLED;
}
new menuData[2],
blank,
target;
menu_item_getinfo(menuIndex, item, blank, menuData, charsmax(menuData), _, _, blank);
menu_destroy(menuIndex);
target = str_to_num(menuData);
if(!is_user_connected(target))
{
return PLUGIN_HANDLED;
}
return PLUGIN_HANDLED;
}
Przekazywanie indeksu gracza AMXX 1.9 i wyżej:
Spoiler
public myMenu(index)
{
new menuIndex = menu_create("Menu:", "myMenu_handler");
for(new i = 1; i <= 32; i++)
{
if(!is_user_connected(i))
{
continue;
}
menu_additem(menuIndex, fmt("%n", i), fmt("%i", i));
}
menu_display(index, menuIndex);
return PLUGIN_HANDLED;
}
public myMenu_handler(index, menuIndex, item)
{
if(item == MENU_EXIT)
{
menu_destroy(menuIndex);
return PLUGIN_HANDLED;
}
new menuData[2],
target;
menu_item_getinfo(menuIndex, item, _, menuData, charsmax(menuData));
menu_destroy(menuIndex);
target = str_to_num(menuData);
if(!is_user_connected(target))
{
return PLUGIN_HANDLED;
}
return PLUGIN_HANDLED;
}
Opcja jeszcze krótsza:
Spoiler
public myMenu(index)
{
new menuIndex = menu_create("Menu:", "myMenu_handler"), i[1];
for(i[0] = 1; i[0] <= 32; i[0]++)
{
if(!is_user_connected(i[0]))
{
continue;
}
menu_additem(menuIndex, fmt("%n", i), i[0]);
}
menu_display(index, menuIndex);
return PLUGIN_HANDLED;
}
public myMenu_handler(index, menuIndex, item)
{
if(item == MENU_EXIT)
{
menu_destroy(menuIndex);
return PLUGIN_HANDLED;
}
new menuData[1],
target;
menu_item_getinfo(menuIndex, item, _, menuData, charsmax(menuData));
menu_destroy(menuIndex);
target = menuData[0];
if(!is_user_connected(target))
{
return PLUGIN_HANDLED;
}
return PLUGIN_HANDLED;
}
Przekazywanie wielu wartości w menu:
Spoiler
public myMenu(index)
{
new menuIndex = menu_create("Menu:", "myMenu_handler"),
menuData[4];
for(new i = 1; i <= 32; i++)
{
if(!is_user_connected(i))
{
continue;
}
menuData[0] = i;
menuData[1] = cs_get_user_money(i);
menuData[2] = index;
menu_additem(menuIndex, fmt("%n", i), menuData);
}
menu_display(index, menuIndex);
return PLUGIN_HANDLED;
}
public myMenu_handler(index, menuIndex, item)
{
if(item == MENU_EXIT)
{
menu_destroy(menuIndex);
return PLUGIN_HANDLED;
}
new menuData[6],
target;
menu_item_getinfo(menuIndex, item, _, menuData, charsmax(menuData));
menu_destroy(menuIndex);
target = menuData[0];
value = menuData[1];
otherIndex = menuData[2];
if(!is_user_connected(target))
{
return PLUGIN_HANDLED;
}
return PLUGIN_HANDLED;
}
Przekazywanie dwóch stringów:
Spoiler
public myMenu(index)
{
new menuIndex = menu_create("Menu:", "myMenu_handler"),
menuData[64];
for(new i = 1; i <= 32; i++)
{
if(!is_user_connected(i))
{
continue;
}
get_user_name(i, userName, charsmax(userName));
formatex(menuData, charsmax(menuData), "%s#%s", userName, "abcd"); // "aSior abcd"
menu_additem(menuIndex, fmt("%n", i), menuData);
}
menu_display(index, menuIndex);
return PLUGIN_HANDLED;
}
public myMenu_handler(index, menuIndex, item)
{
if(item == MENU_EXIT)
{
menu_destroy(menuIndex);
return PLUGIN_HANDLED;
}
new menuData[64],
userName[33],
additionalText[33];
menu_item_getinfo(menuIndex, item, _, menuData, charsmax(menuData));
menu_destroy(menuIndex);
split(menuData, userName, charsmax(userName), additionalText, charsmax(additionalText), "#");
ColorChat(index, NORMAL, "Wybrales %s %s", userName, additionalText); // "Wybrales aSior abcd"
return PLUGIN_HANDLED;
}
Użytkownik aSiorr edytował ten post 09.08.2019 11:28


Dodatki SourceMod













