mmofacts.com

Verdienst Berechnen

gepostet vor 17 Jahre, 3 Monate von standard
hi,
Bisher hab ich bei jedem Aufruf eines Users den Verdienst neu berechnet im prinzip so:
Verdienst pro sekunde ist bekannt.
Aktuelle Zeit - Lezte Aktion um die vergangene zeit zu ermitteln.
Dann wird der verdienst einfach mal die vergangenen sekunden gut geschrieben.
Also sehr simpel.
Ich denke nicht das das Optimal ist.
Dachte mir das ganze nun automatisch berechnen lassen also per Crontab. Ist das effektiver? Geht bei einem 5min (bsp.) crontab das echtzeitgefühl (wenn man es so nennen kann) verloren?
Gibt es andere lösungen?
Mfg
Flo
gepostet vor 17 Jahre, 3 Monate von Todi42
Du hast einen Wert, der sich linear mit der Zeit ändert und Du möchtest diesen Wert bei jeden Seiten-Abruf sekunden-genau darstellen? Dann ist Dein Vorgehen doch prima, was gefällt Dir nicht an dem?
Oder mal anders herum: würdest Du in einer Datenbank lieber das Geburtsdatum oder das Alter eine Person speichern?
gepostet vor 17 Jahre, 3 Monate von Sensei
Also ich weiss nicht ob es dir hilft. die beste oder bessere lösung muss es auch nicht sien, aber wir haben ressourcen so gelöst.
Beim Login ins Spiel wird der Ressourcenwert aus der Datenbank gelesen. Der aktuelle Verdienst wird nun laufend per JS im Browser berechnet, damit der User schön wechselnde Zahlen sieht, die DB aber nicht belastet wird.
Dabei entstehen natürlich Ungenauigkeiten.
Beim Betretn der Seite "Bauen" , wo die genauen Ressourcen wichtig sind, wird der exakte wert berechnet ausgegeben und überschrieben.
mfg
sensei
gepostet vor 17 Jahre, 3 Monate von standard
Ja. im Prinzip ist es auch so bei uns.
Das einzige Prob was ich sehe ist wenn jemand sagen wir mal 10 Tage nicht da ist und wird am 10 Tag angegriffen (Es wird geld geklaut) dann hat das Konto den Wert von vor 10 Tagen.
Ich denke eine Kombination von beiden wäre das beste. Beim aufruf wird aktualliesiert und per cronjob auch noch mal alle 8 oder 12 Stunden.
Mfg
Flo
gepostet vor 17 Jahre, 3 Monate von DrakeL
CronJob halte ich hier für sinnlos. Was wenn Ihr einfach die Werte berechnet zu dem Zeitpunkt wann Sie gebraucht werden?
Also immer wenn der Benutzer selbst die Rohstoffe ausgehändigt im Browser bekommt werden Sie berechnet. Aber auch wenn auf dem Planeten/Gebiet etwas passiert, Spionage oder Angriff z.B., werden die Rohstoffe von der letzten Berechnung bist zum Zeitpunkt der Spionage/des Angriffs berechnet und dann erfolgt erst die Spionage/der Angriff.
Dann habt Ihr für Spionagen/Angriffe immer den genauen aktuellen Stand der Rohstoffe. Nicht 10 Tage Unterschied wie jetzt, oder 5 Stunden mit CronJobs.
So haben wir dies immer gemacht, was kein Problem darstellte.
Eventuell solltet Ihr im übrigen nicht Sekundengenau berechnen. Sondern im 5 Minuten Takt die Rohstoffe, daher müsstest Ihr die Sekunden seit der letzten Berechnung laden, wenn diese kleiner als 5 Min sind macht ihr nichts (das spart sehr viel Performance, wenn ein User gerade oft in seinem Account rum klickt) und wenn mehr als 5 Min vergangen seit nehmt Ihr die Anzahl der Sekunden modulo 5 Min (damit hättet Ihr die Anzahl der vollen 5 Minuten Takte) und anhand dessen bestimmt Ihr die neue Zeit der letzten Berechnung (ist dann nicht immer die aktuelle Zeit, sondern +- 5 Min halt!) und die dazugewonnen Rohstoffe.
z.B.:
letzte Berechnung 12:15:10, neuer Aufruf 12:16:20, unterschied 1:10 => nichts passiert.
letzte Berechnung 12:15:10, neuer Aufruf 12:25:23, unterschied 10:13 => 2 Takte a 5 Min. neuer berechnungszeit 12:25:10 (nicht aktuelle Uhrzeit, sondern die letzte Berechnungszeit + Takte * 5 Min).
Kann man natürlich mit jeder beliebigen Taktfrequenz machen (zwischen 1 Min und 1 Stunde wären sinnvolle Werte)
PS: Bei Sekundengenauer Berechnung hat man auch oft Abweichungen wegen Rundungsfehler.
gepostet vor 17 Jahre, 3 Monate von standard
Ja das klingt vielversprechend.
Danke werde ich mit einbeziehen.
Mfg
Flo
gepostet vor 17 Jahre, 3 Monate von Agmemon
Original von DrakeL
Kann man natürlich mit jeder beliebigen Taktfrequenz machen (zwischen 1 Min und 1 Stunde wären sinnvolle Werte)

Wenn man aber eine Taktfrequenz nimmt, die merklich höher als 1 Sek. ist, kann ich doch gleich auf Ticks umstellen und es durch einen Cronjob rechnen lassen. Mit Echtzeit hat das dann nicht mehr viel zu tun.
gepostet vor 17 Jahre, 3 Monate von DrakeL
Würde ich nicht sagen. Es gibt viele Spiele, die zwar Gebäude und Forschungen und das alles in Echtzeit laufen lassen, aber die Rohstoffberechnung in solchen Takten macht.
Ich finde das auch sehr sinnvoll, da es für die Performance schonender ist und eigentlich auch für den Nutzer einfacher nachvollziehbar.
Und ein Spiel als "nicht Echtzeit" abzustempeln nur weil die Rohstoffe nicht hochzählen, sondern halt in 5 Min Rythmus hinzugezählt werden halte ich für... naja .
Im übrigen ist CronJob nochmal was anderes. Für den Benutzer nicht, aber für den Entwickler. Da a) CronJobs nie Sekundengenau arbeiten, muss eine Sicherung aufm Server erfolgen, dass auch bei Schwankungen richtig berechnet wird und b) Serverlast alle 5 Minuten (ja nach Takt erfolgt) egal, ob jemand die Daten gerade brauchen würde oder nicht.
Nach der oberen Methode werden die Rohstoffe nur berechnet, wenn Sie auch wirklich gebraucht werden.
Daher finde ich CronJobs für sowas ... fürn Arsch. ^^
gepostet vor 17 Jahre, 3 Monate von EugenE
Also bei mir werden die Gebäude / Einheiten / Forschungen in echtzeit berechnet also bei jedem Aufruf wird geprüft und die Ressourcen werden jede Stunde einmal aktualisiert

Auf diese Diskussion antworten