IP ban problem!
#1

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
Reply
#2

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.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)