So, nun bin ich daran die Ressourcenberechnung zu proggen, was sich da bei mir als etwas größeres Problem darstellt.
Und zwar soll es so ablaufen, dass der User pro Stunde x Gold bekommt, y Holz usw.
Wenn man die Seite nun aber z.b. nach 2 Minuten aktualisiert soll es auch schon die Ress dazurechnen, die man in diesen 2 Minuten verdient hat.
Jemand erzählte mir mal, dass man so etwas mit einem Cron-Job macht.
Leider habe ich so etwas noch nie gemacht und weiß daher nicht wie ich an die Sache ran gehen soll.
Wie macht man so etwas nun ?
Cron-Job für Ressourcenberechnung ?
gepostet vor 18 Jahre, 7 Monate von Kelturio
gepostet vor 18 Jahre, 7 Monate von Mudder
Du kannst das Ressourcenupdate entweder pünktlich zu einer Stunde machen nur das sorgt zu diesem Zeitpunkt für eine sehr hohe Serverlast, da er alle Spieler durchgehen muss und alle Ressourcen und die Produktion abfragt und anschliessend für alle Spieler die Ressourcen neu berechnet und aktuallisiert.
Alternative wäre eine "Just-In-Time" Aktuallisierung. Statt einer Stundenproduktion teilst du das in eine Minuten- (oder ein anderen Rythmus) -Produktion und aktuallisierst die Ressourcen bei jedem Abruf des Spielers. Du speicherst hierzu einmal wann das letzte Update stattfand und berechnest dann den Produktionsunterschied bis zum aktuellen Zeitpunkt. Damit die Ressourcen nicht bei jedem Seitenaufruf überhand nehmen kann man z.B. auch ein 15-Minuten Rythmus nehmen. Das Script schaut wann das letzte Update statt fand (diese Abfrage muss man bei jedem Aufruf weiterhin machen bzw. kann sie dann evtl. auch in der Session speichern) und wenn ein voller Rythmus rum ist bzw. ein neuer Anfang (Bei 15-Minuten wäre 13:17 Uhr dann z.B. der nächste, auch wenn der letzte erst 13:14 Uhr statt gefunden hat).
Generell verteilst du die Updates damit auf das ganze Spielgeschehen.
Alternative wäre eine "Just-In-Time" Aktuallisierung. Statt einer Stundenproduktion teilst du das in eine Minuten- (oder ein anderen Rythmus) -Produktion und aktuallisierst die Ressourcen bei jedem Abruf des Spielers. Du speicherst hierzu einmal wann das letzte Update stattfand und berechnest dann den Produktionsunterschied bis zum aktuellen Zeitpunkt. Damit die Ressourcen nicht bei jedem Seitenaufruf überhand nehmen kann man z.B. auch ein 15-Minuten Rythmus nehmen. Das Script schaut wann das letzte Update statt fand (diese Abfrage muss man bei jedem Aufruf weiterhin machen bzw. kann sie dann evtl. auch in der Session speichern) und wenn ein voller Rythmus rum ist bzw. ein neuer Anfang (Bei 15-Minuten wäre 13:17 Uhr dann z.B. der nächste, auch wenn der letzte erst 13:14 Uhr statt gefunden hat).
Generell verteilst du die Updates damit auf das ganze Spielgeschehen.
gepostet vor 18 Jahre, 7 Monate von Kelturio
Also habe ich das so richtig verstanden ?
Ich lege nun z.b. fest, dass diese Just-In-Time Aktion aller einer Minute durchgeführt werden soll.
Also: Der Spieler ruft eine Seite auf. Bei diesem Aufruf wird nun die aktuelle Zeit in der DB gespeichert. Sobald der Spieler das nächste mal etwas aufruft bzw. aktualisiert, wird diese soeben gespeicherte Zeit aus der DB geholt und mit der aktuellen Zeit verglichen.
Sind nun beispielsweise mind. eine Minute vergangen, so werden daraus die Ressourcen berechnet, die der Spieler in dieser Zeit verdienen würde und sie werden in der DB gespeichert. Ist seit dem letzten Aufruf noch keine Minute vergangen, so wird der Code der Ressourcenberechnung übersprungen.
Habe ich das so richtig verstanden ?
Ich lege nun z.b. fest, dass diese Just-In-Time Aktion aller einer Minute durchgeführt werden soll.
Also: Der Spieler ruft eine Seite auf. Bei diesem Aufruf wird nun die aktuelle Zeit in der DB gespeichert. Sobald der Spieler das nächste mal etwas aufruft bzw. aktualisiert, wird diese soeben gespeicherte Zeit aus der DB geholt und mit der aktuellen Zeit verglichen.
Sind nun beispielsweise mind. eine Minute vergangen, so werden daraus die Ressourcen berechnet, die der Spieler in dieser Zeit verdienen würde und sie werden in der DB gespeichert. Ist seit dem letzten Aufruf noch keine Minute vergangen, so wird der Code der Ressourcenberechnung übersprungen.
Habe ich das so richtig verstanden ?
gepostet vor 18 Jahre, 7 Monate von Mudder
Ja.. du fragst den letzten Updatezeitpunkt aus und berechnest die Differenz. Dann berechnest wieviel Updateintervalle das sind und berechnest daraus die Ressourcenaktuallisierung.
Das sind dann bei einigen Spielern halt minütlich nen Update und bei anderen erst am nächsten Morgen nach Stunden. Du solltest evtl. auch andere Updateintervalle berücksichtigen.. also statt minütlich vielleicht alle 5 Minuten damit der Server nicht ganz so belastet wird.
Das sind dann bei einigen Spielern halt minütlich nen Update und bei anderen erst am nächsten Morgen nach Stunden. Du solltest evtl. auch andere Updateintervalle berücksichtigen.. also statt minütlich vielleicht alle 5 Minuten damit der Server nicht ganz so belastet wird.
gepostet vor 18 Jahre, 7 Monate von Kelturio
Okay, danke für deine Hilfe.
Bei der Zeitanzeige mache ich es nämlich jetzt genauso mit der Zeitdifferen berechnen etc. also z.b. "noch 1 Minute 05 Sekunden bis zur Fertigstellung" eines Gebäudes. :wink:
Das Dumme ist nur, dass es die verbleibende Zeit immer erst nach einer Aktualisierung der Seite anzeigt, da noch kein Java Script eingebaut ist, welches den Countdown für diese Zeit übernimmt.
Ich kann leider kein Java Script.
Gibt es dafür irgendwo ein geeignetes Java Script ?
Bei der Zeitanzeige mache ich es nämlich jetzt genauso mit der Zeitdifferen berechnen etc. also z.b. "noch 1 Minute 05 Sekunden bis zur Fertigstellung" eines Gebäudes. :wink:
Das Dumme ist nur, dass es die verbleibende Zeit immer erst nach einer Aktualisierung der Seite anzeigt, da noch kein Java Script eingebaut ist, welches den Countdown für diese Zeit übernimmt.
Ich kann leider kein Java Script.
Gibt es dafür irgendwo ein geeignetes Java Script ?
gepostet vor 18 Jahre, 7 Monate von spideyY
hey
mit
floor(); lässt sich das ganz einfach realisieren...
im Login legst du ein timestamp fest
$logintime=floor(time()/3600);
Ausgabe = z.b 300
diesen lässt du in einfach in die DB speichern
in der Index
oder wo auch immer lässt du das ganze berechnen
$newhour=floor(time()/3600); ### neuer Stamp
$diff= $newhour-$oldhour; ## brechnung
wenn der neue stamp 301 ausgibt
ist somit eine stunde vorbei
und du kannst die resourcen. beliebig ausrechnen also mulitplizieren
grüße spidey
mit
floor(); lässt sich das ganz einfach realisieren...
im Login legst du ein timestamp fest
$logintime=floor(time()/3600);
Ausgabe = z.b 300
diesen lässt du in einfach in die DB speichern
in der Index
oder wo auch immer lässt du das ganze berechnen
$oldhour=$altertimestamp; ### der gespeichert wurde (Login)
$newhour=floor(time()/3600); ### neuer Stamp
$diff= $newhour-$oldhour; ## brechnung
wenn der neue stamp 301 ausgibt
ist somit eine stunde vorbei
und du kannst die resourcen. beliebig ausrechnen also mulitplizieren
grüße spidey
gepostet vor 18 Jahre, 7 Monate von Mudder
Du solltest "Aufgaben" niemals JS überlassen! JS kann von den Usern manipuliert werden und man kann sich nicht darauf verlassen das es aktiviert ist.
Ich vermute du hast jetzt folgendes Problem:
Letzte Aktuallisierung: 10:00 Uhr
Dritter Bauernhof wird fertiggestellt: 10:15 Uhr
User loggt sich ein: 10:30 Uhr
Dieses Problem haben viele BG-Admins (mal gehabt).
Hier musst du Schrittweise aktuallisieren. Du aktuallisierst in dem Fall erstmal die Ressourcen bis zum Bauende.. also 10:00 - 10:15 Uhr. In der Zeit (15 Ticks) hat der User mit seinen 2 Bauernhöfen 30 Getreide produziert.
Anschliessend findet die Gebäudeaktuallisierung und die Produktionsberechnung statt. Der User hat nun 3 Bauernhöfe und produziert minütlich 3 Getreide. Jetzt erfolgt wieder eine Aktuallisierung der Ressourcen und der User bekommt nochmal 15 x 3 = 45 Getreide gutgeschrieben.
Du musst bei den Aktuallisierungen also schauen ob in der Zwischenzeit noch ein Gebäude fertig wird und dieses quasi dazwischen schieben.
Ich vermute du hast jetzt folgendes Problem:
Letzte Aktuallisierung: 10:00 Uhr
Dritter Bauernhof wird fertiggestellt: 10:15 Uhr
User loggt sich ein: 10:30 Uhr
Dieses Problem haben viele BG-Admins (mal gehabt).
Hier musst du Schrittweise aktuallisieren. Du aktuallisierst in dem Fall erstmal die Ressourcen bis zum Bauende.. also 10:00 - 10:15 Uhr. In der Zeit (15 Ticks) hat der User mit seinen 2 Bauernhöfen 30 Getreide produziert.
Anschliessend findet die Gebäudeaktuallisierung und die Produktionsberechnung statt. Der User hat nun 3 Bauernhöfe und produziert minütlich 3 Getreide. Jetzt erfolgt wieder eine Aktuallisierung der Ressourcen und der User bekommt nochmal 15 x 3 = 45 Getreide gutgeschrieben.
Du musst bei den Aktuallisierungen also schauen ob in der Zwischenzeit noch ein Gebäude fertig wird und dieses quasi dazwischen schieben.
gepostet vor 18 Jahre, 7 Monate von Kelturio
@spideyY:
Thx. :wink:
@Mudder:
Ne, das mit den Ress nachschreiben meinte ich gar nicht.
Ich meinte es so:
Der User klcikt z.b. auf "Bauernhof ausbauen". Nun erscheint eine Zeit "Noch 00:00:12 bis zur Fertigstellung". Diese Zeit bleibt aber nur stehen und es wird somit kein Countdown "angezeigt", da kein JS eingebunden ist. Erst wenn der User die Seite z.b. nach 4 Sekunden wieder aktualisiert wird wieder die aktuelle Zeit mit der des Baubeginns in der DB verglichen und es steht eben da "Noch 00:00:08 bis zur Fertigstellung".
Ich möchte aber nun das die Zeit vor den Augen des Users wie ein Countdown abläuft.
Wie geht das ?
Thx. :wink:
@Mudder:
Ne, das mit den Ress nachschreiben meinte ich gar nicht.
Ich meinte es so:
Der User klcikt z.b. auf "Bauernhof ausbauen". Nun erscheint eine Zeit "Noch 00:00:12 bis zur Fertigstellung". Diese Zeit bleibt aber nur stehen und es wird somit kein Countdown "angezeigt", da kein JS eingebunden ist. Erst wenn der User die Seite z.b. nach 4 Sekunden wieder aktualisiert wird wieder die aktuelle Zeit mit der des Baubeginns in der DB verglichen und es steht eben da "Noch 00:00:08 bis zur Fertigstellung".
Ich möchte aber nun das die Zeit vor den Augen des Users wie ein Countdown abläuft.
Wie geht das ?
gepostet vor 18 Jahre, 7 Monate von spideyY
hey
hast du eine Lösung gefunden , wie du deine Res. speicherst die du bisher abgewartet hast. ?
ansonsten
vl hilft dir das weiter
$dauer_stunden="10"; #### hier die max Zeit für die Baumine
$maxwert="300"; #### Der maximal wert wenn du die Goldmine 100% fertig gebaut hast
$dauer_zurzeit="1"; #### hier die Zeit(Stunden) die du bisher absolviert hast
$lastgold="30"; ####### hier rufst du den untn gespeichertn wert von deiner DB auf
$dauer = $dauer_stunden-$dauer_zurzeit;
echo "Dauer: $dauer Stunden
";
echo "Gold bis jetzt: $lastgold
";
echo "Gold max: $maxwert
";
$rech = $maxwert * $dauer_zurzeit / $dauer_stunden - $lastgold;
$er= $rech+$lastgold; ################## diesenwert speichsert in deine DB
echo "neues Gold: $rech + Gold bis jetzt: $lastgold
";
echo "Ergebnis: $er";
?>
Zur deiner Frage, eines Countdowns
vl ist auch deine Lösung hier zufinden
www.galaxy-news.de/forum/viewtopic.php?t=1488
grüße spid
[/url]
hast du eine Lösung gefunden , wie du deine Res. speicherst die du bisher abgewartet hast. ?
ansonsten
vl hilft dir das weiter
$bau="Goldmine";
$dauer_stunden="10"; #### hier die max Zeit für die Baumine
$maxwert="300"; #### Der maximal wert wenn du die Goldmine 100% fertig gebaut hast
$dauer_zurzeit="1"; #### hier die Zeit(Stunden) die du bisher absolviert hast
$lastgold="30"; ####### hier rufst du den untn gespeichertn wert von deiner DB auf
$dauer = $dauer_stunden-$dauer_zurzeit;
echo "Dauer: $dauer Stunden
";
echo "Gold bis jetzt: $lastgold
";
echo "Gold max: $maxwert
";
$rech = $maxwert * $dauer_zurzeit / $dauer_stunden - $lastgold;
$er= $rech+$lastgold; ################## diesenwert speichsert in deine DB
echo "neues Gold: $rech + Gold bis jetzt: $lastgold
";
echo "Ergebnis: $er";
?>
Zur deiner Frage, eines Countdowns
vl ist auch deine Lösung hier zufinden
www.galaxy-news.de/forum/viewtopic.php?t=1488
grüße spid
[/url]
gepostet vor 18 Jahre, 7 Monate von Mudder
Hab dir mal eben nen JS-Zeitzähler gebastelt..
Mudders Endzeit
00:01:00
00:02:10
Schönen Gruss ans "Danke An"-Board
Mudders Endzeit
00:01:00
00:02:10
Schönen Gruss ans "Danke An"-Board
gepostet vor 18 Jahre, 7 Monate von Kelturio
Okay, vielen Dank euch.
Ich werde das alles sobald als möglich testen. :wink:
Ich werde das alles sobald als möglich testen. :wink:
gepostet vor 18 Jahre, 7 Monate von Kelturio
Original von Mudder
Alternative wäre eine "Just-In-Time" Aktuallisierung. Statt einer Stundenproduktion teilst du das in eine Minuten- (oder ein anderen Rythmus) -Produktion und aktuallisierst die Ressourcen bei jedem Abruf des Spielers. Du speicherst hierzu einmal wann das letzte Update stattfand und berechnest dann den Produktionsunterschied bis zum aktuellen Zeitpunkt. Damit die Ressourcen nicht bei jedem Seitenaufruf überhand nehmen kann man z.B. auch ein 15-Minuten Rythmus nehmen. Das Script schaut wann das letzte Update statt fand (diese Abfrage muss man bei jedem Aufruf weiterhin machen bzw. kann sie dann evtl. auch in der Session speichern) und wenn ein voller Rythmus rum ist bzw. ein neuer Anfang (Bei 15-Minuten wäre 13:17 Uhr dann z.B. der nächste, auch wenn der letzte erst 13:14 Uhr statt gefunden hat).
Generell verteilst du die Updates damit auf das ganze Spielgeschehen.
Ich habe da nochmal eine Frage:
Wie kann ich nun prüfen lassen, ob es genau 12.00 Uhr oder ob es nun genau 14.15 Uhr etc. ist ?
Denn wenn der Spieler nun 14.12 Uhr aktualisiert bekommt er nun noch einmalig die Ress für diesen Rhytmus, wenn der Spieler dann von 12.15 Uhr bis 12.30 Uhr aktualisiert bekommt er die Ress von diesem Rhytmus.
Denn ich muss ja wissen in welchem Rhytmus sich gerade jemand befindet, denn es soll ja auch keiner zweimal Ress in einem Rhytmus bekommen etc.
gepostet vor 18 Jahre, 7 Monate von Mudder
Du musst einmal sagen welchen Rythmus das nun gibt und dann speicherst du nach jeder Aktuallisierung die den Zeitpunkt dieses Updates.
Wenn du nun alle 15 Minuten ein Update machst und der User sich zum 12 Uhr einloggt, dann machst du das Update bis 12 Uhr.. ruft er die Seite nun um 12:10 Uhr auf, dann fand kein Update statt und das letzte Update war weiterhin um 12 Uhr. Ruft der User nun um 12:20 wieder die Seite auf, dann ist also weiterhin 12 Uhr das letzte Update und ein Rythmus dabei rum (nämlich 12:15 Uhr). Also aktuallisieren wir dem User die Ressourcen und speichern das letzte Update auf 12:15 (wo die letzte Gutschrift stattfand).
Wenn du nun alle 15 Minuten ein Update machst und der User sich zum 12 Uhr einloggt, dann machst du das Update bis 12 Uhr.. ruft er die Seite nun um 12:10 Uhr auf, dann fand kein Update statt und das letzte Update war weiterhin um 12 Uhr. Ruft der User nun um 12:20 wieder die Seite auf, dann ist also weiterhin 12 Uhr das letzte Update und ein Rythmus dabei rum (nämlich 12:15 Uhr). Also aktuallisieren wir dem User die Ressourcen und speichern das letzte Update auf 12:15 (wo die letzte Gutschrift stattfand).
gepostet vor 18 Jahre, 7 Monate von Kelturio
Ja, also der Rhytmus soll aller 15 Minuten sein.
Nun speichere ich bei jeder Aktualisierung den Timestamp ab.
Aber wie kann ich diesen Timestamp nun in die Uhrzeit umrechnen wie 12.10 Uhr oder so ?
Denn ich muss bei den "Ticks" ja die Uhrzeit beachten wann die nächste Aktualisierung erfolgen soll.
Nun speichere ich bei jeder Aktualisierung den Timestamp ab.
Aber wie kann ich diesen Timestamp nun in die Uhrzeit umrechnen wie 12.10 Uhr oder so ?
Denn ich muss bei den "Ticks" ja die Uhrzeit beachten wann die nächste Aktualisierung erfolgen soll.
gepostet vor 18 Jahre, 7 Monate von Mudder
*seufz*
Jetzt bin ich mal ein Arschloch und sage dir keine Lösung, sondern das sollst du mal selber rausfinden. Es bringt nix wenn ich dir das halbe Spiel konzeptioniere und du dir garnicht vorstellen kannst wie das funktionieren soll. (Ist jetzt nicht bös gemeint)
Du brauchst dir zur Zeitberechnung eigentlich nur anschauen was PHP für Funktionen anbietet. Du solltest UNIX-Timestamps verwenden und dir die Funktionen raussuchen die damit arbeiten. Wie kann man den aktuellen Timestamp auslesen, wie kann man für ein Datum ein Timestamp erstellen, wie kann man aus einem Timestamp ein Datum machen?
Du speicherst also den Tick (immer den Anfang, also :00, :15 .. mit ab und vergleichst es mit dem aktuellen Timestamp.. dann einfach nur rausrechnen wieviele Ticks (900 Sekunden) zwischenzeitlich vorkamen und für den Zeitpunkt (z.B. 17:30) den letzten Updatetimestamp setzen.
Jetzt bin ich mal ein Arschloch und sage dir keine Lösung, sondern das sollst du mal selber rausfinden. Es bringt nix wenn ich dir das halbe Spiel konzeptioniere und du dir garnicht vorstellen kannst wie das funktionieren soll. (Ist jetzt nicht bös gemeint)
Du brauchst dir zur Zeitberechnung eigentlich nur anschauen was PHP für Funktionen anbietet. Du solltest UNIX-Timestamps verwenden und dir die Funktionen raussuchen die damit arbeiten. Wie kann man den aktuellen Timestamp auslesen, wie kann man für ein Datum ein Timestamp erstellen, wie kann man aus einem Timestamp ein Datum machen?
Du speicherst also den Tick (immer den Anfang, also :00, :15 .. mit ab und vergleichst es mit dem aktuellen Timestamp.. dann einfach nur rausrechnen wieviele Ticks (900 Sekunden) zwischenzeitlich vorkamen und für den Zeitpunkt (z.B. 17:30) den letzten Updatetimestamp setzen.
gepostet vor 18 Jahre, 7 Monate von Kelturio
Hmm, also ich denke es geht so:
strftime("%H : %M", mktime());
Also:
Als erstes prüfe ich ob ein neuer Tick angefangen hat, also sagen wir z.b. das es nun 12:12 Uhr ist und der User aktualisiert die Page.
Dann sehe ich nach ob der Timestamp in der DB der von 12:00 Uhr ist mit
if (strftime("%H : %M") == 12 : 00)
Hmm, hier bleibe ich irgendwie hängen, habe mir nun paar Seiten durchgesehen, aber ich kann es mir nur so erklären. Stimmt das so ?
Da müsste man ja haufenweise Abfragen machen, also ob es gerade 12:00 Uhr ist oder 12:15 Uhr oder 12.30 Uhr und so weiter.
Das Dumme ist, dass es ein Projekt für die Schule ist und ich muss das in einer Woche haben.
strftime("%H : %M", mktime());
Also:
Als erstes prüfe ich ob ein neuer Tick angefangen hat, also sagen wir z.b. das es nun 12:12 Uhr ist und der User aktualisiert die Page.
Dann sehe ich nach ob der Timestamp in der DB der von 12:00 Uhr ist mit
if (strftime("%H : %M") == 12 : 00)
Hmm, hier bleibe ich irgendwie hängen, habe mir nun paar Seiten durchgesehen, aber ich kann es mir nur so erklären. Stimmt das so ?
Da müsste man ja haufenweise Abfragen machen, also ob es gerade 12:00 Uhr ist oder 12:15 Uhr oder 12.30 Uhr und so weiter.
Das Dumme ist, dass es ein Projekt für die Schule ist und ich muss das in einer Woche haben.
gepostet vor 18 Jahre, 7 Monate von Crafty-Catcher
Und wenn Nachts niemand klickt?
Einfacher wäre:
Anzahl Ticks = floor((Timestamp jetzt - Letzter gespeicherter Timestamp) / 900)
Aber da muss man dann wieder aufpassen, dass man nicht den "falschen" Timestamp in der DB ablegt und sich das ganze vortlaufend verschiebt also
Timestamp_neu = Anzahl Ticks * 900 + Letzter gespeicherter Timestamp
Und zum Thema Zeit: http://www.selfphp.de/funktionsreferenz/datums_und_zeit_funktionen/date.php
oder aber
http://de3.php.net/manual/de/function.date.php
Einfacher wäre:
Anzahl Ticks = floor((Timestamp jetzt - Letzter gespeicherter Timestamp) / 900)
Aber da muss man dann wieder aufpassen, dass man nicht den "falschen" Timestamp in der DB ablegt und sich das ganze vortlaufend verschiebt also
Timestamp_neu = Anzahl Ticks * 900 + Letzter gespeicherter Timestamp
Und zum Thema Zeit: http://www.selfphp.de/funktionsreferenz/datums_und_zeit_funktionen/date.php
oder aber
http://de3.php.net/manual/de/function.date.php
gepostet vor 18 Jahre, 7 Monate von Kelturio
Ja, das bei selfphp habe ich mir auch durchgelesen, aber ich verstehe trotzdem noch nicht ganz wie ich das dann zurück rechnen soll.
Aslo z.b. klickt der User 12:12 Uhr. Dann muss ich in die DB als letzten Tick ja nun 12:00 Uhr eintragen lassen, aber wie mache ich das ?
Ich stelle mir das mit haufenweise if-Abfragen vor, also:
if (gmstrftime("%H:%M", mktime()) == 12:12) {
Letzter Tick = "12:00";
oder so.
Wie kann ich das realisieren ?
Aslo z.b. klickt der User 12:12 Uhr. Dann muss ich in die DB als letzten Tick ja nun 12:00 Uhr eintragen lassen, aber wie mache ich das ?
Ich stelle mir das mit haufenweise if-Abfragen vor, also:
if (gmstrftime("%H:%M", mktime()) == 12:12) {
Letzter Tick = "12:00";
oder so.
Wie kann ich das realisieren ?
gepostet vor 18 Jahre, 7 Monate von Crafty-Catcher
Das steht schon in meinem Post.
Einfach durch 900 Teilen und abrunden.
Einfach durch 900 Teilen und abrunden.
gepostet vor 18 Jahre, 7 Monate von Mudder
.. war bischel zu langsam und streich das mal eben
gepostet vor 18 Jahre, 7 Monate von Kelturio
Durch 900 teilen und abrunden. So bekomme ich aber nur die Anzahl der Ticks, die seit der letzten Aktualisierung vergangen sind.
Anzahl_Ticks = floor((mktime() - letzter Timestamp) / 900);
Sehen wir es mal so: Der User registriert sich nun neu bei dem Spiel um 12:12 Uhr.
Wie kann ich da bei ihm 12:00 Uhr als Timestamp in die DB eintragen, denn mit Ticks kann ich hier noch nich rechnen, da ein neuer User noch keine hat.
Anzahl_Ticks = floor((mktime() - letzter Timestamp) / 900);
Sehen wir es mal so: Der User registriert sich nun neu bei dem Spiel um 12:12 Uhr.
Wie kann ich da bei ihm 12:00 Uhr als Timestamp in die DB eintragen, denn mit Ticks kann ich hier noch nich rechnen, da ein neuer User noch keine hat.
gepostet vor 18 Jahre, 7 Monate von Crafty-Catcher
Ein einziges mal musst du den Startick natürlich in der DB angeben.
Schreib in die DB den timestamp von heute 12 Uhr und alle anderen Berechnungen basieren dann darauf.
Oder sind die Ticks für alle User unterschiedlich?
Schreib in die DB den timestamp von heute 12 Uhr und alle anderen Berechnungen basieren dann darauf.
Oder sind die Ticks für alle User unterschiedlich?
gepostet vor 18 Jahre, 7 Monate von Kelturio
Das geht doch nicht - ich kann doch nicht einfach den Starttick von 12 Uhr angeben.
Denn was ist, wenn sich jemand nun um 18 Uhr registriert ?!
Dann würde dieser beim nächseten Tick ja gleich mehrere Ticks ausgezahlt bekommen.
Denn was ist, wenn sich jemand nun um 18 Uhr registriert ?!
Dann würde dieser beim nächseten Tick ja gleich mehrere Ticks ausgezahlt bekommen.
gepostet vor 18 Jahre, 7 Monate von Crafty-Catcher
Der Tick ändert sich doch nachdem du die Seite einmal gestartet hast.
Du aktualisierts ihn doch immer. Das habe ich oben auch schon geschrieben.... Tick_neu -> kommt natürlich in die DB
Du aktualisierts ihn doch immer. Das habe ich oben auch schon geschrieben.... Tick_neu -> kommt natürlich in die DB
gepostet vor 18 Jahre, 7 Monate von Kelturio
Ach soo, also läuft das nun so:
Ich speicher in der Timestamp Tabelle von jedem User z.b. die Geburtsstunde des Games ab, z.b. 12:00 Uhr. :wink:
Wenn der User nun die Seite das erste mal aufruft bzw. aktualisiert, so berechne ich gleich erst einmal die Ticks, welche bis jetzt vergangen sind:
Anzahl Ticks = floor((mktime() - Letzter Timestamp (der von 12 Uhr)) / 900)
Aus diesen bereits vergangenen Ticks berechne ich nun den neuen Timestamp, also:
Timestamp_neu = Anzahl Ticks * 900 + Letzter gespeicherter Timestamp
So ist dann praktisch die letzte volle Viertelstunde gespeichert wurden und nun brauch ich einfach immer nur die Timestamps bei einer Aktualisierung auslesen, vergleichen, die Ticks berechnen, Ress auszahlen und den neuen Timestamp setzen ?
Eine Frage bleibt da noch:
Wie kann ich verhindern, dass dem User die ersten überflüssigen Ticks usgezahlt werden ?
Gibt es irgendwie ne Funktion oder so, die prüft, ob das Script zum aller ersten Mal aufgerufen wurde oder so ?
Ich speicher in der Timestamp Tabelle von jedem User z.b. die Geburtsstunde des Games ab, z.b. 12:00 Uhr. :wink:
Wenn der User nun die Seite das erste mal aufruft bzw. aktualisiert, so berechne ich gleich erst einmal die Ticks, welche bis jetzt vergangen sind:
Anzahl Ticks = floor((mktime() - Letzter Timestamp (der von 12 Uhr)) / 900)
Aus diesen bereits vergangenen Ticks berechne ich nun den neuen Timestamp, also:
Timestamp_neu = Anzahl Ticks * 900 + Letzter gespeicherter Timestamp
So ist dann praktisch die letzte volle Viertelstunde gespeichert wurden und nun brauch ich einfach immer nur die Timestamps bei einer Aktualisierung auslesen, vergleichen, die Ticks berechnen, Ress auszahlen und den neuen Timestamp setzen ?
Eine Frage bleibt da noch:
Wie kann ich verhindern, dass dem User die ersten überflüssigen Ticks usgezahlt werden ?
Gibt es irgendwie ne Funktion oder so, die prüft, ob das Script zum aller ersten Mal aufgerufen wurde oder so ?
gepostet vor 18 Jahre, 7 Monate von Crafty-Catcher
Hm setz den Tick Startzeitpunkt einfach bei dem aller ersten User der sich registriert auf den aktuellen Timestamp.
gepostet vor 18 Jahre, 7 Monate von Kelturio
Ach soo, da ist es ja auch egal zu welcher Zeit der Timestamp gesetzt wird, denn es wird dann eh wieder abgerundet und der User bekommt seine rechtmäßigen Ticks ausgezahlt.
Oh man, vielen, vielen Dank Leute.
Sry, dass es euch vllt. ab und zu schwer mit mir fällt, aber zur Zeit schiebe ich etwas Panik, da ich für dieses kleine Projekt wie gesagt nur noch eine Woche Zeit habe. Jedenfalls für die groben Dinge wie Ressberechnung, Gebäudebau etc.
Denn dies wird meine letzte Note vor den Abiprüfungen und da muss ich noch bissl was rausreißen.
Edit:
Soa, die Ressberechnung funktioniert jetzt einwandfrei.
Nur gibt es bei dieser Life-Time-Aktion einen Nachteil.
Wenn jetzt jemand mal länger weg ist oder so, dann werden diesem User ja in der Zeit gar keine Ress gutgeschrieben und somit lohnt es sich ja gar nicht erst jemanden zu raiden, da er erst immer Ress bekommt, wenn er eine Seite aktualisiert.
Wie kann man es machen, das aller einer Viertelstunde die Ress dazu gerechnet werden, auch wenn man off ist ?
Oh man, vielen, vielen Dank Leute.
Sry, dass es euch vllt. ab und zu schwer mit mir fällt, aber zur Zeit schiebe ich etwas Panik, da ich für dieses kleine Projekt wie gesagt nur noch eine Woche Zeit habe. Jedenfalls für die groben Dinge wie Ressberechnung, Gebäudebau etc.
Denn dies wird meine letzte Note vor den Abiprüfungen und da muss ich noch bissl was rausreißen.
Edit:
Soa, die Ressberechnung funktioniert jetzt einwandfrei.
Nur gibt es bei dieser Life-Time-Aktion einen Nachteil.
Wenn jetzt jemand mal länger weg ist oder so, dann werden diesem User ja in der Zeit gar keine Ress gutgeschrieben und somit lohnt es sich ja gar nicht erst jemanden zu raiden, da er erst immer Ress bekommt, wenn er eine Seite aktualisiert.
Wie kann man es machen, das aller einer Viertelstunde die Ress dazu gerechnet werden, auch wenn man off ist ?
gepostet vor 18 Jahre, 7 Monate von abuzeus
Dafür brauchst du entweder ein immer laufendes Serverprogramm, einen sog. Daemon, der dir die Tick-Arbeit abnimmt, oder du spannst (unter Unix) Genosse cron dafür ein (unter Windows gibts das bestimmt auch irgendwie) oder du musst halt bei Raid/Spionageaktionen den Tick für den geraideten Spieler durchführen und dann einfach seinen "Letzte-Auszahlung-war-um" Stamp umsetzen...
gepostet vor 18 Jahre, 7 Monate von Kelturio
Hmm, klingt ziemlich komplex, aber das mit der Spionageaktion klingt nicht schlecht.
gepostet vor 18 Jahre, 7 Monate von Crafty-Catcher
Oder du berechnest die Resss für den USer falls er angegriffen wird von irgend jemanden.
gepostet vor 18 Jahre, 7 Monate von Kelturio
So, mit den beiden Formeln hier kann man ja die Produktion für Ticks berechnen, also Rohstoffe für eine Viertelstunde.
Anzahl Ticks = floor((mktime() - Letzter Timestamp (der von 12 Uhr)) / 900)
Timestamp_neu = Anzahl Ticks * 900 + Letzter gespeicherter Timestamp
Jetzt wollte ich gerne mal von euch wissen.
Wie kann man eine Abfrage machen, ob es gerade zwischen 16 Uhr und 18 Uhr z.b. ist ?
Denn ich würde gerne einen Fahrenden Händler in mein Game einbauen wollen und bei dem sollen die User von 16 Uhr - 18 Uhr (z.b.) handeln können.
Ich würde es jetzt so berechnen, aber weiß nicht ob das richtig ist:
Also als erstes würde ich bei den Usern, wenn sie sich bei meinem Game registrieren den Timestamp des Geburtsdatums des Games eintragen, ich würde 0:00 Uhr eintragen.
Dann würde ich die 16 Uhr berechnen mit:
Ankunft des Händlers = floor((mktime() - Letzter Timestamp) / 57600)
Abfahrt des Händlers = floor((mktime() - Letzter Timestamp) / 64800)
Timestamp_neu = Abfahrt des Händlers + 79200
Kann man das so machen ?
Anzahl Ticks = floor((mktime() - Letzter Timestamp (der von 12 Uhr)) / 900)
Timestamp_neu = Anzahl Ticks * 900 + Letzter gespeicherter Timestamp
Jetzt wollte ich gerne mal von euch wissen.
Wie kann man eine Abfrage machen, ob es gerade zwischen 16 Uhr und 18 Uhr z.b. ist ?
Denn ich würde gerne einen Fahrenden Händler in mein Game einbauen wollen und bei dem sollen die User von 16 Uhr - 18 Uhr (z.b.) handeln können.
Ich würde es jetzt so berechnen, aber weiß nicht ob das richtig ist:
Also als erstes würde ich bei den Usern, wenn sie sich bei meinem Game registrieren den Timestamp des Geburtsdatums des Games eintragen, ich würde 0:00 Uhr eintragen.
Dann würde ich die 16 Uhr berechnen mit:
Ankunft des Händlers = floor((mktime() - Letzter Timestamp) / 57600)
Abfahrt des Händlers = floor((mktime() - Letzter Timestamp) / 64800)
Timestamp_neu = Abfahrt des Händlers + 79200
Kann man das so machen ?
gepostet vor 18 Jahre, 7 Monate von Crafty-Catcher
Mach doch einfach
if(date("G")>=16 && date("G")<=18){
//fliegender Teppich
}
Ich hab dir dne Link zur Date Funktion doch schonmal gezeigt...
if(date("G")>=16 && date("G")<=18){
//fliegender Teppich
}
Ich hab dir dne Link zur Date Funktion doch schonmal gezeigt...
gepostet vor 18 Jahre, 7 Monate von Kelturio
Stimmt, so geht es auch. Daran habe ich jetzt gar nicht gedacht, thx.
Ich habe jetzt auch mal das mit dem Countdown bei dem Bau versucht, aber irgendwie funzt der nicht, also schein ich ihn falsch einzubauen.
Und zwar habe ich diesen Counter hier von Mudder genommen:
Mudders Endzeit
00:01:00
00:02:10
Ich habe also den oberen Scriptteil ordnungsgemäß in den Header meiner gebaeude.php gepackt.
Soweit so gut.
Aber nun habe ich das Problem, dass der Bau eine Funktion ist und auch der weitere Bauablauf ist eine Funktion, die einem die neue übrig gebliebene Zeit aus der DB bis zum Bauende berechnet.
Die Sekunden bis zum Bauende sind in einer Variable gespeichert, welche in der Funktion ist, sie heißt $time.
Also habe ich erst einmal ans Ende der Funtkion geschrieben "return $time".
Dann bin ich wieder in die gebaeude.php gegangen und habe unter der Funktion die Ausgabe der verbleibenden Zeit gemacht, also so:
echo "";
Dann kommt aber immer wieder die Meldung, dass die Variable $time undefiniert ist. Wieso das ? Immerhin habe ich sie doch mit return zurück befördert oder nicht ?
Ich habe jetzt auch mal das mit dem Countdown bei dem Bau versucht, aber irgendwie funzt der nicht, also schein ich ihn falsch einzubauen.
Und zwar habe ich diesen Counter hier von Mudder genommen:
Mudders Endzeit
00:01:00
00:02:10
Ich habe also den oberen Scriptteil ordnungsgemäß in den Header meiner gebaeude.php gepackt.
Soweit so gut.
Aber nun habe ich das Problem, dass der Bau eine Funktion ist und auch der weitere Bauablauf ist eine Funktion, die einem die neue übrig gebliebene Zeit aus der DB bis zum Bauende berechnet.
Die Sekunden bis zum Bauende sind in einer Variable gespeichert, welche in der Funktion ist, sie heißt $time.
Also habe ich erst einmal ans Ende der Funtkion geschrieben "return $time".
Dann bin ich wieder in die gebaeude.php gegangen und habe unter der Funktion die Ausgabe der verbleibenden Zeit gemacht, also so:
echo "";
Dann kommt aber immer wieder die Meldung, dass die Variable $time undefiniert ist. Wieso das ? Immerhin habe ich sie doch mit return zurück befördert oder nicht ?
gepostet vor 18 Jahre, 7 Monate von Chojin
Admiiiiiiinnn!
kann man bitte das Thema sortieren, die letzten Posts haben absolut nichts mehr mit dem orginalthema zu tun.
@Kelturio: mach bitte ein neues Thema auf, wenn du wieder hilfe mit java, html oder sonstwas brauchst und es nichts mit der eigentlichen Unterhaltung zu tun hat.
reg4rds
chojin
kann man bitte das Thema sortieren, die letzten Posts haben absolut nichts mehr mit dem orginalthema zu tun.
@Kelturio: mach bitte ein neues Thema auf, wenn du wieder hilfe mit java, html oder sonstwas brauchst und es nichts mit der eigentlichen Unterhaltung zu tun hat.
reg4rds
chojin
gepostet vor 18 Jahre, 7 Monate von Kelturio
Ok, geht klar. Ich dachte nur, da es wieder um den Counter von Mudder geht, dass ich hier weiter posten sollte.