08.12.2012, 23:53
I have an /unban, /checkban and /tempban system, it's currently set at rcon command only, but I wanna set it as level 5+ admin command. MySQL is working fine. So this is my admin command style:
And here is the /checkban /unban /tempban system:
Код:
if(PlayerInfo[playerid][pAdmin] >= 1)
{
Код:
#include <a_samp>
#include <a_mysql>
#include <zcmd>
#include <sscanf2>
#define SCRIPT_VERSION "1.5"
#define RED_COLOR 0xFF0000FF
#define GREEN_COLOR 0x00FF32FF
#define dbHost ""
#define dbPass ""
#define dbUser ""
#define dbName ""
new Plname[32];
new Otherid;
new PIP[16];
public OnFilterScriptInit()
{
mysql_connect(dbHost,dbUser,dbUser,dbPass);
mysql_debug(1);
mysql_query("CREATE TABLE IF NOT EXISTS Bans(Username VARCHAR(32), Admin VARCHAR(32), IP VARCHAR(16), Reason VARCHAR(64), Seconds INT(12), Banned INT(5) )");
return 1;
}
public OnFilterScriptExit()
{
mysql_close();
return 1;
}
CMD:tempban(playerid, params[])
{
new reason[64], Reason[64], Mins, Hours, Days, Query[256], String[128];
if(!IsPlayerAdmin(playerid)) return 0; //You have to be logged into rcon.
if(sscanf(params, "uiiiS(No reason)[64]", Otherid, Mins, Hours, Days, reason)) return SendClientMessage(playerid, RED_COLOR, "Syntax: /ban <playerid> <minutes> <hours> <days> <reason[Optional]>");
if(!IsPlayerConnected(Otherid)) return SendClientMessage(playerid, RED_COLOR, "[Error]: Player not connected");
if(strlen(reason) > 64) return SendClientMessage(playerid, RED_COLOR, "[Error]: The ban reason cannot exceed 64 characters!");
new CTS = ((Mins*60) + (Hours*3600) + (Days*86400));
mysql_real_escape_string(reason, Reason);
format(Query, sizeof(Query), "INSERT INTO `Bans` (Username, Admin, IP, Reason, Seconds, Banned) VALUES ('%s', '%s', '%s', '%s', '%d', 1)", PlayerName(Otherid), PlayerName(playerid), GetIP(Otherid), Reason, (CTS+gettime()));
mysql_query(Query);
format(String, sizeof(String), "%s (%i) has been banned by %s (%i) for: %s", PlayerName(Otherid), Otherid, PlayerName(playerid), playerid, reason);
SendClientMessageToAll(RED_COLOR, String);
Kick(Otherid);
return 1;
}
CMD:checkban(playerid, params[])
{
new account[24], Query[128], String[128];
new reason[64], user[32], admin[24], IP[16], i[128];
if(!IsPlayerAdmin(playerid)) return 0; //You have to be logged into rcon.
if(sscanf(params, "s[24]", account)) return SendClientMessage(playerid, RED_COLOR, "Syntax: /checkban [Account]");
if(strlen(account) > 24) return SendClientMessage(playerid, RED_COLOR, "[Error]: Player name cannot exceed 24 characters!");
format(Query, sizeof(Query), "SELECT Username, Reason, Admin, IP FROM `Bans` WHERE `Username` = '%s' AND `Banned` = 1 LIMIT 1", account);
mysql_query(Query);
mysql_store_result();
if(mysql_num_rows() == 0)
{
mysql_free_result();
format(String, sizeof(String), "[Error]: Name %s doesn't exists in ban database!", account);
SendClientMessage(playerid, RED_COLOR, String);
return 1;
}
else if(mysql_num_rows() != 0)
{
while(mysql_fetch_row_format(Query, "|"))
{
mysql_fetch_field_row(i, "Username"); format(user, sizeof(user), i);
mysql_fetch_field_row(i, "Reason"); format(reason, sizeof(reason), i);
mysql_fetch_field_row(i, "Admin"); format(admin, sizeof(admin), i);
mysql_fetch_field_row(i, "IP"); format(IP, sizeof(IP), i);
}
format(String, sizeof(String), "Account name: %s (%s) is banned by %s for: %s", user, IP, admin, reason);
SendClientMessage(playerid, GREEN_COLOR, String);
}
mysql_free_result();
return 1;
}
CMD:unban(playerid, params[])
{
new account[24], Query[128], String[128];
if(!IsPlayerAdmin(playerid)) return 0; //You have to be logged into rcon.
if(sscanf(params, "s[24]", account)) return SendClientMessage(playerid, RED_COLOR, "Syntax: /unban [Account]");
if(strlen(account) > 24) return SendClientMessage(playerid, RED_COLOR, "[Error]: Player name cannot exceed 24 characters!");
format(Query, sizeof(Query), "SELECT `Username` FROM `Bans` WHERE `Username` = '%s' AND `Banned` = 1 LIMIT 1", account);
mysql_query(Query);
mysql_store_result();
if(!mysql_num_rows())
{
mysql_free_result();
format(String, sizeof(String), "[Error]: Name %s doesn't exists in ban database!", account);
return SendClientMessage(playerid, RED_COLOR, String);
}
else if(mysql_num_rows() != 0)
{
format(Query, sizeof(Query), "UPDATE `Bans` SET `Banned` = 0 WHERE `Username` = '%s'", account);
mysql_query(Query);
format(String, sizeof(String), "You have unbanned %s!", account);
SendClientMessage(playerid, GREEN_COLOR, String);
}
return 1;
}
stock IsPlayerBanned(playerid)
{
new IP[16], String[128], Query[128], reason[64], admin[32], i[128], seconds;
GetPlayerIp(playerid, IP, sizeof(IP));
format(Query, sizeof(Query), "SELECT * FROM `Bans` WHERE (`Username` = '%s' OR `IP` = '%s') AND `Banned` = 1 LIMIT 1", PlayerName(playerid), IP);
mysql_query(Query);
mysql_store_result();
if(mysql_num_rows() != 0)
{
while(mysql_fetch_row_format(Query, "|"))
{
mysql_fetch_field_row(i, "Reason"); format(reason, sizeof(reason), i);
mysql_fetch_field_row(i, "Seconds"); seconds = strval(i);
mysql_fetch_field_row(i, "Admin"); format(admin, sizeof(admin), i);
}
if(seconds > gettime())
{
SendClientMessage(playerid, RED_COLOR, "[BAN] You are banned from this server!");
format(String, sizeof(String), "* Ban reason: %s", reason);
SendClientMessage(playerid, RED_COLOR, String);
format(String, sizeof(String), "* Admin: %s", admin);
SendClientMessage(playerid, RED_COLOR, String);
format(String, sizeof(String), "* You'll be unbanned in: %s", timec(gettime()-(gettime()-seconds)));
SendClientMessage(playerid, RED_COLOR, String);
Kick(playerid);
}
else
{
format(Query, sizeof(Query), "UPDATE `Bans` SET `Banned` = 0 WHERE `Username` = '%s'", PlayerName(playerid));
mysql_query(Query);
format(String, sizeof(String), "[UNBAN] %s (%i) has been unbanned from the server!", PlayerName(playerid), playerid);
SendClientMessageToAll(GREEN_COLOR, String);
}
}
mysql_free_result();
return 1;
}
//Thanks to Blacklite
stock timec(timestamp, compare = -1)
{
if (compare == -1) {
compare = gettime();
}
new
n,
Float:d = (timestamp > compare) ? timestamp - compare : compare - timestamp,
returnstr[32];
if (d < 60) {
format(returnstr, sizeof(returnstr), "Less than a minute");
return returnstr;
} else if (d < 3600) { // 3600 = 1 hour
n = floatround(floatdiv(d, 60.5), floatround_floor);
format(returnstr, sizeof(returnstr), "minute");
} else if (d < 86400) { // 86400 = 1 day
n = floatround(floatdiv(d, 3600.5), floatround_floor);
format(returnstr, sizeof(returnstr), "hour");
} else if (d < 2592000) { // 2592000 = 1 month
n = floatround(floatdiv(d, 86400.5), floatround_floor);
format(returnstr, sizeof(returnstr), "day");
} else if (d < 31536000) { // 31536000 = 1 year
n = floatround(floatdiv(d, 2592000.5), floatround_floor);
format(returnstr, sizeof(returnstr), "month");
} else {
n = floatround(floatdiv(d, 31536000.5), floatround_floor);
format(returnstr, sizeof(returnstr), "year");
}
if (n == 1) {
format(returnstr, sizeof(returnstr), "1 %s", returnstr);
} else {
format(returnstr, sizeof(returnstr), "%d %ss", n, returnstr);
}
return returnstr;
}
stock PlayerName(Playerid)
{
GetPlayerName(Playerid, Plname, 24);
return Plname;
}
stock GetIP(Playerid)
{
GetPlayerIp(Playerid, PIP, sizeof PIP);
return PIP;
}
public OnPlayerConnect(playerid)
{
IsPlayerBanned(playerid);
return 1;
}

