Server Ban

  • Hi Leute,


    ich bin seit 2 Wochen wieder dabei mir das scripten beizubringen. Alles funktioniert bisher ganz gut, nur eine Sache ist wirklich nervig. Jedes mal, wenn ich vom meinem Server mit /q disconnecte, werde ich automatisch vom Server gebannt und muss das immer manuell im Account umändern und mich entbannen.


    Weiß jemand, woran das liegen könnte?

  • Das ist OnPlayerDisconnect:


    public OnPlayerDisconnect(playerid, reason)
    {
    if(GetPVarInt(playerid,"loggedin")==1)
    {
    SpielerSpeichern(playerid);
    }
    return 1;
    }


    Und das die Ban Funktion:


    ocmd:ban(playerid,params[])
    {
    if(GetPVarInt(playerid,"Adminlevel") >= 5)
    {
    new pID, reason[128],string[128];
    if(sscanf(params,"us",pID,reason))return SendClientMessage(playerid,0xFD4B00FF,"/ban [id] [grund]");
    format(string,sizeof(string),"AdmCmd: %s wurde von %s gebannt. Grund: %s",SpielerName(pID),SpielerName(playerid),reason);
    SendClientMessageToAll(0xFD4B00FF,string);
    SetPVarInt(playerid,"Baned",1);
    Kick(pID);
    return 1;
    }
    return 1;


    }


    Es hat schon mal funktioniert wie gewollt, aber dann ab einem Punkt kam das beschriebene Problem.

  • Was du da im Bahnbefehl versuchen willst kann garnicht funktionieren. pVars setzen sich beim Disconnect automatisch zurück auf 0.
    Zeig Mal OnPlayerConnect.
    Welche Nachricht kriegst du denn beim connecten? Die SA:MP Nachricht "You are banned from this server." ?

    Qxg8sCD.pngwebdev - js, nodejs

    :S:S:S


    Kontakt

    Konversation: Konversation starten

    Oder eine der Kontaktmöglichkeiten auf leonmrbonnie.de

  • Was du da im Bahnbefehl versuchen willst kann garnicht funktionieren. pVars setzen sich beim Disconnect automatisch zurück auf 0.
    Zeig Mal OnPlayerConnect.
    Welche Nachricht kriegst du denn beim connecten? Die SA:MP Nachricht "You are banned from this server." ?

    Nope. Beim connecten, wenn der Server den Wert auf 1 stellt nur "Server closed the connection".


    public OnPlayerConnect(playerid)
    {
    new welcome[128];
    format(welcome,sizeof(welcome),"Willkommen %d auf dem Server von Reallife German");
    SendClientMessage(playerid,COLOR_WHITE,welcome);


    new message[128];
    format(message,sizeof(message),"Mit /befehle kannst Du alle Befehle nachsehen",playerid);
    SendClientMessage(playerid,COLOR_YELLOW,message);
    ShowPlayerDialog(playerid,3,DIALOG_STYLE_INPUT,"Registrieren","Bitte gib dein gewünschtes Passwort ein","Registrieren","Abbrechen");


    new Spielerdatei[64];
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,name,sizeof(name));
    format(Spielerdatei,sizeof(Spielerdatei),"/Accounts/%s.txt",name);
    if(dini_Exists(Spielerdatei))
    {
    ShowPlayerDialog(playerid,4,DIALOG_STYLE_PASSWORD,"Login","Dein Account wurde gefunden. Gib dein Passwort bitte ein","Login","Abbrechen");
    }
    else
    {
    ShowPlayerDialog(playerid,3,DIALOG_STYLE_PASSWORD,"Registrieren","Bitte gib dein gewünschtes Passwort ein","Registrieren","Abbrechen");
    }

  • Du musst auch die sachen beim connecten wieder reseten für die neuen Spieler die kommen



    //OnPlayerConnect(playerid)
    sachenset/playerid);


    //ganz unten
    stock sachenset(playerid)
    {
    SetPVarInt(playerid,"Baned",0);
    return true;
    }


    besser were es wenn du dir einen Spieler Enum erstellt


    zb



    enum sInfo
    {
    level,
    admin,
    banned
    }
    new SpielerInfo[MAX_PLAYERS][sInfo];


    sInfo[playerid][banned] = 1;

    geht etwas einfacher und ist übersichtlicher

  • Du musst auch die sachen beim connecten wieder reseten für die neuen Spieler die kommen


    //OnPlayerConnect(playerid)sachenset/playerid);//ganz untenstock sachenset(playerid){SetPVarInt(playerid,"Baned",0);return true;}

    Nein, das brauch er nicht. pVars setzen sich beim Disconnect alle automatisch auf 0.

    Qxg8sCD.pngwebdev - js, nodejs

    :S:S:S


    Kontakt

    Konversation: Konversation starten

    Oder eine der Kontaktmöglichkeiten auf leonmrbonnie.de

  • Nein, das brauch er nicht. pVars setzen sich beim Disconnect alle automatisch auf 0.

    Dann ist nur halt die Frage, warum der Wert bei "Baned" von 0 auf 1 automatisch gesetzt wird. Ich habe eigentlich nix auffälliges drin, was dazu führen könnte.


  • Weiß jemand, woran das liegen könnte?

    Interessant wäre die Funktion SpielerSpeichern mal zu sehen :)


    Und wie du den Spieler lädst.


    und du solltest mal crashdetect laden um zu schauen, ob es zu Fehlern kommt.

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • Interessant wäre die Funktion SpielerSpeichern mal zu sehen :)
    Und wie du den Spieler lädst.


    und du solltest mal crashdetect laden um zu schauen, ob es zu Fehlern kommt.

    So speicher er alles halt:


    stock SpielerSpeichern(playerid)
    {


    new Spielerdatei[64];
    new name[MAX_PLAYER_NAME];
    new pfad[128];
    dini_Exists(pfad);
    GetPlayerName(playerid,name,sizeof(name));
    format(Spielerdatei,sizeof(Spielerdatei),"/Accounts/%s.txt",name);
    dini_IntSet(Spielerdatei,"Level",GetPlayerScore(playerid));
    dini_IntSet(Spielerdatei,"Geld",GetPlayerMoney(playerid));
    dini_IntSet(Spielerdatei,"Baned",1);
    dini_IntSet(Spielerdatei,"Adminlevel",GetPVarInt(playerid,"Adminlevel"));
    dini_IntSet(Spielerdatei,"Fraktion",GetPVarInt(playerid,"Fraktion"));
    dini_IntSet(Spielerdatei,"Auto",GetPVarInt(playerid,"Auto"));
    return 1;
    }


    Und wie gesagt, es hat alles super funktioniert bis das mit dem Ban kam..der Ban Befehle funzt an sich auch.

  • Dann ist nur halt die Frage, warum der Wert bei "Baned" von 0 auf 1 automatisch gesetzt wird. Ich habe eigentlich nix auffälliges drin, was dazu führen könnte.

    Eben doch, du setzt die Bann-Variable bei jeder Speicherung auf 1:

    dini_IntSet(Spielerdatei,"Baned",1);


    Änder das, und dein Problem sollte sich in Luft auflösen ;)

    Mit freundlichen Grüßen
    FineTime


    INFO: Bei mysql_format steht %d immer für dämlich. Deshalb nehmen wir %s für schlau oder %e für elegant.
    [...]
    Wichtig: Diese abfrage muss IMMER bei stocks stehen, ansonsten kann es sein, dass dein computer gelöscht wird.


    Weitere, mehr oder weniger lustige, Zitate findet ihr auf meinem Profil.

  • Eben doch, du setzt die Bann-Variable bei jeder Speicherung auf 1:

    Änder das, und dein Problem sollte sich in Luft auflösen ;)

    Vielen Dank, es funkioniert wieder! :D

    Das ist der Fehler.
    Schreib da mal:


    dini_IntSet(Spielerdatei,"Baned",GetPVarInt(playerid,"Baned"));

    Omg, hab das die ganze Zeit nicht gesehen..trotzdem vielen Dank auch von mir.