Problem mit 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
  • Moin, hab grad versucht n Timeban System zu schreiben, nach Tutorial funktioniert auch soweit, Zeit wird gespeichert, kann allerdings immer noch connecten..



    //Hier wirds gespeichert (Stock TBan):
    r_mysql_SetInt(SpielerInfo[playerid][TBan],timestamp);
    //SpielerLaden
    new timestamp = gettime();
    new bisgebannt = SpielerInfo[playerid][TBan] = r_mysql_GetInt("TBan");
    if(timestamp < bisgebannt)
    {
    SendClientMessage(playerid,ROT,"Du bist noch gebannt! Komm später wieder!");
    Kick(playerid);
    }


    //Edit: Eingerückt


    Engelsflügel am Astonkühler, als Schutz vor dem Teufel!

  • Zeig uns mal den gesamten Stock Tban.


    Mich beschleicht da so ein Verdacht.


    //Stock-TBan
    stock TBan2(playerid,const string[],dauer,bannerid)
    {
    new timestamp;
    timestamp = gettime();
    new sekunden = dauer * 60;
    timestamp += sekunden;
    new str[256];
    new name[MAX_PLAYER_NAME],bannername[MAX_PLAYER_NAME];
    GetPlayerName(playerid,name,sizeof(name));
    GetPlayerName(bannerid,bannername,sizeof(bannername));
    format(str,sizeof(str),"Admin-Command: %s wurde von %s für %d Minuten gebannt",name,bannername,dauer);
    SendClientMessageToAll(ROT,str);
    format(str,sizeof(str),"Grund: %s",string);
    SendClientMessageToAll(ROT,str);
    Kick(playerid);
    r_mysql_SetInt(SpielerInfo[playerid][TBan],timestamp);
    return 1;
    }


    @Antony_Morvai: SpielerLaden = OnPlayerConnect.


    Engelsflügel am Astonkühler, als Schutz vor dem Teufel!

  • Kick(playerid);
    r_mysql_SetInt(SpielerInfo[playerid][TBan],timestamp);


    Du kickst, bevor es gespeichert wird.
    Das ist der Fehler. Da du ihn kickst, gibt es die playerid auch nicht mehr, somit kann er den Wert nicht abrufen und speichern.


    Funktioniert immer noch nicht, hab mich 5minuten gebannt der Wert in der Datenbank steht auch auf 5, aber naja Connecten kann ich immer noch.


    Hier mal SpielerLaden;


    new timestamp = gettime();
    new bisgebannt = SpielerInfo[playerid][TBan] = r_mysql_GetInt("TBan");
    if(timestamp < bisgebannt)
    {
    SendClientMessage(playerid,0xFF3200FF,"Du bist noch gebannt! Komm später wieder!");
    Kick(playerid);
    }


    Engelsflügel am Astonkühler, als Schutz vor dem Teufel!

  • In der Datenbank steht 5?


    Edit: Ich sehe grad der Name des Stocks ist TBan2. Kann es sein, dass du 2 Stocks verwechselst?


    Nein habe den extra umbenannt, stock wird hier abgerufen:


    //-OCMD-TBan-//
    ocmd:tban(playerid,params[])
    {
    new pID,grund[64],dauer;
    if(SpielerInfo[playerid][Adminlevel] < 2)return SendClientMessage(playerid, ROT, "Du hast nicht die nötigen Rechte!");
    if(sscanf(params, "uis", pID, dauer, grund))return SendClientMessage(playerid, WEISS, "/tban [ID] [Dauer (in Minuten)] [Grund]");
    SpielerInfo[pID][TBan] = dauer;
    TBan2(pID,grund, dauer,playerid);
    return 1;
    }


    Ja in der Datenbank steht 5 (Also die Dauer, die bei /tban angegeben wurde)


    Engelsflügel am Astonkühler, als Schutz vor dem Teufel!

  • Das kann dann ja nicht funktionieren.


    Du nimmst folgende Zeile raus:


    SpielerInfo[pID][TBan] = dauer;


    Und fügst diese in stock Tban2 unter timestamp +=sekunden hinzu.


    und ersetzt dauer durch timestamp.


    Du darfst nicht die Dauer speichern, sondern den timestamp.


    Denn: der timestamp sind die Anzahl der Sekunden seit dem 01.01.1970. Bedeutet: Der timestamp der Zeit, an dem der Bann abläuft ist größer, als der aktuelle Timestamp.
    Und 5 sind 5 Sekunden nach dem 01.01.1970, was bedeutet, dass der Bann garnicht mehr besteht, da diese Zeit in der Vergangenheit liegt.


    /EDIT: PWN Tags
    //EDIT 2: Erklärung hinzugefügt


  • new sekunden = dauer * 60;
    timestamp += sekunden;
    Also das habe ich im Stock TBan2


    //Edit: Funktioniert immer noch nicht..


    Habs nu so


    ocmd:tban(playerid,params[])
    {
    new pID,grund[64],dauer;
    new timestamp;
    timestamp = gettime();
    new sekunden = dauer * 60;
    timestamp += sekunden;
    if(SpielerInfo[playerid][Adminlevel] < 2)return SendClientMessage(playerid, ROT, "Du hast nicht die nötigen Rechte!");
    if(sscanf(params, "uis", pID, dauer, grund))return SendClientMessage(playerid, WEISS, "/tban [ID] [Dauer (in Minuten)] [Grund]");
    SpielerInfo[pID][TBan] = timestamp;
    TBan2(pID,grund, dauer,playerid);
    return 1;
    }


    Engelsflügel am Astonkühler, als Schutz vor dem Teufel!

    Einmal editiert, zuletzt von BOMBER ()

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Du hats anscheinend meinen Post nicht richtig gelesen.


    Mach es mal so:


    ocmd:tban(playerid,params[])
    {
    new pID,grund[64],dauer;
    if(SpielerInfo[playerid][Adminlevel] < 2)return SendClientMessage(playerid, ROT, "Du hast nicht die nötigen Rechte!");
    if(sscanf(params, "uis", pID, dauer, grund))return SendClientMessage(playerid, WEISS, "/tban [ID] [Dauer (in Minuten)] [Grund]");
    TBan2(pID,grund, dauer,playerid);
    return 1;
    }


    stock TBan2(playerid,const string[],dauer,bannerid)
    {
    new timestamp;
    timestamp = gettime();
    new sekunden = dauer * 60;
    timestamp += sekunden;
    SpielerInfo[playerid][TBan] = timestamp;
    new str[256];
    new name[MAX_PLAYER_NAME],bannername[MAX_PLAYER_NAME];
    GetPlayerName(playerid,name,sizeof(name));
    GetPlayerName(bannerid,bannername,sizeof(bannername));
    format(str,sizeof(str),"Admin-Command: %s wurde von %s für %d Minuten gebannt",name,bannername,dauer);
    SendClientMessageToAll(ROT,str);
    format(str,sizeof(str),"Grund: %s",string);
    SendClientMessageToAll(ROT,str);

    r_mysql_SetInt(SpielerInfo[playerid][TBan],timestamp);
    Kick(playerid);
    return 1;
    }


  • Ne, jetzt steht die Datenbank auf 0, d.h. es kommt garnix mehr, habs auch schon anders probiert.


    Engelsflügel am Astonkühler, als Schutz vor dem Teufel!

  • lässt du auch beim laden den Pfad öffnen?
    Denn nach deinen Muster lädst du wieder was, wo er nicht weiß wovon


    SpielerInfo[playerid][TBan] = r_mysql_GetInt("TBan"); //Von der SpielerInfo


    So hab ich das, funktioniert überall anders auch, nur bei TBan nicht :wacko:


    Engelsflügel am Astonkühler, als Schutz vor dem Teufel!

  • Ich verweise immernoch hierrauf
    r_LoadEntrance(table[], where1[], where2[]);
    r_UnloadEntrance();


    stock SpielerLaden(playerid)
    {
    if(IsPlayerConnected(playerid) && !IsPlayerNPC(playerid))
    {
    GetPlayerName(playerid,SpielerInfo[playerid][pName],MAX_PLAYER_NAME);
    if(r_LoadSQLEntrance("accounts","Name",SpielerInfo[playerid][pName]))
    {
    SpielerInfo[playerid][TBan] = r_mysql_GetInt("TBan");
    printf("Spielerdaten vom Spieler %s erfolgreich aus der Datenbank geladen",SpielerName(playerid));
    new timestamp = gettime();
    new bisgebannt = SpielerInfo[playerid][TBan] = r_mysql_GetInt("TBan");
    if(timestamp < bisgebannt)
    {
    SendClientMessage(playerid,0xFF3200FF,"Du bist noch gebannt! Komm später wieder!");
    Kick(playerid);
    }
    r_UnloadSQLEntrance();
    }


    }
    return 1;
    }


    Edit: SpielerLaden Stock eingefügt
    Meintest du das damit=


    Engelsflügel am Astonkühler, als Schutz vor dem Teufel!

  • wo öffnest du die verbindung ?!
    r_LoadEntrance(table[], where1[], where2[]);
    Nutz die Funktion er kann sonst nix finden, da nix angegeben wurde X(


    r_LoadSQLEntrance("accounts", "TBan", SpielerInfo[playerid][TBan]);


    So? Hab die Funktion noch nicht weiter gebraucht, sorry.


    Engelsflügel am Astonkühler, als Schutz vor dem Teufel!