TimeBan Kurz TBAN

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • 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!

  • Zunno das war ja Klar das jemand so ne antwort gibt :D (nicht böse gemeint) aber brauch einfach auch nur Hilfe beim TimeBan System das hat ja nix damit zutun das ich kein Selfmade anfangen sollte ? o.0 naja Hoffe das mir jemand helfen kann..



    Mfg.


    Büttii<3

  • 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

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • 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 :P


    MfG Kevin

    EDIT: oO 2x Fehler entdeckt.

  • 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