mmofacts.com

Hey... grundlegendes problem?!

gepostet vor 19 Jahre von blackasgard
ich bin der weilen ein BG am erstellen....so weit so gut...
grundlegende gerüst hab ich auch "NUR" ich habe ein grundlegendes problem und zwar

ich möchte gerne das mein BG alle 10min "also ticker mäßig" eine bestimmte anzahl an ressorcen auf den jeweiligen acc bucht!

wie kann ich das erreichen das alle 10 min dies geschieht?

kann mir jemand tipps erklärungen faq.... etc geben? wäre ne supi sache...?!
gepostet vor 19 Jahre von Klaus
du speicherst für jeden Account wann zuletzt die Resourcen gebucht wurden. Ich mache das mit einem Timestamp. Dann gucke ich bei jedem Aufruf wieviel Sekunden seit dem letzten Aufstocken vergangen sind, teile das durch die Tick Zeit ( also bei dir /60/10) und abrunden! Dann hast du die Anzahl der vergangenen Ticks und kannst danach aufstocken. Danach den Wert des letzten Aufstockens aktualisieren (time - das was abgerundet wurde).
gepostet vor 19 Jahre von blackasgard
jooo hört sich gut an... aba wie sieht
z.B. der quelltext von einem "timestamp" ?
hast du da eine nähere beschreibung zu?!
thx
gepostet vor 19 Jahre von Klaus
Quelltext? Du benutzt einfach time() und du hast den Timestamp.
gepostet vor 19 Jahre von Störti
Vielleicht noch hinzufügend: Der Timestamp (=> Zeitspempel) ist eine (zur Zeit) 11-stellige Zahl die die Sekunden seit Beginn der Unix-Epoche (01.01.1970 - 00:00:00 Uhr).

Die Funktion time() gibt dir den aktuellen Timestamp zurück, mit der Funktion date() kannst du ihn bearbeitet (siehe auch http://www.php.net/manual/de/function.date.php).
gepostet vor 19 Jahre von Mudder
Ich korrigier dich ja nur ungern aber die Timestamps sind derzeit nur 10-Stellig
z.B. 1130270326
gepostet vor 19 Jahre von _Jan_
und werden auch nichmehr 11 stellig da im jahr 203X (weiss nich genau) schluss ist
gepostet vor 19 Jahre von friedenspanzer
Wenn du die Möglichkeit hast kannst du das auch mittels Cronjob lösen.
gepostet vor 19 Jahre von blackasgard
was soll den ein cornjob sein?
meinste das das jemand anderes 4 me machen soll?!
oda verstehe ich das grad falsch?
gepostet vor 19 Jahre von Klaus
Ein Cronjob kann alle 10 Minuten ein Script aufrufen, dass die Resourcen für alle Spieler erhöht. Ist zwar einfacher aber Serverlastiger.
gepostet vor 19 Jahre von blackasgard
hmmm hast du nen quelltext dazu?
weil mit dem timestamp klappt das net so wie ich das möchte...

"aba noch eine nebenfrage
wenn ich

$timestamp = time();
echo ("$timestamp");
?>

dan kommt eine riesen zahl herraus...
aba ich möchte das der mit stunden,minuten,sec anzeigt.....
wie muss ich das umstellen?"
gepostet vor 19 Jahre von BLUESCREEN
Original von Klaus
Ein Cronjob kann alle 10 Minuten ein Script aufrufen, dass die Resourcen für alle Spieler erhöht. Ist zwar einfacher aber Serverlastiger.

Ob das jetzt mehr oder weniger Last verursacht hängt von der Anzahl der aktiven User ab.
Ich würde eher sagen, dass ein zentrales Update alle 10 min ressourcenschonender ist als das für jeden User bei jedem Zugriff einzeln zu prüfen und gegebenenfalls upzudaten.

Original von blackasgard

aba ich möchte das der mit stunden,minuten,sec anzeigt.....
Benutz date().
gepostet vor 19 Jahre von HaSkEeR
Original von BLUESCREEN
Original von Klaus
Ein Cronjob kann alle 10 Minuten ein Script aufrufen, dass die Resourcen für alle Spieler erhöht. Ist zwar einfacher aber Serverlastiger.

Ob das jetzt mehr oder weniger Last verursacht hängt von der Anzahl der aktiven User ab.
Ich würde eher sagen, dass ein zentrales Update alle 10 min ressourcenschonender ist als das für jeden User bei jedem Zugriff einzeln zu prüfen und gegebenenfalls upzudaten.

Ein einfaches Beispiel: Ein User loggt sich nach 2 Stunden erneut ein
Während bei der Möglichkeit mit Cronjobs alle 10 Minuten, also 12 Mal, ein ganzes Script aufgerufen wurde, wird bei der anderen Möglichkeit ein winziger Quellcode ausgeführt, nämlich einfach die Differenz des letzten Timestamps mit dem aktuellen durch 600 dividiert. Somit können dutzende MySQL Request auf einen reduziert werden, was für den Server sicher angenehmer ist...

Original von blackasgard

dan kommt eine riesen zahl herraus...
aba ich möchte das der mit stunden,minuten,sec anzeigt.....
wie muss ich das umstellen?"

Wie gesagt sind das die Sekunden seit dem 1.1.1970
Wenn du jedes mal, wenn der User neue Res bekommen hat, den aktuellen Timestamp speicherst, sich der User ausloggt und irgendwann wieder einloggt, kannst du ganhz einfach die Zeit herausfinden, die er ausgeloggt war, indem du den aktuellen Timestamp mit dem aus der Datenbank subtrahierst. Dann hast du die Anzahl der Sekunden seit dem letzten Rohstoff-Schub. Die dividierst du durch 600 (= 10 Minuten), rundest ab, und weißt wie oft der User die Rohstoffe geladen bekommen muss.
gepostet vor 19 Jahre von blackasgard
joop gute idee....!
aber es müssen ja auch ressorcen aufgebucht werden wenn der spieler eingeloggt ist...
wie könnte man das machen?!
jemand eine idee?!
gepostet vor 19 Jahre von Klaus
Das beinhaltet das Prinzip doch! Nach Ablauf der 10 Minuten wird das Aufstocken ausgelöst. Egal ob zwischendurch noch X Aktionen ausgeführt wurden oder keine.

Ich würde eher sagen, dass ein zentrales Update alle 10 min ressourcenschonender ist als das für jeden User bei jedem Zugriff einzeln zu prüfen und gegebenenfalls upzudaten.


Meistens muss man sowieso bei jeden Aufruf einige Userdaten laden, da kann man das prima noch einbauen.
gepostet vor 19 Jahre von HaSkEeR
du guggst einfach, ob das aktuelle timestamp bereits 600 sekunden größer ist als das in der datenbank (vom letzten klick). ist dem so, werden resourcen erhöht, wenn nicht, wartet das script noch und wird beim nächsten klick vom user wieder überprüfen...
gepostet vor 19 Jahre von blackasgard
ein weitere neues problem...
und zwar....

mein mann der meine datenbank machen wollte etc sich um das einloggen usw kümmern wollte ist mehr oda weniger ausgestiegen....

ich brauche daher nen paar infos....

wo bekomme ich eine datenbank her die ich nutzen kann?!
wie richte ich mir diese ein?
gibts ein faq dazu?

jemand eine idee?
ich hab im mom 0 ahnung von datenbanken....
war nett wenn mir jemand da was nahe bringen könnte
gepostet vor 19 Jahre von BLUESCREEN
Original von HaSkEeR
Ein einfaches Beispiel: Ein User loggt sich nach 2 Stunden erneut ein
Während bei der Möglichkeit mit Cronjobs alle 10 Minuten, also 12 Mal, ein ganzes Script aufgerufen wurde, wird bei der anderen Möglichkeit ein winziger Quellcode ausgeführt, nämlich einfach die Differenz des letzten Timestamps mit dem aktuellen durch 600 dividiert. Somit können dutzende MySQL Request auf einen reduziert werden, was für den Server sicher angenehmer ist...

Ein einfaches Beispiel: 100 User loggen sich nach zwei Stunden erneut ein.
Während bei der Möglichkeit mit Cronjobs nur 12 Mal Berechnungen ausgeführt werden, wird bei der anderen Möglichkeit die gleiche Datenmenge geändert - jedoch mit 100 Queries.

Es sollte offensichtlich sein, dass 12 Queries besser sind als 100 Queries, wenn beide die gleiche Arbeit verrichten.
gepostet vor 19 Jahre von HaSkEeR
Original von BLUESCREEN
Original von HaSkEeR
Ein einfaches Beispiel: Ein User loggt sich nach 2 Stunden erneut ein
Während bei der Möglichkeit mit Cronjobs alle 10 Minuten, also 12 Mal, ein ganzes Script aufgerufen wurde, wird bei der anderen Möglichkeit ein winziger Quellcode ausgeführt, nämlich einfach die Differenz des letzten Timestamps mit dem aktuellen durch 600 dividiert. Somit können dutzende MySQL Request auf einen reduziert werden, was für den Server sicher angenehmer ist...

Ein einfaches Beispiel: 100 User loggen sich nach zwei Stunden erneut ein.
Während bei der Möglichkeit mit Cronjobs nur 12 Mal Berechnungen ausgeführt werden, wird bei der anderen Möglichkeit die gleiche Datenmenge geändert - jedoch mit 100 Queries.

Es sollte offensichtlich sein, dass 12 Queries besser sind als 100 Queries, wenn beide die gleiche Arbeit verrichten.

Die 12 Querys vom Cronjob beinhalten aber die Daten für alle User, die 100 Querys ohen Cronjob jeweils die Datenmenge eines Users (da der Wert für die DB ja im Skript berechnet wird und nicht für alle 10 Minuten den Eintrag überschreibt)...

Sofern das Spiel also nicht maximal 8 Spieler hat ist meine Methode doch wieder schonender

Und @ blackasgard: Zum Aufsetzen und Administrieren eines Webservers such in Google, das Thema is ziemlich weit. Such da einfach mal nach MySQL oder so...
gepostet vor 19 Jahre von BLUESCREEN
Original von HaSkEeR
Die 12 Querys vom Cronjob beinhalten aber die Daten für alle User, die 100 Querys ohen Cronjob jeweils die Datenmenge eines Users (da der Wert für die DB ja im Skript berechnet wird und nicht für alle 10 Minuten den Eintrag überschreibt)...

Dabei vergisst du aber, dass bei deiner Lösung nicht nur 100 Queries ausgeführt werden müssen, sondern auch erstmal 100 Queries von SQL-Server interpretiert werden müssen. Außerdem muss dabei 100 Mal, z.B. durch Locking, darauf geachtet werden, dass es nicht dazu kommt, dass zwei fast gleichzeitige Aufrufe beide für den selben Zeitraum die Userdaten aktualisieren.
gepostet vor 19 Jahre von dan kirpan
dafür brauchst du aber SHH zugriff z.b. über Putty. Das geht nur bei größeren Servern, ist also nicht bei kleineren Webspace-Paketen dabei.

Wenn du Putty gestartet hast und dich eingeloggt hast tippst du "crontab -e" ein, um deine CronJob-Tabelle zu (e)ditieren. Dann bist du im UNIX-Editor und um eine Zeite einzufügen drückst du (i)nsert. Dann schreibst du:

*/10 * * * * (PHP-Pfad, z. B. /usr/local/bin/php) (absoluter Serverpfad zu dem auszuführenden Script, z.B. /kunden/homepages/web1/html/script.php)

Erklärung: die ersten 5 * sind für die Uhrzeit: 1. für die Minuten, 2. für die Stunden usw. */10 heist, wenn Uhrzeit Minute /10 eine gerade Zahl ist, führe den Befehl aus --> also um *:00 *:10 *:20 *:30 *:40 *:50. du könntest auch 6 Zeilen schreiben mit:
0 * * * *
10 * * * *
20 * * * *
30 * * * *
40 * * * *
50 * * * *
um den selben effekt zu haben...

Auf diese Diskussion antworten