Aller au contenu


Manque Une Commande


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

#1 darkarya

darkarya

Posté 03 juillet 2009 - 12:47

Bonjour,

Je souhaite créer un script qui serais en relation avec un anneau et une épée.
Je vous explique.
Je souhaite créer un mod ou une épée est planté dans une stelle ( un peu comme excalibur dans son rocher)
et je souhaite que le joueur puisse la retirer seulement si il a le bon anneau d'équiper.

voici le script auquel j'ai commencer à travailler mais où il me manque deux commandes.

begin AryaSword

if (Player -> HasItemEquipped AryaRing ==1)
	(commande manquante qui dit que je peut retirer l'épée)
else (Player -> HasItemEqquiped AryaRing ==0)
	(commande manquante qui dit que je peut pas retirer l'épée)
endif

end AryaSword

Vous pouvez suivre la réalisation de ce mod ICI

Modifié par darkarya, 03 juillet 2009 - 12:48.

Si l'on devait étudier toutes les lois, on aurait pas le temps de les transgresser!

Moyen

Cool


#2 elendell

elendell

    Mécano Dell'Arte


Posté 03 juillet 2009 - 13:07

Bonjour darkarya,

Le plus simple est d'utiliser "OnActivate". Regarde dans le <MSfD8> pour la manière de s'en servir.

PS : Attention aux espaces dans tes scripts. Même si souvent les instructions fonctionnent, ils peuvent générer des dysfonctionnements quand ils sont en trop ou manquants. Prends le temps de lire le MSfD et n'hésite pas à t'y reporter à chaque fois.

if ( player->HasItemEquipped "AryaRing" ) ou if ( player->HasItemEquipped "AryaRing" == 1 )

EDIT pour précision :

Généralement, if ( player -> HasItemEquipped "AryaRing" == 1 ) fonctionne également mais l'espace entre "==" et  "1" est à proscrire obligatoire et il vaut mieux mettre un espace avant ou après la paranthèse.

"else (Player -> HasItemEqquiped AryaRing ==0)" : Ça, ça ne va pas. C'est soit "elseif ( Player -> HasItemEqquiped AryaRing == 0 )", soit tout simplement "else".

#3 lnari

lnari

    Chocapic Cortexicus


Posté 03 juillet 2009 - 13:22

Coucou.

A priori,

Begin ID_Script

If ( OnActivate == 1 )
If ( Player->HasItemEquiped ID_Ring == 1 )
Activate
Else
Return
Endif
Endif

End

Perso je le ferais comme ça.

Modifié par Souris Cornue, 03 juillet 2009 - 13:28.


#4 elendell

elendell

    Mécano Dell'Arte


Posté 03 juillet 2009 - 13:32

Salut souris,

Je pense que ceci devrait suffire :
Begin ID_Script

If ( OnActivate == 1 )
	If ( Player->HasItemEquiped ID_Ring == 1 )
		Activate
	Endif
Endif

End

A tester bien sûr mais normalement, à partir du moment où "OnActivate" est utilisé dans un script, l'activation ne peut pas se faire sans "activate".

#5 lnari

lnari

    Chocapic Cortexicus


Posté 03 juillet 2009 - 13:34

Ah oui c'est vrai qu'y'a cette histoire qu'on ne peut de toutes façons plus activer un objet qui a un "OnActivate" sans "Activate" derrière. Ca m'avait souvent embêté au début. Donc oui, tu as raison, c'est encore plus simple.

#6 abg

abg

    L'ABG pour les civilisés


Posté 03 juillet 2009 - 13:47

Voir le messageelendell, le 03.07.2009 à 14:31, dit :

Begin ID_Script

If ( OnActivate == 1 )
	If ( Player->HasItemEquiped ID_Ring == 1 )
		Activate
	Endif
Endif

End

Bonjour,

Juste un problème : Tel qu'écrit (pas de redirections vers l'épée), ce script est, je présume, un local à mettre sur l'épée... Si le PJ la pose par terre, le test de l'anneau se refera donc, ce qui n'est peut-être pas l'effet voulu une fois qu'il a "conquis" l'épée

Solutions possibles :
- Rajouter un test doonce (variable ou entrée journal)
- Mettre le script sur la stèle avec redirection des OnActivate et Activate (meilleure solution à mon avis, ça évite au PJ de se trainer un script local inutile où qu'il aille avec l'épée)
Antoninus Bibulus Glaber
Coaching de PNJs chez Morrowind Renaissance

#7 darkarya

darkarya

Posté 03 juillet 2009 - 14:04

Sinon oubliez l'idée de n'anneau sa m'a l'aire trop compliqué pour un début on va essayé de faire plus simple et de mettre que l'on peut prendre l'épée que si l'on a le lvl adequate que j'adapterai par la suite. Je pense que pour commencer sa sera plus simple ^^
Quelqu'un veut bien me proposer son aide pour cette nouvelle perspective?? Je vais essayé de débuter le script en attendant.

Edit:

J'ai essayer de faire un script basé sur le lvl mais je suis pas sur que cela soit correct :S pq je sais pas comment on fait pour mettre que le joueur peut prendre l'épée si il est lvl 10 ou plus

Spoiler

Voila je pense que j'ai encore du travail ^^

Modifié par darkarya, 03 juillet 2009 - 14:50.

Si l'on devait étudier toutes les lois, on aurait pas le temps de les transgresser!

Moyen

Cool


#8 elendell

elendell

    Mécano Dell'Arte


Posté 03 juillet 2009 - 14:44

Voir le messagedarkarya, le 03.07.2009 à 15:03, dit :

Sinon oubliez l'idée de n'anneau sa m'a l'aire trop compliqué pour un début on va essayé de faire plus simple et de mettre que l'on peut prendre l'épée que si l'on a le lvl adequate que j'adapterai par la suite.

La seul chose que ça change c'est que tu peux dans ce cas ignorer la juste remarque d'abg. (Sauf si un module faisait baisser le niveau du joueur en cours de jeu mais je n'en ai jamais vu  :( ).

Begin ID_Script

If ( OnActivate == 1 )
	If ( Player->GetLevel >= 10 )
		Activate
	Endif
Endif

End

Remplace 10 par le niveau que tu souhaites.

#9 darkarya

darkarya

Posté 03 juillet 2009 - 14:54

Merci bien je pense que se sera bon me manque plus qu'à créer mes parchemins et attendre la modélisation de la stelle et de l'épée.

Par contre ce script marche si il est mis sur l'épée ou sur la stelle ?? :S

Si l'on devait étudier toutes les lois, on aurait pas le temps de les transgresser!

Moyen

Cool


#10 elendell

elendell

    Mécano Dell'Arte


Posté 03 juillet 2009 - 16:44

Sur l'épée.

Je t'invite fortement à lire le MSfD et à y faire des recherches quand tu veux utiliser une fonction. L'entraide ne fonctionnera pas longtemps si tu ne fais pas ce minimum. J'ouvre systématiquement le MSfD en même temps que le Tescs et je le relis souvent. En faisant une recherche avec "level" dans le MSfD, tu ne trouveras pas "HasLevel" ; par contre, tu trouveras "Get/Mod/SetLevel".

PS : Attention, j'ai fait une bourde tout à l'heure. Il faut un espace entre l'opérateur ("==" ou autre) et la valeur :

If (espacePlayer->GetLevelespace>=espace10espace)

#11 darkarya

darkarya

Posté 05 juillet 2009 - 21:16

Ok merci pour ton aide et je ne connaissais pas cet aide le MSfD je l'ai découvert grasse à vous ^^ Merci beaucoup pour votre aide

Si l'on devait étudier toutes les lois, on aurait pas le temps de les transgresser!

Moyen

Cool





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

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