NWNX - Echanges d'idées

Répondre
Partager Rechercher
Prévient tout de suite: mon message n'a aucun rapport avec le titre du topic, n'hésitez pas à le déplacer, voir supprimer ma remarque. La réponse à la question posée ayant été donné je me permet ce HS.

Laban au moins tu parles d'un projet illusoire, je suis bien d'accord avec toi.
Personnellement je fais tourner mon serveur sur une machine qui possède un DD 15000 tour minutes, et je vois simplement le bruit que ça fait à chaque enregistrement sur MySQL. C'est un bruit tellement "impressionnant" que je me suis demandé s'il n'y avait pas un problème au début.

Quand tu parles d'une IA basés sur nwnx et MySQL tu parles d'un script qui irait chercher les informations de comportement des PNJ sur la base? En effet ça me paraît très gros. Je me souviens d'avoir lu un post sur le nombre de calcul et informations traîtés simplement durant un combat.

Si tu reportes tout ça sur mySQL ça donne un nombre d'appel hallucinant à chaque event d'un PNJ, multiplié par le nombre de PNJ dans le cas d'un combat tu risque d'observer un pic de charge sur le processeur et le disque dur.

Certe nwnx est parfait pour un système de persistance mais de là à imaginer une IA l'utilisant...Tu prends le risque de faire ramer comme jamais la machine qui fait tourner le serveur.

Alors oui une IA basé sur nwnx, ça serait l'enfer plus que le paradis pour les joueurs...
Enfin si tu veux tester tiens nous au courant, on sait jamais :P
Je laisse aussi les admins libres d'ouvrir un nouveau topic pour ça, pour le moment, je vais suivre le flux de pensées qui nous amène là. Le flux étant typiquement un objet d'études pour l'AI, ceci dit au passage

D'abord, je distingue l'AI de combat de l'AI de socialisation. Dans les deux cas le souci d'optimiser pour préserver les performances du serveur est évidemment central dans la méthode mise en oeuvre.

Pour la première, j'ai une première maquette qui tourne. Pas de MySQL, mais une version améliorée du plugin NWNX xp_hashset qui gère des tableaux. Une bibliothèque nwscript et plusieurs events gérés. Les ennemis travaillent en équipe, avec des rôles et une hiérarchie assignés (par tags hexadécimaux sur des variables). Un contrôleur par équipe centralise les informations, les cibles et assigne les actions. Au final, on est plus léger que la fonction standard DetermineCombatRound() et beaucoup plus efficace, avec une gestion du moral ( fuite ), de la magie ( sorts adaptés ), de l'XP etc.

L'avantage du contrôleur, c'est que tu n'as qu'un seul objet qui avec un heartbeat, au lieu d'un par créature, et tu peux même contrôler / limiter les calculs vu que tu as un "robinet" par lequel tout "sort". De plus, tout est fait avec des entiers et pas des strings, donc rapidité accrue. Tout ça pour dire que le serveur s'en prend pas mal plein les dents avec les scripts existants et qu'il est même possible d'alléger les choses avec un système de ce genre. D'autant que NWNX exécute des DLL et que nos serveurs multicoeurs sont ravis de pouvoir répartir les tâches, NWN2 n'étant pas multicore

Pour la seconde, j'en suis à la modélisation, car c'est plus complexe. On aurait aussi des tags et une gestion par contrôleur central (un contrôleur par zone a priori). MySQL serait requis pour stocker la "mémoire" des créatures, avec plusieurs durée (mémoire courte ou longue), un script nettoyant régulièrement les tables : simulation de l'oubli. Mais il faut aussi gérer les "pratiques habituelles" (métier par exemple) et les "besoins" (dormir ou manger), sachant que tu dois fabriquer une intelligence finie par créature à partir d'archétypes déterminés. En gros, que fait / pense un marchant qui croit en Waukeen le samedi à 15h ? Complexe.

Le truc marrant pour en revenir à NWNX c'est qu'avec le plugin xp_chat, on pourrait tout à fait "laisser traîner les oreilles des NPCs" et capter ce que se disent les joueurs, voire aller jusqu'à produire un chatbot qui parlerait aux joueurs. Ca existe déjà et ce serait possible via un plugin supplémentaire.
La partie AI est en effet passionnante d'un point de vue informatique, intellectuel et "sémiotique". L'AI sociale étant de loin la plus complexe. Tant l'AI de combat que l'AI sociale sont pauvres dans NWN et néanmoins totalement remodelable, je pense que ça vaut qu'on s'y penche. Il faut voir ce qu'a fait Tony_k déjà.

Technique. Ce contrôleur ne peut pas être détruit par un personnage, étant donné qu'il s'agit d'un objet "caché" qui n'est pas ciblable et qui est détruit (comme le tableau) via script à la fin du combat, quand tous les ennemis ont été vaincus ou ont fui.
Le controleur peut il prendre la forme d'un waypoint par exemple ?...ça pourrait m'intéresser
Autrement, MySQL utilise quelle version de SQL maintenant ? et, comme je n'ai pas vraiment encore regardé ça est ce que NWNX peut être employé avec un autre logiciel SQL comme SQL server ? (étant étudiant, microsoft m'a gentiment donné une licence )
Oui tu as entièrement raison ClementC ...mais encore... une autre question/remarque pour faire avancer le débat ou proposer quelque chose pour la construction d'une IA telle que proposée par Laban? Car c'est bien là le sujet et pas une discussion philosophique sur l'intérêt de l'IA donc merci de ne pas dévier.
Si tu n'es pas d'accord/intéressé par le sujet, c'est ton droit mais stp ne vient pas lancer un débat dans cette discussion, après c'est impossible à suivre pour ceux que ça intéresse. Dans ce cas crée un autre topic. Merci.
J'aime beaucoup cet approche de l'intelligence artificiel.
http://aigamedev.com/interviews/stalker-alife

Je pense qu'il est tout à fait possible de concevoir un plugin nwnx qui déclencherait un processus externe gérant les comportements des pnjs "offline"(se référer à l'article).

Un concept tout aussi intéressant :
http://www.igda.org/ai/report-2004/goap.html

Citation :
Citation :
Est il nécessaire d'avoir une IA social, après tout ne suffit il pas d'animer?
Si tu n'es pas d'accord/intéressé par le sujet, c'est ton droit mais stp ne vient pas lancer un débat dans cette discussion, après c'est impossible à suivre pour ceux que ça intéresse. Dans ce cas crée un autre topic. Merci.
C'etait ironique car c'est le genre de chose que l'on me dit systématiquement chaque fois que je parle de mécanisme géré par la machine et non par un être humain à nwn2.
Nik, le contrôleur peut être un objet du type que l'on veut à partir du moment où il a un événement onHeartBeat, ce qui n'est pas le cas du Waypoint. Un placeable fait par contre l'affaire.

MySQL est open-source comme tu le sais sans doute et NWNX n'accepte que cette DB je crois. Quand à la version de SQL, je ne saurai dire

ClementC, techniquement, c'est effectivement un processus séparé du jeu qui pourrait tourner, mais plus pour l'AI sociale que l'AI combat, encore qu'à un moment on puisse vouloir relier les deux, mais là je vais trop loin. Cependant, cette partie là est vraisemblablement fort éloignée de toute possibilité de réalisation immédiate.

Mais l'approche 'orientée objectifs' est très intéressante et je suis prêt à parier que je chiperai deux trois idées là dedans si ça se fait Je te remercie bien.

Je me rends bien compte qu'on peut partir dans de vastes usines à gaz pour rien, si on ne cible pas tout de suite l'attente des joueurs vis-à-vis de l'AI. En l'occurence pour l'AI sociale de NWN2 je suis en train de réfléchir en termes d'archétypes de lieux ( marchés, magasins, maisons, prisons, temple, casernes etc.) et d'archétypes de personnages ( marchant, esclave, villageois, artisan, noble, etc.), grosso modo. Dans un type de lieu donné, on s'attend à un type d'interactions données entre des types de personnages qui s'y situent pour des raisons propres.

Mais il ne faut pas oublier que ce qui importe pour le joueur, c'est que l'AI le prenne en compte lui, égoïste que nous sommes. Il faut donc prévoir un certain nombre d'évènements que peut déclencher un joueur ( commerce, pickpocket, agression, etc.) et faire réagir adéquatement les PNJs.
Citation :
Mais l'approche 'orientée objectifs' est très intéressante et je suis prêt à parier que je chiperai deux trois idées là dedans si ça se fait Je te remercie bien.
Je trouve ça genial le goap, les designers peuvent obtenir des comportements auquel il n'aurait même pas pensé.

La page de jeff orkin :
http://web.media.mit.edu/~jorkin/goap.html

J'ai beaucoup aimé l'IA de Fear qui font croire au joueur que les assassillant les contournes, alors qu'en realité chaque memebre du squad se dirige simplement vers le cover le plus proche.

Je me vois bien entrain de programmer pour le toolset un plugin qui rajouterai une case dans les bluperint de créature. Cela exécute les deux colonnes d'ajout classique du toolset (genre celle pour ajouter les hacks)
avec comme parametre les preconditions, les effets ,le coût et le script qui va avec. Je vous l'accorde ce n'est pas necessaire d'avoir un plug pour implementer le goap, mais ce serai plus parlant pour un designer.
Je me rends compte que de nombreux scientifiques ont produit pour l'armée et l'industrie des modèles assez épatants, idem pour ce que les producteurs de jeux ont pu inventer.

J'étudie l'approche Systèmes Multi-Agents pour le moment, pour produire un système d'animation réactive et proactive, c'est-à-dire que les agents / PNJs puissent venir même "proposer des choses" aux joueurs, comme ils le feraient entre eux : des échanges commerciaux notamment. Le tout guidé par le type de zone dans lequel on se trouve, comme expliqué au dessus.

Le système serait assez bridée notamment sur l'apprentissage, au moins dans un premier temps, car je ne pense pas qu'on soit une approche adaptée à NWN2.

Un des soucis serait qu'on devra pour des raisons de performances vider les zones et les réinitialiser en fonction des joueurs qui entrent ou sortent. Mais ça ne devrait pas être trop hardu.
Citation :
c'est-à-dire que les agents / PNJs puissent venir même "proposer des choses" aux joueurs
Dans quel mesure? Vient il proposer des choses aux joueurs si celui ci entre dans son champs de vision comme il le ferait avec n'importe quel agents? Ou alors il fait tout ce qui en son pouvoir pour localiser et trouver le pj qui peut être se trouve à 5 zones de la? En communiquant avec d'autre agents par exemple.

Dans stalker les agents se déplacent de smart-terrain en smart-terrain, se sont les campements et les bases pour ceux qui connaissent. Cela ne correspond pas exactement aux area de nwn2 mais plutôt à des sub area. Ce qui est intéressant c'est que les agents ne joue aucune animation et ne se déplacent pas réellement en mode "offline". Dans nwn2 cela voudrait dire que les creatures dans les zones ou il n'ya pas de pj n'existerait pas, la zone serait vide. Elle serait représente par des variables dans une application externe : sa position, son iventaire, son bluperint, sa santé....et surtout ses plans et ses objectifs.

Citation :
Je me rends compte que de nombreux scientifiques ont produit pour l'armée et l'industrie des modèles assez épatants, idem pour ce que les producteurs de jeux ont pu inventer.
C'est ce que dit le programmer de chez GSC, ne pas réinventer la roue.

Citation :
est ce que NWNX peut être employé avec un autre logiciel SQL comme SQL server ?
http://www.nwnx.org/index.php?id=80
Regarde en fin de page le plugin :
NWNX4 SQLServer plugin
Oui exactement, c'est ce qu'il dit. La recherche scientifique est très poussée dans ce domaine, d'ailleurs j'y entrave généralement que pouic, et on y trouve des choses excellentes.

Concernant tes questions sur les subareas, comme je te disais un système persistent comme ça ne me semble pas trop adapté à NWN2 en multi, mais on ne sait jamais. Ce que je voudrais, si un jour je fais un plugin NWNX, c'est qu'il gère une mémoire, éventuellement partagée par plusieurs agents, et qu'il comprenne ce que les joueurs disent ( reconnaissance du Langage Naturel ) et leur réponde via les NPCs (chat bot).

Pour le moment, je m'oriente plus sur une gestion de l'animation somme toute assez classique dans les CRPGs.
Pour le moment, c'est très vague, mais je ne pense pas passer par l'événement onConversation.

Plutôt utiliser le plugin xp_chat, qui permet de capter et traiter tout ce que les joueurs tapent. Il faudrait créer un système d'écouteur permettant de transmettre ces informations au moteur AI pour les traiter et décider de la réaction à donner.

Une éventuelle réponse verbale apparaîtrait exactement comme une phrase prononcée par un joueur, sans que le NPC soit en discussion.

Ex :
PJ - Je voudrai acheter des bottes
Le moteur a mis un agent AI en mode écoute, sachant que le PJ se trouve à côté de lui. Il capte la phrase, la transmet à l'analyse de langage naturelle et comme l'agent est un marchand d'habits, il transmet au NWSCRIPT la réponse qui est prononcée.
PNJ - Je peux vous vendre des bottes. Ca vous intéresse ?
PJ - Oui

Idem, capture. Le PNJ étant dans une mode de proposition commerciale, NWSCRIPT lance l'ouverture d'un magasin après validation par le plugin.
Mythy, GetNearestCreature est plus simple et plus optimal que la recherche via shape, car une recherche géométrique est beaucoup plus coûteuse en termes de calculs que l'interrogation d'une liste que le moteur maintient en permanence.

Ensuite, pour savoir qui sont les agents à portée de voix du PJ, je n'ai pas encore d'idée précise. À chaud, on peut lancer cette recherche ponctuellement quand un PJ parle, de façon récurrente à partir des PJs ou de façon récurrente à partir des agents, ce qui sera plus gourmand en ressources.

En toute franchise, les seules librairies que j'ai trouvé permettant de gérer le langage naturel sont en anglais : je suis certain que si je le fais, ce sera dans cette langue. Et si je le fais. La probabilité est basse.

Par contre, le moteur d'animation, plus ou moins orienté objectifs, verra de façon quasi-sûre le jour. Je fais la liste à l'heure actuelle des types de lieux et de rôles, je veux bien de l'aide et ça marchera en français, ça

Lieux :

Désert
Nature Hostile
Campagne
Camp militaire
Ferme
Village
Quartier pauvre
Quartier riche
Marché

Maison
Prison
Caserne
Temple
Administratif
Magasin
Taverne

Agents

Chien
Chat
Poule
Herbivore
Prédateur
Monstre
Enfant
Esclave
Domestique
Client
Pauvre
Artisan
Riche
Garde
Mendiant
Saltimbanque
Commerçant
Soldat
Pickpocket
Prostitué
Serveur
Et tu penses créer combien d'objectifs?
Exemple : se nourrir, dormir, tuer ennemi, patrouiller.

Et quant tu dis plus ou moins orienté objectif, vas tu implémenter le planning dynamique et le A* algo?
Citation :
Publié par Laban
Mythy, GetNearestCreature est plus simple et plus optimal que la recherche via shape, car une recherche géométrique est beaucoup plus coûteuse en termes de calculs que l'interrogation d'une liste que le moteur maintient en permanence.
C'est vrai mais le FirstObjectInShape, on peut lui mettre n'importe quel type en filtre (type de géométrie et type d'object à chercher) ce qui revient au final au même, et si tu veux que plusieurs créatures puissent écouter, je ne pense pas que tu puisses faire un "GetNextNearestCreature" bien que l'éditeur soit toujours feintable à souhait

On a commencé un système de garde qui a sa propre IA, et c'est vraiment pas évident de pouvoir gérer tous les cas, d'une part cause de la perception ou on sait vraiment jamais quand elle se lance quand le PJ a déjà été vu et reste à coté mais aussi faut fouiller toutes les fonctions nwn2 appelés par les scripts de base afin de pouvoir "débugué"

Edit: Si GetNearestCreature maintient une liste, ça ne voudrait pas dire qu'il fait un calcul géométrique régulièrement pour tenir cette liste à jour ? La différence serait que le calcul est fait dans la fonction GetNearestCreature plutôt que scripté avec GetFirstObjectInShape ?
Citation :
et c'est vraiment pas évident de pouvoir gérer tous les cas
Au lieu de faire une usine à gaz, se serait plus judicieux de vous inspirez du GOAP. Se serait le garde lui même qui planifierai dynamiquement ses actions et non le programmeur.
Citation :
Publié par clementC
Au lieu de faire une usine à gaz, se serait plus judicieux de vous inspirez du GOAP. Se serait le garde lui même qui planifierai dynamiquement ses actions et non le programmeur.
Avant de juger, il serait bien de te renseigner et 95% de nos codes sont fait maison pour justement éviter de prendre des systèmes qui ne répondent pas nécessairement à notre besoin et qui en font plus que ce que l'on souhaite. Étant donné que nous cherchons à optimiser au maximum nos codes, nous préférons faire seulement ce dont nous avons besoin et ce qui colle avec les autres systèmes, car ils se recoupent tous.
Mythy, tu sais moi, j'écoute en général ceux qui en savent plus que moi. En l'occurence, c'est GrinningFool qui m'a indiqué cela. Si tu veux, avec GetNearestCreature, tu appelles une liste qui est effectivement maintenue par le moteur, alors qu'en lançant une recherche dans un shape, tu fais un nouveau calcul. Je pense que tu saisis bien la différence, ce n'est pas pareil, entre un résultat déjà disponible et une nouvelle recherche. Donc oui, le calcul est déjà fait (gestion de l'évènement onPerceive) dans un cas, pas dans l'autre. Autant que je sache.

Pour l'usine à gaz, moi je demande qu'à voir Lyncya, petit canaillou, pour juger

Clement, j'ai pas d'idée sur le nombre d'objectifs. Je ne suis pas d'ailleurs certain de vouloir faire une AI individuelle à 100%, plutôt une animation dans laquelle des réactions individuelles sont possibles.

Mais en gros, j'ai réfléchi à 3 niveaux d'obéissance à des règles : le temps libre, avec une opportunité de choisir un objectif en fonction du lieu; les habitudes qu'elles soient commerciales, cultuelles, professionnelles, etc.; les besoins ( manger / dormir ).

Le contrôleur de zone gèrerait les évènements en cours dans la zone, qu'ils soient déclenchés par un PJ ou non, en assignant une réaction des PNJs concernés. Il orienterait les PNJs en fonction de ces évènements s'il y en a et sinon leur donnerait l'opportunité de se déterminer individuellement. Sachant que de la sorte, on pourrait réguler le nombre de computations "gratuites" de manière à brider les consommations de ressources.

Citation :
Et quant tu dis plus ou moins orienté objectif, vas tu implémenter le planning dynamique et le A* algo?
Honnêtement, je ne fais pas la différence entre les deux. Il faut voir ce que nwscript permet aussi.
Répondre

Connectés sur ce fil

 
1 connecté (0 membre et 1 invité) Afficher la liste détaillée des connectés