MMO Innenareale verwalten

Posted By: CHaP

MMO Innenareale verwalten - 10/06/10 13:25

Tjo, jetzt stehe ich wieder einmal vor einem Rätsel.

Zunächst etwas Hintergrundinformation:

Es wird ein Server gestartet, welcher kontinuierlich eine Welt dynamisch generiert. Dies kann man sich wie ein Universum vorstellen, was wächst und die einzelnen Planeten können besiedelt werden.
Verbindet sich ein Spieler per Client, betritt er den Planeten und kann diesen nun erkunden. Irgendwann wird es ihm möglich sein, gefundene Gebäude betreten zu können.

Soweit die Theorie. In der Praxis klingt das folgendermaßen:

Der Server wird mit LEVEL_LOAD(0) initialisiert und lädt je nachdem, was er gerade benötigt, per ENT_CREATE verschiedene Objekte. Auf diese Weise wird das Universum zusammengebaut. Außerdem ist der Server im Stande, die Planeten Objekte zu erstellen. Das heißt: Alles was der Spieler von "außen" sehen darf, erstellt der Server. Sämtliche Innengeometrie allerdings, ist zu diesem Zeitpunkt noch nicht vorhanden.

Und genau das ist meine Frage. Wie bewerkstellige ich das?

Wenn ich jetzt von einem sehr unwahrscheinlichen aber möglichen Szenario ausgehe, wo es zum Beispiel 20 Planeten gibt mit jeweils 4 Gebäuden, benötige ich dazu jeweils einen Server? Das wären 80 Server bzw. 80 Rechner.

Gut.

Eigentlich war es mein Plan, einen Universums-Server laufen zu haben und einen Server, auf dem dynamisch die Level Innengeometrie erstellt wird. Dies erfolgt sobald der Universums-Server ein Gebäude auf einem Planeten erstellt hat.
In anbetracht der Tatsache, dass dieser auch irgendwann in die Knie gehen wird, auf Grund von der Spieleranzahl, könnte man natürlich noch die Gebäudetypen auf verschiedenen Server erstellen lassen. Aber das wäre ein Schritt, der erst später implementiert werden würde.

Bin ich damit auf dem richtigen Weg?
Ich mein*, dass einfachste ist es natürlich, alle Geometrie auf dem Server zu erstellen. Dazu würde ich Schattenbereiche nutzen, die von den Spielern nicht zu sehen sind. Jedoch bin ich stark der Überzeugung, dass selbst ein Hochleistungsrechner bei diesem Vorhaben sehr schnell an seine Grenzen stößt.

Soviel dazu. MMO Erfahrene bitte vortreten. grin

Noch eine andere Frage:
Ist es dennoch möglich, aus einem laufenden Server einen neuen Server zu starten?


--------------
Nachtrag:
Quote:

Es wird ein Server gestartet, welcher kontinuierlich eine Welt dynamisch generiert.

Es existieren Grenzen, damit das ganze nicht ins unermässlich, unendliche ausartet.
Posted By: SchokoKeks

Re: MMO Innenareale verwalten - 10/06/10 13:44

Tjoa, also ich denke du bräuchtest mindestens für jeden Planeten einen eigenen Server.

Das Problem beim 3DGS nativen Netzwerksystem ist, das jede entity die auf dem Planeten drauf ist dann an den Client übertragen werden muss, wenn er den Planeten betritt. Das sind ziemliche Datenmengen. Schon ein Wald mitn paar Pilzen und Büschen würde den Server zu sehr auslasten. du müsstest solche dynamisch erstellten level sachen mit random-seed werten machen, die du dann vom server nur auf dem client überträgst und der mit ent_createlocal dann die gleiche Welt "zufällig" erzeugt. Ein gängiges Prinzip, das z.b. die Age of Empires Serie für ihre Zufallskarten nutzt.

Wie viele Server du nun in Hardware brauchst hängt natürlich von den größen der Welten, der Anzahl der Spieler und von den zu berechnenden Dingen ab. Pathfinding und KI sind meistens das aufwändigste aufm Server.

Und ja, ein Laufender Server kann einen neuen starten. Mit einem einfachen Programm außenrum auch remote auf einer anderen Maschine. Theoretisch ist das alles machbar, praktisch gesehen finde ichs ganz schon krass wink .
Posted By: Sajeth

Re: MMO Innenareale verwalten - 10/06/10 14:16

Auf jeden Fall ein eigenes Program für den Server schreiben, keine 3DGS-Applikation dafür.
Ich empfehle dir für ein Indie-Projekt eine Serversoftware auf PHP-Basis plus dementsprechendem Parser in Lite-C.
Posted By: Michael_Schwarz

Re: MMO Innenareale verwalten - 10/06/10 15:48

Also nen PHP server für ein MMO ist schonmal schwachsinn. Du brauchst nen performantes backend auf dem server in C# oder C++.

Was ich denke wäre, die welten werden einmal generiert und dann auf dem Server gespeichert direkt nach der generierung. Diese basisdatei wird dann auf allen Clients verteilt die auf den planeten kommen. Für veränderungen auf der welt hast du dann eine differenz-datei. Auf diese weise muss der client nur 1x einen großen datensatz laden, und nachträglich dann immernur die differenz, welche meist ziemlich klein ausfallen wird.

Bezüglich der server, schaust du am besten mal in einer live-umgebung. Ich würde sagen 2-3 Zones auf einen Physikalischen server legen; Da du hier von innenarealen sprichst, würde ich sogar 4-5 auf einen Server legen. Nach 2-3 Tagen testläufen mit genügend teilnehmern verlegst du dann schwer belastete zonen (Startzone, gegenden wo spieler sich zum Idlen aufhalten, etc) auf eigene server um.

Für die Kartengenerierung würde ich einen Extra server haben, der dediziert nur für kartengenerierung zuständig ist.
Posted By: CHaP

Re: MMO Innenareale verwalten - 10/07/10 11:53

Okay, verstehe. Eigentlich wollte ich das ganze nur mit Hilfe vom 3DGS realisieren. Mal wieder zu stur gedacht...

Danke für eure Tipps, ich werde sie mit zu Papier bringen.

Ich habe vorhin schon einmal kurz versucht, auf einem Rechner 3DGS zweimal im Server Mode zu starten. Mir scheint, als ob dies nicht möglich wäre.
Falls doch, wie kann ich das erreichen? Es handelt sich lediglich um zwei kleine Räume, um zu testen, wie die Server untereinander Kommunizieren können, etc..

Quote:

SchokoKeks:

Und ja, ein Laufender Server kann einen neuen starten.


Wie denn? grin

Der Plan sieht jetzt folgendermaßen aus:

Auf dem Server werden jeweils nur Dummy Objekte erzeugt, so weit wie es möglich ist zwecks Kollision und diese auf den Clients gegen die richtigen Entitys ausgetauscht. Weiterhin beschränke ich das ganze erstmal auf einen Planeten um zu testen wie die Performance sein wird. Für mein Vorhaben benötige ich allerdings zwei Server, deshalb auch die Frage weiter oben aus einer Projktdatei zwei Server heraus zu starten (Ich dachte dabei an die Command Line mittels COMMAND_STR).

Vor einer Weile hab* ich auch hier im Forum gelesen, dass JCL bzw. Conitec an einem MMOG Titel arbeitet.
Mich würde dazu ja brennend seine Meinung Interessieren, wie sie dies mit A7/8 realisieren.
Gibt es vielleicht nähere Informationen zu diesem Projekt? Oder ein Dev-Diary?
Posted By: SchokoKeks

Re: MMO Innenareale verwalten - 10/07/10 12:38

Quote:

Ich habe vorhin schon einmal kurz versucht, auf einem Rechner 3DGS zweimal im Server Mode zu starten. Mir scheint, als ob dies nicht möglich wäre.

Das ist möglich, allerdings müssen die Server auf verschiedenen Ports laufen. Dazu mehr:
Quote:
Quote:

Und ja, ein Laufender Server kann einen neuen starten.

Wie denn? grin


Du wirst ja sowieso eine Datenbank, z.b. MYSQL brauchen, um Login-Informationen o.ä. zu verwalten.
Du könntest dort also auch eine Tabelle anlegen, in der die Planeten gespeichert sind, mit einer ID, einer IP und dem Port der deren Server haben wird.
Du müsstest also mit COMMAND_STR dann die Planeten-ID übergeben, der Server schaut dann in der Datenbank nach welchen Port und Namen er haben soll und aktiviert sich mit session_connect.

Die Kommunikation zwischen den Server würde ich auch (passiv) über die Datenbank laufen lassen. Nur mit Hilfe der 3DGS Bordmitteln lässt sich das eh nicht realisieren, da bräuchtest du sonst auch noch z.b. sockets.

Was das Starten angeht würde ich es so machen:

Ein Login-Server mit eigenen Code (also quasi ein eigenes Projekt) wird als erster gestartet. Dieser verbindet sich zur MYSQL-Datenbank, liest die Liste der Planeten aus und startet mit exec alle "Planetenserver".

Beispiel: exec ("plserver.exe", "-planetid 3"); falls alle auf dem gleichen PC laufen. Sonst musste noch mit C++ oder so ne kleine App schreiben die das remote starten übernimmt. Michael_Schwarz hat ja schon beschreiben, wie man da eine physikalische aufteilig vornehmen könnte.

Die Planetenserver lesen dann wie oben beschrieben ihren Port mithilfe von COMMAND_STR und der Planeten-ID aus und starten.

Die Spieler verbinden sich zum Login-Server und senden Namen und Passwort. Der Login-Server schaut nun auf welchem Planeten sich der Spieler befindet und sendet ihm den Port und vlt auch die IP und eine Session-ID die auch in die datenbank geschrieben wird.
Jetzt verbindet sich der Spieler mit dem Planetenserver, gibt diesem die session-ID und dieser schaut wieder in die Datenbank, findet dort den Spieler, erstellt dessen Entity an der richtigen Stelle und synchronisiert die Welt mit dem Spieler. Möglichkeiten dazu hatten wir ja oben schon diskutiert, mir gefällt Michael_Schwarz Idee einer Datei, die beim ersten verbinden mit dem Planetenserver gesendet wird und alle Infos zum Level enthält am besten. Du könntest ein eigenes möglichst kleines Format entwickeln oder es mit ner WMB versuchen, solange das Level nur aus Entities besteht und keine Texturen in der WMB sind bleibt die klein genug.

Du siehst also, es wird nicht einfach. Ohne gute Konzeption wirst du wohl aber nicht weit kommen.
Posted By: CHaP

Re: MMO Innenareale verwalten - 10/08/10 15:13

Natürlich, mySQL. Ich wollte das schön Old School per Textdatei auf dem Server verwalten. Tjo, drüber reden bringt halt ab und an etwas. Vor allem bin ich somit viel dynamischer was den Zugriff und das Senden von Informationen betrifft.

Supper! Danke für die Ratschläge und die Befehle, danach habe ich gesucht. Das betrifft im besonderen EXEC.

Ich glaube, ich werde mir noch einmal die Zeit nehmen müssen und das alles haargenau niederschreiben. Ein bestehendes Singleplayer Projekt einfach mal eben in ein Multiplayer Projekt zu wandeln, ist dann doch nicht ganz so einfach. Gut, mir war das schon irgendwie klar, doch, mit so massiven Komplikationen habe ich dann doch nicht gerechnet.

Besten Danke bis hier!

@SchokoKeks:
Oh, und ich hab* gerade dein Project 'MMO' entdeckt. grin
© 2024 lite-C Forums