Warum gehen meine for(schleifen nicht) ?

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
  • Hallo Leute, ich möchte hier mal ein paar Fragen stellen.
    Ich möchte wissen, warum all me4ine forschleifen, die ich erstellt habe nicht funktionieren, was mache ich an den nur falsch, alle die Befehle die ich hier aufliste, die funktionieren nicht, ich weiß echt kein Rat, kann mir jemand helfen, dass ich die blöden Dinger richtig mache ?
    Oder leigt der Fehler vielleicht irgendwo anders ? Ich weiß es nicht, doch alle Befehle, die ich gescriptet habe, die eine forschleife haben gehen kaum.
    Kann es auch an MySQL liegen, dass die Datenbank die nicht findet, ich weiß nicht weiter, ich habe in sämtlichen Scripts geguckt, doch nirgendswo ist es anders, als bei mir.


    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------


    Befehl 1: /fbank geht nach der Fraktionsabfrage nicht weiter, ich vermute es liegt an der forschleife. Aufjedenfall bekomme ich kein Dialog.
    ocmd:fbank(playerid)
    {
    if(!DarfPlayerCommand(playerid))return ErrorMsg(playerid,"Du kannst keine Befehle nutzen.");
    if(!IsPlayerInFrakt(playerid,2)&&!IsPlayerInFrakt(playerid,17)&&!IsPlayerInFrakt(playerid,4)&&!IsPlayerInFrakt(playerid,5)&&!IsPlayerInFrakt(playerid,7)&&!IsPlayerInFrakt(playerid,8)&&!IsPlayerInFrakt(playerid,9)&&!IsPlayerInFrakt(playerid,10)&&!IsPlayerInFrakt(playerid,14))return ErrorMsg(playerid,"Deine Fraktion hat keine Fraktionsbank");
    for(new i = 0; i<maxfbanken; i++)
    {
    if(Fbank[i][Fraktion]==SpielerInfo[playerid][Frakt])
    {
    format(string,sizeof(string),"{00E1FF}Geld: {FEFEFE}%d$\n{00E1FF}Mats: {FEFEFE}%i\n{00E1FF}Hanf: {FEFEFE}%ig\n{00E1FF}LSD: {FEFEFE}%i Pillen\n{00E1FF}Koks: {FEFEFE}%ig",Fbank[i][fMoney],Fbank[i][Mats],Fbank[i][Drugs],Fbank[i][fLSD],Fbank[i][fkoks]);
    ShowPlayerDialog(playerid,DIALOG_INFO,DIALOG_STYLE_MSGBOX,"Fraktionsbank",string,"Ok","");
    SaveFbank(i);
    }
    return 1;
    }
    return 1;
    }


    ---------------------------------------------------------------------------------------------------------------------------------------


    Befehl 2: Meldung: Du bist an keinem Buissnes, obwohl ich es doch bin.
    ocmd:bizkasse(playerid)
    {
    for(new i=0; i<sizeof(Biz); i++)
    {
    if(IsPlayerInRangeOfPoint(playerid,5,Biz[i][bizx],Biz[i][bizy],Biz[i][bizz])&&GetPlayerVirtualWorld(playerid)==i)
    {
    if(!strcmp(Biz[i][besitzer],SpielerName(playerid),true))
    {
    isInBiz[playerid]=i;
    format(string,sizeof(string),"*%s*\n\nEinnahmen: %i$\n\nWie viel möchtest du auszahlen?",GetBizType(i),Biz[i][money]);
    ShowPlayerDialog(playerid,BIZ_DIALOG,DIALOG_STYLE_INPUT,"Business - Einnahmen",string,"Auszahlen","Schließen");
    return 1;
    }
    if(!strcmp(Biz[i][teilhaber],SpielerName(playerid),true))
    {
    isInBiz[playerid]=i;
    format(string,sizeof(string),"*%s*\n\nEinnahmen: %i$\n\nWie viel möchtest du auszahlen?",GetBizType(i),Biz[i][money2]);
    ShowPlayerDialog(playerid,BIZ_DIALOG2,DIALOG_STYLE_INPUT,"Business - Einnahmen",string,"Auszahlen","Schließen");
    return 1;
    }
    return ErrorMsg(playerid,"Du bist weder Inhaber, noch Teilhaber");
    }
    }
    return ErrorMsg(playerid,"Du bist bei keinem Business.");
    }


    ------------------------------------------------------------------------------------------------------------------------------------


    Was soll ich machen ?
    LG

  • 1. Das return 1; unterbricht die Schleife wenn es in dieser ist.
    Da du es in der Schleife hast mach der Abfrage wird die Schleife schon unterbrochen nach dem ersten durchlauf


    2. Du fragst ab ob er in der Virtuellen Welt i ist.
    Das kann dann ja auch nicht gehen. Lösch die Abfrage mit der Welt

  • Also soll ich als Beispiel nehmen.


    if(!IsPlayerInRangeOfPoint(playerid,5,BIZ[Xpos],BIZ[Ypos],BIZ[Zpos]))continue;


    Was bewirkt das genau ?
    Das wird übersprucngen, richtig ? Aber wenn ich das überspringe komme ich ja zur nächsten Abfrage, kann mir das einer erzählen ?

  • Hier mal ein kleines Beispiel:
    for (new i = 0; i < 50; i ++) {
    if (i < 30) continue; // Der untere Teil der for-Schleife wird ignoriert, i direkt erhöht und die Abfrage erneut durchgeführt.
    if (i == 31) print("blah"); // Sollte i = 31 sein, wird "blah" in der Console ausgegeben, der restliche Teil der Abfrage allerdings noch ausgeführt.
    if (i == 32) break; // Die Abfrage wird komplett beendet und das Callback/die Funktion geht nach der for-Schleife weiter.
    if (i == 33) return 1; // Die komplette Funktion/das Callback wird beendet und gibt "1" zurück.
    }


    Mein CS:GO Server: 62.75.168.39:27016


    Ich bin so hungrig, dass ich vor lauter Durst nicht weiß, was ich rauchen soll - so müde bin ich!
    Freedom is just another word for 'Nothing left to lose'

  • Es geht nicht um einen Sinn der Funktion, sondern um die Erklärung selbiger du Pappnase.
    Welchen Sinn bitte hat es, eine Schleife bis 50 hochballern zu lassen, ohne darin etwas brauchbares zu evaluieren?


    Mein CS:GO Server: 62.75.168.39:27016


    Ich bin so hungrig, dass ich vor lauter Durst nicht weiß, was ich rauchen soll - so müde bin ich!
    Freedom is just another word for 'Nothing left to lose'

    • Offizieller Beitrag

    Okay tut mir leid, einen sinn es hat trotzdem nicht.

    Vielleicht hast du es nicht bemerkt, aber das ist ein Beispiel wie man continue einsetzt.
    Wenn du ein Array hast was 50 groß ist und du nur die letzten 20 benutzten willst ist die Abfrage schon richtig.

    Kannst du lesen?

    • Offizieller Beitrag

    Ändert nichts daran, dass du falsches Zeugs erzählst.
    Ich habe es vorher schon erklärt wie es zum Einsatz kommen könnte,
    und du behauptest weiterhin, dass es keinen Sinn macht.


    Ich habe dich letztens im Smalltalk Thread in Schutz genommen, dass muss
    Ich anscheinend zurück ziehen. Du siehst einfach nicht ein, wenn jemand Recht hat und
    du nicht wusstest, dass es seine Richtigkeit hatte.


    Ist zwar Offtopic, musste aber mal gesagt werden.

  • 1. Muss du natürlich nicht zurückziehen :D
    2. Ich habe ja schon mehrfach erwähnt das ich weis es war nur ein Beispiel.
    Aber da ja


    Die Bedingung i < 50; i++) ist



    if (i < 30) continue;


    Die abfrage ist sinnlos
    Ich weis das ist nur ein Beispiel, möchte darüber auch nicht diskutieren


    3. Ja ich gebe nicht so gern zu das ich unrecht habe, habe ich in dem Fall ja auch eigentlich nicht

  • Sinnlos ist daran erstmal gar nichts. Gesetz dem Fall ich habe eine Funktion, die jedem Spieler Geld geben soll, außer den ersten 30 Personen, würde dieser If-Clause z.B. schonmal seinen Nutzen erfüllen. Natürlich kann man in dem Fall dann auch direkt i auf 31 setzen und dort mit der for-Schleife anfangen. Wenn ich jetzt aber z.B. will, dass nur jeder 5. Benutzer Geld kriegt, was dann
    if (i % 5 > 0) continue;
    wäre, ist die Funktion mehr als legitim.


    Und nu hört auf hier über so'n infantilen Scheiß zu diskutieren. Grundlage ist, dass der Threadersteller versteht, wie die Funktion benutzt wird und wie sie agiert. Und sowas bringt man nunmal an banalen Beispielen bei und nicht an abstrakten Funktionen. Ich hätte ihm hier auch genau so gut eine meiner Scriptschleifen hinballern und sagen können "Da siehste ja, wie man sie benutzt". Und nu is Ende hier.


    Mein CS:GO Server: 62.75.168.39:27016


    Ich bin so hungrig, dass ich vor lauter Durst nicht weiß, was ich rauchen soll - so müde bin ich!
    Freedom is just another word for 'Nothing left to lose'

    • Offizieller Beitrag

    Wenn du ein Array hast was 50 groß ist und du nur die letzten 20 benutzten willst ist die Abfrage schon richtig.

    Noch mal für dich:
    for (new i = 0; i < 50; i ++) {
    if (i < 30) continue;
    BankVariable[i] = 1;
    }
    BankVariable[30] bis BankVariable[49] wird auf 1 gesetzt

    for (new i = 0; i < 50; i ++) {
    if (i > 29) continue;
    BankVariable[i] = 0;
    }
    BankVariable[0] bis BankVariable[29] wird auf 1 gesetzt



    Bitte sehr, hier ist dein Sinn für diese Abfrage. Wenn du z.B 50 Banken hast und die ersten 30 Typ 0 sind und die letzten 20 Typ 1, MACHT ES EINEN SINN!


    Bzw:
    for (new i = 0; i < 50; i ++) {
    BankVariable[i] = 0;
    if (i < 30) continue;
    BankVariable[i] = 1;
    }