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
  • Hier hast du nochmal ein Beispiel, bzw. es ist schon fast ein kompletter Code:
    new query[256];
    format(query, sizeof(query), "SELECT banID FROM bans WHERE banName = '%s' AND banTime < %d", SpielerName(playerid), gettime());
    mysql_query(query);
    mysql_store_result();
    if(mysql_num_rows())
    {
        format(query, sizeof(query), "DELETE FROM bans WHERE banID = %d", mysql_fetch_int());
        mysql_query(query);
    }
    else
    {
        mysql_free_result();
        format(query, sizeof(query), "SELECT banID FROM bans WHERE banName = '%s' AND banTime >= %d", SpielerName(playerid), gettime());
        mysql_query(query);
        mysql_store_result();
        if(mysql_num_rows())
        {
            Kick(playerid); //Spieler noch gebannt.
        }
    }
    mysql_free_result();

    Ich habe das ohne Compiler und ohne zu testen einfach in den Texteditor getippt, da ich grade weder pawno noch SA-MP zu Verfügung habe.
    Teste es mal aus, bzw. nimm die Änderungen vor die du brauchst und gib dann Bescheid. Falls es nicht klappt kann ich es mir später genauer anschauen, sage mir dann aber bitte genau was nicht geht.

  • So,


    ich habe dies alles in einen Stock eingefügt! Und jetzt versteh ich grad kein stück was ich in BanID eintragen soll etc... ? Denn ich weiß jetzt nicht ob ich bei der BanID z.b.: jetzt die Hauptdatebank eintragen soll , dann die Datenbank mit den TimeBans , und dann den namen oder?


    //EDIT: habe es jetzt so gemacht:



    stock LoadTBanAccount(playerid)
    {
    new query[256],spieler[MAX_PLAYERS];
    GetPlayerName(playerid, spieler, MAX_PLAYER_NAME);
    format(query, sizeof(query), "SELECT banID FROM bans WHERE banName = '%s' AND banTime < %d", spieler, gettime());
    mysql_query(query);
    mysql_store_result();
    if(mysql_num_rows())
    {
    format(query, sizeof(query), "DELETE FROM spielertimebanned WHERE banID = %d", mysql_fetch_int());
    mysql_query(query);
    }
    else
    {
    mysql_free_result();
    format(query, sizeof(query), "SELECT banID FROM spielertimebanned WHERE Name = '%s' AND Dauer >= %d",spieler, gettime());
    mysql_query(query);
    mysql_store_result();
    if(mysql_num_rows())
    {
    Kick(playerid);
    }
    }
    mysql_free_result();
    return true;
    }


    Und wie frage ich ab, wie lange der Spieler noch gebannt ist? Also dass da stehen soll: Du bist noch für 2 Minute(n) gebannt ... oder so

    Mit freundlichen Grüßen
    [KoSoVa] :klugs:

    Einmal editiert, zuletzt von [GeD]Max ()

  • stock LoadTBanAccount(playerid)
    {
    new query[256],spieler[MAX_PLAYERS];
    GetPlayerName(playerid, spieler, MAX_PLAYER_NAME);
    format(query, sizeof(query), "SELECT banID FROM bans WHERE banName = '%s' AND banTime < %d", spieler, gettime());
    mysql_query(query);
    mysql_store_result();
    if(mysql_num_rows())
    {
    format(query, sizeof(query), "DELETE FROM spielertimebanned WHERE banID = %d", mysql_fetch_int());
    mysql_query(query);
    }
    else
    {
    mysql_free_result();
    format(query, sizeof(query), "SELECT Dauer FROM spielertimebanned WHERE Name = '%s' AND Dauer >= %d",spieler, gettime());
    mysql_query(query);
    mysql_store_result();
    if(mysql_num_rows())
    {
    new dauer = mysql_fetch_int() - gettime(); //dauer = Zeit in Sekunden
    new minuten = dauer / 60;
    new str[145];
    format(str, sizeof(str), "Du bist noch %d Minuten gebannt.", minuten);
    SendClientMessage(playerid, 0xFF0000FF, str);
    Kick(playerid);
    }
    }
    mysql_free_result();
    return true;
    }


    Allerdings musst du bei den 3 Queries noch die Spalten und Tabellennamen teilweise anpassen, das hast du noch nicht für alle gemacht.

  • So, ich habs gemacht , dennoch wenn ich mich banne, und dann wieder online komme, ist der Account sofort automatisch gelöscht, obwohl ich eigentlich noch 3 Minuten oder so, gebannt sein sollte....


    Hier mein derzeitiger Code:



    stock LoadTBanAccount(playerid)
    {
    new query[256],spieler[MAX_PLAYERS];
    GetPlayerName(playerid, spieler, MAX_PLAYER_NAME);
    format(query, sizeof(query), "SELECT banID FROM spielertimebanned WHERE Name = '%s' AND Dauer < %d", spieler, gettime());
    mysql_query(query);
    mysql_store_result();
    if(mysql_num_rows())
    {
    format(query, sizeof(query), "DELETE FROM spielertimebanned WHERE banID = %d", mysql_fetch_int());
    mysql_query(query);
    }
    else
    {
    mysql_free_result();
    format(query, sizeof(query), "SELECT Dauer FROM spielertimebanned WHERE Name = '%s' AND Dauer >= %d",spieler, gettime());
    mysql_query(query);
    mysql_store_result();
    if(mysql_num_rows())
    {
    new dauer = mysql_fetch_int() - gettime(); //dauer = Zeit in Sekunden
    new minuten = dauer / 60;
    new str[145];
    format(str, sizeof(str), "Du bist noch %d Minuten gebannt.", minuten);
    SendClientMessage(playerid, 0xFF0000FF, str);
    Kick(playerid);
    }
    }
    mysql_free_result();
    return true;
    }


    Mit freundlichen Grüßen
    [KoSoVa] :klugs:

  • So, also hier steht der Wert in der DatenBank:


    unter Dauer: "1415132329"


    und hier nochmal screen wie das ingame aussieht: http://www.fotos-hochladen.net/uploads/samp0420yhfbmdewo.png


    und hier nochmal der TimeBan Befehl:



    ocmd:timeban(playerid,params[])
    {
    if(SpielerInfo[playerid][pAlevel] >= 1)
    {
    new pID, grund[32],dauer,string[128];
    if(sscanf(params,"uds[32]",pID,dauer,grund)) return SendClientMessage(playerid,0xFF0000FF,"[FEHLER]{FFFFFF} /Timeban [Name/ID][Dauer][Grund]");
    {
    if(IsPlayerConnected(pID))
    {
    GetPlayerName(playerid, SpielerTimeBan[pID][pvonAdmin], MAX_PLAYER_NAME);
    GetPlayerName(pID, SpielerTimeBan[pID][pNameTBan], MAX_PLAYER_NAME);
    format(string,sizeof(string),"[INFO]{00CDFF} %s {FFFFFF}hat {00CDFF}%s {FFFFFF}für {00CDFF}%d Minute(n) {FFFFFF}vom Server verbannt! Grund: {00CDFF}%s",SpielerTimeBan[pID][pvonAdmin],SpielerTimeBan[pID][pNameTBan],dauer,grund);
    SendClientMessageToAll(0xFF0000FF,string);
    SpielerTimeBan[pID][pTBanDauer] = Now() + dauer*60;
    GetPlayerIp(pID, SpielerTimeBan[pID][pTBanIP], 16);
    SpielerTimeBan[pID][pTBanGrund] = grund;
    CreateTBanAccount(pID);
    Kick(pID);
    }
    else
    {
    SendClientMessage(playerid,0xFF0000FF,"[FEHLER]{FFFFFF} Dieser Spieler ist nicht Online!");
    }
    }
    }
    return 1;
    }
    //Kann man auch den GRUND auch verlängern?Also dass man mehr reinschreiben kann?



    Und irgendwie wird nichtsmehr in der DatenBank eingetragen über meinen BAN Befehl:



    ocmd:ban(playerid,params[])
    {
    if(SpielerInfo[playerid][pAlevel] >= 2)
    {
    new pID, string[256], aname[MAX_PLAYERS], spieler[MAX_PLAYERS], grund[256];
    GetPlayerName(playerid,aname,sizeof(aname));
    GetPlayerName(pID,spieler,sizeof(spieler));
    if(sscanf(params,"us",pID,grund))return SendClientMessage(playerid,0xFF0000FF,"[FEHLER]{FFFFFF} /Ban [Name/ID] [Grund]");
    {
    if(IsPlayerConnected(pID))
    {
    SpielerInfo[pID][pBanned] = 1;
    format(string,sizeof(string),"[A-INFO]{00CDFF} %s {FFFFFF}hat {00CDFF}%s {FFFFFF}verbannt! Grund: {00CDFF}%s",aname,spieler,grund);
    SendClientMessageToAll(0xFF0000FF,string);
    printf("[A-INFO] %s hat %s einen AccountBan vergeben!",aname,spieler);
    Kick(pID);
    }
    else
    {
    SendClientMessage(playerid,0xFF0000FF,"[FEHLER]{FFFFFF} Dieser Spieler ist nicht Online!");
    }
    }
    }
    return 1;
    }

    Mit freundlichen Grüßen
    [KoSoVa] :klugs:

  • Grund:
    new pID, grund[32],dauer,string[128];
    zu:
    new pID, grund[32],dauer,string[145];



    Zeit:
    SpielerTimeBan[pID][pTBanDauer] = Now() + dauer*60;
    zu:
    SpielerTimeBan[pID][pTBanDauer] = gettime() + dauer*60;



    Bei deinem Ban Befehl fehlt das Query, es kann nichts eingetragen werden.


    Wenn der Timeban noch immer nicht geht nach diesen beiden Änderungen, poste die CreateTBanAccount Funktion.

  • Alles klar danke Jeffrey, geht jetzt alles perfekt!


    Aber das mit den Ban versteh ich nicht ganz, denn früher ging das Bansystem perfekt, aber seid dem ich die Timeban Funktion eingeführt habe , geht es jetzt nicht mehr.

    Mit freundlichen Grüßen
    [KoSoVa] :klugs:


  • stock SavePlayer(playerid)
    {
    if(IsPlayerConnected(playerid) && !IsPlayerNPC(playerid)) //wir überprüfen ob der Spieler überhaupt noch Connected ist und ob er nicht ein NPC ist.
    {
    if(GetPVarInt(playerid,"Eingeloggt") == 1) //Und hier ob er noch eingeloggt ist.
    {
    mysql_SetInt("user", "Score", SpielerInfo[playerid][pScore], "Name", SpielerInfo[playerid][pName]);
    mysql_SetInt("user", "Alevel", SpielerInfo[playerid][pAlevel], "Name", SpielerInfo[playerid][pName]);
    mysql_SetInt("user", "Member", SpielerInfo[playerid][pMember], "Name", SpielerInfo[playerid][pName]);
    mysql_SetInt("user", "Leader", SpielerInfo[playerid][pLeader], "Name", SpielerInfo[playerid][pName]);
    mysql_SetInt("user", "Geld", SpielerInfo[playerid][pGeld], "Name", SpielerInfo[playerid][pName]);
    mysql_SetInt("user", "Kills", SpielerInfo[playerid][pKills], "Name", SpielerInfo[playerid][pName]);
    mysql_SetInt("user", "Tode", SpielerInfo[playerid][pTode], "Name", SpielerInfo[playerid][pName]);
    mysql_SetInt("user", "Banned", SpielerInfo[playerid][pBanned], "Name", SpielerInfo[playerid][pName]);
    mysql_SetFloat("user", "Health", SpielerInfo[playerid][pHealth], "Name", SpielerInfo[playerid][pName]);
    }
    }
    return 1;
    }


    //So prüfe ich es ab , Ist ein Stock , der in OnPlayerConnect abgerufen wird!


    stock LoadBanAccount(playerid)
    {
    if(SpielerInfo[playerid][pBanned] == 1)
    {
    SendClientMessage(playerid,0xFF0000FF," ");
    SendClientMessage(playerid,0xFF0000FF," ");
    SendClientMessage(playerid,0xFF0000FF," ");
    SendClientMessage(playerid,0xFF0000FF," ");
    SendClientMessage(playerid,0xFF0000FF," ");
    SendClientMessage(playerid,0xFF0000FF," ");
    SendClientMessage(playerid,0xFF0000FF," ");
    SendClientMessage(playerid,0xFF0000FF," ");
    SendClientMessage(playerid,0xFF0000FF," ");
    SendClientMessage(playerid,0xFF0000FF," ");
    SendClientMessage(playerid,0xFF0000FF," ");
    SendClientMessage(playerid,0xFF0000FF," ");
    SendClientMessage(playerid,0xFF0000FF," ");
    SendClientMessage(playerid,0xFF0000FF," ");
    SendClientMessage(playerid,0xFF0000FF," ");
    SendClientMessage(playerid,0xFF0000FF," ");
    SendClientMessage(playerid,0xFF0000FF," ");
    SendClientMessage(playerid,0xFF0000FF," ");
    SendClientMessage(playerid,0xFF0000FF," ");
    SendClientMessage(playerid,0xFF0000FF," ");
    SendClientMessage(playerid,0xFF0000FF," ");
    SendClientMessage(playerid,0xFF0000FF," ");
    SendClientMessage(playerid,0xFF0000FF," ");
    SendClientMessage(playerid,0xFF0000FF," ");
    SendClientMessage(playerid,0xFF0000FF," ");
    SendClientMessage(playerid,0xFF0000FF," ");
    SendClientMessage(playerid,0xFF0000FF," ");
    SendClientMessage(playerid,0xFF0000FF," ");
    SendClientMessage(playerid,0xFF0000FF," ");
    SendClientMessage(playerid,0xFF0000FF," ");
    Kick(playerid);
    }
    else
    {
    SpielerInfo[playerid][pBanned] = 0;
    }
    }

    Mit freundlichen Grüßen
    [KoSoVa] :klugs: