Timer einstellen

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,


    Ich habe nicht besonders viel Ahnung vom Scripten, allerdings wollte ich mal etwas ausprobieren.
    Ich bin Momentan soweit, damit wenn ich InGame eingebe /sn oder /serverneustart damit im Chat für alle online User sichtbar im Chat erscheint:
    Serverneustart in drei Minuten!
    Serverneustart in zwei Minuten!
    Serverneustart in einer Minute!
    !Serverneustart!
    !Serverneustart!
    !Serverneustart!


    Und damit dieser Befehl auch nur für Ingame Admins funktioniert geht auch, soltle man kein Admin sein so erscheint in Rot eine Nachricht bei dem jenigen "Du bist kein Admin!"


    Das Problem ist allerdings, damit zwischen der drei Minuten Meldung und der zwei Minuten Meldung und der eine Minuten Meldung sowie auch die !Serverneustart! Meldung kein Minuten Timer ist, d.h. es kommen alle Meldungen zur gleichen Zeit, ich habe schon ein bisschen probiert komme aber trotz einigen versuchen nicht weiter.


    Ist vielleicht garnicht so schwer, aber für jemanden der zum ersten mal pawno geöffnet hat vielleicht verständlich :D


    Würde euch ja zeigen wie es Momentan aussieht, nur wenn ich probiere hier etwas einzufügen schmeißt der alles auf eine Zeile :D


    Ich danke schonmal für Hilfe


    MFG
    ChroniX

  • forward timer1();
    forward timer2();
    forward timer3();


    // Hier Command-Einleitung
    if(IsPlayerAdmin(playerid))
    {
    SetTimer(timer1, 6000, 0);
    SendClientMessageToAll(COLOR_ORANGE,"Serverneustart in 3 Minuten");
    }
    else SendClientMessage(playerid,COLOR_RED,"Du bist kein Admin.");


    public timer1()
    {
    SendClientMessageToAll(COLOR_ORANGE,"Serverneustart in 2 Minuten");
    SetTimer(timer2, 6000, 0);
    return 1;
    }


    public timer2()
    {
    SendClientMessageToAll(COLOR_ORANGE,"Serverneustart in 1 Minute");
    SetTimer(timer3, 6000, 0);
    return 1;
    }


    public timer3()
    {
    SendClientMessageToAll(COLOR_ORANGE,"Server startet neu.");
    SendRconCommand("gmx");
    return 1;
    }

    Alternativ könntest du den Timer auch repeaten lassen und mit einem Integer überprüfen wie oft er schon abgelaufen ist.


    Ich hoffe das hat dir ansatzweise geholfen ;)


    Mit freundl. Grüßen
    Padarom

    Ich bin
    .. seit etwa 2007 in der Webentwicklung tätig, seit 2013 professionell
    .. Erfahrener Entwickler in PHP, Swift, Javascript, Typescript und Ruby. Zusätzlich habe ich Erfahrung in Python, Java, C#, C++, Prolog und einigen esoterischen Programmiersprachen
    .. Luftfahrtenthusiast und Segelflieger

    2 Mal editiert, zuletzt von Padarom ()

  • Ehm ich suche aber um genau zu sein nach dem was ich zwischen diese meldungen machen muss damit dieser eine minuten timer kommt, ich weiß nicth mit welchem "Befehl" ich das mache ich hab es mit SetTimer(60000,60); probiert gehabt, hatte aber nciht so geklappt wie ich es wollte ^^

  • Hab meinen Beitrag nochmal editiert. In etwa so sollte es eigentlich auch klappen.


    Mit freundlichen Grüßen
    Padarom

    Ich bin
    .. seit etwa 2007 in der Webentwicklung tätig, seit 2013 professionell
    .. Erfahrener Entwickler in PHP, Swift, Javascript, Typescript und Ruby. Zusätzlich habe ich Erfahrung in Python, Java, C#, C++, Prolog und einigen esoterischen Programmiersprachen
    .. Luftfahrtenthusiast und Segelflieger

  • Wenn ich das so übernehme dann bekomme ich auf einmal 26 Errors von irgendwelchen Sachen die damit eig. garnichts zu tun haben die aber nur aufkommen wenn ichd as drinne habe:
    C:\Dokumente und Einstellungen\Administrator\Desktop\SA-MP Server\pawno\include\M_Bot.inc(156) : error 017: undefined symbol "IsAnAdmin"
    C:\Dokumente und Einstellungen\Administrator\Desktop\SA-MP Server\gamemodes\GPR.pwn(3065) : error 017: undefined symbol "IsPlayerInFrac"
    C:\Dokumente und Einstellungen\Administrator\Desktop\SA-MP Server\gamemodes\GPR.pwn(3075) : error 017: undefined symbol "IsPlayerInFrac"
    C:\Dokumente und Einstellungen\Administrator\Desktop\SA-MP Server\gamemodes\GPR.pwn(3085) : error 017: undefined symbol "IsPlayerInFrac"
    C:\Dokumente und Einstellungen\Administrator\Desktop\SA-MP Server\gamemodes\GPR.pwn(3095) : error 017: undefined symbol "IsPlayerInFrac"
    C:\Dokumente und Einstellungen\Administrator\Desktop\SA-MP Server\gamemodes\GPR.pwn(3105) : error 017: undefined symbol "IsPlayerInFrac"
    C:\Dokumente und Einstellungen\Administrator\Desktop\SA-MP Server\gamemodes\GPR.pwn(3551) : error 004: function "OnPlayerCarLogin" is not implemented
    C:\Dokumente und Einstellungen\Administrator\Desktop\SA-MP Server\gamemodes\GPR.pwn(4186) : error 004: function "OnPlayerCarUpdate" is not implemented
    C:\Dokumente und Einstellungen\Administrator\Desktop\SA-MP Server\gamemodes\GPR.pwn(4376) : error 004: function "RemoveRoadblock" is not implemented
    C:\Dokumente und Einstellungen\Administrator\Desktop\SA-MP Server\gamemodes\GPR.pwn(4419) : error 017: undefined symbol "SetPlayerToKnast"
    C:\Dokumente und Einstellungen\Administrator\Desktop\SA-MP Server\gamemodes\GPR.pwn(5055) : error 004: function "ClearBlack" is not implemented
    C:\Dokumente und Einstellungen\Administrator\Desktop\SA-MP Server\gamemodes\GPR.pwn(5867) : error 004: function "GetDistanceToClosestInside" is not implemented
    C:\Dokumente und Einstellungen\Administrator\Desktop\SA-MP Server\gamemodes\GPR.pwn(5875) : error 017: undefined symbol "GetClosestInsideID"
    C:\Dokumente und Einstellungen\Administrator\Desktop\SA-MP Server\gamemodes\GPR.pwn(5887) : error 004: function "GetDistanceToClosestOutside" is not implemented
    C:\Dokumente und Einstellungen\Administrator\Desktop\SA-MP Server\gamemodes\GPR.pwn(5889) : error 017: undefined symbol "GetClosestOutsideID"
    C:\Dokumente und Einstellungen\Administrator\Desktop\SA-MP Server\gamemodes\GPR.pwn(6285) : error 017: undefined symbol "BuyUhr"
    C:\Dokumente und Einstellungen\Administrator\Desktop\SA-MP Server\gamemodes\GPR.pwn(6286) : error 017: undefined symbol "BuyUhr"
    C:\Dokumente und Einstellungen\Administrator\Desktop\SA-MP Server\gamemodes\GPR.pwn(6287) : error 017: undefined symbol "BuyUhr"
    C:\Dokumente und Einstellungen\Administrator\Desktop\SA-MP Server\gamemodes\GPR.pwn(6288) : error 017: undefined symbol "BuyUhr"
    C:\Dokumente und Einstellungen\Administrator\Desktop\SA-MP Server\gamemodes\GPR.pwn(6289) : error 017: undefined symbol "BuyUhr"
    C:\Dokumente und Einstellungen\Administrator\Desktop\SA-MP Server\gamemodes\GPR.pwn(6297) : error 017: undefined symbol "BuyHandy"
    C:\Dokumente und Einstellungen\Administrator\Desktop\SA-MP Server\gamemodes\GPR.pwn(6298) : error 017: undefined symbol "BuyHandy"
    C:\Dokumente und Einstellungen\Administrator\Desktop\SA-MP Server\gamemodes\GPR.pwn(6299) : error 017: undefined symbol "BuyHandy"
    C:\Dokumente und Einstellungen\Administrator\Desktop\SA-MP Server\gamemodes\GPR.pwn(6300) : error 017: undefined symbol "BuyHandy"
    C:\Dokumente und Einstellungen\Administrator\Desktop\SA-MP Server\gamemodes\GPR.pwn(6301) : error 017: undefined symbol "BuyHandy"
    C:\Dokumente und Einstellungen\Administrator\Desktop\SA-MP Server\gamemodes\GPR.pwn(6302) : error 017: undefined symbol "BuyHandy"

  • Bisher hatte ich es so da bekomme ich nur 17 Warnings, allerdings klappte es damit nicht:


    if(strcmp(cmd, "/Serverneustart", true) == 0 || strcmp(cmd, "/sn", true) == 0)
    {
    if (PlayerInfo[playerid][pAdmin] >= 1)
    {
    SendClientMessageToAll(RED_NEW,"Serverneustart in drei Minuten!");
    SetTimer("",6000,0);
    SendClientMessageToAll(RED_NEW,"Serverneustart in zwei Minuten!");
    SetTimer("",6000,0);
    SendClientMessageToAll(RED_NEW,"Serverneustart in einer Minute!");
    SetTimer("",6000,0);
    SendClientMessageToAll(RED_NEW, "!Serverneustart!");
    SendClientMessageToAll(RED_NEW, "!Serverneustart!");
    SendClientMessageToAll(RED_NEW, "!Serverneustart!");
    }
    else SendClientMessage(playerid,RED_NEW, "Du bist kein Admin !");
    return 1;
    }

  • Timer müssen geforwarded sein und einen Namen besitzen. Lies dir mal die Wiki-Funktion von SetTimer durch. Außerdem wird bei dir wirklich alles gleichzeitig gemacht.



    if(strcmp(cmd, "/Serverneustart", true) == 0 || strcmp(cmd, "/sn", true) == 0)
    {
    if(IsPlayerAdmin(playerid))
    {
    SetTimer(timer1, 6000, 0);
    SendClientMessageToAll(COLOR_ORANGE,"Serverneustart in 3 Minuten");
    }
    else SendClientMessage(playerid,COLOR_RED,"Du bist kein Admin.");
    return 1;
    }

    Das überprüft jetzt halt, ob der Spieler als RCON-Admin eingeloggt ist, ansonsten änder einfach das IsPlayerAdmin(playerid) zu deinem um. Die Fehler die du gepostet hast, weisen auf Klammerfehler hin. die forward timer1 usw. kommen oben zu deinen new's/defines und die publics ganz unten ins Script.
    Der Command kommt natürlich in OnPlayerCommandText.


    Eigentlich sollte es so gehen, ansonsten wüsste ich nicht was falsch ist.


    Mit freundlichen Grüßen
    Padarom

    Ich bin
    .. seit etwa 2007 in der Webentwicklung tätig, seit 2013 professionell
    .. Erfahrener Entwickler in PHP, Swift, Javascript, Typescript und Ruby. Zusätzlich habe ich Erfahrung in Python, Java, C#, C++, Prolog und einigen esoterischen Programmiersprachen
    .. Luftfahrtenthusiast und Segelflieger

  • Nein, da muss nichts rein, da du ja keine Parameter (wie PlayerID vom Timerstarter o.Ä.) brauchst.

    Ich bin
    .. seit etwa 2007 in der Webentwicklung tätig, seit 2013 professionell
    .. Erfahrener Entwickler in PHP, Swift, Javascript, Typescript und Ruby. Zusätzlich habe ich Erfahrung in Python, Java, C#, C++, Prolog und einigen esoterischen Programmiersprachen
    .. Luftfahrtenthusiast und Segelflieger

  • if(strcmp(cmd, "/Serverneustart", true) == 0 || strcmp(cmd, "/sn", true) == 0)
    {
    if (PlayerInfo[playerid][pAdmin] >= 1)
    {
    SendClientMessageToAll(RED_NEW,"Serverneustart in drei Minuten!");
    SetTimer("sntimer1",6000,0);
    return 1;
    SendClientMessageToAll(RED_NEW,"Serverneustart in zwei Minuten!");
    SetTimer("sntimer2",6000,0);
    return 1;
    SendClientMessageToAll(RED_NEW,"Serverneustart in einer Minute!");
    SetTimer("sntimer3",6000,0);
    return 1;
    SendClientMessageToAll(RED_NEW, "!Serverneustart!");
    SendClientMessageToAll(RED_NEW, "!Serverneustart!");
    SendClientMessageToAll(RED_NEW, "!Serverneustart!");
    }
    else SendClientMessage(playerid,RED_NEW, "Du bist kein Admin !");
    return 1;
    }


    So sit es jetzt ^^ klappt aber auch nicht Errors:


    C:\Dokumente und Einstellungen\Administrator\Desktop\SA-MP Server\gamemodes\GPR.pwn(18963) : error 029: invalid expression, assumed zero
    C:\Dokumente und Einstellungen\Administrator\Desktop\SA-MP Server\gamemodes\GPR.pwn(18963) : error 004: function "sntimer1" is not implemented


    davon jeweils nochmal 2

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Du darfst einen Public ja nicht sofort abschließen...


    public sntimer1()
    {


    }
    Ohne Semikolon. :P


    Ich mach dir es mal ganz einfach:



    // Unter den Includes
    forward timer1();
    forward timer2();
    forward timer3();



    // OnplayerCommandtext
    if(strcmp(cmdtext, "/gmx", true) == 0)
    {
    SetTimer("timer1", 60000, 0);
    SendClientMessageToAll(farbe, "Restart in 3 Mins");
    return 1;
    }


    // Ambesten ganz unten:


    public timer1()
    {
    SetTimer("timer2", 60000, 0);
    SendClientMessageToAll(farbe, "Restart in 2 Mins");
    return 1;
    }


    public timer2()
    {
    SetTimer("timer3", 60000, 0);
    SendClientMessageToAll(farbe, "Restart in 1 Min");
    return 1;
    }


    public timer3()
    {
    SendClientMessageToAll(farbe, "Restart!!");
    return 1;
    }



    So sollte es "Copy & Paste"-bar sein, was nicht zu empfehlen ist da C&P doof ist. :)

  • Ich hab es ihm doch auch ganz einfach gemacht? Genauso hab ich das ja oben in meinem ersten Post geschrieben :D

    Ich bin
    .. seit etwa 2007 in der Webentwicklung tätig, seit 2013 professionell
    .. Erfahrener Entwickler in PHP, Swift, Javascript, Typescript und Ruby. Zusätzlich habe ich Erfahrung in Python, Java, C#, C++, Prolog und einigen esoterischen Programmiersprachen
    .. Luftfahrtenthusiast und Segelflieger

  • es soll ja schonmal nciht über /gmx laufen da der befehl ingame sowieso nicht so das ware ist das soll wohl auch fast bei allen so sein, damit wenn man /gmx eingibt (ingame) damit man danach mal ein paar bugs hat wie tore die aufeinmal doppelt sind ^^


    Nun ist es so:


    if(strcmp(cmd, "/Serverneustart", true) == 0 || strcmp(cmd, "/sn", true) == 0)
    {
    if (PlayerInfo[playerid][pAdmin] >= 1)
    {
    SendClientMessageToAll(RED_NEW,"Serverneustart in drei Minuten!");
    SetTimer("timer1",60000,0);
    return 1;
    public timer1()
    SendClientMessageToAll(RED_NEW,"Serverneustart in zwei Minuten!");
    SetTimer("timer2",60000,0);
    return 1;
    public timer2()
    SendClientMessageToAll(RED_NEW,"Serverneustart in einer Minute!");
    SetTimer("timer3",60000,0);
    return 1;
    public timer3()
    SendClientMessageToAll(RED_NEW, "!Serverneustart!");
    SendClientMessageToAll(RED_NEW, "!Serverneustart!");
    SendClientMessageToAll(RED_NEW, "!Serverneustart!");
    }
    else SendClientMessage(playerid,RED_NEW, "Du bist kein Admin !");
    return 1;
    }


    Und ich bekomme immer errors wenn ich das erste von Padarom benutze bekomme ich sogar 26 Errors von irgendwelchen anderen Sachen die sonst keine Errors abgeben

  • Wie gesagt, du musst dein if(strcmpcmd, ... trotzdem machen, ich habe dir nur den eigentlichen Teil des Commands gepostet.
    So wie du es gemacht hast funktioniert es auf keinen Fall, da Timer so nicht funktionieren. Außerdem kann man Publics nicht in anderen Publics starten. Lies dir mal in der Wiki ein Timer-Beispiel durch (oder hier irgendwo im Forum ein Tutorial), dann sollte es dir klar werden.
    Nutz' den Code von Benutzername (da ist die Command-Einleitung mit drinne), ändere das /gmx in /serverneustart oder was auch immer um und es klappt.

    Ich bin
    .. seit etwa 2007 in der Webentwicklung tätig, seit 2013 professionell
    .. Erfahrener Entwickler in PHP, Swift, Javascript, Typescript und Ruby. Zusätzlich habe ich Erfahrung in Python, Java, C#, C++, Prolog und einigen esoterischen Programmiersprachen
    .. Luftfahrtenthusiast und Segelflieger

  • Dann fügst du das irgendwo ein, wo das nicht hingehört. Der Code ist richtig. Also muss es an dir liegen.
    26 Errors kommen prinzipiell nur bei Klammerfehlern vor, und den hast du wahrscheinlich weil du die Timer-Publics irgendwo in ein anderes Public gestopft hast, oder den Command nicht unter OnPlayerCommandText.

    Ich bin
    .. seit etwa 2007 in der Webentwicklung tätig, seit 2013 professionell
    .. Erfahrener Entwickler in PHP, Swift, Javascript, Typescript und Ruby. Zusätzlich habe ich Erfahrung in Python, Java, C#, C++, Prolog und einigen esoterischen Programmiersprachen
    .. Luftfahrtenthusiast und Segelflieger

  • Dein Befehl:


    if(strcmp(cmd, "/Serverneustart", true) == 0 || strcmp(cmd, "/sn", true) == 0)
    {
    if (PlayerInfo[playerid][pAdmin] >= 1)
    {
    SendClientMessageToAll(RED_NEW,"Serverneustart in drei Minuten!");
    SetTimer("timer1",60000,0);
    }
    else SendClientMessage(playerid,RED_NEW, "Du bist kein Admin !");
    return 1;
    }


    Jetzt gehst du gaaaaaaaaaaaanz nach unten ans Script und machst folgendes!:


    public timer1()
    {
    SendClientMessageToAll(RED_NEW,"Serverneustart in zwei Minuten!");
    SetTimer("timer2",60000,0);
    return 1;
    }


    public timer2()
    {
    SendClientMessageToAll(RED_NEW,"Serverneustart in einer Minute!");
    SetTimer("timer3",60000,0);
    return 1;
    }


    public timer3()
    {
    SendClientMessageToAll(RED_NEW, "!Serverneustart!");
    SendClientMessageToAll(RED_NEW, "!Serverneustart!");
    SendClientMessageToAll(RED_NEW, "!Serverneustart!");
    return 1;
    }


    Jetzt noch ganz oben, am besten dort wo auch #include <a_samp> steht:

    forward timer1();
    forward timer2();
    forward timer3();


    Das ist jetzt Copy & Paste das wars. Wenn du jetzt noch Fehler hast, kann ich dir auch nicht weiterhelfen...

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen