Gamestudio Links
Zorro Links
Newest Posts
Data from CSV not parsed correctly
by dr_panther. 05/06/24 18:50
Help with plotting multiple ZigZag
by degenerate_762. 04/30/24 23:23
M1 Oversampling
by 11honza11. 04/30/24 08:16
AUM Magazine
Latest Screens
The Bible Game
A psychological thriller game
SHADOW (2014)
DEAD TASTE
Who's Online Now
1 registered members (AndrewAMD), 831 guests, and 5 spiders.
Key: Admin, Global Mod, Mod
Newest Members
firatv, wandaluciaia, Mega_Rod, EternallyCurious, howardR
19050 Registered Users
Previous Thread
Next Thread
Print Thread
Rate Thread
MMO Innenareale verwalten #343446
10/06/10 13:25
10/06/10 13:25
Joined: Aug 2003
Posts: 127
Berlin, Germany
C
CHaP Offline OP
Member
CHaP  Offline OP
Member
C

Joined: Aug 2003
Posts: 127
Berlin, Germany
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.

Re: MMO Innenareale verwalten [Re: CHaP] #343448
10/06/10 13:44
10/06/10 13:44
Joined: Nov 2002
Posts: 913
Berlin, Germany
S
SchokoKeks Offline
User
SchokoKeks  Offline
User
S

Joined: Nov 2002
Posts: 913
Berlin, Germany
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 .

Re: MMO Innenareale verwalten [Re: SchokoKeks] #343452
10/06/10 14:16
10/06/10 14:16
Joined: Apr 2008
Posts: 650
Sajeth Offline
User
Sajeth  Offline
User

Joined: Apr 2008
Posts: 650
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.


Teleschrott-Fan.
Re: MMO Innenareale verwalten [Re: Sajeth] #343481
10/06/10 15:48
10/06/10 15:48
Joined: Aug 2003
Posts: 7,439
Red Dwarf
Michael_Schwarz Offline
Senior Expert
Michael_Schwarz  Offline
Senior Expert

Joined: Aug 2003
Posts: 7,439
Red Dwarf
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.


"Sometimes JCL reminds me of Notch, but more competent" ~ Kiyaku
Re: MMO Innenareale verwalten [Re: Michael_Schwarz] #343567
10/07/10 11:53
10/07/10 11:53
Joined: Aug 2003
Posts: 127
Berlin, Germany
C
CHaP Offline OP
Member
CHaP  Offline OP
Member
C

Joined: Aug 2003
Posts: 127
Berlin, Germany
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?

Re: MMO Innenareale verwalten [Re: CHaP] #343570
10/07/10 12:38
10/07/10 12:38
Joined: Nov 2002
Posts: 913
Berlin, Germany
S
SchokoKeks Offline
User
SchokoKeks  Offline
User
S

Joined: Nov 2002
Posts: 913
Berlin, Germany
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.

Last edited by SchokoKeks; 10/07/10 12:39.
Re: MMO Innenareale verwalten [Re: SchokoKeks] #343659
10/08/10 15:13
10/08/10 15:13
Joined: Aug 2003
Posts: 127
Berlin, Germany
C
CHaP Offline OP
Member
CHaP  Offline OP
Member
C

Joined: Aug 2003
Posts: 127
Berlin, Germany
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


Moderated by  HeelX, Spirit 

Gamestudio download | chip programmers | Zorro platform | shop | Data Protection Policy

oP group Germany GmbH | Birkenstr. 25-27 | 63549 Ronneburg / Germany | info (at) opgroup.de

Powered by UBB.threads™ PHP Forum Software 7.7.1