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

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

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

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

Помогите повесить флаг доступа на команду;)

Статус пользователя DoNotFollowM
сообщение 10.5.2016, 10:01
Сообщение #1
Стаж: 10 лет

Сообщений: 108
Благодарностей: 18
Полезность: 135

Вот менюшка, как повесить на команду amxmodmenu флаг ADMIN_MENU. Я чет попытался но не получилось. Воть так как то чтоб флаг был.
register_clcmd("amxmodmenu", "cmdMenu", ADMIN_MENU, "- displays menus")
не через if)

Cкрытый текст
Код:

#include <amxmodx>
#include <amxmisc>
#include <WPMGPrintChatColor>

enum _:EMenu
{
EName[64] = 1,
ECommand[64],
EFlag[64]
}

new g_MenuNum
new g_MenuName[64]
new g_MenuItems[99][EMenu]

/*===========================================
Технические функции
===========================================*/
/*********************************************************************
Инициализация плагина
*********************************************************************/
public plugin_init()
{
register_clcmd("amxmodmenu", "ServerMenu")
}

/*********************************************************************
Обработка конфига
*********************************************************************/
public plugin_cfg()
{
new szDir[81]
get_configsdir(szDir, charsmax( szDir ))

new szFile[128]
formatex(szFile, charsmax( szFile ), "%s/servermenu.ini", szDir)

if(!file_exists( szFile ))
{
set_fail_state("no file servermenu.ini")
}

new iLine
new iFile = fopen(szFile, "rt")
while(!feof( iFile ))
{
new szText[256]
fgets(iFile, szText, charsmax( szText ))

trim( szText )

iLine += 1

if(!strlen( szText ) || szText[0] == ';' || (szText[0] == '/' && szText[1] == '/' ) || iLine == 1)
continue

if(szText[0] == '[')
{
new szName[64]
formatex(szName, charsmax( szName ), "%s", szText)

replace_all(szName, charsmax( szName ), "[", "")
replace_all(szName, charsmax( szName ), "]", "")

g_MenuName = szName
continue
}

if(!strlen( g_MenuName ))
continue

new szTextP[4][64]
parse(szText,
szTextP[1], 64,
szTextP[2], 64,
szTextP[3], 64
)

g_MenuNum += 1

g_MenuItems[g_MenuNum][EName] = szTextP[1]
g_MenuItems[g_MenuNum][ECommand] = szTextP[2]
g_MenuItems[g_MenuNum][EFlag] = szTextP[3]
}
fclose( iFile )
}

/*===========================================
public функции
===========================================*/
/*********************************************************************
Серверное меню
*********************************************************************/
public ServerMenu(id)
{
if(!g_MenuNum)
{
PrintChatColor(id, PRINT_COLOR_RED, "!y[ !gМеню !y] !yИзвините, но меню не !tсконфигурировано!")
return PLUGIN_HANDLED
}

new iMenu = menu_create(g_MenuName, "ServerMenu_handler")
for(new i = 1; i <= g_MenuNum; i++)
{
new iStr[10]
num_to_str(i, iStr, charsmax( iStr ))

if(GetFlag(id, g_MenuItems[i][EFlag]))
{
menu_additem(iMenu, g_MenuItems[i][EName], iStr, 0)
}else{
menu_additem(iMenu, g_MenuItems[i][EName], iStr, ADMIN_ADMIN)
}
}

menu_setprop(iMenu, MPROP_EXIT, MEXIT_ALL )
menu_setprop(iMenu, MPROP_NEXTNAME, "Далее")
menu_setprop(iMenu, MPROP_BACKNAME, "Назад")
menu_setprop(iMenu, MPROP_EXITNAME, "Выход")

menu_display(id, iMenu, 0)
return PLUGIN_HANDLED
}

public ServerMenu_handler(id, iMenu, iItem)
{
if(iItem == MENU_EXIT)
{
menu_destroy( iMenu )
return PLUGIN_HANDLED
}

new szData[6], szName[64], iAccess,iCallback
menu_item_getinfo(iMenu, iItem, iAccess, szData, charsmax( szData ), szName, charsmax( szName ), iCallback)

new iKey = str_to_num( szData )
client_cmd(id, "%s", g_MenuItems[iKey ][ECommand])

menu_destroy( iMenu )
return PLUGIN_HANDLED
}

/*===========================================
Стоки
===========================================*/
/*********************************************************************
Проверка доступа к пункту
*********************************************************************/
stock GetFlag(id, szFlag[])
{
if(!strlen( szFlag ))
return true

new szFlags[32]
get_flags(get_user_flags(id), szFlags, charsmax( szFlags ))

if(containi(szFlags, szFlag) != -1)
return true

return false
}


Отредактировал: DoNotFollowM, - 10.5.2016, 10:01
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя Dukkhaz0r
сообщение 10.5.2016, 12:28
Сообщение #2


Стаж: 12 лет

Сообщений: 343
Благодарностей: 294
Полезность: 812

DoNotFollowM, http://amxxmodx.ru/index.php?newsid=15 - прочитайте комментарии. Если не проверку if в функции, то проверку access все равно придется сделать.


Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя DoNotFollowM
сообщение 20.5.2016, 9:23
Сообщение #3
Стаж: 10 лет

Сообщений: 108
Благодарностей: 18
Полезность: 135

Dukkhaz0r, вы можете готовое решение написать если не сложно, как я только не пытался у меня не чего не получается,. И через if(get_user_flags(id) & ADMIN_MENU) пытался и access то ошибки то не какого результата. Из других плагинов вытаскивал проверку, видимо вставляю не туда
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Legenda
сообщение 20.5.2016, 10:41
Сообщение #4


Иконка группы

Стаж: 16 лет

Сообщений: 3619
Благодарностей: 1706
Полезность: 1010

Меценат Меценат

Код:
public plugin_init() 
{
register_clcmd("amxmodmenu", "ServerMenu", ADMIN_MENU, "- displays menu")
}

public ServerMenu(id, level, cid)
{
if (!cmd_access(id, level, cid, 0))
return PLUGIN_HANDLED

..
..
..
..
..
}
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя DoNotFollowM
сообщение 20.5.2016, 10:59
Сообщение #5
Стаж: 10 лет

Сообщений: 108
Благодарностей: 18
Полезность: 135

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