Server Ban

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
  • 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." ?

    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.

  • 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.

  • 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.