Rolt
Ученик
Писал систему бана по IP для своего сервера и решил выложить сюда, может кому пригодиться.
Итак приступим.
1. Для начала создадим в папке "scriptfiles" ещё одну папку с названием "logi".
2. Теперь в созданной нами папке создаём файл "Banip.ini". Важно: Формат файла обязательно должен быть .ini!
3. Ищем в моде public OnPlayerConnect(playerid).
И вставляем туда:
4. Теперь переходим непосредственно к командам.
В public OnPlayerCommandText(playerid, cmdtext[]) вставляем.
Вот и всё, теперь при каждом коннекте игрока, сервер будет проверять наличие его IP адреса в файле Banip.ini.
Автор: Rolt
P.S. С оптимизацией у меня не очень.
P.S.S. Если есть уже такая тема, то удалите мою. (Искал похожие темы, не нашёл).
Итак приступим.
1. Для начала создадим в папке "scriptfiles" ещё одну папку с названием "logi".
2. Теперь в созданной нами папке создаём файл "Banip.ini". Важно: Формат файла обязательно должен быть .ini!
3. Ищем в моде public OnPlayerConnect(playerid).
И вставляем туда:
PHP:
new ip[MAX_PLAYERS], playerip[64];
GetPlayerIp(playerid, playerip, sizeof(playerip));
new iniFile = ini_openFile("logi/Banip.ini");
ini_getInteger(iniFile, playerip,ip[playerid]);
ini_closeFile(iniFile);
if(ip[playerid] == 1) return SendClientMessage(playerid, COLOR_RED, "Ваш IP адрес заблокирован!"), Kick(playerid); //Функцию Kick(playerid) замените на свою.
В public OnPlayerCommandText(playerid, cmdtext[]) вставляем.
PHP:
if(strcmp(cmd, "/banip", true) == 0)
{
if(PlayerInfo[playerid][pAdmin] >= 2)
{
new sendername[256];
GetPlayerName(playerid, sendername, sizeof(sendername));
new length = strlen(cmdtext);
while ((idx < length) && (cmdtext[idx] <= ' '))
{
idx++;
}
new offset = idx;
new result[64];
while ((idx < length) && ((idx - offset) < (sizeof(result) - 1)))
{
result[idx - offset] = cmdtext[idx];
idx++;
}
result[idx - offset] = EOS;
if(!strlen(result)) return SendClientMessage(playerid, COLOR_WHITE, "Используйте: /banip [IP адресс]");
if(strfind(result, ".", true) != -1)
{
new iniFile = ini_openFile("logi/Banip.ini");
format(string, sizeof(string), "%s", result);
ini_setInteger(iniFile,string,1);
ini_closeFile(iniFile);
format(string, sizeof(string), "[Banip] %s заблокировал IP: %s", sendername, result);
SendAdminMessage(COLOR_ADMIN, string);//SendAdminMessage - это чат админов, замените на свой!
printf("[Banip] %s заблокировал IP: %s", sendername, result);
return 1;
}
else return SendClientMessage(playerid, COLOR_WHITE, "Введён неверный IP!");
}
}
if(strcmp(cmd, "/unbanip", true) == 0)
{
if(PlayerInfo[playerid][pAdmin] >= 2)
{
new sendername[256];
GetPlayerName(playerid, sendername, sizeof(sendername));
new length = strlen(cmdtext);
while ((idx < length) && (cmdtext[idx] <= ' '))
{
idx++;
}
new offset = idx;
new result[64];
while ((idx < length) && ((idx - offset) < (sizeof(result) - 1)))
{
result[idx - offset] = cmdtext[idx];
idx++;
}
result[idx - offset] = EOS;
if(!strlen(result)) return SendClientMessage(playerid, COLOR_WHITE, "Используйте: /unbanip [IP адресс]");
if(strfind(result, ".", true) != -1)
{
new iniFile = ini_openFile("logi/Banip.ini");
format(string, sizeof(string), "%s", result);
ini_setInteger(iniFile,string,0);
ini_closeFile(iniFile);
format(string, sizeof(string), "[Unbanip] %s разблокировал IP: %s", sendername, result);
SendAdminMessage(COLOR_ADMIN, string);//SendAdminMessage - это чат админов, замените на свой!
printf("[Banip] %s разблокировал IP: %s", sendername, result);
return 1;
}
else return SendClientMessage(playerid, COLOR_WHITE, "Введён неверный IP!");
}
}
Автор: Rolt
P.S. С оптимизацией у меня не очень.
P.S.S. Если есть уже такая тема, то удалите мою. (Искал похожие темы, не нашёл).
