Killstreak & Adminsystem

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
  • Hey ich versteh nicht wieso mein Killstreak system buggt und immer 3 anzeigt statt 6


    if(KillStreak[killerid] >= 3){
    format(text,sizeof(text),"[KILLSTREAK] %s hat einen 3-er Killstreak! Er bekommt nun wieder 100 HP!",PlayerName(killerid));
    SendClientMessageToAll(COLOR_GREEN,text);
    SetPlayerHealth(killerid,100);
    KillStreak[killerid] = 3;
    }
    if(KillStreak[killerid] >= 6){
    format(text,sizeof(text),"[KILLSTREAK] %s hat einen 6-er Killstreak! Er bekommt nun wieder 140 HP!",PlayerName(killerid));
    SendClientMessageToAll(COLOR_GREEN,text);
    SetPlayerHealth(killerid,140);
    KillStreak[killerid] = 6;
    }


    Mein admin system


    Zeigt für jedne rang nur Projektleiter an


    Script:
    ocmd:admins(playerid,params[])
    {
    SendClientMessage(playerid,COLOR_GREEN,"Administratoren Online:");
    for(new i=0; i<GetMaxPlayers(); i++)
    {
    if(PlayerInfo[i][pAdminLevel] > 0)
    {
    new Admins[128];
    format(Admins,sizeof(Admins),"%s %s",AdminRang[PlayerInfo[playerid][pAdminLevel]],PlayerName(i));
    SendClientMessage(playerid,COLOR_YELLOW,Admins);
    }
    }
    return 1;


    Bitte um hilfe

  • Zu erst ein Hinweis:


    Hinweis

    Beitrag bitte bearbeiten > Code löschen > Über dem Textfeld über der grauen Leiste von "Editor" zu "Quellcode" wechseln > drücken den Code zwischen die Klammern ] & [ kopieren und erneut absenden.

    Hinweis
    So ist er eingerückt und deutlich besser lesbar...

    Hinweis
    Bitte Merken, danke!


    Nun zum Thema.


    Im ersten Fall liegt es an der falschen Verwendung der Vergleichsoperatoren >= 'größer gleich'.
    Versuch dir den Code in Wörtern "durch zu lesen" damit wird sowas auffälliger.


    if(KillStreak[killerid] >= 3)
    Wenn ( KillStreak[killerid] größer oder gleich 3 )


    Damit gilt diese Abfrage als erfüllt bei allen Zahlen größer oder gleich 3, also auch 4, 5, 6, 10 oder 100.
    Somit führt er den Code danach immer aus und dort setzt du KillStreak[] immer knallhart auf 3, damit verhinderst du das die Variable überhaupt größer als 3 werden kann.
    Ich nehme mal an das du vor den If Abfragen KillStreak[killerid] plus 1 rechnest, dann kannst du das setzen der Variable innerhalb der If-Abfragen rausnehmen. (Bei allen Abfragen natürlich)
    Statt größer gleich einfach nur gleich nehmen ( x == y ) so wird der Code nur dann ausgeführt wenn die Variable exakt gleich 3 oder 6 etc ist.

  • Ist das den so richtig?


    }
    if(KillStreak[killerid] >= 3){
    format(text,sizeof(text),"[KILLSTREAK] %s hat einen 3-er Killstreak! Er bekommt nun wieder 100 HP!",PlayerName(killerid));
    SendClientMessageToAll(COLOR_GREEN,text);
    SetPlayerHealth(killerid,100);
    KillStreak[killerid] = 6;
    }
    if(KillStreak[killerid] >= 6){
    format(text,sizeof(text),"[KILLSTREAK] %s hat einen 6-er Killstreak! Er bekommt nun wieder 140 HP!",PlayerName(killerid));
    SendClientMessageToAll(COLOR_GREEN,text);
    SetPlayerHealth(killerid,140);
    KillStreak[killerid] = 9;
    }

  • Der Server arbeitet Code von oben nach unten ab, das sollte klar sein.
    Sobald du also 3 Kills hast führt er die if-Abfrage aus, setzt die Variable auf 6 und geht zur nächsten If-Abfrage.
    Die ist sofort im gleichen Durchlauf erfüllt weil du sie ja gerade zuvor gesetzt hast, ergo wird auch der Code sofort ausgeführt.


    Damit bist du also auf dem Holzweg. Les mal meinen ersten Beitrag bitte nochmal durch und frag was du daran nicht verstanden hast.

  • Ich bin mir nicht sicher aber lag es an den = ?


    if(KillStreak[killerid] > 3){
    format(text,sizeof(text),"[KILLSTREAK] %s hat einen 3-er Killstreak! Er bekommt nun wieder 100 HP!",PlayerName(killerid));
    SendClientMessageToAll(COLOR_GREEN,text);
    SetPlayerHealth(killerid,100);
    KillStreak[killerid] > 3;
    }
    if(KillStreak[killerid] > 6){
    format(text,sizeof(text),"[KILLSTREAK] %s hat einen 6-er Killstreak! Er bekommt nun wieder 140 HP!",PlayerName(killerid));
    SendClientMessageToAll(COLOR_GREEN,text);
    SetPlayerHealth(killerid,140);
    KillStreak[killerid] > 6;

  • Ich bin mir nicht sicher aber lag es an den = ?


    Nein wirklich? Was habe ich denn im zweiten Satz geschrieben?

    liegt es an der falschen Verwendung der Vergleichsoperatoren >= 'größer gleich'


    Ich glaube du liest nicht richtig, les meinen ersten Beitrag komplett und am besten dreimal. Tu es einfach. Versuch zu verstehen wo und was das Problem ist. Und ändere nur das an deinem Original Code was unbedingt nötig ist. Nicht voreilige Schlüsse ziehen sondern lesen, überlegen, fragen wenn du was nicht verstehst und erst dann handeln. Scripting ist kein versuchen und sinnloses ändern von Buchstaben oder Zeichen, gewöhn dir das bitte ab.


  • if(KillStreak[killerid] == 3){
    format(text,sizeof(text),"[KILLSTREAK] %s hat einen 3-er Killstreak! Er bekommt nun wieder 100 HP!",PlayerName(killerid));
    SendClientMessageToAll(COLOR_GREEN,text);
    SetPlayerHealth(killerid,100);
    KillStreak[killerid] > 3;
    }
    if(KillStreak[killerid] == 6){
    format(text,sizeof(text),"[KILLSTREAK] %s hat einen 6-er Killstreak! Er bekommt nun wieder 140 HP!",PlayerName(killerid));
    SendClientMessageToAll(COLOR_GREEN,text);
    SetPlayerHealth(killerid,140);
    KillStreak[killerid] > 6;

  • Hey teste ich mal danke ^^


    Noch eine frage könnte mir jemand bei meinem admin system helfen?



    ocmd:admins(playerid,params[])
    {
    SendClientMessage(playerid,COLOR_GREEN,"Administratoren Online:");
    for(new i=0; i<GetMaxPlayers(); i++)
    {
    if(PlayerInfo[i][pAdminLevel] > 0)
    {
    new Admins[128];
    format(Admins,sizeof(Admins),"%s %s",AdminRang[PlayerInfo[playerid][pAdminLevel]],PlayerName(i));
    SendClientMessage(playerid,COLOR_YELLOW,Admins);
    }
    }
    return 1;


    er zeigt jeden als Projektleiter oder spieler an bei normalen spielern

  • @xCurry:
    Man sollte Code nicht Blind übernehmen, was du gepostet hast ist falsch.


    Hey teste ich mal danke


    Nein nicht testen, das heißt das du das Problem nicht beseitigt hast. Du hast die Chance das hier und jetzt zu klären, nutze sie doch?
    Schau dir deinen Code aus deinem ersten Beitrag an und les meinen ersten Beitrag, da steht alles drin.