Aller au contenu


Script Générique Destiné à Un Ensemble


  • Veuillez vous connecter pour répondre
11 réponses à ce sujet

#1 Vardac

Vardac

Posté 06 septembre 2009 - 14:38

Bonjour,

Je souhaite créer un script qui puisse s'aplliquer à tous les PNJ sans avoir besoin de mettre se script à chacun d'entre eux. Est-ce pocible ?

Et de même je me demandais si il n'y avais pas une fonction générique désignant tous les boucliers. Par exemple un script qui déséquipe le bouclier qu'utilise le Player, quelque soit le bouclier. Est-ce pocible ?

Merci

#2 Von Zeeple

Von Zeeple

    Grille pain Dwemer


Posté 06 septembre 2009 - 16:21

Bonjour,

Non, ce n'est pas possible.

Mais contournable en ce qui concerne le bouclier.

Il suffit d'ajouter un "faux" bouclier à l'inventaire du PJ, de force ce dernier à l'équiper, puis de faire un removeitem sur ce bouclier.

Par "faux" bouclier, j'entends un bouclier que le joueur n'utilisera jamais et qui est propre à ton mod ( ne pas utiliser les boucliers du jeu ).

Modifié par Von Zeeple, 06 septembre 2009 - 16:25.

Le Steampunk, c'est bon, mangez en  !

#3 abg

abg

    L'ABG pour les civilisés


Posté 06 septembre 2009 - 17:26

Voir le messageVon Zeeple, le 06.09.2009 à 17:20, dit :

Bonjour,

Non, ce n'est pas possible.

Si c'est possible  :sorcerer:

Ça tombe bien je suis justement en pleine cogitation sur ce thème suite à nos discussions sur le forum de Morrowind Renaissance
Mais avec pas mal de conditions; tout dépend exactement de ce que tu espères faire Vardac.

Ce qu'il faut, c'est un événement du jeu qui concerne directement les PNJs et qui soit lui scriptable. Ce type d'événement existe : ce sont les dialogues.
Selon que tu veuilles que ton script agisse en "MenuMode == 1" ou pas, il faut se tourner vers les dialogues textes ou vocaux. S'il s'agit des voix, il faut aussi que tu acceptes d'être tributaire de leur conditions de déclenchement (approche du PJ pour les "hellos", engagement d'un combat pour les voix "attack"...etc.)
Une fois défini tout ça, il te faut créer de nouvelles entrées dialogue dans l'onglet dialogue/voice du TESCS, avec les éventuels filtres pertinents. Et surtout le principal : Faire bon usage du champ "Result" de ces nouvelles entrées pour balancer au PNJ qui parle les commandes de script que tu veux voir exécuter sur lui.
Les voix "hit" permettent même de cibler player...

Cependant dans le doute, je déconseille de viser tous les PNJs sans un minimum de filtrage car tu vas affecter tout le monde en Morrowind (y compris des PNJs déjà scriptés), ce qui me fait m'interroger sur le risque de trouver des effets secondaires gênants à cette technique. Il y a notamment le risque de court-circuiter complétement les voix de base du jeu, si tu ne restreint pas d'une façon où d'une autre...

Modifié par abg, 06 septembre 2009 - 17:38.

Antoninus Bibulus Glaber
Coaching de PNJs chez Morrowind Renaissance

#4 Von Zeeple

Von Zeeple

    Grille pain Dwemer


Posté 06 septembre 2009 - 17:44

J'ai pensé à cette solution mais le Msfd8 dit qu'il peut y avoir des problèmes lorsqu'un même script ciblé est lancé sur plusieurs NPC ou objets, notamment au niveau des variables...Cela dit, ça m'arrangerait aussi que ce ne soit pas le cas :sorcerer:.
Le Steampunk, c'est bon, mangez en  !

#5 abg

abg

    L'ABG pour les civilisés


Posté 06 septembre 2009 - 17:57

Voir le messageVon Zeeple, le 06.09.2009 à 18:43, dit :

le Msfd8 dit qu'il peut y avoir des problèmes lorsqu'un même script ciblé est lancé sur plusieurs NPC ou objets, notamment au niveau des variables...

Pour être franc, j'ai surtout utilisé cette technique avec des commandes passées directement en résult (Genre AddSpell, ModFight...). J'ai eu aussi un esp expérimental (pas gardé) où je renseignais une variable globale (pas souvenir de problèmes évidents mais pas testé non plus dans la durée). Par ailleurs, les simples champs de filtrage des dialogues permettent d'économiser pas mal sur d'éventuels blocs If...EndIf.
Pas essayé avec des startscripts par contre... De toute manière, si je ne m'abuse, startscript avorte automatiquement sans warning si le script tourne déjà non ?

Modifié par abg, 06 septembre 2009 - 18:00.

Antoninus Bibulus Glaber
Coaching de PNJs chez Morrowind Renaissance

#6 elendell

elendell

    Mécano Dell'Arte


Posté 06 septembre 2009 - 18:00

Bonjour,

Je ne suis pas sûr de comprendre ton idée, abg. Parles-tu de faire le script directement dans le champ "result" ou de faire un "StartScript" dans le même champ ?

Ecrire des instructions de script dans "Result" est bien sûr possible mais beaucoup plus limité qu'un script. On ne peut pas déclarer de variables locales et une fois le dialogue terminé, les instructions ne sont plus actives (du moins, il me semble).

Placer un "StartScript" dans le "Result" va bien lancer un script qui continuera de tourner, qui aura des variables et qui sera ciblé sur le PNJ qui a eu ce dialogue (hit, etc.). Mais il me semble voir un écueil de taille : Si le joueur quitte et recharge le jeu, le script sera toujours actif mais ne sera plus ciblé sur le PNJ car les ciblés perdent leur cible au chargement.

Si le script lancé en "Result" fait une instruction pour un PNJ défini (avec "->"), peu importe qu'il conserve sa cible puisqu'elle est précisée dans l'instruction mais dans ce cas, ce n'est plus un script générique.

Je dirai donc que c'est possible pour un script qui a une action immédiate mais qui n'a pas besoin de durer ; ce qui me semble une limitation importante à considérer.

Me trompes-je ?


Von Zeeple dit :

J'ai pensé à cette solution mais le Msfd8 dit qu'il peut y avoir des problèmes lorsqu'un même script ciblé est lancé sur plusieurs NPC ou objets, notamment au niveau des variables...
La limitation est effectivement au niveau des variables car elles sont propres au script en question et non à la cible. Dans le cas, d'un même script (avec même "ID") placé sur deux objets, c'est traité comme 2 scripts différents, avec des variables qui portent le même nom mais qui ont chacune leur espace mémoire. Elles peuvent donc prendre des valeurs différentes pour chaque porteur du script. Ce n'est pas le cas avec un script ciblé.

#7 abg

abg

    L'ABG pour les civilisés


Posté 06 septembre 2009 - 18:17

Tes objections sont fondées Elendell. Nos messages se sont croisés. Fidèle à mes idées fixes et mes propres travaux j'envisageais une situation de script "à action immédiate" (modifier à la volée le PNJ qui parle, lui passer des consignes d'attitude particulière...etc.)
Pour des scripts à plus longue durée d'action, il faut effectivement prévoir une disposition (script global) pour surveiller le chargement de partie, le cas échéant faire le ménage... et accepter la perte du script...
Pour les variables locales on doit pouvoir à la rigueur faire une pâle imitation avec des drapeaux style addspell ou additem (et des tests If (GetSpell, "truc" == 1)) mais ce n'est certainement pas aussi souple (quand aux variables réservées style companion ou stayOutSide, on oublie hélas...)
Encore une fois tout dépend de ce qu'espère réaliser Vardac...
Antoninus Bibulus Glaber
Coaching de PNJs chez Morrowind Renaissance

#8 Vardac Reborn

Vardac Reborn

Posté 07 septembre 2009 - 11:51

En fait abg oui je souhaite faire un script qui s'applique à TOUT les PNJ. Le but de mon script et de pouvoir bousculer les gents. Le script est finit et fonctionne, je l'ais testé en ne le mettant qu'a un seul PNJ. Donc celon toi si je fais une voix de hello qui se déclenche pour chaque NPC quand le PJ est à une distance de 65 cela marcherais ?

Pour la solution du bouclier, oui j'y avais pensé, mais non cela ne me convient pas. Car en fait je sais pas si vous avez remarqué mais lorsque que l'on porte un bouclier et que l'on s'équipe ensuite d'une arme à deux mains le bouclier reste équipé. Serte on a plus la parade, mais on a encore l'armure du bouclier, ce qui n'est pas logique. Or mon script fait que toutes les 5 secondes il vérifie si on a une arme à deux mains et si c'est le cas il équipe un faux bouclier et le remove, mais cela est très pénible car notre arme à deux mains est aussi enlevé. A moins d'avoir une fonction qui détecte quand je dégaine mon arme à deux mains. Car mon script arrive déjà a détecter quelle arme j'ai équipé, mais pas quand je la sort.

#9 abg

abg

    L'ABG pour les civilisés


Posté 07 septembre 2009 - 13:59

Voir le messageVardac Reborn, le 07.09.2009 à 12:50, dit :

En fait abg oui je souhaite faire un script qui s'applique à TOUT les PNJ. Le but de mon script et de pouvoir bousculer les gents. Le script est finit et fonctionne, je l'ais testé en ne le mettant qu'a un seul PNJ. Donc celon toi si je fais une voix de hello qui se déclenche pour chaque NPC quand le PJ est à une distance de 65 cela marcherais ?

Les gents  :angel2: les gants ? ah pardon les gens...  :mosc:

Oui, c'est un usage qui me semble plausible... A toi de concevoir l'algo qui va déplacer le PNJ dès que le hello s'est déclenché. Mais est-ce bien raisonnable ? Je ne suis pas certain qu'une téléportation brutale du marchand ou du donneur de quête que tu approches soit très agréable longtemps. Cependant il existe un mod finement appelé "circulez !" qui permet de dégager la voie quand ces #@& de PNJs stationnent dans le passage. Je l'ai de longue date dans mon datafile mais je ne retrouve pas le lien sur wiwiland. Quelqu'un de plus doué que moi avec ce fichu moteur de recherche ?

Voir le messageVardac Reborn, le 07.09.2009 à 12:50, dit :

Pour la solution du bouclier, oui j'y avais pensé, mais non cela ne me convient pas. Car en fait je sais pas si vous avez remarqué mais lorsque que l'on porte un bouclier et que l'on s'équipe ensuite d'une arme à deux mains le bouclier reste équipé. Serte on a plus la parade, mais on a encore l'armure du bouclier, ce qui n'est pas logique.

Un joli petit bug que je confirme et qui pourrait peut-être intéresser l'auteur du Morrowind Code Patch
Antoninus Bibulus Glaber
Coaching de PNJs chez Morrowind Renaissance

#10 Vardac Reborn

Vardac Reborn

Posté 07 septembre 2009 - 15:53

Non en fait lorsque je bouscule un PNJ il ne se téléporte pas ^^. D'une part il y a un comparatif entre sa force et la mienne, et si la mienne est trop inférieure à la sienne je ne le fait pas bouger d'un pouce ^^. Ensuite J'utilise un timer qui fait que toutes les secondes pendant 5 secondes le PNJ se téléporte de 10 en arrière, ce qui donne 50 au final. Et en visuel on a l'impression qu'il glisse sur le sol. Serte c'est un peu étrange alors je lui fait jouer l'animation Hit1, je baisse son appreciation envers le PJ de 5, baisse sa fatigue de 20 et mets une message box disant : "Faites attention !".
Je vais essayer ta méthode des que possible. Merci pour vos conseils

#11 elendell

elendell

    Mécano Dell'Arte


Posté 07 septembre 2009 - 20:01

Bonjour,

Voir le messageVardac Reborn, le 07.09.2009 à 16:52, dit :

Et en visuel on a l'impression qu'il glisse sur le sol. Serte c'est un peu étrange...
Si tu veux donner plus de réalisme visuel, tu peux aussi utiliser "RotateWorld" qui, contrairement à "SetAngle", fonctionne sur les acteurs.

Avec cette fonction, tu peux lui donner un mouvement qui l'incline sur n'importe quel angle, puis le faire aussitôt revenir en position droite.
Ce qui donnerait : inclinaison->déplacement->retour à la verticale. (Pour simuler un déséquilibre).

L'idéal serait de l'incliner et le déplacer en fonction de l'angle du point d'impact (position du PJ par rapport au PNJ) et de déterminer l'amplitude du déséquilibre subi en fonction de la vitesse du PJ et s'il est en mode "marche" ou "course".

Note : Si le PNJ se déplace (de lui-même), il reprend automatiquement la position verticale. Il reprend aussi la verticale au rechargement de partie, sauf bien sûr si le script est toujours actif et continue un "RotateWorld" lié par exemple à un "timer".

#12 Vardac Reborn

Vardac Reborn

Posté 07 septembre 2009 - 20:13

C'est une très bonne idée ! Merci j'en tiendrais compte.




0 utilisateur(s) li(sen)t ce sujet

0 membre(s), 0 invité(s), 0 utilisateur(s) anonyme(s)