/tban Problem

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
  • Gutne Tag,
    Ich habe gerade in der SuFu ein Tban Tutorial gefunden, aber der klappt nicht:


    stock Tban(playerid,const string[],dauer,bannerid)
    {
    new timestamp,str[128],pfad[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: %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);
    dini_IntSet(pfad,"tbans/%s.txt",timestamp);
    return 1;
    }
    dcmd_tban(playerid,params[])
    {
    new pID,grund[64],dauer;
    if(sscanf(params, "usi", pID, grund,dauer))return SendClientMessage(playerid,GRAU,"VERWENDE: /tban [ID] [Grund] [Dauer]");
    Tban(pID,grund,dauer,playerid);
    return 1;
    }
    public OnPlayerConnect(playerid)
    {
    SpielerLaden(playerid);
    new string[300],string1[300],name[MAX_PLAYER_NAME],Spielerdatei[128],pfad[128];
    GetPlayerName(playerid,name,sizeof(name));
    new timestamp = gettime();
    new bisgebannt = dini_Int(pfad,"tbans");
    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 str[64]; //neuer String wird deklariert....
    format(str,sizeof(str),"Du bist noch %i Minuten gebannt!",minuten); //So bekommt der Spieler sogar noch angezeigt, wie langer er noch genau gebannt ist.
    SendClientMessage(playerid,ROT,str); //String wird dem Spieler ausgegeben
    Kick(playerid);//Kick erfolgt
    }
    format(Spielerdatei,sizeof(Spielerdatei),"/Test/%s.txt",name);
    if(dini_Exists(Spielerdatei))
    {
    format(string1,sizeof(string1),"{FAFAFA} Herzlich Willkommen zurück!\n Dein Benutzername: %s\n\nLogge dich nun mit deinen Daten(Passwort) ein!",name);
    ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_PASSWORD,"{DF7401}[SoA]: {FAFAFA}Login",string1,"Login","Abbrechen");
    }
    else
    {
    format(string,sizeof(string),"{FAFAFA} Herzlich Willkommen, Neuling %s!\n\n Damit du hier in der nächsten Zeit weiter hin spielen kannst,\n musst du dir als aller erstes ein Account anlegen!",name);
    ShowPlayerDialog(playerid,DIALOG_REGISTER,DIALOG_STYLE_INPUT,"{DF7401}[SoA]: {FAFAFA}Registrierung",string,"Register","Abbrechen");
    }
    return 1;
    }


    Es wird nichts in dem Ordner "tbans" erstellt, und ich kann mich nach dem tban sofort wieder einloggen!


    Bitte helft mir.
    Grüße,
    TheBester

  • Spoiler anzeigen
    ja ich schreib dir einen:

    Spoiler anzeigen
    //Timeban
    command(timeban, playerid, params[])
    {
    new string[128], reason[105], id, zeit;
    //Loggen
    new year, month, day;
    new hour,minute,second;
    getdate(year,month,day);
    gettime(hour,minute,second);
    if(sStats[playerid][sAdminlevel] < 2)
    return SendClientMessage(playerid, Rot, "Du bist kein Administrator oder dein Administratorenlevel ist zu niedrig!");
    if(GetPVarInt(playerid, "Adminduty") == 0)
    return SendClientMessage(playerid, Rot, "Du musst erst als Admin im Einsatz sein um andere Leute bannen zu können!");
    if(sscanf(params, "uds", id,zeit, reason))
    {
    SendClientMessage(playerid, Weiß, "Befehl: /timeban [Name/ID] [Zeit] [Grund]");
    SendClientMessage(playerid, Gelb, "Zeitangabe in Minuten.");
    return 1;
    }
    if(sStats[playerid][sAdminlevel] < 3 && zeit > 180)
    return SendClientMessage(playerid,Rot,"Du kannst den Spieler nur für max. 180 Minuten bannen!");
    if(id == playerid)
    return SendClientMessage(playerid,Rot,"Du kannst dich nicht selber bannen!");
    if(IsPlayerNPC(id))
    return SendClientMessage(playerid,Rot,"Du kannst keinen NPC/Bot bannen!");
    if(id == INVALID_PLAYER_ID)
    return SendClientMessage(playerid,Rot,"Dieser Spieler existiert nicht!");
    if(sStats[playerid][sAdminlevel] < sStats[id][sAdminlevel])
    return SendClientMessage(playerid, Rot, "Du kannst keinen Administrator bannen, welcher ein höheres Administratorenlevel hat wie du!");

    Spoiler anzeigen
    format(string, sizeof(string), "* Du wurdest vom Administrator %s für %d Minuten vom Server gebannt. Grund: %s", GetName(playerid),zeit, reason);
    SendClientMessage(id, Rot, string);
    format(string, sizeof(string), "* Spieler %s[%d] wurde vom Administrator %s für %d Minuten gebannt. Grund: %s", GetName(id),id, GetName(playerid),zeit, reason);
    SendClientMessageToAll(Rot, string);
    format(string,sizeof(string),"(%d/%d/%d) [%d:%d:%d] %s wurde vom Administrator %s fuer %d Minuten gebannt. Grund: %s",day,month,year,hour,minute,second,GetName(id),GetName(playerid),zeit,reason);
    BanLog(string);
    TogglePlayerControllable(id, false);
    sStats[id][sTimeBan] = gettime()+(60*zeit);
    SaveSpieler(id);
    Kick(id);
    return 1;
    }

    Spoiler anzeigen
    Bei Spielerladen

    Spoiler anzeigen
    //Timeban
    if(gettime()<sStats[playerid][sTimeBan] && sStats[playerid][sTimeBan] > 0)
    {
    new days,hours,mins,secs;
    new wartezeit = sStats[playerid][sTimeBan];
    new restzeit= wartezeit -gettime();
    days = floatround(restzeit / 86400,floatround_floor);
    hours = restzeit - (days * 86400);
    hours = floatround(hours / 3600,floatround_floor);
    mins = restzeit - ( (days * 86400) + (hours * 3600) );
    mins = floatround(mins / 60,floatround_floor);
    secs = restzeit - ( (days * 86400) + (hours * 3600) + (mins * 60) );
    format(string, sizeof(string), "Du bist noch für %d Minuten gebannt.(%d Stunden).",mins,hours);
    SendClientMessage(playerid, Rot,string);
    TogglePlayerControllable(playerid, false);
    SaveSpieler(playerid);
    Kick(playerid);
    return 1;
    }
    else
    {
    sStats[playerid][sTimeBan] = 0;
    }

  • es wird ja auch gar keine Datei erstellt, sondern nur versucht in eine zu schreiben und dein dini Int Set macht so auch kein Sinn:


    stock Tban(playerid,const string[],dauer,bannerid)
    {
    new timestamp,str[128],pfad[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: %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);
    new filestring[64];
    format(filestring,sizeof(filestring),"tbans\%s",name);
    if(!dini_Exists(filestring)
    {
    dini_Create(filestring);
    }
    dini_SetInt(filestring,"tbans",timestamp);
    Kick(playerid); // übern Timer machen oder von Hauke das kleine include nutzen
    return 1;
    }


    public OnPlayerConnect(playerid)
    {
    SpielerLaden(playerid);
    new string[300],string1[300],name[MAX_PLAYER_NAME],Spielerdatei[128],pfad[128];
    GetPlayerName(playerid,name,sizeof(name));
    format(pfad,sizeof(pfad),"tbans\%s",name);
    new timestamp = gettime();
    new bisgebannt = dini_Int(pfad,"tbans");
    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 str[64]; //neuer String wird deklariert....
    format(str,sizeof(str),"Du bist noch %i Minuten gebannt!",minuten); //So bekommt der Spieler sogar noch angezeigt, wie langer er noch genau gebannt ist.
    SendClientMessage(playerid,ROT,str); //String wird dem Spieler ausgegeben
    Kick(playerid);//Kick erfolgt
    return 1;
    }
    format(Spielerdatei,sizeof(Spielerdatei),"/Test/%s.txt",name);
    if(dini_Exists(Spielerdatei))
    {
    format(string1,sizeof(string1),"{FAFAFA} Herzlich Willkommen zurück!\n Dein Benutzername: %s\n\nLogge dich nun mit deinen Daten(Passwort) ein!",name);
    ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_PASSWORD,"{DF7401}[SoA]: {FAFAFA}Login",string1,"Login","Abbrechen");
    }
    else
    {
    format(string,sizeof(string),"{FAFAFA} Herzlich Willkommen, Neuling %s!\n\n Damit du hier in der nächsten Zeit weiter hin spielen kannst,\n musst du dir als aller erstes ein Account anlegen!",name);
    ShowPlayerDialog(playerid,DIALOG_REGISTER,DIALOG_STYLE_INPUT,"{DF7401}[SoA]: {FAFAFA}Registrierung",string,"Register","Abbrechen");
    }
    return 1;
    }


    Dir fehlte erstens das erstellen der Datei und beim Connecten hast du den filestring nicht korrekt initialisiert, der war nämlich leer

    Einmal editiert, zuletzt von Hagi ()