Bedingungsschleife | Nur Cop abfragen

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 Leute,


    ich habe eine Schleife und die soll Abfragen.
    Ist ein Cop in der Nähe dann setzte die Variable auf 1.
    Ist er nicht in der Nähe dann auf 0.
    Das Problem ist ja bei meiner Schleife.
    Function WantedChecker(playerid)
    {
    new Float: x, Float: y, Float: z;
    GetPlayerPos(playerid, x, y, z);
    for(new i=0;i<MAX_PLAYERS; i++)
    if(IsPlayerConnected(i))
    {
    if(IsPlayerInRangeOfPoint(i, 40.0, x,y,z) && IsACop(i))
    {
    IntFlucht[playerid] = 1;
    }
    else if(IsPlayerInRangeOfPoint(i, 40.0, x,y,z) && !IsACop(i)) //Die Schleife läuft ja weiter und ist ein nicht COp in der Nähe setzt er die wieder auf 0
    {
    IntFlucht[playerid] = 0;
    }
    }
    }

    Kann ich dieses MAX_PLAYERS durch isacop ersetzten oder so ?
    Lg

  • Zwei Sachen.
    Ich würde prüfen ob i != playerid ist.Könnte bei dir vllt zu Fehler führen,je nachdem wie das im Ganzen bei dir funktioniert.
    Wieso machst du nicht "if(IsPlayerInRangeOfPoint(i, 40.0, x,y,z)" und falls das wahr ist,die Abfrage ob Polizist oder nicht.
    Ist er/sie Polizist,machst ein break und wir wissen,dass mindestens 1 Polizisten in der nähe gefunden wurde.

  • Aso also break;
    ist ja das "return" für Schleifen.
    Wenn ich mich nicht irre :D
    /edit:
    Hmm also ich habe es so,wenn ich ein else hinsetzt busggst doch ?
    Function WantedChecker(playerid)
    {
    new Float: x, Float: y, Float: z;
    GetPlayerPos(playerid, x, y, z);
    for(new i=0;i<MAX_PLAYERS; i++)
    if(IsPlayerConnected(i))
    {
    if(IsPlayerInRangeOfPoint(i, 40.0, x,y,z) && IsACop(i))
    {
    IntFlucht[playerid] = 1;
    break;
    }
    }
    }

  • Aso also break;
    ist ja das "return" für Schleifen.


    Irgendwie ja nicht.
    return bricht den Code ab und gibt einen Wert zurück.


    break bricht nur die schleife ab.


    Sind 2 verschiedene Dinge

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

    Margarete Stokowski

  • Du brauchst das else doch gar nicht.
    Entweder die Schleife findet einen Cop der in der nähe ist oder nicht.Je nachdem wird IntFluch[] auf 1 gesetzt oder bleibt wie es vorher war.Es gibt viele Möglichkeiten wie du es machen könntest.
    Function WantedChecker(playerid)
    {
    new Float: x, Float: y, Float: z;
    GetPlayerPos(playerid, x, y, z);
    for(new i=0;i<MAX_PLAYERS; i++) {
    if(IsPlayerConnected(i))
    {
    if(IsPlayerInRangeOfPoint(i, 40.0, x,y,z) && IsACop(i))
    {
    IntFlucht[playerid] = 1;
    return true;
    }
    }
    }
    return false;
    }


    Function WantedChecker(playerid)
    {
    new Float: x, Float: y, Float: z;
    new bool:bFoundCop = false;
    GetPlayerPos(playerid, x, y, z);
    for(new i=0;i<MAX_PLAYERS; i++) {
    if(IsPlayerConnected(i))
    {
    if(IsPlayerInRangeOfPoint(i, 40.0, x,y,z) && IsACop(i))
    {
    IntFlucht[playerid] = 1;
    bFoundCop = true
    break;
    }
    }
    }
    if(!bFoundCop) {
    IntFlucht[playerid] = 0;
    }
    return 1;
    }


    Function WantedChecker(playerid)
    {
    new Float: x, Float: y, Float: z;
    new bool:bFoundCop = false;
    GetPlayerPos(playerid, x, y, z);
    for(new i=0;i<MAX_PLAYERS; i++)
    if(IsPlayerConnected(i))
    {
    if(IsPlayerInRangeOfPoint(i, 40.0, x,y,z) && IsACop(i))
    {
    IntFlucht[playerid] = 1;
    bFoundCop = true
    break;
    }
    }
    if(!bFoundCop) {
    IntFlucht[playerid] = 0;
    }
    return 1;
    }
    Falls der Spieler für den WantedChecker läuft auch ein Cop selber sein kann,musst du unbedingt auf "playerid != i" prüfen.