Waffen werden nicht an alle Spieler gegeben, trotz der Schleife

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
  • Ganz einfacher Befehl mit einer einfachen Wirkung. Dennoch bekommt niemand die Waffe.



    dcmd_minigunall(playerid,params[])
    {
    #pragma unused params
    if(AccInfo[playerid][Level] >= 2)
    {
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(IsPlayerConnected(i))
    {
    new string[125];
    PlayerPlaySound(i,1057,0.0,0.0,0.0);
    GivePlayerWeapon(i,38,10000);
    format(string,sizeof(string),"* Admin %s (ID:%d) gave everyone a Minigun!", pName(playerid),playerid);
    SendClientMessageToAll(yellow,string);
    GameTextForAll("~w~Free~n~~g~Minigun!", 3000, 3);
    return 1;
    }
    }
    }
    return 1;
    }


    Was habe ich nicht beachtet? Hängt das mit dem return zusammen? Ich habe tausende Möglichkeiten ausprobiert. Entweder bekomme ich keine Waffen, oder ich bekomme sie mit 3 mal der Message "Admin bla gave everyone a minigun.."


    Bitte um Rat! ;)

  • Das Return bei if(IsPlayerConnected(i)) wegnehmen, denn so bekommt nur der erste Spieler die Minigun und die Schleife wird abgebrochen.

  • Hier ein paar Infos:


    1. Nicht dcmd nutzen...das nur ein Makro für strcmp...nutze lieber ocmd/zcmd/ycmd..bla blub


    2. SendClientMessageToAll sendet schon die Nachricht an alle, da musst du es nicht in die Schleife packen, dass es...~SpielerN mal aufgerufen wird..


    3. Selbiges für GameTextForAll


    4. return 1; In der Schleife ist natürlich nicht sinnig :)


    Also so sollte das aussehen:


    ast2ufdyxkb1.png


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

  • Vielen Dank, Kaliber.


    dcmd sollte ich also garnicht nutzen? Merkt man arg, dass es langsamer ist oder warum ist davon abzuraten?

    Je mehr Befehle du hast, desto langsamer wird das.


    Du musst verstehen..bei strcmp steht das alles in einer if-Abfrage..das sieht dann so aus (mal als Abstraktes Beispiel mit Zahlen)



    new x = 5;
    if(x == 1)
    else if(x==2)
    else if(x==3)
    else if(x==4)


    Hier muss nun von 1 bis...z.B. 100 durchgelaufen werden, bis dein Befehl gefunden wurde...und das kann wirklich lange dauern, wenn der Command ganz unten steht...
    Die Vorteile bei ocmd/zcmd/ycmd..usw diese springen direkt an den Punkt wo dieser Command startet :)
    Und dadurch erreichst du eine enorme Performanz Verbesserung...egal wie viele Befehle du hast! (Denn bei strcmp (dcmd) wird es immer langsamer..je mehr Befehle du hast).

    ast2ufdyxkb1.png


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