Dokumentation zum Massive Multiplayer Online Game - Universität ...
Dokumentation zum Massive Multiplayer Online Game - Universität ...
Dokumentation zum Massive Multiplayer Online Game - Universität ...
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
4. Schiffe und Missionen<br />
37<br />
...<br />
end<br />
...<br />
end<br />
In den jeweiligen cases werden missionsspezifische Aktionen durchgeführt, wie <strong>zum</strong> Beispiel dem Beladen<br />
der Flotte mit Ressourcen, was nur bei Transport und Kolonialisierung passiert. Zusätzlich wird von dort aus<br />
eine Methode aufgerufen, die dafür sorgt, dass ein Job in die Resque eingefügt wird, welcher zu dem Zeitpunkt<br />
ausgeführt werden soll, wenn die Flotte an ihrem Zielplaneten ankommt.<br />
Resque.enqueue_at(time, AttackPlanet, self.id, planet.id)<br />
Bei diesem Job handelt es sich dann um die jeweilige Aktion, die eine Mission darstellt. Beispiel Angriff:<br />
def attack(planet)<br />
if other_user.nil? # unknown planet<br />
... # Return<br />
elsif other_user == self.user # own planet<br />
... # Return<br />
elsif other_user.alliance == self.user.alliance # alliance planet<br />
... # Return<br />
else # enemy<br />
... # Attack<br />
end<br />
end<br />
Generell wird bei Ankunft der Flotte am Zielplaneten erst geschaut, wem der Planet gehört um dann geeignet<br />
zu reagieren. Dabei wird zusätzlich noch ein Report erstellt, welcher dem Spieler im Anschluss eine detaillierte<br />
Übersicht über den Missionsverlauf gibt. Je nach Missionstyp kehren dann die übrig gebliebenen Schiffe wieder<br />
zurück, indem erneut ein Job in die Resque gegeben wird, welcher dafür sorgt, dass die Flotte zu ihrem<br />
Ankunftszeitpunkt mit der Heimatflotte "gemerged" wird (Details zu allen möglichen Kombinationen).<br />
Zusätzlich gibt es die Möglichkeit Missionen abzubrechen. Dazu muss der ursprüngliche Job zunächst gelöscht,<br />
die Flottenattribute neu gesetzt und ein neuer Job für die Rückkehr in die Resque eingefügt werden.<br />
def breakup_mission<br />
if self.mission.id == 2<br />
Resque.remove_delayed(ColonizePlanet, self.id, self.target_planet.id)<br />
...<br />
self.start_planet = self.target_planet<br />
self.target_planet = self.origin_planet<br />
Resque.enqueue_at(self.arrival_time, ReturnToOrigin, self.id)<br />
...<br />
end