Bienvenue sur JeuxOnLine - MMO, MMORPG et MOBA !
Les sites de JeuxOnLine...
 

Panneau de contrôle

Recherche | Retour aux forums

JOL Archives

palier à l'absence des scripts dynamiques -- definir une liste de comportements.

Par Lumina le 4/7/2001 à 7:10:00 (#25950)

extrait de la FAQ de NWNscript:

What sort of things CANT you script?:
Dynamically swapping npc scripts. You should be able to create a really big script that holds all the options, you simply wont be able to 'include' any scripts dynamically.


Bon, si je traduis, ca veut dire qu'il sera impossible de modifier le script d'un objet ou d'un PNJ dans le jeu lui-meme (c'est à dire de maniere dynamique).

Vous pourrez rendre votre script aussi complet que possible, afin de gerer le maximum de reponses possibles (en fonction de tous les parametres que vous voudrez, sexe, alignement, race, etc..). Vous pourrez meme donnez des reponses aleatoires. Mais vous ne pourrez affecter un comportement nouveau non-prevu par votre script au sein meme du jeu.

Voici un exemple:
Nous voudrions simuler un sort de domination mentale sur toute une population: chaque PNJ qui croisera le Seigneur devra prononcer des paroles de soumissions.
Etant donné qu'à la base les scripts des PNJ n'ont pas inclus cette possibilité de dialogue, notre projet est impossible à realiser.

Il n'est pas non plus possible de creer une relique telle que toute personne/pnj dans un rayon de 5 metres s'exclame "Mon dieu, comme c'est beau!" et/ou s'agenouille car les dialogues et actions sont dependants des scripts propres à chaque pnj.

Voici la solution que je propose:

Creer une serie de comportements/reactions variés et divers afin de pouvoir etre aisements inclus dans tous les scripts des pnj.

Voici la liste de situations que je propose d'envisager pour les pnj (à completer):
*rencontre avec quelqu'un qui sent extrement mauvais
*rencontre avec quelqu'un d'extrement beau
*rencontre avec quelqu'un grievement blessé
*rencontre avec un hors-la-loi
*soumission de type Maudit
*soumission de type Esclave d'un Maitre/Seigneur
*soumission de type Adoration
*soumission/transformation de type Zombie
*transformation de type Vampire
*reaction - Pleurs
*reaction - Euphorie
*reaction - S'agenouille
*reaction - Sautille
*reaction - Menaces de Mort
*reaction - Folie
*etc..


Voici un exemple d'application avec une harpe de melancolie (je viens de l'inventer):
Quand je jouerais de cette harpe avec un succes de facteur 3, elle va creer une variable appelée par exemple tout_le_monde_pleure = 30. Le nombre 30 est l'indice de pouvoir/reussite de la harpe, et je l'ai calculé dans cette exemple comme etant 10 fois le facteur de reussite. Si on a bien fait notre travail, tous les pnj autour de moi vont reconnaitre cette variable, et vont lancer leur propre script reaction_je_pleure qui sera independant pour tout le monde. Quelqu'un d'immunisé aux effets de la harpe sera simplement quelqu'un avec un indice de reaction_je_pleure superieur à 30 (exemple un pnj dragon possedera cette caracteristique à 25+5D10 et un enfant la possedera à 0+2D4. Le dragon ne pleurera jamais et l'enfant systematiquement).

Si nous ne scriptons pas par defaut toute une serie de comportements, il sera impossible de creer ce genre d'objets ou des situations de soumission pour tous les pnj (Maitre, j'obeirais *s'agenouille*).

Enfin, c'est une idée, mais c'est bien de se poser la question aussi.

[ 04 juillet 2001: Message édité par : Une dame en blanc ]

Par Paoh le 4/7/2001 à 10:09:00 (#25951)

Pour reprendre l'exemple de ta harpe de mélancolie *snif* ;)...

Pourquoi ne pas considérer :
1. un test sur toutes les creatures vivantes dans un rayon donné.
2. un test sur leur Saving Throw de volonté
si il est raté cela provoque en aléatoire parmi plusieurs choix, une parole (ah, quel malheur !), une fuite (effet de peur), ou aute...

Mais dans ce cas il n'y aura qu'un script pour l'action de l'objet et non un script pour la reaction de chaque pnj.

A débattre... c'est une excellente question :)

Par akhenatonej le 4/7/2001 à 12:06:00 (#25952)

Petite question que je me pose.
Est-ce que avoir une série (forcément un peu importante) de scripts de réactions par défaut sur chaque NPC ne va pas alourdir de manière très (trop?) importante les modules? Dans le même ordre d'idée est-ce que cela ne risque pas de ralentir les NPC en les obligeant à tester en permanence un grand nombre de paramètres? Ou alors je n'ai rien compris à la manière dont ces scripts sont exécutés, ce qui est possible ;)

Gromovar Wolfenheir (qui va jeter un oeil à Dungeon siege en attendant NWN :) )

Par Uther Pendragon le 4/7/2001 à 13:06:00 (#25953)

A mon avis, dans la liste des réactions, certains éléments sont peut être superflux (compensable par des parametres plus simple). Par exemple : rencontre avec quelqu'un qui sent extrement mauvais ou rencontre avec quelqu'un d'extrement beau sera géré d'office par biais du charisme en fonction de la condition du PNJ (diffuseur d'infos, marchand, etc.)...

Et d'après la dernière interview de Mark Brockington, ce type de "réactions" est aisément réalisable. Il donne l'exemple d'une créature réagissant à certains mots clefs. Imaginons que le seigneur dise : "vous devez le respect à votre Seigneur", les créatures alentours (dans un rayon de 10 metres, je crois) exécute automatiquement le script générique qui leur est associé.
On peut imaginer ce type de réaction en fonction du contenu de l'inventaire du 'seigneur' (il porte une courone, on le reconnait comme le 'roi' de la région). Le script est alors exécuté.

Mais comme le dit Gromovar, on risque rapidement d'avoir des serveurs asthmatiques si *tous* les PNJs doivent réagir. Il serait effectivement préférable que le script soit associé à un 'object' et qu'il soit "utiliser" pour "cibler" le PNJ devant réagir basiquement...

Mais il est clair que ce type de questions est très intéressant et qu'il faut commencer à y réfléchir dès maintenant. :)

Par Lumina le 4/7/2001 à 15:27:00 (#25954)

[..]cela provoque en aléatoire parmi plusieurs choix, une parole, une fuite, ou aute..
Mais dans ce cas il n'y aura qu'un script pour l'action de l'objet et non un script pour la reaction de chaque pnj.

Et bien c'est ce qui est considéré comme impossible à réaliser avec des scripts. Tu ne peux pas forcer un pnj à prononcer des paroles qu'il ne possede pas dans son script (normal si il est muet par exemple).

Est-ce que avoir une série (forcément un peu importante) de scripts de réactions par défaut sur chaque NPC ne va pas alourdir de manière très (trop?) importante les modules?

oui, c'est un risque, il faut donc creer intelligeament ce type de reactions.

Dans le même ordre d'idée est-ce que cela ne risque pas de ralentir les NPC en les obligeant à tester en permanence un grand nombre de paramètres? Ou alors je n'ai rien compris à la manière dont ces scripts sont exécutés, ce qui est possible

D'apres la FAQ, il est prevu de pouvoir affecter le declenchement des tests d'un script uniquement pour certains evenements. Ainsi, tu ne testes le lieu où tu te trouve que lors des changements de zone; tu ne testes la rencontre avec un persnnage que au moment où tu le rencontre et pas tout le temps.

d'après la dernière interview de Mark Brockington, ce type de "réactions" est aisément réalisable. Il donne l'exemple d'une créature réagissant à certains mots clefs. Imaginons que le seigneur dise : "vous devez le respect à votre Seigneur", les créatures alentours (dans un rayon de 10 metres, je crois) exécute automatiquement le script générique qui leur est associé.

C'est l'exemple de la FAQ: la couronne, c'est ce que j'ai appellé la variable de declenchement. Mais tous les pnj doivent posseder le script de reaction adequat, il ne peut pas leur etre imposé par l'objet de maniere dynamique. D'où la nessessité de gerer une liste de reactions particuliere et adaptée à notre module. Si on veut pouvoir gerer une maladie contagieuse, il faut aussi que les pnj puissent chacun exprimer leur souffrance ("Oh ma tête..").

Il serait effectivement préférable que le script soit associé à un 'object' et qu'il soit "utiliser" pour "cibler" le PNJ devant réagir basiquement...

Oui!!
Ca c'est une solution!! ca regle le probleme des tests en permanence. Il faut esperer que ce soit faisable. Mais ca ne retire pas le fait qu'il faut prevoir en avance les reactions des pnj pour tout une panoplie de situations.

Par Paoh le 4/7/2001 à 16:03:00 (#25955)

Je veux etre sûr de bien comprendre :

L'utilisation d'un objet et le script lancé par son utilisation ne peut pas déclencher une action (un script) chez les pnjs affectés sans qu'elle soit déjà prévue dans leurs scripts (aux pnjs).

Si c'est le cas, on peut toujours créer un état particulier (exemple : triste) provoqué (après Saving Throw par exemple) par l'utilisation (le script) de l'objet.
Pour chaque PNJ concerné, il faudra en effet créer un script (le même ou pas) en fonction de cet état.
Et là c'est d'une liste d'états dont on aura besoin... * se gratte la tête *

mmmh... j'espère que j'ai mal compris...

Par Aliabastre le 4/7/2001 à 19:45:00 (#25956)

Mmmhh...
Il se peut qu'effectivement on ne puisse pas faire parler un PNJ "à l'improviste" par script, mais il doit être possible de lui commander des actions du genre "emotes" (agenouiller, assoir, saluer, geste obscène, etc.). Ces actions seraient commandées par une autre personne (possèdant l'attribut/l'objet provoquant le comportement) sur tout PNJ se trouvant à XX mètres de l'individu...

Je me demande si en poussant le vice, on ne pourrait pas attribuer au PNJ une fonction "Dire" qui prendrait une chaîne de caractères en paramètre...mais il faudrait que la fonction fasse déjà partie de la classe PNJ, et je crois que l'on ne pourra définir que des fonctions globales...

Par Myvain le 4/7/2001 à 21:05:00 (#25957)

Peut-être sera-t-il possible de créer un tableau regroupant un certains nombre de réactions pour l'ensemble des PNJ. Ainsi, après les jets de sauvegarde liés à un événement, les pnj affectés iront chercher la réaction qui convient dans un seul et même tableau prévu à l'avance qui regroupe un certain nombre de réaction.
Celà évite de créer un script pour chaque PnJ. Ce script 'général' pour la classe de PNJ servira pour tous.

Reste ensuite à scripter pour l'objet où l'évenement en question une commande indiquant au Pnj l'endroit où aller chercher la réaction adéquate dans ce même tableau.
Mais peut-être ne suis-je pas très clair :rolleyes: .
Ex: pour reprendre l'exemple de la couronne, le roi visite la ville. L'ensemble des Pnj se trouvant dans le champ d'action font leur jets de sauvegarde. Pour ceux qui le rate, le script de cette couronne leur indique qu'il doivent aller chercher la réaction dévotion + les paroles qui vont avec, dans le tableau des réactions PNj.
Reste à savoir si celà est possible à réaliser.

JOL Archives 1.0.1
@ JOL / JeuxOnLine