Tägliche Statistiken

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
  • Hey,
    ich bin gerade dabei ein wenig was an meinem Script zu machen und bräuchte mal eben 'nen kleinen Denkanstoß.
    Ich möchte täglich alle Statistiken (Kills, Tode, ...) von jedem User resetten - Wie genau mache ich das ganze?


    Mir fällt gerade keine wirklich vernünftige Methode dazu ein.

  • Also die einfachste Methode wäre, sich dafür einen Cronjob anzulegen.
    Ansonsten wirste dir n Timer bauen müssen, der alle N Minuten/Stunden checkt, ob die Uhrzeit korrekt ist und den Query dann ausführt.


    Mein CS:GO Server: 62.75.168.39:27016


    Ich bin so hungrig, dass ich vor lauter Durst nicht weiß, was ich rauchen soll - so müde bin ich!
    Freedom is just another word for 'Nothing left to lose'

  • Alternativ kannst du einfach speichern wann der User das letzte mal online war. Wenn er dann online kommt fragst du ab, ob sein letzter Besuch nicht heute (also gestern, oder noch länger zurück) war, und wenn dem so ist setzt du die gewünschten Statistiken zurück.


    So sparst du dir regelmäßigen Code der immer alle (jeh nach Speichersystem) Benutzer durchgehen muss und behandelst das auf ner Case by Case Basis.


    Dazu muss man aber auch bedenken das die Einträge dann in der Datenbank nicht unbedingt auf dem aktuellsten stand für alle Benutzer sind, sofern diese sich eben noch nicht eingeloggt haben um den Reset zu kassieren. Das lässt sich zwar trotzdem mit einbeziehen, da man auch dann wieder über das online Datum berechnen kann, aber kann unter Umständen zu Mehrarbeit werden. Musste halt schauen was bei dir mehr Sinn macht.

  • LeijaT: Leider noch nie gemacht, außerdem sollten die Statistiken am besten auch InGame direkt auf 0 gesetzt werden.
    maddin: Danke für den Lösungsvorschlag, allerdings müssen alle Statistiken gleichzeitig zurückgesetzt werden. :x


    Jemand sonst ne Idee?

  • Ich habe es selbst noch nicht gemacht es SOLLTE aber so funktionieren: (Basierend auf MYSQL R39-3) Wenn du ein anderes verwendest lässt sich das Prinzip aber übertragen.


    1. Erstelle dir bei OnGameModeInit einen Timer der jede Minute aufgerufen wird.


    2. Lasse dir darin per "gettime()" https://wiki.sa-mp.com/wiki/Gettime den Unix Timestamp ausgeben, und frage über diesen ab wie spät es ist. (So kannst du festlegen wann die Daten resettet werden sollen.


    3. Ist es die Zeit rufst du eine Funktion auf. z.B:



    Hier musst du noch den Tabellennamen und die Variablen eintragen die geändert werden sollen.



    MfG,

    2 Mal editiert, zuletzt von Simon2202 ()

  • Der Ansatz von dir Simon ist gut nur muss man nicht extra jeden user auslesen es reicht einfach die Where Bedingung wegzulassen.
    Sonst kann ich nur dazu sagen das man falls es bereits einen Timer mit einem geringen intervall gibt diesen verwenden sollte anstatt extra einen neuen zu erstellen.
    Zusätzlich sollte man sagen das man den Timestamp nicht benötigt gettime liefert auch die Stunden, minuten und sekunden diese kann man auch abfragen.


    \edit
    Je nach Zeitintervall des Timers sollte man noch eine extra variable hinzufügen um abzufragen ob die Zeitspanne größer und gleich 24 Stunden entspricht da würde es sich doch anbieten einen Timestamp zu verwenden

    Einmal editiert, zuletzt von IPrototypeI ()

  • @IPrototypeI Wie meinst du "die Where Bedingung weglassen" ? wie sollte man es machen außer alle auszulesen um auf die reihen in der Tabelle zu kommen?


    Schau er möchte die Statistik von jedem Spieler zurücksetzen.


    Daher kann man die Where Bedingung weglassen.


    Du musst dir das so vorstellen wir haben eine Tabelle mit den Spalten Name und Menge und 100 Datensätze davon.


    So wenn ich jetzt den Befehl
    UPDATE tabelle SET menge = 2 WHERE name = Simon;
    Ausführe geht MySQL die Datensätze durch und such nach dem Namen Simon um die Menge auf 2 zu setzen bedeutet ich spreche hier nur 1 Datensatz durch die Where Clausel an und filter somit die Datensätze.


    Nun lasse ich die Where Clausel weg
    UPDATE tabelle SET menge = 2;
    Jetzt werden alle Datensätze angesprochen und dadurch geändert da wir nun alle Datensätze ausgewählt haben anstatt nur einen durch die Where Clausel im oberen Beispiel.

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Für sowas kann man auch wunderbar das Scheduling von MySQL selber nutzen.
    https://dev.mysql.com/doc/refman/5.7/en/event-scheduler.html
    http://www.j-breuer.de/blog/pr…-mysql-7-event-scheduler/
    Mit Google findest du da super Beispiele, wie du eines der o.g. SQL Kommandos ausführen kannst.


    Man hat dann jedoch (so wie übrigens bei den zuvor genannten Lösung auch, Simon2202's Lösung nicht) das Problem, dass die Statistik nur in der DB geändert wird. Befindet sich der Spieler zu dem Zeitpunkt auf dem Server, bringt das ganze nichts.


    //Edit: Link angepasst und Text angepasst. Besser :] ?

  • Ist dein erster Link down (bei mir zumindest)

    Der Ist nicht down, am ende des Links haben sich nur ein paar (fehlerhafte) Zeichen eingeschlichen.
    Rauslöschen und schon geht's

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

    Margarete Stokowski