On peut contrôler via des scripts son propre personnage à la 3ème personne !
Quel est l'interêt ?
je ne vous citerai que deux applications qui me viennent à l'idée :
- Un combat contre soi-même ( assez intéressant pour des cas de background, c'est en partie pour cette raison que j'ai essayé de trouver une manière de contrôler le PJ, même si les 4 autres essais se sont soldés par des échecs )
- Des cinématiques incluant le joueur.
deux applications qui risquent de faire grandement évoluer le modding si correctement exploitées.
Voici la théorie pure :
prenons notre joueur - il s'agit d'un NPC, possédant l'ID "player", dans le TESCS.
Je pense que vous avez déjà tous une fois essayé de faire un "PlaceAtPC, player, 1, 100, 1" pour voir ce que cela donnerait - il s'agit du même principe : générer une copie du joueur, que l'on contrôlera.
Mais, vous le savez peut être, Les Fonctions de Morrowind, lorsqu'on les cible sur un objet à plusieurs références, ne s'appliquent que sur la première référence de cet objet.
Par exemple, si vous faites un Alit->ForceGreeting, vous entamerez la discussion avec le premier Alit placé dans le jeu.
Or, nous voulons contrôler le second joueur généré, soit la deuxième référence de player !
Pour ce faire, nous allons retourner la contrainte citée plus haut à notre avantage :
Nous allons ajouter un objet unique à la première des deux références du joueur, soit nous.
Que va-t-il se passer ? le 1er joueur ( nous ) possèdera un objet que la seconde référence n'aura pas ! La chose devient très facile, ensuite, puisqu'il faudra juste tester la quantité de cet objet sur le joueur.
En pratique, ça donne quoi ?
On aura :
1 variable globale,
2 scripts.
la variable globale est importante en ce sens qu'elle constitue le seul moyen de communication entre le script déclancheur/le script executeur.
Appelons cette variable PlayerControlState.
voici notre premier script, ou script déclencheur :
PlaceAtPC, player, 1, 100, 1 Player->Additem "objet_declencheur" 1 ... Set PlayerControlState to 1
Ces instructions peuvent être lancées depuis n'importe où. n'hésitez pas à les utiliser dans les Result des Dialogues.
voici le second script, qui sera à attacher au joueur
Begin PlayerControl_Sc Short State If ( GetItemCount "objet_declencheur" == 0 ) ; Ceci est la partie destinée aux instructions appliquées à la copie du joueur. If ( PlayerControlState == 1 ) Set State to 1 Set PlayerControlState to 2 endif If ( state == 1 ) elseif... endif Else; Cette partie correspond aux instructions appliquées au joueur ( ex : déplacement de la "camera" ) If ( PlayerControlState == 2 ) Set State to 1 Set PlayerControlState to 0 endif If ... ... endif endif End
que ce passera-t-il ? le même script tournera en deux exemplaires indépendants sur les deux joueurs, et remplira des conditions différentes, ce qui permettra d'exécuter sur l'un et l'autre des joueurs les actions désirées ( Fonctions sans ID-> préalable, sinon ça ne marchera pas )
Enfin, quand vous aurez fini, n'oubliez pas un SetDelete 1 final sur la seconde référence.
j'espère que cela vous aidera
Snaïpe