2 Zufalls-Probleme im /dm (Deathmath)

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
  • Mh. Du hast da etwas falsch verstanden.

    DMSpawn[0] = SetPlayerPos(playerid,1750.6611,767.7841,10.8279);
    DMSpawn[1] = SetPlayerPos(playerid,1637.4896,670.2835,10.8203);
    DMSpawn[2] = SetPlayerPos(playerid,1588.8384,720.9872,58.2375);
    DMSpawn[3] = SetPlayerPos(playerid,1663.5165,759.5008,19.9342);

    Das funktioniert leicher nicht so,wie du es möchtest.
    SetPlayerPos gibt dir nichts brauchbares zurück, was du später für dein random verwenden könntest.Das Gleiche gilt ebenfalls für SetPlayerColor. Auch würde er so die Spielerposition 4x setzen, was du bestimmt nicht möchtest.
    Du könntest dir die Koordinaten in einem Array ( Multidimensionales ) ablegen und dort über random auf einen Index zugreifen. Übrigens,dir hätte auffallen müssen,dass SetPlayerPos 4 Parameter erwartet ( playerid, X , Y, Z ).
    new
    fDMPos[][3] = { // X , Y, Z
    {1750.6611,767.7841,10.8279},
    {1637.4896,670.2835,10.8203},
    {1588.8384,720.9872,58.2375},
    {1663.5165,759.5008,19.9342}
    };
    Jetzt könntest du über random einen Index auswählen.
    new index = random(sizeof(fDMPos));
    Den zufälligen Index haben wir jetzt. Jetzt brauchen wir nur die Position setzen.
    SetPlayerPos(playerid, fDMPos[index][0] , fDMPos[index][1] , fDMPos[index][2] );
    Schon würde der Spieler immer eine zufällig ausgewählte Position erhalten.


    Nach diesem Prinzip solltest du es auch für die Farben machen. Natürlich dort kein Multidimensionales Array.
    new iColors[] = {0x000FFFFF,0x008500FF /* usw */};

  • RandomColor[0] = SetPlayerColor(playerid, 0x000FFFFF);
    RandomColor[1] = SetPlayerColor(playerid, 0x008500FF);
    RandomColor[2] = SetPlayerColor(playerid, 0xEBFF00FF);
    RandomColor[3] = SetPlayerColor(playerid, 0xFF00FFFF);
    RandomColor[4] = SetPlayerColor(playerid, 0x00A5FFFF);
    RandomColor[5] = SetPlayerColor(playerid, 0x55FF00FF);
    SetPlayerColor(playerid, RandomColor[random(6)]);
    So hab ich dir das bestimmt nicht gezeigt :D


    Entweder du machst es so:
    RandomColor[0] = 0x000FFFFF;
    RandomColor[1] = 0x008500FF;
    RandomColor[2] = 0xEBFF00FF;
    RandomColor[3] = 0xFF00FFFF;
    RandomColor[4] = 0x00A5FFFF;
    RandomColor[5] = 0x55FF00FF;
    SetPlayerColor(playerid, RandomColor[random(6)]);
    Oder so wie Goldkiller

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

    Margarete Stokowski

  • Also, ich habe jetzt ganz oben


    new fDMPos[][3] = {
    {1750.6611,767.7841,10.8279},
    {1637.4896,670.2835,10.8203},
    {1588.8384,720.9872,58.2375},
    {1663.5165,759.5008,19.9342}
    };
    new index = random(sizeof(fDMPos));


    und bei dem Befehl so


    if (strcmp("/dm",cmdtext,true, 3) == 0)
    {
    SetPlayerPos(playerid, fDMPos[index][0] , fDMPos[index][1] , fDMPos[index][2] );
    }

  • Zitat

    new index = random(sizeof(fDMPos));


    Das sollte eher noch mit in den Befehl ;)

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

    Margarete Stokowski

  • Hmm, hab ich auch schon probiert aber Pawno hängt sich immer auf.


    Spoiler anzeigen
    @SetPlayerColor: Ja das war ein wenig missverständlich weil du nur geschrieben hattest

    Zitat
    Spoiler anzeigen

    SetPlayerColor(playerid, RandomColor[random(7)]);



    So sollte es funktionieren

    Spoiler anzeigen
    aber nicht das ich noch RandomColor[5] = SetPlayerColor(playerid, 0x55FF00FF); umändern muss :) Trotzdem danke :D


    Edit: Wenn das im Befehl mit drin steht bekomme ich -> warning 213: tag mismatch. 3 Warnings pro Zeile. Die Zeilen sind die:


    new fDMPos[][3] = {
    {1750.6611,767.7841,10.8279},//Die
    {1637.4896,670.2835,10.8203},//Die
    {1588.8384,720.9872,58.2375},//Die
    {1663.5165,759.5008,19.9342}//& die
    };

    Einmal editiert, zuletzt von |»Timmeyable«| ()

  • Du musst das dann auch als Float deklarieren
    new Float:fDMPos[][3] = {
    {1750.6611,767.7841,10.8279},//Die
    {1637.4896,670.2835,10.8203},//Die
    {1588.8384,720.9872,58.2375},//Die
    {1663.5165,759.5008,19.9342}//& die
    };

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

    Margarete Stokowski

  • Danke, das funktioniert.


    Habe noch 2 Probleme festgestellt.


    1.


    Der Spieler sieht seinen Gegenspieler immer an der selben Stelle stehen. Mann kann wie wild auf seinen Gegenspieler schießen aber es passiert nichts. Er bleibt immer am Spawnpunkt stehen (auch wenn er sich bei ihm bewegt).
    Woran kann das liegen? Vil an SetPlayerVirtualWorld(playerid,5);?


    2.


    Wenn man stirbt soll man wieder im Dm-Bereich spawnen. Das Ganze sieht bisher so aus:


    public OnPlayerSpawn(playerid)
    {
    if(GetPVarInt(playerid, "PlayerInDm") == 1)
    {
    new index = random(sizeof(fDMPos));
    SetPlayerPos(playerid, fDMPos[index][0] , fDMPos[index][1] , fDMPos[index][2] );
    }
    return 1;
    }


    Leider funktioniert es nicht. Weiß jemand einen Rat?


    Tim

  • Ja


    if (strcmp("/dm",cmdtext,true, 3) == 0)
    {
    if(GetPVarInt(playerid, "PlayerInDm") == 0)
    {
    SetPVarInt(playerid, "PlayerInDm", 1);

    Einmal editiert, zuletzt von |»Timmeyable«| ()