Sollte die Kollisionserkennung serverseitig oder kooperativ zwischen Client / Server erfolgen?

24

Ich arbeite an einem Online-Spiel, das eine sehr schwere Kollisionserkennungsverarbeitung haben wird. Spielermodelle kollidieren mit anderen Spielern, Mobs, Strukturen, Gelände und festen Objekten, die nur serverseitig existieren (nicht in Client-Datendateien gespeichert).

Sollte ich aus Sicherheitsgründen alle Kollisionserkennungen serverseitig durchführen? Oder sollte ich den Client die Erkennung durchführen lassen und den Server irgendwie nachverfolgen lassen? Ich habe das Gefühl, dass es zu viel für den Server sein wird (ich entwerfe die Engine für Hunderte von Spielern auf einem Server).

Weiß jemand, wie Mainstream-MMOs das machen? Ich weiß, dass derzeit fast alle MMOs für Physik-Hacks anfällig sind und normalerweise damit umgehen, indem sie Hacks erkennen und Personen verbieten. Mir wäre es lieber, wenn die Hacks überhaupt nicht funktionieren würden, zumindest für die Physik-Komponente.

BarakatX2
quelle

Antworten:

21

Es scheint, als ob die offensichtliche Antwort darin besteht, den größten Teil Ihrer Erkennung clientseitig durchzuführen (um eine reibungslose Funktion zu gewährleisten), und dann zu interpolieren, was der Server sagt, wenn Ihr Client zu weit entfernt ist. Der Server tickt mit einer geringeren Frequenz als der Client (z. B. 10 Hz) und benötigt wahrscheinlich einen grundlegenden Code, der besagt, dass dieser Spieler seinen aktuellen Standort erreicht hat eine Art Navigationsnetz-Lösung und Wegfindung.

Das kann sehr langsam sein, je nachdem, was Sie brauchen. Sie können beispielsweise eine Entwurfsentscheidung treffen, um sich nicht um die Player-Player-Kollision auf dem Server zu kümmern. Soweit ich weiß, kümmern sich die meisten Spiele nicht einmal darum. Es kommt wirklich darauf an, was Sie brauchen.

Als Faustregel gilt jedoch, dass Sie dem Kunden niemals vertrauen sollten. Wenn sich dies auf das Gameplay auswirkt, müssen Sie dies zumindest auf dem Server überprüfen.

Tetrade
quelle
24

Also ein paar Antworten hier.

  • Die clientseitige Kollision ist aus Sicht der Leistung und des Spielergefühls ideal. Sie möchten nicht, dass die Kollision verzögert wird, Sie möchten, dass die Spieler auf einen festen Gegenstand stoßen und anhalten. Wenn Sie es serverseitig tun, schauen Sie entweder auf Spieler, die überall mit Gummibändern spielen, oder geben den Spielern eine spürbare Verzögerung, wenn sie versuchen, sich zu bewegen. In beiden Fällen schlechtes Mojo.

  • Eine serverseitige Kollision ist aus Sicherheitsgründen ideal. Je näher Ihre Kunden "dummen Terminals" kommen, desto weniger kann Ihr Spiel ausgenutzt werden. Es gibt einen Grund, warum sich niemand, der ein textbasiertes MUD spielt, Gedanken über Wallhacks oder Speedhacks machen muss - weil der Kunde nichts Erwähnenswertes tut.

  • Beides zu tun ist in fast jedem Fall "ideal". Lassen Sie die Clients ihr Ding machen und überprüfen Sie den Server zweimal, um sicherzustellen, dass die Leute nicht schummeln. Die Nachteile sind Komplexität, Synchronisation (was tun Sie genau , wenn die beiden nicht übereinstimmen) und reine Server-CPU-Auslastung.

  • Was ich empfehle, ist, es fast ausschließlich clientseitig zu tun. Der Kunde ist genau wie in einem vollständigen clientseitigen System für seine Position maßgeblich und führt die gesamte Verarbeitung selbst durch. Außerdem lässt du den Server gelegentlich verschiedene Spieler überprüfen. Halten Sie die Serverlast niedrig, aber dies wird Betrüger überraschend schnell ausmerzen.

Alternativ können Sie dies vorerst clientseitig tun und die serverseitige Überprüfung zu einem späteren Zeitpunkt hinzufügen, wenn Ihr Spiel so populär wird, dass andere daran schummeln. Um ehrlich zu sein, wird das wahrscheinlich nicht der Fall sein. Es macht also keinen Sinn, die Programmiererzeit gerade damit zu verbringen.

ZorbaTHut
quelle
3

World of Warcraft führt keine Kollisionserkennung zwischen Spielern / Mobs durch. Es mag technische Gründe für diese Entscheidung geben oder auch nicht, aber in Wirklichkeit muss dies eher eine Entscheidung für das Spieldesign als eine technische Entscheidung sein:

Stellen Sie sich vor, wie ausbeuterisch es in Situationen zwischen Spielern sein kann. Oder wie schwer es wäre, die Bank / das Auktionshaus / die Postfächer zu benutzen, wenn andere (oft untätige) Spieler Ihre Bewegung blockieren würden!

Was die Kollisionserkennung auf Client- oder Serverbasis betrifft, muss sie, sofern die Bewegung nicht sehr langsam ist, in erster Linie clientseitig erfolgen, damit sie für jeden Client richtig aussieht. Eine verzögerte / verzögerte Kollisionsreaktion und / oder eine Kollision mit "unsichtbaren" Objekten wäre ziemlich unangenehm.

Bluescrn
quelle
1
Obwohl es nicht um die Frage geht, ob die Kollision von Spieler und Mob / Spieler ein schlechtes Spieldesign ist oder nicht, würde ich Spiele wie Darkfall Online empfehlen, in denen alles solide ist. Es fügt dem Gameplay eine neue Dimension hinzu und ermöglicht es Ihnen, sehr interessante Dinge mit dem Spiel zu tun. Ich würde mir keine Sorgen darüber machen, dass Spieler in meinem Spiel Dinge wie Banken blockieren, da es immer eine kleine Lücke gibt, durch die Spieler hindurchsehen können, um das Objekt zu öffnen.
BarakatX2,
Sie könnten Spieler von allem blockieren lassen, was sie angreifen könnten, und alles, was sie nicht angreifen können, können sie einfach passieren. Zum Beispiel könnten Spieler nicht durch Mobs gehen, da sie Mobs angreifen können. Sie sind auch nicht in der Lage, durch Spieler zu gehen, während sie als PvP gekennzeichnet sind, da sie als PvP gekennzeichnet sind. Ein Spieler, der nicht als PvP gekennzeichnet ist, kann durch jeden Spieler gehen, auch durch diejenigen, die nicht als PvP gekennzeichnet sind, da sie diese Spieler nicht angreifen können.
Azaral
2

Wenn Sie über die Hacks besorgt sind und dies große Auswirkungen auf das Spiel hat, lautet die Antwort JA.

In meinem browserbasierten Spiel, das eine Art "Städtebau" -Spiel ist, stören mich die Hacks nicht, da die Client-Engine nicht ausfällt, wenn ich den Status des gespeicherten Spiels anlege.

Es könnte jedoch das Gameplay möglicherweise missbrauchen, da der Spieler Spielmünzen (oder Premium-Bargeld) ausgeben muss, um die spielbare Fläche zu vergrößern und mehr Häuser / Gebäude zu bauen. Also werde ich eine einfache Überprüfung der Anzahl der durch das neu hinzugefügte Gebäude belegten Kacheln durchführen, um zu überprüfen, wie viele freie Kacheln verfügbar sind.

Noob Game Entwickler
quelle