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

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

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

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

Прошу помощи в доработке меню.

, Почему то команда открытия меня работает при ADMIN_CVAR
Статус пользователя Sonic2790
сообщение 10.8.2012, 18:41
Сообщение #1


Стаж: 18 лет

Сообщений: 236
Благодарностей: 38
Полезность: 142

Здравствуйте. Суть проблемы такова, что команда amx_destroymenu работает для всех игроков, хотя должна работать только для ADMIN_CVAR (флаг g).
Так же в cmdaccess.ini прописана команда на флаг g

Код
"amx_destroymenu"         "g"; destroy_menu.amxx


Помогите разобраться и доделать.

destroy_menu.sma
Код
    #include <amxmodx>
    #include <fun>
    #include <colorchat>
    
    #define PLUGIN_NAME        "amx_destroy MENU"
    #define PLUGIN_VERSION    "2.0"
    #define PLUGIN_AUTHOR    "Sonic2790"

    public plugin_init()
    {
    register_plugin( PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR )
    register_clcmd("amx_destroymenu", "Destroy_Menu", ADMIN_CVAR, "- display destroy menu.")
    }

    public Destroy_Menu(id)
    {
        new i_Menu = menu_create("\rСломать CS:", "menu_handler")
        new s_Players[32], i_Num, i_Player
        new s_Name[32], s_Player[10]
        get_players(s_Players, i_Num)
        for (new i; i < i_Num; i++)
        {
            i_Player = s_Players[i]

            get_user_name(i_Player, s_Name, charsmax(s_Name))
            num_to_str(i_Player, s_Player, charsmax(s_Player))

            menu_additem(i_Menu, s_Name, s_Player, 0)

        }

        menu_display(id, i_Menu, 0)
    }
    
    public menu_handler(id, menu, item)
    {
    if (item == MENU_EXIT)
    {
        menu_destroy(menu)
        return PLUGIN_HANDLED
    }

    new s_Data[10], s_Name[64], i_Access, i_Callback, usrId
    menu_item_getinfo(menu, item, i_Access, s_Data, charsmax(s_Data), s_Name, charsmax(s_Name), i_Callback)
    
    usrId = str_to_num(s_Data)
    
    if(is_user_alive(usrId))
    {
        client_cmd(id, "amx_destroy %s", s_Name)
        menu_destroy(menu)
    }
    else
    {
        ColorChat(id, RED, "[Сервер] ^x01Игрок ^x03%s мертв! ^x01Сломать CS можно ^x03только живому ^x01игроку!", s_Name)                
    }
    return PLUGIN_HANDLED
    }


Отредактировал: Sonic2790, - 10.8.2012, 18:44
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя STR@TEG
сообщение 10.8.2012, 18:49
Сообщение #2
Стаж: 16 лет

Сообщений: 4186
Благодарностей: 1763
Полезность: 837

В самом начале функции Destroy_Menu(id) нужно добавить:
Код
if (!cmd_access(id, level, cid))
    return PLUGIN_HANDLED;
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя Sonic2790
сообщение 11.8.2012, 0:17
Сообщение #3


Стаж: 18 лет

Сообщений: 236
Благодарностей: 38
Полезность: 142

STR@TEG, Думал в этом направлении. Даже мануал нашел, прочитал и нифига не понял =( На этот раз проблема в следующем. С начало была ошибка такая:
Код
destroy_menu.sma(19) : error 017: undefined symbol "cmd_access"

Потом понял что забыл #include <amxmisc>, добавил его, и вылезли другие ошибки:
Код
destroy_menu.sma(19) : error 017: undefined symbol "level"
destroy_menu.sma(39) : warning 209: function "Destroy_Menu" should return a value
destroy_menu.sma(40) : error 054: unmatched closing brace


Далее добавил public Destroy_Menu(id, level, cid) - и опять новые ошибки(

Я так понял, что не хватает данных level и cid, но откуда их взять не понял.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Sonic2790
сообщение 11.8.2012, 1:03
Сообщение #4


Стаж: 18 лет

Сообщений: 236
Благодарностей: 38
Полезность: 142

Ура, заработало. Подглядел в других плагинах как реализованна данная функция, и сделал вот так:

Код
    public Destroy_Menu(id, iLvl, iCid)
    {
    if(!cmd_access(id, iLvl, iCid, 1))
    return PLUGIN_HANDLED;


Но появилось 2 новых вопроса:
Код
destroy_menu.sma(39) : warning 209: functio
n "Destroy_Menu" should return a value

Как с этим бороться? Уже вроде все Return пересмотрел. Оно должно возвращать какое то значение, но к сожалению гугл не знает что должно возвращаться.

И второй вопрос. Давно мучает проблема с этим - Неизвестная команда: amx_destroymenu, хотя меню открыват. Как быть?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя STR@TEG
сообщение 11.8.2012, 2:01
Сообщение #5
Стаж: 16 лет

Сообщений: 4186
Благодарностей: 1763
Полезность: 837

Цитата(Sonic2790 @ 11.8.2012, 3:03) *
Код
destroy_menu.sma(39) : warning 209: functio
n "Destroy_Menu" should return a value

Как с этим бороться? Уже вроде все Return пересмотрел. Оно должно возвращать какое то значение, но к сожалению гугл не знает что должно возвращаться.

И второй вопрос. Давно мучает проблема с этим - Неизвестная команда: amx_destroymenu, хотя меню открыват. Как быть?
После
Код
menu_display(id, i_Menu, 0)
допиши
Код
return PLUGIN_HANDLED;
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
  Тема закрытаНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: