Правила форума Гаранты форума
Размещение рекламы AMX-X компилятор

Здравствуйте, гость Вход | Регистрация

Наши новости:

14-дек
24-апр
10-апр
11-апр

Меню/команда/игроки

Статус пользователя deadshot
сообщение 10.4.2013, 9:56
Сообщение #1
Стаж: 16 лет

Сообщений: 21
Благодарностей: 1
Полезность: 37

Есть такой кусок кода:
Код
public change_lvl_cmd(id, level, cid){
    static players[MAX_PLAYERS], pnum, arg[32], args[63], tmp, amount, i, j, name[32]
    if (!cmd_access(id, level, cid, 4))
        return PLUGIN_HANDLED
    read_argv(1, arg, 31)
    pnum = 0
    if(equali(arg, "@all")){
        for(i=1; i<=g_max_players; i++)
            if(is_user_connected(i))
                players[pnum++] = i
    }else if(equali(arg, "@t")){
        for(i=1; i<=g_max_players; i++)
            if(is_user_connected(i) && get_user_team(i)==1)
                players[pnum++] = i
    }else if(equali(arg, "@ct")){
        for(i=1; i<=g_max_players; i++)
            if(is_user_connected(i) && get_user_team(i)==2)
                players[pnum++] = i
    }else if(arg[0] == '#'){
        tmp = str_to_num(arg[1])
        for(i=1; i<=g_max_players; i++)
            if(is_user_connected(i) && get_user_userid(i)==tmp)
                players[pnum++] = i
    }else{
        for(i=1; i<=g_max_players; i++)
            if(is_user_connected(i)){
                get_user_name(i, name, 31)
                if(equal(name, arg)){
                    pnum = 0
                    players[pnum++] = i
                    break
                }else if(contain(name, arg)>-1){
                    players[pnum++] = i
                }
            }
    }

    if(pnum<=0){
        client_print(id, print_console, "[RPG mod]Ошибка: цель не найдена")
        return PLUGIN_HANDLED
    }

    read_argv(3, arg, 31)
    amount = str_to_num(arg)
    
    read_argv(2, arg, 1)
    if(amount<0 || (amount==0 && arg[0]!='=')){
        client_print(id, print_console, "[RPG mod]Ошибка: недопустимое количество.")
        return PLUGIN_HANDLED
    }

    switch(arg[0]){
        case '+': { //increases level and credits
            for(i=0; i<pnum; i++){
                g_p_level[players[i]] += amount
                g_p_xp[players[i]] = as_sum_fn(g_p_level[players[i]], XP_START, XP_INC)
                g_p_credits[players[i]] += amount * CREDITS_PER_LVL
                g_p_progress[players[i]] = 0
                set_default_lvl_upg(players[i])//will not set lvl if player has lvl > default lvl
                data_save(players[i])
            }
        }
        case '-': { //reduces level and credits
            for(i=0; i<pnum; i++){
                g_p_level[players[i]] -= amount
                g_p_xp[players[i]] = as_sum_fn(g_p_level[players[i]], XP_START, XP_INC)
                g_p_credits[players[i]] -= amount * CREDITS_PER_LVL
                g_p_progress[players[i]] = 0
                if(g_p_credits[players[i]] < 0)
                    force_drop_upgrades(players[i])
                if(g_p_credits[players[i]] < 0)
                    g_p_level[players[i]] = 0  //will reset to default in set_default_lvl_upg
                set_default_lvl_upg(players[i])//will not set lvl if player has lvl > default lvl
                data_save(players[i])
            }
        }
        case '=': { //set level and credits (all previous upg sell penalty is gone)
            for(i=0; i<pnum; i++){
                g_p_level[players[i]] = amount
                g_p_xp[players[i]] = as_sum_fn(g_p_level[players[i]], XP_START, XP_INC)
                g_p_credits[players[i]] = amount * CREDITS_PER_LVL
                g_p_progress[players[i]] = 0
                for(j=0; j<MAX_UPGS; j++)
                    g_p_credits[players[i]] -= as_sum_fn(g_p_upg[players[i]][j], g_upg_sp[j], g_upg_ip[j])
                if(g_p_credits[players[i]] < 0)
                    force_drop_upgrades(players[i])
                set_default_lvl_upg(players[i])//will not set lvl if player has lvl > default lvl
                data_save(players[i])
            }
        }
        default: {
            client_print(id, print_console, "[RPG mod]Error: invalid 2nd argument - must be - or + or = ")
            return PLUGIN_HANDLED
        }
    }
    
    read_args(args, 63)
    get_user_name(id, name, 31)
    log_amx("ADMIN %s used cmd [ amx_rpg_lvl %s ], affected players: %d", name, args, pnum)
    client_print(0, print_chat, "ADMIN %s: [level change: %s], affected players: %d", name, args, pnum)
    return PLUGIN_HANDLED


У меня стоит рпг мод
Код отвечает за то, что админ может изменять левел командой amx_rpg_lvl nick -/+/= число
Может ли кто либо помочь сделать меню, чтобы при написании blablamenu появлялось меню со списком игроков на сервере и при выборе игрока выполнялась команда amx_rpg_lvl выбранныйигрок минус (определить сколько уровней у игрока и отнять их всех). Неудобно обнулять левел нечестным игрокам через команду в консоли, часто ники длинные. Буду благодарен. Мне кажется, даже не нужно будет задействовать верхний код, просто при выборе игрока выполняется данная команда с определеннием уровня и отнятием его
user2 = amx_rpg_lvl user2 - (число = определение уровня игрока)
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Safety1st
сообщение 10.4.2013, 10:28
Сообщение #2
Стаж: 14 лет
Город: Moscow

Сообщений: 7228
Благодарностей: 8071
Полезность: 196

Для указания игрока используйте userid, это всего несколько цифр с решёткой. Для сброса level'а - задание его 0 или 1 (откуда там начинается нумерация). Тогда правка плагина вообще не потребуется. Меню хорошо, если это частая операция.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя deadshot
сообщение 10.4.2013, 10:51
Сообщение #3
Стаж: 16 лет

Сообщений: 21
Благодарностей: 1
Полезность: 37

Цитата(Safety1st @ 10.4.2013, 11:28) *
Для указания игрока используйте userid, это всего несколько цифр с решёткой. Для сброса level'а - задание его 0 или 1 (откуда там начинается нумерация). Тогда правка плагина вообще не потребуется. Меню хорошо, если это частая операция.

Блин, точно, можно просто = 0 делать, тогда команда гет юзер левелс не нужна, спасибо, туплю.
На форуме видел как делать старое меню с игроками, что это значит? Тогда идет упрощение
При выборе игрока user1 в меню идет команда amx_rpg_lvl user1 = 0
Может кто-то сможет запилить такое меню?


Вроде понял как, если что, ещё отпишусь здесь.

Отредактировал: deadshot, - 10.4.2013, 11:09
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя deadshot
сообщение 10.4.2013, 11:17
Сообщение #4
Стаж: 16 лет

Сообщений: 21
Благодарностей: 1
Полезность: 37

Код
public MenuKickPlayer(pId, iKey)
{
    switch (iKey)
    {
        case 8: ShowMenuKickPlayer(pId, ++g_iPlayerMenuPage[pId]);
        case 9: ShowMenuKickPlayer(pId, --g_iPlayerMenuPage[pId]);
        default:
        {
            new pPlayer = g_apPlayerMenuPlayers[pId][(g_iPlayerMenuPage[pId] * 8) + iKey];
            if (!is_user_connected(pPlayer))
            {
                client_print(pId, print_chat, "%L", pId, "#KickPlayerMenu_TargetDisconnected");
                ShowMenuKickPlayer(pId, g_iPlayerMenuPage[pId]);
                
                return PLUGIN_HANDLED;
            }
            
            server_cmd("amx_rpg_lvl #%d = 0", get_user_userid(pPlayer));
            server_exec();
        }
    }
    
    return PLUGIN_HANDLED;
}



Сделал на основе кикменю. Только не знаю, правильно ли, и как указать название меню и команду вызова меню определить

Отредактировал: deadshot, - 10.4.2013, 11:18
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Safety1st
сообщение 10.4.2013, 11:36
Сообщение #5
Стаж: 14 лет
Город: Moscow

Сообщений: 7228
Благодарностей: 8071
Полезность: 196

LOL
Раз есть исходни плагина - меню встраивайте прямо туда, без вызова серверных команд.
И мои рекомендации относились к набору консльных команд админом, а не в плагине xD
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя deadshot
сообщение 10.4.2013, 17:15
Сообщение #6
Стаж: 16 лет

Сообщений: 21
Благодарностей: 1
Полезность: 37

Неудобно каждый раз искать ник, копировать его, читер уже уйдет, меню со списком игроков нужно все-таки.

Отредактировал: deadshot, - 10.4.2013, 17:17
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
  Тема закрытаНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: