Функция переключателя в меню

Сообщения
16
Реакции
11
Всем привет, ребят. Хочу спросить про одну функцию... В меню есть переключатель "информер: вкл, выкл". Все работает как надо. Вся фигня в том, что после перезахода, функция не запоминает выбор игрока. То есть, если я нажму выключить - информер выключится, статус в меню поменяется... Но после перезахода, в меню опять отображается, что информер включен. Вопрос: как сделать, чтобы статус в меню запоминался? И еще, есть ли в меню какие-нибудь косяки?

C++:
#include <amxmodx>
#include <amxmisc>

#define PLUGIN "Stats Menu"
#define VERSION "1.0"
#define AUTHOR "Kryukoff"

#define MAX_CHAR 512

new stats_keys = MENU_KEY_1|MENU_KEY_2|MENU_KEY_3|MENU_KEY_4|MENU_KEY_5|MENU_KEY_6|MENU_KEY_7|MENU_KEY_0
new bool:info[33]

public plugin_init()
{
    register_plugin(PLUGIN, VERSION, AUTHOR)
   
    register_menu("stats_menu", stats_keys, "stats_func")
   
    register_clcmd("menu", "stats_menu");
    register_clcmd("say /menu", "stats_menu");
    register_clcmd("say_team /menu", "stats_menu");
}

public stats_menu(id)
{
    static menu[MAX_CHAR], iLen
    iLen = 0
   
    iLen = formatex(menu[iLen], charsmax(menu) - iLen, "\rМеню статистики^n^n")
   
    iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\y[1] \wТоп лучших^n")
    iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\y[2] \wТоп играющих^n")
    iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\y[3] \wСтатистика за карту^n")
    iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\y[4] \wИстория игр^n")
    iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\y[5] \wОбщая статистика^n")
    iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\y[6] \wСтатистика игроков^n^n")
    iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\y[7] \wИнформер: %s^n^n", info[id] ? "\rВыкл." : "\yВкл.")
   
    iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\y[0] \wВыход")
   
    show_menu(id, stats_keys, menu, -1, "stats_menu")
    return PLUGIN_HANDLED
}

public stats_func(id, key)
{
    switch(key)
    {
        case 0: client_cmd(id, "say /top10")
        case 1: client_cmd(id, "say /hot")
        case 2: client_cmd(id, "say /statsme")
        case 3: client_cmd(id, "say /history")
        case 4: client_cmd(id, "say /rankstats")
        case 5: client_cmd(id, "say /stats")
        case 6:
        {
            switch(info[id])
            {
                case true:
                {
                    client_cmd(id, "say /aenable")
                    info[id] = false
                    stats_menu(id)
                }
                case false:
                {
                    client_cmd(id, "say /aenable")
                    info[id]=true
                    stats_menu(id)
                }
            }
        }
    }
}
 
Сообщения
1,419
Реакции
2,509
Помог
59 раз(а)
Касательно основой темы, использовать системы сохраняющие данные, например nvault, adv_vault, fvault, mysql и что-либо другое.

Насчет самого кода, зачем static если потом iLen = 0? Раз меню не динамичное, формировать можно 1 раз, например в plugin_init().
В последнем пункте можно убрать iLen +=
iLen = formatex(menu[iLen], charsmax(menu) - iLen, "\rМеню статистики^n^n")
Тут не нужно - iLen
client_cmd
Протекторы блочат команды, поэтому лучше использовать amxclient_cmd, но нужна консольная команда не чат.
Код:
            switch(info[id])
            {
                case true:
                {
                    client_cmd(id, "say /aenable")
                    info[id] = false
                    stats_menu(id)
                }
                case false:
                {
                    client_cmd(id, "say /aenable")
                    info[id]=true
                    stats_menu(id)
                }
            }
Для булевых лучше if/else конструкцию. Но тут она вообще не нужна:
Код:
info[id] = !info[id];
client_cmd(id, "say /aenable");
stats_menu(id);
new bool:info[33]
->
new bool:info[MAX_PLAYERS+1]
Вместо своего MAX_CHAR использовать MAX_MENU_LENGTH
 
Сообщения
16
Реакции
11
w0w, спасибо за помощь, буду разбираться.
 

Пользователи, просматривающие эту тему

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу