/*
Author Goddameit
Version 2013/01/28
Web http://bit.ly/MDuQ9F
Special thanks for :
Euphy >>
New 'reason' and command input type
QQfoolsorellina >>
IP range check concept
*/
/*
SQL Table:
CREATE TABLE IF NOT EXISTS `ipbanlist2` (
`list` varchar(255) NOT NULL default '',
`ban_reason` varchar(255) NOT NULL default '',
`unban_reason` varchar(255) NOT NULL default '',
`status` tinyint(1) NOT NULL default '0',
`ban_id` int(11) unsigned NOT NULL default '0',
`unban_id` int(11) unsigned NOT NULL default '0',
KEY (`list`)
) ENGINE=MyISAM;
*/
- script ban_ip_atcommand -1,{
OnInit:
bindatcmd "banip",strnpcinfo(3)+"::OnBan";
bindatcmd "unbanip",strnpcinfo(3)+"::OnUnBan";
end;
OnBan:
set .@atcmd_parameters$[0],escape_sql(.@atcmd_parameters$[0]);
set .@atcmd_parameters$[1],escape_sql(.@atcmd_parameters$[1]);
set .@tmp$, implode(.@atcmd_parameters$," ");
set .@reason$, substr(.@tmp$,getstrlen(.@atcmd_parameters$[0]),getstrlen(.@tmp$)-1);
set .@oaid, getcharid(3);
set .@ip$, replacestr(.@atcmd_parameters$[0], "*", "%");
for(set .@j,0;;set .@j,.@j+1)
{
deletearray .@aid[0],128;
query_sql "SELECT `account_id` FROM `login` WHERE `last_ip` LIKE '"+.@ip$+"' LIMIT "+(.@j*127)+",127",.@aid;
set .@num, getarraysize(.@aid);
for( set .@i,0; .@i<.@num; set .@i,.@i+1 )
{
if( attachrid(.@aid[.@i]) )
{
Announce "You have been banned because GM reject IP ["+.@atcmd_parameters$[0]+"]. Reason : "+.@reason$,bc_self;
addtimer 1000,strnpcinfo(0)+"::OnKick";
detachrid;
}
}
if( .@num < 127 )
break;
}
attachrid .@oaid;
query_sql "SELECT `ban_id` FROM `ipbanlist2` WHERE `list` = '"+.@atcmd_parameters$[0]+"'",.@c;
if( .@c )
{
query_sql "UPDATE `ipbanlist2` SET `status` = 1 WHERE `list` = '"+.@atcmd_parameters$[0]+"'";
query_sql "UPDATE `ipbanlist2` SET `ban_id` = "+getcharid(3)+" WHERE `list` = '"+.@atcmd_parameters$[0]+"'";
query_sql "UPDATE `ipbanlist2` SET `ban_reason` = '"+.@reason$+"' WHERE `list` = '"+.@atcmd_parameters$[0]+"'";
}
else
query_sql "INSERT `ipbanlist2` VALUES('"+.@atcmd_parameters$[0]+"','"+.@reason$+"','',1,"+.@oaid+",0)";
message strcharinfo(0),"Ban IP:"+.@atcmd_parameters$[0];
end;
OnUnBan:
set .@atcmd_parameters$[0],escape_sql(.@atcmd_parameters$[0]);
set .@atcmd_parameters$[1],escape_sql(.@atcmd_parameters$[1]);
query_sql "UPDATE `ipbanlist2` SET `status` = 0 WHERE `list` = '"+.@atcmd_parameters$[0]+"'";
query_sql "UPDATE `ipbanlist2` SET `unban_id` = "+getcharid(3)+" WHERE `list` = '"+.@atcmd_parameters$[0]+"'";
query_sql "UPDATE `ipbanlist2` SET `unban_reason` = '"+.@atcmd_parameters$[1]+"' WHERE `list` = '"+.@atcmd_parameters$[0]+"'";
message strcharinfo(0),"Unban IP:"+.@atcmd_parameters$[0];
end;
OnPCLoginEvent:
query_sql "SELECT `last_ip` FROM `login` WHERE `account_id` = "+getcharid(3),.@ip$;
set .@ip$, .@ip$[0];
deletearray .@my_array$[0],128;
explode(.@my_array$, .@ip$, ".");
setarray .@my_array1$[0],.@my_array$[0],.@my_array$[1],.@my_array$[2],"*";
setarray .@my_array2$[0],.@my_array$[0],.@my_array$[1],"*","*";
setarray .@my_array3$[0],.@my_array$[0],"*","*","*";
setarray .@my_array4$[0],"*","*","*","*";
set .@my_array1$,implode(.@my_array1$, ".");
set .@my_array2$,implode(.@my_array2$, ".");
set .@my_array3$,implode(.@my_array3$, ".");
set .@my_array4$,implode(.@my_array4$, ".");
query_sql "SELECT `list`,`ban_reason` FROM `ipbanlist2` WHERE `list` = '"+.@my_array1$+"' OR `list` = '"+.@my_array2$+"' OR `list` = '"+.@my_array3$+"' OR `list` = '"+.@my_array4$+"' ",.@list$,.@ban_reason$;
set .@num, getarraysize(.@list$);
if( .@num )
{
Announce "You have been banned because GM reject IP ["+.@list$[0]+"]. Reason : "+.@ban_reason$[0],bc_self;
addtimer 5000,strnpcinfo(0)+"::OnKick";
}
end;
OnKick:
atcommand "@kick "+strcharinfo(0);
end;
}