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

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

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

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

[Вопрос] Разграничение прав администраторов

Статус пользователя Riveran
сообщение 28.1.2018, 23:19
Сообщение #1
Стаж: 8 лет 3 месяца

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

Решил создать свой сервер, и вот сразу столкнулся с такой проблемой, что есть вероятность, что могут купить привилегию дети, поэтому решил продумать систему ограничений прав по кику/бану/слэпу. Чтобы не выдавать всем флаг "а". Суть вопроса, как можно реализовать подобное: К примеру, я продал привилегию ребенку с флагами "bcdefiju", хочу сделать так, чтобы он не смог забанить или кикнуть игрока почти с такими же флагами (к примеру, адекватному администратору мы добавим флаг "о").
Почитав форум, я понял, что мне нужно копаться в файле plmenu. Быстро пробежавшись по нему глазами, я нашел нужные мне строчки кода:
Cкрытый текст
Код:
displayKickMenu(id, pos)
{
if (pos < 0)
return

get_players(g_menuPlayers[id], g_menuPlayersNum[id])

new menuBody[512]
new b = 0
new i
new name[32]
new start = pos * 8

if (start >= g_menuPlayersNum[id])
start = pos = g_menuPosition[id] = 0

new len = format(menuBody, 511, g_coloredMenus ? "\y%L\R%d/%d^n\w^n" : "%L %d/%d^n^n", id, "KICK_MENU", pos + 1, (g_menuPlayersNum[id] / 8 + ((g_menuPlayersNum[id] % 8) ? 1 : 0)))
new end = start + 8
new keys = MENU_KEY_0

if (end > g_menuPlayersNum[id])
end = g_menuPlayersNum[id]

for (new a = start; a < end; ++a)
{
i = g_menuPlayers[id][a]
get_user_name(i, name, 31)

if (access(i, ADMIN_IMMUNITY) && i != id)
{
++b

if (g_coloredMenus)
len += format(menuBody[len], 511-len, "\d%d. %s^n\w", b, name)
else
len += format(menuBody[len], 511-len, "#. %s^n", name)
} else {
keys |= (1<<b)

if (is_user_admin(i))
len += format(menuBody[len], 511-len, g_coloredMenus ? "%d. %s \r*^n\w" : "%d. %s *^n", ++b, name)
else
len += format(menuBody[len], 511-len, "%d. %s^n", ++b, name)
}
}

if (end != g_menuPlayersNum[id])
{
format(menuBody[len], 511-len, "^n9. %L...^n0. %L", id, "MORE", id, pos ? "BACK" : "EXIT")
keys |= MENU_KEY_9
}
else
format(menuBody[len], 511-len, "^n0. %L", id, pos ? "BACK" : "EXIT")

show_menu(id, keys, menuBody, -1, "Kick Menu")
}
Но понял, что если дите будет не слишком глупое оно поймет, что можно использовать команду через консоль, просто введя в туда команду "amx_kick #1", из этого я сделал вывод, что мне нужно лесть дальше, поэтому я полез в admincmd, нашел там нужный мне код, но не смог понять, как можно его модифицировать. Может кто-то уже сталкивался с подобным и смог бы дать мне совет, либо дал ссылку на топик, где можно получить необходимые знания, чтобы ковыряться уже в этом коде
Cкрытый текст
Код:
public cmdKick(id, level, cid)
{
if (!cmd_access(id, level, cid, 2))
return PLUGIN_HANDLED

new arg[32]
read_argv(1, arg, 31)
new player = cmd_target(id, arg, CMDTARGET_OBEY_IMMUNITY | CMDTARGET_ALLOW_SELF)

if (!player)
return PLUGIN_HANDLED

new authid[32], authid2[32], name2[32], name[32], userid2, reason[32]

get_user_authid(id, authid, 31)
get_user_authid(player, authid2, 31)
get_user_name(player, name2, 31)
get_user_name(id, name, 31)
userid2 = get_user_userid(player)
read_argv(2, reason, 31)
remove_quotes(reason)

log_amx("Kick: ^"%s<%d><%s><>^" kick ^"%s<%d><%s><>^" (reason ^"%s^")", name, get_user_userid(id), authid, name2, userid2, authid2, reason)

show_activity_key("ADMIN_KICK_1", "ADMIN_KICK_2", name, name2);

if (is_user_bot(player))
server_cmd("kick #%d", userid2)
else
{
if (reason[0])
server_cmd("kick #%d ^"%s^"", userid2, reason)
else
server_cmd("kick #%d", userid2)
}

console_print(id, "[AMXX] Client ^"%s^" kicked", name2)

return PLUGIN_HANDLED
}


Важная Информация
Новичок в мире CS, просьба, не портите ни себе, ни мне нервы, просто укажите, в какое русло мне двигаться.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: