Laden...

Spielerbewegung auf Server gegenchecken

Erstellt von Alphawolf1988 vor 11 Jahren Letzter Beitrag vor 11 Jahren 3.772 Views
A
Alphawolf1988 Themenstarter:in
68 Beiträge seit 2008
vor 11 Jahren
Spielerbewegung auf Server gegenchecken

Hallo!

Ich habe derzeit ein Problem was die Entwicklung eines RPG Spiels betrifft. Ich kann mir nicht wirklich vorstellen wie man die Bewegung eines Spielers auf dem Host Server gegenprüfen könnte. Auf Clientseite hat man ja die Unterstützung der 3D Engine und kann auf Objektkollision prüfen etc. Auf dem Server jedoch hat man nicht sollche Informationen.

Ich habe auch überlegt die Heightmap (also das Terrain) als Information auf dem Server abzulegen, jedoch gibt es ja in der Spielwelt auch Objekte auf denen der Spieler stehen kann und diese werden ja damit nicht erfasst. Ich hab irgendwie einen Knoten im Kopf o.O

Gibt es eine Idee oder Ansatz wie man das realisieren kann?

MFG Wolf

Wer zuerst kommt malt zuerst, wer danach kommt malt drüber! 😁

1.002 Beiträge seit 2007
vor 11 Jahren

Hallo Alphawolf1988,

warum hältst du nicht die gesamte Spielwelt auf dem Serverspeicher?

m0rius

Mein Blog: blog.mariusschulz.com
Hochwertige Malerarbeiten in Magdeburg und Umgebung: M'Decor, Ihr Maler für Magdeburg

A
Alphawolf1988 Themenstarter:in
68 Beiträge seit 2008
vor 11 Jahren

Das Problem ist ich kann mir das derzeit schlecht vorstellen, weil eine Spielwelt besteht ja aus 3D Objekten und damit kann ja eine "Konsolenanwendung" nichts anfangen. Die Frage ist, welche Informationen ich speichern müsste um sowas zu überprüfen.

MFG Wolf

Wer zuerst kommt malt zuerst, wer danach kommt malt drüber! 😁

1.346 Beiträge seit 2008
vor 11 Jahren

Das eine hat doch mit dem anderen nix zu tun. Das eine Konsole keine grafische Oberfläche hat hat doch nichts damit zu tun ob sie etwas mit 3D Objekten anfangen kann.

D
216 Beiträge seit 2009
vor 11 Jahren

Und wieso sollte ein Konsolenprogramm nichts von 3D Objekten anfangen können? Du musst halt auf die richtigen DLL's verweisen und dann kannst du genauso 3D Objekte auf Kollision prüfen wie in irgendeiner Anwendung, die das ganze dann auch noch anzeigt.

Wenn du den Code, der in deinem Client auf Kollisionen mit der Map/mit Objekten prüft, in eine DLL auslagerst, kannst du diese auch sowohl im Client als auch im Server einsetzen.

Darth Maim

A
Alphawolf1988 Themenstarter:in
68 Beiträge seit 2008
vor 11 Jahren

Ok, in dem Sinne habt ihr recht. Jedoch frage ich mich ob dies nicht zu anfordernd wäre. Es muss doch irgendwie eine einfache Möglichkeit geben zu überprüfen, ob ein Spieler auf der Position stehen darf oder nicht.

MFG Chris

Wer zuerst kommt malt zuerst, wer danach kommt malt drüber! 😁

1.002 Beiträge seit 2007
vor 11 Jahren

Hallo Alphawolf1988,

es geht ja nicht nur darum, zu prüfen, ob der Spieler dort stehen kann. Das kann sowohl auf dem Client als auch auf dem Server geschehen. Du musst das ganze konsequent ein wenig weiterdenken, denn um Cheating zu vermeiden, sollte diese Option (sowie die tatsächliche Position des Spielers) dem Server überlassen werden — sonst validiert sich jeder Client etwas zurecht, was laut Spiellogik gar nicht erlaubt sein dürfte.

m0rius

Mein Blog: blog.mariusschulz.com
Hochwertige Malerarbeiten in Magdeburg und Umgebung: M'Decor, Ihr Maler für Magdeburg

5.657 Beiträge seit 2006
vor 11 Jahren

Hallo allerseits,

Collision Detection wird meiner Meinung nach ausschließlich auf dem Client berechnet. Auf den Server werden nur die Positionen der Spieler übertragen. Stellt euch mal vor, es befinden sich in einem Spiel 10.000 Spieler in 100 Levels, da hätte der Server nix anderes mehr zu tun, als die Kollisionserkennung durchzuführen.

Christian

Weeks of programming can save you hours of planning

A
Alphawolf1988 Themenstarter:in
68 Beiträge seit 2008
vor 11 Jahren

Genau dieser Meinung bin ich eigentlich auch, dennoch muss man dazu sagen, wird dann nicht cheaten möglich? Weil irgendwie muss ja überprüft werden, ob ein Client sich korrekt bewegt.

MFG Wolf

Wer zuerst kommt malt zuerst, wer danach kommt malt drüber! 😁

D
216 Beiträge seit 2009
vor 11 Jahren

Du kannst zumindest überprüfen, ob sich der Client sich mit der richtigen Geschwindigkeit bewegt und nicht zu schnell ist. Dann kannst du zumindest überprüfen, ob der Client unter dem Boden ist, oder fliegt, und falls er das nicht können sollte -> Cheat. Außerdem kannst du eine Map generieren, wo der Client überall hinkommen soll, also die Grenzen der Karte irgendwie kennen. Wenn der Client außerhalb dieser Grenzen ist -> Cheat. Die einzige Möglichkeit auf Kollision mit allen Objekten zu prüfen ist aber, die kompletten Kollisionen auf der Server gegenzurechnen.

Die 2. Punkte die ich genannt habe sind allerdings schwer umzusetzen, wenn man in deinem Spiel fliegen kann, oder sogar nur springen. Denn dann kommt man gleich an viel mehr Orte, an die man ohne fliegen/springen nicht kommen würde.

Darth Maim

A
350 Beiträge seit 2010
vor 11 Jahren

Als Tipp:
Schau dir mal Dawn of Light an, ein Dark Age of camelot Server in C# geschrieben.
Da solltest du alles finden um zu sehen wie man Cheaten verhindern/entdecken kann

R
234 Beiträge seit 2007
vor 11 Jahren

Ganz interessant in diesem Zusammenhang sind die Artikel Source Multiplayer Networking und Latency Compensating Methods in Client/Server In-game Protocol Design and Optimization aus der Valve Developer Community.

Da geht es auch darum wo wer welche Berechnungen durchführt und wie das ganze in Zusammenhang mit unterschiedlichen Verbindungsgeschwindigkeiten der verschiedenen Spieler synchronisiert wird.

Ist vielleicht etwas viel, aber es werden auch Probleme behandelt an die du jetzt noch gar nicht denkst, die aber auf dich zukommen werden.

Viel Erfolg bei deinem Vorhaben. 🙂

1.346 Beiträge seit 2008
vor 11 Jahren

Eine grobe Positionsüberprüfung würde ich schon einbauen. Auf dem Server befinden sich dann ganz grobe Hitboxen, die kleiner als die eigentlichen Objekte sind. Wenn ein Spieler mit einer solche Hitbox kolidiert (bzw in einer ist) kannst du dann überprüfen. Die Geschwindigkeitsüberprüfung sollte auch nicht das problem sein, auch wenn du darauf acht geben musst das du Spieler mit nidriger Verbindung nicht gleich zum Hacker machst, weil mal mehrere Packete die sich angesammelt haben auf einmal ankommen