Aller au contenu


Faire Apparaitre Un Objet


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

#1 Loud-Wig

Loud-Wig

Posté 07 novembre 2009 - 08:53

Bonjour les wiwilandais.

Je suis sur la création d'un mod ou des PNJ demande au joueur de leur ramener des objets (armes, armure...) afin de completer des collections. Comment faire pour que quand on ramene l'objet demandé, il puisse apparaitre à un endrois précis ? J'y arrive avec placeitem mais je voudrais arriver à faire comme pour le musé des objets de Longsanglot ou l'objet est positionné dans le mod mais "désactivé" et c'est quand le joueur raméne l'arme ou autre qu'il est "réactivé".

Je pense que je doit recréer un objet unique.

J'ai trouvé pour "activer" (avec activate ID_item dans le résultat d'un dialogue) mais je ne trouve pas comment le metre "désactivé" au début.

Merci de votre aide.
Une porte fermée est une porte qui se défonce.

#2 Kira

Kira

    Top-modeleuse...


Posté 07 novembre 2009 - 13:13

Bonjour Loud-Wiq...
Je pense que tu devrais avoir ce que tu souhaites avec un script disable-enable attaché aux objets mis en place...

Le fait de ramener un objet et de le donner à un pnj met à jour une entrée journal qui fait apparaitre l'objet...

Voici, par exemple, un script attaché à un des objets du musée de Longsanglot...

Begin MuseumBiPolarBlade
;Cette partie sert à faire apparaitre l'objet sur son piédestal...
if ("Torasa Aram".bipolarblade < 2)
	Disable
endif

if ("Torasa Aram".bipolarblade == 2)
	Enable
endif

;Cette partie sert à signaler le fait que le joueur prend l'objet posé sur le piédestal une fois qu'il est apparu et indique qu'il y a vol... Le vol est signalé par la condition de journal portée à 3 qui déclenche un autre script afin de déclarer le délit...
if (OnActivate == 1)

	set "Torasa Aram".bipolarblade to 3
	Activate
	player->removeitem "BiPolar Blade_x" 1
	player->additem "bipolar blade" 1
endif

End MuseumBiPolarBlade

Comme tu peux le voir, il y a effectivement deux objets distincts...
Tout n'est qu'illusion... Surtout le fait de le penser.....
Image IPB
(Wiwi d'or de la plus serviable et de la plus cool... Merci à vous tous...)

#3 Loud-Wig

Loud-Wig

Posté 07 novembre 2009 - 14:01

Bonjour Kira,

Je ne me suis pas encore frotté aux scripts donc j'aurais besoin de qualques précisions :

"Torasa Aram".bipolarblade -> c'est une variable ? comment je la déclare et comment je la fait évoluer ?

Le script, je le ratache à mon objet que je "pose" à l'endroit ou je veux le faire apparaitre ?

Mes questions peuvent paraitre triviales mais je débute et je préfére une confirmation de quelqu'un qui maitrise plutot que de galerer pendant des heures.

Merci d'aider un néophite.
Une porte fermée est une porte qui se défonce.

#4 Kira

Kira

    Top-modeleuse...


Posté 07 novembre 2009 - 14:29

Coucou Loud-Wiq...

En fait, il existe un script qui gère ces variables, et elles sont utilisées par le script de chaque arme et par Torasa Aram pour filtrer ses dialogues...

Spoiler

Ce script est attaché à Torasa Aram elle-même, et permet de vérifier si le joueur possède ou non l'arme dont il est question...

Donc, ces variables étant déclarées dans un autre script, elles sont juste vérifiées dans le script de l'arme at n'ont pas besoin d'être déclarées une deuxième fois...

La ligne "Torasa Aram".Bipolarblade indique que Torasa Aram a incrémenté la valeur Bipolarblade à un certain niveau... Ce niveau est déterminé en fonction du fait que le joueur n'a pas, possède actuellement ou a vendu la lame...
Tout n'est qu'illusion... Surtout le fait de le penser.....
Image IPB
(Wiwi d'or de la plus serviable et de la plus cool... Merci à vous tous...)

#5 Loud-Wig

Loud-Wig

Posté 07 novembre 2009 - 18:23

OK donc je doit faire un autre script que je ratache à mon PNJ où je déclare ma variable.

J'ai bien suivi ?

Merci
Une porte fermée est une porte qui se défonce.

#6 Kira

Kira

    Top-modeleuse...


Posté 07 novembre 2009 - 19:12

Oui, c'est bien ça...

Tu peux examiner les dialogues de Torasa Aram afin de mieux comprendre le mécanisme d'utilisation des variables dans les filtres, c'est très simple et très efficace...
Tout n'est qu'illusion... Surtout le fait de le penser.....
Image IPB
(Wiwi d'or de la plus serviable et de la plus cool... Merci à vous tous...)

#7 Loud-Wig

Loud-Wig

Posté 11 novembre 2009 - 17:28

Je commence à comprendre comment ca marche...

J'ai juste une question mais j'ai peur de connaitre la réponse : peut on ajoputer un script à des carreaux d'arbaletes ou des fleches ?

Sinon (ce que je crains) puis-je ratacher le script mis normalement sur l'objet au script du personnage ?
Une porte fermée est une porte qui se défonce.

#8 elendell

elendell

    Mécano Dell'Arte


Posté 11 novembre 2009 - 21:53

Bonjour Loud-Wig,

Voir le messageLoud-Wig, le 11.11.2009 à 17:26, dit :

peut on ajoputer un script à des carreaux d'arbaletes ou des fleches ?
Non. Si c'était possible, la case pour ajouter un script dans la fenêtre d'édition de ces armes ne serait pas grisée.


Voir le messageLoud-Wig, le 11.11.2009 à 17:26, dit :

Sinon (ce que je crains) puis-je ratacher le script mis normalement sur l'objet au script du personnage ?
Oui et non. Tout dépend de ce que doit faire ce script. Il faudrait donc avoir plus de détails pour te répondre mais si ça concerne autre chose que ce qu'indique le titre de ton sujet, tu dois faire un nouveau sujet.

#9 Loud-Wig

Loud-Wig

Posté 12 novembre 2009 - 07:35

bonjour elendell,

non, ma question concerne toujours le meme sujets. Je veux faire apparaitre des carreaux et des fleches sur une table aprés les avoir ramené à un PNJ.

En fait je veux juste utiliser la methode donné par Kira qui fonctionne pour les autres objets (Enable, disable).

Merci
Une porte fermée est une porte qui se défonce.

#10 elendell

elendell

    Mécano Dell'Arte


Posté 12 novembre 2009 - 22:46

Bonjour,

Voir le messageLoud-Wig, le 12.11.2009 à 07:33, dit :

Je veux faire apparaitre des carreaux et des fleches sur une table aprés les avoir ramené à un PNJ.
En fait je veux juste utiliser la methode donné par Kira qui fonctionne pour les autres objets (Enable, disable).
Il y a presque toujours plusieurs manières de faire avec les scripts. Les choix dépendent de tous les paramètres qui doivent entrer en jeu.
Si ces projectiles sont des objets uniques, tu n'as pas besoin de leur donner un script. Tu peux très bien mettre les commandes "disable/enable" dans le script du PNJ ou d'un activateur. Il faut juste que la ligne de commande précise quel objet est concerné, de la sorte : IDobjet->disable.

Si l'identifiant de l'objet n'est pas unique, tu ne peux pas faire "disable/enable" à partir d'un autre script car la commande se fera sur le premier objet portant cet ID que le jeu va trouver. La solution pour un objet qui peut recevoir un script est donc effectivement de mettre la commande dans son script mais il y a aussi d'autres moyens, sans faire un script propre à l'objet.

Par exemple, le script du PNJ peut vérifier si l'objet est dans son inventaire (GetItemCount). Comme il n'en n'avait pas à l'origine, si le script en trouve un [if ( GetItemCount IDobjet > 0 )], cela veut dire que le PJ le lui a donné.

Mais logiquement, tu dois déjà avoir prévu dans le "result" du dialogue qui permet de donner l'objet au PNJ l'action suivante : Player->RemoveItem IDobjet 1 (pour enlever l'objet au PJ). A partir de là, tu as plusieurs solutions :

1) Si tu veux que l'objet soit de suite placé à un endroit précis, tu ajoutes dans ce "result" une commande "PlaceItem" (voir MSfD). Attention quand même à tenir compte que "PlaceItem" crée un nouvel objet identique à l'endroit qu'on lui indique en paramètres. Ce qui veut dire que c'est utilisable dans tous les cas si l'objet en question n'a pas de script mais que dans le cas contraire, cela remettrait à 0 toutes les variables de son script.

2) Si tu veux pousser le réalisme, au lieu de faire un "PlaceItem" immédiat, tu donnes l'objet au PNJ (avec "AddItem"), puis tu fais déplacer le PNJ jusqu'à l'endroit où il doit poser l'objet. Une fois à destination, tu lui enlèves l'objet et en place un nouveau à l'endroit définitif.

3) Pour éviter de faire les commandes de déplacement du PNJ, tu peux aussi lui donner l'objet ("Additem") et ne faire la mise en place définitive de l'objet ("PlaceItem" et "removeitem") que lorsque le PJ reviendra dans la cellule plus tard (tu peux le savoir avec "CellChanged"). Ce qui donnera l'impression que le PNJ a placé l'objet sur son lieu d'exposition/rangement pendant que le PJ n'était pas là. Ça évite donc d'avoir un objet qui apparait on ne sait comment alors que le PNJ à qui on l'a donné n'a même pas bougé.

Avec ces 3 solutions, tu n'as pas besoin de positionner les objets dans le Tescs ni de faire "enable/disable". En fait, tu les positionnes dans le Tescs pour relever les coordonnées et tu les supprimes. Mais il y a sans doute aussi d'autres possibilités. Il faut donc que tu définisses toutes les contraintes avant de choisir la solution la plus simple.




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

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