Browsergame Tag beginnen -> Rohstoffe

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Browsergame Tag beginnen -> Rohstoffe

    Hallo ich hab folgendes Problem:
    In einem Browsergame muss man auf Tag Beginnen klicken, damit ein Tag startet und man seine Rohstoffe nach Ende des Tages bekommt (1 Tag = 10 min)

    jetzt möcht ich aber gern dass der Tag automatisch läuft, also der User aller 10 min seine Rohstoffe bekommt.

    läuft kein Tag steht in der SQL Tabelle Tag 0
    läuft ein tag steht das datum der Variable $tagtag drin

    der Code sieht so aus:

    PHP-Code:
    $min date(i);
    $stund date(H);
    $monate date("m");
    $tagimmonat date(d);
    $jahr date(Y);
    $jahr $jahr 2000;

    $tagtag $jahr.$monate.$tagimmonat.$stund.$min;


    mysql_query("update browser_user SET tag = '$tagtag' WHERE user = '".$_SESSION['user']."'");
    header("location:view.php");

    jetzt hab ich versucht mit:

    if tag = 0 > update tag = tagtag aba leider klappt das nicht so ganz.
    Kann mir einer dabei helfen?

  • #2
    http://www.php-resource.de/forum/sho...threadid=50454

    automatisch alle zehn minuten bedeutet, dass irgendwo ein timer laufen soll. serverseitig? cronjobs (ist aber mit kanonen auf spatzen). clientseitig? billig, aber manipulierbar.

    so ein spiel erfordert mehr als irgendwelche tutorials aus dem netz.


    besser: du speicherst einmalig in der db, wann "der tag" begonnen hat, und bei der nächsten abfrage ermittelst du erst, ob dieser vorbei ist ("+10 minuten") und vergibst "resourcen".

    Kommentar


    • #3
      ja und wenn 3 tage vorbei sind halt + 3 x resourcen!

      hat aber den nachteil das alle aktionen die sich auf die resourcen beziehen immer wieder die resis aktualisieren müssen..

      also bauen, tag rum, ausrauben, handeln usw

      Kommentar


      • #4
        besser: du speicherst einmalig in der db, wann "der tag" begonnen hat, und bei der nächsten abfrage ermittelst du erst, ob dieser vorbei ist ("+10 minuten") und vergibst "resourcen".
        quasi ein virtueller cronjob. ich würde bei jedem aktualisieren der seite schauen ob der user schon wieder 10 min rum hat.

        allerdings finde ich einen cronjob doch die bessere wahl. wieso meinst du sei es mit kanonen auf spatzen geschossen?

        mfg
        bugbuster
        tutorial: peterkropff.de schattenbaum.de tut.php-quake.net
        documentation: php.net mysql.com framework.zend.com

        Die Nachtwache!

        Kommentar


        • #5
          Ja das hab ich mir auch gedacht mit den einmaligen speichern in der DB und der überprüfung ob die 10 min schon um sin,
          nur wie stell ich die anfrage der überprüfung im zusammenhang mit der zeit an die DB

          Kommentar


          • #6
            Original geschrieben von Bugbuster
            allerdings finde ich einen cronjob doch die bessere wahl. wieso meinst du sei es mit kanonen auf spatzen geschossen?
            Wenn ich 10.000(e) User hab, kann ich natürlich alle 10 Minuten mit 'nem Cronjob schauen lassen, ob schon wieder Zeitspanne X rum ist, und sie deshalb Y mehr Stücke von Stoff Z gutgeschrieben bekommen - also entsprechend viele Updates machen.

            Oder aber ich frage, wenn der Nutzer das nächste Mal zugreift - das kann ja auch einen, zwei Tage oder eine Woche später sein - wann er das letzte Mal da war, teile diese Zeitspanne durch X, und gebe ihm dann so viel mal Y dazu. Das ist lediglich ein Update ...


            Ein Update in vielleicht zwei Wochen, oder zwei Wochen lang alle zehn Minuten ein Update - macht schon einen kleinen Unterschied.
            I don't believe in rebirth. Actually, I never did in my whole lives.

            Kommentar


            • #7
              Ja okay da geb ich dir natürlich Recht. Das dies performancetechnisch nicht so empfehlenswert ist.

              mal ganz wertfrei wäre mein ansatz dafür:

              in der datenbanktabelle eine spalte mit timestamp anlegen dies benennen mit last_update oder so ... und dann eine einfache rechnung ob timestamp schon mehr als 10 minuten her ist (600 sekunden)

              PHP-Code:
              if(($last_update 600) < $timestamp_now) {
              //update ausfuehren und hierbei natürlich auch last_update aktualisieren

              .. das kann mysql aber automatisch. current_timestamp.
              tutorial: peterkropff.de schattenbaum.de tut.php-quake.net
              documentation: php.net mysql.com framework.zend.com

              Die Nachtwache!

              Kommentar


              • #8
                also bei 10000enden usern und einem cronjob hängt dein spiel dann immer bei der aktualisierung der gesamten resi tabelle!

                Kommentar


                • #9
                  ach das kann man so pauschal sagen? bei normalen webspace okay. bei einer normalen mysql datenbank okay. ohne mehraufwand okay. aber dies ist keine allwetterformel! es soll durchaus vorkommen, dass ein cronjob mehrere 1000 user updatet ohne das der user groß was davon mitkriegt. wollte damit nur mitteilen, dass ich so allwetteraussagen nicht mag. so diskussion beendet. geht ja schließlich nicht darum. wir sind ja hier schon überein gekommen, dass man es nicht per cronjob macht.
                  tutorial: peterkropff.de schattenbaum.de tut.php-quake.net
                  documentation: php.net mysql.com framework.zend.com

                  Die Nachtwache!

                  Kommentar


                  • #10
                    ähm nunja zu Cronjob:
                    Ich hab mal gegoogelt, da Cronjob mir vorher nix sagte.
                    Aber wenn ich dass richtig erkannt habe updatet Cronjob ja alles bei jeden User? Dies soll ja nicht der Fall sein,
                    da der User sich in verschiedenen Verdienststufen befindet.
                    Umso mehr er baut um so mehr verdient er davon.
                    Also muss es ja ein Update für jeden User einzeln geben, wenn ich das richtig seh.

                    Aber wie gesagt > Ich hab mir Cronjob nur mal kurz angeschaut - kannte es vorher nich.

                    Kommentar


                    • #11
                      Quatsch. Der Cronjob führt nur ein Skript regelmäßig zu bestimmten Zeiten aus - ähnlich den Taskplaner bei Windows. Was dein Skript macht bleibt dir überlassen.
                      Ich denke allerdings das wahsagas Vorschlag besser ist. Du speicherst den letzten Zugriff in einer Session / Datenbank und schaust dann wieviele Rohstoffe hinzugefügt werden. Dabei können dann mehrmals 10 min vergangen sein. So sparst du dir Updates für alle User die gerade inaktiv sind und deren Rohstoffe überhaupt nicht interessant sind.
                      Die Regeln | rtfm | register_globals | strings | SQL-Injections | [COLOR=silver][[/COLOR][COLOR=royalblue]–[/COLOR][COLOR=silver]][/COLOR]

                      Kommentar


                      • #12
                        Also ich habe jetzt mal eine Tabelle angelegt:

                        name: test
                        typ: timestamp
                        Attribute: ON UPDATE CURRENT_TIMESTAMP
                        Null: Nein
                        Standart: CURRENT_TIMESTAMP

                        dazu folgenden Code:
                        PHP-Code:

                        $timestamp_now 
                        time();


                        if((
                        $test) < $timestamp_now) {
                        mysql_query ("update browser_user SET test = '$timestamp_now' WHERE user = '".$_SESSION['user']."'");

                        über Echo zeigt er mir das: 1183905147 ?
                        das is doch kein datum oder eine Zeit?

                        Leider wird aber auch mit date() statt time() nix geupdatet
                        und ich bekomm bei date() nix über echo zurück?!

                        Kommentar


                        • #13
                          http://www.korrekturen.de/beliebte_fehler/standart.html

                          so ganz ohne grundlagen wirst du keinen erfolg haben. leihe dir in der bibliothek ein-zwei bücher zum thema php und mysql aus, bevor du drauflosprogrammierst.

                          weder kennst du die datentypen in mysql (die in der dokumentation ausführlich beschrieben sind), noch weißt du, was ein timestamp ist.

                          Kommentar


                          • #14
                            habs hinbekommen

                            allerdings stell ich mir die Frage wie ich das ganze berechne wenn sich der user erst am nächsten tag oder gar eine woche später wieder einloggt.

                            Muss ich dann die differenz berechnen?
                            timestamp_neu - timestamp_alt : 600 * die Rohstoffe aller 10 min?

                            bsp: bei 18 stunden des letzten zeitstempels steht dem user ein update von 10.8 mal die rohstoffe zu

                            is das machbar? müsste eigentlich....?!


                            Nachtrag:
                            Auch das klappt - allerdings überschreibt er immer die rohstoffe neu und rechnet den alten stand nicht dazu...

                            PHP-Code:

                            $energie 
                            $row2["energie"];
                            $timediff $timestamp_neu $timestamp_alt;
                            $rohstoff_diff $timediff 5;
                            $energieneu1 $rohstoff_diff 20 energie
                            NACHTRAG: Ups $ vergessen - so schnell gehts
                            sry
                            Zuletzt geändert von steff2006; 09.07.2007, 11:32.

                            Kommentar

                            Lädt...
                            X