Quête en prenant un item

C'est ici que vous pouvez poser vos questions techniques.
Avatar du membre
Tissendel
Maîtresse de Forge
Maîtresse de Forge
Messages : 1157

Re: Quête en prenant un item

Message par Tissendel »

Ok, je vois.

Tu as remplacer StageDeDebut par 10. C'est vrai que c'était pas forcement clair.

En fait il y a 2 choix, soit tu laisse StageDeDebut, ce qui fait que tu devra assigner 10 comme property. Comme pour le script du changement de tenu où tu assignais les armor. L'avantage de faire ça c'est que ton script peut être réutilisé pour une autre quête et un autre stage.

Soit, tu met 10 dans le script mais il ne pourra pas être réutilisé pour une quête qui doit passer au stage 20, 30 ou autre. Mais dans ce cas il ne faut pas mettre la ligne de property en haut.

Donc soit tu fais :
Scriptname ScathingLetter extends ObjectReference  

Int Property StageDeDebutAuto  
Quest Property ScathingLetter  Auto  
ObjectReference Property PlayerREF Auto  

Event OnContainerChanged(ObjectReference akNewContainer, ObjectReference akOldContainer)
     if (akNewContainer == PlayerREF)
	ScathingLetter.setStage(StageDeDebut)
     endIf
endEvent
Soit :
Scriptname ScathingLetter extends ObjectReference  

Quest Property ScathingLetter  Auto  
ObjectReference Property PlayerREF Auto  

Event OnContainerChanged(ObjectReference akNewContainer, ObjectReference akOldContainer)
     if (akNewContainer == PlayerREF)
	ScathingLetter.setStage(10)
     endIf
endEvent
Avatar du membre
Confrère_VF
Comédien
Comédien
Messages : 560

Re: Quête en prenant un item

Message par Confrère_VF »

Mais alors ce que je ne comprends pas, c'est le nom de StargeDeDebut : qu'est-ce qu'on écrit, si ce n'est pas le numéro de stage ?
« Le terme "doubleur" est totalement erroné quand il désigne les acteurs prêtant leur voix. Il définit un entrepreneur qui a une société de doublage. » - Éric Legrand.
Mes doublages réalisés et en cours.
Avatar du membre
Tissendel
Maîtresse de Forge
Maîtresse de Forge
Messages : 1157

Re: Quête en prenant un item

Message par Tissendel »

Rien, c'est ce qu'on appelle une variable.

Une variable en programmation c'est une "chose", un objet a qui on donne un nom et un type et qui peut changer de valeur

Quand on écit : "Int StageDeDebut ". On definie une variable qui s'appelle StageDeDebut et de type Int ( Int pour Integer ce qui veut dire que la variable sera un nombre entier )

On pourra alors donner comme valeur à StageDeDebut 1, 2 3,... 10, ....15, etc....

Ca peut servir, a compter par exemple, on dit au début que la variable vaut 0 et chaque fois qu'un événement arrive on rajoute 1 à la variable, Ainsi on sait combien de fois l’événement se produit.

Le fait de rajouter "Int Property StageDeDebut Auto " ca en fera une propriété de script et on pourra choisir sa valeur quand on va attacher le script en cliquant sur Properties.

Lorsque tu va mettre ce script sur ton objet, dans Propertie tu va assigner 10 à StageDeDebut. Mais ensuite, tu pourrais faire un deuxième objet avec le même script mais tu assignerais 20 à StageDeDebut.

Je sais pas si mes explications sont super claire xD
Avatar du membre
Confrère_VF
Comédien
Comédien
Messages : 560

Re: Quête en prenant un item

Message par Confrère_VF »

Oui, en ayant fait le truc j'ai compris ce que tu voulais dire^^

Je n'ai pas encore testé en jeu, mais je suis déjà (encore) tombé sur un os, et là pour le coup je ne vois pas vraiment où est le problème.
Quand on initie le dialogue avec le PNJ concerné par la lettre, on la lui donne. Or la commande Game.GetPlayer().RemoveItem(ScathingLetter, 1) ne fonctionne pas :
ScathingLetter is not a variable
type mismatch on parameter 1 (did you forget a cast?)
cannot name a variable or property the same as a known type or script
Pourtant j'ai copié/collé le script d'un autre truc où ça nous retirait un objet après un dialogue en changeant seulement le nom de l'objet.
Du coup ce n'est plus "commencer" la quête qui pose problème, c'est la terminer^^
« Le terme "doubleur" est totalement erroné quand il désigne les acteurs prêtant leur voix. Il définit un entrepreneur qui a une société de doublage. » - Éric Legrand.
Mes doublages réalisés et en cours.
Avatar du membre
Tissendel
Maîtresse de Forge
Maîtresse de Forge
Messages : 1157

Re: Quête en prenant un item

Message par Tissendel »

Ha oui je vois ^^

Tu a nommé ta property et ton script exactement de la même façon : ScathingLetter. Ca lui plait pas du tout. Il faut renommer l'un des 2 ( la property c'est le plus simple )
Avatar du membre
Confrère_VF
Comédien
Comédien
Messages : 560

Re: Quête en prenant un item

Message par Confrère_VF »

C'est ce que je me suis dit en effet, et ça a l'air de fonctionner. Mais maintenant, quand je veux compiler, il me dit cette fois que l'item concerné (ScathingLetter, que j'ai renommé en ScathingLetterItem au cas où) a une variable indéfinie. :
variable EloraScathingLetterItem is undefined
Je ne comprends pas du tout parce qu'encore une fois, je n'ai fait que copier un autre script où on nous retire un item en renommant bien là où il faut :
;BEGIN FRAGMENT CODE - Do not edit anything between this and the end comment
;NEXT FRAGMENT INDEX 1
Scriptname TIF__060AD8DF Extends TopicInfo Hidden

;BEGIN FRAGMENT Fragment_0
Function Fragment_0(ObjectReference akSpeakerRef)
Actor akSpeaker = akSpeakerRef as Actor
;BEGIN CODE
Game.GetPlayer().RemoveItem(ScathingLetterItem, 1)
GetOwningQuest().setStage(20)
;END CODE
EndFunction
;END FRAGMENT

;END FRAGMENT CODE - Do not edit anything between this and the begin comment

Book Property ScathingLetterProperty  Auto
De plus, je suis déjà allé dans les Properties et l'item est bien à sa place (après vérification, la Property reste "ScathingLetter" tout court mais je ne pense pas que ce soit ça).
« Le terme "doubleur" est totalement erroné quand il désigne les acteurs prêtant leur voix. Il définit un entrepreneur qui a une société de doublage. » - Éric Legrand.
Mes doublages réalisés et en cours.
Avatar du membre
Tissendel
Maîtresse de Forge
Maîtresse de Forge
Messages : 1157

Re: Quête en prenant un item

Message par Tissendel »

Je suis un peu perdue. La on est dans fragments de script de la quête. De plus je ne vois pas "EloraScathingLetterItem " dans le code. C'est ScathingLetterItem qui est "undefined" ?
Avatar du membre
Tissendel
Maîtresse de Forge
Maîtresse de Forge
Messages : 1157

Re: Quête en prenant un item

Message par Tissendel »

Ok, alors je vois le problème.

Il ne faut pas confondre la property et l'objet associé

Ta property est définie comme ça :
Book Property ScathingLetterProperty  Auto
Ce qui veut dire que la property s'appelle ScathingLetterProperty.
Et l'objet Book que tu as créé dans le CK s'appelle ScathingLetterItem j'imagine


Donc dans le script tu dois avoir
Game.GetPlayer().RemoveItem(ScathingLetterProperty , 1)
et non
Game.GetPlayer().RemoveItem(ScathingLetterItem, 1)
Ensuite, bien sûr, dans le CK (onglet script de la quete) , tu dois assigner ScathingLetterItem à ta property ScathingLetterProperty
Avatar du membre
Confrère_VF
Comédien
Comédien
Messages : 560

Re: Quête en prenant un item

Message par Confrère_VF »

D'accord, donc en fait quand on veut bidouiller un item dans un script, il faut toujours marquer sa Property, c'est ça que tu es en train de dire ?
« Le terme "doubleur" est totalement erroné quand il désigne les acteurs prêtant leur voix. Il définit un entrepreneur qui a une société de doublage. » - Éric Legrand.
Mes doublages réalisés et en cours.
Avatar du membre
Tissendel
Maîtresse de Forge
Maîtresse de Forge
Messages : 1157

Re: Quête en prenant un item

Message par Tissendel »

Oui, toujours passer par une property ^^
Répondre

Retourner vers « Entraide sur le Creation Kit »