Bansystem Hilfe

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
  • Hallo liebe Brotfische,


    heute mal wieder eine kleine Frage.


    Ich möchte gerne den Text vom SendClientMessage Angezeigt bekommen. Allerdings zeigt kickt er mich nur wie es auch sein soll nur ohne Text.


    public OnPlayerConnect(playerid)
    {
    PlayerInfo[playerid][p_id] = 0;
    PlayerInfo[playerid][pLoggedIn] = false;
    PlayerInfo[playerid][pLevel] = 0;
    PlayerInfo[playerid][pMoney] = 0;
    PlayerInfo[playerid][pKills] = 0;
    PlayerInfo[playerid][pDeaths] = 0;
    GetPlayerName(playerid, PlayerInfo[playerid][pName], MAX_PLAYER_NAME);
    if(PlayerInfo[playerid][pBanned] == 1) return SendClientMessage(playerid,-1,"Du nicht");
    {
    Kick(playerid);
    }
    return 1;
    }

  • public OnPlayerConnect(playerid)
    {
    PlayerInfo[playerid][p_id] = 0;
    PlayerInfo[playerid][pLoggedIn] = false;
    PlayerInfo[playerid][pLevel] = 0;
    PlayerInfo[playerid][pMoney] = 0;
    PlayerInfo[playerid][pKills] = 0;
    PlayerInfo[playerid][pDeaths] = 0;
    GetPlayerName(playerid, PlayerInfo[playerid][pName], MAX_PLAYER_NAME);
    if(PlayerInfo[playerid][pBanned] == 1)
    {
    SendClientMessage(playerid,-1,"Du nicht");
    Kick(playerid);
    return true;
    }
    return 1;
    }

  • public OnPlayerConnect(playerid){PlayerInfo[playerid][p_id] = 0;PlayerInfo[playerid][pLoggedIn] = false;PlayerInfo[playerid][pLevel] = 0;PlayerInfo[playerid][pMoney] = 0;PlayerInfo[playerid][pKills] = 0;PlayerInfo[playerid][pDeaths] = 0;GetPlayerName(playerid, PlayerInfo[playerid][pName], MAX_PLAYER_NAME);if(PlayerInfo[playerid][pBanned] == 1){SendClientMessage(playerid,-1,"Du nicht");Kick(playerid);return true;}return 1;}

    Nein das geht nicht. Da erkennt er die ganze Abfrage schon nicht mehr.

  • es liegt daran weil du das Script zuschnell ausführst


    ich kann es dir so empfehlen




    Sry wenn das falsche befehle aber habe lange nicht mehr gescriptet sollte aber so in der art gehen







    ps.


    ist aber nur ein beispiel wie mann es machen kann.


    Und die message sollte nicht im return stehen :D

  • Nochmals habe ich eine kleine Schwierigkeit. Nach dem ich den Server neustarte kann ich normal Joinen. Fehler ist auch bekannt aber nicht die Lösung. Er ruft mir die spalte pBanned leider erst mit dem Login auf. Auch die Abfrage daraus in den Connect zu kopieren hat nichts gebracht.



    public OnPlayerConnect(playerid)
    {
    PlayerInfo[playerid][p_id] = 0;
    PlayerInfo[playerid][pLoggedIn] = false;
    PlayerInfo[playerid][pLevel] = 0;
    PlayerInfo[playerid][pMoney] = 0;
    PlayerInfo[playerid][pKills] = 0;
    PlayerInfo[playerid][pDeaths] = 0;
    PlayerInfo[playerid][pBanned] = cache_get_field_content_int(0, "ban", handle);
    GetPlayerName(playerid, PlayerInfo[playerid][pName], MAX_PLAYER_NAME);


    if(PlayerInfo[playerid][pBanned]==1)
    {
    SendClientMessage(playerid,-1,"Du bist gebannt");
    SetTimerEx("DelayedKick", 100, false, "i", playerid);
    return 1;
    }



    return 1;
    }


  • enum pDataEnum
    {
    p_id,
    bool:pLoggedIn,
    pName[MAX_PLAYER_NAME],
    pLevel,
    pMoney,
    pKills,
    pDeaths,
    pBanned,
    pTBanned,
    pSpawnchange,
    admin_level,
    pBannedGrund,
    pBanner
    }



    public OnPlayerConnect(playerid)
    {
    PlayerInfo[playerid][p_id] = 0;
    PlayerInfo[playerid][pLoggedIn] = false;
    PlayerInfo[playerid][pLevel] = 0;
    PlayerInfo[playerid][pMoney] = 0;
    PlayerInfo[playerid][pKills] = 0;
    PlayerInfo[playerid][pDeaths] = 0;
    GetPlayerName(playerid, PlayerInfo[playerid][pName], MAX_PLAYER_NAME);
    if(PlayerInfo[playerid][pBanned]==1)
    {
    SendClientMessage(playerid,-1,"Du bist gebannt");
    SetTimerEx("DelayedKick", 100, false, "i", playerid);
    return 1;
    }




    return 1;
    }



    public OnPlayerRequestClass(playerid)
    {



    if(!PlayerInfo[playerid][pLoggedIn])
    {



    new query[128];
    mysql_format(handle, query, sizeof(query), "SELECT id FROM users WHERE name = '%e'", PlayerInfo[playerid][pName]);
    mysql_pquery(handle, query, "OnUserCheck", "d", playerid);




    }
    return 1;
    }



    public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
    {
    if(dialogid == DIALOG_REGISTER)
    {



    if(!response) return Kick(playerid);




    if(strlen(inputtext) < 3) return ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD, "Registration", "Bitte registriere Dich:\n{FF0000}Mindestens 3 Zeichen!", "Ok", "Abbrechen");



    new query[256];
    mysql_format(handle, query, sizeof(query), "INSERT INTO users (name, password) VALUES ('%e', MD5('%e'))", PlayerInfo[playerid][pName], inputtext);




    mysql_pquery(handle, query, "OnUserRegister", "d", playerid);
    return 1;
    }
    if(dialogid == DIALOG_LOGIN)
    {



    if(!response) return Kick(playerid);




    if(strlen(inputtext) < 3) return ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Anmeldung", "Bitte logge Dich ein:\n{FF0000}Mindestens 3 Zeichen!", "Ok", "Abbrechen");



    //Wenn alles passt wird die Datenbank ausgelesen
    new query[256];
    mysql_format(handle, query, sizeof(query), "SELECT * FROM users WHERE name = '%e' AND password = MD5('%e')", PlayerInfo[playerid][pName], inputtext);
    mysql_pquery(handle, query, "OnUserLogin", "d", playerid);
    SpawnPlayer(playerid);
    return 1;
    }
    return 0;
    }



    public OnPlayerDisconnect(playerid, reason)
    {
    SaveUserStats(playerid);
    return 1;
    }



    forward OnUserCheck(playerid);
    public OnUserCheck(playerid)
    {




    if(cache_get_row_count() == 0)
    {
    ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD, "Registration", "Bitte registriere Dich:", "Ok", "Abbrechen");
    }
    else
    {

    ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Anmeldung", "Bitte logge Dich ein:", "Ok", "Abbrechen");
    }
    return 1;
    }



    forward OnUserRegister(playerid);
    public OnUserRegister(playerid)
    {
    PlayerInfo[playerid][p_id] = cache_insert_id();
    SendClientMessage(playerid, 0x00FF00FF, "[Konto] Registration erfolgreich.");
    SpawnPlayer(playerid);
    return 1;
    }



    forward OnUserLogin(playerid);
    public OnUserLogin(playerid)
    {




    if(cache_get_row_count() == 0)
    {
    ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Anmeldung", "Bitte logge Dich ein:\n{FF0000}Falsches Passwort!", "Ok", "Abbrechen");
    }
    else
    {




    PlayerInfo[playerid][p_id] = cache_get_field_content_int(0, "id", handle);
    PlayerInfo[playerid][pLevel] = cache_get_field_content_int(0, "level", handle);
    PlayerInfo[playerid][pMoney] = cache_get_field_content_int(0, "money", handle);
    PlayerInfo[playerid][pKills] = cache_get_field_content_int(0, "kills", handle);
    PlayerInfo[playerid][pDeaths] = cache_get_field_content_int(0, "deaths", handle);
    PlayerInfo[playerid][pBanned] = cache_get_field_content_int(0, "ban", handle);
    PlayerInfo[playerid][pTBanned] = cache_get_field_content_int(0, "tban", handle);
    PlayerInfo[playerid][pSpawnchange] = cache_get_field_content_int(0, "spawn", handle);
    PlayerInfo[playerid][pLoggedIn] = true;
    SendClientMessage(playerid, 0x00FF00FF, "[Konto] Eingeloggt.");
    GivePlayerMoney(playerid, PlayerInfo[playerid][pMoney]);



    }
    return 1;
    }

  • Du prüfst beim connecten ob der Spieler gebannt ist, was nicht sein, kann da davor kein query gesendet wird somit ist pBanned immer 0. Du müsstest erst Abfragen ob ban == 1 ist, sollte das der Fall sein wird der Spieler gekickt. Anderenfalls mit einem zweiten Query prüfen ob der Account existiert und danach je nach ergebnis login / register anzeigen lassen.

  • Beitrag von robbi2304 ()

    Dieser Beitrag wurde vom Autor aus folgendem Grund gelöscht: erledigt ().
  • Es ist möglich mit mysql den User abzufragen beim connecten, da gibt es eine Funktion, oder du fragst erst nach em Login ab, das wäre einfacher,
    also sobald MYSQL den Spieler geladen hat, machst du unter das laden die Abfrage ob er gebannt ist... ansonsten musst du beim Connecten den Spieler mit dem Namen auslesen um das ganze zu überprüfen