Проверенный
Пользователь
- Сообщения
- 500
- Реакции
- 275
- Помог
- 6 раз(а)
По некоторым причинам понадобилось добавить в меню номинации Map Manager пороги онлайна, при которых карта появится в голосовании. Порылся в коде, сделал. Пороги показываются, всё красиво, всё замечательно, но не номинируется карта теперь) К её названию добавляются пороги и соответственно, плагин не находит карту в ini. Я так понял проблему, но не понял, где я накосячил.
Было:
Стало:
Было:
Код:
show_nomination_menu(id, Array:maplist, custom_title[] = "")
{
new text[64];
if(!custom_title[0]) {
formatex(text, charsmax(text), "%L", LANG_PLAYER, "MAPM_MENU_MAP_LIST");
} else {
formatex(text, charsmax(text), "%s", custom_title);
}
new menu = menu_create(text, "mapslist_handler");
new map_info[MapStruct], item_info[48], block_count, size = ArraySize(maplist);
new random_sort = get_num(RANDOM_SORT), Array:array = ArrayCreate(1, 1);
for(new i = 0, index, nom_index; i < size; i++) {
if(random_sort) {
do {
index = random_num(0, size - 1);
} while(in_array(array, index));
ArrayPushCell(array, index);
} else {
index = i;
}
ArrayGetArray(maplist, index, map_info);
nom_index = map_nominated(map_info[MapName]);
block_count = mapm_get_blocked_count(map_info[MapName]);
if(block_count) {
formatex(item_info, charsmax(item_info), "%s[\r%d\d]", map_info[MapName], block_count);
menu_additem(menu, item_info, .callback = g_hCallbackDisabled);
} else if(nom_index != INVALID_MAP_INDEX) {
new nom_info[NomStruct]; ArrayGetArray(g_aNomList, nom_index, nom_info);
if(id == nom_info[NomPlayer]) {
formatex(item_info, charsmax(item_info), "%s[\y*\w]", map_info[MapName]);
menu_additem(menu, item_info);
} else {
formatex(item_info, charsmax(item_info), "%s[\y*\d]", map_info[MapName]);
menu_additem(menu, item_info, .callback = g_hCallbackDisabled);
}
} else {
menu_additem(menu, map_info[MapName]);
}
}
ArrayDestroy(array);
formatex(text, charsmax(text), "%L", id, "MAPM_MENU_BACK");
menu_setprop(menu, MPROP_BACKNAME, text);
formatex(text, charsmax(text), "%L", id, "MAPM_MENU_NEXT");
menu_setprop(menu, MPROP_NEXTNAME, text);
formatex(text, charsmax(text), "%L", id, "MAPM_MENU_EXIT");
menu_setprop(menu, MPROP_EXITNAME, text);
menu_display(id, menu);
}
bool:in_array(Array:array, index)
{
for(new i, size = ArraySize(array); i < size; i++) {
if(ArrayGetCell(array, i) == index) {
return true;
}
}
return false;
}
public mapslist_handler(id, menu, item)
{
if(item == MENU_EXIT) {
menu_destroy(menu);
return PLUGIN_HANDLED;
}
new item_info[8], item_name[MAPNAME_LENGTH + 16], access, callback;
menu_item_getinfo(menu, item, access, item_info, charsmax(item_info), item_name, charsmax(item_name), callback);
trim_bracket(item_name);
new nominated = nominate_map(id, item_name);
if(g_iNomMaps[id] < get_num(MAPS_PER_PLAYER) || get_num(DONT_CLOSE_MENU)) {
if(nominated == NOMINATION_SUCCESS) {
format(item_name, charsmax(item_name), "%s[\y*\w]", item_name);
menu_item_setname(menu, item, item_name);
} else if(nominated == NOMINATION_REMOVED) {
menu_item_setname(menu, item, item_name);
}
menu_display(id, menu, item / 7);
} else {
menu_destroy(menu);
}
return PLUGIN_HANDLED;
}
Код:
show_nomination_menu(id, Array:maplist, custom_title[] = "")
{
new text[64];
if(!custom_title[0]) {
formatex(text, charsmax(text), "%L", LANG_PLAYER, "MAPM_MENU_MAP_LIST");
} else {
formatex(text, charsmax(text), "%s", custom_title);
}
new menu = menu_create(text, "mapslist_handler");
menu_setprop(menu, MPROP_NUMBER_COLOR, "\w");
new map_info[MapStruct], item_info[48], block_count, size = ArraySize(maplist);
new random_sort = get_num(RANDOM_SORT), Array:array = ArrayCreate(1, 1);
for(new i = 0, index, nom_index; i < size; i++) {
if(random_sort) {
do {
index = random_num(0, size - 1);
} while(in_array(array, index));
ArrayPushCell(array, index);
} else {
index = i;
}
ArrayGetArray(maplist, index, map_info);
nom_index = map_nominated(map_info[MapName]);
block_count = mapm_get_blocked_count(map_info[MapName]);
if(block_count) {
formatex(item_info, charsmax(item_info), "%s (%d-%d) [\r%d\d]", map_info[MapName], map_info[MinPlayers], map_info[MaxPlayers], block_count);
menu_additem(menu, item_info, .callback = g_hCallbackDisabled);
} else if(nom_index != INVALID_MAP_INDEX) {
new nom_info[NomStruct]; ArrayGetArray(g_aNomList, nom_index, nom_info);
if(id == nom_info[NomPlayer]) {
formatex(item_info, charsmax(item_info), "%s (%d-%d) [\y*\w]", map_info[MapName], map_info[MinPlayers], map_info[MaxPlayers]);
menu_additem(menu, item_info);
} else {
formatex(item_info, charsmax(item_info), "%s (%d-%d) [\y*\d]", map_info[MapName], map_info[MinPlayers], map_info[MaxPlayers]);
menu_additem(menu, item_info, .callback = g_hCallbackDisabled);
}
} else {
formatex(item_info, charsmax(item_info), "%s (%d-%d)", map_info[MapName], map_info[MinPlayers], map_info[MaxPlayers]);
menu_additem(menu, item_info);
}
}
ArrayDestroy(array);
formatex(text, charsmax(text), "%L", id, "MAPM_MENU_BACK");
menu_setprop(menu, MPROP_BACKNAME, text);
formatex(text, charsmax(text), "%L", id, "MAPM_MENU_NEXT");
menu_setprop(menu, MPROP_NEXTNAME, text);
formatex(text, charsmax(text), "%L", id, "MAPM_MENU_EXIT");
menu_setprop(menu, MPROP_EXITNAME, text);
menu_display(id, menu);
}
bool:in_array(Array:array, index)
{
for(new i, size = ArraySize(array); i < size; i++) {
if(ArrayGetCell(array, i) == index) {
return true;
}
}
return false;
}
public mapslist_handler(id, menu, item)
{
if(item == MENU_EXIT) {
menu_destroy(menu);
return PLUGIN_HANDLED;
}
new item_info[8], item_name[MAPNAME_LENGTH + 16], access, callback;
menu_item_getinfo(menu, item, access, item_info, charsmax(item_info), item_name, charsmax(item_name), callback);
trim_bracket(item_name);
new nominated = nominate_map(id, item_name);
if(g_iNomMaps[id] < get_num(MAPS_PER_PLAYER) || get_num(DONT_CLOSE_MENU)) {
if(nominated == NOMINATION_SUCCESS) {
format(item_name, charsmax(item_name), "%s [\y*\w]", item_name);
menu_item_setname(menu, item, item_name);
} else if(nominated == NOMINATION_REMOVED) {
menu_item_setname(menu, item, item_name);
}
menu_display(id, menu, item / 7);
} else {
menu_destroy(menu);
}
return PLUGIN_HANDLED;
}