Refresh Page - andere Lösung nötig?

jop!

differenz der grafschaftskoordinaten * 30minuten
also von 1:1:1 zu 1:1:3 ==> 1stunde :)

hmmm
jo die ressourcen sind kein problem... die kann man schnell ausrechnen und mit einer schleife für alle user updaten!
 
naja mit den cronjobs ist das aber wieder die sache. Warum soll ich in der nacht sovielsachen laufen lassen, obwohl kein einziger spieler online ist. Ist also schwachsinnige arbeit :) Cronjobs würd ich auch nur bei tickbasierten Onlinegames verwenden und nicht wie er es machen will. Also wie man es macht, man macht es falsch ;)
 
Aktionen die durchgeführt werden Katalogisieren und in diverse Abhandlungstabellen schreiben.

Das Script das mit dem CronJob läuft, greift dann auf eine dieser Tabellen zu und weiss anhand den katalogisierten Indexen, welche Funktion er aufrufen muss.
Die Abfrage wird natürlich erweitert mit WHERE timestamp < NOW(), sodass keine Aktionen durchgeführt werden, die in der Zukunft liegen.

Bsp:
Ein Tupel in der Tabelle, sieht so aus
ID | AKTION | WERT1 | WERT2
1 | 2 | 2.33 | 5.222

Nach dem auslesen wird auf die Aktion geschaut und die entsprechende Funktion, bzw bei BGs eher Klassen aufgerufen, die dann die neuen errechneten Werte in die DB schreibt.

Das ganze fordet ne Menge Kreativität und Einfallsreichtum...

Andreas
 
Hm, kein Wunder, dass die ganzen Browsergames so langsam sind, wenn die immer SQL für solche Sachen benutzen... :eek:

Gawayn
 
um das thema nochmal neu aufzurollen:
die ressourcen / gebäude / einheiten-produktion / waffenproduktion und dergleichen werden ja jetzt schon bei jedem klick eines users neu berechnet!

problemzone kämpfe & eroberungen bleiben jedoch!
ihr meintet die kämpfe der reihe nach durcharbeiten und vom letzten update-timestamp ausgehen.
Da stellt sich jedoch die frage wie ich die der reihe nach durcharbeiten soll!
bsp:
10 truppen auf 1 gebiet, 2 kämpfen, 10min später wieder 2 etc...
nach 8h kommt der nächste user auf die seite und alles wird aktualisiert.
wie berechne ich nun die kämpfe der reihe nach? ich habe ankunftszeit und destination und wenn dann 2 feindliche truppen aufeinander treffen -> kampf!
 
Naja gehen wir davon mal aus du speicherst den Kampf in einer Datenbank. Ich würd' das so machen, dass ich in der Tabelle noch eine Spalte habe, wo festlege, ob der Kampf schon stattgefunden hat oder nicht. Das hilft dir später leichter die Kämpfe zu bekommen, die noch abzuarbeiten sind.

Dann würd ich einfach eine MySql-Abfrage ala "SELECT * FROM Kämpfe WHERE (ankunft < NOW() AND beendet = 'nein') ORDER BY 'ankunft' ASC" machen.
Nun müsstest du einfach per mysql_fetch_array() das Datenfeld auslesen können und beim Kampf anfangen, der am weitesten weg ist. Den handelst du ab und setzt die Saplte "beendet" auf "ja". Somit wird er bei dem nächsten update nicht mehr berücksichtigt.

Ein Problem sehe ich aber noch, wenn du nun zum Beispiel mehrere Spieler auf deinem server spielen lässt. Dann sind es mehrere Kämpfe und deswegen auch mehr zu bearbeiten. Wenn jetzt zb. ein Spieler die Kämpfe durch sein aufrufen der Seite aktualisieren lässt und in dem Moment noch ein Spieler das macht würden ja die Kämpfe 2mal berechnet werden. ich weiß nicht, wie oft sowas passieren kann. vielleicht ist die chance auch nur 1:1000000. Aber man könnte es auch beheben :)

Das wars erstmal und ich hoffe ich konnte dir den entsprechenden anstoss geben, den du dafür brauchtest.
 
Super komtur!

danke!
der nötige anstoss ist gegeben :)
Mir fehlte nur der ansatz das anzugehen!
Bin dabei es nun so zu lösen:

- Suchen des ältesten ankunftsdatum einer truppe
schleife:
- Select aller ankommenden truppen gleich dem ältesten ankunftsdatum +20sek
- abhandeln von ankunft + kämpfen
- löschen der verlorenen einheiten - beenden des kampfes - eroberung der burgen
schleifen-ende

so funktionierts derzeit, die kämofe kommen aber erst noch sollte aber so hinhaun!

danke an all! :)
 
Zurück