Aller au contenu


[ Demande ] Script Pour Bouger Trois Static


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

#1 SiNdA

SiNdA

Posté 16 février 2006 - 13:17

salut à tous ! voilà je fais un script depuis maintenant 3 jours, j'ai fouillé le forum etc ... j'ai bien trouvé des scripts qui pourraient m'aider mais non non non j'comprends rien !!

voilà en fait lorsqu'on active un levier, deux murs glissent chacun d'un côté et ne roue dentée tourne, voilà mon script


Citation

begin Saneruhn_a

float timer
short start

if ( MenuMode == 1 )
return
;don't run time in Menu Mode. Very bad.
endif

if ( OnActivate == 1)
if ( start == 0 )
set start to 1
endif
return
endif

if ( start == 0 )
return
endif

if ( timer < 9 )
if ( Timer > 1 )
if ( start == 1 )
PlaySound "Door Stone Open"
Playsound "Machinery"
playgroup "idle2"
Set Start to 2
endif
endif
endif
if ( Timer > 14 )
if ( start == 2 )
PlaySound "Door Stone Open"
Playsound "Machinery"
endif
in_dwrv_scope20_a->RotateWorld Z 360
in_dwrv_wall10_a->MoveWorld X -192
in_dwrv_wall10_b->MoveWorld X 192
set start to 3
endif

if ( OnActivate == 1 )
if ( start == 3 )
playgroup "idle3"
endif
endif


end

voilà donc je sais qu'il y a beaucoup d'erreurs oui oui je me doute bien parceque là ça fait n'importe quoi et les objets finissent par même plusbouger du tout !

alors j'explique

le Wall10_a se déplace sur l'axe x de 4416 à 4224
le Wall10_b se déplace sur l'axe x de 4544 à 4736
le scope20_a tourne sur lui-même en Z de 0° à 170°

tout ça en même temps !

et ce lorsque j'active le levier, lorsque je le réactive, plus rien ne se produit, or le levier doit revenir à sa position initiale.


voilà merci de m'aider parceque là j'ai essayé pleins de fonctions basée sur les scripts des leviers dwemer mais ça m'enerve ! lol

#2 Nerwal

Nerwal

    SAMU Kalendaarien


Posté 16 février 2006 - 13:32

Quand on utilise un timer il est de bon ton de l'incrémenter avec la ligne set timer + ( timer + GetSecondsPassed ) pour que ça fasse réellement un timer. Sinon timer reste à 0 comme toute locale non affectée.

in_dwrv_scope20_a
in_dwrv_wall10_a
in_dwrv_wall10_b
ces machins-là doivent être une référence unique dans le jeu et la case "references persist" doit etre cochée.

MoveWorld et Rotateworld s'expriment respectivement en unités de jeu par seconde et en degrés par seconde. Il faut les appeler continûment jusqu'à ce qu'on arrive à la position désirée, et les arrêter à ce moment là.

#3 SiNdA

SiNdA

Posté 16 février 2006 - 13:35

pour les references elle sont uniques, j'ai bien coché reference persist, j'avais oublié  set timer + ( timer + GetSecondsPassed ) mais pour le reste alors si tu pouvais éclairer un peu plus ma lanterne parce que ... bon  :D

merci

#4 Nerwal

Nerwal

    SAMU Kalendaarien


Posté 16 février 2006 - 13:59

Bon alors un exemple sans timer (c'est pas le même script, hein, faut adapter à la situation) :


Begin Up_script

short activated
float zPos

if ( Menumode == 1 )
	return
endif

if ( OnActivate == 1 )
	PlaySound "Stone Door Open 1"
	set activated to 1
endif

if ( activated == 0 )
	return
endif

if ( activated == 1 )

	Set zPos to "static1"->GetPos z

		if ( zPos >= 11172 )
			set activated to 0

		else
		
			"static1"->MoveWorld z  20

		endif

endif

end

En gros on lui dit de monter le static1 jusqu'à arriver à la bonne altitude (qui ici est z=11172); après, ca s'arrête. Pas besoin de timer.

#5 SiNdA

SiNdA

Posté 18 février 2006 - 10:50

salut ! voilà Nerwal j'ai essayé tout et n'importe quoi, j'ai eu beau changer énormement de trucs ça marche pas du tout !!

tu pourrais m'expliquer comment fonctionnent les fonction SetPos et  Moveworld ensemble ?

merci bien parceque là ... je BlOqUe !  :D

#6 Fandorn Delavie

Fandorn Delavie

    Défilé de mods


Posté 18 février 2006 - 11:15

Essai ca :

begin Saneruhn_a

float timer
short start; 0:position initial ( fermé ) - 1:ouverture - 2:Ouvert - 3-Fermeture

if ( MenuMode == 1 )
	return;don't run time in Menu Mode. Very bad.
endif

if ( OnActivate == 1)
	if ( start == 0 ); si on est fermé : ordre d'ouverture
		set start to 1
		PlaySound "Door Stone Open"
		Playsound "Machinery"
	elseif ( start == 2 ); si on est ouvert : ordre de fermeture
		set start to 3
		PlaySound "Door Stone Open"
		Playsound "Machinery"
	endif
	return
endif

if ( start == 1 ); si ordre d'ouverture
	if ( Timer < 1 )
		Set Timer to ( Timer + GetSecondsPassed )
		"Wall10_a"->Moveworld, X, -192
		"Wall10_b"->Moveworld, X, 192
		"scope20_a"->Rotateworld, Z, 170
	else
		Set start to 2; la porte est ouverte
	endif
elseif ( start == 3 ); si ordre de fermeture
	if ( Timer > 0 )
		Set Timer to ( Timer - GetSecondsPassed )
		"Wall10_a"->Moveworld, X, 192
		"Wall10_b"->Moveworld, X, -192
		"scope20_a"->Rotateworld, Z, -170
	else
		Set start to 0; la porte est fermée
	endif
endif

end

L'utilisation d'un timer simplifi les choses lorqu'on bouge plusieurs objets, et qu'on souhaite un retour.

les 192 et -192 sont la difference entre la position initiale et final des statics
Modules bêta sur True Morrowind en attendant d'être sur wiwiland... Deja des millions de téléchargements :)

#7 SiNdA

SiNdA

Posté 18 février 2006 - 16:44

Mais tu me sauve la vie fandorn  :D  alors ça j'suis t'es balèze ! lol comment c'est possible de comprendre tout ce bordel !

merci beaucoup à toi, comment je dois faire pour que tout aille plus doucement ? c'est super bien mais c'est rapide lol  

est-ce que je dois modifier la ligne if ( Timer < 1 ) ?

rooo j'suis impressioné  :?

#8 Fandorn Delavie

Fandorn Delavie

    Défilé de mods


Posté 18 février 2006 - 19:39

Si tu veux aller 2 fois plus doucement, il faut :

augmenter le timer par 2 ( normal ,si on va plus lentement, on met plus de temps :D
 if ( Timer < 2 )

et diviser les vitesses par 2 !
96 à la place des 192
-96 à la place des -192
68.5 à la place de 170
-68.5 à la place de -170

bref ... je te laisse faire les calcules, mais en gros, si tu divises la vitesse, faut laisser plus de temps.
Modules bêta sur True Morrowind en attendant d'être sur wiwiland... Deja des millions de téléchargements :)




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

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