/ban /offban /tban /offtimeban samt Funktion BanPlayer... müsste halt auf die eigenen Bedürfnisse angepasst werden aber bringt einen Grundbaustein mit sich
Code
ocmd:ban(playerid, params[])
{
new pid, reason[45];
if(getAdmin(playerid) < 2)return 1;
if(sscanf(params, "us", pid, reason))return SCM(playerid, COLOR_GREY, "Befehl: /ban [Name/ID] [Grund]");
if(LoggedIn(pid) == false)return SEM(playerid, ERROR_NOLOGIN2);
BanPlayer(playerid, "", pid, 0, BAN_NORMAL, 45, reason, NULL);
return 1;
}
ocmd:offban(playerid, params[])
{
new bname[24], onlineID = INVALID_PLAYER_ID, reason[45];
if(getAdmin(playerid) < 2)return 1;
if(sscanf(params, "ss", bname, reason))return SCM(playerid, COLOR_GREY, "Befehl: /offban [Name] [Grund]");
//Online Check
onlineID = LoggedInName(bname);
if(onlineID != INVALID_PLAYER_ID)
{
SCMF(playerid, COLOR_LESSRED, "Der Spieler %s ist Online mit der ID %d, nutze /ban", bname, onlineID);
return 1;
}
BanPlayer(playerid, bname, INVALID_PLAYER_ID, 0, BAN_OFFLINE, 45, reason, NULL);
return 1;
}
ocmd:offtimeban(playerid, params[])
{
new bname[24], reason[45], usage[10], time, onlineID = INVALID_PLAYER_ID;
if(getAdmin(playerid) < 2)return 1;
if(sscanf(params, "ssds", bname, usage, time, reason))return SCM(playerid, COLOR_GREY, "Befehl: /offtimeban [Name] [Minuten/Stunden/Tage] [Anzahl] [Grund]");
//Online Check
onlineID = LoggedInName(bname);
if(onlineID != INVALID_PLAYER_ID)
{
SCMF(playerid, COLOR_LESSRED, "Der Spieler %s ist Online mit der ID %d, nutze /tban", bname, onlineID);
return 1;
}
if(strcmp(usage, "Minuten", true) && strcmp(usage, "Stunden", true) && strcmp(usage, "Tage", true))return SCM(playerid, COLOR_LESSRED, "Auswahl: Minuten/Stunden/Tage");
BanPlayer(playerid, bname, INVALID_PLAYER_ID, time, BAN_OFFTIME, 45, reason, usage);
return 1;
}
ocmd:tban(playerid, params[])
{
new pid, time, reason[45], usage[10];
if(getAdmin(playerid) < 2)return 1;
if(sscanf(params, "usds", pid, usage, time, reason))return SCM(playerid, COLOR_GREY, "Befehl: /tban [Name/ID] [Minuten/Stunden/Tage] [Anzahl] [Grund]");
if(LoggedIn(pid) == false)return SEM(playerid, ERROR_NOLOGIN2);
if(strcmp(usage, "Minuten", true) && strcmp(usage, "Stunden", true) && strcmp(usage, "Tage", true))return SCM(playerid, COLOR_LESSRED, "Auswahl: Minuten/Stunden/Tage");
BanPlayer(playerid, "", pid, time, BAN_TIME, 45, reason, usage);
return 1;
}
stock BanPlayer(playerid, offname[], target, btime, banart, rlenght, rdata[], udata[])
{
if(strlen(rdata) > rlenght) { SCMF(playerid, COLOR_LESSRED, "Der Grund darf maximal %d Zeichen lang sein.", rlenght); return 1;}
new string[128];
switch(banart)
{
case BAN_NORMAL:
{
pInfo[target][pBan] = 1;
format(string, sizeof string, "[SERVER] %s wurde von %s gebannt. Grund: %s", getName(target), getName(playerid), rdata),
SCMTA(COLOR_RED, string);
playerProtocol(target, "ban", "wurde von %s %s gebannt. Grund: %s", getAdminRang(playerid), getName(playerid), rdata);
AdminLog(playerid, "ban", "hat den Spieler %s gebannt. Grund: %s", getName(target), rdata);
Kick(target);
}
case BAN_OFFLINE:
{
if(target != INVALID_PLAYER_ID)return 1; //OfflineBan Parameter wurde nicht richtig setzt (INVALID_PLAYER_ID)
//MySQL Abfrage im gleichem Funktionsrahmen, bitte nur in Ausnamefällen nutzen, am besten gar nicht! - Bryan
new cacheSQLID, BanStatus, Cache:result, query[512];
mysql_format(handle, query, sizeof query, "SELECT `Sperre` FROM `player` WHERE `Name` = '%e'", offname);
result = mysql_query(handle, query);
cache_get_value_int(0, 0, BanStatus); //Checken ob bereits ein Ban besteht
if(!cache_num_rows())
{
SCMF(playerid, COLOR_LESSRED, "Es ist kein Konto unter dem Namen %s angelegt!", offname);
return 1;
}
if(BanStatus) //Auswertung der Ban Prüfung
{
SCMF(playerid, COLOR_LESSRED, "Der Spieler %s ist bereits gebannt!", offname);
return 1;
}
cache_delete(result);
//SQLID Picken
mysql_format(handle, query, sizeof query, "SELECT `playerid` FROM `player` WHERE `Name` = '%e'", offname);
result = mysql_query(handle, query);
cache_get_value_int(0, 0, cacheSQLID);
cache_delete(result);
//Log & Ban
mysql_format(handle, query, sizeof query, "UPDATE `player` SET `Sperre` = 1 WHERE `Name` = '%e'", offname);
mysql_pquery(handle, query, "PlayerQuery", "d", PLAYER_QUERY_BAN);
SCMFTA(COLOR_RED, "[SERVER] %s wurde von %s Offline gebannt. Grund: %s", offname, getName(playerid), rdata);
format(query, 256, "%s", rdata);
playerProtocol(cacheSQLID, "oban", "%s wurde von %s %s offline gebannt. Grund: %s", offname, getAdminRang(playerid), getName(playerid), rdata);
AdminLog(playerid, "oban", "%s hat den Spieler %s offline gebannt. Grund: %s", getName(playerid), offname, rdata);
}
case BAN_TIME:
{
if(!strcmp(udata, "Minuten", true))
{
if(btime < 30 || btime > 10080)return SCM(playerid, COLOR_GREY, "Der Wert bei Minuten, muss zwischen 30 & 10.080 liegen! (Maxmimal 1 Woche)");
pInfo[playerid][pTimeban] = cTime + (60*btime);
format(string, sizeof string, "[SERVER] %s wurde von %s für %d Minuten gebannt. Grund: %s", getName(target), getName(playerid), btime, rdata),
SCMTA(COLOR_RED, string);
playerProtocol(target, "sanction", "wurde von %s %s für %d Minuten gebannt. Grund: %s", getAdminRang(playerid), getName(playerid), btime, rdata);
AdminLog(playerid, "timeban", "hat den Spieler %s für %d Minuten gebannt. Grund: %s", getName(target), btime, rdata);
Kick(target);
return 1;
}
if(!strcmp(udata, "Stunden", true))
{
if(btime < 1 || btime > 168)return SCM(playerid, COLOR_GREY, "Der Wert bei Stunden, muss zwischen 1 & 168 liegen! (Maxmimal 1 Woche)");
pInfo[playerid][pTimeban] = cTime + (3600*btime);
format(string, sizeof string, "[SERVER] %s wurde von %s für %d Stunde(n) gebannt. Grund: %s", getName(target), getName(playerid), btime, rdata),
SCMTA(COLOR_RED, string);
playerProtocol(target, "sanction", "wurde von %s %s für %d Stunden gebannt. Grund: %s", getAdminRang(playerid), getName(playerid), btime, rdata);
AdminLog(playerid, "timeban", "hat den Spieler %s für %d Stunden gebannt. Grund: %s", getName(target), btime, rdata);
Kick(target);
return 1;
}
if(!strcmp(udata, "Tage", true))
{
if(btime < 1 || btime > 7)return SCM(playerid, COLOR_GREY, "Der Wert bei Minuten, muss zwischen 30 & 10.080 liegen! (Maxmimal 1 Woche)");
pInfo[playerid][pTimeban] = cTime + (86400*btime);
format(string, sizeof string, "[SERVER] %s wurde von %s für %d Tag(e) gebannt. Grund: %s", getName(target), getName(playerid), btime, rdata),
SCMTA(COLOR_RED, string);
playerProtocol(target, "sanction", "wurde von %s %s für %d Tage gebannt. Grund: %s", getAdminRang(playerid), getName(playerid), btime, rdata);
AdminLog(playerid, "timeban", "hat den Spieler %s für %d Tage gebannt. Grund: %s", getName(target), btime, rdata);
Kick(target);
return 1;
}
}
case BAN_OFFTIME:
{
if(target != INVALID_PLAYER_ID)return 1; //OfflineBan Parameter wurde nicht richtig setzt (INVALID_PLAYER_ID)
//TBAN-Aufschlag Check
new tban_usage[10], tban_math, tban_time,
tban_sql, tban_have, tban_offname[24], tban_reason[64], tban_timeset[25], query[256],
tmath_days, tmath_hours, tmath_minutes, tmath_secs, tban_second;
Math(btime, tmath_days, tmath_hours, tmath_minutes, tmath_secs);
cTime = gettime();
if(GetPVarInt(playerid, "TBAN_EXITS") && GetPVarInt(playerid, "TBAN_EXITS") > cTime)
{
tban_second = 1;
tban_have = GetPVarInt(playerid, "TBAN_HAVE"),
tban_time = GetPVarInt(playerid, "TBAN_TIME"),
GetPVarString(playerid, "TBAN_USAGE", tban_usage, 10);
format(tban_timeset, 25, "%s", tban_usage);
}
else format(tban_timeset, 25, "%s", udata);
//Zeiteinheit auswerten
if(!strcmp(tban_timeset, "Minuten", true))
{
if(btime < 30 || btime > 10080)return SCM(playerid, COLOR_GREY, "Der Wert bei Minuten, muss zwischen 30 & 10.080 liegen! (Maxmimal 1 Woche)");
tban_math = (tban_second) ? ((60*tban_time)) + (tban_have) : (cTime) + (60*btime);
}
else if(!strcmp(tban_timeset, "Stunden", true))
{
if(btime < 1 || btime > 168)return SCM(playerid, COLOR_GREY, "Der Wert bei Stunden, muss zwischen 1 & 168 liegen! (Maxmimal 1 Woche)");
tban_math = (tban_second) ? ((3600*tban_time)) + (tban_have) : (cTime) + (3600*btime);
}
else if(!strcmp(tban_timeset, "Tage", true))
{
if(btime < 1 || btime > 7)return SCM(playerid, COLOR_GREY, "Der Wert bei Tagen, muss zwischen 1 & 7 liegen! (Maxmimal 1 Woche)");
tban_math = (tban_second) ? ((86400*tban_time)) + (tban_have) : (cTime) + (86400*btime);
}
if(tban_second)
{
tban_sql = GetPVarInt(playerid, "TBAN_SQL");
Math(tban_math, tmath_days, tmath_hours, tmath_minutes, tmath_secs);
GetPVarString(playerid, "TBAN_OFFNAME", tban_offname, 24),
GetPVarString(playerid, "TBAN_REASON", tban_reason, 64);
//Log & Ban
format(string, sizeof string, "%d Tage, %d Stunden, %d Minuten und %d Sekunden", tmath_days, tmath_hours, tmath_minutes, tmath_secs);
playerProtocol(tban_sql, "OFFTB-EXTRA", "%s sein Timeban wurde von %s um %d %s verlängert. Gesamtstrafe: %s / Grund: %s", tban_offname, getName(playerid), tban_time, tban_usage, string, tban_reason);
AdminLog(playerid, "OFFTB-EXTRA", "%s hat dem Spieler %s seinen Timeban um %d %s verlängert. Gesamtstrafe: %s / Grund: %s", getName(playerid), tban_offname, tban_time, tban_usage, string, tban_reason);
mysql_format(handle, query, sizeof query, "UPDATE player SET Timeban=%d WHERE Name = '%e' AND playerid = %d", tban_math, tban_offname, tban_sql),
mysql_pquery(handle, query);
format(string, sizeof string, "[ADMIN] %s hat dem Spieler %s seine Strafzeit um %d %s verlängert.", getName(playerid), tban_offname, tban_time, tban_usage),
SendAdminMessage(COLOR_YELLOW, string),
format(string, sizeof string, "[ADMIN] Insgesamt Strafe: %d Tage, %d Stunden, %d Minuten und %d Sekunden", tmath_days, tmath_hours, tmath_minutes, tmath_secs),
SendAdminMessage(COLOR_YELLOW, string),
format(string, sizeof string, "[ADMIN] Grund: %s", tban_reason),
SendAdminMessage(COLOR_YELLOW, string);
//Cache entfernen
DeletePVar(playerid, "TBAN_EXITS"),
DeletePVar(playerid, "TBAN_SQL"),
DeletePVar(playerid, "TBAN_TIME"),
DeletePVar(playerid, "TBAN_OFFNAME"),
DeletePVar(playerid, "TBAN_USAGE"),
DeletePVar(playerid, "TBAN_REASON");
return 1;
}
//MySQL Abfrage im gleichem Funktionsrahmen, bitte nur in Ausnamefällen nutzen, am besten gar nicht! - Bryan
new cacheSQLID, BanUnix, Cache:result;
mysql_format(handle, query, sizeof query, "SELECT Timeban FROM player WHERE Name = '%e'", offname);
result = mysql_query(handle, query);
if(!cache_num_rows())
{
SCMF(playerid, COLOR_LESSRED, "Es ist kein Konto unter dem Namen %s angelegt!", offname);
return 1;
}
cache_delete(result);
//SQLID Picken
mysql_format(handle, query, sizeof query, "SELECT playerid FROM player WHERE Name = '%e'", offname);
result = mysql_query(handle, query);
cache_get_value_int(0, 0, cacheSQLID);
cache_delete(result);
//Checken ob bereits ein aktiver TBan besteht
mysql_format(handle, query, sizeof query, "SELECT Timeban FROM player WHERE Name = '%e'", offname);
result = mysql_query(handle, query);
cache_get_value_int(0, 0, BanUnix);
cache_delete(result);
//Auswertung der Ban Prüfung (Bestehender Timeban)
if(BanUnix && BanUnix > cTime)
{
new days, hour, mins, secs;
//Cache setzen für Timeban Erhöhung setzen (Offline TBan) (60 Sekunden)
Math(BanUnix, days, hour, mins, secs),
SetPVarInt(playerid, "TBAN_EXITS", cTime + 60),
SetPVarInt(playerid, "TBAN_SQL", cacheSQLID),
SetPVarInt(playerid, "TBAN_TIME", btime),
SetPVarInt(playerid, "TBAN_HAVE", BanUnix),
SetPVarString(playerid, "TBAN_OFFNAME", offname),
SetPVarString(playerid, "TBAN_USAGE", udata),
SetPVarString(playerid, "TBAN_REASON", rdata);
SCMF(playerid, COLOR_LESSRED, "Der Spieler %s ist noch %d Tage, %d Stunden, %d Minuten und %d Sekunden gebannt!", offname, days, hour, mins, secs);
SCM(playerid, COLOR_YELLOW, "INFO: Falls du die Ban-Zeit erhöhen möchtest, wiederhole den Befehl einfach innerhalb 60 Sekunden"),
SCM(playerid, COLOR_YELLOW, "INFO: Falls du keine Aktion in der angegebenen Zeit tätigst, erlischt das Angebot.");
return 1;
}
Math(tban_math, tmath_days, tmath_hours, tmath_minutes, tmath_secs);
playerProtocol(tban_sql, "OFFTB-EXTRA", "%s wurde von %s %s für %d %s gebannt. Grund: %s", offname, getAdminRang(playerid), getName(playerid), btime, udata, rdata);
AdminLog(playerid, "OFFTB-EXTRA", "%s hat den Spieler %s für %d %s gebannt. Grund: %s", getName(playerid), offname, btime, udata, rdata);
SCMFTA(COLOR_RED, "[ADMIN] %s wurde von %s für %d %s offline gebannt. Grund: %s", offname, getName(playerid), btime, udata, rdata);
mysql_format(handle, query, sizeof query, "UPDATE player SET Timeban = %d WHERE Name = '%e' AND playerid = %d", tban_math, offname, cacheSQLID),
mysql_pquery(handle, query);
//Cache entfernen
DeletePVar(playerid, "TBAN_EXITS"),
DeletePVar(playerid, "TBAN_SQL"),
DeletePVar(playerid, "TBAN_TIME"),
DeletePVar(playerid, "TBAN_OFFNAME"),
DeletePVar(playerid, "TBAN_USAGE"),
DeletePVar(playerid, "TBAN_REASON");
}
}
return 1;
}
Alles anzeigen