· 7 years ago · Dec 30, 2018, 11:08 AM
1function get_subnet_from_ip(ip){
2 local subnet = split(ip, ".");
3 subnet = subnet[0] +"."+ subnet[1];
4 return subnet;
5}
6
7function is_subnet_in_white_list(ip){
8 local subnet = get_subnet_from_ip(ip);
9 local q = QuerySQL(::subnet_whitelist, "SELECT * FROM subnet_whitelist WHERE subnet = '"+ escapeSQLString(subnet) +"'");
10 if(q){
11 return true;
12 }
13 return false;
14}
15
16function add_subnet_to_white_list(subnet, player, admin){
17 QuerySQL(::subnet_whitelist, "INSERT INTO subnet_whitelist (subnet, player, admin) VALUES ('" + escapeSQLString(subnet) + "','" + escapeSQLString(player) + "','" + escapeSQLString(admin) + "')");
18}
19
20function onScriptLoad(){
21 new_subnet_whitelist_items <- {};
22 subnet_whitelist <- ConnectSQL("subnet_whitelist.db");
23 QuerySQL(::subnet_whitelist, "CREATE TABLE IF NOT EXISTS subnet_whitelist (subnet TEXT, player TEXT, admin TEXT)");
24}
25
26function onPlayerJoin(player){
27 local is_allowed = false;
28 if(!is_allowed&&!is_subnet_in_white_list(player.IP)){
29 local new_whitelist_item_id = 1;
30 while(::new_subnet_whitelist_items.rawin(new_whitelist_item_id)){
31 new_whitelist_item_id++;
32 }
33 new_subnet_whitelist_items.rawset(new_whitelist_item_id, {"subnet" : get_subnet_from_ip(player.IP), "nick" : player.Name});
34 Message("[#ff0000]>> Auto-Kick:["+ player.Name+ "] [#ffffff]Reason:[ wrong country ]");
35 Message("[#ff0000]>> to allow this player to join type /whitelist "+ new_whitelist_item_id);//message to admin
36 Message("*kick*");
37 return;
38 }
39 Message("*not kick*");
40}
41
42function onPlayerCommand(player, cmd, text){
43 if(("whitelist" == cmd)&&(text)){
44 local new_whitelist_item_id = text.tointeger();
45 if(::new_subnet_whitelist_items.rawin(new_whitelist_item_id)){
46 local white = ::new_subnet_whitelist_items.rawget(new_whitelist_item_id);
47 if(::is_subnet_in_white_list(white.subnet)){
48 Message("[#00ff00]>> subnet ["+ white.subnet +"] is allowed already");
49 } else {
50 ::add_subnet_to_white_list(white.subnet, white.nick, player.Name);
51 Message("[#00ff00]>> subnet ["+ white.subnet +"] of player ["+ white.nick +"] has been added to whitelist by admin "+ player.Name);
52 }
53 }
54 }
55}