random() gibt ständig 0 zurück!

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, wie der Threadname schon sagt gibt random() bei mir immer den Wert 0 zurück. Hier der Code:

    public OnPlayerCommandText(playerid, cmdtext[])
    {
    if (strcmp("/start", cmdtext, true, 10) == 0)
    {
    SetPlayerCheckpoint(...); //cp1
    return 1;
    }
    return 0;
    }


    public OnPlayerEnterCheckpoint(playerid)
    {
    zufall = random(2);
    return 1;
    }


    public OnPlayerLeaveCheckpoint(playerid)
    {
    if (zufall == 0) { SetPlayerCheckpoint( ...); } //cp2
    else if (zufall == 1) { SetPlayerCheckpoint( ...); } //cp3
    else if (zufall == 2) { SetPlayerCheckpoint( ...); } //cp4
    return 1;
    }

    Nachdem man /start eingegeben hat und man den 1. Checkpoint durchfahren hat, kommt der 2. Checkpoint. Wenn man den (auch wenn mehrmals) durchfährt, wird die Position des Checkpoints immer noch nicht geändert. Ist random() buggy oder liegt das an meinem Script? Das Script soll einfach nur bewirken, dass wenn man /start eingibt und den ersten Checkpoint durchfahren hat, man danach zufällige Checkpoints auf der Karte angezeigt bekommt und man diese abfahren soll.

  • Probiers mal so:


    public OnPlayerCommandText(playerid, cmdtext[])
    {
    new cp[MAX_PLAYERS];
    if (strcmp("/start", cmdtext, true, 10) == 0)
    {
    SetPlayerCheckpoint(...); //cp1
    cp[playerid] =1;
    return 1;
    }
    return 0;
    }


    public OnPlayerEnterCheckpoint(playerid)
    {
    if(cp==1)
    {
    SendClientMessage(playerid, COLOR_RED,"Du betrittst Checkpoint Nr. 1, weiter gehts per Zufall");


    }
    if(cp==2)
    {
    SendClientMessage(playerid, COLOR_RED,"Du betrittst Checkpoint Nr. 2, weiter gehts per Zufall");


    }
    if(cp==3)
    {
    SendClientMessage(playerid, COLOR_RED,"Du betrittst Checkpoint Nr. 3, weiter gehts per Zufall");


    }
    if(cp==4)
    {
    SendClientMessage(playerid, COLOR_RED,"Du betrittst Checkpoint Nr. 4, weiter gehts per Zufall");


    }
    zufall = random(2);
    cp[playerid]= random;
    return 1;
    }


    public OnPlayerLeaveCheckpoint(playerid)
    {
    if (zufall == 0) { SetPlayerCheckpoint( ...); } //cp2
    else if (zufall == 1) { SetPlayerCheckpoint( ...); } //cp3
    else if (zufall == 2) { SetPlayerCheckpoint( ...); } //cp4
    DisablePlayerCheckpoint(playerid);
    return 1;
    }

    ...

  • funktioniert das auch nicht, wenn man die Zufallsvaribale als global und statisch definiert?
    (static gZufall, alle "Zufall" Variablen durch "gZufall ersetzen)

    ICQ Scripting - Support 495961653
    Montags-Freitags ab 15 Uhr

  • Das 'g' ist doch völlig egal.Static brauch man ebenfalls nicht (nicht in dem fall).
    Die meisten benutzten 'g' am Anfang des Namen einer Variable um zu kennzeichnen das es ein Globale Variable ist,damit man so gesehen den Typ(nicht wirklich Typ) sieht am Namen der Variable.Ist etwas in der Art wie das hier.Da wird der Typ im Namen der Variable gekennzeichnet.
    Hungarian blabla


    public OnPlayerEnterCheckpoint(playerid)
    {
    zufall = random(3);
    printf("Debug Zufall: %d",zufall);
    DisablePlayerCheckpoint(playerid);
    return 1;
    }
    Du müsstest sowieso random(3) nehmen,da random(2) eine Zufallszahl nimmt zwischen 0 bis 1,nicht 2.
    Demnach gibt random(3) eine Zahl zwischen 0 und 2,nicht 3.
    random
    Versuch den Code mal,gut möglich das du vorher den Checkpoint verschwinden lassen musst.

    2 Mal editiert, zuletzt von Goldkiller ()