/Ban Befehl funktioniert nicht.

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
  • Guten Abend liebe Community,
    Ich habe mit Hilfe einiger Tutorials einen Ban Befehl zu stande gebracht. (OCMD)
    Aber wenn ich jemanden Banne wird er nur gekickt und wenn er wieder auf dem Server connecte,
    wird er nicht wieder gekickt.
    Ich Arbeite ja mit DINI und wenn der Spieler gebannt wird muss ja:
    SetPVarInt(pID,"Baned",1);


    aufgeführt werden.
    Aber wenn ich mein Account Ordner nach dem Ban anschau bleibt die Zahl bei 0.
    Ich zeig euch mal mein Befehl



    ocmd:ban(playerid,params[])
    {
    if(!IsPlayerAnAdmin(playerid,2))return SendClientMessage(playerid,ROT,"Du bist kein Admin.");
    new pID, reason[128],string[128];
    if(sscanf(params,"us",pID,reason))return SendClientMessage(playerid,GRAU,"/ban [ID] [Grund]");
    format(string,sizeof(string),"AdmCmd: %s wurde von %s gebannt. Grund: %s",SpielerName(pID),SpielerName(playerid),reason);
    SendClientMessageToAll(ROT,string);
    SetPVarInt(pID,"Baned",1);
    Kick(pID);
    return 1;
    }



    stock Login (playerid,key[])
    {


    new Spielerdatei[64];
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,name,sizeof(name));
    format(Spielerdatei,sizeof(Spielerdatei),"/Accounts/%s.txt",name);
    if(!strcmp(key,dini_Get(Spielerdatei,"Passwort"),false))
    {
    SetPlayerScore(playerid,dini_Int(Spielerdatei,"Level"));
    GivePlayerMoney(playerid,dini_Int(Spielerdatei,"Geld"));
    SetPVarInt(playerid,"Adminlevel",dini_Int(Spielerdatei,"Adminlevel"));
    SetPVarInt(playerid,"Fraktion",dini_Int(Spielerdatei,"Fraktion"));
    SetPVarInt(playerid,"Baned",dini_Int(Spielerdatei,"Baned"));
    if(GetPVarInt(playerid,"Baned")==1)
    {
    SendClientMessage(playerid,ROT,"Du bist vom Server gebannt.");
    Kick(playerid);
    }
    SendClientMessage(playerid,0x00FF00FFF,"Du hast dich Erfolgreich eingeloggt.");
    SetSpawnInfo(playerid,0,0,1958.33, 1343.12, 15.36,0,0,0,0,0,0,0);
    SpawnPlayer(playerid);
    SetCameraBehindPlayer(playerid);
    return 1;
    }
    else
    {
    SendClientMessage(playerid,0xFF0A00FF,"Falsches Passwort!");
    ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_PASSWORD,"Login","Gib dein Passwort ein um dich einzuloggen.","Login","Abbrechen");
    return 1;
    }
    }


    stock LoadAccount(playerid)
    {
    new Spielerdatei[64];
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,name,sizeof(name));
    format(Spielerdatei,sizeof(Spielerdatei,"/Accounts/%s.txt",name);
    SetPlayerScore(playerid,dini_Int(Spielerdatei,"Level"));
    GivePlayerMoney(playerid,dini_Int(Spielerdatei,"Geld"));
    GetPlayerSkin(playerid,dini_Int(Spielerdatei,"Skin"));
    SetPVarInt(playerid,"Adminlevel",dini_Int(Spielerdatei,"Adminlevel"));
    SetPVarInt(playerid,"Fraktion",dini_Int(Spielerdatei,"Fraktion"));
    SetPVarInt(playerid,"Baned",dini_Int(Spielerdatei,"Baned"));
    if(GetPVarInt(playerid,"Baned")==1)
    {
    SendClientMessage(playerid,ROT,"Du bist vom Server gebannt.");
    Kick(playerid);
    }


    Weiß einer warum das so ist?


    Mit freundlichen Grüßen
    iMan

  • du arbeitest mit PVarInt und diese dinde nur temorär sobald der spieler den server verlässt werden diese werte für diesen spieler gelöscht du musst das banned in z.b. einer datei speichern


    und es dann beim login abfragen wie du es zwar hast aber auch nich mit PVarInt sondenr je nach dem welches speichersystem du nutzt

  • Also muss ich


    if(GetPVarInt(playerid,"loggedin")==1)
    {
    SpielerSpeichern(playerid);
    }
    Einsetzen bevor der Spieler gekickt wird?


    //EDIT
    ocmd:ban(playerid,params[])
    {
    if(!IsPlayerAnAdmin(playerid,2))return SendClientMessage(playerid,ROT,"Du bist kein Admin.");
    new pID, reason[128],string[128];
    if(sscanf(params,"us",pID,reason))return SendClientMessage(playerid,GRAU,"/ban [ID] [Grund]");
    format(string,sizeof(string),"AdmCmd: %s wurde von %s gebannt. Grund: %s",SpielerName(pID),SpielerName(playerid),reason);
    SendClientMessageToAll(ROT,string);
    SetPVarInt(pID,"Baned",1);
    Kick(pID);
    if(GetPVarInt(playerid,"loggedin")==1) //SO?
    {
    SpielerSpeichern(playerid);
    }
    return 1;
    }

  • du solletst dir die erklärung von PVAr Variablen ma durchlesen


    SetPVarInt(pID,"Baned",1); geht nich weil du diesen wert für den spieler nur solange speicherst bis er vom server weg ist dann wird der wert für den spieler wieder gelöscht


    deshalb musst du da banned in eine datei speichern damit es erhalten bleibt.


    so wie du auch das passwort, geld und so speicherst.


    und dann fragst du beim connecten ab also den wert aus der datei wenn er 1 ist dann halt kick und message das der spieler gebannt ist wenn 0 dann kann er halt sich einloggen oder was auch immer

  • SavePlayer Code
    stock SavePlayer(playerid)
    {
    if(GetPVarInt(playerid,"loggedin")==1)
    {
    new Spielerdatei[64];
    new name[MAX_PLAYER_NAME];
    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,"Skin",GetPlayerSkin(playerid));
    dini_IntSet(Spielerdatei,"Adminlevel",GetPVarInt(playerid,"Adminlevel"));
    dini_IntSet(Spielerdatei,"Banned",GetPVarInt(playerid,"Banned"));
    }
    return 1;
    }


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

  • so geht es auch aber ich wollte ihm klar machen das es mit pvarint nicht geht :D


    aber wenn er sein eigenes bann system machen will sollte er es speichern würd ich ma sagen :D

  • Das habe ich ja in meinem stock SpielerSpeichern eingefügt.
    Das Problem ist er speichert es nicht ab.
    Ich schick dir mal die Zeilen.



    stock SpielerSpeichern(playerid)
    {
    new Spielerdatei[64];
    new name[MAX_PLAYER_NAME];
    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,"Skin",GetPlayerSkin(playerid));
    dini_IntSet(Spielerdatei,"Adminlevel",GetPVarInt(playerid,"Adminlevel"));
    dini_IntSet(Spielerdatei,"Fraktion",GetPVarInt(playerid,"Fraktion"));
    dini_IntSet(Spielerdatei,"Baned",GetPVarInt(playerid,"Baned")); //Hier ist die Zeile
    return 1;
    }

  • Ist es nicht unnötig wenn man beim Login Abfragt ob er gebannt ist und beim laden?
    Ich würde sagen nur beim Laden,dass er dann nur abfragt.


    //edit: kein Wunder beim ersten haste Banned und beim Speichern Baned du musst bei beiden Banned oder Baned benutzen.

  • ich würde das anders machen


    sobald du den spieler ban befehl ausführst den spieler kicken message du bist gebannt und dini_IntSet(Spielerdatei,"Banned",1) machen


    und das beim connecten abfragen wie ich es schon mal erklärt hab


    BalYouLps ja das ist egal ob beim connecten oder laden aber ich würde es beim connecten machen wenn er nicht gebannt ist bekommt er den login dialog ist er gebannt wird er gekickt mit der message du bist gebannt oder so

  • Genau,es funzt zwar,aber aber es ist unnötig.
    Wenn er es unter Login macht,dann kommt das Dialog noch,aber wenn er es unter OnPlayerConnect macht kann er
    direkt abfragen ob er gebannt ist dann eine Message an ihn geben und dann kicken.

  • aber wenn er es unter OnPlayerConnect macht kann er
    direkt abfragen ob er gebannt ist dann eine Message an ihn geben und dann kicken.

    So hab die Abfrage nun bei OnPlayerConnect eingefügt :)


    dini_IntSet(Spielerdatei,"Banned",1) machen

    Ich hab das leider nicht ganz verstanden.
    Meinst du ich soll, statt
    SetPVarInt(pID,"Baned",1);


    dini_IntSet(Spielerdatei,"Banned",1)


    einfügen?

  • Hab mich für Banned entschieden xD.


    Nun habe ich ein Error bekommen



    C:\Users\Arash\Desktop\Alle Ordner\World~of~Reallife\gamemodes\WorldofReallife.pwn(703) : error 017: undefined symbol "Spielerdatei"
    Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase



    1 Error.


    Ich habe dann Spielerdatei durch pID ersetzt und dann ein neuen Error bekommen.



    C:\Users\Arash\Desktop\Alle Ordner\World~of~Reallife\gamemodes\WorldofReallife.pwn(703) : error 035: argument type mismatch (argument 1)
    Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase




    1 Error.



    ocmd:ban(playerid,params[])
    {
    if(!IsPlayerAnAdmin(playerid,2))return SendClientMessage(playerid,ROT,"Du bist kein Admin.");
    new pID, reason[128],string[128];
    if(sscanf(params,"us",pID,reason))return SendClientMessage(playerid,GRAU,"/ban [ID] [Grund]");
    format(string,sizeof(string),"AdmCmd: %s wurde von %s gebannt. Grund: %s",SpielerName(pID),SpielerName(playerid),reason);
    SendClientMessageToAll(ROT,string);
    dini_IntSet(pID,"Banned",1); //Der Error!
    Kick(pID);
    return 1;
    }


  • new Spielerdatei[64];
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,name,sizeof(name));
    format(Spielerdatei,sizeof(Spielerdatei),"/Accounts/%s.txt",name);


    du musst die variable Spielerdatei auch dort noch erstellen so wie du es beim speichern hast und das musst du bei jeden befehl machen der was in der datei speichert oder du erstellst es allgemein

  • Danke Rocco es hat geklappt!
    Aber jetzt wird der Spieler nicht mehr gekickt wenn er den Server betritt.
    Ich muss wohl bei der Abfrage was falsch gemacht haben.
    Könntest du mir vllt noch 1 mal Helfen?



    public OnPlayerConnect(playerid)
    {
    new Spielerdatei[64];
    new name[MAX_PLAYER_NAME], string[70];
    GetPlayerName(playerid,name,sizeof(name));
    format(string, sizeof(string), "{B5B5B5}** {FA9E00}%s {B5B5B5}hat den Server betreten.",name);
    format(Spielerdatei,sizeof(Spielerdatei),"/Accounts/%s.txt",name);
    if(GetPVarInt(playerid,"Banned")==1) //Ist das so richtig?
    {
    SendClientMessage(playerid,ROT,"Du bist vom Server gebannt.");
    Kick(playerid);
    }
    if(dini_Exists(Spielerdatei))
    {
    SendClientMessage(playerid,Weiß,"");
    SendClientMessage(playerid,Weiß,"");
    SendClientMessage(playerid,Weiß,"");
    SendClientMessage(playerid,Weiß,"");
    SendClientMessage(playerid,Weiß,"");
    SendClientMessage(playerid,Weiß,"");
    SendClientMessage(playerid,GRÜN,"|____________Einloggen_____________|");
    SendClientMessage(playerid,ORANGE,"Willkommen auf World of Reallife.");
    SendClientMessage(playerid,ORANGE,"Schön das du uns wieder besuchst.");
    SendClientMessage(playerid,ORANGE,"Bitte gib dein Passwort ein.");
    SendClientMessage(playerid,Weiß,"");
    SendClientMessage(playerid,Weiß,"");
    ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_PASSWORD,"Login","Gib dein Passwort ein um dich einzuloggen.","Login","Abbrechen");
    }
    else
    {
    SendClientMessage(playerid,Weiß,"");
    SendClientMessage(playerid,Weiß,"");
    SendClientMessage(playerid,Weiß,"");
    SendClientMessage(playerid,Weiß,"");
    SendClientMessage(playerid,Weiß,"");
    SendClientMessage(playerid,Weiß,"");
    SendClientMessage(playerid,GRÜN,"|____________Registrieren_____________|");
    SendClientMessage(playerid,ORANGE,"Willkommen auf World of Reallife.");
    SendClientMessage(playerid,ORANGE,"Sie besitzen noch keinen Account.");
    SendClientMessage(playerid,ORANGE,"Bitte registriere dich.");
    SendClientMessage(playerid,Weiß,"");
    SendClientMessage(playerid,Weiß,"");
    ShowPlayerDialog(playerid,DIALOG_REGISTER,DIALOG_STYLE_INPUT,"Registrieren","Bitte gib dein gewünschtes Passwort ein um dich zu Registrieren.","Registrieren","Abbrechen");
    }
    return 1;
    }


    Hoffe könnt mir weiterhelfen :)


    mfg

    2 Mal editiert, zuletzt von MrZezuma ()