Wer berechnet die KI in einem MMO?

30

Ich baue ein MMO und möchte NPCs hinzufügen. Die Sache ist, dass ich das grundlegende Design nicht kenne. Was machen die Berechnungen, die Clients oder der Server? Ich würde verstehen, dass der Server Ereignisse und Reaktionen berechnet, aber wer berechnet das, wenn es um die Ermittlung des Pfades, die Position und die Bewegung des Spielers geht?

Wer berechnet die KI des Servers oder Clients? Ich konnte mir nicht vorstellen, dass der Server die Wegfindung, Position, Bewegung usw. berechnet. Bitte ich brauche Hilfe um das zu verstehen, danke, alles wird helfen.

Patrick Lorio
quelle
2
Sei vorsichtig mit deiner Terminologie - NPCs sind zum Beispiel keine Spieler.
Kylotan

Antworten:

25

Die meisten MMOs lassen heutzutage aus Sicherheitsgründen alles Wichtige serverseitig erledigen. Sie können nicht viel auf den Client auslagern, weshalb AI-Routinen als erstes beseitigt werden. Ich denke, die meisten Entwickler halten die Client-Seite in der Regel für hackbar und nicht für eine Ausnahme.

Scalifys Badumna ( http://www.scalify.com/badumna.php ) versucht, einen Teil davon auf die Clients zu übertragen, indem sie Berechnungen clientseitig durchführen und aneinander senden lassen. Einige Daten werden auch an einen autorisierten Peer gesendet, um validiert zu werden, bevor sie an Clients weitergeleitet werden, genau wie ein dedizierter Server. Das Problem ist, dass ALLE Daten in einem Multiplayer-Spiel über einen autorisierenden Peer gesendet werden MÜSSEN, wenn Sie Betrug verhindern möchten. Ich brachte Badumna auf den Punkt, da es dem am nächsten zu sein schien, was Sie vielleicht wollen, aber selbst das wird Betrüger nicht fangen können - es könnte einige fangen, aber alles, was kritisch ist (dh alles, ziemlich viel), muss auf dem Server erledigt werden. Seite.

Ich könnte Badumna etwas erweitern, weil es immer noch nützlich sein könnte (aber ich fordere Sie dringend auf, das Abladen von allem, was für die Kunden wichtig ist, zu überdenken, da die Kunden schummeln WERDEN).

Badumna bietet eine hybride Architektur für Datenoperationen. Der Entwickler hat die vollständige Kontrolle darüber, was kritisch ist (und überprüft werden muss) und was nicht (und somit vom dezentralen Netzwerk gesendet werden kann).

Wenn ein MMO die Überprüfung jeder einzelnen Information erfordert, fungiert Badumna als Client-Server-Lösung. Ich glaube jedoch, dass es unterschiedliche Kategorien von MMO-Anwendungen mit unterschiedlichen Anforderungen gibt. Zum Beispiel hat ein MMO ziemlich oft Kampfzonen, in denen die Spieler wahrscheinlich betrügen und daher jede Information überprüft werden muss. Es gibt jedoch auch Zonen, in denen Spieler nur laufen / rennen / tanzen / chatten können. Solche Zonen erfordern keine vollständige Überprüfung und können das dezentrale Netzwerk von Badumna nutzen und von der Skalierbarkeit profitieren, die es bietet.

Zweitens bietet Badumna zusätzliche Sicherheitsfunktionen, auf die Entwickler zugreifen können, z. B. Identitätsschutz (damit Benutzer nicht vorgeben können, jemand anderes zu sein), Beschwerdeproxy (damit Clients so konfiguriert werden können, dass böswillige / betrügerische Spieler an eine vertrauenswürdige Quelle gemeldet werden) und schwarze Liste (Verbot böswilliger Spieler von den Spielen).

Ich habe Badumna nicht wirklich erforscht, daher kann es Probleme und Funktionen geben, die mir nicht bekannt sind, aber ich habe zumindest einen flüchtigen Blick darauf geworfen.

tl; dr: der client sollte eigentlich nur eine tastatur und maus sein, die mit dem internet verbunden sind.

Robert S.
quelle
9

Die kurze Antwort lautet, dass für ein Standard-MMO die AI-Berechnungen immer vom Server ausgeführt werden.

Bei einigen Spielen wird der Kunde versuchen, die KI vorherzusagen, sodass NPCs schneller zu reagieren scheinen, aber das ist nur eine Illusion. Der echte NPC wird immer vom Server kontrolliert.

Trevor Powell
quelle
5

Ein MMO ist ein öffentlich zugänglicher (Internet-) Server. Alles, was Sie vollständig kontrollieren möchten, sollte der Öffentlichkeit nicht zugänglich sein, sonst riskieren Sie, dass ein Angreifer NPCs kontrollieren kann. Wenn Sie Ihre Befehle nicht verschlüsseln (was sich auf die Leistung auswirkt), können Sie nicht darauf vertrauen, dass der Client nur Ihren eigenen Code ausführt.

Es ist eine großartige Idee, NPC-Bewegungen auf dem Client vorherzusagen, um die Verzögerung zu kompensieren. Sie könnten theoretisch so viel von dem KI-Verhalten, wie Sie wollten, in das Client-Programm aufnehmen und regelmäßig synchronisieren lassen. Wenn Sie dem Client jedoch erlauben, das Verhalten eines NPCs zu diktieren, hat der Client das Potenzial, sich in die Spielwelt einzumischen. Wenn der Client sich von der Spielwelt auf dem Server abmeldet, werden Sie mit unkontrollierbaren Schurken-NPCs konfrontiert.

Was wirklich schade ist, da die Verteilung von KI auf Clients die Skalierbarkeit beeinträchtigen kann.

Tullo_x86
quelle
2
Verschlüsselung ist meistens nutzlos - der Client muss in der Lage sein, alles zu entschlüsseln, was an ihn gesendet wird, und der Client kann rückentwickelt werden. Im besten Fall verlangsamt die Verschlüsselung die Erstellung eines betrügerischen Clients.
Adam
2

Normalerweise sollte der Server alle Daten berechnen oder validieren, die an den Client übergeben oder von diesem empfangen werden. Aber es kommt darauf an, wie viel Vertrauen Sie dem Kunden schenken können und wie wichtig diese Berechnung ist. Manchmal könnte die Hauptberechnung auf dem Client durchgeführt werden und der Server könnte eine einfache Methode verwenden, um die resultierenden Daten zu validieren.

Rotklee
quelle
1

Um auf den anderen Antworten aufzubauen, könnte die Strategie "Auslagern und Verifizieren" in der Tat in Situationen nützlich sein, in denen die Verifizierung einfacher ist als die ursprüngliche Berechnung (oder in denen nur gelegentliche Stichprobenkontrollen ausreichen würden, um Betrüger zu fangen).

Wenn der Client beispielsweise die A * -Pfadfindung ausführen und die Ergebnisse an den Server senden würde, müsste der Server lediglich überprüfen, ob a) der Pfad gültig ist und b) es keinen kürzeren Pfad gibt. Die Überprüfung der Pfadgültigkeit sollte einfach sein, und die Überprüfung der Optimalität könnte einfacher sein, als zunächst den optimalen Pfad zu finden, da Sie jetzt eine Obergrenze für die Länge der zu überprüfenden Pfade haben. (Insbesondere wenn der Client einen geraden Pfad zurückgibt, ist dieser natürlich optimal, solange er gültig ist.) Um ehrlich zu sein, habe ich keine Ahnung, ob dieser bestimmte Trick in der Praxis nützlich wäre, sehe aber kein grundlegendes Hindernis dazu.

Beachten Sie jedoch, dass ein gehackter Client das NPC-Verhalten möglicherweise vorhersagen kann, wenn Sie die NPC-KI auf die Clients auslagern. Für einige Arten von Spielen oder Situationen kann dies ein ernstes Problem sein.

Ilmari Karonen
quelle
1

Es ist wahrscheinlich am besten, einige einfache KI-Routinen und spielkritische Berechnungen auf der Serverseite zu haben und gleichzeitig die komplexen, nicht spielkritischen Vorgänge auf der Clientseite zu erledigen.

Beispielsweise weiß der Server, wo sich ein feindlicher NPC befindet und wo sich die Spielercharaktere befinden. Wenn sich der Spielercharakter in Reichweite des NPCs befindet, kann eine serverseitige Berechnung durchgeführt werden, um festzustellen, ob der NPC den Spieler angreifen sollte, und eine einfache Wegfindungsroutine kann durchgeführt werden, um zu bestimmen, wie lange der NPC brauchen wird, um den Spieler zu erreichen.

Sobald der NPC in den Angriffszustand übergegangen ist, kann der Client mit Animation und feinkörniger Pfadfindung umgehen. Wenn der NPC nah genug am Client ist, um anzugreifen, kann der Server Berechnungen durchführen, um festzustellen, ob der Angriff getroffen wurde, was der Schaden war usw.

Sie sollten sicherstellen, dass alle Berechnungen, die sich wirklich auf das Spielergebnis auswirken, vom Server verarbeitet und an den Client übergeben werden, während die nicht kritischen Berechnungen vom Client verarbeitet werden.

Im einfachsten Fall halten Sie den Client mit dem erwarteten Server synchron, der Server überprüft dies und der Client berechnet es erneut.

jessecurry
quelle