Wie die Überschrift schon sagt ich suche ein TimeBan Befehl.
er Soll lauten /tban [ID] [Minuten] [Stunden] [Grund]
wäre nett wen mir da einer Helfen kann oder im besten Fall
Ein Script Code geben kann..
Freundliche Grüße
Büttii<3
Wie die Überschrift schon sagt ich suche ein TimeBan Befehl.
er Soll lauten /tban [ID] [Minuten] [Stunden] [Grund]
wäre nett wen mir da einer Helfen kann oder im besten Fall
Ein Script Code geben kann..
Freundliche Grüße
Büttii<3
Meinst du für GF? Wenn ja , suche sowas auch!
Nein suche es nicht für den GF Sondern für meinen Selfmade
SuFu
Bitteschön !
[ INCLUDE ] FoxBan v2.0c - Timeban-System
Mfg
[GSR]Pfadi
/edit kleiner Rechtschreibfehler
Wollte aber den /Tban Befehl so haben wie ich es oben geschrieben habe das mit FoxBanInclude ist glaube eh nur minuten -.-
Kannste nicht rechnen?
60min = 1 Stunde d.h du willst ihn für 1 Stunde 30min bannen dann machste /tban ID 90 Wiel ich dich bannen sollte
Rechnen kann ich schon kleiner Mann aber wollte halt das der Befehl so aufgebaut ist wie oben schon beschrieben und möchte nicht dieses Foxban.Include zeugs nehmen =D
Selber bauen?
Wenn man schon ein Selfmade macht, dann wirst du das doch wohl auch hinbekommen oder?
Sonst würde ich dir raten es nochmal zu überdenken ein selfmade zu machen ...
Wenn du nicht weißt wie nen TBan funktionieren soll gebe ich dir mal ein paar tipps:
1. Varriable im Account speichern wo du die zeit einträgst wann er wieder entbannt ist.
2. Beim Connecten / Einloggen prüfen ob die Zeit schon vergangen ist
3. Beim /tban Aktuelle Zeit nehmen + die banzeit und in die varriable eintragen.
LG, Zunno
/EDIT: Punkt 3 hinzugefügt
enum tbSyS
{//Oben mit zu deinen enums!
tbName[MAX_PLAYER_NAME],
tbIp[16],
tbMinutes
};
new TimebanInfo[100][tbSyS];
stock LoadTempBans()//In den OnGameModeInit
{
new File:tbFile=fopen("tempbans.cfg",io_read),Content[64],tb;
while(fread(tbFile,Content) && tb < sizeof(TimebanInfo))
{
StripNewLine(Content);
sscanf(Content,"ssd",TimebanInfo[tb][tbName],TimebanInfo[tb][tbIp],TimebanInfo[tb][tbMinutes]);
if(TimebanInfo[tb][tbMinutes])
tb++;
}
fclose(tbFile);
return 1;
}
stock SaveTempBans()//In den OnGameModeExit
{
new File:tbFile=fopen("tempbans.cfg",io_write),Content[64];
for(new tb;tb<sizeof(TimebanInfo);tb++)
{
if(TimebanInfo[tb][tbMinutes])
{
format(Content,sizeof(Content),"%s %s %d\r\n",TimebanInfo[tb][tbName],TimebanInfo[tb][tbIp],TimebanInfo[tb][tbMinutes]);
fwrite(tbFile,Content);
}
}
fclose(tbFile);
return 1;
}
stock IsPlayerBanned(playerid)//Am Besten beim erfolgreichen Login anwenden.
{
new tbPlayerName[MAX_PLAYER_NAME],tbPlayerIp[16];
GetPlayerName(playerid,tbPlayerName,MAX_PLAYER_NAME);
GetPlayerIp(playerid,tbPlayerIp,16);
for(new tb;tb<sizeof(TimebanInfo);tb++)
{
if(TimebanInfo[tb][tbMinutes])
{
if(!strcmp(TimebanbanInfo[tb][tbIp],tbPlayerIp,false) || !strcmp(TimebanInfo[tb][tbName],tbPlayerName,false))
{
TimebanInfo[tb][tbIp] = tbPlayerIp;
Ban(playerid);
return 1;
}
}
}
return 0;
}
stock TimebanPlayer(playerid,minutes)//Die Funktion in deinem Befehl anwenden.
{
for(new tb;tb<sizeof(TimebanInfo);tb++)
{
if(!TimebanInfo[tb][tbMinutes])
{
GetPlayerName(playerid,TimebanInfo[tb][tbName],MAX_PLAYER_NAME);
GetPlayerIp(playerid,TimebanInfo[tb][tbIp],16);
TimebanInfo[tb][tbMinutes] = minutes;
Ban(playerid);
return 1;
}
}
return 0;
}
stock RemoveTimeban(const By[])//Benutzen beim entbannen: Ip-Adresse oder Name!
{
if(strlen(By) >= 3)
{
for(new tb;tb<sizeof(TimebanInfo);tb++)
{
if(TimebanInfo[tb][tbMinutes])
{
if(!strcmp(TimebanbanInfo[tb][tbIp],By,true) || !strcmp(TimebanInfo[tb][tbName],By,true))
{
new tbCommand[64];
format(tbCommand,sizeof(tbCommand),"unbanip %s",TimebanbanInfo[tb][tbIp]);
SendRconCommand(tbCommand);
SendRconCommand("reloadbans");
TimebanInfo[tb][tbMinutes] = 0;
return 1;
}
}
}
}
return 0;
}
stock TimebanTime()//Muss in einen Minuten timer heißt 60000 MS <<< sonst läuft die Zeit nicht ab!
{
for(new tb;tb<sizeof(TimebanInfo);tb++)
{
if(TimebanInfo[tb][tbMinutes])
{
TimebanInfo[tb][tbMinutes]--;
if(!TimebanInfo[tb][tbMinutes])
{
new tbCommand[64];
format(tbCommand,sizeof(tbCommand),"unbanip %s",TimebanbanInfo[tb][tbIp]);
SendRconCommand(tbCommand);
SendRconCommand("reloadbans");
}
}
}
return 1;
}
Weiß jetzt nicht ob das Funktioniert, hab das jetzt nicht getestet ... den Befehl musste selber schreiben.
Falls irgendwas fehlt, naja sags einfach
MfG Kevin
EDIT: oO 2x Fehler entdeckt.
ich gieb Zunno Recht !
Ich wurde damals auf die TimeStamp-Funktion verwiesen.
Damit habe ichs auch geschafft, ein funktionierendes AntiCheat zu basteln.
Falls du nicht weist, was TimeStamp ist:
Die Funktion returnt die Sekunden seid dem 01.01.1970.
Somit kannst du wunderbar Zeiten als Integer abfragen.
Gehen wir davon aus, vor 5 Minuten würde TimeStamp 2500 returnen.
Jetzt rechnest du einfach die Zeit in Sekunden dazu (5 Minuten = 5*60 = 300 | 2500+300 = 2800)
Nun kannst du wunderbar abfragen, ob der Ban schon ausgelaufen ist
stock mktime(hour,minute,second,day,month,year)
{
new timestamp2;
timestamp2 = second + (minute * 60) + (hour * 3600);
new days_of_month[12];
if ( ((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0) ) {
days_of_month = {31,29,31,30,31,30,31,31,30,31,30,31}; // Schaltjahr
} else {
days_of_month = {31,28,31,30,31,30,31,31,30,31,30,31}; // keins
}
new days_this_year = 0;
days_this_year = day;
if(month > 1) { // No January Calculation, because its always the 0 past months
for(new i=0; i<month-1;i++) {
days_this_year += days_of_month[i];
}
}
timestamp2 += days_this_year * 86400;
for(new j=1970;j<year;j++) {
timestamp2 += 31536000;
if ( ((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0) ) timestamp2 += 86400; // Schaltjahr + 1 Tag
}
return timestamp2;
}
stock Now()
{
new hour,minute,second,year,month,day;
gettime(hour, minute, second);
getdate(year, month, day);
return mktime(hour,minute,second,day,month,year);
}
Auslesen einfach mit "Now();"
Hoffe das hilft dir, hatte da auch lange mit zu kämpfen.
MfG Firer