Random Frage

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
  • Hi, und zwar möchte ich machen, dass etwas zufällig ausgewählt wird:
    new rand = random(sizeof(Baeume));
    if(Baeume[rand][baumid_x]!=0)
    new Float:x,Float:y,Float:z;
    x = Baeume[rand][baum_x];
    y = Baeume[rand][baum_y];
    z = Baeume[rand][baum_z];


    Es soll jedoch auch so sein, wenn die baumid_x nicht gleich 0 ist, dass ein neuer Random Wert gewählt ist, bis die baumid_x gleich 0 ist.


    Wie ist das möglich?

  • Dein aktueller Code wäre sowieso buggy. Du müsstest schon geschweifte Klammern verwenden, da sonst nur die nächste Zeile von der If Abfrage berücksichtigt würde.


    Das müsste mit einer while Schleife funktionieren.



    new rand = random(sizeof(Baeume));
    while(rand != 0){ //solange rand nicht 0 ist
    rand = random(sizeof(Baeume));
    }


    new Float:x,Float:y,Float:z;
    x = Baeume[rand][baum_x];
    y = Baeume[rand][baum_y];
    z = Baeume[rand][baum_z];


    Ungetestet und am Handy geschrieben (bin ich nicht engagiert?).


    //e


    Oder so, das würde glaube ich auch funktionieren:

    new rand = random(sizeof(Baeume));
    do{ //Endlosschleife
    if(Baeume[rand][baumid_x]==0){
    new Float:x,Float:y,Float:z;
    x = Baeume[rand][baum_x];
    y = Baeume[rand][baum_y];
    z = Baeume[rand][baum_z];
    break; //Wichtig! Bricht die Schleife ab, da sie sonst unendlich iterieren würde.
    }else{
    rand = random(sizeof(Baeume));
    }
    }while(true);


  • Danke


    new rand = random(sizeof(Baeume));
    do
    {
    if(Baeume[rand][baumid_x]==0)
    {
    new Float:x,Float:y,Float:z;
    x = Baeume[rand][baum_x];
    y = Baeume[rand][baum_y];
    z = Baeume[rand][baum_z];
    Baeume[rand][baumid_x] = CreateObject(659,Baeume[rand][baum_x],Baeume[rand][baum_y],Baeume[rand][baum_z],0.0,0.0,0.0);
    baumi[playerid] = rand;
    SetPlayerCheckpoint(playerid,x,y,z,2);
    break;
    }
    else
    {
    rand = random(sizeof(Baeume));
    }
    }
    while(true);


    Habs jetzt so, bekomme jetzt nur noch Warnings in der while(true); Zeile und die Zeile die darauf folgt auch(egal welche)

  • C:\Users\Andi\Desktop\EastWestReallife\gamemodes\EastWest.pwn(7072) : warning 206: redundant test: constant expression is non-zero
    C:\Users\Andi\Desktop\EastWestReallife\gamemodes\EastWest.pwn(7077) : warning 225: unreachable code




  • Aber dann hat man ja keine Schleife gestartet und ein break drin? Kommt ja dann auch zu Errors.


    Oder meinst du ich soll das in das andere von oben einfügen

    Einmal editiert, zuletzt von IceWave ()

  • bin eigentlich jetzt wieder wie am Anfang
    Hi, und zwar möchte ich machen, dass etwas zufällig ausgewählt wird:
    new rand = random(sizeof(Baeume));
    if(Baeume[rand][baumid_x]!=0)
    new Float:x,Float:y,Float:z;
    x = Baeume[rand][baum_x];
    y = Baeume[rand][baum_y];
    z = Baeume[rand][baum_z];


    Und zwar möchte ich wenn baumid_x nicht gleich 0 ist, dass ein neuer Randomwert gemacht wird, solange bis baumid_x gleich 0 ist

  • Haha :D
    Na dann:
    new rand = GetRandomBaum();
    if(rand == -1) return SendClientMessage(playerid, 0xFF0000FF, "Error: Kein Baum auszuwählen.");
    new Float:x,Float:y,Float:z;
    x = Baeume[rand][baum_x];
    y = Baeume[rand][baum_y];
    z = Baeume[rand][baum_z];


    Mit:
    stock GetRandomBaum()
    {
    new security;
    new rand = random(sizeof(Baeume));
    GRB_AGAIN:
    if(Baeume[rand][baumid_x] != 0)
    {
    rand++;
    if(rand >= sizeof(Baeume))
    {
    rand = 0;
    if(security >= 1)
    {
    return -1;
    }
    security++;
    }
    goto GRB_AGAIN;
    }
    return rand;
    }