Beiträge von Goldkiller

    http://wiki.sa-mp.com/wiki/OnPlayerDeath
    Schau dir lieber nochmal OnPlayerDeath an.


    public OnPlayerDeath(playerid, killerid, reason)
    {
    if( killerid != INVALID_PLAYER_ID ) // Ganz wichtig!
    {
    if (Gang[playerid] == Gang[killerid])
    {
    // Teamkills[playerid] = Teamkills[killerid] + 1;
    // Du änderst immer von playerid die Teamkills.
    // Ist natürlich falsch, denn du musst sie bei killerid ändern
    Teamkills[killerid] = Teamkills[killerid] + 1;
    if(Teamkills[killerid] > 4)
    {
    // SendClientMessage(playerid,DUNKELROT,"Teamkill ist Verboten! Bitte Unterlasse das!");
    // Kick(playerid);
    // Du sendest die Nachricht an playerid und kickst auch diesen
    // Ist natürlich ebenfalls falsch
    SendClientMessage(killerid,DUNKELROT,"Teamkill ist Verboten! Bitte Unterlasse das!");
    Kick(killerid);
    }
    }
    }
    return 1;
    }
    Unnötiger Beitrag von dir Mr.Langer, der hilft niemanden.

    Leider ist der Test nicht richtig aufgebaut bzw du hast nicht überall die gleichen Vorraussetzungen.


    http://pastebin.com/iyfBCQG2

    • Lediglich in der for() Schleife erstellst du immer eine neue Variable l , anstatt wie bei while() und do-while() k zu verwenden.
    • Bei der for() Schleife werden 2. Variablen inkrementiert, l und k. Dabei hat k wie in Punkt1 genannt nichts mit der for() Schleife zu tun.


    Das sind Beides Nachteile für die for() Schleife.


    Zitat

    --- Unten 5x Durchläufe ---


    Hier mein Code.
    http://pastebin.com/AJh01BBj
    //Edit:
    Pastebin war falsch :-X


    if(strcmp(cmd, "/dance", true) == 0)//Der CMD
    {
    if (!strlen(cmdtext[8])) return SendClientMessage(playerid,0xEFEFF7AA,"Benutzung: /dance [1-4]");
    switch (cmdtext[8])
    {
    case '1': SetPlayerSpecialAction(playerid,SPECIAL_ACTION_DANCE1);
    case '2': SetPlayerSpecialAction(playerid,SPECIAL_ACTION_DANCE2);
    case '3': SetPlayerSpecialAction(playerid,SPECIAL_ACTION_DANCE3);
    case '4': SetPlayerSpecialAction(playerid,SPECIAL_ACTION_DANCE4);
    default: SendClientMessage(playerid,0xEFEFF7AA,"Benutzung: /dance [1-4]");
    }
    return 1;
    }

    Hast dich wohl verzählt.
    "/dance" sind 6.
    / d a n c e <Leerzeichen> <Zahl>
    0 1 2 3 4 5 6 7


    //Edit:
    Nimmt irgendwie die vielen Leerzeichen nicht an bzw. zeigt sich nicht richtig an :pinch: .

    Bei dem Mathe-Script gibt es auch kein reset der Variablen.
    Ich kann also die Gute / Schlechte Punktzahl von dem Spieler übernehmen, der vor mir mit dieser SpielerID online war.


    OnPlayerCommandText(playerid,"/mathe");
    Das bringt doch überhaupt nichts :-0.

    Zitat

    y <= -1722 && y >= -1628 )


    Das ist nicht möglich.


    <= -1722 ist z.B. -1800
    >= -1628 ist z.B. -1500


    Bei negativen Zahlen bedeutet "Größer", dass es näher an der 0 ist.
    Was ist denn größer bzw mehr.
    Schulden von 5€ oder 100€ ? ;)

    Zitat

    Mir hat es niemand beigebracht ^^


    Mir auch nicht.


    Zitat

    Die Videos die ich gesehen haben haben es mir auch nicht gezeigt.


    Scheiss Videos oder du hast "nur" geguckt.


    Zitat


    Und wenn ich es noch nie benutzt habe, musste ich es ja auch nicht wissen.


    Du benutzt doch if() Abfragen in dem von dir gezeigtem Codeschnipsel. Die Nutzung von GetPlayerMoney nicht zu beherrschen ist nochmal eine ganz Andere Baustelle.Denn dazu steht alles hier.

    Sicher,dass das überhaupt kompiliert? SSCANF fehlt nämlich.
    Andere Frage,findest du dich selber überhaupt zurecht in dem Code?


    http://pastebin.com/M6J9drtM
    Sieht doch viel besser aus.




    Zu deinem Problem.Was du defintiv machen solltest,beim Verlassen oder betreten des Servers,dass Adminlevel unbedingt zurücksetzen auf 0.
    Außerdem ist deine Verarbeitung mit accSpeicherung sehr anfällig.Schau dir mal den ersten Teil folgendes Post'san.
    Bei /AKILL und /KICK wird accSpeicherung nicht mal neu formatiert,bevor du es überhaupt nutzt :whistling: .
    Warum du überhaupt beim einloggen folgendes machst,
    dini_Set(accSpeicherung,"IP",ip);
    dini_Get(accSpeicherung,"AdminLevel");

    ist mir auch ein Rätsel.

    Die passende Gegenfrage dazu wäre,kannst du nicht lesen ?


    Zitat

    Heisst also,es funktioniert nicht aus einem Gamemode herraus. Du musst es in ein Filterscript schreiben.


    Siehst ja wohl auch im Screenshot,dass es ein Filterscript ist und kein Gamemode.

    Das geht,du machst es nur falsch.




    Ich zitiere mal den Wiki-Eintrag.

    Zitat

    Important Note: You will need to include this callback in a loaded filterscript for it to work in the gamemode!


    Heisst also,es funktioniert nicht aus einem Gamemode herraus. Du musst es in ein Filterscript schreiben.

    Etwas mehr Übersicht kann nie schaden.
    dcmd_akill(playerid,params[]) {
    new
    pID,
    pname[MAX_PLAYER_NAME];
    // Wieso 'accSpeicherung' ?
    // Wird nirgendwo formatiert, hier liegt bestimmt schon mal ein Fehler vor.
    if(!fexist(accSpeicherung) && Admin[playerid][Loggedin]== 0) {
    return SendClientMessage(playerid,0xFFFFFFFF,"Du bist kein Admin.");
    }
    if(sscanf(params, "u",pID)) {
    return SendClientMessage(playerid,COLOR_RED,"Benutze: /akill [ID]");
    }
    if (pID == INVALID_PLAYER_ID) {
    return SendClientMessage(playerid,COLOR_RED," Kein Spieler mit angegebener ID Online");
    }
    if(Admin[playerid][AdminLevel] > 1336) {
    printf("DEBUG: playerid(%d) , AdminLebel(%d)",playerid,Admin[playerid][AdminLevel]); // Testzwecke
    GetPlayerName(pID, pname, sizeof(pname));
    format(string1, sizeof(string1), " Du hast %s getötet!", pname );
    SendClientMessage(playerid, INFO, string1);
    SetPlayerHealth(pID, 0);
    }
    return 1;
    }
    Im Befehl scheint mir nichts falsch zu sein. Die Abfrage ist richtig. Gut möglich,dass an Anderer Stelle die falscher SpielerID Adminrechte bekommt.