|
Стаж: 8 лет 3 месяца
Сообщений: 2
Благодарностей: 1
Полезность: 0
|
Решил создать свой сервер, и вот сразу столкнулся с такой проблемой, что есть вероятность, что могут купить привилегию дети, поэтому решил продумать систему ограничений прав по кику/бану/слэпу. Чтобы не выдавать всем флаг "а". Суть вопроса, как можно реализовать подобное: К примеру, я продал привилегию ребенку с флагами "bcdefiju", хочу сделать так, чтобы он не смог забанить или кикнуть игрока почти с такими же флагами (к примеру, адекватному администратору мы добавим флаг "о"). Почитав форум, я понял, что мне нужно копаться в файле plmenu. Быстро пробежавшись по нему глазами, я нашел нужные мне строчки кода: Код:
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, нашел там нужный мне код, но не смог понять, как можно его модифицировать. Может кто-то уже сталкивался с подобным и смог бы дать мне совет, либо дал ссылку на топик, где можно получить необходимые знания, чтобы ковыряться уже в этом коде Код:
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, просьба, не портите ни себе, ни мне нервы, просто укажите, в какое русло мне двигаться.
|