Script Générique Destiné à Un Ensemble
#1
Posté 06 septembre 2009 - 14:38
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
Posté 06 septembre 2009 - 16:21
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.
#3
Posté 06 septembre 2009 - 17:26
Von Zeeple, le 06.09.2009 à 17:20, dit :
Non, ce n'est pas possible.
Si c'est possible
Ç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.
Coaching de PNJs chez Morrowind Renaissance
#4
Posté 06 septembre 2009 - 17:44
#5
Posté 06 septembre 2009 - 17:57
Von Zeeple, le 06.09.2009 à 18:43, dit :
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.
Coaching de PNJs chez Morrowind Renaissance
#6
Posté 06 septembre 2009 - 18:00
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 :
#7
Posté 06 septembre 2009 - 18:17
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...
Coaching de PNJs chez Morrowind Renaissance
#8
Posté 07 septembre 2009 - 11:51
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
Posté 07 septembre 2009 - 13:59
Vardac Reborn, le 07.09.2009 à 12:50, dit :
Les gents les gants ? ah pardon les gens...
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 ?
Vardac Reborn, le 07.09.2009 à 12:50, dit :
Un joli petit bug que je confirme et qui pourrait peut-être intéresser l'auteur du Morrowind Code Patch
Coaching de PNJs chez Morrowind Renaissance
#10
Posté 07 septembre 2009 - 15:53
Je vais essayer ta méthode des que possible. Merci pour vos conseils
#11
Posté 07 septembre 2009 - 20:01
Vardac Reborn, le 07.09.2009 à 16:52, dit :
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
Posté 07 septembre 2009 - 20:13
0 utilisateur(s) li(sen)t ce sujet
0 membre(s), 0 invité(s), 0 utilisateur(s) anonyme(s)