Nenfëa Auxiliaire ArchipelModeur
Nombre de messages : 34 Age : 40 Date d'inscription : 04/04/2007
| Sujet: [Moyen] Simuler une téléportation de PNJ Dim 15 Avr 2007, 14:55 | |
| Type de script : --- Objet (PNJ) --- (difficulté moyenne) Utilité : ce script montre comment simuler une téléportation de PNJ de manière un peu plus élégante qu'en faisant brutalement disparaitre l'acteur. Mode d'emploi :- Spoiler:
Le script doit être attaché au PNJ à téléporter. Quand vous souhaitez qu'il se téléporte, vous devez mettre sa variable begin_teleport à 1. Explications :- Spoiler:
L'idée est de lancer un sort bidon sur le PNJ juste pour bénéficier de l'effet visuel du sort, en donnant ainsi l'impression que le PNJ se lance un sort de téléportation sur lui même. Une fois le sort bidon lancé grace à la fonction Cast, on attend deux secondes que l'effet visuel se termine et on téléporte effectivement l'acteur grace à la fonction MoveTo. - Code:
-
; Script permettant de simuler la téléportation d'un PNJ vers un autre lieu. ; Dans l'exemple, le sort nen_teleport_spell est un simple sort de lumière (on ne s'en sert que pour avoir l'effet visuel sur le PNJ). ; La référence "mon_marker" est la référence d'un marqueur vers lequel on veut téléporter l'acteur scripté.
Scn nen_pseudoteleport_script
short begin_teleport ; Indique l'état de la téléportation float timer ; Compteur de temps Ref moi_meme ; Référence de l'acteur scripté
Begin OnActivate if ( begin_teleport == 0 ) ; Empêche d'activer l'acteur pendant qu'il se téléporte Activate endif End
Begin GameMode if ( begin_teleport == 0 ) ; Tant que l'acteur ne doit pas se téléporter... Return ; ... on ne fait rien. endif if ( GetDead == 1 ) ; Si l'acteur est mort en cours de téléportation... Set begin_teleport to 0 ; ... on réinitialise la variable begin_teleport pour éviter de rappeler la fonction GetDead à chaque frame (légèrement plus efficace) Return ; ... et on ne fait rien d'autre. endif
if ( begin_teleport == 3 ) MoveTo mon_marker ; On déplace effectivement l'acteur scripté jusqu'au marqueur qui nous intéresse... Set begin_teleport to 0 ; ... et on indique que la téléportation est terminée Return ; Evite de tester les conditions en dessous. endif
if ( begin_teleport == 2 ) ; Après que l'acteur scripté se soit lancé le sort bidon, on attend un peu pour que l'effet visuel se termine. Set timer to ( timer + GetSecondsPassed ) ; Compteur de secondes écoulées if ( timer > 2 ) ; Passé deux secondes... Set timer to 0 ; ... on réinitialise le timer... Set begin_teleport to 3 ; ... et on indique que l'effet visuel s'est terminé. endif Return ; Evite de tester les conditions en dessous. endif
if ( begin_teleport == 1 ) ; Si on doit lancer la téléportation... Set moi_meme to GetSelf ; ... on obtient la référence de l'acteur scripté... Cast nen_teleport_spell moi_meme ; ... on lui fait lancer un sort bidon sur lui même juste pour l'effet visuel... Set begin_teleport to 2 ; ... et on indique que cette étape a été faite. endif End | |
|