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

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

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

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

> Правила форума

Этот раздел, как вы могли заметить по названию, предназначен для решения вопросов по поводу уже существующих модов и плагинов.
Пожалуйста, если у вас проблема с написанием плагина, не путайте этот раздел с разделом по скриптингу.
Для поиска плагинов и модов существует соответствующий раздел.

Название темы должно соответствовать содержанию. Темы с названием типа "Помогите", "Вопрос", "парни подскажите..." - будут удалены.
Все темы, не относящиеся к "Вопросам по модам и плагинам", будут удалены или перемещены в соответствующий раздел.

Правила оформления темы:
1. Помимо заголовка не забудьте верно сформулировать свой вопрос.
2. Выложите исходник (в тег кода + ) или ссылку на плагин который вызывает у вас вопросы.
3. Выложите лог с ошибками (если имеется) под спойлер

Помогите убрать из меню 1 пункт

, Убрать первый тункт
Статус пользователя Kpacava
сообщение 17.6.2015, 20:54
Сообщение #1


Стаж: 14 лет

Сообщений: 464
Благодарностей: 75
Полезность: 161

Всем здрасти...
Помогите убрать из меню функцию "Изменить пароль" и что бы было так:
1. Кикнуть
2. Забанить
3. Сткнуть
4. Команда игрока, ну и т.д
Скрин на всякий случай...

Прикрепленные файлы:
Прикрепленное изображение

Прикрепленные файлы:
Прикрепленный файл  UserManager.rar ( 9,7 килобайт ) Кол-во скачиваний: 23
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя Bloo
сообщение 17.6.2015, 20:57
Сообщение #2


Стаж: 12 лет

Сообщений: 15547
Благодарностей: 6971
Полезность: 1206

Kpacava, только изх меню или вообще функцию?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Kpacava
сообщение 17.6.2015, 20:58
Сообщение #3


Стаж: 14 лет

Сообщений: 464
Благодарностей: 75
Полезность: 161

Цитата(Bloo @ 18.6.2015, 7:57) *
Kpacava, только изх меню или вообще функцию?

Вообще что бы её и духу не было нигде!
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Denger167
сообщение 17.6.2015, 21:21
Сообщение #4


Стаж: 12 лет
Город: Магнитогорск

Сообщений: 175
Благодарностей: 63
Полезность: 54

Цитата(Kpacava @ 17.6.2015, 23:58) *
Вообще что бы её и духу не было нигде!


Проверь

Отредактировал: Denger167, - 17.6.2015, 21:24
Прикрепленные файлы:
Прикрепленный файл  UserManager.sma ( 16,65 килобайт ) Кол-во скачиваний: 3


Имей смелость иметь свое мнение. Имей мудрость скрывать егo.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя Bloo
сообщение 17.6.2015, 21:26
Сообщение #5


Стаж: 12 лет

Сообщений: 15547
Благодарностей: 6971
Полезность: 1206

Если вдруг вариант выше не подойдет то проверь мой, вдруг правильно =)
Код:
#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <WPMGPrintChatColor>

#define PLUGIN "UserManager"
#define VERSION "1.0"
#define AUTHOR "CrAsH"

/*==========================================
Плагины, которые требуется отключить
===========================================*/
new g_PluginsOff[][] =
{
"admin.amxx",
"admin_sql.amxx",
"menufront.amxx"
}

/*==========================================
Информация об структуре AmxModMenu
===========================================*/
enum _:EItems
{
EItemName[64] = 1,
EItemCommand[64],
EItemFlag[64]
}

new g_EItemsNum
new g_EItems[99][EItems]

/*==========================================
Информация о правах игрока
===========================================*/
enum _:EPlayer
{
EPlayerDate[64] = 1,
EPlayerNewPassword[64],

EPlayerDay,
EPlayerSysTime,
EPlayerEditMe

};

new g_EPlayer[33][EPlayer]

/*==========================================
Всякая хрень
===========================================*/
new g_LoadUsers[81]
new g_LoadItems[81]

new g_Cvar[5]

/*==========================================
Инициализация
===========================================*/
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)

//Доступные настройки(Квары)
g_Cvar[1] = register_cvar("um_pw_prefix", "_pw") //В каком префиксе хранится пароль( дефолт )
g_Cvar[2] = register_cvar("um_utc", "+04") //Часовой пояс( Москва/Россия )
g_Cvar[3] = register_cvar("um_menu_showend", "1") //Отображать ли в меню, когда кончается срок?
g_Cvar[4] = register_cvar("um_logs", "1") //Вести логи авторизации?

//Доступные команды
register_clcmd("amxmodmenu", "AmxModMenu")
register_clcmd("amxmenu", "AmxModMenu")
register_clcmd("amx_menu", "AmxModMenu")

register_clcmd("amx_reloadadmins", "ReloadAdmins")

//Ланг файл
register_dictionary("UserManager.txt")
}

/*==========================================
Загрузка и обработка конфигов
===========================================*/
public plugin_cfg()
{
new szError[128]
new iLine

new g_LoadDir[81]
get_configsdir(g_LoadDir, charsmax( g_LoadDir ))

server_cmd("exec %s/amxx.cfg", g_LoadDir)
server_cmd("exec %s/sql.cfg", g_LoadDir)

formatex(g_LoadDir, charsmax( g_LoadDir ), "%s/UserManager", g_LoadDir)

formatex(g_LoadUsers, charsmax( g_LoadUsers), "%s/users.ini", g_LoadDir)
formatex(g_LoadItems, charsmax( g_LoadItems), "%s/amxmodmenu.ini", g_LoadDir)

if(!dir_exists( g_LoadDir ))
{
formatex(szError, charsmax( szError ), "%L", LANG_PLAYER, "UM_CONFIG_NODIR", g_LoadDir)
set_fail_state( szError )
}

if(!file_exists( g_LoadUsers ))
{
formatex(szError, charsmax( szError ), "%L", LANG_PLAYER, "UM_CONFIG_NOFILE", g_LoadUsers)
set_fail_state( szError )
}

if(!file_exists( g_LoadItems ))
{
formatex(szError, charsmax( szError ), "%L", LANG_PLAYER, "UM_CONFIG_NOFILE", g_LoadItems)
set_fail_state( szError )
}

for(new i; i < sizeof g_PluginsOff; i++ )
{
if(find_plugin_byfile( g_PluginsOff[i] ) != INVALID_PLUGIN_ID)
{
formatex(szError, charsmax( szError ), "%L", 0, "UM_ACTIVE_PLUGINOFF", g_PluginsOff[i])
set_fail_state( szError )
}
}

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

trim( szText )

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

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

++g_EItemsNum

g_EItems[g_EItemsNum][EItemName] = szTextP[1]
g_EItems[g_EItemsNum][EItemCommand] = szTextP[2]
g_EItems[g_EItemsNum][EItemFlag] = szTextP[3]
}
fclose( iFile )
}

/*==========================================
Вход игрока: Запуск проверки игрока на права
===========================================*/
public client_connect(id)
{
if(is_user_bot(id) || is_user_hltv(id))
return PLUGIN_CONTINUE

set_task(1.0, "CheckPlayer", id)
return PLUGIN_CONTINUE
}

/*==========================================
Выход игрока игрока: Сброс данных, прав
===========================================*/
public client_disconnect(id)
{
g_EPlayer[id][EPlayerDate] = ""
g_EPlayer[id][EPlayerDay] = 0
g_EPlayer[id][EPlayerSysTime] = 0
g_EPlayer[id][EPlayerEditMe] = 0

remove_user_flags(id)
}

/*==========================================
Изменения ника: Выполнение перезагрузки
===========================================*/
public client_infochanged(id)
{
if(!is_user_connected(id))
return PLUGIN_CONTINUE

new szNameNew[64], szNameOld[64]

get_user_info(id, "name", szNameNew, charsmax( szNameNew ))
get_user_name(id, szNameOld, charsmax( szNameOld ))

if(!equal(szNameOld, szNameNew))
{
client_disconnect(id)
set_task(1.0, "CheckPlayer", id)
}
return PLUGIN_CONTINUE
}

/*==========================================
Чекер времени, сброс прав если пришло время(отклик любой команды)
===========================================*/
public client_command(id)
{
if(!is_user_connected(id))
return PLUGIN_CONTINUE

if(g_EPlayer[id][EPlayerSysTime] == -1)
return PLUGIN_CONTINUE

CheckEnd(id)
return PLUGIN_CONTINUE
}

/*==========================================
Провека на права
===========================================*/
public CheckPlayer(id)
{
new szName[64], szIP[32], szSteam[32], szPassword[64], szPrefix[32]
new iLine

get_pcvar_string(g_Cvar[1], szPrefix, charsmax( szPrefix ))
get_user_name(id, szName, charsmax( szName ))
get_user_ip(id, szIP, charsmax( szIP ), 1)
get_user_authid(id, szSteam, charsmax( szSteam ))
get_user_info(id, szPrefix, szPassword, charsmax( szPassword ))

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

trim( szText )

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

new szParse[6][64]
parse(szText,
szParse[1], 63,
szParse[2], 63,
szParse[3], 63,
szParse[4], 63,
szParse[5], 63
)

if(equal(szName, szParse[1]) || equal(szIP, szParse[1]) || equal(szSteam, szParse[1]))
{
if(strlen( szParse[2] ))
{
if(!equal(szPassword, szParse[2]))
{
server_cmd("kick #%d ^"%L^" ", get_user_userid(id), LANG_PLAYER, "UM_FAIL_PASSWORD")
break
}
}

if(strlen( szParse[4] ))
{
new iRealTime = GetRealTime()
new iPeriodTime = ConvertPeriod( szParse[4] )

if(iPeriodTime > iRealTime)
{
g_EPlayer[id][EPlayerDate] = szParse[4]
replace_all(g_EPlayer[id][EPlayerDate], 63, " ", "/")

g_EPlayer[id][EPlayerDay] = (iPeriodTime - iRealTime) / 86400
g_EPlayer[id][EPlayerSysTime] = iPeriodTime
g_EPlayer[id][EPlayerEditMe] = str_to_num( szParse[5] )

set_user_flags(id, read_flags( szParse[3] ))
}else{
new szBlock[256]
formatex(szBlock, charsmax( szBlock ), ";%s", szText)

write_file(g_LoadUsers, szBlock, (iLine - 1))
}
}else{
g_EPlayer[id][EPlayerDate] = "unlimited"
g_EPlayer[id][EPlayerDay] = -1
g_EPlayer[id][EPlayerSysTime] = -1
g_EPlayer[id][EPlayerEditMe] = str_to_num( szParse[5] )

set_user_flags(id, read_flags( szParse[3] ))
}
break
}
}
fclose( iFile )
}

/*==========================================
Меню: AmxModMenu( Главное )
===========================================*/
public AmxModMenu(id)
{
if(!(get_user_flags(id) & ADMIN_MENU))
{
client_print(id, print_console, "%L", LANG_PLAYER, "UM_AMXMODMENU_NOACCESS")
return PLUGIN_HANDLED
}

new szText[512]

formatex(szText, charsmax( szText ), "%L^n%s", LANG_PLAYER, "UM_AMXMODMENU_TITLE", GetEndPeriod(id))
new iMenu = menu_create(szText, "AmxModMenu_handler")

if(g_EPlayer[id][EPlayerEditMe])
{
formatex(szText, charsmax( szText ), "%L", LANG_PLAYER, "UM_AMXMODMENU_EDIT")
menu_additem(iMenu, szText, "1", 0)
}else{
formatex(szText, charsmax( szText ), "%L", LANG_PLAYER, "UM_AMXMODMENU_EDIT")
menu_additem(iMenu, szText, "1", ADMIN_ADMIN)
}

for(new i = 1; i <= g_EItemsNum; i++)
{
new iStr[10]
num_to_str(i + 1, iStr, charsmax(iStr ))

if(GetMenuFlag(id, g_EItems[i][EItemFlag]))
{
menu_additem(iMenu, g_EItems[i][EItemName], iStr, 0)
}else{
menu_additem(iMenu, g_EItems[i][EItemName], iStr, ADMIN_ADMIN)
}
}

menu_setprop(iMenu, MPROP_EXIT, MEXIT_ALL)

formatex(szText, charsmax( szText ), "%L", LANG_PLAYER, "UM_MENUS_NEXT")
menu_setprop(iMenu, MPROP_NEXTNAME, szText)

formatex(szText, charsmax( szText ), "%L", LANG_PLAYER, "UM_MENUS_BACK")
menu_setprop(iMenu, MPROP_BACKNAME,szText)

formatex(szText, charsmax( szText ), "%L", LANG_PLAYER, "UM_MENUS_EXIT")
menu_setprop(iMenu, MPROP_EXITNAME, szText)

menu_display(id, iMenu, 0)

CheckEnd(id)

return PLUGIN_HANDLED
}

public AmxModMenu_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)

menu_destroy( iMenu )
return PLUGIN_HANDLED
}



/*==========================================
Перезагрузка админов
===========================================*/
public ReloadAdmins(id)
{
if(!(get_user_flags(id) & ADMIN_BAN))
{
client_print(id, print_console, "%L", LANG_PLAYER, "UM_AMXMODMENU_NOACCESS")
return PLUGIN_HANDLED
}

new iPlayers[32]
new iPlayer, iNum

get_players(iPlayers, iNum)

for(new i; i < iNum; i++)
{
iPlayer = iPlayers[i]

if(!is_user_connected(iPlayer))
continue

client_disconnect(iPlayer)
set_task(1.0, "CheckPlayer", iPlayer)
}

client_print(id, print_console, "Reload OK")
return PLUGIN_HANDLED

}

/*==========================================
Проверка смены пароля(setinfo)
===========================================*/
public CheckChange(id)
{
new szPassword[64], szPrefix[32]

get_pcvar_string(g_Cvar[1], szPrefix, charsmax( szPrefix ))
get_user_info(id, szPrefix, szPassword, charsmax( szPassword ))

if(!equal(szPassword, g_EPlayer[id][EPlayerNewPassword]))
{
PrintChatColor(id, PRINT_COLOR_RED, "%L", LANG_PLAYER, "UM_EDITPASSWORD_GOOD_INFO_1")
PrintChatColor(id, PRINT_COLOR_RED, "%L", LANG_PLAYER, "UM_EDITPASSWORD_GOOD_INFO_2", g_EPlayer[id][EPlayerNewPassword])
}
}

/*==========================================
Редактирование юзера
===========================================*/
stock EditUser(id, iEnable, szData[] = "", szPassword[] = "", szFlags[] = "", szPeriod[] = "", iEditMe = 0)
{
new szName[64], szIP[32], szSteam[32]
new iLine

get_user_name(id, szName, charsmax( szName ))
get_user_ip(id, szIP, charsmax( szIP ), 1)
get_user_authid(id, szSteam, charsmax( szSteam ))

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

trim( szText )

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

server_print("%s", szText)

new szParse[6][64]
parse(szText,
szParse[1], 63,
szParse[2], 63,
szParse[3], 63,
szParse[4], 63,
szParse[5], 63
)

if(equal(szName, szParse[1]) || equal(szIP, szParse[1]) || equal(szSteam, szParse[1]))
{
if(!iEnable)
{
new szBlock[256]
formatex(szBlock, charsmax( szBlock ), ";%s", szText)

write_file(g_LoadUsers, szBlock, (iLine - 1))
client_disconnect(id)

break
}

formatex(szText, charsmax( szText ), "^"%s^" ^"%s^" ^"%s^" ^"%s^" ^"%d^"",
strlen( szData ) ? szData : szParse[1],
strlen( szPassword ) ? szPassword : szParse[2],
strlen( szFlags ) ? szFlags : szParse[3],
strlen( szPeriod ) ? szPeriod : szParse[4],
iEditMe ? 1 : 0
)

write_file(g_LoadUsers, szText, (iLine - 1))
set_task(1.0, "CheckPlayer", id)

break
}
}
fclose( iFile )
}

/*==========================================
Корректировка systime с часовым поясом
===========================================*/
stock GetRealTime()
{
new iSysTime

new szUTC[32]
get_pcvar_string(g_Cvar[2], szUTC, charsmax( szUTC ))

if(containi(szUTC, "+") != -1)
{
replace_all(szUTC, charsmax( szUTC ), "+", "")
iSysTime = get_systime() + (3600 * str_to_num( szUTC ))
}else
if(containi(szUTC, "-") != -1)
{
replace_all(szUTC, charsmax( szUTC ), "-", "")
iSysTime = get_systime() - (3600 * str_to_num( szUTC ))
}else{
iSysTime = get_systime() + 14400
}
return iSysTime
}

/*==========================================
Конвертирование даты в systime
===========================================*/
stock ConvertPeriod( szPeriod[64] )
{
new iDay, iMouth, iYear
replace_all(szPeriod, charsmax( szPeriod ), "/", " ")

new szParse[9][32]
parse(szPeriod,
szParse[1], 31,
szParse[2], 31,
szParse[3], 31
)

iDay = str_to_num( szParse[1] )
iMouth = str_to_num( szParse[2] )
iYear = str_to_num( szParse[3] )

new iSecond[4]
if(iYear)
{
new iVar[5]

iVar[1] = iYear / 4
iVar[2] = iYear - iVar[1]
iVar[3] = iVar[1] - 492
iVar[4] = iVar[2] - 1478

iVar[3] *= 31622400
iVar[4] *= 31536000

iSecond[1] = iVar[3] + iVar[4]
}

if(iMouth)
{
for(new i = (iMouth - 1); i >= 1; i--)
{
iMouth -= 1

switch( iMouth )
{
case 1, 3, 5, 7, 8, 10:
{
iSecond[2] += 2678400
}

case 2 :
{
if(iYear % 4 == 0)
{
iSecond[2] += 2505600
}else{
iSecond[2] += 2419200
}
}

case 4, 6, 9, 11:
{
iSecond[2] += 2592000
}
}
}
}

if(iDay)
{
iSecond[3] = (iDay * 86400) - 1
}
return iSecond[1] + iSecond[2] + iSecond[3]
}

/*==========================================
Проверка доступности пункта
===========================================*/
stock GetMenuFlag(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
}

/*==========================================
Получение окончаний
===========================================*/
stock GetEndPeriod(id)
{
new szText[512]

if(get_pcvar_num( g_Cvar[3] ) != 1)
return szText

if(equal(g_EPlayer[id][EPlayerDate], "unlimited"))
{
formatex(szText, charsmax( szText ), "%L", LANG_PLAYER, "UM_PERIOD_UNLIMITED")
}else
if(g_EPlayer[id][EPlayerDay] >= 1)
{
formatex(szText, charsmax( szText ), "%L", LANG_PLAYER, "UM_PERIOD_DAY", EndWord(1, g_EPlayer[id][EPlayerDay]), g_EPlayer[id][EPlayerDate])
}else{
new szTime[32]
new iEnd, iHour, iMin

iEnd = g_EPlayer[id][EPlayerSysTime] - GetRealTime()
iHour = iEnd / 3600
iMin = (iEnd - (iHour * 3600)) / 60

++iMin

if(iHour >= 1)
{
formatex(szTime, charsmax( szTime ), "%s %s", EndWord(2, iHour), EndWord(3, iMin))
}else
if(iMin >= 1)
{
formatex(szTime, charsmax( szTime ), "%s", EndWord(3, iMin))
}
formatex(szText, charsmax( szText ), "%L", LANG_PLAYER, "UM_PERIOD_LESS", szTime)
}
return szText
}

/*==========================================
Получение окончаний( текст )
===========================================*/
stock EndWord(iType, iNum)
{
new szText[128]
new iLen

static const szWords[][][] =
{
{"", "", ""},
{"ENDWORLD_DAY1", "ENDWORLD_DAY2", "ENDWORLD_DAY3"},
{"ENDWORLD_HOUR1", "ENDWORLD_HOUR2", "ENDWORLD_HOUR3"},
{"ENDWORLD_MIN1", "ENDWORLD_MIN2", "ENDWORLD_MIN3"}
}

iLen += formatex(szText, charsmax( szText ) - iLen, "%d", iNum)

switch( iNum )
{
case 1, 21, 31, 41, 51:
{
iLen += formatex(szText[iLen], charsmax( szText ) - iLen, " %L", LANG_PLAYER, szWords[iType][0] )
}

case 2..4, 22..24, 32..34, 42..44, 52..54:
{
iLen += formatex(szText[iLen], charsmax( szText ) - iLen, " %L", LANG_PLAYER, szWords[iType][1] )
}

default:
{
iLen += formatex(szText[iLen], charsmax( szText ) - iLen, " %L", LANG_PLAYER, szWords[iType][2] )
}
}
return szText
}

/*==========================================
Проверка конца прав
===========================================*/
stock CheckEnd(id)
{
if(!is_user_admin(id))
return PLUGIN_CONTINUE

if(g_EPlayer[id][EPlayerSysTime] == -1)
return PLUGIN_CONTINUE

new iEnd = g_EPlayer[id][EPlayerSysTime] - GetRealTime()
if(iEnd <= 0)
{
g_EPlayer[id][EPlayerDate] = ""
g_EPlayer[id][EPlayerDay] = 0
g_EPlayer[id][EPlayerSysTime] = 0
g_EPlayer[id][EPlayerEditMe] = 0

remove_user_flags(id)
show_menu(id, 0, "^n", 1)

EditUser(id, 0)

PrintChatColor(id, PRINT_COLOR_RED, "%L", LANG_PLAYER, "UM_ENDPERIOD_1")
PrintChatColor(id, PRINT_COLOR_RED, "%L", LANG_PLAYER, "UM_ENDPERIOD_2")
PrintChatColor(id, PRINT_COLOR_RED, "%L", LANG_PLAYER, "UM_ENDPERIOD_3")
}
return PLUGIN_CONTINUE
}
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Kpacava
сообщение 17.6.2015, 21:34
Сообщение #6


Стаж: 14 лет

Сообщений: 464
Благодарностей: 75
Полезность: 161

Цитата(Denger167 @ 18.6.2015, 8:21) *
Проверь

спасибо но не робит)
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Denger167
сообщение 17.6.2015, 21:35
Сообщение #7


Стаж: 12 лет
Город: Магнитогорск

Сообщений: 175
Благодарностей: 63
Полезность: 54

Одну строчку пропустил выше, тут норм:

UserManager.sma
Код:
#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <WPMGPrintChatColor>

#define PLUGIN "UserManager"
#define VERSION "1.0"
#define AUTHOR "CrAsH"

/*==========================================
Плагины, которые требуется отключить
===========================================*/
new g_PluginsOff[][] =
{
"admin.amxx",
"admin_sql.amxx",
"menufront.amxx"
}

/*==========================================
Информация об структуре AmxModMenu
===========================================*/
enum _:EItems
{
EItemName[64] = 1,
EItemCommand[64],
EItemFlag[64]
}

new g_EItemsNum
new g_EItems[99][EItems]

/*==========================================
Информация о правах игрока
===========================================*/
enum _:EPlayer
{
EPlayerDate[64] = 1,

EPlayerDay,
EPlayerSysTime,
EPlayerEditMe

};

new g_EPlayer[33][EPlayer]

/*==========================================
Всякая хрень
===========================================*/
new g_LoadUsers[81]
new g_LoadItems[81]

new g_Cvar[5]

/*==========================================
Инициализация
===========================================*/
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)

//Доступные настройки(Квары)
g_Cvar[1] = register_cvar("um_pw_prefix", "_pw") //В каком префиксе хранится пароль( дефолт )
g_Cvar[2] = register_cvar("um_utc", "+04") //Часовой пояс( Москва/Россия )
g_Cvar[3] = register_cvar("um_menu_showend", "1") //Отображать ли в меню, когда кончается срок?
g_Cvar[4] = register_cvar("um_logs", "1") //Вести логи авторизации?

//Доступные команды
register_clcmd("amxmodmenu", "AmxModMenu")
register_clcmd("amxmenu", "AmxModMenu")
register_clcmd("amx_menu", "AmxModMenu")

register_clcmd("amx_reloadadmins", "ReloadAdmins")

//Ланг файл
register_dictionary("UserManager.txt")
}

/*==========================================
Загрузка и обработка конфигов
===========================================*/
public plugin_cfg()
{
new szError[128]
new iLine

new g_LoadDir[81]
get_configsdir(g_LoadDir, charsmax( g_LoadDir ))

server_cmd("exec %s/amxx.cfg", g_LoadDir)
server_cmd("exec %s/sql.cfg", g_LoadDir)

formatex(g_LoadDir, charsmax( g_LoadDir ), "%s/UserManager", g_LoadDir)

formatex(g_LoadUsers, charsmax( g_LoadUsers), "%s/users.ini", g_LoadDir)
formatex(g_LoadItems, charsmax( g_LoadItems), "%s/amxmodmenu.ini", g_LoadDir)

if(!dir_exists( g_LoadDir ))
{
formatex(szError, charsmax( szError ), "%L", LANG_PLAYER, "UM_CONFIG_NODIR", g_LoadDir)
set_fail_state( szError )
}

if(!file_exists( g_LoadUsers ))
{
formatex(szError, charsmax( szError ), "%L", LANG_PLAYER, "UM_CONFIG_NOFILE", g_LoadUsers)
set_fail_state( szError )
}

if(!file_exists( g_LoadItems ))
{
formatex(szError, charsmax( szError ), "%L", LANG_PLAYER, "UM_CONFIG_NOFILE", g_LoadItems)
set_fail_state( szError )
}

for(new i; i < sizeof g_PluginsOff; i++ )
{
if(find_plugin_byfile( g_PluginsOff[i] ) != INVALID_PLUGIN_ID)
{
formatex(szError, charsmax( szError ), "%L", 0, "UM_ACTIVE_PLUGINOFF", g_PluginsOff[i])
set_fail_state( szError )
}
}

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

trim( szText )

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

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

++g_EItemsNum

g_EItems[g_EItemsNum][EItemName] = szTextP[1]
g_EItems[g_EItemsNum][EItemCommand] = szTextP[2]
g_EItems[g_EItemsNum][EItemFlag] = szTextP[3]
}
fclose( iFile )
}

/*==========================================
Вход игрока: Запуск проверки игрока на права
===========================================*/
public client_connect(id)
{
if(is_user_bot(id) || is_user_hltv(id))
return PLUGIN_CONTINUE

set_task(1.0, "CheckPlayer", id)
return PLUGIN_CONTINUE
}

/*==========================================
Выход игрока игрока: Сброс данных, прав
===========================================*/
public client_disconnect(id)
{
g_EPlayer[id][EPlayerDate] = ""
g_EPlayer[id][EPlayerDay] = 0
g_EPlayer[id][EPlayerSysTime] = 0
g_EPlayer[id][EPlayerEditMe] = 0

remove_user_flags(id)
}

/*==========================================
Изменения ника: Выполнение перезагрузки
===========================================*/
public client_infochanged(id)
{
if(!is_user_connected(id))
return PLUGIN_CONTINUE

new szNameNew[64], szNameOld[64]

get_user_info(id, "name", szNameNew, charsmax( szNameNew ))
get_user_name(id, szNameOld, charsmax( szNameOld ))

if(!equal(szNameOld, szNameNew))
{
client_disconnect(id)
set_task(1.0, "CheckPlayer", id)
}
return PLUGIN_CONTINUE
}

/*==========================================
Чекер времени, сброс прав если пришло время(отклик любой команды)
===========================================*/
public client_command(id)
{
if(!is_user_connected(id))
return PLUGIN_CONTINUE

if(g_EPlayer[id][EPlayerSysTime] == -1)
return PLUGIN_CONTINUE

CheckEnd(id)
return PLUGIN_CONTINUE
}

/*==========================================
Провека на права
===========================================*/
public CheckPlayer(id)
{
new szName[64], szIP[32], szSteam[32], szPassword[64], szPrefix[32]
new iLine

get_pcvar_string(g_Cvar[1], szPrefix, charsmax( szPrefix ))
get_user_name(id, szName, charsmax( szName ))
get_user_ip(id, szIP, charsmax( szIP ), 1)
get_user_authid(id, szSteam, charsmax( szSteam ))
get_user_info(id, szPrefix, szPassword, charsmax( szPassword ))

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

trim( szText )

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

new szParse[6][64]
parse(szText,
szParse[1], 63,
szParse[2], 63,
szParse[3], 63,
szParse[4], 63,
szParse[5], 63
)

if(equal(szName, szParse[1]) || equal(szIP, szParse[1]) || equal(szSteam, szParse[1]))
{
if(strlen( szParse[2] ))
{
if(!equal(szPassword, szParse[2]))
{
server_cmd("kick #%d ^"%L^" ", get_user_userid(id), LANG_PLAYER, "UM_FAIL_PASSWORD")
break
}
}

if(strlen( szParse[4] ))
{
new iRealTime = GetRealTime()
new iPeriodTime = ConvertPeriod( szParse[4] )

if(iPeriodTime > iRealTime)
{
g_EPlayer[id][EPlayerDate] = szParse[4]
replace_all(g_EPlayer[id][EPlayerDate], 63, " ", "/")

g_EPlayer[id][EPlayerDay] = (iPeriodTime - iRealTime) / 86400
g_EPlayer[id][EPlayerSysTime] = iPeriodTime
g_EPlayer[id][EPlayerEditMe] = str_to_num( szParse[5] )

set_user_flags(id, read_flags( szParse[3] ))
}else{
new szBlock[256]
formatex(szBlock, charsmax( szBlock ), ";%s", szText)

write_file(g_LoadUsers, szBlock, (iLine - 1))
}
}else{
g_EPlayer[id][EPlayerDate] = "unlimited"
g_EPlayer[id][EPlayerDay] = -1
g_EPlayer[id][EPlayerSysTime] = -1
g_EPlayer[id][EPlayerEditMe] = str_to_num( szParse[5] )

set_user_flags(id, read_flags( szParse[3] ))
}
break
}
}
fclose( iFile )
}

/*==========================================
Меню: AmxModMenu( Главное )
===========================================*/
public AmxModMenu(id)
{
if(!(get_user_flags(id) & ADMIN_MENU))
{
client_print(id, print_console, "%L", LANG_PLAYER, "UM_AMXMODMENU_NOACCESS")
return PLUGIN_HANDLED
}

new szText[512]

formatex(szText, charsmax( szText ), "%L^n%s", LANG_PLAYER, "UM_AMXMODMENU_TITLE", GetEndPeriod(id))
new iMenu = menu_create(szText, "AmxModMenu_handler")

if(g_EPlayer[id][EPlayerEditMe])
{
formatex(szText, charsmax( szText ), "%L", LANG_PLAYER, "UM_AMXMODMENU_EDIT")
menu_additem(iMenu, szText, "1", 0)
}else{
formatex(szText, charsmax( szText ), "%L", LANG_PLAYER, "UM_AMXMODMENU_EDIT")
menu_additem(iMenu, szText, "1", ADMIN_ADMIN)
}

for(new i = 1; i <= g_EItemsNum; i++)
{
new iStr[10]
num_to_str(i + 1, iStr, charsmax(iStr ))

if(GetMenuFlag(id, g_EItems[i][EItemFlag]))
{
menu_additem(iMenu, g_EItems[i][EItemName], iStr, 0)
}else{
menu_additem(iMenu, g_EItems[i][EItemName], iStr, ADMIN_ADMIN)
}
}

menu_setprop(iMenu, MPROP_EXIT, MEXIT_ALL)

formatex(szText, charsmax( szText ), "%L", LANG_PLAYER, "UM_MENUS_NEXT")
menu_setprop(iMenu, MPROP_NEXTNAME, szText)

formatex(szText, charsmax( szText ), "%L", LANG_PLAYER, "UM_MENUS_BACK")
menu_setprop(iMenu, MPROP_BACKNAME,szText)

formatex(szText, charsmax( szText ), "%L", LANG_PLAYER, "UM_MENUS_EXIT")
menu_setprop(iMenu, MPROP_EXITNAME, szText)

menu_display(id, iMenu, 0)

CheckEnd(id)

return PLUGIN_HANDLED
}

public AmxModMenu_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_EItems[iKey - 1][EItemCommand])

menu_destroy( iMenu )
return PLUGIN_HANDLED
}

/*==========================================
Перезагрузка админов
===========================================*/
public ReloadAdmins(id)
{
if(!(get_user_flags(id) & ADMIN_BAN))
{
client_print(id, print_console, "%L", LANG_PLAYER, "UM_AMXMODMENU_NOACCESS")
return PLUGIN_HANDLED
}

new iPlayers[32]
new iPlayer, iNum

get_players(iPlayers, iNum)

for(new i; i < iNum; i++)
{
iPlayer = iPlayers[i]

if(!is_user_connected(iPlayer))
continue

client_disconnect(iPlayer)
set_task(1.0, "CheckPlayer", iPlayer)
}

client_print(id, print_console, "Reload OK")
return PLUGIN_HANDLED

}

/*==========================================
Редактирование юзера
===========================================*/
stock EditUser(id, iEnable, szData[] = "", szPassword[] = "", szFlags[] = "", szPeriod[] = "", iEditMe = 0)
{
new szName[64], szIP[32], szSteam[32]
new iLine

get_user_name(id, szName, charsmax( szName ))
get_user_ip(id, szIP, charsmax( szIP ), 1)
get_user_authid(id, szSteam, charsmax( szSteam ))

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

trim( szText )

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

server_print("%s", szText)

new szParse[6][64]
parse(szText,
szParse[1], 63,
szParse[2], 63,
szParse[3], 63,
szParse[4], 63,
szParse[5], 63
)

if(equal(szName, szParse[1]) || equal(szIP, szParse[1]) || equal(szSteam, szParse[1]))
{
if(!iEnable)
{
new szBlock[256]
formatex(szBlock, charsmax( szBlock ), ";%s", szText)

write_file(g_LoadUsers, szBlock, (iLine - 1))
client_disconnect(id)

break
}

formatex(szText, charsmax( szText ), "^"%s^" ^"%s^" ^"%s^" ^"%s^" ^"%d^"",
strlen( szData ) ? szData : szParse[1],
strlen( szPassword ) ? szPassword : szParse[2],
strlen( szFlags ) ? szFlags : szParse[3],
strlen( szPeriod ) ? szPeriod : szParse[4],
iEditMe ? 1 : 0
)

write_file(g_LoadUsers, szText, (iLine - 1))
set_task(1.0, "CheckPlayer", id)

break
}
}
fclose( iFile )
}

/*==========================================
Корректировка systime с часовым поясом
===========================================*/
stock GetRealTime()
{
new iSysTime

new szUTC[32]
get_pcvar_string(g_Cvar[2], szUTC, charsmax( szUTC ))

if(containi(szUTC, "+") != -1)
{
replace_all(szUTC, charsmax( szUTC ), "+", "")
iSysTime = get_systime() + (3600 * str_to_num( szUTC ))
}else
if(containi(szUTC, "-") != -1)
{
replace_all(szUTC, charsmax( szUTC ), "-", "")
iSysTime = get_systime() - (3600 * str_to_num( szUTC ))
}else{
iSysTime = get_systime() + 14400
}
return iSysTime
}

/*==========================================
Конвертирование даты в systime
===========================================*/
stock ConvertPeriod( szPeriod[64] )
{
new iDay, iMouth, iYear
replace_all(szPeriod, charsmax( szPeriod ), "/", " ")

new szParse[9][32]
parse(szPeriod,
szParse[1], 31,
szParse[2], 31,
szParse[3], 31
)

iDay = str_to_num( szParse[1] )
iMouth = str_to_num( szParse[2] )
iYear = str_to_num( szParse[3] )

new iSecond[4]
if(iYear)
{
new iVar[5]

iVar[1] = iYear / 4
iVar[2] = iYear - iVar[1]
iVar[3] = iVar[1] - 492
iVar[4] = iVar[2] - 1478

iVar[3] *= 31622400
iVar[4] *= 31536000

iSecond[1] = iVar[3] + iVar[4]
}

if(iMouth)
{
for(new i = (iMouth - 1); i >= 1; i--)
{
iMouth -= 1

switch( iMouth )
{
case 1, 3, 5, 7, 8, 10:
{
iSecond[2] += 2678400
}

case 2 :
{
if(iYear % 4 == 0)
{
iSecond[2] += 2505600
}else{
iSecond[2] += 2419200
}
}

case 4, 6, 9, 11:
{
iSecond[2] += 2592000
}
}
}
}

if(iDay)
{
iSecond[3] = (iDay * 86400) - 1
}
return iSecond[1] + iSecond[2] + iSecond[3]
}

/*==========================================
Проверка доступности пункта
===========================================*/
stock GetMenuFlag(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
}

/*==========================================
Получение окончаний
===========================================*/
stock GetEndPeriod(id)
{
new szText[512]

if(get_pcvar_num( g_Cvar[3] ) != 1)
return szText

if(equal(g_EPlayer[id][EPlayerDate], "unlimited"))
{
formatex(szText, charsmax( szText ), "%L", LANG_PLAYER, "UM_PERIOD_UNLIMITED")
}else
if(g_EPlayer[id][EPlayerDay] >= 1)
{
formatex(szText, charsmax( szText ), "%L", LANG_PLAYER, "UM_PERIOD_DAY", EndWord(1, g_EPlayer[id][EPlayerDay]), g_EPlayer[id][EPlayerDate])
}else{
new szTime[32]
new iEnd, iHour, iMin

iEnd = g_EPlayer[id][EPlayerSysTime] - GetRealTime()
iHour = iEnd / 3600
iMin = (iEnd - (iHour * 3600)) / 60

++iMin

if(iHour >= 1)
{
formatex(szTime, charsmax( szTime ), "%s %s", EndWord(2, iHour), EndWord(3, iMin))
}else
if(iMin >= 1)
{
formatex(szTime, charsmax( szTime ), "%s", EndWord(3, iMin))
}
formatex(szText, charsmax( szText ), "%L", LANG_PLAYER, "UM_PERIOD_LESS", szTime)
}
return szText
}

/*==========================================
Получение окончаний( текст )
===========================================*/
stock EndWord(iType, iNum)
{
new szText[128]
new iLen

static const szWords[][][] =
{
{"", "", ""},
{"ENDWORLD_DAY1", "ENDWORLD_DAY2", "ENDWORLD_DAY3"},
{"ENDWORLD_HOUR1", "ENDWORLD_HOUR2", "ENDWORLD_HOUR3"},
{"ENDWORLD_MIN1", "ENDWORLD_MIN2", "ENDWORLD_MIN3"}
}

iLen += formatex(szText, charsmax( szText ) - iLen, "%d", iNum)

switch( iNum )
{
case 1, 21, 31, 41, 51:
{
iLen += formatex(szText[iLen], charsmax( szText ) - iLen, " %L", LANG_PLAYER, szWords[iType][0] )
}

case 2..4, 22..24, 32..34, 42..44, 52..54:
{
iLen += formatex(szText[iLen], charsmax( szText ) - iLen, " %L", LANG_PLAYER, szWords[iType][1] )
}

default:
{
iLen += formatex(szText[iLen], charsmax( szText ) - iLen, " %L", LANG_PLAYER, szWords[iType][2] )
}
}
return szText
}

/*==========================================
Проверка конца прав
===========================================*/
stock CheckEnd(id)
{
if(!is_user_admin(id))
return PLUGIN_CONTINUE

if(g_EPlayer[id][EPlayerSysTime] == -1)
return PLUGIN_CONTINUE

new iEnd = g_EPlayer[id][EPlayerSysTime] - GetRealTime()
if(iEnd <= 0)
{
g_EPlayer[id][EPlayerDate] = ""
g_EPlayer[id][EPlayerDay] = 0
g_EPlayer[id][EPlayerSysTime] = 0
g_EPlayer[id][EPlayerEditMe] = 0

remove_user_flags(id)
show_menu(id, 0, "^n", 1)

EditUser(id, 0)

PrintChatColor(id, PRINT_COLOR_RED, "%L", LANG_PLAYER, "UM_ENDPERIOD_1")
PrintChatColor(id, PRINT_COLOR_RED, "%L", LANG_PLAYER, "UM_ENDPERIOD_2")
PrintChatColor(id, PRINT_COLOR_RED, "%L", LANG_PLAYER, "UM_ENDPERIOD_3")
}
return PLUGIN_CONTINUE
}
]


Имей смелость иметь свое мнение. Имей мудрость скрывать егo.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя Kpacava
сообщение 17.6.2015, 21:40
Сообщение #8


Стаж: 14 лет

Сообщений: 464
Благодарностей: 75
Полезность: 161

Цитата(Bloo @ 18.6.2015, 8:26) *
Если вдруг вариант выше не подойдет то проверь мой, вдруг правильно =)
Код:
#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <WPMGPrintChatColor>

#define PLUGIN "UserManager"
#define VERSION "1.0"
#define AUTHOR "CrAsH"

/*==========================================
Плагины, которые требуется отключить
===========================================*/
new g_PluginsOff[][] =
{
"admin.amxx",
"admin_sql.amxx",
"menufront.amxx"
}

/*==========================================
Информация об структуре AmxModMenu
===========================================*/
enum _:EItems
{
EItemName[64] = 1,
EItemCommand[64],
EItemFlag[64]
}

new g_EItemsNum
new g_EItems[99][EItems]

/*==========================================
Информация о правах игрока
===========================================*/
enum _:EPlayer
{
EPlayerDate[64] = 1,
EPlayerNewPassword[64],

EPlayerDay,
EPlayerSysTime,
EPlayerEditMe

};

new g_EPlayer[33][EPlayer]

/*==========================================
Всякая хрень
===========================================*/
new g_LoadUsers[81]
new g_LoadItems[81]

new g_Cvar[5]

/*==========================================
Инициализация
===========================================*/
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)

//Доступные настройки(Квары)
g_Cvar[1] = register_cvar("um_pw_prefix", "_pw") //В каком префиксе хранится пароль( дефолт )
g_Cvar[2] = register_cvar("um_utc", "+04") //Часовой пояс( Москва/Россия )
g_Cvar[3] = register_cvar("um_menu_showend", "1") //Отображать ли в меню, когда кончается срок?
g_Cvar[4] = register_cvar("um_logs", "1") //Вести логи авторизации?

//Доступные команды
register_clcmd("amxmodmenu", "AmxModMenu")
register_clcmd("amxmenu", "AmxModMenu")
register_clcmd("amx_menu", "AmxModMenu")

register_clcmd("amx_reloadadmins", "ReloadAdmins")

//Ланг файл
register_dictionary("UserManager.txt")
}

/*==========================================
Загрузка и обработка конфигов
===========================================*/
public plugin_cfg()
{
new szError[128]
new iLine

new g_LoadDir[81]
get_configsdir(g_LoadDir, charsmax( g_LoadDir ))

server_cmd("exec %s/amxx.cfg", g_LoadDir)
server_cmd("exec %s/sql.cfg", g_LoadDir)

formatex(g_LoadDir, charsmax( g_LoadDir ), "%s/UserManager", g_LoadDir)

formatex(g_LoadUsers, charsmax( g_LoadUsers), "%s/users.ini", g_LoadDir)
formatex(g_LoadItems, charsmax( g_LoadItems), "%s/amxmodmenu.ini", g_LoadDir)

if(!dir_exists( g_LoadDir ))
{
formatex(szError, charsmax( szError ), "%L", LANG_PLAYER, "UM_CONFIG_NODIR", g_LoadDir)
set_fail_state( szError )
}

if(!file_exists( g_LoadUsers ))
{
formatex(szError, charsmax( szError ), "%L", LANG_PLAYER, "UM_CONFIG_NOFILE", g_LoadUsers)
set_fail_state( szError )
}

if(!file_exists( g_LoadItems ))
{
formatex(szError, charsmax( szError ), "%L", LANG_PLAYER, "UM_CONFIG_NOFILE", g_LoadItems)
set_fail_state( szError )
}

for(new i; i < sizeof g_PluginsOff; i++ )
{
if(find_plugin_byfile( g_PluginsOff[i] ) != INVALID_PLUGIN_ID)
{
formatex(szError, charsmax( szError ), "%L", 0, "UM_ACTIVE_PLUGINOFF", g_PluginsOff[i])
set_fail_state( szError )
}
}

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

trim( szText )

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

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

++g_EItemsNum

g_EItems[g_EItemsNum][EItemName] = szTextP[1]
g_EItems[g_EItemsNum][EItemCommand] = szTextP[2]
g_EItems[g_EItemsNum][EItemFlag] = szTextP[3]
}
fclose( iFile )
}

/*==========================================
Вход игрока: Запуск проверки игрока на права
===========================================*/
public client_connect(id)
{
if(is_user_bot(id) || is_user_hltv(id))
return PLUGIN_CONTINUE

set_task(1.0, "CheckPlayer", id)
return PLUGIN_CONTINUE
}

/*==========================================
Выход игрока игрока: Сброс данных, прав
===========================================*/
public client_disconnect(id)
{
g_EPlayer[id][EPlayerDate] = ""
g_EPlayer[id][EPlayerDay] = 0
g_EPlayer[id][EPlayerSysTime] = 0
g_EPlayer[id][EPlayerEditMe] = 0

remove_user_flags(id)
}

/*==========================================
Изменения ника: Выполнение перезагрузки
===========================================*/
public client_infochanged(id)
{
if(!is_user_connected(id))
return PLUGIN_CONTINUE

new szNameNew[64], szNameOld[64]

get_user_info(id, "name", szNameNew, charsmax( szNameNew ))
get_user_name(id, szNameOld, charsmax( szNameOld ))

if(!equal(szNameOld, szNameNew))
{
client_disconnect(id)
set_task(1.0, "CheckPlayer", id)
}
return PLUGIN_CONTINUE
}

/*==========================================
Чекер времени, сброс прав если пришло время(отклик любой команды)
===========================================*/
public client_command(id)
{
if(!is_user_connected(id))
return PLUGIN_CONTINUE

if(g_EPlayer[id][EPlayerSysTime] == -1)
return PLUGIN_CONTINUE

CheckEnd(id)
return PLUGIN_CONTINUE
}

/*==========================================
Провека на права
===========================================*/
public CheckPlayer(id)
{
new szName[64], szIP[32], szSteam[32], szPassword[64], szPrefix[32]
new iLine

get_pcvar_string(g_Cvar[1], szPrefix, charsmax( szPrefix ))
get_user_name(id, szName, charsmax( szName ))
get_user_ip(id, szIP, charsmax( szIP ), 1)
get_user_authid(id, szSteam, charsmax( szSteam ))
get_user_info(id, szPrefix, szPassword, charsmax( szPassword ))

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

trim( szText )

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

new szParse[6][64]
parse(szText,
szParse[1], 63,
szParse[2], 63,
szParse[3], 63,
szParse[4], 63,
szParse[5], 63
)

if(equal(szName, szParse[1]) || equal(szIP, szParse[1]) || equal(szSteam, szParse[1]))
{
if(strlen( szParse[2] ))
{
if(!equal(szPassword, szParse[2]))
{
server_cmd("kick #%d ^"%L^" ", get_user_userid(id), LANG_PLAYER, "UM_FAIL_PASSWORD")
break
}
}

if(strlen( szParse[4] ))
{
new iRealTime = GetRealTime()
new iPeriodTime = ConvertPeriod( szParse[4] )

if(iPeriodTime > iRealTime)
{
g_EPlayer[id][EPlayerDate] = szParse[4]
replace_all(g_EPlayer[id][EPlayerDate], 63, " ", "/")

g_EPlayer[id][EPlayerDay] = (iPeriodTime - iRealTime) / 86400
g_EPlayer[id][EPlayerSysTime] = iPeriodTime
g_EPlayer[id][EPlayerEditMe] = str_to_num( szParse[5] )

set_user_flags(id, read_flags( szParse[3] ))
}else{
new szBlock[256]
formatex(szBlock, charsmax( szBlock ), ";%s", szText)

write_file(g_LoadUsers, szBlock, (iLine - 1))
}
}else{
g_EPlayer[id][EPlayerDate] = "unlimited"
g_EPlayer[id][EPlayerDay] = -1
g_EPlayer[id][EPlayerSysTime] = -1
g_EPlayer[id][EPlayerEditMe] = str_to_num( szParse[5] )

set_user_flags(id, read_flags( szParse[3] ))
}
break
}
}
fclose( iFile )
}

/*==========================================
Меню: AmxModMenu( Главное )
===========================================*/
public AmxModMenu(id)
{
if(!(get_user_flags(id) & ADMIN_MENU))
{
client_print(id, print_console, "%L", LANG_PLAYER, "UM_AMXMODMENU_NOACCESS")
return PLUGIN_HANDLED
}

new szText[512]

formatex(szText, charsmax( szText ), "%L^n%s", LANG_PLAYER, "UM_AMXMODMENU_TITLE", GetEndPeriod(id))
new iMenu = menu_create(szText, "AmxModMenu_handler")

if(g_EPlayer[id][EPlayerEditMe])
{
formatex(szText, charsmax( szText ), "%L", LANG_PLAYER, "UM_AMXMODMENU_EDIT")
menu_additem(iMenu, szText, "1", 0)
}else{
formatex(szText, charsmax( szText ), "%L", LANG_PLAYER, "UM_AMXMODMENU_EDIT")
menu_additem(iMenu, szText, "1", ADMIN_ADMIN)
}

for(new i = 1; i <= g_EItemsNum; i++)
{
new iStr[10]
num_to_str(i + 1, iStr, charsmax(iStr ))

if(GetMenuFlag(id, g_EItems[i][EItemFlag]))
{
menu_additem(iMenu, g_EItems[i][EItemName], iStr, 0)
}else{
menu_additem(iMenu, g_EItems[i][EItemName], iStr, ADMIN_ADMIN)
}
}

menu_setprop(iMenu, MPROP_EXIT, MEXIT_ALL)

formatex(szText, charsmax( szText ), "%L", LANG_PLAYER, "UM_MENUS_NEXT")
menu_setprop(iMenu, MPROP_NEXTNAME, szText)

formatex(szText, charsmax( szText ), "%L", LANG_PLAYER, "UM_MENUS_BACK")
menu_setprop(iMenu, MPROP_BACKNAME,szText)

formatex(szText, charsmax( szText ), "%L", LANG_PLAYER, "UM_MENUS_EXIT")
menu_setprop(iMenu, MPROP_EXITNAME, szText)

menu_display(id, iMenu, 0)

CheckEnd(id)

return PLUGIN_HANDLED
}

public AmxModMenu_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)

menu_destroy( iMenu )
return PLUGIN_HANDLED
}



/*==========================================
Перезагрузка админов
===========================================*/
public ReloadAdmins(id)
{
if(!(get_user_flags(id) & ADMIN_BAN))
{
client_print(id, print_console, "%L", LANG_PLAYER, "UM_AMXMODMENU_NOACCESS")
return PLUGIN_HANDLED
}

new iPlayers[32]
new iPlayer, iNum

get_players(iPlayers, iNum)

for(new i; i < iNum; i++)
{
iPlayer = iPlayers[i]

if(!is_user_connected(iPlayer))
continue

client_disconnect(iPlayer)
set_task(1.0, "CheckPlayer", iPlayer)
}

client_print(id, print_console, "Reload OK")
return PLUGIN_HANDLED

}

/*==========================================
Проверка смены пароля(setinfo)
===========================================*/
public CheckChange(id)
{
new szPassword[64], szPrefix[32]

get_pcvar_string(g_Cvar[1], szPrefix, charsmax( szPrefix ))
get_user_info(id, szPrefix, szPassword, charsmax( szPassword ))

if(!equal(szPassword, g_EPlayer[id][EPlayerNewPassword]))
{
PrintChatColor(id, PRINT_COLOR_RED, "%L", LANG_PLAYER, "UM_EDITPASSWORD_GOOD_INFO_1")
PrintChatColor(id, PRINT_COLOR_RED, "%L", LANG_PLAYER, "UM_EDITPASSWORD_GOOD_INFO_2", g_EPlayer[id][EPlayerNewPassword])
}
}

/*==========================================
Редактирование юзера
===========================================*/
stock EditUser(id, iEnable, szData[] = "", szPassword[] = "", szFlags[] = "", szPeriod[] = "", iEditMe = 0)
{
new szName[64], szIP[32], szSteam[32]
new iLine

get_user_name(id, szName, charsmax( szName ))
get_user_ip(id, szIP, charsmax( szIP ), 1)
get_user_authid(id, szSteam, charsmax( szSteam ))

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

trim( szText )

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

server_print("%s", szText)

new szParse[6][64]
parse(szText,
szParse[1], 63,
szParse[2], 63,
szParse[3], 63,
szParse[4], 63,
szParse[5], 63
)

if(equal(szName, szParse[1]) || equal(szIP, szParse[1]) || equal(szSteam, szParse[1]))
{
if(!iEnable)
{
new szBlock[256]
formatex(szBlock, charsmax( szBlock ), ";%s", szText)

write_file(g_LoadUsers, szBlock, (iLine - 1))
client_disconnect(id)

break
}

formatex(szText, charsmax( szText ), "^"%s^" ^"%s^" ^"%s^" ^"%s^" ^"%d^"",
strlen( szData ) ? szData : szParse[1],
strlen( szPassword ) ? szPassword : szParse[2],
strlen( szFlags ) ? szFlags : szParse[3],
strlen( szPeriod ) ? szPeriod : szParse[4],
iEditMe ? 1 : 0
)

write_file(g_LoadUsers, szText, (iLine - 1))
set_task(1.0, "CheckPlayer", id)

break
}
}
fclose( iFile )
}

/*==========================================
Корректировка systime с часовым поясом
===========================================*/
stock GetRealTime()
{
new iSysTime

new szUTC[32]
get_pcvar_string(g_Cvar[2], szUTC, charsmax( szUTC ))

if(containi(szUTC, "+") != -1)
{
replace_all(szUTC, charsmax( szUTC ), "+", "")
iSysTime = get_systime() + (3600 * str_to_num( szUTC ))
}else
if(containi(szUTC, "-") != -1)
{
replace_all(szUTC, charsmax( szUTC ), "-", "")
iSysTime = get_systime() - (3600 * str_to_num( szUTC ))
}else{
iSysTime = get_systime() + 14400
}
return iSysTime
}

/*==========================================
Конвертирование даты в systime
===========================================*/
stock ConvertPeriod( szPeriod[64] )
{
new iDay, iMouth, iYear
replace_all(szPeriod, charsmax( szPeriod ), "/", " ")

new szParse[9][32]
parse(szPeriod,
szParse[1], 31,
szParse[2], 31,
szParse[3], 31
)

iDay = str_to_num( szParse[1] )
iMouth = str_to_num( szParse[2] )
iYear = str_to_num( szParse[3] )

new iSecond[4]
if(iYear)
{
new iVar[5]

iVar[1] = iYear / 4
iVar[2] = iYear - iVar[1]
iVar[3] = iVar[1] - 492
iVar[4] = iVar[2] - 1478

iVar[3] *= 31622400
iVar[4] *= 31536000

iSecond[1] = iVar[3] + iVar[4]
}

if(iMouth)
{
for(new i = (iMouth - 1); i >= 1; i--)
{
iMouth -= 1

switch( iMouth )
{
case 1, 3, 5, 7, 8, 10:
{
iSecond[2] += 2678400
}

case 2 :
{
if(iYear % 4 == 0)
{
iSecond[2] += 2505600
}else{
iSecond[2] += 2419200
}
}

case 4, 6, 9, 11:
{
iSecond[2] += 2592000
}
}
}
}

if(iDay)
{
iSecond[3] = (iDay * 86400) - 1
}
return iSecond[1] + iSecond[2] + iSecond[3]
}

/*==========================================
Проверка доступности пункта
===========================================*/
stock GetMenuFlag(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
}

/*==========================================
Получение окончаний
===========================================*/
stock GetEndPeriod(id)
{
new szText[512]

if(get_pcvar_num( g_Cvar[3] ) != 1)
return szText

if(equal(g_EPlayer[id][EPlayerDate], "unlimited"))
{
formatex(szText, charsmax( szText ), "%L", LANG_PLAYER, "UM_PERIOD_UNLIMITED")
}else
if(g_EPlayer[id][EPlayerDay] >= 1)
{
formatex(szText, charsmax( szText ), "%L", LANG_PLAYER, "UM_PERIOD_DAY", EndWord(1, g_EPlayer[id][EPlayerDay]), g_EPlayer[id][EPlayerDate])
}else{
new szTime[32]
new iEnd, iHour, iMin

iEnd = g_EPlayer[id][EPlayerSysTime] - GetRealTime()
iHour = iEnd / 3600
iMin = (iEnd - (iHour * 3600)) / 60

++iMin

if(iHour >= 1)
{
formatex(szTime, charsmax( szTime ), "%s %s", EndWord(2, iHour), EndWord(3, iMin))
}else
if(iMin >= 1)
{
formatex(szTime, charsmax( szTime ), "%s", EndWord(3, iMin))
}
formatex(szText, charsmax( szText ), "%L", LANG_PLAYER, "UM_PERIOD_LESS", szTime)
}
return szText
}

/*==========================================
Получение окончаний( текст )
===========================================*/
stock EndWord(iType, iNum)
{
new szText[128]
new iLen

static const szWords[][][] =
{
{"", "", ""},
{"ENDWORLD_DAY1", "ENDWORLD_DAY2", "ENDWORLD_DAY3"},
{"ENDWORLD_HOUR1", "ENDWORLD_HOUR2", "ENDWORLD_HOUR3"},
{"ENDWORLD_MIN1", "ENDWORLD_MIN2", "ENDWORLD_MIN3"}
}

iLen += formatex(szText, charsmax( szText ) - iLen, "%d", iNum)

switch( iNum )
{
case 1, 21, 31, 41, 51:
{
iLen += formatex(szText[iLen], charsmax( szText ) - iLen, " %L", LANG_PLAYER, szWords[iType][0] )
}

case 2..4, 22..24, 32..34, 42..44, 52..54:
{
iLen += formatex(szText[iLen], charsmax( szText ) - iLen, " %L", LANG_PLAYER, szWords[iType][1] )
}

default:
{
iLen += formatex(szText[iLen], charsmax( szText ) - iLen, " %L", LANG_PLAYER, szWords[iType][2] )
}
}
return szText
}

/*==========================================
Проверка конца прав
===========================================*/
stock CheckEnd(id)
{
if(!is_user_admin(id))
return PLUGIN_CONTINUE

if(g_EPlayer[id][EPlayerSysTime] == -1)
return PLUGIN_CONTINUE

new iEnd = g_EPlayer[id][EPlayerSysTime] - GetRealTime()
if(iEnd <= 0)
{
g_EPlayer[id][EPlayerDate] = ""
g_EPlayer[id][EPlayerDay] = 0
g_EPlayer[id][EPlayerSysTime] = 0
g_EPlayer[id][EPlayerEditMe] = 0

remove_user_flags(id)
show_menu(id, 0, "^n", 1)

EditUser(id, 0)

PrintChatColor(id, PRINT_COLOR_RED, "%L", LANG_PLAYER, "UM_ENDPERIOD_1")
PrintChatColor(id, PRINT_COLOR_RED, "%L", LANG_PLAYER, "UM_ENDPERIOD_2")
PrintChatColor(id, PRINT_COLOR_RED, "%L", LANG_PLAYER, "UM_ENDPERIOD_3")
}
return PLUGIN_CONTINUE
}

Ты на верном пути ) надо только из меню убрать надпись!
Тоесть у тебя получилось там нажимаешь на "Изменить пароль" и ни чего не происходит!

Цитата(Denger167 @ 18.6.2015, 8:35) *
Одну строчку пропустил выше, тут норм:

UserManager.sma
Код:
#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <WPMGPrintChatColor>

#define PLUGIN "UserManager"
#define VERSION "1.0"
#define AUTHOR "CrAsH"

/*==========================================
Плагины, которые требуется отключить
===========================================*/
new g_PluginsOff[][] =
{
"admin.amxx",
"admin_sql.amxx",
"menufront.amxx"
}

/*==========================================
Информация об структуре AmxModMenu
===========================================*/
enum _:EItems
{
EItemName[64] = 1,
EItemCommand[64],
EItemFlag[64]
}

new g_EItemsNum
new g_EItems[99][EItems]

/*==========================================
Информация о правах игрока
===========================================*/
enum _:EPlayer
{
EPlayerDate[64] = 1,

EPlayerDay,
EPlayerSysTime,
EPlayerEditMe

};

new g_EPlayer[33][EPlayer]

/*==========================================
Всякая хрень
===========================================*/
new g_LoadUsers[81]
new g_LoadItems[81]

new g_Cvar[5]

/*==========================================
Инициализация
===========================================*/
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)

//Доступные настройки(Квары)
g_Cvar[1] = register_cvar("um_pw_prefix", "_pw") //В каком префиксе хранится пароль( дефолт )
g_Cvar[2] = register_cvar("um_utc", "+04") //Часовой пояс( Москва/Россия )
g_Cvar[3] = register_cvar("um_menu_showend", "1") //Отображать ли в меню, когда кончается срок?
g_Cvar[4] = register_cvar("um_logs", "1") //Вести логи авторизации?

//Доступные команды
register_clcmd("amxmodmenu", "AmxModMenu")
register_clcmd("amxmenu", "AmxModMenu")
register_clcmd("amx_menu", "AmxModMenu")

register_clcmd("amx_reloadadmins", "ReloadAdmins")

//Ланг файл
register_dictionary("UserManager.txt")
}

/*==========================================
Загрузка и обработка конфигов
===========================================*/
public plugin_cfg()
{
new szError[128]
new iLine

new g_LoadDir[81]
get_configsdir(g_LoadDir, charsmax( g_LoadDir ))

server_cmd("exec %s/amxx.cfg", g_LoadDir)
server_cmd("exec %s/sql.cfg", g_LoadDir)

formatex(g_LoadDir, charsmax( g_LoadDir ), "%s/UserManager", g_LoadDir)

formatex(g_LoadUsers, charsmax( g_LoadUsers), "%s/users.ini", g_LoadDir)
formatex(g_LoadItems, charsmax( g_LoadItems), "%s/amxmodmenu.ini", g_LoadDir)

if(!dir_exists( g_LoadDir ))
{
formatex(szError, charsmax( szError ), "%L", LANG_PLAYER, "UM_CONFIG_NODIR", g_LoadDir)
set_fail_state( szError )
}

if(!file_exists( g_LoadUsers ))
{
formatex(szError, charsmax( szError ), "%L", LANG_PLAYER, "UM_CONFIG_NOFILE", g_LoadUsers)
set_fail_state( szError )
}

if(!file_exists( g_LoadItems ))
{
formatex(szError, charsmax( szError ), "%L", LANG_PLAYER, "UM_CONFIG_NOFILE", g_LoadItems)
set_fail_state( szError )
}

for(new i; i < sizeof g_PluginsOff; i++ )
{
if(find_plugin_byfile( g_PluginsOff[i] ) != INVALID_PLUGIN_ID)
{
formatex(szError, charsmax( szError ), "%L", 0, "UM_ACTIVE_PLUGINOFF", g_PluginsOff[i])
set_fail_state( szError )
}
}

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

trim( szText )

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

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

++g_EItemsNum

g_EItems[g_EItemsNum][EItemName] = szTextP[1]
g_EItems[g_EItemsNum][EItemCommand] = szTextP[2]
g_EItems[g_EItemsNum][EItemFlag] = szTextP[3]
}
fclose( iFile )
}

/*==========================================
Вход игрока: Запуск проверки игрока на права
===========================================*/
public client_connect(id)
{
if(is_user_bot(id) || is_user_hltv(id))
return PLUGIN_CONTINUE

set_task(1.0, "CheckPlayer", id)
return PLUGIN_CONTINUE
}

/*==========================================
Выход игрока игрока: Сброс данных, прав
===========================================*/
public client_disconnect(id)
{
g_EPlayer[id][EPlayerDate] = ""
g_EPlayer[id][EPlayerDay] = 0
g_EPlayer[id][EPlayerSysTime] = 0
g_EPlayer[id][EPlayerEditMe] = 0

remove_user_flags(id)
}

/*==========================================
Изменения ника: Выполнение перезагрузки
===========================================*/
public client_infochanged(id)
{
if(!is_user_connected(id))
return PLUGIN_CONTINUE

new szNameNew[64], szNameOld[64]

get_user_info(id, "name", szNameNew, charsmax( szNameNew ))
get_user_name(id, szNameOld, charsmax( szNameOld ))

if(!equal(szNameOld, szNameNew))
{
client_disconnect(id)
set_task(1.0, "CheckPlayer", id)
}
return PLUGIN_CONTINUE
}

/*==========================================
Чекер времени, сброс прав если пришло время(отклик любой команды)
===========================================*/
public client_command(id)
{
if(!is_user_connected(id))
return PLUGIN_CONTINUE

if(g_EPlayer[id][EPlayerSysTime] == -1)
return PLUGIN_CONTINUE

CheckEnd(id)
return PLUGIN_CONTINUE
}

/*==========================================
Провека на права
===========================================*/
public CheckPlayer(id)
{
new szName[64], szIP[32], szSteam[32], szPassword[64], szPrefix[32]
new iLine

get_pcvar_string(g_Cvar[1], szPrefix, charsmax( szPrefix ))
get_user_name(id, szName, charsmax( szName ))
get_user_ip(id, szIP, charsmax( szIP ), 1)
get_user_authid(id, szSteam, charsmax( szSteam ))
get_user_info(id, szPrefix, szPassword, charsmax( szPassword ))

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

trim( szText )

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

new szParse[6][64]
parse(szText,
szParse[1], 63,
szParse[2], 63,
szParse[3], 63,
szParse[4], 63,
szParse[5], 63
)

if(equal(szName, szParse[1]) || equal(szIP, szParse[1]) || equal(szSteam, szParse[1]))
{
if(strlen( szParse[2] ))
{
if(!equal(szPassword, szParse[2]))
{
server_cmd("kick #%d ^"%L^" ", get_user_userid(id), LANG_PLAYER, "UM_FAIL_PASSWORD")
break
}
}

if(strlen( szParse[4] ))
{
new iRealTime = GetRealTime()
new iPeriodTime = ConvertPeriod( szParse[4] )

if(iPeriodTime > iRealTime)
{
g_EPlayer[id][EPlayerDate] = szParse[4]
replace_all(g_EPlayer[id][EPlayerDate], 63, " ", "/")

g_EPlayer[id][EPlayerDay] = (iPeriodTime - iRealTime) / 86400
g_EPlayer[id][EPlayerSysTime] = iPeriodTime
g_EPlayer[id][EPlayerEditMe] = str_to_num( szParse[5] )

set_user_flags(id, read_flags( szParse[3] ))
}else{
new szBlock[256]
formatex(szBlock, charsmax( szBlock ), ";%s", szText)

write_file(g_LoadUsers, szBlock, (iLine - 1))
}
}else{
g_EPlayer[id][EPlayerDate] = "unlimited"
g_EPlayer[id][EPlayerDay] = -1
g_EPlayer[id][EPlayerSysTime] = -1
g_EPlayer[id][EPlayerEditMe] = str_to_num( szParse[5] )

set_user_flags(id, read_flags( szParse[3] ))
}
break
}
}
fclose( iFile )
}

/*==========================================
Меню: AmxModMenu( Главное )
===========================================*/
public AmxModMenu(id)
{
if(!(get_user_flags(id) & ADMIN_MENU))
{
client_print(id, print_console, "%L", LANG_PLAYER, "UM_AMXMODMENU_NOACCESS")
return PLUGIN_HANDLED
}

new szText[512]

formatex(szText, charsmax( szText ), "%L^n%s", LANG_PLAYER, "UM_AMXMODMENU_TITLE", GetEndPeriod(id))
new iMenu = menu_create(szText, "AmxModMenu_handler")

if(g_EPlayer[id][EPlayerEditMe])
{
formatex(szText, charsmax( szText ), "%L", LANG_PLAYER, "UM_AMXMODMENU_EDIT")
menu_additem(iMenu, szText, "1", 0)
}else{
formatex(szText, charsmax( szText ), "%L", LANG_PLAYER, "UM_AMXMODMENU_EDIT")
menu_additem(iMenu, szText, "1", ADMIN_ADMIN)
}

for(new i = 1; i <= g_EItemsNum; i++)
{
new iStr[10]
num_to_str(i + 1, iStr, charsmax(iStr ))

if(GetMenuFlag(id, g_EItems[i][EItemFlag]))
{
menu_additem(iMenu, g_EItems[i][EItemName], iStr, 0)
}else{
menu_additem(iMenu, g_EItems[i][EItemName], iStr, ADMIN_ADMIN)
}
}

menu_setprop(iMenu, MPROP_EXIT, MEXIT_ALL)

formatex(szText, charsmax( szText ), "%L", LANG_PLAYER, "UM_MENUS_NEXT")
menu_setprop(iMenu, MPROP_NEXTNAME, szText)

formatex(szText, charsmax( szText ), "%L", LANG_PLAYER, "UM_MENUS_BACK")
menu_setprop(iMenu, MPROP_BACKNAME,szText)

formatex(szText, charsmax( szText ), "%L", LANG_PLAYER, "UM_MENUS_EXIT")
menu_setprop(iMenu, MPROP_EXITNAME, szText)

menu_display(id, iMenu, 0)

CheckEnd(id)

return PLUGIN_HANDLED
}

public AmxModMenu_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_EItems[iKey - 1][EItemCommand])

menu_destroy( iMenu )
return PLUGIN_HANDLED
}

/*==========================================
Перезагрузка админов
===========================================*/
public ReloadAdmins(id)
{
if(!(get_user_flags(id) & ADMIN_BAN))
{
client_print(id, print_console, "%L", LANG_PLAYER, "UM_AMXMODMENU_NOACCESS")
return PLUGIN_HANDLED
}

new iPlayers[32]
new iPlayer, iNum

get_players(iPlayers, iNum)

for(new i; i < iNum; i++)
{
iPlayer = iPlayers[i]

if(!is_user_connected(iPlayer))
continue

client_disconnect(iPlayer)
set_task(1.0, "CheckPlayer", iPlayer)
}

client_print(id, print_console, "Reload OK")
return PLUGIN_HANDLED

}

/*==========================================
Редактирование юзера
===========================================*/
stock EditUser(id, iEnable, szData[] = "", szPassword[] = "", szFlags[] = "", szPeriod[] = "", iEditMe = 0)
{
new szName[64], szIP[32], szSteam[32]
new iLine

get_user_name(id, szName, charsmax( szName ))
get_user_ip(id, szIP, charsmax( szIP ), 1)
get_user_authid(id, szSteam, charsmax( szSteam ))

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

trim( szText )

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

server_print("%s", szText)

new szParse[6][64]
parse(szText,
szParse[1], 63,
szParse[2], 63,
szParse[3], 63,
szParse[4], 63,
szParse[5], 63
)

if(equal(szName, szParse[1]) || equal(szIP, szParse[1]) || equal(szSteam, szParse[1]))
{
if(!iEnable)
{
new szBlock[256]
formatex(szBlock, charsmax( szBlock ), ";%s", szText)

write_file(g_LoadUsers, szBlock, (iLine - 1))
client_disconnect(id)

break
}

formatex(szText, charsmax( szText ), "^"%s^" ^"%s^" ^"%s^" ^"%s^" ^"%d^"",
strlen( szData ) ? szData : szParse[1],
strlen( szPassword ) ? szPassword : szParse[2],
strlen( szFlags ) ? szFlags : szParse[3],
strlen( szPeriod ) ? szPeriod : szParse[4],
iEditMe ? 1 : 0
)

write_file(g_LoadUsers, szText, (iLine - 1))
set_task(1.0, "CheckPlayer", id)

break
}
}
fclose( iFile )
}

/*==========================================
Корректировка systime с часовым поясом
===========================================*/
stock GetRealTime()
{
new iSysTime

new szUTC[32]
get_pcvar_string(g_Cvar[2], szUTC, charsmax( szUTC ))

if(containi(szUTC, "+") != -1)
{
replace_all(szUTC, charsmax( szUTC ), "+", "")
iSysTime = get_systime() + (3600 * str_to_num( szUTC ))
}else
if(containi(szUTC, "-") != -1)
{
replace_all(szUTC, charsmax( szUTC ), "-", "")
iSysTime = get_systime() - (3600 * str_to_num( szUTC ))
}else{
iSysTime = get_systime() + 14400
}
return iSysTime
}

/*==========================================
Конвертирование даты в systime
===========================================*/
stock ConvertPeriod( szPeriod[64] )
{
new iDay, iMouth, iYear
replace_all(szPeriod, charsmax( szPeriod ), "/", " ")

new szParse[9][32]
parse(szPeriod,
szParse[1], 31,
szParse[2], 31,
szParse[3], 31
)

iDay = str_to_num( szParse[1] )
iMouth = str_to_num( szParse[2] )
iYear = str_to_num( szParse[3] )

new iSecond[4]
if(iYear)
{
new iVar[5]

iVar[1] = iYear / 4
iVar[2] = iYear - iVar[1]
iVar[3] = iVar[1] - 492
iVar[4] = iVar[2] - 1478

iVar[3] *= 31622400
iVar[4] *= 31536000

iSecond[1] = iVar[3] + iVar[4]
}

if(iMouth)
{
for(new i = (iMouth - 1); i >= 1; i--)
{
iMouth -= 1

switch( iMouth )
{
case 1, 3, 5, 7, 8, 10:
{
iSecond[2] += 2678400
}

case 2 :
{
if(iYear % 4 == 0)
{
iSecond[2] += 2505600
}else{
iSecond[2] += 2419200
}
}

case 4, 6, 9, 11:
{
iSecond[2] += 2592000
}
}
}
}

if(iDay)
{
iSecond[3] = (iDay * 86400) - 1
}
return iSecond[1] + iSecond[2] + iSecond[3]
}

/*==========================================
Проверка доступности пункта
===========================================*/
stock GetMenuFlag(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
}

/*==========================================
Получение окончаний
===========================================*/
stock GetEndPeriod(id)
{
new szText[512]

if(get_pcvar_num( g_Cvar[3] ) != 1)
return szText

if(equal(g_EPlayer[id][EPlayerDate], "unlimited"))
{
formatex(szText, charsmax( szText ), "%L", LANG_PLAYER, "UM_PERIOD_UNLIMITED")
}else
if(g_EPlayer[id][EPlayerDay] >= 1)
{
formatex(szText, charsmax( szText ), "%L", LANG_PLAYER, "UM_PERIOD_DAY", EndWord(1, g_EPlayer[id][EPlayerDay]), g_EPlayer[id][EPlayerDate])
}else{
new szTime[32]
new iEnd, iHour, iMin

iEnd = g_EPlayer[id][EPlayerSysTime] - GetRealTime()
iHour = iEnd / 3600
iMin = (iEnd - (iHour * 3600)) / 60

++iMin

if(iHour >= 1)
{
formatex(szTime, charsmax( szTime ), "%s %s", EndWord(2, iHour), EndWord(3, iMin))
}else
if(iMin >= 1)
{
formatex(szTime, charsmax( szTime ), "%s", EndWord(3, iMin))
}
formatex(szText, charsmax( szText ), "%L", LANG_PLAYER, "UM_PERIOD_LESS", szTime)
}
return szText
}

/*==========================================
Получение окончаний( текст )
===========================================*/
stock EndWord(iType, iNum)
{
new szText[128]
new iLen

static const szWords[][][] =
{
{"", "", ""},
{"ENDWORLD_DAY1", "ENDWORLD_DAY2", "ENDWORLD_DAY3"},
{"ENDWORLD_HOUR1", "ENDWORLD_HOUR2", "ENDWORLD_HOUR3"},
{"ENDWORLD_MIN1", "ENDWORLD_MIN2", "ENDWORLD_MIN3"}
}

iLen += formatex(szText, charsmax( szText ) - iLen, "%d", iNum)

switch( iNum )
{
case 1, 21, 31, 41, 51:
{
iLen += formatex(szText[iLen], charsmax( szText ) - iLen, " %L", LANG_PLAYER, szWords[iType][0] )
}

case 2..4, 22..24, 32..34, 42..44, 52..54:
{
iLen += formatex(szText[iLen], charsmax( szText ) - iLen, " %L", LANG_PLAYER, szWords[iType][1] )
}

default:
{
iLen += formatex(szText[iLen], charsmax( szText ) - iLen, " %L", LANG_PLAYER, szWords[iType][2] )
}
}
return szText
}

/*==========================================
Проверка конца прав
===========================================*/
stock CheckEnd(id)
{
if(!is_user_admin(id))
return PLUGIN_CONTINUE

if(g_EPlayer[id][EPlayerSysTime] == -1)
return PLUGIN_CONTINUE

new iEnd = g_EPlayer[id][EPlayerSysTime] - GetRealTime()
if(iEnd <= 0)
{
g_EPlayer[id][EPlayerDate] = ""
g_EPlayer[id][EPlayerDay] = 0
g_EPlayer[id][EPlayerSysTime] = 0
g_EPlayer[id][EPlayerEditMe] = 0

remove_user_flags(id)
show_menu(id, 0, "^n", 1)

EditUser(id, 0)

PrintChatColor(id, PRINT_COLOR_RED, "%L", LANG_PLAYER, "UM_ENDPERIOD_1")
PrintChatColor(id, PRINT_COLOR_RED, "%L", LANG_PLAYER, "UM_ENDPERIOD_2")
PrintChatColor(id, PRINT_COLOR_RED, "%L", LANG_PLAYER, "UM_ENDPERIOD_3")
}
return PLUGIN_CONTINUE
}
]

ну так же получилось как у Bloo

Отредактировал: Kpacava, - 17.6.2015, 21:38
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Bloo
сообщение 17.6.2015, 21:48
Сообщение #9


Стаж: 12 лет

Сообщений: 15547
Благодарностей: 6971
Полезность: 1206

Kpacava, дай указатель этой строки из словаря
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Kpacava
сообщение 17.6.2015, 22:02
Сообщение #10


Стаж: 14 лет

Сообщений: 464
Благодарностей: 75
Полезность: 161

Цитата(Bloo @ 18.6.2015, 9:48) *
Kpacava, дай указатель этой строки из словаря

UM_AMXMODMENU_EDIT = Изменить пароль
это наверно?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Bloo
сообщение 17.6.2015, 22:07
Сообщение #11


Стаж: 12 лет

Сообщений: 15547
Благодарностей: 6971
Полезность: 1206

Kpacava, Наверное)
Код:
#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <WPMGPrintChatColor>

#define PLUGIN "UserManager"
#define VERSION "1.0"
#define AUTHOR "CrAsH"

/*==========================================
Плагины, которые требуется отключить
===========================================*/
new g_PluginsOff[][] =
{
"admin.amxx",
"admin_sql.amxx",
"menufront.amxx"
}

/*==========================================
Информация об структуре AmxModMenu
===========================================*/
enum _:EItems
{
EItemName[64] = 1,
EItemCommand[64],
EItemFlag[64]
}

new g_EItemsNum
new g_EItems[99][EItems]

/*==========================================
Информация о правах игрока
===========================================*/
enum _:EPlayer
{
EPlayerDate[64] = 1,
EPlayerNewPassword[64],

EPlayerDay,
EPlayerSysTime,
EPlayerEditMe

};

new g_EPlayer[33][EPlayer]

/*==========================================
Всякая хрень
===========================================*/
new g_LoadUsers[81]
new g_LoadItems[81]

new g_Cvar[5]

/*==========================================
Инициализация
===========================================*/
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)

//Доступные настройки(Квары)
g_Cvar[1] = register_cvar("um_pw_prefix", "_pw") //В каком префиксе хранится пароль( дефолт )
g_Cvar[2] = register_cvar("um_utc", "+04") //Часовой пояс( Москва/Россия )
g_Cvar[3] = register_cvar("um_menu_showend", "1") //Отображать ли в меню, когда кончается срок?
g_Cvar[4] = register_cvar("um_logs", "1") //Вести логи авторизации?

//Доступные команды
register_clcmd("amxmodmenu", "AmxModMenu")
register_clcmd("amxmenu", "AmxModMenu")
register_clcmd("amx_menu", "AmxModMenu")

register_clcmd("amx_reloadadmins", "ReloadAdmins")

//Ланг файл
register_dictionary("UserManager.txt")
}

/*==========================================
Загрузка и обработка конфигов
===========================================*/
public plugin_cfg()
{
new szError[128]
new iLine

new g_LoadDir[81]
get_configsdir(g_LoadDir, charsmax( g_LoadDir ))

server_cmd("exec %s/amxx.cfg", g_LoadDir)
server_cmd("exec %s/sql.cfg", g_LoadDir)

formatex(g_LoadDir, charsmax( g_LoadDir ), "%s/UserManager", g_LoadDir)

formatex(g_LoadUsers, charsmax( g_LoadUsers), "%s/users.ini", g_LoadDir)
formatex(g_LoadItems, charsmax( g_LoadItems), "%s/amxmodmenu.ini", g_LoadDir)

if(!dir_exists( g_LoadDir ))
{
formatex(szError, charsmax( szError ), "%L", LANG_PLAYER, "UM_CONFIG_NODIR", g_LoadDir)
set_fail_state( szError )
}

if(!file_exists( g_LoadUsers ))
{
formatex(szError, charsmax( szError ), "%L", LANG_PLAYER, "UM_CONFIG_NOFILE", g_LoadUsers)
set_fail_state( szError )
}

if(!file_exists( g_LoadItems ))
{
formatex(szError, charsmax( szError ), "%L", LANG_PLAYER, "UM_CONFIG_NOFILE", g_LoadItems)
set_fail_state( szError )
}

for(new i; i < sizeof g_PluginsOff; i++ )
{
if(find_plugin_byfile( g_PluginsOff[i] ) != INVALID_PLUGIN_ID)
{
formatex(szError, charsmax( szError ), "%L", 0, "UM_ACTIVE_PLUGINOFF", g_PluginsOff[i])
set_fail_state( szError )
}
}

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

trim( szText )

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

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

++g_EItemsNum

g_EItems[g_EItemsNum][EItemName] = szTextP[1]
g_EItems[g_EItemsNum][EItemCommand] = szTextP[2]
g_EItems[g_EItemsNum][EItemFlag] = szTextP[3]
}
fclose( iFile )
}

/*==========================================
Вход игрока: Запуск проверки игрока на права
===========================================*/
public client_connect(id)
{
if(is_user_bot(id) || is_user_hltv(id))
return PLUGIN_CONTINUE

set_task(1.0, "CheckPlayer", id)
return PLUGIN_CONTINUE
}

/*==========================================
Выход игрока игрока: Сброс данных, прав
===========================================*/
public client_disconnect(id)
{
g_EPlayer[id][EPlayerDate] = ""
g_EPlayer[id][EPlayerDay] = 0
g_EPlayer[id][EPlayerSysTime] = 0
g_EPlayer[id][EPlayerEditMe] = 0

remove_user_flags(id)
}

/*==========================================
Изменения ника: Выполнение перезагрузки
===========================================*/
public client_infochanged(id)
{
if(!is_user_connected(id))
return PLUGIN_CONTINUE

new szNameNew[64], szNameOld[64]

get_user_info(id, "name", szNameNew, charsmax( szNameNew ))
get_user_name(id, szNameOld, charsmax( szNameOld ))

if(!equal(szNameOld, szNameNew))
{
client_disconnect(id)
set_task(1.0, "CheckPlayer", id)
}
return PLUGIN_CONTINUE
}

/*==========================================
Чекер времени, сброс прав если пришло время(отклик любой команды)
===========================================*/
public client_command(id)
{
if(!is_user_connected(id))
return PLUGIN_CONTINUE

if(g_EPlayer[id][EPlayerSysTime] == -1)
return PLUGIN_CONTINUE

CheckEnd(id)
return PLUGIN_CONTINUE
}

/*==========================================
Провека на права
===========================================*/
public CheckPlayer(id)
{
new szName[64], szIP[32], szSteam[32], szPassword[64], szPrefix[32]
new iLine

get_pcvar_string(g_Cvar[1], szPrefix, charsmax( szPrefix ))
get_user_name(id, szName, charsmax( szName ))
get_user_ip(id, szIP, charsmax( szIP ), 1)
get_user_authid(id, szSteam, charsmax( szSteam ))
get_user_info(id, szPrefix, szPassword, charsmax( szPassword ))

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

trim( szText )

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

new szParse[6][64]
parse(szText,
szParse[1], 63,
szParse[2], 63,
szParse[3], 63,
szParse[4], 63,
szParse[5], 63
)

if(equal(szName, szParse[1]) || equal(szIP, szParse[1]) || equal(szSteam, szParse[1]))
{
if(strlen( szParse[2] ))
{
if(!equal(szPassword, szParse[2]))
{
server_cmd("kick #%d ^"%L^" ", get_user_userid(id), LANG_PLAYER, "UM_FAIL_PASSWORD")
break
}
}

if(strlen( szParse[4] ))
{
new iRealTime = GetRealTime()
new iPeriodTime = ConvertPeriod( szParse[4] )

if(iPeriodTime > iRealTime)
{
g_EPlayer[id][EPlayerDate] = szParse[4]
replace_all(g_EPlayer[id][EPlayerDate], 63, " ", "/")

g_EPlayer[id][EPlayerDay] = (iPeriodTime - iRealTime) / 86400
g_EPlayer[id][EPlayerSysTime] = iPeriodTime
g_EPlayer[id][EPlayerEditMe] = str_to_num( szParse[5] )

set_user_flags(id, read_flags( szParse[3] ))
}else{
new szBlock[256]
formatex(szBlock, charsmax( szBlock ), ";%s", szText)

write_file(g_LoadUsers, szBlock, (iLine - 1))
}
}else{
g_EPlayer[id][EPlayerDate] = "unlimited"
g_EPlayer[id][EPlayerDay] = -1
g_EPlayer[id][EPlayerSysTime] = -1
g_EPlayer[id][EPlayerEditMe] = str_to_num( szParse[5] )

set_user_flags(id, read_flags( szParse[3] ))
}
break
}
}
fclose( iFile )
}

/*==========================================
Меню: AmxModMenu( Главное )
===========================================*/
public AmxModMenu(id)
{
if(!(get_user_flags(id) & ADMIN_MENU))
{
client_print(id, print_console, "%L", LANG_PLAYER, "UM_AMXMODMENU_NOACCESS")
return PLUGIN_HANDLED
}

new szText[512]

formatex(szText, charsmax( szText ), "%L^n%s", LANG_PLAYER, "UM_AMXMODMENU_TITLE", GetEndPeriod(id))
new iMenu = menu_create(szText, "AmxModMenu_handler")

for(new i = 1; i <= g_EItemsNum; i++)
{
new iStr[10]
num_to_str(i + 1, iStr, charsmax(iStr ))

if(GetMenuFlag(id, g_EItems[i][EItemFlag]))
{
menu_additem(iMenu, g_EItems[i][EItemName], iStr, 0)
}else{
menu_additem(iMenu, g_EItems[i][EItemName], iStr, ADMIN_ADMIN)
}
}

menu_setprop(iMenu, MPROP_EXIT, MEXIT_ALL)

formatex(szText, charsmax( szText ), "%L", LANG_PLAYER, "UM_MENUS_NEXT")
menu_setprop(iMenu, MPROP_NEXTNAME, szText)

formatex(szText, charsmax( szText ), "%L", LANG_PLAYER, "UM_MENUS_BACK")
menu_setprop(iMenu, MPROP_BACKNAME,szText)

formatex(szText, charsmax( szText ), "%L", LANG_PLAYER, "UM_MENUS_EXIT")
menu_setprop(iMenu, MPROP_EXITNAME, szText)

menu_display(id, iMenu, 0)

CheckEnd(id)

return PLUGIN_HANDLED
}

public AmxModMenu_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)

menu_destroy( iMenu )
return PLUGIN_HANDLED
}



/*==========================================
Перезагрузка админов
===========================================*/
public ReloadAdmins(id)
{
if(!(get_user_flags(id) & ADMIN_BAN))
{
client_print(id, print_console, "%L", LANG_PLAYER, "UM_AMXMODMENU_NOACCESS")
return PLUGIN_HANDLED
}

new iPlayers[32]
new iPlayer, iNum

get_players(iPlayers, iNum)

for(new i; i < iNum; i++)
{
iPlayer = iPlayers[i]

if(!is_user_connected(iPlayer))
continue

client_disconnect(iPlayer)
set_task(1.0, "CheckPlayer", iPlayer)
}

client_print(id, print_console, "Reload OK")
return PLUGIN_HANDLED

}

/*==========================================
Проверка смены пароля(setinfo)
===========================================*/
public CheckChange(id)
{
new szPassword[64], szPrefix[32]

get_pcvar_string(g_Cvar[1], szPrefix, charsmax( szPrefix ))
get_user_info(id, szPrefix, szPassword, charsmax( szPassword ))

if(!equal(szPassword, g_EPlayer[id][EPlayerNewPassword]))
{
PrintChatColor(id, PRINT_COLOR_RED, "%L", LANG_PLAYER, "UM_EDITPASSWORD_GOOD_INFO_1")
PrintChatColor(id, PRINT_COLOR_RED, "%L", LANG_PLAYER, "UM_EDITPASSWORD_GOOD_INFO_2", g_EPlayer[id][EPlayerNewPassword])
}
}

/*==========================================
Редактирование юзера
===========================================*/
stock EditUser(id, iEnable, szData[] = "", szPassword[] = "", szFlags[] = "", szPeriod[] = "", iEditMe = 0)
{
new szName[64], szIP[32], szSteam[32]
new iLine

get_user_name(id, szName, charsmax( szName ))
get_user_ip(id, szIP, charsmax( szIP ), 1)
get_user_authid(id, szSteam, charsmax( szSteam ))

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

trim( szText )

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

server_print("%s", szText)

new szParse[6][64]
parse(szText,
szParse[1], 63,
szParse[2], 63,
szParse[3], 63,
szParse[4], 63,
szParse[5], 63
)

if(equal(szName, szParse[1]) || equal(szIP, szParse[1]) || equal(szSteam, szParse[1]))
{
if(!iEnable)
{
new szBlock[256]
formatex(szBlock, charsmax( szBlock ), ";%s", szText)

write_file(g_LoadUsers, szBlock, (iLine - 1))
client_disconnect(id)

break
}

formatex(szText, charsmax( szText ), "^"%s^" ^"%s^" ^"%s^" ^"%s^" ^"%d^"",
strlen( szData ) ? szData : szParse[1],
strlen( szPassword ) ? szPassword : szParse[2],
strlen( szFlags ) ? szFlags : szParse[3],
strlen( szPeriod ) ? szPeriod : szParse[4],
iEditMe ? 1 : 0
)

write_file(g_LoadUsers, szText, (iLine - 1))
set_task(1.0, "CheckPlayer", id)

break
}
}
fclose( iFile )
}

/*==========================================
Корректировка systime с часовым поясом
===========================================*/
stock GetRealTime()
{
new iSysTime

new szUTC[32]
get_pcvar_string(g_Cvar[2], szUTC, charsmax( szUTC ))

if(containi(szUTC, "+") != -1)
{
replace_all(szUTC, charsmax( szUTC ), "+", "")
iSysTime = get_systime() + (3600 * str_to_num( szUTC ))
}else
if(containi(szUTC, "-") != -1)
{
replace_all(szUTC, charsmax( szUTC ), "-", "")
iSysTime = get_systime() - (3600 * str_to_num( szUTC ))
}else{
iSysTime = get_systime() + 14400
}
return iSysTime
}

/*==========================================
Конвертирование даты в systime
===========================================*/
stock ConvertPeriod( szPeriod[64] )
{
new iDay, iMouth, iYear
replace_all(szPeriod, charsmax( szPeriod ), "/", " ")

new szParse[9][32]
parse(szPeriod,
szParse[1], 31,
szParse[2], 31,
szParse[3], 31
)

iDay = str_to_num( szParse[1] )
iMouth = str_to_num( szParse[2] )
iYear = str_to_num( szParse[3] )

new iSecond[4]
if(iYear)
{
new iVar[5]

iVar[1] = iYear / 4
iVar[2] = iYear - iVar[1]
iVar[3] = iVar[1] - 492
iVar[4] = iVar[2] - 1478

iVar[3] *= 31622400
iVar[4] *= 31536000

iSecond[1] = iVar[3] + iVar[4]
}

if(iMouth)
{
for(new i = (iMouth - 1); i >= 1; i--)
{
iMouth -= 1

switch( iMouth )
{
case 1, 3, 5, 7, 8, 10:
{
iSecond[2] += 2678400
}

case 2 :
{
if(iYear % 4 == 0)
{
iSecond[2] += 2505600
}else{
iSecond[2] += 2419200
}
}

case 4, 6, 9, 11:
{
iSecond[2] += 2592000
}
}
}
}

if(iDay)
{
iSecond[3] = (iDay * 86400) - 1
}
return iSecond[1] + iSecond[2] + iSecond[3]
}

/*==========================================
Проверка доступности пункта
===========================================*/
stock GetMenuFlag(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
}

/*==========================================
Получение окончаний
===========================================*/
stock GetEndPeriod(id)
{
new szText[512]

if(get_pcvar_num( g_Cvar[3] ) != 1)
return szText

if(equal(g_EPlayer[id][EPlayerDate], "unlimited"))
{
formatex(szText, charsmax( szText ), "%L", LANG_PLAYER, "UM_PERIOD_UNLIMITED")
}else
if(g_EPlayer[id][EPlayerDay] >= 1)
{
formatex(szText, charsmax( szText ), "%L", LANG_PLAYER, "UM_PERIOD_DAY", EndWord(1, g_EPlayer[id][EPlayerDay]), g_EPlayer[id][EPlayerDate])
}else{
new szTime[32]
new iEnd, iHour, iMin

iEnd = g_EPlayer[id][EPlayerSysTime] - GetRealTime()
iHour = iEnd / 3600
iMin = (iEnd - (iHour * 3600)) / 60

++iMin

if(iHour >= 1)
{
formatex(szTime, charsmax( szTime ), "%s %s", EndWord(2, iHour), EndWord(3, iMin))
}else
if(iMin >= 1)
{
formatex(szTime, charsmax( szTime ), "%s", EndWord(3, iMin))
}
formatex(szText, charsmax( szText ), "%L", LANG_PLAYER, "UM_PERIOD_LESS", szTime)
}
return szText
}

/*==========================================
Получение окончаний( текст )
===========================================*/
stock EndWord(iType, iNum)
{
new szText[128]
new iLen

static const szWords[][][] =
{
{"", "", ""},
{"ENDWORLD_DAY1", "ENDWORLD_DAY2", "ENDWORLD_DAY3"},
{"ENDWORLD_HOUR1", "ENDWORLD_HOUR2", "ENDWORLD_HOUR3"},
{"ENDWORLD_MIN1", "ENDWORLD_MIN2", "ENDWORLD_MIN3"}
}

iLen += formatex(szText, charsmax( szText ) - iLen, "%d", iNum)

switch( iNum )
{
case 1, 21, 31, 41, 51:
{
iLen += formatex(szText[iLen], charsmax( szText ) - iLen, " %L", LANG_PLAYER, szWords[iType][0] )
}

case 2..4, 22..24, 32..34, 42..44, 52..54:
{
iLen += formatex(szText[iLen], charsmax( szText ) - iLen, " %L", LANG_PLAYER, szWords[iType][1] )
}

default:
{
iLen += formatex(szText[iLen], charsmax( szText ) - iLen, " %L", LANG_PLAYER, szWords[iType][2] )
}
}
return szText
}

/*==========================================
Проверка конца прав
===========================================*/
stock CheckEnd(id)
{
if(!is_user_admin(id))
return PLUGIN_CONTINUE

if(g_EPlayer[id][EPlayerSysTime] == -1)
return PLUGIN_CONTINUE

new iEnd = g_EPlayer[id][EPlayerSysTime] - GetRealTime()
if(iEnd <= 0)
{
g_EPlayer[id][EPlayerDate] = ""
g_EPlayer[id][EPlayerDay] = 0
g_EPlayer[id][EPlayerSysTime] = 0
g_EPlayer[id][EPlayerEditMe] = 0

remove_user_flags(id)
show_menu(id, 0, "^n", 1)

EditUser(id, 0)

PrintChatColor(id, PRINT_COLOR_RED, "%L", LANG_PLAYER, "UM_ENDPERIOD_1")
PrintChatColor(id, PRINT_COLOR_RED, "%L", LANG_PLAYER, "UM_ENDPERIOD_2")
PrintChatColor(id, PRINT_COLOR_RED, "%L", LANG_PLAYER, "UM_ENDPERIOD_3")
}
return PLUGIN_CONTINUE
}
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя Kpacava
сообщение 17.6.2015, 22:15
Сообщение #12


Стаж: 14 лет

Сообщений: 464
Благодарностей: 75
Полезность: 161

Bloo, всё спасибо, Решено
пуля в пулю, и так как надо работает!

Отредактировал: Kpacava, - 17.6.2015, 22:15
Прикрепленные файлы:
Прикрепленное изображение
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Kpacava
сообщение 17.6.2015, 22:23
Сообщение #13


Стаж: 14 лет

Сообщений: 464
Благодарностей: 75
Полезность: 161

Цитата(Kpacava @ 18.6.2015, 10:15) *
Bloo, всё спасибо, Решено
пуля в пулю, и так как надо работает!

Опс сори не решено, сразу что-то не заметил:
открываешь меню жмешь на любой из пунктов и ничего не происходит!
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Bloo
сообщение 18.6.2015, 7:47
Сообщение #14


Стаж: 12 лет

Сообщений: 15547
Благодарностей: 6971
Полезность: 1206

Kpacava, значит что то я поломал) Не знаю что и как.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Kpacava
сообщение 18.6.2015, 8:14
Сообщение #15


Стаж: 14 лет

Сообщений: 464
Благодарностей: 75
Полезность: 161

Цитата(Bloo @ 18.6.2015, 19:47) *
Kpacava, значит что то я поломал) Не знаю что и как.

Ну может кто-то из умельцев поможет!
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя hv5dl3yu
сообщение 18.6.2015, 9:12
Сообщение #16


Стаж: 13 лет

Сообщений: 62
Благодарностей: 41
Полезность: 345

Цитата(Kpacava @ 18.6.2015, 9:14) *
Ну может кто-то из умельцев поможет!

если что-то упустил в лс

Отредактировал: hv5dl3yu, - 18.6.2015, 9:14


Цитата(proffi666 @ 9.8.2016, 9:06) [snapback]936063[/snapback]
Зачем мне деньги я купил плагин чтоб он работал! А не для того чтоб он работал, работал, а потом мне деньги возвращали
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя Kpacava
сообщение 18.6.2015, 10:23
Сообщение #17


Стаж: 14 лет

Сообщений: 464
Благодарностей: 75
Полезность: 161

Цитата(hv5dl3yu @ 18.6.2015, 20:12) *
если что-то упустил в лс

Спасибо всё работает как мне надо, проверил каждый пункт меню и действия!
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя tenb63rus
сообщение 21.6.2015, 8:17
Сообщение #18


Стаж: 12 лет

Сообщений: 817
Благодарностей: 476
Полезность: 850

Функция отображения оставшегося времени админки будет работать, если админки берутся из Бд? Здесь обязательно нужен пароль для каждого админа как я понял?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: