Wie kann ich das fertig scripten?

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 Brotfische,
    ich bin gerade dabei für meinen SA-MP B.A.S.E. Jump Server eine dynamisches System zu schreiben wie folgt:
    Wenn ein Spieler /drop eingibt wird er 200 Meter hoch in die Luft teleportiert und gefreezt. Nun wird eine Nachricht im Chat erscheinen, die auffordert auch /drop einzugeben, um mitzumachen. Ein 20 Sekunden Timer wird gestartet. Wenn nun ein 2. Spieler /drop eingibt wird er genau 0.5 Meter unter dem ersten Spieler teleportiert und gefreezt. Ein weiterer Spieler wird wieder 0.5 Meter unter dem 2. gefreezt usw. Wenn der 20 Sekunden Timer abgelaufen ist werden alle Spieler, die in den 20 Sekunden /drop eingegeben haben entfreezt und der B.A.S.E. Jump beginnt. Wenn nun eine weiterer Spieler /drop eingibt geht alles von Vorne los....


    Achja, und natürlich will ich auch noch verhindern, dass ein Spieler 2 mal /drop in den 20 Sekunden eingeben kann.


    Hier ist nun der Code den ich schon geschrieben habe. Nun weiß ich aber nicht mehr weiter, wie ich das Script vervollständigen kann.


    forward DropTimer();


    new Float:dropX;
    new Float:dropY;
    new Float:dropZ;


    if(strcmp(cmdtext,"/drop",true)==0)
    {
    //wenn er der erste spieler ist der /drop macht
    GetPlayerPos(playerid,Float:dropX,Float:dropY,Float:dropZ);
    SetPlayerPos(playerid,Float:dropX,Float:dropY,Float:dropZ+200);
    SetTimerEx("DropTimer", 20000, false,"i",playerid);
    new pName[MAX_PLAYER_NAME];
    new string[128];
    GetPlayerName(playerid,pName,sizeof(pName));
    format(string,sizeof(string),"Server: %s (%d) created a drop. Join the drop! (/)",pName,playerid);
    SendClientMessageToAll(orange,string);
    SendClientMessageToAll(orange,"Server: The drop will release the players in 20 seconds.");
    TogglePlayerControllable(playerid,false);
    //wenn er als 2. 3. 4. ...... 1020202. /drop macht soll er auch gefreezt werden aber von der position her immer 0.5 weniger hoch teleportiert werden
    return 1;
    }


    public DropTimer()
    {
    //Hier sollen die Spieler die /drop eingegeben haben (innerhalb der 20sec) entfreezt werden
    return 1;
    }


    Mit freundlichen Grüßen,


    Skyfreak

  • Du solltest die Koordinaten in Variablen speichern damit andere Spieler sie auch abrufen können.
    Dann noch eine Globale Variable welche du auf 1 setzt sobald /drop gemacht wurde damit man diese nicht 2 mal hintereinander tätigen kann.


    //edit


    Also circa :

    if(strcmp(cmdtext,"/drop",true)==0)
    {
    if(GlobaleAbfrage == 0)
    {
    //wenn er der erste spieler ist der /drop macht
    GetPlayerPos(playerid,Float:dropX,Float:dropY,Float:dropZ);
    SetPlayerPos(playerid,Float:dropX,Float:dropY,Float:dropZ+200);
    SetTimerEx("DropTimer", 20000, false,"i",playerid);
    new pName[MAX_PLAYER_NAME];
    new string[128];
    GetPlayerName(playerid,pName,sizeof(pName));
    format(string,sizeof(string),"Server: %s (%d) created a drop. Join the drop! (/)",pName,playerid);
    SendClientMessageToAll(orange,string);
    SendClientMessageToAll(orange,"Server: The drop will release the players in 20 seconds.");
    TogglePlayerControllable(playerid,false);
    //wenn er als 2. 3. 4. ...... 1020202. /drop macht soll er auch gefreezt werden aber von der position her immer 0.5 weniger hoch teleportiert werden
    return 1;
    }
    else if(GlobaleAbfrage == 1)
    {
    //hier die 2. 3. 4. Spieler rien machen wenn diese /drop machen.
    // und einfach die Variable runtersetzen.
    }
    }

    MFG

  • Beim Timer eine Schleife
    und da alle Speiler welche im Drop sind, da könntest du beim /drop befehl eine Player Variable einfügen wenn diese auf 1 ist lässt du sie unfreezen



    Grober Code :

    SpielerSchleife
    {
    if(dropplayer[i] == 1)
    {
    TogglePlayerControllable(i,0);
    }
    }

    MFG

  • Okay ich habe nun alles verstanden und geschrieben. Eines verstehe ich aber noch nicht:


    Ich will ja, dass der Spieler auf 200.0 meter teleportiert wird, der zweite auf 199.5, der dritte auf 199.0.....
    Wie setze ich es um, dass mit jedem Ausführen von /drop immer 0.5 abgezogen wird?


    Gruß Sky ;)