Aller au contenu


Déplacement D'Un Static


  • Veuillez vous connecter pour répondre
28 réponses à ce sujet

#1 Duc Moquette

Duc Moquette

Posté 13 octobre 2010 - 20:49

Bonsoir, :)
J'ai réalisé un petit script assez simple qui permet de déplacer un mur quand on ajoute à son inventaire un oreiller.
Sauf que voilà, il ne marche pas et je n'ai aucune idée du pourquoi du comment =/
Begin THO_labyrinthe_middle_01


If ( OnPCAdd == 1 )
		"in_THO_labyrinthe_vwall03"->Move x, 256
Endif


End

Image IPB Vieille Grosse Morue

Thoriak


#2 Nerwal

Nerwal

    SAMU Kalendaarien


Posté 13 octobre 2010 - 20:54

OnPCadd est une variable qui doit être déclarée.

#3 Duc Moquette

Duc Moquette

Posté 13 octobre 2010 - 21:26

J'ai rajouté "short OnPCAdd", mais ça ne marche toujours pas. Le script est attaché à l'oreiller, et l'oreiller et le mur sont dans la même pièce..
Image IPB Vieille Grosse Morue

Thoriak


#4 Nerwal

Nerwal

    SAMU Kalendaarien


Posté 13 octobre 2010 - 21:39

Le mur est-il bien coché "references persist" ?

#5 Kafou

Kafou

    Le canari a bouffé le rominet !


Posté 13 octobre 2010 - 21:45

Après avoir fait ce que dit Nerwal (et t'être assuré qu'il n'existe qu'un seul mur avec cet ID !), ton mur devrait se déplacer sans jamais s'arrêter.

Move déplace l'objet seulement lors de la frame où il est appelé, à la vitesse de 256 unités par seconde dans ton cas. Puisque OnPCAdd reste à 1 tant qu'il n'est pas remis à 0, ton mur se déplacera à 256 unités par seconde sans jamais s'arrêter. Il faut donc arrêter d'appeler move au bout d'une seconde si ton but est de déplacer le mur de 256 unités. Pour cela il faut remettre OnPCAdd à 0 manuellement, ou mieux bloquer le tout via une variable type "state" afin d'éviter que le mur se re-déplace si le joueur repose l'oreiller puis le reprend.

PS : vivent les labyrinthes.
You look like you need a monkey!

Attention : perfectionniste paresseux.

#6 Duc Moquette

Duc Moquette

Posté 14 octobre 2010 - 17:40

Ok, merci Kafou pour m'avoir expliqué :)

Maintenant je souhaiterais pouvoir ouvrir les murs quand on arrive sur un static bien précis (qui est ici le centre de la pièce). Il me semble avoir déjà vu un moyen pour faire ça mais je ne l'ai pas retrouvé :(

Edit: j'ai essayé,en remettant manuellement OnPCAdd à 0, ça ne marche pas. Idem avec une variable doonce :(
Image IPB Vieille Grosse Morue

Thoriak


#7 Korfandar

Korfandar

    Ch'ti dragon normand...dans son trou


Posté 14 octobre 2010 - 18:04

Poste le code de ton script modifié pour qu'on puisse l'analyser.

L'abus de SMS est dangereux pour l'élocution mentale

Le mod qui révèle (presque) tout sur les dwemers : Dwarmor

Fervent Partisan de l'Instabilité Avatarienne
Quart du quarteron des VGM...


#8 Duc Moquette

Duc Moquette

Posté 14 octobre 2010 - 18:11

Voici les deux codes que j'ai essayé :
Begin THO_labyrinthe_middle_01

short OnPCAdd

If ( OnPCAdd == 1 )
 "in_THO_labyrinthe_vwall03"->Move x, 256
 	set OnPCAdd to 0
Endif


End

Begin THO_labyrinthe_middle_01

short OnPCAdd
short controlvar


If ( OnPCAdd == 1 )
 	If ( controlvar == 0 )
 "in_THO_labyrinthe_vwall03"->Move x, 256
 set controlvar to 1
 	Endif
Endif


End

J'ai également ce code qui marche, mais sans mouvement fluide ...
Begin THO_labyrinthe_middle_01


short OnPCAdd


If ( OnPCAdd == 1 )
 "in_THO_labyrinthe_vwall03"-> SetPos, y, 400
 "in_THO_labyrinthe_vwall01"->SetPos x, -400
 "in_THO_labyrinthe_vwall02"->SetPos y, -400
	"in_THO_labyrinthe_vwall04"->SetPos x, 400
	set OnPCAdd to 0
Endif


End

Image IPB Vieille Grosse Morue

Thoriak


#9 Nerwal

Nerwal

    SAMU Kalendaarien


Posté 14 octobre 2010 - 18:45

Dans les deux premiers cas les commandes ne sont exécutées qu'à la frame où ONPCadd = 1 pour la première fois puisqu'aussitôt on resette ONPCadd à 0 ou on met controlvar à 1, donc ça ne va pas : Move et MoveWorld sont des fonctions qui doivent être appelées continûment pendant une période de temps donnée... ONPCadd ou controlvar doivent être mises à 0 ou 1 une fois seulement que le mur est arrivé à la position prévue (par exemple en contrôlant la position par getpos suivant l'axe désiré, x ou y)

#10 Duc Moquette

Duc Moquette

Posté 14 octobre 2010 - 21:39

Ah, j'ai enfin réussi ce que je voulais faire ! :)

Maintenant le script marche, le voici :
Begin THO_labyrinthe_middle_01


float timer
short ActivateMe
short retour


If ( OnActivate == 1 )
	set ActivateMe to 1
Endif


If ( ActivateMe == 1 )
	Set timer to ( timer + GetSecondsPassed )
	If ( timer <= 1 )
		"in_THO_labyrinthe_vwall03"->Move x, 200
		"in_THO_labyrinthe_vwall01"->Move x, 200
		"in_THO_labyrinthe_vwall02"->Move x, 200
		"in_THO_labyrinthe_vwall04"->Move x, 200
	Elseif ( timer >= 10 )
		If ( timer <= 11 )
			"in_THO_labyrinthe_vwall03"->Move x, -200
			"in_THO_labyrinthe_vwall01"->Move x, -200
			"in_THO_labyrinthe_vwall02"->Move x, -200
			"in_THO_labyrinthe_vwall04"->Move x, -200
			set retour to 1
		Endif
	Elseif ( retour == 1 )
		set ActivateMe to 0
		set timer to 0
	Endif
Endif


End

Sauf que j'aimerais pouvoir réactiver l'activator une fois activée la première fois. J'ai également essayé cette façon-ci, mais elle ne marche pas non plus :
Begin THO_labyrinthe_middle_01


float timer
short ActivateMe
short retour


If ( OnActivate == 1 )
	set ActivateMe to 1
Endif


If ( ActivateMe == 1 )
	Set timer to ( timer + GetSecondsPassed )
	If ( timer <= 1 )
		"in_THO_labyrinthe_vwall03"->Move x, 200
		"in_THO_labyrinthe_vwall01"->Move x, 200
		"in_THO_labyrinthe_vwall02"->Move x, 200
		"in_THO_labyrinthe_vwall04"->Move x, 200
	Elseif ( timer >= 10 )
		If ( timer <= 11 )
			"in_THO_labyrinthe_vwall03"->Move x, -200
			"in_THO_labyrinthe_vwall01"->Move x, -200
			"in_THO_labyrinthe_vwall02"->Move x, -200
			"in_THO_labyrinthe_vwall04"->Move x, -200
		Endif
	Elseif ( timer >= 13 )
			set retour to 1
	Endif
Endif

If ( retour == 1 )
	set ActivateMe to 0
	set timer to 0
	set retour to 0
Endif

End

Image IPB Vieille Grosse Morue

Thoriak


#11 Nerwal

Nerwal

    SAMU Kalendaarien


Posté 14 octobre 2010 - 21:53

Elseif ça veut dire sinon, c'est à dire que toutes les autres conditions précédentes ne sont pas vérifiées.
Elseif ( retour == 1 )
ça veut donc dire à la fois :
*on veut timer > 1 (à cause de If ( timer <= 1 ) )
*on veut timer < 10 (à cause de Elseif ( timer >= 10 ) )
*on veut retour == 1
Et ça ne se produit jamais puisque quand on met retour à 1 on a timer >= 11.

Idem pour le deuxième script : Elseif ( timer >= 13 ) en rapport avec le Elseif ( timer >= 10 ) au-dessus demande à la fois timer < 10 et timer >= 13 ce qui n'est jamais vérifié.

#12 Duc Moquette

Duc Moquette

Posté 14 octobre 2010 - 22:01

Donc en gros je remplace les Elseif par des if, comme ceci ?
Begin THO_labyrinthe_middle_01


float timer
short ActivateMe
short retour


If ( onactivate == 1 )
 set ActivateMe to 1
Endif


If ( ActivateMe == 1 )
 Set timer to ( timer + GetSecondsPassed )
 If ( timer <= 1 )
 "in_THO_labyrinthe_vwall03"->Move x, 200
 "in_THO_labyrinthe_vwall01"->Move x, 200
 "in_THO_labyrinthe_vwall02"->Move x, 200
 "in_THO_labyrinthe_vwall04"->Move x, 200
 	Endif
 If ( timer >= 10 )
 If ( timer <= 11 )
 "in_THO_labyrinthe_vwall03"->Move x, -200
 "in_THO_labyrinthe_vwall01"->Move x, -200
 "in_THO_labyrinthe_vwall02"->Move x, -200
 "in_THO_labyrinthe_vwall04"->Move x, -200
 Endif
 	Endif
 If ( timer >= 13 )
 set retour to 1
 Endif
Endif

If ( retour == 1 )
 set ActivateMe to 0
 set timer to 0
 set retour to 0
Endif

End

Image IPB Vieille Grosse Morue

Thoriak


#13 Nerwal

Nerwal

    SAMU Kalendaarien


Posté 14 octobre 2010 - 22:13

Oui on peut. La façon la plus ramassée d'écrire c'est comme ça :

Begin THO_labyrinthe_middle_01


float timer
short ActivateMe


If ( onactivate == 1 )
 set ActivateMe to 1
Endif

If ( ActivateMe == 1 )
 Set timer to ( timer + GetSecondsPassed )

   If ( timer >= 11 )
	  set ActivateMe to 0
	  set timer to 0

   Elseif ( timer >= 10 )

	"in_THO_labyrinthe_vwall03"->Move x, -200
	"in_THO_labyrinthe_vwall01"->Move x, -200
	"in_THO_labyrinthe_vwall02"->Move x, -200
	"in_THO_labyrinthe_vwall04"->Move x, -200

   Elseif ( timer <= 1 )
	"in_THO_labyrinthe_vwall03"->Move x, 200
	"in_THO_labyrinthe_vwall01"->Move x, 200
	"in_THO_labyrinthe_vwall02"->Move x, 200
	"in_THO_labyrinthe_vwall04"->Move x, 200
   Endif
endif

end


#14 Duc Moquette

Duc Moquette

Posté 15 octobre 2010 - 16:52

Parfait, ça marche ! :)

Maintenant, j'ai passé le script en global pour pouvoir utiliser d'autres interrupteurs.
J'ai également ajouté des sons à jouer lors de l'ouverture des portes. Ca marche, sauf que juste avant que le son ne soit joué, j'entends un grésillement assez désagréable. Après le bruit peut être enlevé, mais j'aimerais quand même bien pouvoir le garder :
Begin THO_labyrinthe_middle_01


float timer
short ActivateMe


If ( "THO_laby_myst_acti01"-> OnActivate == 1 )
 Set ActivateMe to 1
Endif

If ( ActivateMe == 1 )
 Set timer to ( timer + GetSecondsPassed )

 If ( timer >= 11 )
 	Set ActivateMe to 0
 	Set timer to 0

 Elseif ( timer >= 10 )

 PlaySound "Door Stone Close"
	"in_THO_labyrinthe_vwall03"->Move x, -200
	"in_THO_labyrinthe_vwall01"->Move x, -200
	"in_THO_labyrinthe_vwall02"->Move x, -200
	"in_THO_labyrinthe_vwall04"->Move x, -200

 Elseif ( timer <= 1 )

 PlaySound "Door Stone Open"
	"in_THO_labyrinthe_vwall03"->Move x, 200
	"in_THO_labyrinthe_vwall01"->Move x, 200
	"in_THO_labyrinthe_vwall02"->Move x, 200
	"in_THO_labyrinthe_vwall04"->Move x, 200

 Endif
Endif

End

Image IPB Vieille Grosse Morue

Thoriak


#15 Nerwal

Nerwal

    SAMU Kalendaarien


Posté 15 octobre 2010 - 17:02

Citation

Ca marche, sauf que juste avant que le son ne soit joué, j'entends un grésillement assez désagréable
C'est ce que l'on obtient en appelant continûment un PlaySound. Il ne faut appeler cette fonction qu'une fois. Donc cela se résout en mettant les playsound dans des tests sur une locale DoOnce.

#16 Duc Moquette

Duc Moquette

Posté 15 octobre 2010 - 17:36

Donc, si j'ai compris, je dois faire ça ?
Begin THO_labyrinthe_middle_01


float timer
short ActivateMe
short ouverture
short fermeture


If ( "THO_laby_myst_acti01"-> onactivate == 1 )
 Set ActivateMe to 1
Endif

If ( ActivateMe == 1 )
 Set timer to ( timer + GetSecondsPassed )

 If ( timer >= 11 )
 Set ActivateMe to 0
 Set timer to 0

 Elseif ( timer >= 10 )

 Set fermeture to 1
 "in_THO_labyrinthe_vwall03"->Move x, -200
 "in_THO_labyrinthe_vwall01"->Move x, -200
 "in_THO_labyrinthe_vwall02"->Move x, -200
 "in_THO_labyrinthe_vwall04"->Move x, -200

 Elseif ( timer <= 1 )
 
 Set ouverture to 1
 	"in_THO_labyrinthe_vwall03"->Move x, 200
 "in_THO_labyrinthe_vwall01"->Move x, 200
 "in_THO_labyrinthe_vwall02"->Move x, 200
 "in_THO_labyrinthe_vwall04"->Move x, 200

 Endif
Endif

If ( ouverture == 1 )
 PlaySound "Door Stone Open"
 Set ouverture to 0
Endif

If ( fermeture == 1 )
 PlaySound "Door Stone Close"
 Set fermeture to 0
Endif

End


Edit: Non, ça ne marche pas ... :/

Image IPB Vieille Grosse Morue

Thoriak


#17 Nerwal

Nerwal

    SAMU Kalendaarien


Posté 15 octobre 2010 - 17:41

Tel qu'écrit ça marche pas... On met bien ouverture et fermeture à 0 une fois le son joué mais à l'exécution suivante c'est tout de suite remis à 1 donc on n'a rien fait de mieux par rapport au premier script.

#18 Duc Moquette

Duc Moquette

Posté 15 octobre 2010 - 18:12

Alors là je dois t'avouer que je sèche complètement ... Je n'ai aucune idée =/

Ben sinon j'avais créé deux autres interrupteurs, en rajoutant ceci et les variables au début :









If ( "THO_laby_myst_acti01"-> onactivate == 1 )
	Set ActivateMe01 to 1
Endif

If ( ActivateMe01 == 1 )
 Set timer01 to ( timer01 + GetSecondsPassed )

 If ( timer01 >= 11 )
 	Set ActivateMe01 to 0
 	Set timer01 to 0

 Elseif ( timer01 >= 10 )

 	"in_THO_labyrinthe_vwall01"->Move x, -200

 Elseif ( timer01 <= 1 )
 	
 	"in_THO_labyrinthe_vwall01"->Move x, 200

 Endif
Endif







If ( "THO_laby_myst_acti02"-> onactivate == 1 )
	Set ActivateMe02 to 1
Endif

If ( ActivateMe02 == 1 )
 Set timer02 to ( timer02 + GetSecondsPassed )

 If ( timer02 >= 11 )
 	Set ActivateMe02 to 0
 	Set timer02 to 0

 Elseif ( timer02 >= 10 )

 	"in_THO_labyrinthe_vwall02"->Move x, -200

 Elseif ( timer02 <= 1 )
 	
 	"in_THO_labyrinthe_vwall02"->Move x, 200

 Endif
Endif

Et ça ne marche pas... J'ai relu 5 fois le code, et je ne vois toujours pas où est le problème :/

Modifié par Duc Moquette, 15 octobre 2010 - 18:15.

Image IPB Vieille Grosse Morue

Thoriak


#19 Kafou

Kafou

    Le canari a bouffé le rominet !


Posté 15 octobre 2010 - 18:19

Pour le premier problème, relis ce que Nerwal t'a dit, il te donne la solution.

Pour le second, tu utilises un timer01 et un timer02, et le 02 n'est jamais modifié, donc timer02 et timer01 n'avanceront jamais. Utilise un seul timer, comme dans ton script précédent. Edit : ah bah t'as édité :)

PS : au lieu de dire "ça marche pas", tu pourrais dire ce qu'il se passe ? Ca aiderait beaucoup.
You look like you need a monkey!

Attention : perfectionniste paresseux.

#20 Nerwal

Nerwal

    SAMU Kalendaarien


Posté 15 octobre 2010 - 18:31

Citation

Alors là je dois t'avouer que je sèche complètement ... Je n'ai aucune idée =/

Les boucles DoOnce se mettent à l'intérieur des autres boucles, et pas à l'extérieur. Comme ça :

Begin THO_labyrinthe_middle_01


float timer
short ActivateMe
short DoOnce


If ( "THO_laby_myst_acti01"-> onactivate == 1 )
 Set ActivateMe to 1
Endif

If ( ActivateMe == 1 )
 Set timer to ( timer + GetSecondsPassed )

 If ( timer >= 11 )
		Set ActivateMe to 0
		Set timer to 0
		Set DoOnce to 0

 Elseif ( timer >= 10 )

   If ( DoOnce == 1 )
	 PlaySound "Door Stone Open"
	 set DoOnce to 2
   endif
		"in_THO_labyrinthe_vwall03"->Move x, -200
		"in_THO_labyrinthe_vwall01"->Move x, -200
		"in_THO_labyrinthe_vwall02"->Move x, -200
		"in_THO_labyrinthe_vwall04"->Move x, -200

 Elseif ( timer <= 1 )

   If ( DoOnce == 0 )
	 PlaySound "Door Stone Open"
	 set DoOnce to 1
   endif
		"in_THO_labyrinthe_vwall03"->Move x, 200
		"in_THO_labyrinthe_vwall01"->Move x, 200
		"in_THO_labyrinthe_vwall02"->Move x, 200
		"in_THO_labyrinthe_vwall04"->Move x, 200

 Endif
Endif

End


#21 Duc Moquette

Duc Moquette

Posté 16 octobre 2010 - 13:58

Voir le messageKafou, le 15 octobre 2010 - 18:19, dit :

PS : au lieu de dire "ça marche pas", tu pourrais dire ce qu'il se passe ? Ca aiderait beaucoup.

Oui, désolé, c'pas très précis :mrgreen:

Ben disons que rien ne s'activait. Je cliquais sur l'activator principal mais les murs ne bougeaient pas. :/

Merci nerwal, je pense que ça commence à rentrer. :)


Edit: Tenez, voici le script qui ne marche pas :
Begin THO_labyrinthe_middle_01


float timer
float timer01
short ActivateMe
short ActivateMe01
short DoOnce


If ( "THO_laby_myst_acti00"-> onactivate == 1 )
 Set ActivateMe to 1
Endif

If ( ActivateMe == 1 )
 Set timer to ( timer + GetSecondsPassed )

 If ( timer >= 11 )
 	Set ActivateMe to 0
 	Set timer to 0
 	Set DoOnce to 0

 Elseif ( timer >= 10 )

 If ( DoOnce == 1 )
 	PlaySound "Door Stone Open"
 	set DoOnce to 2
 endif
 	"in_THO_labyrinthe_vwall03"->Move x, -200
 	"in_THO_labyrinthe_vwall01"->Move x, -200
 	"in_THO_labyrinthe_vwall02"->Move x, -200
 	"in_THO_labyrinthe_vwall04"->Move x, -200

 Elseif ( timer <= 1 )

 If ( DoOnce == 0 )
 	PlaySound "Door Stone Open"
 	set DoOnce to 1
 Endif
 	"in_THO_labyrinthe_vwall03"->Move x, 200
 	"in_THO_labyrinthe_vwall01"->Move x, 200
 	"in_THO_labyrinthe_vwall02"->Move x, 200
 	"in_THO_labyrinthe_vwall04"->Move x, 200

 Endif
Endif












If ( "THO_laby_myst_acti01"-> OnActivate == 1 )
 	Set ActivateMe01 to 1
Endif

If ( ActivateMe01 == 1 )
 Set timer01 to ( timer01 + GetSecondsPassed )

 If ( timer01 >= 11 )
 	Set ActivateMe01 to 0
 	Set timer01 to 0

 Elseif ( timer01 >= 10 )

 	"in_THO_labyrinthe_vwall01"->Move x, -200

 Elseif ( timer01 <= 1 )
 	
 	"in_THO_labyrinthe_vwall01"->Move x, 200

 Endif
Endif






End














Re-Edit: J'ai réussi, grâce aux scripts de ce sujet, à créer plusieurs scripts permettant de faire un "ascenseur". En fait, quelqu'un se place sur static, active un activator, un mur se déplace pour cacher l'endroit ou le vide devrait être apparent, ensuite l'activator, le static et le mur se déplacent jusqu'à l'endroit en question, le mur se redéplace et on est arrivé au bon endroit.
En soit, il marche, et j'en suis d'ailleurs assez fier. Le problème, c'est que il y a quelque fois un petit écart montrant un petit bout de vide entre le static qui se déplace et son point d'arrivée ; pourtant, j'ai tout bien vérifié, les calculs sont bons.
J'ai fait trois scripts "ascenseur", et ils ont tous ce problème. Le premier et le deuxième sont similaires, et le troisième un peu plus complexe (et avec un plus grand écart donnant sur le vide) car il ne se déplace pas que de haut en bas, mais aussi sur les côtés.

Voici le deuxième script :

Begin THO_labyrinthe_ascen02

short ActivateMe
short DoOnce
short Cadenas
float timer


If ( MenuMode == 1 )
Return
Endif


If ( "THO_laby_myst_acti06"-> OnActivate == 1 )
	If ( Cadenas == 0 )
		Set ActivateMe to 1
	Endif
	If ( Cadenas == 1 )
		Set ActivateMe to 2
	Endif
Endif

If ( ActivateMe == 1 )
	Set timer to ( timer + GetSecondsPassed )

	If ( timer >= 9 )
		set ActivateMe to 0
		set timer to 0
		set DoOnce to 0
		set Cadenas to 1

	Elseif ( timer >= 8 )
		If ( DoOnce == 1 )
			PlaySound "SothaDoorClose"
			set DoOnce to 2
		Endif
		"THO_laby_myst_acti06"-> Rotate, x, -180
		"in_THO_labyrinthe_vwall06"-> Move x, 192
		"in_THO_labyrinthe_vwall06b"-> Move x, -256

	Elseif (timer >= 2 )
		"in_THO_labyrinthe_vwall06"-> Move z, 128
		"in_THO_laby_myst_cap_06"-> Move z, 128
		"THO_laby_myst_acti06"-> Move z, -128

	Elseif ( timer <= 1 )
		If ( DoOnce == 0 )
			PlaySound "SothaDoorOpen"
			Set DoOnce to 1
		Endif
		"THO_laby_myst_acti06"-> Rotate, x, 180
		"in_THO_labyrinthe_vwall06"-> Move x, -192
		"in_THO_labyrinthe_vwall06a"-> Move x, 256
	Endif
Endif





If ( ActivateMe == 2 )
	Set timer to ( timer + GetSecondsPassed )

	If ( timer >= 9 )
		set ActivateMe to 0
		set timer to 0
		set DoOnce to 0
		set Cadenas to 0

	Elseif ( timer >= 8 )
		If ( DoOnce == 1 )
			PlaySound "SothaDoorClose"
			set DoOnce to 2
		Endif
		"THO_laby_myst_acti06"-> Rotate, x, -180
		"in_THO_labyrinthe_vwall06"-> Move x, 192
		"in_THO_labyrinthe_vwall06a"-> Move x, -256

	Elseif (timer >= 2 )
		"in_THO_labyrinthe_vwall06"-> Move z, -128
		"in_THO_laby_myst_cap_06"-> Move z, -128
		"THO_laby_myst_acti06"-> Move z, 128

	Elseif ( timer <= 1 )
		If ( DoOnce == 0 )
			PlaySound "SothaDoorOpen"
			Set DoOnce to 1
		Endif
		"THO_laby_myst_acti06"-> Rotate, x, 180
		"in_THO_labyrinthe_vwall06"-> Move x, -192
		"in_THO_labyrinthe_vwall06b"-> Move x, 256
	Endif
Endif


End

Et voici le troisième :

Begin THO_labyrinthe_ascen03

short ActivateMe
short DoOnce
short Cadenas
float timer


If ( MenuMode == 1 )
Return
Endif


If ( "THO_laby_myst_acti07"-> OnActivate == 1 )
	If ( Cadenas == 0 )
		Set ActivateMe to 1
	Endif
	If ( Cadenas == 1 )
		Set ActivateMe to 2
	Endif
Endif

If ( ActivateMe == 1 )
	Set timer to ( timer + GetSecondsPassed )

	If ( timer >= 29 )
		set ActivateMe to 0
		set timer to 0
		set DoOnce to 0
		set Cadenas to 1

	Elseif ( timer >= 28 )
		If ( DoOnce == 1 )
			PlaySound "SothaDoorClose"
			set DoOnce to 2
		Endif
		"THO_laby_myst_acti07"-> Rotate, x, -180
		"in_THO_labyrinthe_vwall07"-> Move x, 192
		"in_THO_labyrinthe_vwall07b"-> Move x, -256

	Elseif ( timer >= 22 )
		"in_THO_labyrinthe_vwall07"-> Move y, -128
		"in_THO_laby_myst_cap_07"-> Move y, -128
		"THO_laby_myst_acti07"-> Move x, -128

	Elseif ( timer >= 12 )
		"in_THO_labyrinthe_vwall07"-> Move z, 128
		"in_THO_laby_myst_cap_07"-> Move z, 128
		"THO_laby_myst_acti07"-> Move z, -128

	Elseif ( timer >= 8 )
		"in_THO_labyrinthe_vwall07"-> Move x, -128
		"in_THO_laby_myst_cap_07"-> Move x, -128
		"THO_laby_myst_acti07"-> Move y, -128

	Elseif (timer >= 2 )
		"in_THO_labyrinthe_vwall07"-> Move y, 128
		"in_THO_laby_myst_cap_07"-> Move y, 128
		"THO_laby_myst_acti07"-> Move x, 128

	Elseif ( timer <= 1 )
		If ( DoOnce == 0 )
			PlaySound "SothaDoorOpen"
			Set DoOnce to 1
		Endif
		"THO_laby_myst_acti07"-> Rotate, x, 180
		"in_THO_labyrinthe_vwall07"-> Move x, -192
		"in_THO_labyrinthe_vwall07a"-> Move x, 256
	Endif
Endif





If ( ActivateMe == 2 )
	Set timer to ( timer + GetSecondsPassed )

	If ( timer >= 29 )
		set ActivateMe to 0
		set timer to 0
		set DoOnce to 0
		set Cadenas to 0

	Elseif ( timer >= 28 )
		If ( DoOnce == 1 )
			PlaySound "SothaDoorClose"
			set DoOnce to 2
		Endif
		"THO_laby_myst_acti07"-> Rotate, x, -180
		"in_THO_labyrinthe_vwall07"-> Move x, 192
		"in_THO_labyrinthe_vwall07a"-> Move x, -256

	Elseif ( timer >= 22 )
		"in_THO_labyrinthe_vwall07"-> Move y, 128
		"in_THO_laby_myst_cap_07"-> Move y, 128
		"THO_laby_myst_acti07"-> Move x, 128

	Elseif ( timer >= 12 )
		"in_THO_labyrinthe_vwall07"-> Move z, -128
		"in_THO_laby_myst_cap_07"-> Move z, -128
		"THO_laby_myst_acti07"-> Move z, 128

	Elseif (timer >= 8 )
		"in_THO_labyrinthe_vwall07"-> Move x, 128
		"in_THO_laby_myst_cap_07"-> Move x, 128
		"THO_laby_myst_acti07"-> Move y, 128

	Elseif (timer >= 2 )
		"in_THO_labyrinthe_vwall07"-> Move y, -128
		"in_THO_laby_myst_cap_07"-> Move y, -128
		"THO_laby_myst_acti07"-> Move x, -128

	Elseif ( timer <= 1 )
		If ( DoOnce == 0 )
			PlaySound "SothaDoorOpen"
			Set DoOnce to 1
		Endif
		"THO_laby_myst_acti07"-> Rotate, x, 180
		"in_THO_labyrinthe_vwall07"-> Move x, -192
		"in_THO_labyrinthe_vwall07b"-> Move x, 256
	Endif
Endif


End

Merci d'avance ! :ortholiberaux:

Modifié par Duc Moquette, 16 octobre 2010 - 13:58.

Image IPB Vieille Grosse Morue

Thoriak


#22 Nerwal

Nerwal

    SAMU Kalendaarien


Posté 16 octobre 2010 - 14:14

Il est fort possible que Move et MoveWorld (ainsi que Rotate et RotateWorld) soient imprécis. Tous les mods que je connaisse testent la position de l'objet (on s'arrête de bouger quand il est arrivé à la bonne place en testant la position par des getpos) plutôt que le temps passé à déplacer l'objet, parce qu'on est sûr alors d'obtenir exactement ce qu'on veut à l'arrivée.

#23 Duc Moquette

Duc Moquette

Posté 16 octobre 2010 - 14:18

Donc, si j'ai compris, j'utilise Move et MoveWorld pour le mouvement fluide, et après je les place précisément avec SetPos ? :)

Edit: Ah non c'est pas ça, mais j'ai aussi compris :)
Par hasard, est-ce que mon idée pourrait marcher ?

Modifié par Duc Moquette, 16 octobre 2010 - 14:19.

Image IPB Vieille Grosse Morue

Thoriak


#24 Nerwal

Nerwal

    SAMU Kalendaarien


Posté 16 octobre 2010 - 14:23

Pas exactement; si on veut déplacer un solide S de a à b (a < b) suivant l'axe x, on appelle S->Move, x, 128 jusqu'à ce que S->Getpos x >= b. Pour le mouvement retour ce sera S->Move, x, -128 jusqu'à ce que S->Getpos x <= a.

Edit : placer précisément avec SetPos est peut-être possible, mais faut voir si le rendu visuel n'est pas trop laid.

#25 Duc Moquette

Duc Moquette

Posté 16 octobre 2010 - 14:40

Ok, merci pour l'aide :)

Je vais essayer les deux façons pour voir ;)

Edit: La façon que j'ai trouvé, celle du SetPos, marche, et elle n'est pas trop visible, donc je vais la prendre.

Modifié par Duc Moquette, 16 octobre 2010 - 17:32.

Image IPB Vieille Grosse Morue

Thoriak





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

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