Ich arbeite derzeit an einem physikorientierten Einzelspieler-Spiel, bei dem die Physik serverseitig simuliert werden soll. Dies liegt daran, dass das Spiel Bestenlisten, anhaltende Spielerfortschritte usw. hat und ich jede Art von Betrug verhindern möchte - im Grunde genommen eine reine Client-Server-Architektur, der Client ist „dumm“ und zeigt nur an, was der Server von Ihnen verlangt.
Das Problem ist jedoch, dass das Spiel höchstwahrscheinlich von Hunderten (vielleicht Tausenden) von Menschen gleichzeitig gespielt wird. Dies betrifft mich, da es höchstwahrscheinlich die Server-Verarbeitungsleistung beeinträchtigen wird, wenn ich Hunderte von Zuständen gleichzeitig ausführen und warten muss.
Ich hätte keine Probleme damit, alle Physiksimulationen auf die Clientseite zu verschieben, aber dann würde ich wirklich einen Weg brauchen, um zu validieren, ob das Ergebnis einer Client-Simulation gültig ist. Ich kann jedoch nicht herausfinden, wie.
Ich habe darüber nachgedacht, die Simulationsserverseite hin und wieder auszuführen, um zu überprüfen, ob der Client noch fair spielt, aber ich möchte wirklich, dass der Server so wenig wie möglich belastet wird.
Die Physik wird ungefähr so komplex wie die GDC 2011-Demo von Glenn Fiedler , vielleicht sogar noch einfacher. Es werden jedoch viel mehr immer kollidierende starre Körper in einer einzigen Szene sein und sie werden alle gleichzeitig sichtbar sein.
Es fällt mir schwer, eine Antwort auf diesen speziellen Fall zu finden, da die meisten Ressourcen im Internet - auch hier ist Glenn Fiedlers Website eine großartige - über kleine vernetzte Physik sprechen (z. B. ein FPS mit 30 Spielern wie Halo).
Alle Ratschläge, Websites, Papiere oder dergleichen zu diesem Thema werden sehr geschätzt.
Eine Zusammenfassung der Fragen, auf die ich eine Antwort haben möchte:
- Wie realisierbar ist ein Client-Server-Modell? Ist meine Server-Verarbeitungsleistung legitim und geerdet?
- Ist es möglich, eine vom Client auf dem Server ausgeführte physikalische Simulation zuverlässig zu validieren? Wenn das so ist, wie?
quelle
Antworten:
Sie können die Übermittlungen anderer Benutzer clientseitig überprüfen und den Client dem Server melden lassen, wenn eine Übermittlung ungültig erscheint.
Dann können Sie Maßnahmen ergreifen (entweder den Betrüger verbieten oder verbieten, wer den falschen Bericht gefälscht hat). Um selbst zu überprüfen, ob diese Übermittlung wirklich ungültig ist oder nicht, können Sie einen speziellen Client oder was auch immer verwenden.
quelle
Ihr Spiel ist Einzelspieler, die einzige "Interaktion" mit den anderen Spielern ist ein Leaderbord. Sie könnten eine Instanz erzeugen, um eine Simulation auf Ihrem Server für jede Übermittlung zu überprüfen. Sie benötigen nicht alle Tricks, um sicherzustellen, dass die Physik über 30 Clients gleich ist. Ich glaube, Sie benötigen nicht mehr Ressourcen als seitdem Die Physik funktioniert bereits :).
Das Überprüfen jedes Ergebnisses ist etwas übertrieben. Sie können die Simulation komprimiert an den Server senden, wenn jemand eine Punktzahl an das Leaderbord sendet, und dann nur die besten 5% auf Ihrem eigenen Server oder sogar die besten 1% oder sogar überprüfen klüger überprüfen Sie nur neue Highscores und gehen Sie davon aus, dass jeder, der nicht besser als # 1 ist, wahrscheinlich eine nicht betrogene Simulation hat.
Ich weiß nicht, ob Ihre Simulation so ist, eingerichtet ist und nicht interagiert (leicht zu überprüfen) oder ob Spieler mit der Sim interagieren können, während sie läuft, aber stellen Sie sicher, dass Sie Ihre Physik so ausführen, dass sie anders schwebt Punktdarstellungen bringen nichts durcheinander und lassen einen gültigen Lauf ungültig aussehen.
quelle
Tun Sie es nicht, ich kann Ihnen versichern, dass die Simulation der Physik ausschließlich auf dem Server eine sehr schlechte Idee ist. Das Hauptproblem ist nicht die Serverlast, sondern die Reaktionsfähigkeit. Die Reaktionsfähigkeit des Kunden wird unglaublich schlecht sein. Der Spieler drückt einen Knopf, dann müssen Sie einen Roundtrip zum Server machen, bevor Sie die Ergebnisse der Simulation erhalten. Ich habe in der Vergangenheit Variationen davon gemacht (meistens nur Knopfdruck), und die Ergebnisse sind nicht schön und sollten nur für sehr langsame Spiele gemacht werden, die keine Chance haben, damit durchzukommen (und selbst in diesen Fällen die wahrgenommenen mangelnde Reaktionsfähigkeit ist ein großes Problem.
Ein besseres Schema, das ich versuchen wollte, wenn sich diese Art von Szenario das nächste Mal zeigt, besteht darin, den Spielern eine sehr kleine Teilmenge Ihrer Spielerbasis auszuwählen. Dann simulieren Sie für kurze Zeit die Serverseite für sie und vergleichen Ihre Ergebnisse mit denen. ohne ihr Wissen. Wenn sie zu stark abweichen (Sie müssen mit einigen Abweichungen rechnen), klassifizieren Sie sie als potenzielle Betrüger und simulieren sie noch eine Weile, um dies zu bestätigen. Was Sie erhalten, ist eine Art Kurve, die davon abhängt, wie stark ein legitimer Spieler im Vergleich zum Server abweicht, beeinflusst von den Netzwerkbedingungen usw., und Sie werden schnell feststellen, dass sich die Betrüger außerhalb dieser Kurve befinden. Dieses System bietet folgende Vorteile:
quelle
Wie Daniel sagte, wird das große Problem hier Programme sein, die die Aktion für den Spieler ausführen; Wenn der Spieler ein Roboterarm mit einer Präzision wäre, die normalerweise für die Neurochirurgie bestimmt ist, wäre keine Verzerrung der Physik im Spiel erforderlich.
quelle