[HILFE] ocmd: ban <= Ich brauche drigend 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
  • Wie trollen, ich brauche eigentlich nur Hilfe! Wirklich seit 3 Tagen steck ich beim Ban System fest...
    Musst du eigentlich immer dein Senf abgeben, du musst nicht immer kommentieren hier gibt es Leute die Hilfsbereit sind.

  • Das eigentliche Problem war, dass du vor LoadPlayer nicht etwas aus dem Array SpielerInfo abfragen konntest, in das erst in LoadPlayer geschrieben wird.


    Nimm den Code, den du in deinem ersten Beitrag gepostet hast und frage erst ab, ob pBanned gleich 1 ist, wenn du den Spieler per LoadPlayer bereits geladen hast.

  • Hilfsbereite Leute, die offenbar dein ganzes System durcheinander bringen.


    So muss das jetzt bei dir aussehen:



    case DIALOG_LOGIN:
    {
    if(response)
    {
    if(strlen(inputtext) == 0) // Wenn kein Passwort angegebene wurde
    {
    ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_INPUT,"Login","Das Angegebene Passwort war Falsch.\nBitte log dich jetzt mit dem richtigen Passwort ein:","Login","Abbrechen");
    return 1;
    }
    else
    {
    new SpielerName[MAX_PLAYER_NAME];
    GetPlayerName(playerid, SpielerName, MAX_PLAYER_NAME);
    if(!strcmp(inputtext, mysql_ReturnPasswort(SpielerName), true)) // Wir holen uns das Passwort aus der MySQL Datenbank und überprüfen es mit dem angegebenen passwort.
    {

    SetPVarInt(playerid,"Eingeloggt",1); //Falls beide passwörter übereinstimmen wird die Variable auf 1 gesetzt damit wir die Skin auswahl benutzen können.
    LoadPlayer(playerid); //Der Spieler wird "geladen", speich es werden seine Daten aus der Datenbank geholt und in variablen gespeichert um diese im Skript zu verwenden.
    SpawnPlayer(playerid); //Wir lassen den Spieler Spawnen


    }
    else
    {
    //Wenn das Passwort falsch war, lassen wir erneut das Login fenster erscheinen damit der Spieler das Richtige Passwort eingibt.
    ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_INPUT,"Login","Das war das Falsche Passwort.\nBitte log dich jetzt mit dem richtigen Passwort ein:","Login","Abbrechen");
    return 1;
    }
    }
    }
    else
    {
    Kick(playerid); //Wenn auf Abbrechen geklickt wurde, wird der Spieler gekickt damit man ohne Account nicht Spielen kann.
    }


    return 1;
    }



    Dann machst du unter OnPlayerSpawn am besten das hier:



    public OnPlayerSpawn(playerid)
    {
    if(SpielerInfo[playerid][pBanned]== 1)
    {


    Kick(playerid);

    }


    return 1;
    }

    Einmal editiert, zuletzt von Showtek ()

  • Also ich versuche es jetzt dir zu erklären.
    Du hast beim Login pBanned abgefragt, bevor du den Account geladen hast.
    Das heißt du hast pBanned abgefragt, bevor überhaupt etwas in pBanned stehen konnte.
    Aus diesem Grund habe ich die Abfrage entfernt und nochmal beim Spawn(wenn der Accounts bereit geladen wurde) abgefragt.

  • Ich muss wieder ein Timer stellen, damit er den Text sieht:
    Was ist da falsch?


    public OnPlayerSpawn(playerid)
    {
    new pID;
    if(SpielerInfo[playerid][pBanned]== 1)
    {
    SendClientMessage(playerid, ROT, "Du bist vom Server gebannt.");
    SetTimerEx("BanTimerText",500,false,"i",pID);
    }
    forward BanTimer(playerid);
    public BanTimer(playerid)
    {
    Kick(playerid);
    }
    return 1;
    }


    Errors:
    C:\Users\Kadri\Desktop\Streets of San\gamemodes\SoS.pwn(2668) : error 029: invalid expression, assumed zero
    C:\Users\Kadri\Desktop\Streets of San\gamemodes\SoS.pwn(2669) : error 029: invalid expression, assumed zero
    C:\Users\Kadri\Desktop\Streets of San\gamemodes\SoS.pwn(2670) : error 001: expected token: ";", but found "{"
    Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase



    3 Errors.

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen

  • if(SpielerInfo[playerid][pBanned]== 1)
    {
    SendClientMessage(playerid, ROT, "Du bist vom Server gebannt.");
    SetTimerEx("BanTimer",500,false,"i",playerid); //Du musst den Timer für die playerid starten. Dein Timer heisst unten "BanTimer" und nicht "BanTimerText".
    }

  • public OnPlayerSpawn(playerid)
    {
    if(SpielerInfo[playerid][pBanned]== 1)
    {
    SendClientMessage(playerid, ROT, "Du bist vom Server gebannt.");
    SetTimerEx("BanTimer",500,false,"i",playerid); //Du musst den Timer für die playerid starten. Dein Timer heisst unten "BanTimer" und nicht "BanTimerText".
    }
    forward BanTimer(playerid);
    public BanTimer(playerid)
    {
    Kick(playerid);
    }
    return 1;
    }


    Was ist hier falsch?!


    Errors:
    C:\Users\Kadri\Desktop\Streets of San\gamemodes\SoS.pwn(2667) : error 029: invalid expression, assumed zero
    C:\Users\Kadri\Desktop\Streets of San\gamemodes\SoS.pwn(2668) : error 029: invalid expression, assumed zero
    C:\Users\Kadri\Desktop\Streets of San\gamemodes\SoS.pwn(2669) : error 001: expected token: ";", but found "{"
    Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase



    3 Errors.

  • Sage mal hast du dein Timer forward und public in OnPlayerSpawn? Mach die mal auserhalb eines Callbacks.


    und dein public BanTimer:


    public BanTimer(playerid)
    {
    Kick(playerid);
    return 1;
    }


    EDIT: rechtschreibung
    EDIT2: was hinzugefügt

  • Das lustigste daran ist, dass ihr alle total falsch liegt. Indem ihr nach den kompliziertesten Fehlerquellen sucht, überseht ihr das wesentliche:
    Du lädst die Spielerdaten erst NACHDEM du geprüft hast, ob der Spieler gebannt ist. Wo ist der Sinn, wenn doch in diesen Spielerdaten die Info ist, ob er gebannt ist. Dein LoadPlayer steht in der Abfrage, ob er gebannt ist oder nicht, dabei muss es auf jeden Fall davor. Deswegen funktioniert es auch vor einem GMX ganz normal, weil dann ganz simpel aus der Variable ausgelesen wird, die erst DANACH überschrieben wird.


    Edit: Der Fehler mit dem BanTimer liegt übrigens darin, dass du ein public in einem anderen public forwardest und definierst, das ist ungefähr so, als würdest du ein Callback in ein Callback einbauen und ist total sinnlos.

  • @DarkRevolution man sollte sich einen Topic komplett lesen, da es Showtek in diesem Sinne ihm schon erklärt und gefixt hat, dass einzige was bei ihm immernoch falsch ist, ist das er den Callback und das forward für "BanTimer" in "OnPlayerSpawn" hat. Wenn er es dannach schreibt mit dem "return 1;" was ich geschrieben habe sollte in dem Sinne kein Problem mehr sein.


    Er lädt die Daten mit Showtek's lösung in OnPlayerConnect/OnDialogResponse, lässt ihn spawnen und sollte er gebannt sein wird er halt wieder gekickt. Simple as that.


    Letzters was du geschrieben hast, habe ich ihm schon längst hier geposted.

  • @xXxCrashxXx:
    Habe mir nur die erste Seite durchgelesen. Da gab es schon so viel Stuss auf nur einer Seite, dass ich auf der nächsten Seite nicht viel mehr erwartet habe.
    Showtek hat es bereits umgesetzt, habe ich etwas spät gesehen. Auch wenn es einfacher gehen würde, wenn man die Abfrage in den Login einbauen würde und nicht in OnPlayerSpawn. Mein Edit war von meinem ersten Satz übrigens abgekoppelt und war lediglich eine Erinnerung. Zufrieden?

  • Was mache ich nur falsch?


    C:\Users\Kadri\Desktop\Streets of San\gamemodes\SoS.pwn(35) : warning 235: public function lacks forward declaration (symbol "BanTimer")
    C:\Users\Kadri\Desktop\Streets of San\gamemodes\SoS.pwn(2676) : warning 209: function "OnPlayerSpawn" should return a value
    Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase



    2 Warnings.


    Hier die Zeile 35-38: public BanTimer(playerid)
    {
    Kick(playerid);
    return 1;
    }


    Hier die Zeile: 2676:


    public OnPlayerSpawn(playerid)
    {
    if(SpielerInfo[playerid][pBanned]== 1)
    {
    SendClientMessage(playerid, ROT, "Du bist vom Server gebannt.");
    SetTimerEx("BanTimer",500,false,"i",playerid); //Du musst den Timer für die playerid starten. Dein Timer heisst unten "BanTimer" und nicht "BanTimerText
    Kick(playerid);
    return 1;
    }
    }


    Bitte helfen :)

  • public BanTimer(playerid)
    {
    Kick(playerid);
    return 1;
    }


    So schreiben:


    forward BanTimer(playerid);
    public BanTimer(playerid)
    {
    Kick(playerid);
    return 1;
    }



    So schreiben:


    public OnPlayerSpawn(playerid)
    {
    if(SpielerInfo[playerid][pBanned]== 1)
    {
    SendClientMessage(playerid, ROT, "Du bist vom Server gebannt.");
    SetTimerEx("BanTimer",500,false,"i",playerid); //Du musst den Timer für die playerid starten. Dein Timer heisst unten "BanTimer" und nicht "BanTimerText
    Kick(playerid);
    }
    return 1;
    }


    mfg. :thumbup:

    ast2ufdyxkb1.png


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

  • C:\Users\Kadri\Desktop\Streets of San\gamemodes\SoS.pwn(2676) : warning 217: loose indentation
    Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase



    1 Warning.


    _______________________________________________________


    Immer noch ein Error, also dort beim ( if(SpielerInfo ...


    public OnPlayerSpawn(playerid)
    {
    if(SpielerInfo[playerid][pBanned]== 1)
    {
    SendClientMessage(playerid, ROT, "Du bist vom Server gebannt.");
    SetTimerEx("BanTimer",500,false,"i",playerid); //Du musst den Timer für die playerid starten. Dein Timer heisst unten "BanTimer" und nicht "BanTimerText
    Kick(playerid);
    }
    return 1;
    }

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen