Aller au contenu


[Script] Déplacement d'un PNJ figé


  • Veuillez vous connecter pour répondre
Aucune réponse à ce sujet

#1 Gilles_k

Gilles_k

    Camembérisateur des mods poids lourds


Posté 29 avril 2003 - 17:50

[size=18]Déplacement de mannequins immobiles

Script de déplacement d'un mannequin, pnj avec animation bloquée.

D'abord quelques explications sur les mannequins. Le fait que leur animation soit bloquée empêche tout mouvement de par eux-même. Mais rien n'empêche de lui donné la position d'un autre objet.  

Donc voici mon arme secrète, attention accrochez vous, prêt! partez!

1) Créer un nouveau MiscItem, donnez lui l'apparence que vous voulez.
Placez le dans le TESCS là ou votre mannequin doit être. Si possible enfouissez le dans le sol pour qu'il ne soit pas visible. Et de préférence un petit objet.
2) Le script du mannequin doit bloqué ses mouvements, mais ce devrait-être le cas, puisque c'est un PNJ statique.
3) Appliquer à ce MiscItem le script suivant :
Citation:

Citation

Begin _toto  

short boucle  
float posxpantin  
float posypantin  
short dirmove  
short init  

if ( init == 0)  
set init to 1  
set dirmove to 1  
SetAtStart  
endif  

if ( dirmove == 1 )  
MoveWorld x, 30  
set boucle to ( boucle + 1 )  
set posxpantin to GetPos x  
set posypantin to GetPos y  
"Armor Mannequin"->SetPos x, posxpantin  
"Armor Mannequin"->SetPos y, posypantin  
if boucle >= 200  
set dirmove to -1  
endif  
endif  

if ( dirmove == -1 )  
MoveWorld x, -30  
set boucle to ( boucle - 1 )  
set posxpantin to GetPos x  
set posypantin to GetPos y  
"Armor Mannequin"->SetPos x, posxpantin  
"Armor Mannequin"->SetPos y, posypantin  
if boucle <= 0  
set dirmove to 1  
endif  
endif  

End _toto  


Le non du script est générique.
"Armor Mannequin" est l'id du Pnj mannequin.
Explication : la boucle init, euh... initialise la position du MiscItem (SetAtStart), ainsi que la direction de départ qui ne doit jamais être 0.
Viens ensuite le test de la direction du mouvement, dans ce cas deux tests puisqu'il y a deux directions.  
MoveWorld x, 30 déplace le MiscItem. A adapter en fonction de la rapidité.
set boucle to ( boucle + 1 ) une boucle de déplacement rapport au temps.
set posxpantin to GetPos x copie la position de l'objet dans une variable.
"Armor Mannequin"->SetPos x, posxpantin positionne le mannequin à la position de l'objet. (c'est ici la clef du mouvement)
Puis viens le test de la direction du mouvement, si il a dépassé la valeur le mouvement s'inverse, la variable dirmove est changé de signe.
Fin du mouvement X+
Test sur le mouvement X-, idem que plus haut sauf qu'il y a décrémentation des compteurs.
Fin du script.

Une dernière remarque, si vous avez enfoui le MiscItem dans le sol n'oublié pas de rajouté une variable poszpantin ainsi que son initialisation pour donner la bonne position en z du pantin. Normalement cela n'est pas nécessaire puisque c'est un Pnj qui se positionne automatique au niveau du sol suite au test de collision du jeu.

Sauvegardez et testez.
Résultat vous devriez avoir un mannequin cible qui se déplace gracieusement d'un coté puis de l'autre.  

Bon tir au pigeon!
Grosse bête à cornes. Le premier qui se moque....




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

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