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!
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!
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.
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.
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!
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.
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
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!
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.
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
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.
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