Non.Name
Дебютант
Подозрение об взломе админа
Здравствуйте уважаемые пользователи портала!
Сегодня мы сделаем оповещение об взломе старшим админам, и запретим использовать команды взломщику.
Сделаем команду, чтобы выдать доступ на использование команд.
Если у вас есть какие-либо предложения об улучшениях или же ошибки - пишите в теме.
Сегодня мы сделаем оповещение об взломе старшим админам, и запретим использовать команды взломщику.
Сделаем команду, чтобы выдать доступ на использование команд.
Если у вас есть какие-либо предложения об улучшениях или же ошибки - пишите в теме.
Что используется:
DC_CMD
DC_CMD
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!
Возможные ошибки:
pinfo[playerid][name] - замените на своё
pinfo[playerid][regip] - замените на своё
pinfo[playerid][admin] - замените на своё
Если же у вас нету Reg-ip, то создаём в вашем enume информации игрока regip[16], далее идём в диалог с регистрацией, и ищем последний этап регистрации ( где аккаунт добавляется в базу данных ) и вставляем туда:
Добавьте в базу данных поле regip ( тип: varchar, длина: 16 )
SendClientMessageAdmin - добавим сток
[HR][/HR]
pinfo[playerid][name] - замените на своё
pinfo[playerid][regip] - замените на своё
pinfo[playerid][admin] - замените на своё
Если же у вас нету Reg-ip, то создаём в вашем enume информации игрока regip[16], далее идём в диалог с регистрацией, и ищем последний этап регистрации ( где аккаунт добавляется в базу данных ) и вставляем туда:
Код:
GetPlayerIp(playerid, pinfo[playerid][regip], 16):
Добавляем в INSERT INTO `regip` и специфекатор '%e', после чего добавляем в аргументы pinfo[playerid][regip]
SendClientMessageAdmin - добавим сток
Код:
stock SendClientMessageAdmin(color, text[], adm)
{
foreach(new i: Player)
{
if(pinfo[i][admin] >= adm) SendClientMessage(i, color, text);
}
}
Создаём сток для получения подсети игрока:
Создаём сток для проверки данных об подсети игрока:
Можно поместить в OnPlayerSpawn, либо же в загрузку аккаунта:
Сделаем так, чтобы подозреваемый игрок не мог использовать команды и сделаем команду, чтобы можно было выдать доступ к командам. Поместить в OnPlayerCommandReceived:
Поместить в команды, либо же в конец мода:
Покажим диалог с информацией. Вставить в OnDialogResponse
Код:
stock GetPlayerSubnet(buffer[])
{// by Daniel_Cortez
for(new i=0,dots=0; ; ++i)
switch(buffer[i])
{
case '\0':
break;
case '.':
if(++dots == 2)
{
buffer[i] = '\0';
break;
}
}
}
Код:
stock CheckSubnet(playerid)
{
new nowip[16], oldip[16];
GetPlayerIp(playerid, nowip, sizeof(nowip));//Узнаём нынешний IP.
GetPlayerSubnet(nowip);//Получаем подсеть игрока.
strmid(oldip, pinfo[playerid][regip], 0, 16, 16);//Берём данные с REG-IP и записываем их в массив oldip. Изменить pinfo[playerid][regip] - на свои
GetPlayerSubnet(oldip);//Получаем подсеть игрока.
if(strcmp(nowip, oldip, true) == 0) return 1;//Данные об IP совпадают.
else return 0;//Данный об IP не совпадают.
}
Код:
if(pinfo[playerid][admin] > 0)//Проверка на админку. Замените на своё!
{
if(CheckSubnet(playerid) != 1)//Если нынешний IP не совпадает с REG-IP
{
//Происходят какие-то действия. Допустим: (Отправим игроку сообщения о том, что он подозревается во взломе и отправим сообщения админам о подозрения во взломе)
SendClientMessage(playerid, -1, !"Вы подозреваетесь во взломе. Информация отправлена старшей администрации. Ожидайте проверки!");//Отправляем сообщение подозреваемому.
static const
msg_admins[] = "У админа %s[%d] не совпадает нынешний IP с REG-IP. Введите /checkadmin";
new str[sizeof(msg_admins)+(-2+MAX_PLAYER_NAME)+(-2+4)];
format(str, sizeof(str), msg_admins, pinfo[playerid][name], playerid);//Изменить pinfo[playerid][name] - на свои
SendClientMessageAdmin(-1, str, 5);//Измените на своё. Отправляем сообщение администратором выше 5 уровня админки о возможном взломе.
SetPVarInt(playerid, "SuspicionsHacking", 1);
}
}
Код:
if(GetPVarInt(playerid, "SuspicionsHacking") == 1)//Если данный админ подозревается во взломе
{
//Происходят какие-то действия. Допустим: ( Запретим использовать команды, и отправим старшим админам о том, что данный игрок возможно взломан)
static const
msg_admins[] = "Администратор %s[%d] возможно взломан. Введите /checkadmin для проверка";
new str[sizeof(msg_admins[])+(-2+MAX_PLAYER_NAME)+(-2+4)];
format(str, sizeof(str), msg_admins, pinfo[playerid][name], playerid);//Изменить pinfo[playerid][name] - на своё
SendClientMessageAdmin(-1, str, 5);//Измените на своё. Отправляем сообщение администратором выше 5 уровня админки о возможном взломе.
return SendClientMessage(playerid, -1, !"У вас нету доступа к отправки команд."), 0;//Отправим сообщения подозреваемому и вернём 0, чтобы команда не отправилась.
}
Код:
CMD:checkadmin(playerid, params[])
{
if(pinfo[playerid][admin] < 5) return 1;//Проверка на админку. Замените на своё!
if(sscanf(params, "d", params[0])) return SendClientMessage(playerid, -1, !"Используйте /checkadmin [id]");//Если администратор неправильно ввёл команду, исправляем его.
if(!IsPlayerConnected(params[0])) return SendClientMessage(playerid, -1, !"Данный игрок не в сети");//Проверяем онлайн ли указанный ID.
if(params[0] == playerid) return SendClientMessage(playerid, -1, !"Вы указали свой id");//Если администратор указал свой ID, то выводим ему текст об ошибки.
if(GetPVarInt(params[0], "SuspicionsHacking") == 0) return SendClientMessage(playerid, -1, !"Данный администратор не подозревается во взломе");//Если же указанный ID не подозревается во взломе, то выводим текст об ошибке.
static const
dialog[] = "{FFFFFF}IP администратора: %s\nREG-IP администратора: %s\n\n\tНик: %s";
new strdialog[sizeof(dialog)+(-2+16)*2+(-2+MAX_PLAYER_NAME)], ip[16];
GetPlayerIp(params[0], ip, 16);//Узнаём нынешний IP администратора, после чего записуем полученные данные в массив ip.
format(strdialog, sizeof(strdialog), dialog, ip, pinfo[params[0]][regip], pinfo[params[0]][name]);//Изменить pinfo[params[0]][regip], pinfo[params[0]][name] - на своё.
ShowPlayerDialog(playerid, 1, DIALOG_STYLE_MSGBOX, !" ", strdialog, !"Подтвердить", !"Отказать");//Показываем диалог с информацией. Изменить ID диалога на свой. У меня это 1.
SetPVarInt(playerid, "IDsuspect", params[0]);//Ставим PVar, для передачи подозреваемого ID.
return 1;
}
Код:
switch(dialogid)
{
case 1:
{
if(response)//Если нажата левая кнопка
{
//Происходят какие-то действия. Допустим: ( Дадим игроку использовать команды )
SendClientMessage(playerid, -1, !"Вы выдали доступ к командам");//Выводим текст игроку о том, что он выдал доступ администратору к использованию команд.
SendClientMessage(GetPVarInt(playerid, "IDsuspect"), -1, !"Вам был выдан доступ к командам");//Выводим текст подозреваемому о том, что ему дали доступ к использованию команд.
DeletePVar(GetPVarInt(playerid, "IDsuspect"), "SuspicionsHacking");//Удаляем PVar у подозреваемого.
DeletePVar(playerid, "IDsuspect");//Удаляем PVar у игрока о ID подозреваемого.
}
else//Если же мы нажали правую кнопку
{
//Происходят какие-то действия. Допустим: ( Кикним игрока )
Kick(GetPVarInt(playerid, "IDsuspect"));//Кикаем подозреваемого.
SendClientMessage(playerid, -1, !"Вы отказали в доступе к командам");//Выводим текст игроку о том, что он отказал в доступе к использованию команд.
DeletePVar(playerid, "IDsuspect");//Удаляем PVar у игрока о ID подозреваемого.
}
}
}
Последнее редактирование:
