Timeban System failt.

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
  • Hey hoo,


    ich habe ein kleines Problem mit meinem Timeban System.
    Sogut wie alles klappt, also man wird gekickt und da kommt ne Message und alles.
    Wenn man sich einloggen will steht auch noch wie lang man gebannt ist.


    Das problem ist, wenn die Zeit vorbei ist und ich mich einlogge steht da Passwort ist falsch.
    Ich habe dann mal in der .ini geguckt und da steht und das hier :

    tban=1419814997


    Ich fand es komisch.


    hier mal die Bausteine des systems.



    new timestamp = gettime();
    new Name[MAX_PLAYER_NAME];
    new file[128];
    GetPlayerName(playerid, Name, sizeof(Name));
    format(file,sizeof(file),"Accounts/%s.ini", Name);
    new bisgebannt = dini_Int(file,"TBan");
    if(timestamp < bisgebannt) //wenn der gerade genommene Timestamp kleiner als bisgebannt ist, liegt das entbannungsdatum in der Zukunft.
    {
    new differenz = bisgebannt - timestamp; //wir subtrahieren bisgebannt von timestamp, wir erhalten also die Zeit in Sekunden wie lange der Spieler noch gebannt ist.
    new minuten = differenz / 60; //wir machen aus den Sekunden Minuten....
    new vstr[64]; //neuer String wird deklariert....
    format(vstr,sizeof(vstr),"Du bist noch %i Minuten gebannt!",minuten); //So bekommt der Spieler sogar noch angezeigt, wie langer er noch genau gebannt ist.
    SendClientMessage(playerid,0xFAFAFAFF,vstr); //String wird dem Spieler ausgegeben
    KickTimer(playerid);//Kick erfolgt
    }



    stock TBan(playerid,const string[],dauer,bannerid)
    {
    new timestamp;
    new str[128];
    timestamp = gettime();
    new sekunden = dauer * 60;
    timestamp += sekunden;
    new name[MAX_PLAYER_NAME],bannername[MAX_PLAYER_NAME];
    GetPlayerName(playerid,name,sizeof(name));
    GetPlayerName(bannerid,bannername,sizeof(bannername));
    format(str,sizeof(str),"AdmMsg: Spieler %s wurde von Admin %s für %d Minuten gebannt. Grund: %s",name,bannername,dauer,string);
    SendClientMessageToAll(ROT,str);
    KickTimer(playerid);
    new pfad[MAX_PLAYER_NAME+16];
    format(pfad,sizeof(pfad),"/accounts/%s.ini",name);
    dini_IntSet(pfad, "tban", timestamp);
    }


    und



    ocmd:tban(playerid,params[])
    {
    new pID,grund[64],dauer;
    if(sscanf(params, "usi", pID, grund,dauer))return SendClientMessage(playerid, 0xFF004BFF, "/tban [ID] [Grund] [Dauer]");
    TBan(pID,grund,dauer,playerid);
    return 1;
    }



    Kann mir jemand den Fehler nennen ?


    Mfg Saphire

  • Das mit dem TBan ist schon richtig, das ist der Wert des Timestamp + 120 Sekunden müsst dann deine Zeit sein, kannst du hier überprüfen http://www.unixtimestamp.de/ einfach dort deine 14.... eingeben, und dann wird dir unten alles angezeigt.

    Die Kritik an anderen hat noch keinem die eigene Leistung erspart.

    – Noël Coward

  • kann es ansonsten daran liegen, dass du "TBan" beim lesen und "tban" beim schreiben geschrieben hast?


    Leider lag es auch nicht daran.



    Eddy:


    Oke, aber warum akzeptiert er mein Passwort nicht obwohl ich es richtig eingebe ?
    Selbst wenn ich in der .ini eine "TBan=0" eingebe oder die Zeile ganz löche behauptet er das sei das falsche Passwort :pinch:



    Mfg

  • Jeffry:


    Hier bitteschön


    Spoiler anzeigen


    Function OnPlayerRequestClass(playerid, classid)
    {
    new nam[MAX_PLAYER_NAME];
    new str[300];
    GetPlayerName(playerid, nam, sizeof(nam));
    format(str, sizeof(str),"{FFFFFF}Herzlich Willkommen auf Momento Roleplay - The Time Starts\nWir Freuen uns das du zu uns gejoint bist.\nDer Account Name{FF5A00} %s {FFFFFF}wurde in unserer Datenbank nicht gefunden.\nErstelle dir einfach einen Account damit du hier spielen kannst.", nam);
    new str2[150];
    format(str2, sizeof(str2),"{FFFFFF}|~~| Willkommen {FF5A00}%s {FFFFFF}|~~|\n\n|*| Schön das du wieder da bist |*| \n\n|~~| Gib dein Passwort ein um dich einzuloggen! |~~|", nam);
    if(IsPlayerNPC(playerid))
    {
    SpawnPlayer(playerid);
    return 1;
    }
    new timestamp = gettime();
    new Name[MAX_PLAYER_NAME];
    new file[128];
    GetPlayerName(playerid, Name, sizeof(Name));
    format(file,sizeof(file),"Accounts/%s.ini", Name);
    new bisgebannt = dini_Int(file,"TBan");
    if(timestamp < bisgebannt) //wenn der gerade genommene Timestamp kleiner als bisgebannt ist, liegt das entbannungsdatum in der Zukunft.
    {
    new differenz = bisgebannt - timestamp; //wir subtrahieren bisgebannt von timestamp, wir erhalten also die Zeit in Sekunden wie lange der Spieler noch gebannt ist.
    new minuten = differenz / 60; //wir machen aus den Sekunden Minuten....
    new vstr[64]; //neuer String wird deklariert....
    format(vstr,sizeof(vstr),"Du bist noch %i Minuten gebannt!",minuten); //So bekommt der Spieler sogar noch angezeigt, wie langer er noch genau gebannt ist.
    SendClientMessage(playerid,0xFAFAFAFF,vstr); //String wird dem Spieler ausgegeben
    KickTimer(playerid);//Kick erfolgt
    }
    else if(gPlayerAccount[playerid] == 1 && gPlayerLogged[playerid] == 0)
    {
    ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_PASSWORD,"{FFFF00}Login",str2,"Login","Abbrechen");
    }
    else if(gPlayerAccount[playerid] == 0 && gPlayerLogged[playerid] == 0)
    {
    ShowPlayerDialog(playerid,DIALOG_REG,DIALOG_STYLE_MSGBOX,"{FFFF00}Account",str,"Erstellen","Abbrechen");
    }

    Spoiler anzeigen
    PlayerPlaySound(playerid, 1176, 0.0, 0.0, 0.0);
    PlayerInfo[playerid][pModel] = Peds[classid][0];
    SetPlayerTeamFromClass(playerid,classid);
    SetupPlayerForClassSelection(playerid);
    return 1;
    }

  • Oke hab ich dann wohl falsch verstanden :D


    also hier


    Spoiler anzeigen


    if(dialogid == DIALOG_LOGIN)
    {
    if(response && strlen(inputtext) > 0)
    {
    OnPlayerLogin(playerid,inputtext);
    }
    else
    {
    Kick(playerid);
    }
    }


    Bestimmt brauchst du dann gleich das hier :D


    Spoiler anzeigen


    new string2[128];
    new playername2[MAX_PLAYER_NAME];
    GetPlayerName(playerid, playername2, sizeof(playername2));
    format(string2, sizeof(string2), "/Accounts/%s.ini", playername2);
    new File: UserFile = fopen(string2, io_read);
    if ( UserFile )
    {
    new PassData[256];
    new keytmp[256], valtmp[256];
    fread( UserFile , PassData , sizeof( PassData ) );
    keytmp = ini_GetKey( PassData );
    if( strcmp( keytmp , "Key" , true ) == 0 )
    {
    valtmp = ini_GetValue( PassData );
    strmid(PlayerInfo[playerid][pKey], valtmp, 0, strlen(valtmp)-1, 255);
    }
    if(strcmp(PlayerInfo[playerid][pKey],password, true ) == 0 )
    {
    ...
    ...
    ...
    }
    else
    {
    ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_INPUT,"{A50000}Login","Das Passwort ist nicht korrekt! Bitte gib nun dein richtiges Passwort ein:","Login","Abbrechen");
    fclose(UserFile);
    gPlayerLogTries[playerid] += 1;
    if(gPlayerLogTries[playerid] == 4) { Ban(playerid); }
    return 1;
    }

  • Du arbeitest mit zwei verschiedenen Systemen.
    new bisgebannt = dini_Int(file,"TBan");
    keytmp = ini_GetKey( PassData );


    Deshalb klappt das nicht.


    Ändere
    keytmp = ini_GetKey( PassData );
    mal zu:
    keytmp = dini_Get(string2, "Key"); //Oder "Key" eben wie dein Passwort gespeichert ist ("DASHIER=passwort")