[Problem] ~ Random aus Array | Zwei OCMD-Befehle sollen sich Werte austauschen~

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
  • Ich mach mich zwar wieder zur Nudel, wenn ich das frage, aber naja.. :)
    Mein Problem ist folgendes:
    Ich bin gerade an einem TruckerJob dran.
    Mit /arbeiten soll man einen Punkt zum Aufladen zugewiesen bekommen.
    Mit /aufladen soll man an diesem Punkt seine Ware aufnehmen. Es soll ein Checkpoint erscheinen (Ablieferpunkt),
    von welchem die Koordinaten schon bei /arbeiten "heimlich" ausgewählt wurden (also ein 2. Random).
    Mit /abladen soll man dann an dem Checkpoint (der mit den "heimlichen" Koordinaten :D) abliefern können.


    Ich weiß, dass das über Random geht. Dennoch bekomme ich es nicht hin!
    Die SuFu benutzt habe ich, aber auch nix nützliches gefunden.


    Das Hauptproblem:
    In einem OCMD-Befehl wird ein Random erzeugt. Wie bekomme ich diese von Zufall erzeugten Werte (Zufall aus Array) nun in einen anderen OCMD-Befehl?

    Ich habe versucht, den Float in eine [MAX_PLAYERS]-Variable zu speichern und im anderen Befehl wieder auszulesen. Dies hat aber nicht funktioniert!


    Ich bitte euch, falls ihr einen Vorschlag, eine Idee oder sogar eine Lösung habt, dies hier zu posten :thumbup:
    Ich komme hier nämlich nicht mehr mit.


    Mit freundlichen Grüßen
    [GP]Saitek | Timo


    Du hast Probleme beim Programmieren oder mit deinem PC?
    Registriere Dich doch auf PC-Rat-Hilfeforum.de.
    Nach dem Registrieren musst du nur deine E-Mail-Adresse bestätigen,
    dann kann es auch schon losgehen. Also worauf wartest du?


    Erreichbar unter folgender E-Mail-Adresse
    support@pc-rat-hilfeforum.de

  • Ich habe versucht, den Float in eine [MAX_PLAYERS]-Variable zu speichern und im anderen Befehl wieder auszulesen. Dies hat aber nicht funktioniert!

    Das auslesen Funktoniert immer du brauchst aber keinen float wozu auch? einfach einen intenger per random setzen und dan abfragen if(wert[playerid] == 1){ bla bla}else if(wert[playerid] == 2){bla bla u.s.w}

  • Ich steh hier total aufm Schlauch!
    Ich habe 3 [MAX_PLAYERS]-Variablen im Script gehabt.
    xau (X-Position zum Aufladen)
    yau (Y-Position zum Aufladen)
    zau (Z-Position zum Aufladen)


    also:



    new xau[MAX_PLAYERS];
    new yau[MAX_PLAYERS];
    new zau[MAX_PLAYERS];


    //(ich habs zu Testzwecken nur mit einer Koordinate gemacht)
    new Float:aufladepunkte[1][3] = {
    {1249.0630,-1257.2458,13.5621}
    };


    ocmd:arbeiten(playerid,params[])
    {
    new Randomaufladen = random(sizeof(aufladepunkte));
    Randomaufladen = SetPlayerCheckpoint(playerid,aufladepunkte[Randomaufladen][0],aufladepunkte[Randomaufladen][1],aufladepunkte[Randomaufladen][2], 15.0);
    xau[playerid] += aufladepunkte[Randomaufladen][0];
    yau[playerid] += aufladepunkte[Randomaufladen][1];
    zau[playerid] += aufladepunkte[Randomaufladen][2];
    return 1;
    }


    ocmd:blabla(playerid,params[])
    {
    if(IsPlayerInRangeOfPoint(playerid,15.0,xau[playerid],yau[playerid],zau[playerid]))
    {
    //Das soll passieren, wenn er dort ist
    }
    else
    {
    //Das soll passieren, wenn er nicht dort ist
    }
    }


    Genau so..? So funktioniert es bei mir nicht ;)
    Und warum? Richtig.. Weil ich keine Float-Werte in eine Integer-Variable schreiben kann.
    Und wie soll ich die jetzt so hinstellen, dass ich von überall außem Script drauf zugreife?
    Der OCMD-Befehl ist ja n abgeschlossener Bereich, wenn man so möchte.


    Mit freundlichen Grüßen
    [GP]Saitek | Timo


    Du hast Probleme beim Programmieren oder mit deinem PC?
    Registriere Dich doch auf PC-Rat-Hilfeforum.de.
    Nach dem Registrieren musst du nur deine E-Mail-Adresse bestätigen,
    dann kann es auch schon losgehen. Also worauf wartest du?


    Erreichbar unter folgender E-Mail-Adresse
    support@pc-rat-hilfeforum.de

    Einmal editiert, zuletzt von [GP]Saitek ()

  • Du machst das ziemlich kompliziert ^^
    es reicht ein array


    new NextPositon[MAX_PLAYERS char];


    ocmd:arbeiten(playerid,params[])
    {
    NextPositon{playerid} = random(sizeof(aufladepunkte));
    Randomaufladen = SetPlayerCheckpoint(playerid,aufladepunkte[NextPositon{playerid}][0],aufladepunkte[NextPositon{playerid}][1],aufladepunkte[NextPositon{playerid}][2], 15.0);
    return 1;
    }


    ocmd:blabla(playerid,params[])
    {
    if(!IsPlayerInRangeOfPoint(playerid,15.0,aufladepunkte[NextPositon{playerid}][0],aufladepunkte[NextPositon{playerid}][1],aufladepunkte[NextPositon{playerid}][2]))return SendClientMessage(playerid,-1,"Du bist nicht an dem jeweiligen Punkt");
    }


    //edit


    Bei dir solltest du schon den deklarierten Variabeln ihren Typ zuweisen daher
    new Float:xau[MAX_PLAYERS];
    new Float:yau[MAX_PLAYERS];
    newFloat: zau[MAX_PLAYERS];


    und bitte niemals in dem Fall addieren sondern gleich setzen

  • Passt &' Funktioniert,
    ich bedanke mich :)


    Mit freundlichen Grüßen
    [GP]Saitek | Timo


    PS: Ich mach nichtnur am PC alles Umständlich, sondern auch inner Schule :D


    Du hast Probleme beim Programmieren oder mit deinem PC?
    Registriere Dich doch auf PC-Rat-Hilfeforum.de.
    Nach dem Registrieren musst du nur deine E-Mail-Adresse bestätigen,
    dann kann es auch schon losgehen. Also worauf wartest du?


    Erreichbar unter folgender E-Mail-Adresse
    support@pc-rat-hilfeforum.de