Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Spielerbewegung auf Server gegenchecken
Alphawolf1988
myCSharp.de - Member



Dabei seit:
Beiträge: 68

Themenstarter:

Spielerbewegung auf Server gegenchecken

beantworten | zitieren | melden

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!
private Nachricht | Beiträge des Benutzers
m0rius
myCSharp.de - Member

Avatar #avatar-3125.png


Dabei seit:
Beiträge: 1043

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
Alphawolf1988
myCSharp.de - Member



Dabei seit:
Beiträge: 68

Themenstarter:

beantworten | zitieren | melden

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!
private Nachricht | Beiträge des Benutzers
pdelvo
myCSharp.de - Member

Avatar #avatar-3354.png


Dabei seit:
Beiträge: 1407

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
Darth Maim
myCSharp.de - Member



Dabei seit:
Beiträge: 230

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
Alphawolf1988
myCSharp.de - Member



Dabei seit:
Beiträge: 68

Themenstarter:

beantworten | zitieren | melden

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!
private Nachricht | Beiträge des Benutzers
m0rius
myCSharp.de - Member

Avatar #avatar-3125.png


Dabei seit:
Beiträge: 1043

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
MrSparkle
myCSharp.de - Team

Avatar #avatar-2159.gif


Dabei seit:
Beiträge: 5974
Herkunft: Leipzig

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
Alphawolf1988
myCSharp.de - Member



Dabei seit:
Beiträge: 68

Themenstarter:

beantworten | zitieren | melden

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!
private Nachricht | Beiträge des Benutzers
Darth Maim
myCSharp.de - Member



Dabei seit:
Beiträge: 230

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
Ahrimaan
myCSharp.de - Member



Dabei seit:
Beiträge: 363
Herkunft: Thorn

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
rastalt
myCSharp.de - Member



Dabei seit:
Beiträge: 244

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
pdelvo
myCSharp.de - Member

Avatar #avatar-3354.png


Dabei seit:
Beiträge: 1407

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers