[Frage] Teamkill-System

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
  • Heii Leute,


    ich habe gerade ein Teamkill-System erstellt, aber wenn man 3 Teamkills hat wird man nicht gekickt?


    new teamkills[MAX_PLAYERS];


    Unter OnPlayerDeath.



    if(klasse[playerid] != klasse[killerid])
    {
    teamkills[killerid] ++;
    SendClientMessage(killerid,ROT,"Du hast teamkill begangen!");
    return 1;
    }
    if(teamkills[killerid] >= 3)
    {
    SendClientMessage(killerid,ROT,"Du wurdest wegen wiederholtem teamkill gekickt");
    Kick(killerid);
    return 1;
    }


    Was stimmt daran nicht?


    MfG
    Pablo_Escobar

  • Wieso machst du nicht:


    SetPlayerTeam(playerid,teamid);


    Denn brauchste auch kein Antiteamkill System, weil man sich nicht im selben Team abschlachten kann. :D


    Engelsflügel am Astonkühler, als Schutz vor dem Teufel!

  • so:
    #
    if(klasse[playerid] == klasse[killerid])
    {
    teamkills[killerid] ++;
    SendClientMessage(killerid,ROT,"Du hast teamkill begangen!");
    return 1;
    }
    if(teamkills[killerid] >= 3)
    {
    SendClientMessage(killerid,ROT,"Du wurdest wegen wiederholtem teamkill gekickt");
    Kick(killerid);
    return 1;
    }


    Bedanke dich bitte, wenn du den Beitrag als hilfreich empfandest!



  • D


    as ist das selbe?

    :) SWAGETTI & YOLONAISE!

  • Er hat doch nur des ! gelöscht ??


    Aber wenn man das ! weglässt ist jeder kill ein Teamkill.


    Nein da muss ein == ?
    if(TeamVonSpieler1 == TeamVonSpieler2)// Wenn TeamVonSpieler1 ist das selbe wie TeamVonSpieler2 dann:
    {
    //TEAMKILL
    }
    Bei dir ist es:
    if(TeamVonSpieler1 != TeamVonSpieler2)// Wenn TeamVonSpieler1 ist nicht das selbe wie TeamVonSpieler2 dann:
    {
    //TEAMKILL
    }

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • if(klasse[playerid] != klasse[killerid])
    {
    teamkills[killerid] ++;
    SendClientMessage(killerid,ROT,"Du hast teamkill begangen!");
    if(teamkills[killerid] >= 3)
    {
    SendClientMessage(killerid,ROT,"Du wurdest wegen wiederholtem teamkill gekickt");
    Kick(killerid);
    }
    return 1;
    }

  • Das Problem ist das erste return,
    machs weg dann sollte es funktionieren!

    Also ich habe des jetzt so gemacht:


    if(klasse[playerid] != klasse[killerid])
    {
    teamkills[killerid] ++;
    SendClientMessage(killerid,ROT,"Du hast teamkill begangen!");
    }
    if(teamkills[killerid] >= 3)
    {
    SendClientMessage(killerid,ROT,"Du wurdest wegen wiederholtem teamkill gekickt");
    Kick(killerid);
    return 1;
    }


    Stimmt doch so? ist ungetestet


  • Nein tut es nicht, das hat nichts mit dem return zutun, mach doch mal was Synonymouz geschrieben hat, if(klasse(playerid) == klasse(killerid)..


    Habs dir mal geändert, sollte stimmen.


    //E: Oder machst du es dir noch einfacher und benutzt einfach SetPlayerTeam(playerid,teamid);


    Engelsflügel am Astonkühler, als Schutz vor dem Teufel!

    Einmal editiert, zuletzt von BOMBER ()

  • if(klasse[playerid] == klasse[killerid])
    {
    teamkills[killerid] ++;
    SendClientMessage(killerid,ROT,"Du hast teamkill begangen!");
    return 1;
    }
    if(teamkills[killerid] >= 3)
    {
    SendClientMessage(killerid,ROT,"Du wurdest wegen wiederholtem teamkill gekickt");
    Kick(killerid);
    return 1;
    }



    So ist das jetzt fertig?

  • Das return lässt ein Callback SOFORT beenden, das kann man mal versuchen indem man in die selbe Abfrage hier einen anderen Code unter das return schiebt, dann kommt auch n Warning ;)
    Die untere Abfrage wird nicht ausgeführt da das Callback schon früher beendet wird eben durch das return!


    Dennoch leugne ich nicht das die andere Lösung auch funktioniert und eher sogar ordentlicher aussieht...


    //Edit: Nein ist es nicht, sieh hier...


    if(klasse[playerid] == klasse[killerid])
    {
    teamkills[killerid] ++;
    SendClientMessage(killerid,ROT,"Du hast teamkill begangen!");
    return 1; // Das hier muss unbedingt weg!
    }
    if(teamkills[killerid] >= 3)
    {
    SendClientMessage(killerid,ROT,"Du wurdest wegen wiederholtem teamkill gekickt");
    Kick(killerid);
    return 1;
    }


    ergo:


    if(klasse[playerid] == klasse[killerid])
    {
    teamkills[killerid] ++;
    SendClientMessage(killerid,ROT,"Du hast teamkill begangen!");
    }
    if(teamkills[killerid] >= 3)
    {
    SendClientMessage(killerid,ROT,"Du wurdest wegen wiederholtem teamkill gekickt");
    Kick(killerid);
    return 1;
    }


    //Edit2: ja das mit der klasse[playerid] == klasse[killerid] stimmt jetzt


    ^ :thumbup: Klasse Internet, oder? :thumbup: ^

  • if(teamkills[killerid] >= 3)
    {
    SendClientMessage(killerid,ROT,"Du wurdest wegen wiederholtem teamkill gekickt");
    Kick(killerid);
    return 1;
    }


    Ist auch nicht viel besser, normaler weiße return man in den letzten 2. }


    bsp:

    Befehl
    {
    Mehr Abfragen
    {
    }
    return 1;
    }


    Engelsflügel am Astonkühler, als Schutz vor dem Teufel!


  • Immer?

    KleineHilfe 2.0

  • In diesem Fall kann man das return dort lassen und das würde ich auch so machen damit weiterer Code nichtmehr für diesen Spieler ausgeführt wird auch wenn er eigentlich schon gekickt ist!


    Ja, aber bevor er nachher fragt, wo man denn normalerweiße returnt, kann ichs ihm auch gleich hier erklären. :D


    //Edit: Ghost, nicht immer - Kommt drauf an. D:


    Engelsflügel am Astonkühler, als Schutz vor dem Teufel!

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