Hallo liebe Community,
ich bin gerade an meinem größten und kompliziertesten Projekt und muss euch folgendes Fragen bezüglich Multiplayerperformance. Dazu muss ich aber erst kurz erläutern, um was es sich im Spiel handelt, damit ihr eine Vorstellung habt, was ich meine!
Das Spiel ist ein Topdownshooter der anderen Art. Maximal 5 Spieler spawnen am Spawnpoint und einer von diesen Spielern wird nach Zufall zum "Master" gemacht.
Dieser Master kann dann über die gesamte Map wie bei einen Strategiespiel, verschiedenes Zeug spawnen, wie z.B. Wände die zerstört werden müssen, Fallgruben und und und. Außerdem muss er 3 Schlüssel platzieren, welche die Spieler finden müssen. Haben die Spieler die Schlüssel gefunden und sind ans Ziel gekommen, haben sie gewonnen. Wenn die Spieler aber durch den Master es nicht schaffen, gewinnt logischer Weise der Master.
Das Spiel besteht aus einem C++ Server (weil das schneller sein soll) und eben aus den Clients mit GM.
Nun zu meiner Frage:
Der Master kann auch Zombies spawnen.. sollten schon mehrere sein vielleicht um die 50 rum!
Die Netzwerkkommunikation bezüglich Zombiepositionen verläuft nun so:
Der Spawn
1. Master spawnt Zombie per Mausklick an die gewünschte Position
2. Master Sendet an Server die X,Y Position des gespawnten Zombies sowie die Zombie_id
3. Server sendet diese Position an alle restlichen Clients und die erstellen dann den Zombie an dieser Position mit der jeweiligen zombie_id
Positionsberechnung
Die Zombies sind so eingestellt, dass sie permanent per mp_potential_step zu NextX, NextY laufen (Wie ein Wegpunkt).
1. Der Master kontrolliert das gesamte Verhalten der Zombies.. sie sind als Clientside
2. Masterclient prüft, ob Zombie einen Spieler sieht
3. Wenn Zombie einen Spieler sieht wird dem jeweiligen Zombie ein Wegpunkt zu den Spieler gesetzt (NextX = player.x NextY = player.y)
4. Der Master sendet dann im Sekundentackt die Wegpunkt koordinate (NextX,NextY) sowie die x,y Zombieposition und die Zombie_id an den Server.
5. Server empfängt diese Daten und sendet sie an alle Clients (auch dem Master zurück)
6. Clients (inklusive der Master) setzen dem jeweiligen Zombie mit der empfangenen Zombie_id die Variablen NextX,NextY und x & y position des Zombies
--------------------
Der Master schickt praktisch die Info an den Server und der Server schickt sie an alle Clients und auch dem Client, welcher der Master ist. Damit sollten die Zombies ja bei jeden etwa gleichzeitig anfangen zu laufen!
ICH HOFFE IHR HABT DAS VERSTANDEN, WENN NICHT, BITTE NACHFRAGEN WEIL ES WICHTIG IST!
So:
Das ganze läuft Lokal nun eimanfrei, aber denkt ihr, das läuft dann auch über das Internet so gut?
Nehmen wir mal an es gibt 30 Zombies und alle 30 Zombies sehen eben gerade einen Spieler. Dann sendet der Client, welcher der Master ist immerhin 30 Pakete an den Server pro Sekunde! Und der Server dann diese 30 Pakete an 5 Clients!
Das Problem wird wohl sein, dass die Zombies auch lagen werden, wenn der Master ne schlechte Verbindung hat, da er sie ja praktisch steuert.
Komplett Serverseitige Kontrolle der Zombies wäre wohl das beste, aber gleichzeit auch sehr sehr schwer, da der Server ja in C++ geschrieben ist und man dann mit den Server herausfinden muss, ob der Zombie den Player überhaupt sieht und keine Kollision besteht..
Ich bedanke mich dafür, dass ihr euch Zeit genommen habt das zu lesen und hoffe nun auf Ratschläge!
Liebe Grüße!
ich bin gerade an meinem größten und kompliziertesten Projekt und muss euch folgendes Fragen bezüglich Multiplayerperformance. Dazu muss ich aber erst kurz erläutern, um was es sich im Spiel handelt, damit ihr eine Vorstellung habt, was ich meine!
Das Spiel ist ein Topdownshooter der anderen Art. Maximal 5 Spieler spawnen am Spawnpoint und einer von diesen Spielern wird nach Zufall zum "Master" gemacht.
Dieser Master kann dann über die gesamte Map wie bei einen Strategiespiel, verschiedenes Zeug spawnen, wie z.B. Wände die zerstört werden müssen, Fallgruben und und und. Außerdem muss er 3 Schlüssel platzieren, welche die Spieler finden müssen. Haben die Spieler die Schlüssel gefunden und sind ans Ziel gekommen, haben sie gewonnen. Wenn die Spieler aber durch den Master es nicht schaffen, gewinnt logischer Weise der Master.
Das Spiel besteht aus einem C++ Server (weil das schneller sein soll) und eben aus den Clients mit GM.
Nun zu meiner Frage:
Der Master kann auch Zombies spawnen.. sollten schon mehrere sein vielleicht um die 50 rum!
Die Netzwerkkommunikation bezüglich Zombiepositionen verläuft nun so:
Der Spawn
1. Master spawnt Zombie per Mausklick an die gewünschte Position
2. Master Sendet an Server die X,Y Position des gespawnten Zombies sowie die Zombie_id
3. Server sendet diese Position an alle restlichen Clients und die erstellen dann den Zombie an dieser Position mit der jeweiligen zombie_id
Positionsberechnung
Die Zombies sind so eingestellt, dass sie permanent per mp_potential_step zu NextX, NextY laufen (Wie ein Wegpunkt).
1. Der Master kontrolliert das gesamte Verhalten der Zombies.. sie sind als Clientside
2. Masterclient prüft, ob Zombie einen Spieler sieht
3. Wenn Zombie einen Spieler sieht wird dem jeweiligen Zombie ein Wegpunkt zu den Spieler gesetzt (NextX = player.x NextY = player.y)
4. Der Master sendet dann im Sekundentackt die Wegpunkt koordinate (NextX,NextY) sowie die x,y Zombieposition und die Zombie_id an den Server.
5. Server empfängt diese Daten und sendet sie an alle Clients (auch dem Master zurück)
6. Clients (inklusive der Master) setzen dem jeweiligen Zombie mit der empfangenen Zombie_id die Variablen NextX,NextY und x & y position des Zombies
--------------------
Der Master schickt praktisch die Info an den Server und der Server schickt sie an alle Clients und auch dem Client, welcher der Master ist. Damit sollten die Zombies ja bei jeden etwa gleichzeitig anfangen zu laufen!
ICH HOFFE IHR HABT DAS VERSTANDEN, WENN NICHT, BITTE NACHFRAGEN WEIL ES WICHTIG IST!
So:
Das ganze läuft Lokal nun eimanfrei, aber denkt ihr, das läuft dann auch über das Internet so gut?
Nehmen wir mal an es gibt 30 Zombies und alle 30 Zombies sehen eben gerade einen Spieler. Dann sendet der Client, welcher der Master ist immerhin 30 Pakete an den Server pro Sekunde! Und der Server dann diese 30 Pakete an 5 Clients!
Das Problem wird wohl sein, dass die Zombies auch lagen werden, wenn der Master ne schlechte Verbindung hat, da er sie ja praktisch steuert.
Komplett Serverseitige Kontrolle der Zombies wäre wohl das beste, aber gleichzeit auch sehr sehr schwer, da der Server ja in C++ geschrieben ist und man dann mit den Server herausfinden muss, ob der Zombie den Player überhaupt sieht und keine Kollision besteht..
Ich bedanke mich dafür, dass ihr euch Zeit genommen habt das zu lesen und hoffe nun auf Ratschläge!
Liebe Grüße!