Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <a_samp>
- //#include <timerfix> // Фикс таймеров
- new ShowIPRange[32]; // Если IP играка забанен, сюда попадает диапазон, в котором он забанен.
- public OnFilterScriptInit()
- {
- print("\n ------------------------------------- ");
- print(" | Range Ban System 1.0 |");
- print(" |By Dragon_Knight (ex: FITZ_NICK) 2012|");
- print(" ------------------------------------- \n");
- return 1;
- }
- public OnFilterScriptExit()
- {
- return 1;
- }
- public OnPlayerConnect(playerid)
- {
- if(IsPlayerNPC(playerid)) return 1;
- SetTimerEx("CheckPlayer",2500,false,"d",playerid);
- return 1;
- }
- public OnPlayerDisconnect(playerid, reason)
- {
- return 1;
- }
- public OnPlayerCommandText(playerid, cmdtext[])
- {
- new cmd[128], idx;
- new strmsg[200];
- cmd = strtok(cmdtext, idx);
- if(strcmp(cmd, "/rangeadd", true) == 0)
- {
- new rangeIP[32];
- rangeIP = strtok(cmdtext, idx);
- if(!strlen(rangeIP))
- {
- SendClientMessage(playerid,0xFF0000FF,"Использование: /rangeadd [диапазон]. Например: '/rangeban 192.168.0.0-192.168.0.255'");
- return 1;
- }
- new File:f = fopen("/range_ban.lst",io_append);
- if(f)
- {
- new writestr[64];
- format(writestr,sizeof(writestr),"%s\n",rangeIP);
- fwrite(f,writestr);
- fclose(f);
- format(strmsg,sizeof(strmsg),"[RBS]: Диапазон адресов: '%s' ушпешно добавлен в банлист",rangeIP);
- SendClientMessage(playerid,0x00FF00FF,strmsg);
- }
- else
- {
- format(strmsg,sizeof(strmsg),"[RBS]: Ошибка добавления диапазона адресов: '%s'",rangeIP);
- SendClientMessage(playerid,0xFF0000FF,strmsg);
- }
- return 1;
- }
- if(strcmp(cmd, "/rangecheck", true) == 0)
- {
- new checkIP[32];
- checkIP = strtok(cmdtext, idx);
- if(!strlen(checkIP))
- {
- SendClientMessage(playerid,0xFF0000FF,"Использование: /rangecheck [ip адрес]. Например: '/rangeban 192.168.0.1'");
- return 1;
- }
- switch(CheckIPBan(checkIP))
- {
- case -1:
- {
- SendClientMessage(playerid,0xFF0000FF,"[RBS]: При чтении файла произошла ошибка");
- }
- case 0:
- {
- format(strmsg,sizeof(strmsg),"[RBS]: IP адрес: '%s' не находиться в банлисте",checkIP);
- SendClientMessage(playerid,0x00FF00FF,strmsg);
- }
- case 1:
- {
- format(strmsg,sizeof(strmsg),"[RBS]: IP адрес: '%s' находиться в банлисте. Забаненый диапазон: '%s'",checkIP,ShowIPRange);
- SendClientMessage(playerid,0xFF6600FF,strmsg);
- }
- }
- return 1;
- }
- return 0;
- }
- forward CheckPlayer(playerid);
- public CheckPlayer(playerid)
- {
- new PlayerIP[16], strmsg[200];
- GetPlayerIp(playerid,PlayerIP,sizeof(PlayerIP));
- switch(CheckIPBan(PlayerIP))
- {
- case -1:
- {
- SendClientMessage(playerid,0xFF0000FF,"[RBS]: При чтении файла произошла ошибка. Мы проверим Вас через 30 секунд.");
- SetTimerEx("CheckPlayer",30000,false,"d",playerid);
- }
- case 0:
- {
- SendClientMessage(playerid,0x00FF00FF,"[RBS]: Всё нормально, можете играть.");
- }
- case 1:
- {
- format(strmsg,sizeof(strmsg),"[RBS]: IP адрес: '%s' находиться в банлисте. Забаненый диапазон: '%s'",PlayerIP,ShowIPRange);
- SendClientMessage(playerid,0xFF6600FF,strmsg);
- Kick(playerid);
- }
- }
- }
- CheckIPBan(playerIP[])
- {
- new bool:IPFound;
- new File: f = fopen("/range_ban.lst",io_read), buff[32];
- if(!f)
- {
- print("\n[RBS]: Error reading banlist file\n");
- return -1;
- }
- while(fread(f,buff))
- {
- new IPRange[2][16], FirstIP, IP[16], CurrentIP, LastIP;
- strclr(buff);
- split(buff,IPRange,'-');
- FirstIP = EncodeIP(IPRange[0]);
- format(IP,sizeof(IP),"%s",playerIP); // Тапорка. Так мы указываем размер массива.
- CurrentIP = EncodeIP(IP);
- LastIP = EncodeIP(IPRange[1]);
- if(FirstIP <= CurrentIP <= LastIP)
- {
- IPFound = true;
- format(ShowIPRange,sizeof(ShowIPRange),"%s",buff);
- break;
- }
- }
- fclose(f);
- if(IPFound == true) return 1;
- else return 0;
- }
- //-----------------------------------[Стоки]------------------------------------
- stock split(const strsrc[], strdest[][], delimiter = '|')
- {
- new i, li, aNum, len, srclen = strlen(strsrc);
- while(i <= srclen)
- {
- if (strsrc[i] == delimiter || i == srclen)
- {
- len = strmid(strdest[aNum], strsrc, li, i, 128);
- strdest[aNum][len] = 0;
- li = i + 1;
- aNum++;
- }
- i++;
- }
- }
- stock EncodeIP(ip[], size=sizeof(ip))
- {
- new val=0, acc=0, s=3;
- for(new i=0; i < size; i++)
- {
- switch(ip[i])
- {
- case '.', '\0':
- {
- val += acc << (s*8);
- acc = 0;
- if ((s--) == 0 || ip[i] == '\0') break;
- }
- case '0'..'9':
- {
- acc = (acc * 10) + (ip[i] - '0');
- }
- case '*': continue;
- default: printf("WARNING: unknown character #%d in ip address '%s': %c", ip[i], ip, ip[i]);
- }
- }
- return val;
- }
- stock DecodeIP(value)
- {
- new ip[16];
- format(ip,sizeof(ip),"%i.%i.%i.%i",(value >> 24) & 0x000000FF,(value >> 16) & 0x000000FF,(value >> 8) & 0x000000FF,(value) & 0x000000FF);
- return ip;
- }
- stock strclr(str[])
- {
- for(new i=0; i<strlen(str); i++)
- {
- if(str[i] == '\n' || str[i] == '\r')
- {
- strdel(str,i,i+2);
- }
- }
- }
- stock strtok(const string[], &index)
- {
- new length = strlen(string);
- while ((index < length) && (string[index] <= ' ')) index++;
- new offset = index;
- new result[32];
- while ((index < length) && (string[index] > ' ') && ((index - offset) < (sizeof(result) - 1)))
- {
- result[index - offset] = string[index];
- index++;
- }
- result[index - offset] = EOS;
- return result;
- }
- //------------------------------------------------------------------------------
Advertisement
Add Comment
Please, Sign In to add comment