Refresh Page - andere Lösung nötig?

Cronjobs bekommst du bei vielen Providern, aber du musst ordentlich dafür zahlen. Außerdem ist darauf zu achten, dass ein Skript bei 1und1 nicht länger als 6 Sekunden laufen darf, sonst wird es einfach abgebrochen.

Bei 10 Usern verwundert es nicht, dass die Last gering ist. Bei 500 gleichzeitig zugreifenden Usern sieht die Sache anders aus. Du kannst ausrechnen, was der Server pro Sekunde leisten muss. Außerdem ist die Frage, ob du einen Server für dich allein hast oder ob du ihn mit anderen teilst.

Gawayn
 
also wenn du keine ticks hast ist es doch eigentlich ganz einfach das zb. mit den ressourcen zu machen. Dieses script zu machen. Musst halt nur irgendwo in der Datenbank speichern, wann das letzte mal das script ausgeführt wurde. Dann berechneste einfach den zeitunterschied und du wirst ja garantiert eine Formel haben für die Ressourcen. Dann rechneste das einfach mit den vergangenen Sekunden drauf.

Genauso zu dem Kampf. Du überprüfst den Zeitpunkt der letzten Aktualisierung und dann rechneste erstmal die Kämpfe, die am nächsten daran liegen und dann die weiter weg liegen. Dann müssteste ja wieder auf dem Stand der Dinge sein. Und kein User wird merken, dass das Spiel nicht in Echtzeit abläuft.


Das dein Computer nur 2% Auslastung hat ist vielleicht bei 10 Usern ok. Aber du entwickelst es doch garantiert nicht nur für 10 sondern eher für 100 oder tausend. Rechne es mal hoch :) Ok schließe mich auch Gawayn an.
 
also wenn du keine ticks hast ist es doch eigentlich ganz einfach das zb. mit den ressourcen zu machen. Dieses script zu machen. Musst halt nur irgendwo in der Datenbank speichern, wann das letzte mal das script ausgeführt wurde. Dann berechneste einfach den zeitunterschied und du wirst ja garantiert eine Formel haben für die Ressourcen. Dann rechneste das einfach mit den vergangenen Sekunden drauf.

Genauso zu dem Kampf. Du überprüfst den Zeitpunkt der letzten Aktualisierung und dann rechneste erstmal die Kämpfe, die am nächsten daran liegen und dann die weiter weg liegen. Dann müssteste ja wieder auf dem Stand der Dinge sein. Und kein User wird merken, dass das Spiel nicht in Echtzeit abläuft.
Das ist genau das was, ich in meinem vorherigen Post geschrieben habe, wenn mich nicht alles täuscht. Das "Truppenproblem" bedarf allerdings besonderer Aufmerksamkeit.

Gawayn
 
danke schonmal für die konstruktiven beiträge!

Hm also das klingt sehr gut das mit dem aktualisierungsdatum, das prob ist nun tatächlich die truppenbewegung und der kampf!

den wenn ein kampf irgendwos stattfindet und ein user gewinnt und erobert die "burg" des anderen, und 2h kommt einer und erobert wiederum den seine burg dann müsste man da sehr viel mit timestamps herumhantieren oder gehts einfacher?
 
nein ich meine wenn dann wieder einer online kommt wird das script ja wieder ausgeführt. Es geht zu dem Zeitpunkt zurück, wo es das letzte mal aufgerufen wurde. Dann sucht es sich die Ankunftszeit raus von dem Kampf, der am nächsten an dieser Zeit dran liegt. Dann wird dieser Kampf berechnet. Wenn er gewinnt bekommt er erstmal die Burg oder was auch immer :)
Dann wird das Skript weitersuchen. Also es wird den nächsten Kampf durchnehmen. Wenn der dann erfolgreich beendet wurde, dann wird die burg eben an den anderen übergeben. Musst dann eben nur beachten, dass sich auch zwei kämpfe überschneiden würden und dann mehr Truppen an dem Schauplatz sind, als vielleicht gedacht :)
 
jo eben erstens das, zweitens wenn zwischen der eroberung und der rückeroberung der burg best. zeit vergangen ist erhält der besitzer der burg ja in der zeit in der er die burg besitzt gewisse rohstoffe aus den gebäuden der burg...

*uff* das wird kompliziert...
 
Dann sucht es sich die Ankunftszeit raus von dem Kampf, der am nächsten an dieser Zeit dran liegt. Dann wird dieser Kampf berechnet. Wenn er gewinnt bekommt er erstmal die Burg oder was auch immer
Dann wird das Skript weitersuchen. Also es wird den nächsten Kampf durchnehmen
Den Sinn hiervon verstehe ich nicht ganz. Wieso sollte das Skript Kämpfe "suchen"? Die Sache ist doch ganz einfach:
  1. Ein Spieler erobert die Burg von jemand anders. Diese Information wird natürlich jetzt bei der Burg gespeichert. Außerdem wird der Zeitpunkt der Burgeroberung in ein Logfile reingeschrieben (siehe Punkt 3).
  2. Der Spieler, dessen Burg erobert wurde, geht online und stellt fest, dass seine Burg nicht mehr ihm gehört, sondern jemand anders. Hier ist das Skript überhaupt nicht beteiligt, schließlich steht diese Information bei der Burg selbst und muss nur abgerufen werden.
  3. Zeitgleich wird das Skript ausgeführt, das alle Ressourcen berechnet. Um bis zu einem gegebenen Zeitpunkt die Ressourcen berechnen zu können, muss es wissen, wieviel "Produktionskapazität" dem Spieler zur Verfügung steht. Bis zum Zeitpunkt der Burgeroberung war das wahrscheinlich mehr als danach. Das heißt, über die Größe der Produktionskapazität muss ein Logfile geführt werden. Dieses Logfile wird von dem Skript abgearbeitet.
Wieso da Kämpfe "gesucht" werden sollen, verstehe ich nicht! Sollte da in der Zwischenzeit noch irgendetwas anderes passieren, beeinflusst das nicht dieses System, das ich eben beschrieben habe. Das Logfile stimmt schließlich immer. Ist doch nicht kompliziert. Man muss nur darauf achten, dass die Logfiles zu jedem Zeitpunkt stimmen.

Gawayn
 
Zuletzt bearbeitet:
jo stimmt so gehts aber...

puh also doch sehr viele timestamps benötigt :)

truppenbewegung, kämpfe, eroberungen, transporte, ressourcen, gebäude-konstruktionen die fertig werden, einheiten die fertig werden, waffen die fertig werden das alles muss berücksichtigt werden!
 
Hat ja auch keiner gesagt, dass es einfach sein soll. :)


Kämpfe und Eroberungen gehören ja eigentlich zusammen. Wenn du nun eine einheitliche Wegdauer hast, dann kannst du ja die Eroberungen berechnen. Bei den Ressourcen brauchst du keine Timestamps, weil du ja eine Zeit hast. Nämlich die, als das Skript das letzte Mal aufgerufen wurde. Und wenn du jetzt die vergangenen Sekunden berechnest brauchste dafür also keine Sepicherung vornehmen. Naja und für die anderen Timestamp wirste wohl nicht drum herum kommen. Aber da brauchste ja eigentlich nur die Anfangswerte zu speichern. Also wann es weggeschickt wurde oder wann der Bau begonnen wurde. Musste ja sowieso irgendwie. Wirst ja für den Transport bestimmt einheitliche Längen der Dauer verwenden. Sonst wirds auch ziemlich kompliziert :)
 
das aller einfachste ist und bleibt der Cronjob. Wenn du das Gameim großem Rahmen betreiben willst, brauchst du eh nen eigenen GameServer wo kein anderer noch darauf rumhantiert(normale webpackete).

Und wenn du nen Suse OS nimmst etc, hast du zu 99% immer Crons mit dabei.

Son riesen rumgewurschtel bringt nur neue Fehler ins Spiel rein.

Kannst du dir aus welchen gründen auch immer keinen Server leisten, kannst du ja ne DSL Leitung laufen lassen bis du das kleingeld hast für den Server(den du ja dann eh brauchst)
 
Zurück