Eine einfache RL Uhr erstellen

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,
    In diesem Tutorial zeige ich euch wie ihr euch eine Reallife Uhr erstellen könnt!!!


    ganz oben:


    forward clock();


    unter dem public:OnPlayerSpawn fügt ihr das ein!


    clock();


    So und jetz noch schluss unter dem letzten public fügt ihr dann das ein!:


    public clock ()
    {
    new Text:Clock;
    new hour,minute,second;
    new string[10];
    gettime(hour,minute,second);
    format(string, sizeof string, "%s%d:%s%d:%s%d", (hour < 10) ? ("0") : (""), hour, (minute < 10) ? ("0") : (""), minute, (second < 10) ? ("0") : (""), second);
    TextDrawHideForAll(Clock);
    Clock = TextDrawCreate(542.0, 24.0, string);
    TextDrawLetterSize(Clock, 0.6, 1.8);
    TextDrawFont(Clock, 3);
    TextDrawSetOutline(Clock, 2);
    TextDrawShowForAll(Clock);
    SetTimer("clock",1000,0);
    return 1;
    }



    NUN HABT IHR EURE EIGENE RL UHR


    VIEL SPAß!!!!!!


    MFG W4RFiGhTeR :D

    ==========================================


    eigener Server 30% fertig :thumbup:

    ==========================================

  • Sry kann man in den Müll werfen, es Ruckelt wie Sau

  • Das liegt an deinem Server nicht an dem Code.

    meine fresse, es laggt nicht ---> Uhr rein ---> Kann mich kaum noch bewegen ----> Uhr raus -----> Alles geht wieder


    Edit: Profi :)


  • 100000000000% Geklaut denn ich hatte den selben Code in meinem Script, weil ich den über die Suchfunktion gefunden habe.
    Und die Uhr ist 99% unbrauchbar da V.0.3 eine Standartmäßig drin hat und das in "few weeks" released wird.


    meine fresse, es laggt nicht ---> Uhr rein ---> Kann mich kaum noch bewegen ----> Uhr raus -----> Alles geht wieder


    Edit: Profi :)


    Das liegt dann an deinem PC (server PC) dann hat der zu wenig CPU. Bei mir lief das flüssig auf meinem PC (ist ja auch nen Überpc aber Server Standart^^) da gabs nur nem Problem, dass da manschmal nen Paar Ziffern hängengeblieben sind etc...

  • Ist ja geil, jede Sekunde den TextDraw neu erstellen. :>
    Weißt du eigentlich, was das für ne Last für den Server ist?


    Es geht viel einfacher und ressourcenschonender mit der Funktion TextDrawSetString.

  • Zuerst das Alte Textdraw iwie löschen?^^
    Wenn 7 steht sieht man immer die alte zahl dahinter :S

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Naja ich Korrigiere mal :)


    Unter OngamemodeInit.

    SetTimer("clock",1000,1);




    Warum unter OngamemOdeinit ?
    Da dieser Timer beim Starten des Gamemodes gestartet werden soll,
    Warum ist dort clock ?
    Da der Timer die Funktion Clock ausführen soll die Zahl 1000 steht dabei für die Zeit diese wird in ms (millisekunden) angegeben, die 1 steht für weiderholen, da sich die Uhr auch aktualiesieren soll.Die Uhr wird also jede 1000ms aktualisiert.


    Oben hin :
    forward clock();

    Dies Deklariert die Funktion "clock".


    Dies in OnPlayerconnect :

    TextDrawShowForAll(Clock);
    Clock = TextDrawCreate(542.0, 24.0, string);
    TextDrawLetterSize(Clock, 0.6, 1.8);
    TextDrawFont(Clock, 3);
    TextDrawSetOutline(Clock, 2);


    Die erstellt den Textdraw sobald der Spieler Connectet.
    Warum ist dies im ersten Post anders?
    Da mein Vorredner den Textdraw jede Sekunde erstellt hat, es wurde immer ein weiterer erstellt, dies ist ein große Last für den Server und führt zu Lags außerdem hat SA-MP ein limit, ist dieses Limit erreicht crasht der Server.



    Dies am Ende des Gamemodes hin :



    public clock ()
    {
    new Text:Clock;
    new hour,minute,second;
    new string[10];
    gettime(hour,minute,second);
    format(string, sizeof string, "%s%d:%s%d:%s%d", (hour < 10) ? ("0") : (""), hour, (minute < 10) ? ("0") : (""), minute, (second < 10) ? ("0") : (""), second);
    TextDrawSetString(Clock,string);
    return 1;
    }

    Die Public muss am Ende eingefügt werden da dies eine eigene Public ist, ohne Timer würde diese nur beim aufrufen reagieren.
    Hier wird die Zeit abgefragt mit der native gettime und anschließend wird der Textdraw dementsprechend gesetzt.



    So nun sollte alles Lagfrei Funktionieren.


    Lg ^^


    Einmal editiert, zuletzt von Guest- ()

  • Hey, ich zeige euch mal meine Uhr die ich vor längerer Zeit erstellt habe.
    Als erstes müssen wir ein Textdraw erstellen, wir machen also ganz oben folgendes hin.
    Ich mach das jetzt so wie es in meinem Script ist, ihr könnt das natürlich alles umbenennen!



    new Text:Uhr;


    Dann müssen wir ein forward erstellen für das Public der Uhr. Das weiter oben im Script:



    forward Uhrsync();


    Nun erstellen wir bei OnGameModeInit das Textdraw, ihr könnt das von mir aus alles editieren:



    Uhr = TextDrawCreate(560.000000,1.000000,"_"); // Mit diesen Koordinaten steht das Textdraw oben rechts!
    TextDrawAlignment(Uhr,0);
    TextDrawBackgroundColor(Uhr,0x000000ff);
    TextDrawFont(Uhr,3); // Die Fonts lassen sich im Wiki nachsachuen! Ich empfehle 3 oder 1!
    TextDrawLetterSize(Uhr,0.599999,3.599998);
    TextDrawColor(Uhr,0xffffffff);
    TextDrawSetOutline(Uhr,1);
    TextDrawSetProportional(Uhr,1);
    TextDrawSetShadow(Uhr,1);
    UhrSync();


    Wenn wir das Textdraw für die Uhr eingefügt haben müssen wir natürlich einen Timer erstellen, weil dir Uhr soll ja auch
    updaten! Das bei OnGameModeInit einfügen:



    SetTimer("UhrSync", 60*1000, true);


    Nun erstellen wir das Public für die Uhr, macht das am besten weiter unten im Script hin:



    public UhrSync()
    {
    new str[32];
    new hour, minute, second;
    gettime(hour,minute,second);
    format(str,sizeof(str),"~y~d~r~:~y~d",hour,minute); // Im Textdraw werden nur Stunden und Minuten angezeigt.
    TextDrawSetString(Uhr, str); // Bedeutet das die Uhr immer Updaten soll
    SetWorldTime(hour); // Das sorgt dafür, wenn es zum Beispiel 22 Uhr ist das es dunkel ist und bei 15 Uhr hell ist!
    }


    Damit die Uhr auch angezeigt wird müssen wir folgendes entweder bei OnPlayerConnect oder bei OnPlayerSpawn einfügen:



    TextDrawShowForPlayer(playerid, Uhr); // Das bedeutet das das Textdraw angezeigt werden soll


    VIel Spaß!


    @ Thread: Ich habe mir mal deine Uhr eingebaut und bei mir funktioniert sie, nur an deiner Stelle würde ich auch ein paar Funktionen erklären.


    MfG Markus ;)

  • textdraw verstecken und neu erstellen?
    wieso net löschen oder gleich TextDrawSetString


    das laggt weil soviele textdraws erstellt werden, obwohl die net angezeigt werden. sonst laggt es doch net mit 1sek timer

    Gmäeß eneir Sutide eneir elgnihcesn Uvinisterät, ist es nchit witihcg
    in wlecehr Rneflogheie die Bstachuebn in eneim Wrot snid, das ezniige
    was wcthiig ist, ist daß der estre und der leztte Bstabchue an der
    ritihcegn Pstoiion snid. Der Rset knan ein ttoaelr Bsinöldn sien,
    tedztorm knan man ihn onhe Pemoblre lseen. Das ist so, wiel wir nciht
    jeedn Bstachuebn enzelin leesn, snderon das Wrot als gseatems.