for-Schleife macht Probleme

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 Community,
    meine for-Schleife bei meinen Businesses macht Probleme... Sie geht nur bis _biz 2 ist und dann bricht es ab. Habe fast alles schon debugt, aber ich finde kein Fehler. Wenn ich eine Schleife ohne Code schreibe, geht sie einmal durch.


    Hier der Code:
    for(new _biz = 1; _biz < MAX_BIZZ; _biz++)
    {
    if(IsPlayerInRangeOfPoint(playerid, 2, BizzInfo[_biz][bizzX], BizzInfo[_biz][bizzY], BizzInfo[_biz][bizzZ]))
    {
    if(BizzInfo[_biz][bizz_locked] == 1)return GameTextForPlayer(playerid, "~r~Verschlossen",2000,5);
    if(BizzInfo[_biz][bizz_art] == 6 || BizzInfo[_biz][bizz_art] == 7)return 1;
    SetPlayerPos(playerid, BizzInt[BizzInfo[_biz][bizz_interior]][bizz_IntX], BizzInt[BizzInfo[_biz][bizz_interior]][bizz_IntY], BizzInt[BizzInfo[_biz][bizz_interior]][bizz_IntZ]);
    SetPlayerInterior(playerid, BizzInt[BizzInfo[_biz][bizz_interior]][bizz_int]);
    Streamer_UpdateEx(playerid, BizzInt[BizzInfo[_biz][bizz_interior]][bizz_IntX], BizzInt[BizzInfo[_biz][bizz_interior]][bizz_IntY], BizzInt[BizzInfo[_biz][bizz_interior]][bizz_IntZ]);
    SetPlayerVirtualWorld(playerid, _biz);
    }
    else if(IsPlayerInRangeOfPoint(playerid, 2, BizzInt[BizzInfo[_biz][bizz_interior]][bizz_IntX], BizzInt[BizzInfo[_biz][bizz_interior]][bizz_IntY], BizzInt[BizzInfo[_biz][bizz_interior]][bizz_IntZ]) && GetPlayerVirtualWorld(playerid) == _biz)
    {
    SetPlayerPos(playerid, BizzInfo[_biz][bizzX], BizzInfo[_biz][bizzY], BizzInfo[_biz][bizzZ]);
    SetPlayerInterior(playerid, 0);
    Streamer_UpdateEx(playerid, BizzInfo[_biz][bizzX], BizzInfo[_biz][bizzY], BizzInfo[_biz][bizzZ]);
    SetPlayerVirtualWorld(playerid, 0);
    }
    }


    Ich finde da kein Fehler und bin gerade am verzweifeln. Es wäre nett, wenn mir jemand helfen könnte.


    Mit freundlichen Grüßen
    Adrian

  • Kann es sein, dass Biz ID 2 die Biz ist, bei der Du Dich befindest?


    Ach und wofür ist die Zeile?
    if(BizzInfo[_biz][bizz_art] == 6 || BizzInfo[_biz][bizz_art] == 7)return 1;


    Ich gehe davon aus, dass bei ID 2 immer bei einer von beiden return Zeilen ein wahres Ergebnis existiert, sodass dort alles abgebrochen wird.

  • Wenn die Schleife abbricht, wird es an diesen Zeilen liegen.

    if(BizzInfo[_biz][bizz_locked] == 1)return GameTextForPlayer(playerid, "~r~Verschlossen",2000,5);
    if(BizzInfo[_biz][bizz_art] == 6 || BizzInfo[_biz][bizz_art] == 7)return 1;


    Sinnvoll wäre es, diese Informationen zu verarbeiten, statt die schleife abbrechen zu lassen.


    Übrigens, wenn du etwas in der schleife überspringen willst, also zum nächsten Wert möchtest, nutze continue

    "Bevor ich mir Informationen aus der "Bild" hole,
    werde ich anfangen, Wahlergebnisse danach vorauszusagen,
    neben welchen Busch unsere Katze gepinkelt hat."

    Margarete Stokowski

  • Änder einfach mal beide genannten Zeilen in folgende um:

    if(BizzInfo[_biz][bizz_locked] == 1){
    printf("%i - locked", _biz);
    return GameTextForPlayer(playerid, "~r~Verschlossen",2000,5);
    }
    if(BizzInfo[_biz][bizz_art] == 6 || BizzInfo[_biz][bizz_art] == 7){
    printf("%i - art", _biz);
    return 1;
    }


    und schau mal, was in der Konsole ausgegeben wird.

  • Versuche es mal so. Müsste eig. funktionieren, wenn ich mich nicht irre:
    for(new _biz = 1; _biz < MAX_BIZZ; _biz++)
    {
    if(IsPlayerInRangeOfPoint(playerid, 2, BizzInfo[_biz][bizzX], BizzInfo[_biz][bizzY], BizzInfo[_biz][bizzZ]))
    {
    if(BizzInfo[_biz][bizz_locked] == 1) {
    GameTextForPlayer(playerid, "~r~Verschlossen",2000,5);
    // break wäre empfehlenswert an der Stelle
    }
    if(BizzInfo[_biz][bizz_art] == 6 || BizzInfo[_biz][bizz_art] == 7) continue;
    SetPlayerPos(playerid, BizzInt[BizzInfo[_biz][bizz_interior]][bizz_IntX], BizzInt[BizzInfo[_biz][bizz_interior]][bizz_IntY], BizzInt[BizzInfo[_biz][bizz_interior]][bizz_IntZ]);
    SetPlayerInterior(playerid, BizzInt[BizzInfo[_biz][bizz_interior]][bizz_int]);
    Streamer_UpdateEx(playerid, BizzInt[BizzInfo[_biz][bizz_interior]][bizz_IntX], BizzInt[BizzInfo[_biz][bizz_interior]][bizz_IntY], BizzInt[BizzInfo[_biz][bizz_interior]][bizz_IntZ]);
    SetPlayerVirtualWorld(playerid, _biz);
    // break wäre empfehlenswert an der Stelle
    }
    else if(IsPlayerInRangeOfPoint(playerid, 2, BizzInt[BizzInfo[_biz][bizz_interior]][bizz_IntX], BizzInt[BizzInfo[_biz][bizz_interior]][bizz_IntY], BizzInt[BizzInfo[_biz][bizz_interior]][bizz_IntZ]) && GetPlayerVirtualWorld(playerid) == _biz)
    {
    SetPlayerPos(playerid, BizzInfo[_biz][bizzX], BizzInfo[_biz][bizzY], BizzInfo[_biz][bizzZ]);
    SetPlayerInterior(playerid, 0);
    Streamer_UpdateEx(playerid, BizzInfo[_biz][bizzX], BizzInfo[_biz][bizzY], BizzInfo[_biz][bizzZ]);
    SetPlayerVirtualWorld(playerid, 0);
    // break wäre empfehlenswert an der Stelle
    }
    }

  • Ich habe ihn doch genutzt und dir auch gesagt, was passiert, aber ok...
    Habe es nun nochmal anders ausgeben lassen:
    for(new _biz = 1; _biz < MAX_BIZZ; _biz++) {
    printf("Schleife: _biz = %i", _biz);
    if(IsPlayerInRangeOfPoint(playerid, 2, BizzInfo[_biz][bizzX], BizzInfo[_biz][bizzY], BizzInfo[_biz][bizzZ])) {
    print("Schleife: Abfrage 1");
    //if(BizzInfo[_biz][bizz_locked] == 1)return GameTextForPlayer(playerid, "~r~Verschlossen",2000,5);
    if(BizzInfo[_biz][bizz_art] == 6 || BizzInfo[_biz][bizz_art] == 7)continue;
    SetPlayerPos(playerid, BizzInt[BizzInfo[_biz][bizz_interior]][bizz_IntX], BizzInt[BizzInfo[_biz][bizz_interior]][bizz_IntY], BizzInt[BizzInfo[_biz][bizz_interior]][bizz_IntZ]);
    SetPlayerInterior(playerid, BizzInt[BizzInfo[_biz][bizz_interior]][bizz_int]);
    Streamer_UpdateEx(playerid, BizzInt[BizzInfo[_biz][bizz_interior]][bizz_IntX], BizzInt[BizzInfo[_biz][bizz_interior]][bizz_IntY], BizzInt[BizzInfo[_biz][bizz_interior]][bizz_IntZ]);
    SetPlayerVirtualWorld(playerid, _biz);
    } else if(IsPlayerInRangeOfPoint(playerid, 2, BizzInt[BizzInfo[_biz][bizz_interior]][bizz_IntX], BizzInt[BizzInfo[_biz][bizz_interior]][bizz_IntY], BizzInt[BizzInfo[_biz][bizz_interior]][bizz_IntZ]) && GetPlayerVirtualWorld(playerid) == _biz) {
    print("Schleife: Abfrage 1");
    SetPlayerPos(playerid, BizzInfo[_biz][bizzX], BizzInfo[_biz][bizzY], BizzInfo[_biz][bizzZ]);
    SetPlayerInterior(playerid, 0);
    Streamer_UpdateEx(playerid, BizzInfo[_biz][bizzX], BizzInfo[_biz][bizzY], BizzInfo[_biz][bizzZ]);
    SetPlayerVirtualWorld(playerid, 0);
    }
    printf("Schleife Check: _biz = %i", _biz);
    }
    Wenn er das 2te mal durchgeht, kommt er nicht bis zum Check am Ende, aber auch nicht in irgendeine Abfrage.


    Edit: Wenn ich beim Business mit der ID 2 stehe, geht er bis 3