Timebanzeit läuft einfach weiter

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
  • Ich habe ein Timebansystem mit DINI.
    Mein Timebansystem funktioniert beim bannen aber nachdem die Zeit wieder abgelaufen ist steht da folgendes:



    Dass heißt das die Zeit einfach ins Minus geht.
    Ich habe vor, dass der Spieler sich nachdem er temporär gebannt wurde sich wieder einzuloggen wenn die Zeit abgelaufen ist, nur weiß ich nicht genau wie ich das mit dem dem Login verbinden soll (Weil /ban da schon steht)


    ocmd:tban(playerid,params[])
    {
    if(!IstSpielerAdmin(playerid,3))return SendClientMessage(playerid,Grau,"[Fehler] Du hast nicht die benötigten Rechte für diesen Befehl.");
    {
    new pID;
    new zeit;
    new grund[64];
    new string[128];
    new tmptime;
    if(!IsPlayerConnected(pID))return SendClientMessage(playerid,Rot,"Der Spieler ist nicht verbunden.");
    if(sscanf(params,"uis",pID,zeit,grund))return SendClientMessage(playerid,Gelb,"/tban [Spieler/ID] [Zeit] [Grund]");
    {
    format(string,sizeof(string),"%s wurde von %s für %i Minuten gebannt. Grund: %s",SpielerName(pID),SpielerName(playerid),zeit,grund);
    SendClientMessageToAll(Superhellrot,string);
    tmptime = (gettime()+3600)+(60*zeit);
    SetPVarInt(pID,"Timeban",tmptime);
    new Spieler[128];
    format(Spieler,sizeof(Spieler),"/Spieler/%s.txt",SpielerName(pID));
    {
    dini_Set(Spieler,"Timebangrund",grund);
    dini_Set(Spieler,"Timebanadmin",SpielerName(playerid));
    dini_IntSet(Spieler,"Timebanzeit",GetPVarInt(pID,"Timeban"));
    }
    Kick(pID);
    }
    }
    return 1;



    new Spieler1[128];
    format(Spieler1,sizeof(Spieler1),"/Spieler/%s.txt",SpielerName(playerid));
    if(fexist(Spieler1))
    {
    dini_Get(Spieler1,"Timebangrund");
    dini_Get(Spieler1,"Timebanadmin");
    SetPVarInt(playerid,"Timeban",dini_Int(Spieler1,"Timebanzeit"));
    }
    new time = gettime();
    if(time < GetPVarInt(playerid,"Timeban"))
    {
    new restzeit = (GetPVarInt(playerid,"Timeban") - time - 3600)/60;
    new string[384];
    format(string,sizeof(string),"Dein Account wurde wegen eines Regelverstoßes temporaer gesperrt, mit ihm kann zurzeit nicht gespielt werden.\n\nWenn das nicht Dein Account ist, verwende einen anderen Nicknamen\nWenn Du zu Unrecht gesperrt wurdest, dann melde Dich bitte bei einem Admin\n\nGrund: %s\nDauer: %i Minuten\nAdmin: %s",dini_Get(Spieler1,"Timebangrund"),restzeit,dini_Get(Spieler1,"Timebanadmin"));
    ShowPlayerDialog(playerid,TIMEBAN,DIALOG_STYLE_MSGBOX,"Script Server Unlimited - Spielausschluss",string,"Okay","");
    return 0;
    }


    Ich hoffe Ihr könnt mir dabei helfen.


    Mit freundlichen Grüßen
    Domain_26

  • Willkommen auf Breadfish!


    tmptime = (gettime()+3600)+(60*zeit);
    zu:
    tmptime = gettime()+(60*zeit);



    Und
    new restzeit = (GetPVarInt(playerid,"Timeban") - time - 3600)/60;
    zu:
    new restzeit = (GetPVarInt(playerid,"Timeban") - time)/60;



    Dann dürfte es klappen.

  • Dass heißt das die Zeit einfach ins Minus geht.
    Ich habe vor, dass der Spieler sich nachdem er temporär gebannt wurde sich wieder einzuloggen wenn die Zeit abgelaufen ist, nur weiß ich nicht genau wie ich das mit dem dem Login verbinden soll (Weil /ban da schon steht)


    Ganz einfach, du zeigst ihm dein Login-Dialog oder du sperrst ihn ein wenn du es per Command machst.
    Ich empfehle dir den Login- und Registerbereich bei
    OnPlayerRequestClass zu machen,da du die Banzeit dann bei OnPlayerConnect überprüfen lassen kannst. Das ist um einiges einfacher, da die Schritte sich nicht überschneiden können.


    Gruß.

  • Es gibt die Sekunden seit 01.01.1970 zurück, normalerweise in GMT Zeit, und wir sind ja gerade GMT+1.
    Wenn du das beibehalten willst, dann musst du hier die Änderung machen, die anderen zwei Änderungen kannst du dann vergessen:


    new time = gettime();
    zu:
    new time = gettime()+3600;


    PS: Vergesse nicht, dass wir in einem halben Jahr wieder Sommerzeit haben, also GMT+2.

  • Funktioniert immer noch nicht. Ich werde nach dem Connecten sofort gespawnt mit Login Dialog (OnPlayerRequestClass)


    Ich zeig euch jetzt einfach, was in dem OnPlayerConnect callback steht:


    public OnPlayerConnect(playerid)
    {
    SpielerMitTimeban(playerid);
    new Spieler1[128];
    format(Spieler1,sizeof(Spieler1),"/Spieler/%s.txt",SpielerName(playerid));
    if(dini_Exists(Spieler1))
    {
    dini_Get(Spieler1,"Timebangrund");
    dini_Get(Spieler1,"Timebanadmin");
    }
    new time = gettime()-3600;
    if(time < GetPVarInt(playerid,"Timeban"))
    {
    new restzeit = (GetPVarInt(playerid,"Timeban") - time)/60;
    new string[384];
    format(string,sizeof(string),"Dein Account wurde wegen eines Regelverstoßes temporär gesperrt, mit ihm kann zurzeit nicht gespielt werden.\n\nWenn das nicht Dein Account ist, verwende einen anderen Nicknamen\nWenn Du zu Unrecht gesperrt wurdest, dann melde Dich bitte bei einem Admin\n\nGrund: %s\nDauer: %i Minuten\nAdmin: %s",dini_Get(Spieler1,"Timebangrund"),restzeit,dini_Get(Spieler1,"Timebanadmin"));
    ShowPlayerDialog(playerid,BAN,DIALOG_STYLE_MSGBOX,"Script Server Unlimited - Temporärer Spielausschluss",string,"Okay","");
    return 0;
    }
    SpielerMitBan(playerid);
    if(GetPVarInt(playerid,"Ban") !=0)
    {
    new bantext[320];
    new Spieler[64];
    format(Spieler,sizeof(Spieler),"/Spieler/%s.txt",SpielerName(playerid));
    if(dini_Exists(Spieler))
    {
    dini_Get(Spieler,"Reason");
    dini_Get(Spieler,"Admin");
    }
    format(bantext,sizeof(bantext),"Dein Account wurde wegen eines Regelverstoßes gesperrt, mit ihm kann nicht mehr gespielt werden.\n\nWenn das nicht Dein Account ist, verwende einen anderen Nicknamen\nWenn Du zu Unrecht gesperrt wurdest, dann melde Dich bitte bei einem Admin\n\nGrund: %s\nDauer: permanent\nAdmin: %s",dini_Get(Spieler,"Reason"),dini_Get(Spieler,"Admin"));
    ShowPlayerDialog(playerid,BAN,DIALOG_STYLE_MSGBOX,"Script Server Unlimited - Spielausschluss",bantext,"Okay","");
    return 0;
    }
    new cstring[128];
    format(cstring,sizeof(cstring),"%s [ID: %i] hat den Server betreten.",SpielerName(playerid),playerid);
    SendClientMessageToAll(Tuerkies,cstring);
    TextDrawShowForPlayer(playerid,Textdraw0);
    TextDrawShowForPlayer(playerid,Textdraw1);
    TextDrawShowForPlayer(playerid,Textdraw2);
    TextDrawShowForPlayer(playerid,Textdraw3);
    TextDrawShowForPlayer(playerid,Textdraw4);
    PlayAudioStreamForPlayer(playerid,"https://ronehothiphopdetroit.files.wordpress.com/2014/07/wiz-khalifa_you-and-your-friends_radio-edit.mp3");
    for(new i=0; i<25; i++)
    {
    SendClientMessage(playerid,-1,"");
    }
    new Spieler2[64],string[256];
    new Sname[MAX_PLAYER_NAME];
    GetPlayerName(playerid,Sname,sizeof(Sname));
    format(Spieler2,sizeof(Spieler2),"/Spieler/%s.txt",Sname);
    if(dini_Exists(Spieler2))
    {
    SendClientMessage(playerid,Blau,"Herzlich Willkommen zurück auf Script Server Unlimited");
    format(string,sizeof(string),"Willkommen zurück %s\n\nDein Account wurde in unserer Datenbank gefunden.\nGebe niemals dein Passwort weiter, auch nicht der Administration!\nBitte gebe nun dein Passwort ein um dich einzuloggen:",Sname);
    ShowPlayerDialog(playerid,LOGIN,DIALOG_STYLE_PASSWORD,"Script Server - Login",string,"Login","Abbrechen");
    }
    else
    {
    SendClientMessage(playerid,Blau,"Herzlich Willkommen auf Script Sever Unlimited");
    ShowPlayerDialog(playerid,REGISTER,DIALOG_STYLE_INPUT,"Script Server - Registrieren","Herzlich Willkommen auf Hurensohn Gaming.\n\nBitte wähle ein Passwort um Dir einen Account zu erstellen!","Registrieren","Abbrechen");
    return 1;
    }
    return 1;
    }


    Nicht wundern wenn da überflüssige Funktionen stehen, bin noch Anfänger

  • Das liegt dann daran, dass der Wert hiervon noch 0 ist.
    GetPVarInt(playerid,"Timeban")


    Das musst du zuvor aus der Spielerdatei laden.



    Außerdem musst du beim Laden des Grundes und des Admins den Wert in eine Variable schreiben, sonst bringt es nichts.


    Versuch das mal zu realisieren, wenn du mit der Erklärung nicht klar kommst, poste nochmal den Code wie du ihn bis dahin hast, dann kann ich es dir machen.

  • Sry, es handelt sich hier um ein Missverständnis.


    stock SpielerMitTimeban(playerid)
    {
    new Spieler[128];
    format(Spieler,sizeof(Spieler),"/Spieler/%s.txt",SpielerName(playerid));
    if(dini_Exists(Spieler))
    {
    SetPVarInt(playerid,"Timeban",dini_Int(Spieler,"Timebanzeit"));
    }
    return 1;
    }


    Hier habe ich sie schon geladen.


    Und das mit dem Grund und Admin Funktioniert auch ganz gut.


    Das Hauptproblem ist immer noch die Entsperrung, denn diese wird nicht aufgehoben und die Zeit läuft einfach ins Minus.

  • new time = gettime()-3600;


    Das stimmt nicht.
    Hast du bei deinem tban Befehl das +3600 noch dran oder nicht?
    Wenn ja:
    new time = gettime()+3600;


    Wenn nein:
    new time = gettime();



    Wenn es so noch immer nicht klappt, poste bitte den Befehl und das aktuelle OnPlayerConnect nochmal.




    EDIT:
    Domain_26: Super! :thumbup: (PS: Nicht wahrscheinlich, sondern auf jeden Fall ;)).

    3HZXdYd.png

    Einmal editiert, zuletzt von Jeffry ()