Timeban

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
  • Hallo Community,
    ich habe ein Timeban System drinne der leider nicht funktioniert.
    Er wird zwar gekickt vom Server kann sich aber gleich wieder einloggen:

    ocmd:timeban(playerid,params[])
    {
    if(!isPlayerAnAdmin(playerid,2))return SendClientMessage(playerid,HELLROT,"AdmCmd: Du besitzt keine Rechte, um diesen Befehl zu benutzen!");
    new pID, time, grund[256];
    if(sscanf(params,"uis",pID,time,grund))return SendClientMessage(playerid,HELLROT,"AdmCmd: Benutze /timeban [SpielerID] [Zeit] [Grund]");
    if(IsPlayerConnected(pID))
    {
    if(time>0||time<1000)
    {
    new string[128];
    format(string,sizeof(string),"AdmCmd: %s wurde vom Administrator %s für %i Minuten gebannt. Grund: %s",SpielerName(pID),SpielerName(playerid),time,grund);
    SendClientMessageToAll(HELLROT,string);
    new wert;


    wert=gettime()+(60*time);


    SetPVarInt(pID,"Timeban",wert);


    Ban(pID);
    return 1;
    }
    SendClientMessage(playerid,HELLROT,"AdmCmd: Bitte gültige Zeit angeben!");
    return 1;
    }
    SendClientMessage(playerid,HELLROT,"AdmCmd: Der Spieler befindet sich zurzeit nicht auf dem Server!");
    return 1;
    }

    :) SWAGETTI & YOLONAISE!

  • Du musst beim Betreten des Spielers auf deinen Server auch abfragen, ob der Spieler noch getimebanned ist.
    (Aktuellen Timestamp mit dem gespeicherten Vergleichen).


    LG

    Main: CPU: Intel Core i5-4440 @ 3,10 GHz | CPU-Cooling: Matterhorn -PURE- | RAM: 16GB Crucial Ballistix Sport DDR3-1600 DIMM CL9-9-9-24 |
    Motherboard: ASRock B85M Pro4 | GPU: Sapphire Radeon R9 390X Nitro 8GB GDDR5 |

    SSD: Samsung SSD 840 Evo 500GB | Power Supply: 550 Watt Corsair CS Series Modular 80+ Gold | Case: beQuiet! Silent Base 800


    As I walk through the valley of the shadow of death
    I take a look at my life and realize there's nothin' left.

  • public OnPlayerConnect(playerid)
    {
    new time = gettime();
    if(time < GetPVarInt(playerid,"Timeban")) { //Wenn du natürlich alles darin speichern lässt, musst du dir diesen Wert auch erst aus der Spielerdatei holen, aber das kannst du ja selber machen
    new str[128];
    new diff = GetPVarInt(playerid,"Timeban") - time;
    format(str,sizeof str,"Du bist noch %d Minuten gebannt! Komme später wieder!",diff / 60);
    SendClientMessage(playerid,-1,str);
    Kick(playerid); //musst natürlich per Timer kicken lassen. 0.3x und so
    }
    return 1;
    }


    Wichtig: Du musst davor erst den Wert von "Timeban" des Spielers laden lassen, sonst geht das ganze nicht!


    LG

    Main: CPU: Intel Core i5-4440 @ 3,10 GHz | CPU-Cooling: Matterhorn -PURE- | RAM: 16GB Crucial Ballistix Sport DDR3-1600 DIMM CL9-9-9-24 |
    Motherboard: ASRock B85M Pro4 | GPU: Sapphire Radeon R9 390X Nitro 8GB GDDR5 |

    SSD: Samsung SSD 840 Evo 500GB | Power Supply: 550 Watt Corsair CS Series Modular 80+ Gold | Case: beQuiet! Silent Base 800


    As I walk through the valley of the shadow of death
    I take a look at my life and realize there's nothin' left.

  • Was steht denn da oben ?
    Du musst erst den Wert rausladen (sei es über MySQL,Dini, oder was du halt nutzt), weil das ganze sonst nicht funktioniert.


    LG

    Main: CPU: Intel Core i5-4440 @ 3,10 GHz | CPU-Cooling: Matterhorn -PURE- | RAM: 16GB Crucial Ballistix Sport DDR3-1600 DIMM CL9-9-9-24 |
    Motherboard: ASRock B85M Pro4 | GPU: Sapphire Radeon R9 390X Nitro 8GB GDDR5 |

    SSD: Samsung SSD 840 Evo 500GB | Power Supply: 550 Watt Corsair CS Series Modular 80+ Gold | Case: beQuiet! Silent Base 800


    As I walk through the valley of the shadow of death
    I take a look at my life and realize there's nothin' left.

  • da du warscheinlich das tutorial script von MrMonat benutzt sieht das so aus



    stock SpielerSpeichern(playerid)
    {
    if(GetPVarInt(playerid,"loggedin")==1)
    {
    new Spielerdatei[64];
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,name,sizeof(name));
    format(Spielerdatei,sizeof(Spielerdatei),"/Accounts/%s.txt",name);
    dini_IntSet(Spielerdatei,"Level",GetPlayerScore(playerid));
    dini_IntSet(Spielerdatei,"Geld",GetPlayerMoney(playerid));
    dini_IntSet(Spielerdatei,"Adminlevel",GetPVarInt(playerid,"Adminlevel"));
    dini_IntSet(Spielerdatei,"Fraktion",GetPVarInt(playerid,"Fraktion"));
    dini_IntSet(Spielerdatei,"Baned",GetPVarInt(playerid,"Baned"));
    dini_IntSet(Spielerdatei,"timeban",GetPVarInt(playerid,"timeban")); // <-----------------------------
    }
    return 1;
    }




    stock Login(playerid,key[])
    {
    new Spielerdatei[64];
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,name,sizeof(name));
    format(Spielerdatei,sizeof(Spielerdatei),"/Accounts/%s.txt",name);

    if(gettime()<dini_Int(Spielerdatei,"timeban")) // <------------------------------------
    {
    SendClientMessage(playerid,ROT,"Du bist noch gebannt. Komm später wieder.");
    Kick(playerid);
    return 1;
    }

    if(!strcmp(key,dini_Get(Spielerdatei,"Passwort"),false))
    {
    LoadAccount(playerid);
    SendClientMessage(playerid,BLAU,"Erfolgreich eingeloggt.");
    return 1;
    }
    else
    {
    SendClientMessage(playerid,BLAU,"Falsches Passwort.");
    ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_INPUT,"Login","Dein Account wurde gefunden. Gib bitte das Passwort ein.","Login","Abbrechen");
    return 1;
    }
    }

  • Hab jetzt bei stock SpielerSpeichern und stock SpielerLaden
    Timeban eingefügt geht auch nicht.


    Du fragst wahrscheinlich auch dann das mit dem Timebann ab, bevor der Spieler geladen wird.


    LG

    Main: CPU: Intel Core i5-4440 @ 3,10 GHz | CPU-Cooling: Matterhorn -PURE- | RAM: 16GB Crucial Ballistix Sport DDR3-1600 DIMM CL9-9-9-24 |
    Motherboard: ASRock B85M Pro4 | GPU: Sapphire Radeon R9 390X Nitro 8GB GDDR5 |

    SSD: Samsung SSD 840 Evo 500GB | Power Supply: 550 Watt Corsair CS Series Modular 80+ Gold | Case: beQuiet! Silent Base 800


    As I walk through the valley of the shadow of death
    I take a look at my life and realize there's nothin' left.

  • So:

    public OnPlayerConnect(playerid)
    {
    new time = gettime();
    if(time < GetPVarInt(playerid,"Timeban")) { //Wenn du natürlich alles darin speichern lässt, musst du dir diesen Wert auch erst aus der Spielerdatei holen, aber das kannst du ja selber machen
    new str[128];
    new diff = GetPVarInt(playerid,"Timeban") - time;
    format(str,sizeof str,"Du bist noch %d Minuten gebannt! Komme später wieder!",diff / 60);
    SendClientMessage(playerid,-1,str);
    Kick(playerid); //musst natürlich per Timer kicken lassen. 0.3x und so
    }


    Ich speicher meine Spieler so:
    SpielerSpeichern(playerid);

    :) SWAGETTI & YOLONAISE!

  • Mal versucht nach der Ban Abfrage ein else einzuführen und die normale Prozedur laufen zu lassen?
    Sprich Spielerdaten laden und spawnen.

  • Der Wert muss natürlich vor der Abfrage ausgelesen werden.
    Lass den Account bei OnPlayerConnect Laden setz allerdings eine Abfrage fürs Speichern ob der Spieler auch eingeloggt ist.
    Um Bugs wie gespeicherte Positionen (Falls du welche speichern lässt) zu vermeiden.

    RFT

  • SpielerLaden(playerid) unter OnPlayerConnect einfügen.
    Beim erfolgreichen Login "SetPVarInt(playerid, "pLogged", 1);
    Und bei Spieler Speichern


    "if(GetPVarInt(playerid, "pLogged") == 1)
    {
    //Dein Code
    }



    LG RFT

    RFT