IP ban problem! - Printable Version
+- SA-MP Forums Archive (
https://sampforum.blast.hk)
+-- Forum: SA-MP Scripting and Plugins (
https://sampforum.blast.hk/forumdisplay.php?fid=8)
+--- Forum: Scripting Help (
https://sampforum.blast.hk/forumdisplay.php?fid=12)
+--- Thread: IP ban problem! (
/showthread.php?tid=629077)
IP ban problem! -
daghost111 - 19.02.2017
Hello.Im using this ban system,its based on mySQL.It works good when it come to players name,but it wont detect banned IP.So,if player come with a diferent name it wont detect that it's IP are banned.
Code:
Код:
OnPlayerConnect
CheckDatabase(playerid);
Код:
CheckDatabase(playerid)
{
new q[200];
new playername[24];
GetPlayerName(playerid,playername,sizeof(playername));
format(q, 200, "SELECT * FROM bans WHERE name = '%s' ORDER BY id DESC LIMIT 1", playername);
mysql_query(q,THREAD_BAN_CHECK_NAME,playerid);
new ip[16];
GetPlayerIp(playerid, ip, sizeof(ip));
format(q, 200, "SELECT * FROM bans WHERE ip = '%s' ORDER BY id DESC LIMIT 1", ip);
mysql_query(q,THREAD_BAN_CHECK_IP,playerid);
}
Код:
Onqueryfinish:
public OnQueryFinish(query[], resultid, extraid, connectionHandle)
{
new string2[164];
switch(resultid)
{
case THREAD_BAN_CHECK_NAME:
{
mysql_store_result();
if(mysql_num_rows() == 1)
{
if(mysql_retrieve_row())
{
new banid, expiry, reason[64], admin[32], tmp[64];
GET_INT(banid, "id");
//GET_INT(bantime, "issue_time");
//GET_INT(length, "ban_time");
GET_INT(expiry, "expiry_time");
GET_STR(reason, "reason");
GET_STR(admin, "admin");
new curtime = gettime();
if(curtime < expiry)
{
new ip[32];
GetPlayerIp(extraid, ip, 32);
format(ToBeKickedString[extraid], 512, "You have been banned from this server for the following reason:\n\n%s\nIf you believe this is a bug, simply relog and rejoin the server.\nIf you think that this ban was in error, please go to www.panel-la.tk and appeal it.\nYou will need the following info to appeal the ban:\n\nBan ID: %d\nAdmin that banned you: %s\nReason of the ban: %s\nBan expiration: %s", reason, banid, admin, reason, expiry);
format(string2, sizeof(string2), "{AA3333}AdmWarning{FFFF00}: %s (IP:%s) tried to login whilst banned and has been auto-banned.", GetPlayerNameEx( extraid ), ip);
ABroadCast(COLOR_YELLOW, string2, 2);
ToBeKicked[extraid] = 1;
}
}
}
mysql_free_result();
}
case THREAD_BAN_CHECK_IP:
{
mysql_store_result();
if(mysql_num_rows() == 1)
{
if(mysql_retrieve_row())
{
new banid, expiry, reason[64], admin[32], tmp[64], dbip[16];
GET_INT(banid, "id");
//GET_INT(bantime, "issue_time");
//GET_INT(length, "ban_time");
GET_INT(expiry, "expiry_time");
GET_STR(reason, "reason");
GET_STR(admin, "admin");
GET_STR(dbip, "ip");
new curtime = gettime();
new ip[16];
GetPlayerIp(extraid,ip,sizeof(ip));
if(strcmp(ip, dbip) == 0 && curtime < expiry)
{
format(ToBeKickedString[extraid], 512, "Your IP has been banned from this server for the following reason:\n\n%s\nIf you believe this is a bug, simply relog and rejoin the server.\n\nIf you think that this ban was in error, please go to www.panel-la.tk and appeal it.\nYou will need the following info to appeal the ban:\n\nBan ID: %d\nAdmin that banned you: %s\nReason of the ban: %s", reason, banid, admin, reason);
ToBeKicked[extraid] = 1;
}
}
}
mysql_free_result();
}
Something must be wrong on THREAD_BAN_CHECK_IP. Anyone can help me please?Thanks
Re: IP ban problem! -
michael2572 - 20.02.2017
First, I'd recommend updating your MySQL plugin to the latest. Rather than using OnQueryFinish, you can create named callbacks like so:
Код:
mysql_tquery(connectionHandle, "(your query)", "OnIpChecked", "d", playerid);
forward OnIpChecked(playerid);
public OnIpChecked(playerid)
{
if (cache_get_row_count())
{
// Block playerid
}
}
It might not be working right now because you could be getting back 2+ rows, and your condition checks for exactly 1. The above checks to see if 1 or more row is returned.