Attention c'est long. Pour les connaisseurs, lisez le script. Et j'ai fait une simple analyse de débutant mais elle m'a quand même sacrément aider à démêler ce script qui me semblait compliquer au départ mais en fait... non.
Le script de base quelque peu modifié déjà :
SOURCE : mod "Le Canal des Mystères" (par Shanthe, camembérisé par gudul75)
- ***********************************************
- *********************************
Begin wall_mover_03
float timer
short start
if ( start == 3 )
return ;stop here for speed if it's all done
endif
if ( MenuMode == 1 )
return
;don't run time in Menu Mode. Very bad.
endif
if ( OnActivate == 1)
if ( start == 0 )
set start to 1
Playsound "Door Stone Open"
endif
return
;when activated, we want to start movement on the next frame...
endif
if ( start == 0 )
return
;if we have't started, stop here for speed
endif
if ( timer < 4 )
if ( timer > 1 )
if ( start == 1 )
;PlaySound "Door Stone Open"
Set start to 2
endif
endif
Rotate X 45
;above line rotates the crank itself
00_test_move->Moveworld x 300
;above line lowers the wall.
endif
endif
if ( timer > 4)
SetAngle X 0 Y 0 Z 90
set start to 3
endif
set timer to ( timer + GetSecondsPassed )
;above line increments the timer... should be last here outside if
;statements
;otherwise bad things can happen
end
- ***********************************************
- *********************************
Analyse :
Variables utilisées :
Start
OnActivate
MenuMode
Timer
if ( OnActivate == 1)
if ( start == 0 )
set start to 1
Playsound "Door Stone Open"
endif
return
;when activated, we want to start movement on the next frame...
endif
Si on active l’interrupteur et si la variable « start » est égale à 0, alors :
Renvoie la variable « start » à 1 (On ne pourra plus le réactiver, activable une fois)
On fait jouer le son « Door Stone Open »
if ( timer < 4 )
if ( timer > 1 )
if ( start == 1 )
;PlaySound "Door Stone Open"
Set start to 2
endif
endif
Rotate X 45
;above line rotates the crank itself
00_test_move->Moveworld x 300
;above line lowers the wall.
endif
endif
Si la variable « timer » est comprise dans l’intervalle ]1 ;4[ et que la variable start est égale à 1, alors :
On fait jouer le son « Door Stone Open »
Renvoie la variable « start » à 2
Fais tourner l’objet Activator sur lui-même de 45° ( ?)
L’objet en question est déplacé sur l’axe des abscisses jusqu’à 300
if ( timer > 4)
SetAngle X 0 Y 0 Z 90
set start to 3
endif
Si la variable « timer » est plus grande que 4, alors :
Replace l’objet Activator dans l’angle défini. (vers le haut ici)
set timer to ( timer + GetSecondsPassed )
Renvoie la variable “timer” à (timer + GetSecondPassed)
Ici, le script prend fin au bout de 4 secondes, c'est facilement modifiable. Mais dans ces conditions, l'objet n'atteindra jamais le point d'abscisse 300, car il se déplace de manière lente et je l'ai fait commencer à un point d'abscisse situé dans Balmora ! (pour info, 300, c'est de l'autre côté du pont dwemer pas loin) Et en 4 secondes, l'objet n'atteint pas cet endroit. Tant pis, il stoppe au bout de 4 secondes.
De cette manière, on pourra faire en sorte qu'il stoppe au terminus.
Je me demande tout de même s'il est possible de faire bouger l'objet plus vite 