Aller au contenu


[résolu] Une Pierre Volante


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

#1 Necron51

Necron51

Posté 18 mars 2006 - 10:57

Bonjour tout le monde ..

Je voudrais faire une pierre qui volerait en l'air, et donc faire un script, qui ferait que la pierre fait un mouvement perpetuel de haut en bas assez lent et assez court (pour les reglages ca se fait apres).

Je suis un peu une quiche en script, et j'ai essayé de faire celui là :

Citation

begin "karmian_stone_move"

float timer
short state

if ( karmian_stone == 0 )

set timer to 0
set "karmian_stone" to 10
set State to 10

endif

if ( karmian_stone == 10 )

set timer to ( timer + GetSecondsPassed )

if ( timer < 2 )

"karmian_stone_02"->MoveWorld z 5

elseif ( timer < 4 )

"karmian_stone_02"->MoveWorld z -5
set "karmian_stone" to 0
set State to 0

endif
endif
endif

End "karmian_stone_move"

Bien entendu, celui ci ne marche pas ... :(

quelqu'un pourrait il donc me dire ce qui ne va pas, quelle enorme faute impardonnable j'ai fait, et me fouetter si necessaire .. ^^

Mercu d'avance pour vos reponses ;)

Modifié par Necron51, 18 mars 2006 - 20:56.

Tel l'ombre je me glisse dans la nuit, afin de porter le coup fatal sans un bruit

#2 Timalk-Ae

Timalk-Ae

    PoneyMaster !


Posté 18 mars 2006 - 15:22

Karmian_stone est une variable globale ? Sinon il faut mettre "short karmian_stone" au début du script.
Ya des virgules à Moveworld, z, 5 mais bon ça m'étonnerais que ça change quelque chose.
Je crois me rappeler que les < ou les > seuls peuvent poser problème et qu'il vaut mieux utiliser <= et >=...
Dans tous les cas je te propose un script que j'ai utilisé, qui m'a été gracieusement proposé par une personne dont j'ai oublié l'identité et mon post semble avoir été effacé donc voilà.

Begin nomduscript

short sens
float zPos


if ( Menumode == 1 )
	return
endif

Set zPos to GetPos z

if ( zPos < 58 )
	set sens to 1
endif

if ( zPos > 75 )
	set sens to 0
endif

if ( sens == 0 )
	MoveWorld z -5
else 
	MoveWorld z 5
endif

end

Il faut modifier le 58 et le 75 par les positions minimum et maximum de ta pierre.

#3 Necron51

Necron51

Posté 18 mars 2006 - 17:20

Merci bien Alkhazar je vais essayer ça tout de suite ;)

Sinon, oui "karmian_stone" est une variable globale .. En fait, je me suis inspiré du script d'ouverture de porte des âmes, en essayant de faire une boucle ... ^^

Mais je vois pas ou ça peche vu mon niveau .. je vais essayer celui que tu m'as filé voir si ca donne ce que je veux .. :(

merci encore :lol:
Tel l'ombre je me glisse dans la nuit, afin de porter le coup fatal sans un bruit

#4 Nenfëa

Nenfëa

    Le poisson bavard de Kalendaar


Posté 18 mars 2006 - 17:41

Hello mon p'tit assassin ! ;)

Citation

if ( karmian_stone == 10 )

set timer to ( timer + GetSecondsPassed )

if ( timer < 2 )

"karmian_stone_02"->MoveWorld z 5

elseif ( timer < 4 )

"karmian_stone_02"->MoveWorld z -5
set "karmian_stone" to 0
set State to 0

endif
endif
endif

Il y a juste un endif en trop dans ce bloc là. :(
Nenfëa

- Les yeux, Bouh, vise les yeux!
- Pouiiiiiic!!!

Le monde de Gilbertus devenu réalité : Kalendaar!
Il était une fois un site vachement bien avec plein de nistoires dessus... ah, vous la connaissez déjà ?!

Wiwi d'or 2006 du plus serviable ! Tadaaaaaaaa !

#5 Necron51

Necron51

Posté 18 mars 2006 - 18:55

Tiens !! Salut ma tite mascotte ^^

Bon alors .. j'ai testé le script donné par Alhakar : ca marche sauf que ... Ca donne mal à la tete .. la pierre se teleporte en fait ;)

En effet Nenfea un endif en trop, mais apres reflexion le script n'est de toute façon pas bon .. :(

Je l'ai amelioré en essayant toujours d'avoir une boucle ..

engros, je veux que la pierre monte pendant 2 seconde, puis redescende pendant deux secondes et ainsi de suite .. j'ai pensé faire une boucke comme ça :

Citation

float timer
short state

if ( karmian_stone == 0 )
set timer to 0
set "karmian_stone" to 10
set State to 10
endif


if ( karmian_stone == 10 )
set timer to ( timer + GetSecondsPassed )

if ( timer < 2 )
"karmian_stone_02"->MoveWorld z 5
endif

if ( timer >= 2 )
"karmian_stone_02"->MoveWorld z -5
endif

if ( timer == 4 )
set "karmian_stone" to 0
set State to 0
endif
endif

Mais non .. toujours rien .. la pierre reste immobile ... :lol:
Tel l'ombre je me glisse dans la nuit, afin de porter le coup fatal sans un bruit

#6 Nenfëa

Nenfëa

    Le poisson bavard de Kalendaar


Posté 18 mars 2006 - 19:11

Quelques pitites remarques (pis un gnack aussi... :)) :

1) Essaie de toujours garder la même casse pour tes variables. Ici, tu utilises la variable "state" avec ou sans majuscule...

2) Inutile d'utiliser des guillemets quand ta variable ne contient pas d'espaces, comme dans ce cas :
set "karmian_stone" to 10
C'est peut-être ce qui empèche le script de tourner ??

3) La variable timer est une variable de type float, c'est à dire que la probabilité qu'elle prenne une valeur entière (mis à part 0 au début) est presque nulle... :( Donc, le test :
if ( timer == 4 )
... a toutes les chances de TOUJOURS renvoyer "faux"... :(
Tu devrais le remplacer le par :
if ( timer >= 4 )


Edit : à propos, ton script est-il un script local associé à la pierre (auquel cas les commandes ""karmian_stone_02"->MoveWorld blabla" peuvent être remplacées par des simples "MoveWorld blabla") ?
Ou si c'est un script global, est-ce que tu as bien pensé à le lancer avec la commande StartScript quelque part dans le jeu ?

Edit2 : de rien ! :rolleyes:

Modifié par Nenfëa, 18 mars 2006 - 20:34.

Nenfëa

- Les yeux, Bouh, vise les yeux!
- Pouiiiiiic!!!

Le monde de Gilbertus devenu réalité : Kalendaar!
Il était une fois un site vachement bien avec plein de nistoires dessus... ah, vous la connaissez déjà ?!

Wiwi d'or 2006 du plus serviable ! Tadaaaaaaaa !

#7 Necron51

Necron51

Posté 18 mars 2006 - 20:11

Aieuh ... ^^ .. Ca faisait longtemps .. :(

1. Oki c'est noté, je corrige .. :)

2. Idem ...

3. ah ben ca finit meme pas ma boucle alors en effet ...

4. En fait je comprends pas tout :rolleyes:

C'est un script local, donc effectivement que j'associe à la pierre, seulement, j'ai quand meme mis une globale qui est "karmian_stone" .. Pourquoi ? Parce que je me suis basé sur le script de levé de la porte des âmes et qu'ils le font ... ^^

J'essaye les corrections deja, puis j'edite pour donner le resultat .. :(

EDIT : Ca marche nickel ... C'est effectivement le == au lieu de <= qui faisait merder ... ^^

Merci bien nenfea ... :?

Pour ceux que ca pourrait interresser, un script donc, qui permet de fzire monter et descendre un objet comme s'il flottait, voilà le script final :


Citation

begin "karm_summon"

short done
float timer
short state

if ( karmian_stone == 0 )
set timer to 0
set karmian_stone to 10
set state to 10
endif


if ( karmian_stone == 10 )
set timer to ( timer + GetSecondsPassed )

if ( timer < 1 )
MoveWorld z 1
endif

if ( timer >= 1 )
MoveWorld z -1
endif

if ( timer >= 2 )
set karmian_stone to 0
set state to 0
endif
endif

J'aimerai juste savoir par contre si le chiffre derrière Moveworld doit obligatoirement etre un entier ... (J'aimerais encore reduire l'amplitude et la vitesse de la descente, et un 0.5 me paraitrait bien) ?

Modifié par Necron51, 18 mars 2006 - 20:32.

Tel l'ombre je me glisse dans la nuit, afin de porter le coup fatal sans un bruit

#8 Nenfëa

Nenfëa

    Le poisson bavard de Kalendaar


Posté 18 mars 2006 - 20:39

Pas de soucis, tu peux utiliser des float avec MoveWorld ! :rolleyes:
Nenfëa

- Les yeux, Bouh, vise les yeux!
- Pouiiiiiic!!!

Le monde de Gilbertus devenu réalité : Kalendaar!
Il était une fois un site vachement bien avec plein de nistoires dessus... ah, vous la connaissez déjà ?!

Wiwi d'or 2006 du plus serviable ! Tadaaaaaaaa !

#9 Necron51

Necron51

Posté 18 mars 2006 - 20:56

Merci beaucoup à toi ptit gnackeur .. :rolleyes:
Tel l'ombre je me glisse dans la nuit, afin de porter le coup fatal sans un bruit




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

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