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

Panneau de contrôle

Recherche | Retour aux forums

JOL Archives

PNJ perdu

Par Simkim le 4/10/2002 à 9:23:52 (#2279577)

Je veux quun de mes pnj ait lair complètement perdu et ne sache pas où aller.
Il faudrait quà chaque waypoint il sarrête, se gratte la tête et dise une petite phrase.

La phrase doit être choisie aléatoirement entre plusieurs phrases.
Sil y a dautres mimiques qui pourraient montrer la perplexité ou la réflexion il faudrait quelles soient elles aussi choisis aléatoirement.

Par Gargantuel le 4/10/2002 à 10:25:52 (#2279831)

Bon, en gros ...

Sur le spawn du NPC tu lances le WalkWaypoints() et un DelayCommand(ExecuteSctipt(...)) avec une durée aléatoire.

Dans le script tu lances un ClearAllActions() (sauf s'il est en conversation avec les joueurs ;) ) puis l'anim et la phrase de ton NPC.
Tu termines ton script en relancant le WalkWaypoints() et le DelayCommand(ExecuteScript(...)) avec une nouvelle durée aléatoire.

Valà :)

Par Kroc Le Bô le 4/10/2002 à 11:22:39 (#2280123)

Pour le WalkWaypoints il faut que tu definisses un certain nombre de points differents, et tu en tires un au hasard a chaque fois.

J'aime pas les PNJ qui font toujours les memes trajets :)

Par Simkim le 4/10/2002 à 18:33:05 (#2282027)

Jai pas tout compris, je ne suis quun barde (même si je suis le plus Grand Barde des RO), pas un informaticien.:mdr:

Gargantuel : A quoi sert le DelayCommand(ExecuteScript(...)) ? Je pari que cest pour lancer un autre script, si cest le cas pourquoi ne pas faire un seul script ? Comment tu fais une durée aléatoire ?

Kroc : si je tire un waypoint au hasard, il risque pas dy avoir des problèmes avec les objets et autres pnj qui sont sur le passage ?

Pour le choix aléatoire, je fait un jet de dé et choix du speackstring suivant le résultat ?

Par Gargantuel le 4/10/2002 à 19:22:23 (#2282271)

Provient du message de Simkim
Gargantuel : A quoi sert le DelayCommand(ExecuteScript(...)) ? Je pari que cest pour lancer un autre script, si cest le cas pourquoi ne pas faire un seul script ? Comment tu fais une durée aléatoire ?

Je te détaille ca dés que j'ai Aurora sous la main. Là je suis au boulot

Par Amaranthe le 4/10/2002 à 19:39:53 (#2282363)

Encore au boulot a c't'heure ci ?

T'as fait trop de bugs cette semaine ?

Amaranthe.

Par Gargantuel le 4/10/2002 à 19:50:03 (#2282410)

La prochaine fois que je rencontre un Oracle dans NWN, je le BUTE ! :ange:

Par Gargantuel le 4/10/2002 à 22:36:31 (#2283235)

Comme promis :

Script à mettre sur le OnSpawn du NPC :

void main()
{
ActionRandomWalk();
DelayCommand(IntToFloat(5+Random(6)), ExecuteScript("lostguyanim", OBJECT_SELF));
}


Puis sur un script qui doit porter le nom de lostguyanim :
void main()
{
if (!IsInConversation(OBJECT_SELF))
{
ClearAllActions();
ActionPlayAnimation(ANIMATION_FIREFORGET_PAUSE_SCRATCH_HEAD);
switch(Random(4))
{
case 0:
ActionSpeakString("Arf mais par ou est ce ?");
break;
case 1:
ActionSpeakString("Oh non, je tourne en rond !");
break;
case 2:
ActionSpeakString("Non, je ne reconnais rien ici ...");
break;
case 3:
ActionSpeakString("Ca y est, je suis completement perdu !");
break;
}
ActionRandomWalk();
}
DelayCommand(IntToFloat(5+Random(6)), ExecuteScript("lostguyanim", OBJECT_SELF));
}

Par Simkim le 5/10/2002 à 9:31:41 (#2284653)

Merci Gargantuel. :merci:

Questions suivantes (ben oui, j'ai plein de questions).

1 Je voudrait que le texte du journal soit différent selon si le personnage est neutre, bon, mauvais, ou s'il a 8 ou moins en int. Un paladin n'est pas censé écrire la même chose qu'un mage maléfique ou qu'un illétré dans son journal.

2 Là c'est un peu plus compliqué (je sais même pas si c'est possible). Il faudrait qu'une action réalisée par le pj modifie une variable dans n'importe quel autre zone. Par exemple, un panneau indique qu'un dragon terrorise le village. Après que le pj ait parlé au maire, le panneau doit automatiqument annoncé que le dragon a été tué par le pj. Donc si un autre pj li le panneau il doit lui aussi voir écrit que le dragon est mort. Au bout de deux semaines, un dragon réapparait et la le texte de la pancarte doit à nouveau changer pour dire qu'un dragon terrorise le village. L'histoire du dragon et du village n'est qu'un exemple, il me faudrait un script générique applicable à plusieurs situations différentes.

Par Tyn' le 5/10/2002 à 13:31:28 (#2285401)

Provient du message de Simkim
1 Je voudrait que le texte du journal soit différent selon si le personnage est neutre, bon, mauvais, ou s'il a 8 ou moins en int. Un paladin n'est pas censé écrire la même chose qu'un mage maléfique ou qu'un illétré dans son journal.
Il te faut préparer plusieures références dans ton journal, puis, à l'aide d'un test conditionnel (if), vérifier la classe, l'alignement et l'intelligence de ton PJ, pour lui assigner la bonne référence. :)
2 Là c'est un peu plus compliqué (je sais même pas si c'est possible). Il faudrait qu'une action réalisée par le pj modifie une variable dans n'importe quel autre zone. Par exemple, un panneau indique qu'un dragon terrorise le village. Après que le pj ait parlé au maire, le panneau doit automatiqument annoncé que le dragon a été tué par le pj. Donc si un autre pj li le panneau il doit lui aussi voir écrit que le dragon est mort. Au bout de deux semaines, un dragon réapparait et la le texte de la pancarte doit à nouveau changer pour dire qu'un dragon terrorise le village. L'histoire du dragon et du village n'est qu'un exemple, il me faudrait un script générique applicable à plusieurs situations différentes.
Au chargement de ton module, enregistre un LocalString contenant le texte de ton panneau :
SetLocalString(GetModule(),"TexteDuPanneau","Un dragon terrorise le village!");
Une fois le dragon tué, change le LocalString :
SetLocalString(GetModule(),"TexteDuPanneau","Sa Grandeur Messire "+GetName(oPC)+" a décimé le terrible dragon qui terrorisait notre village !");
Et sur le panneau, tu assigne simplement un SpeakString :
SpeakString(GetLocalString(GetModule(),"TexteDuPanneau"));
:)

Par Simkim le 5/10/2002 à 18:24:54 (#2286310)

1 Je devrai arriver à faire ça (enfin je crois :mdr: )

2 Si je comprend bien, il faut que je fasse les changements moi-même sur le localstring. Je voudrai que ce soit automatique. En fait, ce qu'il me faudrait, c'est que lorsque le PJ parle au maire, ça modifie la valeur d'une variable. Et lorsque la variable atteind sa nouvelle valeur, ça entraîne plusieurs effets à différents endroits du module (dans cet exemple un panneau). Il faudrait que cette variable soit sur le maire mais qu'elle reste en permanence "en jeu" que le maire soit là ou pas.
J'ai peut-être une méthode de remplacement (je rassure tout le monde, elle est pas de moi :D ) mais je suis obligé de stocker la variable sur le PJ qui doit aller lui même cliquer sur le panneau pour que son nom y apparaisse.

P.S. : t'as oublié que le dragon il revient au bout d'un certain temps :D

Par Jedaï le 6/10/2002 à 17:02:15 (#2290074)

Simkin, je crois que tu n'as pas bien compris Tyn', la commande SetLocalString changera le texte du tableau, il te suffit de la mettre dans la conversation (script dans Action Taken) du maire à l'endroit où le texte du panneau doit être modifié et de remplacer oPC par GetPCSpeaker(). et hop.

Par Simkim le 7/10/2002 à 19:55:15 (#2293514)

Je vais reprendre tout ça demain, et si je n'y arrive pas, je le ferais savoir. Par contre, Si ça marche, je continu les questions (la liste est encore longue:D )

Par Simkim le 8/10/2002 à 10:45:31 (#2296262)

Petit problème, léditeur de script refuse de compiler

SetLocalString(GetModule(),"TexteDuPanneau","Sa Grandeur Messire "+GetName(oPC)+" a décimé le terrible dragon qui terrorisait notre village !");

Jai du oublier quelque chose mais comme je ny connaît rien en script, il mest impossible de dire quoi.

Par eMRaistlin le 8/10/2002 à 11:15:16 (#2296399)

Sur les erreur de compil, le mieux, c'est de mettre aussi l'erreur qu'il te retourne, comme ca, ceux qui sont aux boulot (comme moi) ou meme ceux qui ont pas l'aurora sous la main peuvent essayer de te repondre...

Par Simkim le 8/10/2002 à 14:37:01 (#2297681)

Le message auquel jai droit est un petit classique que tout le monde connaît, jai nommé Variable Defined Without Type. :enerve:

Je crois que je vais changer de méthode pour les scripts parce que passer une matinée sur un script pour nobtenir aucun résultat et pour ne rien comprendre, cest pas très productif et ça ne fait pas avancer du tout mon module. Et en plus de ça, je reprend bientôt les cours et mon temps à consacrer à mon module sera beaucoup plus limité. :(

Donc je passe une petite annonce. Je cherche quelquun de motivé pour répondre à mes MP et à mes Mail concernant les scripts. Comme ça, ça mévitera de casser les pieds de plusieurs personnes qui à la longue en auront marre de répondre aux questions de quelquun qui ny comprend vraiment rien.

Et puis si personne veut se dévouer, cest pas grave. Je continuerai à poser plein de questions sur le forum. :D

P.S. : Pour ce qui est scripteur je demande pas grand chose en fait. Si on enlève les script fait par Bioware pour la campagne solo et ceux quon peut trouver sur le forum, je ne pense pas en avoir besoin de plus dune vingtaine.

JOL Archives 1.0.1
@ JOL / JeuxOnLine