Wie erstelle ich einen Countdown?

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
  • Guten Tag zusammen,


    heute zeige ich euch wie ihr einen Countdownbefehl + Funktion erstellen könnt. Das ganze benötigt Kenntnisse in

    • Pawn
    • Timern
    • Befehlerstellung


    Na gut dann fangen wir mal an:


    Zuerst müsst ihr im Script die forwards erstellen.Der Countdown soll von 4-1 gehen und danach LOS kommen
    forward CD4();// Für die erste Zahl die nach der Befehls eingabe erscheint
    forward CD3();// Für die zweite Zahl
    forward CD2(); // Für die Dritte Zahl
    forward CD1();// Für die vierte Zahl
    forward CDLos();// Für das LOS LOS LOS


    Dann müssen wir erstmal den Befehl erstellen.
    if(strcmp("/countdown",cmdtext,true) == 0)
    Jetzt haben wir schonmal das was man eingeben muss. Jetzt kommt das was dann ausgeführt wird
    {
    if (IsPlayerAdmin(playerid))// Frag ab ob der User Rcon Admin ist
    {
    SetTimer("CD4",1000,0);// Setzt den ersten Timer in Bewegung, das passiert nur wenn der User Rcon admin ist
    #error Das ist kein Copy & Past Tutorial
    }
    else SendClientMessage(playerid,COLOR_GRAD1,"* Du bist kein Administrator!");// Wenn der User kein Rcon Admin ist kommt das
    return 1;
    }
    Jetzt müssen wir die Publics erstellen für die Timer
    public CD4()
    {
    GameTextForAll("4",1000,3);// Zeigt allen Usern die Zahl 4
    SetTimer("CD3",1000/*1000 mili sec = 1 sec*/,0);// startet den Timer CD3
    return 1;
    #error Das ist kein Copy & Past Tutorial
    }
    public CD3()
    {
    GameTextForAll("3",1000,3);// Zeigt allen Usern die Zahl 3
    SetTimer("CD2",1000,0);// startet den Timer CD2
    return 1;
    #error Das ist kein Copy & Past Tutorial
    }
    public CD2()
    {
    GameTextForAll("2",1000,3); //Zeigt allen Usern die Zahl 2
    SetTimer("CD1",1000,0);// startet den Timer CD1
    return 1;
    #error Das ist kein Copy & Past Tutorial
    }
    public CD1()
    {
    GameTextForAll("1",1000,3); //Zeigt allen Usern die Zahl 1
    SetTimer("CDLos",1000,0);// startet den Timer CDLos
    return 1;
    #error Das ist kein Copy & Past Tutorial
    }
    public CDLos()
    {
    GameTextForAll("~g~] ! LOS LOS LOS ! ]",1000,3);// Zeigt allen Usern " LOS LOS LOS!"
    return 1;
    #error Das ist kein Copy & Past Tutorial
    }


    Erweiterung
    Jetzt kommt noch eine Erweiterung. Undzwar ein Countdown, dem ein GMX folgt.(wenn man beides im Script einbaut sollte man diesen Countdown über einen anderen Befehl steuern!)
    Alle schritte bleiben wie oben gleich. Nur das wir beim Letzten Timer folgendes Ändern.
    public CDLos()
    {
    GameTextForAll("~g~] ! GMX! ]",1000,3);// Zeigt allen Usern " GMX!"
    /* jetzt kommt hier die Funktion des Server Restarts.Das machen wir via Rcon Command.*/
    SendRconCommand("gmx");
    return 1;
    #error Das ist kein Copy & Past Tutorial
    }


    Wenn man jetzt den Befehl ein gibt wird nach dem Countdown ein GMX (Gamemoderestart) durchgeführt.


    Ich weiß es ist eher ein Copy & Past Tutorial. Allerdings sollte es so wie es jetzt ist 6 Errors geben. Wenn man genau hinguckt sollte man die Fehler finden... die Fehler sind ja schließlich alle gleich...Wenn ihr Erros habt guckt euch den Satz vorher an ;)


    Ich hoffe das Tuto hat euch gefallen.


    Mit freundlichen Grüßen


    Edit: eine Erweiterung eingefügt
    Edit: Fehler behoben
    Edit3: zufrüh auf absenden -.-


    Edit4:



    Edit5: if (IsPlayerAdmin(playerid)) ist richtig danke BlackAce...

    Mit freundlichen Grüßen
    Developer
    Go/Python Developer | ehm. Webdeveloper | Fachinformatiker Anwendungsentwicklung
    Arbeitet in einem cloudigen Umfeld bei einem der größten deutschen Rechenzentrumsbetreibern

    6 Mal editiert, zuletzt von Developer ()

  • Das ganze geht auch mit einer Globalen Variable die runterzählt.
    1. Ist das viel einfaher und kürzer
    und 2. kannst du dir denn Countdown aussuchen wie lange der runterzählt.
    Mit freundlichen Grüßen
    Sven


    Bewerte mich und meine Transaktionen als Mittelsmann

  • Das Gefällt mir :))
    "#error Das ist kein Copy & Past Tutorial"


    ja ist halt zur Vorbeugung der C & P Nutzung


    Nix besonders aber naja gut erklärt ...
    7/10


    vielen Dank


    edit:gleich kommt noch eine kleine Erweiterung dazu

    Mit freundlichen Grüßen
    Developer
    Go/Python Developer | ehm. Webdeveloper | Fachinformatiker Anwendungsentwicklung
    Arbeitet in einem cloudigen Umfeld bei einem der größten deutschen Rechenzentrumsbetreibern

  • ich finde es gut! 10/10 müsste man immer machen denn wenn leute ein tutorial habe nun dann nach einem fs fragen :pinch: nervt sehr

  • danke :.RyLo.:


    im ersten Post ist nun eine Erweiterung geschrieben.

    Mit freundlichen Grüßen
    Developer
    Go/Python Developer | ehm. Webdeveloper | Fachinformatiker Anwendungsentwicklung
    Arbeitet in einem cloudigen Umfeld bei einem der größten deutschen Rechenzentrumsbetreibern

  • Das gleiche hab ich ja in meinem GF stehen ^^
    5/10

  • Nettes Tutorial, Recht übersichtlich und Funktioniert !!
    8/10 !!

  • Nettes Tutorial, Recht übersichtlich und Funktioniert !!
    8/10 !!


    vielen dank Cash0r
    edit: oben nun auch die Download Links

    Mit freundlichen Grüßen
    Developer
    Go/Python Developer | ehm. Webdeveloper | Fachinformatiker Anwendungsentwicklung
    Arbeitet in einem cloudigen Umfeld bei einem der größten deutschen Rechenzentrumsbetreibern

  • Verdammt komplizierte Methode, aber wer's braucht. ;)


    Mit freundlichem Grüßen aus Berlin,
    Vincent P.


    also ich finde diese Methode für Anfänger einfacherer

    Mit freundlichen Grüßen
    Developer
    Go/Python Developer | ehm. Webdeveloper | Fachinformatiker Anwendungsentwicklung
    Arbeitet in einem cloudigen Umfeld bei einem der größten deutschen Rechenzentrumsbetreibern

  • Wieso machst du nicht mal einen Player seitigen Countdown?

  • Schön das es zur Vorbeugung dienen soll.
    Aber was ist, wenn es ein Anfängern Lernen, will und du denn sonst Quatsch reinbaust ?


    7/10

  • if (PlayerIsAdmin)// Frag ab ob der User Rcon Admin ist
    War das absicht oder ist das einfach nur fail?

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

    Margarete Stokowski

  • ups...ja das war fail...nun isses richtig

    Mit freundlichen Grüßen
    Developer
    Go/Python Developer | ehm. Webdeveloper | Fachinformatiker Anwendungsentwicklung
    Arbeitet in einem cloudigen Umfeld bei einem der größten deutschen Rechenzentrumsbetreibern

  • ups...ja das war fail...nun isses richtig


    Immer noch falsch ;)

    Wer ist der Mensch hinter der Uniform? Ist euch das bekannt?
    Es ist der selbe der noch eben in Zivil neben euch stand.
    Warum wird er gehasst und so selten respektiert?
    Warum ist er derjenige der seinen Hals für euch riskiert?
    Trägt der Bulle eine Weste, das hat er früher nie gemacht,
    die Zeiten haben sich geändert und jeder Dienst ist ein Kampf!
    Warum gibt’s das SEK und warum sind sie so brutal?
    Und wieso hat wieder einer mit seinem Leben bezahlt?

  • Für 4 Sekunden ist dieser Countdown nützlich, aber wenn man doch mal einen Countdown mit 200 Sekunden starten möchte, ist dieser absolut nutzlos.
    Zum Tut: Copy & Paste....


    Mach lieber ein Countdown der immer Wiederholt wird, wo immer -1 gerechnet wird.


    Zum Beispiel so:
    new CountdownT;
    dcmd_countdown(playerid, params[])
    {
    if(sscanf(params,"i", sec))
    {
    return SendClientMessage(playerid, GRAU, "Befehl: /countdown [Sekunden]");
    }
    new sec;
    CountdownT = SetTimerEx("Countdown", 1000, 1, "i", sec);
    }

    forward Countdown(sec);


    new CountSek = -1;


    public Countdown(sec)
    {
    if(CountSek == -1)
    {
    CountSek = sec;
    }
    if(CountSek == 0)
    {
    GameTextForAll("~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~g~~h~~h~Los! Los! Los!", 3000, 3);
    KillTimer(CountdownT);
    CountSek = -1;
    }
    else
    {
    new cstr[50];
    format(cstr, sizeof(cstr),"~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~w~%i", CountSek);
    GameTextForAll(cstr, 2000, 3);
    CountSek--;
    }
    }
    5/10


    MfG