Beiträge von Jeffry

    Dann sollte man vorher noch nen Spawn definieren....

    Das ändert trotzdem nichts, denn der Spieler ist dann ja schon gespawnt, laut Anforderung soll nur der Spawn Button entfernt werden, der Spieler aber nicht automatisch gespawnt werden.
    Das geht mit SetSpawnInfo und TogglePlayerSpectating am einfachsten.
    Spawn balken weg bekommen.



    Aber egal, solange sich der TE nicht meldet.

    Hat er doch schon, das Thema ist schon lange durch. Er hat seinen Like (=Danke) an Rocky Balboa gegeben. Damit hat sich die Sache.

    Wenn du unter OnPlayerConnect & OnPlayerRequestClass folgendes einfügst, wird der "Spawn-Dialog" automatisch terminiert

    Das startet nur einen Timer. Wenn das public "login_dialog" nicht definiert ist, bringt das gar nichts, der Timer läuft dann ins Leere.

    Hast du noch einen anderen Command Prozessor im Code, außer ocmd?


    Setze bitte mal einen Print direkt als erstes vor die erste if-Abfrage im Befehl.
    Wird diese im Server Log angezeigt? Wenn nein, dann wird der Befehl gar nicht aufgerufen, das heißt er wird durch irgendetwas anderes (z.B. einen anderen Command Prozessor) blockiert.

    Die Spieler, die auf die anderen Sitze verteilt werden sollten, werden nicht in die Fahrzeuge gesetzt.

    Stimmt, der Wert von dem der Random-Wert genommen wird, läuft dann ins negative.
    Versuche es so:
    new string[128], count, rand, bool:used[sizeof(RoundCars)], seat = 0;
    for(new i=0;i<MAX_PLAYERS;i++)
    {
    if(GetPVarInt(i,"JointInRunde") == 1 && IsPlayerConnected(i))
    {
    rand = random(sizeof(RoundCars) - count);
    for(new j = 0; j < sizeof(used); j++)
    {
    if(!used[j])
    {
    if(rand == 0)
    {
    if(seat == 0) RoundCars[j][carID] = CreateVehicle(RoundCars[j][carModel],RoundCars[j][X],RoundCars[j][Y],RoundCars[j][Z],RoundCars[j][R],RoundCars[j][color1],RoundCars[j][color2],0);
    PutPlayerInVehicle(i,RoundCars[j][carID],seat);
    format(string,sizeof(string),"[DEBUG] Fahrzeug: %i, PlayerID: %i, SpielerInRunde: %i",j,i,SpielerInRunde);
    SendClientMessageToAll(-1,string);
    used[j] = true;
    count++;
    if(count >= sizeof(RoundCars))
    {
    count = 0;
    seat++;
    for(new u = 0; u < sizeof(used); u++) used[u] = false;
    }
    break;
    }
    else
    {
    rand--;
    }
    }
    }
    }
    }

    Sprich, wenn mehr Spieler als Fahrzeuge existieren, würden diese die anderen Spieler aus dem Fahrzeug werfen.

    Diese würden dann kein Fahrzeug bekommen, da used = true ist.



    Wie kann ich es am besten machen das die Spieler die in die Fahrzeuge gesetzt werden wenn schon jemand anderes im Fahrzeug sitzt auf einen anderen Platz gesetzt werden?

    Versuche es mal so:
    new string[128], count, rand, bool:used[sizeof(RoundCars)], placed, seat = 0;
    for(new i=0;i<MAX_PLAYERS;i++)
    {
    if(GetPVarInt(i,"JointInRunde") == 1 && IsPlayerConnected(i))
    {
    rand = random(sizeof(RoundCars) - count);
    for(new j = 0; j < sizeof(used); j++)
    {
    if(!used[j])
    {
    if(rand == 0)
    {
    if(seat == 0) RoundCars[j][carID] = CreateVehicle(RoundCars[j][carModel],RoundCars[j][X],RoundCars[j][Y],RoundCars[j][Z],RoundCars[j][R],RoundCars[j][color1],RoundCars[j][color2],0);
    PutPlayerInVehicle(i,RoundCars[j][carID],seat);
    format(string,sizeof(string),"[DEBUG] Fahrzeug: %i, PlayerID: %i, SpielerInRunde: %i, Seat: %i",j,i,SpielerInRunde, seat);
    SendClientMessageToAll(-1,string);
    used[j] = true;
    count++;
    placed++;
    if(placed >= sizeof(RoundCars))
    {
    placed = 0;
    seat++;
    for(new u = 0; u < sizeof(used); u++) used[u] = false;
    }
    break;
    }
    else
    {
    rand--;
    }
    }
    }
    }
    }
    Das heißt, sobald alle Fahrzeuge vergeben sind, zählt der Sitz-Zähler um eins hoch und setzt die restlichen Spieler random auf Sitz 1, solange bis alle Sitz 1 Plätze voll sind, das gleiche dann für Platz 2, etc.


    Und nochmal:
    Bitte keine Voll-Zitate von Posts, das macht doch keinen Sinn! Zumal der Post direkt drüber steht. Das macht das Lesen nur absolut unübersichtlich.

    Mit Floats hatte ich auch schon mehrfach Probleme, das kann immer mal vorkommen.
    Noch eine Alternative wäre dann eventuell:
    if(0.99 < collected[playerid] < 1.01)

    Aktuell kommt es vor das ein Spieler 3-4 mal hintereinander das selbe Fahrzeug bekommt. @Jeffry

    rand = random(SpielerInRunde - count);
    zu:
    rand = random(sizeof(RoundCars) - count);


    Ist halt nicht passend, wenn die Fahrzeuge hintereinander stehen. Falls wild durcheinander, dann geht das so und es ist viel zufälliger bei geringen Spielerzahlen.

    Normalerweise sollte es mit einer normalen Abfrage == 1.0 klappen.
    Falls nicht, wäre die Alternative eventuell so zu versuchen:
    format(string2, sizeof(string2), "%.1f%%",collected[playerid]);
    format(string3, sizeof(string3), "1.0%%");
    if(!strcmp(string2, string3))
    {
    //1.0
    }


    Wichtig ist das "%%", sonst bekommst du das nicht als "%" angezeigt. Das muss natürlich dann auch so mit abgefragt werden.

    ShowPlayerDialog(DIALOG_REGISTER),DIALOG_STYLE_PASSWORD,"Neuanfang","Herzlich Willkommen auf GRG server Bitte gebe dein gewünchtes password ein.","Weiter","Abrechen");
    zu:
    ShowPlayerDialog(playerid, DIALOG_REGISTER,DIALOG_STYLE_PASSWORD,"Neuanfang","Herzlich Willkommen auf GRG server Bitte gebe dein gewünchtes password ein.","Weiter","Abrechen");


    ShowPlayerDialog(DIALOG_REGISTER),DIALOG_STYLE_PASSWORD,"Einloggen","Herzlich Willkommen Zurück auf GRG server Bitte gebe dein gewünchtes password ein.","Weiter","Abrechen");
    zu:
    ShowPlayerDialog(playerid, DIALOG_REGISTER,DIALOG_STYLE_PASSWORD,"Einloggen","Herzlich Willkommen Zurück auf GRG server Bitte gebe dein gewünchtes password ein.","Weiter","Abrechen");



    TogglePlayerSpectating(playerid,1);
    Um ein Leerzeichen auf die gleiche Höhe wie ClearChat(playerid); setzen, sprich:
    ClearChat(playerid);
    TogglePlayerSpectating(playerid,1);
    zu:
    ClearChat(playerid);
    TogglePlayerSpectating(playerid,1);

    Hey, wie bekomme ich es hin das bei der random Funktion jeder Wert nur einmal rauskommen kann.

    new string[128], count, rand, bool:used[sizeof(RoundCars)];
    for(new i=0;i<MAX_PLAYERS;i++)
    {
    if(GetPVarInt(i,"JointInRunde") == 1 && IsPlayerConnected(i))
    {
    rand = random(SpielerInRunde - count);
    for(new j = 0; j < sizeof(used); j++)
    {
    if(!used[j])
    {
    if(rand == 0)
    {
    RoundCars[j][carID] = CreateVehicle(RoundCars[j][carModel],RoundCars[j][X],RoundCars[j][Y],RoundCars[j][Z],RoundCars[j][R],RoundCars[j][color1],RoundCars[j][color2],0);
    PutPlayerInVehicle(i,RoundCars[j][carID],0);
    format(string,sizeof(string),"[DEBUG] Fahrzeug: %i, PlayerID: %i, SpielerInRunde: %i",j,i,SpielerInRunde);
    SendClientMessageToAll(-1,string);
    count++;
    used[j] = true;
    break;
    }
    else
    {
    rand--;
    }
    }
    }
    }
    }


    Was macht der Code?
    Er gibt einen Random Wert aus, für die noch übrige Anzahl an Spieler, die noch kein Fahrzeug erhalten haben. Das heißt, mit jedem Durchlauf einer weniger, da ja auch ein Fahrzeug weniger zur Verfügung steht.
    Anschließend nimmt der das x-te freie Auto, welches entsprechend dem Random-Wert gefunden wurde. Heißt, wenn random 3 ist, dann nimmt er das vierte freie Auto in der Liste.
    Somit kommt kein Auto zwei mal dran.

    cache_get_value_name_string ?

    Nur:
    cache_get_value_name
    http://wiki.sa-mp.com/wiki/MySQL/R40#cache_get_value_name



    Und kann mir noch jemand sagen wie man die Auto inkrementierung bei 0 beginnen lassen kann?

    https://stackoverflow.com/ques…-from-0-but-starts-from-1


    Allerdings solltest du eher darauf verzichten, die Zeilen mit 0 zu beginnen.
    Besser wäre es, den AUTO_INCREMENT Wert trotzdem auf 1+ zu lassen, und parallel dazu eine zweite Spalte zu erstellen, die dann den AUTO_INCREMENT Wert -1 bekommt.
    Somit wäre dann 1 -> 0, 2 -> 1, 3 -> 2, etc...
    Oder eben von 1 beginnen zu zählen, das wäre die beste Möglichkeit.