Je construis un MMO et souhaite ajouter des PNJ. Le fait est que je ne connais pas la conception de base. Que font les calculs, les clients ou le serveur? Je comprendrais que le serveur calcule les événements et les réactions, mais en ce qui concerne la recherche de chemins et la position et le mouvement du joueur, qui calcule cela?
Qui calcule l'IA du serveur ou du client? Je ne pouvais pas imaginer que le serveur calcule la localisation, la position, le mouvement, etc. S'il vous plaît, j'ai besoin d'aide pour comprendre cela, merci, tout sera utile.
Réponses:
La plupart des MMO de nos jours ont quelque chose d'important à faire côté serveur, pour des raisons de sécurité. Vous ne pouvez pas décharger beaucoup sur le client, c'est pourquoi l'une des premières choses axées sont les routines AI. Je pense que la plupart des développeurs considèrent que le côté client est piratable en règle générale, pas une exception.
Badumna de Scalify ( http://www.scalify.com/badumna.php ) essaie d'en décharger une partie sur les clients en ce sens qu'ils auront des calculs effectués côté client et envoyés les uns aux autres; certaines données sont également envoyées à un homologue faisant autorité pour être validées avant d'être transmises aux clients, tout comme un serveur dédié. Le problème est que TOUTES les données dans un jeu multijoueur DOIVENT être envoyées via un pair faisant autorité si vous voulez empêcher la tricherie. J'ai évoqué Badumna car cela semblait le plus proche de ce que vous pourriez vouloir, mais même cela ne pourra pas attraper les tricheurs - il pourrait en attraper certains, mais tout ce qui est critique (c'est-à-dire tout, à peu près) doit être fait sur le serveur - côté.
Je pourrais en développer sur Badumna, car cela pourrait encore être quelque chose que vous trouverez utile (mais je vous invite à reconsidérer le déchargement de tout ce qui est important sur les clients, car les clients tricheront).
Badumna propose une architecture hybride pour les opérations de données. Il fournit un contrôle complet au développeur pour décider ce qui est critique (et doit être vérifié) et ce qui ne l'est pas (et peut donc être envoyé par le réseau décentralisé).
Si un MMO nécessite que chaque bit d'information soit vérifié, Badumna fonctionnera comme une solution client-serveur. Cependant, je pense qu'il existe différentes catégories d'applications MMO avec des exigences différentes. Par exemple, assez souvent, un MMO aura des zones de combat où les joueurs sont susceptibles de tricher et donc chaque bit d'information doit être vérifié. Cependant, il existe également des zones où les joueurs ne peuvent que marcher / courir / danser / discuter. Ces zones ne nécessitent pas de vérification complète et peuvent utiliser le réseau décentralisé de Badumna et bénéficier de l'évolutivité qu'il peut offrir.
Deuxièmement, Badumna fournit des fonctionnalités de sécurité supplémentaires auxquelles les développeurs peuvent accéder, telles que la protection de l'identité (afin que les utilisateurs ne puissent pas prétendre être quelqu'un d'autre), le proxy de réclamation (permettant aux clients d'être configurés pour signaler les joueurs malveillants / tricheurs à une source de confiance) et la liste noire (interdiction des joueurs malveillants des jeux).
Je n'ai pas vraiment exploré Badumna, donc il pourrait y avoir des problèmes et des fonctionnalités que je ne connais pas, mais au moins j'y ai jeté un coup d'œil rapide.
tl; dr: le client doit être simplement un clavier et une souris connectés à Internet.
la source
La réponse courte est que pour un MMO standard, les calculs de l'IA sont toujours effectués par le serveur.
Certains jeux demanderont au client de prédire l'IA, de sorte que les PNJ semblent réagir plus rapidement, mais ce n'est qu'une illusion; le vrai NPC est toujours contrôlé par le serveur.
la source
Un MMO est un serveur public (Internet). Tout ce que vous voulez pouvoir contrôler complètement ne doit pas être accessible au public, sinon vous risquez de permettre à un attaquant de contrôler les PNJ. À moins que vous n'effectuiez une sorte de cryptage sur vos commandes (ce qui affectera les performances), vous ne pouvez pas faire confiance au client pour exécuter uniquement votre propre code.
Prédire les mouvements des PNJ sur le client pour compenser le décalage est une excellente idée; vous pouvez théoriquement inclure autant de comportement de l'IA que vous le souhaitez dans le programme client et les synchroniser périodiquement - mais permettre au client de dicter le comportement d'un PNJ donnerait au client le potentiel de jouer avec le monde du jeu. Si le client se désynchronise du monde du jeu sur le serveur, vous vous retrouverez avec des PNJ voyous incontrôlables.
Ce qui est vraiment dommage, car la distribution de l'IA sur les clients peut avoir un impact sur l'évolutivité.
la source
Habituellement, le serveur doit calculer ou valider toutes les données transmises ou reçues du client. Mais cela dépend de la confiance que vous pouvez accorder au client et de l'importance de ce calcul. Parfois, le calcul principal peut être effectué sur le client et le serveur peut utiliser une méthode simple pour valider les données résultantes.
la source
Pour s'appuyer sur les autres réponses, la stratégie "décharger et vérifier" pourrait en effet être utile, dans des situations où la vérification est plus facile que le calcul d'origine (ou où seules des vérifications ponctuelles ponctuelles suffiraient à attraper des tricheurs).
Par exemple, si vous demandiez au client d'effectuer une recherche de chemin A * et d'envoyer les résultats au serveur, tout ce que le serveur aurait à faire serait de vérifier que a) le chemin est valide et b) qu'il n'y a pas de chemin plus court. La vérification de la validité du chemin devrait être facile, et la vérification de l'optimalité pourrait être plus facile que de trouver le chemin optimal pour commencer, car vous avez maintenant une limite supérieure sur la longueur des chemins que vous devez vérifier. (En particulier, si le client renvoie un chemin en ligne droite, il est évidemment optimal tant qu'il est valide.) Pour être honnête, je ne sais pas si cette astuce particulière serait utile dans la pratique, mais je ne vois aucun obstacle fondamental à elle.
Notez cependant que si vous déchargez l'IA NPC sur les clients, un client piraté pourrait potentiellement l'utiliser pour prédire le comportement NPC à l'avance. Pour certains types de jeux ou de situations, cela pourrait être un problème grave.
la source
Il est probablement préférable d'avoir quelques routines d'IA simples et des calculs critiques du jeu côté serveur, tout en gérant les opérations complexes non critiques du côté client.
Par exemple, le serveur sait où se trouve un PNJ hostile et où se trouvent les personnages joueurs. Lorsque le personnage du joueur se trouve à portée du PNJ, un calcul côté serveur peut être effectué pour voir si le PNJ doit attaquer le joueur, et un routage de guidage simple peut être effectué pour déterminer combien de temps il faudra au PNJ pour atteindre le joueur.
Une fois que le PNJ est passé à l'état d'attaque, le client peut gérer l'animation et la recherche de chemin à grain fin. Lorsque le PNJ est suffisamment proche du client pour attaquer, le serveur peut effectuer des calculs pour voir si l'attaque a frappé, quels étaient les dégâts, etc.
Vous voudrez vous assurer que tous les calculs qui affectent vraiment le résultat du jeu sont gérés par le serveur et transmis au client, tandis que les calculs non critiques sont gérés par le client.
Dans le cas le plus simple, vous garderez le client synchronisé avec l'endroit où il s'attend à ce que le serveur soit, le serveur vérifiera, puis le client calculera à nouveau.
la source