Chronologische Abarbeitung von Ereignissen

Subwoover

Erfahrenes Mitglied
Jo das thema hatte ich schon mal erwähnt und damals waren die ideen und vorschläge sehr interessant.

leider ging das thema irgendwie unter und die erwähnten ideen wurde nicht weitergesponnen.
Hier also noch einmal, dort angefangen wo das thema aufhörte:

Ich entwickle gerade ein browsergame, mein erstes und alle Berechnungen die nötig sind damit das Spiel aktuell bleibt werden in einer Datei ausgeführt die bei jeder Seite eingebunden ist.
Bei jedem Laden einer Page also, wird die Datei auch geladen.

Das Problem das sich nun stellt sieht wie folgt aus:
Bei jedem Klick eines Users -> Aktualisierung!

Angenommen der letzte Besuch findet um 20.18 statt. Um 6:25 in der Früh sieht der nächste Spieler nach seinem Account, dabei wird alles berechnet was in der Nacht "passierte" oder passieren sollte.
Die Frage ist jedoch, wie ich die Ereignisse chronologisch ordnen kann.

User A schickt seine Truppen weg und die kommen um 0.00 an und erobern die feindliche Burg.
User B schickt seine Truppen weg, welcher erst um 0.15 ankommen und er wiederum erobert die Burg.
Nur wie kann man das korrekt berechnen?

Ich hab die Zeiten aller Truppenbewegungen und Gebäude-Konstruktionen etc. gespeichert, also den Timestamp wann es fertig ist.
Trotzdem kann ich nicht alle Daten hernehmen und die beliebig bearbeiten, nach welchem Muster also?
 
Naja ich würde die ganzen Ereignisse aus der Datei auslesen und in einem array speichern. Dann solltest du als Schlüssel den Timestamp haben und als Wert das Ereignis. Nun solltest du einfach das Array sortieren.

Nunmusste es nur noch an die entsprechende Funktionen schicken und alles sollte gehen. Zumindest von meinem Wissensstand her ;)
 
Habe auch ein Spiel geproggt, mach es so:

Generell würde ich Forschungen/Truppen- oder Schiffsproduktionen/Gebäude erst fertig werden lassen, wenn der Spieler sich einloggt, bzw in seinem Acc aktualisiert.

Bei jeder Aktualisierung musst du jedoch im Truppenbewegungstable überprüfen, ob da was passiert ist und - sollte dies der Fall sein, dann chronologisch abarbeiten.
DANN schaust du, was diese Truppenbewegung besagt, führt sie eine Aktion durch, bei der aktuelle Bestände des betroffenen Accounts betroffen sind, DANN arbeite die Ereignisse ab, lese aus, was fertig wurde und berechne dann z. Bsp den Kampf.

So sollte es eigtl ohne Probs klappen. ;)
 
schon nur kann ich nicht aktualisieren wenn sich der Benutzer einloggt.

Wenn er mal 2 tage nicht reinschaut sollten seine truppen trotzdem kämpfen, seine gebäude und forschungen fertig werden und sich seine einheiten über die karte bewegen.
Ist eben nur die frage wenn ich nun 1000 bewegte truppen hab, wie ich das bearbeite...

1 für 1?
also eine armee ankommen lassen -> kämpfe generieren, nächste einheit kommt an -> wieder kämpfe berechnen so?
wird zwar aufwendig aber das script und die geschwindigkeit lebt von den usern - je mehr benutzer desto weniger muss jeder einzelne bei einem klick durch ladezeiten einbüßen :)

welches game hast du geproggt? :)
 
Hoi. :)

Aaaalso, überleg mal, müssen die Gebäude und Forschungen wirklich fertig werden, wenn keine Einheiten ankommen? Wieso? ;)

Ansonsten würde ich halt wirklich alle Truppenbewegungen in EINEM Table halten, mehr macht normalerweise ja auch keinen Sinn. Und dieses Table muss halt bei jedem Klick auf abgelaufene Ereignisse abgefragt werden, wie, das siehe mein oberes Posting. ;)

Und naja, mit 1000 Einheiten meinst du 1000 separat abgeschickt, nicht ein großer Truppenverband von 1k Leutz, oder?

Ansonsten, zur Anhäufung von Berechnungen, das klappt schon. Alleine mit 100 aktiven Leutz geht das einigermaßen, wenn du mal 500 bis 1000 hast, dann ist das vergessen. Wichtig ist nur eine extrem schnelle Berechnung des Kampfes um zu garantieren, dass wirklich die Reinfolge eingehalten wird. Manche Spiele haben den Fehler Flotten zu überspringen etc, doppelt zu berechnen und son Schmarn. Am besten ein C-Programm dafür schreiben und das dann per PHP aufrufen. *g*

PS: Mein Spiel ist atm ne Alpha mit rund 50 Leuten, schwer geheim. ;) Sind aber auch erst rund 500kb php-Quellcode.
 
klingt interessant, also du meinst einfach eintrag für eintrag abarbeiten?
das wird dann sowieso durch die massen an spielern ausgeglichen :)

naja es sollte jeder user + account up2date sein, wenn EIN spieler on ist, da der ja spionage / angriffe etc. an alle spieler durchführen kann und somit die aktuellen informationen nötig sind.

jo meins ist auch grad in ner testphase, ich progg nur grad erweiterungen und fixe paar bugs :) auch schwer geheim aber statt 50 leut nur 7 :p
kannst mir ja mal emailen wie dein game heißt bzw worums da geht :)
 
Hi,

lies bitte nochmal meinen ersten Post, da habe ich das beschrieben:

Es gibt ein Table mit Flotten/Truppenbewegungen, wie immer du es nennst. Diese müssen bei jeder Aktualisierung abgearbeitet werden.
So, wenn du nur einen Transport durchführst, dann musst du das Ziel ja nicht automatisch updaten, da könnteste einfach Ressourcen adden. Wäre die Aktion aber anstatt eines Transportes eine Spionage oder ein Angriff, dann wird erstmal der Account komplett upgedatet. Dann liest du aus, was da an Gebäuden,Truppen und Forschungen fertig wird, und dann berechnest du den Angriff oder die Spionage.

Hilft das? :)
 
Zurück