Schleifen Problem bei Abfrage von Fahrzeug

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
  • Abend liebe Community,


    Ich habe mal wieder ein Problem mit einer meiner vielen Schleifen, sie fragt zwar alles ab aber macht mehr als sie soll!


    Hier ist mal der Quelltext aus meinen Script:



    if(strcmp("/Angeln",cmdtext,true,15)==0)
    {
    for(new i = 0; i < sizeof Fischerboot; i++)
    {
    if(IsPlayerInVehicle(playerid,Fischerboot[i]))
    {
    SendClientMessage(playerid,Dunkelgrün,"Fahre nun alle Checkpoints ab um zu Fischen. Liefer die Fische am Ende wieder am Hafen ab!");
    SetPlayerCheckpoint(playerid,2714.0117,-2692.9399,-0.7763,3);
    TogglePlayerControllable(playerid,1);
    FischerMission = 1;
    }
    else
    {
    SendClientMessage(playerid,Rot,"Du musst zum Angeln in einem Fischer Boot sein!");
    TogglePlayerControllable(playerid,1);
    FischerMission = 0;
    }
    }
    return 1;
    }


    Ich wette Scripter wie z.B. Kaliber oder IPrototypel finden wieder eine Menge Fehler oder haben bessere Lösungen ;) :p


    Ich wollte mit dieser Schleife meine Fischerboote Durchlaufen lassen um zu Prüfen ob der Spieler wenn er "/Angeln" Eingibt auch in einen Fischerboot ist.
    Mein Problem ist aber nun das wenn ich das Boot Betrete die Nachricht "Du musst zum Angeln in einem Fischer Boot sein!" 5 mal oder so kommt.... ich will diese aber nur einmal Gesendet bekommen ^^
    Weiss zufällig einer wie ich das anstelle?


    Mit freundlichen Grüßen


    LogispireMode

    Einmal editiert, zuletzt von LogispireMode ()

  • Bei dem else{ } entweder "break;" oder "return 1;" zum Schluss reinschreiben. Also so:
    else
    {
    SendClientMessage(playerid,Rot,"Du musst zum Angeln in einem Fischer Boot sein!");
    TogglePlayerControllable(playerid,1);
    FischerMission = 0;
    break;
    }


    //e: Hör nicht darauf. :D
    Das Zeug aus else mal rausnehmen, unter die Schleife schreiben und in die Schleife return 1; reinmachen sollte das richten:
    if(strcmp("/Angeln",cmdtext,true,15)==0)
    {
    for(new i = 0; i < sizeof Fischerboot; i++)
    {
    if(IsPlayerInVehicle(playerid,Fischerboot[i]))
    {
    SendClientMessage(playerid,Dunkelgrün,"Fahre nun alle Checkpoints ab um zu Fischen. Liefer die Fische am Ende wieder am Hafen ab!");
    SetPlayerCheckpoint(playerid,2714.0117,-2692.9399,-0.7763,3);
    TogglePlayerControllable(playerid,1);
    FischerMission = 1;
    return 1;
    }
    }
    SendClientMessage(playerid,Rot,"Du musst zum Angeln in einem Fischer Boot sein!");
    TogglePlayerControllable(playerid,1);
    FischerMission = 0;
    return 1;
    }


    //e2: Menno, zu langsam editiert... :(

    Ich bin Dittis Signatur.

  • if(!strcmp("/angeln",cmdtext,true)){
    for(new i = 0; i < sizeof(Fischerboot); i++){
    if(IsPlayerInVehicle(playerid,Fischerboot[i])){
    SendClientMessage(playerid,Dunkelgrün,"Fahre nun alle Checkpoints ab um zu Fischen. Liefer die Fische am Ende wieder am Hafen ab!");
    SetPlayerCheckpoint(playerid,2714.0117,-2692.9399,-0.7763,3);
    TogglePlayerControllable(playerid,1);
    FischerMission = 1;
    return 1;
    }
    }
    SendClientMessage(playerid,Rot,"Du musst zum Angeln in einem Fischer Boot sein!");
    TogglePlayerControllable(playerid,1);
    FischerMission = 0;
    return 1;
    }


    Du hast nur einen kleinen Denkfehler. Denn wenn die schleife zuende ist und nichts gefunden wurde, willst du ja die Meldung erst rausgeben, nicht in der Schleife.

  • Danke!


    Ditti: Ich bedanke mich für die Hilfe, das mit break; und return 1; war falsch, wusstest du und ich auch ;) Aber so wie du den Code gepostet hast, also nur das else mit den klammern weg wäre auch falsch gewesen ;)
    Blunt: Danke vielmals! ich habe es so ähnlich wie du übernommen und es funktioniert auch^^