Aller au contenu


Les Scripts : Explications Pour Débutants

TUTO Scripts

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

#1 Gérauld

Gérauld

Posté 29 août 2012 - 05:33

Les Scripts : Explications Pour Débutants


Vous voulez scripter mais cet aspect du modding vous rebute?
Vous hésitez à utiliser les fonctions import de peur que votre script fasse appel à un autre script pendant l'exécution?
Vous vous demandez comment se simplifier la vie avec Papyrus?
Pourquoi le compileur dit que ma variable n'est pas définie alors qu'elle l'est?
Pourquoi des fichiers psc et des fichiers pex?
Ce topic est pour vous.

Il n'abordera pas les différents éditeurs existants pour les scripts ainsi que leurs spécificités ainsi que les fragments de scripts, spécifiques aux dialogues et STAGES de quêtes.

1. Un script, c'est quoi?

Un script est un ensemble d'instructions, de fonctions, de propriétés et de variables destiné à ajouter, modifier certaines fonctionnalités du jeu.
Ils sont attachés à un referencealias, un actor ou tout autre objet les acceptant.

Pour réaliser un script, nous éditons un fichier appelé source. Ce fichier source est celui que nous modifions à l'aide de nos petites mains à l'aide de l'éditeur de notre choix.
Il est stocké dans DATA\scripts\source et possède l'extension *.psc.

Ce fichier source n'est pas utilisé tel quel par le jeu. Il a besoin d'un script compilé.
Quand nous sauvegardons un script, l'éditeur le compile et génère un fichier compilé. C'est ce fichier qui sera chargé par le jeu.
Il a une extension en *.pex et sera stocké dans DATA|scripts.
C'est le seul fichier nécessaire pour faire fonctionner un mod.
Par contre le fichier source est nécessaire pour l'éditer.

2. Les instructions IMPORT

Celles-ci permettent d'aérer un peu le code source de votre script en vous évitant des saisies supplémentaires.
Par exemple :
 miscobject property alphaproperty auto
miscobject property alphaproperty auto
  event oninit()
		  int toto = game.getplayer().getitemcount(alphaproperty)
		  int toto1 = game.getplayer().getitemcount(alphaproperty1)
   endevent


deviendra :
 miscobject property alphaproperty auto
miscobject property alphaproperty auto
Import game
  event oninit()
		  int toto = getplayer().getitemcount(alphaproperty)
		  int toto1 = getplayer().getitemcount(alphaproperty1)
   endevent


Le fait d'utiliser la fonction import dans la source n'agit en rien sur le fichier compilé.
En effet, le compilateur sera celui qui importera l'ensemble de fonction game pour réalisé le fichier compilé.
En clair, la fonction import n'a aucune influence sur le fichier compilé. Elle sert juste à améliorer la lisibilité du script et diminuer la saisie.

2. Optimisation - remplacement des getplayer()

Les fonctions getplayer() sont des fonctions assez lentes si on les compare à l'utilisation de propriétés ou de variables.
Nous allons optimiser un peu notre exemple précédent, nous obtenons :
 miscobject property alphaproperty auto
miscobject property alphaproperty auto
actor property playerref auto
Import game
  event oninit()
		  int toto = playerref.getitemcount(alphaproperty)
		  int toto1 = playerref.getitemcount(alphaproperty1)
   endevent


Le script réalise exactement la même fonction mais de manière plus rapide.
Il ne faut cependant pas oublier de "remplir" la propriété.

3. Le nommage des propriétés

Dans l'exemple précédent, nous avons nommé notre propriété de type actor playerref.
Le choix n'a pas été anodin car il permet de remplir de manière automatique la propriété du script.
Il suffit d'ouvrir la fenêtre des propriétés et de cliquer sur "auto-fill all". Une fenêtre apparaitra précisant le nombre de propriétés remplies.
Il suffit donc de nommer la propriété de la même manière que l'objet du même type que l'on veut y mettre dedans pour qu le CK remplisse les champs tout seul après.
Pratique quand on travaille avec beaucoup de propriétés.

4. Les définitions de variables

 miscobject property alphaproperty auto
miscobject property alphaproperty auto
actor property playerref auto
Import game
  event oninit()
		  int toto = playerref.getitemcount(alphaproperty)
		  int toto1 = playerref.getitemcount(alphaproperty1)
   endevent


Le code précédant définit deux variables de type int appelées toto et toto1.
Cependant, on remarquera avec ce type de déclaration que la variable n'est pas partagée par toutes les instances du même script. Pour pouvoir utiliser ces variables en dehors de l'event oninit(), il faut les déclarer avant.

Le code devient donc :
 miscobject property alphaproperty auto
miscobject property alphaproperty auto
actor property playerref auto
int toto
int toto1
Import game
  event oninit()
		  toto = playerref.getitemcount(alphaproperty)
		  toto1 = playerref.getitemcount(alphaproperty1)
   endevent


Les variables toto et toto1 peuvent donc être utilisées par tous les event de ce script mais toujours pas par les autres.

5. Variables globales

Pour le besoin de l'exemple, nous avons besoin de partager une variable avec plusieurs scripts, toto2.
Il faut d'abord créer la variable globale dans le CK (dans la catégorie miscellaneous).
Ensuite il faudra la déclarer en tant que propriété.
 miscobject property alphaproperty auto
miscobject property alphaproperty auto
actor property playerref auto
globalvariable property toto2 auto
int toto
int toto1
Import game
  event oninit()
	  if toto2 == 1
		  toto = playerref.getitemcount(alphaproperty)
		  toto1 = playerref.getitemcount(alphaproperty1)
	  endif
   endevent


Ce script refusera de compiler car toto2 n'est pas une variable à proprement parler mais un objet nommé contenant une valeur avec une ID.
Il existe des fonctions pour lire ou écrire des valeurs dans ces variables globales.
Le script devient :

 actor property playerref auto
miscobject property alphaproperty auto
miscobject property alphaproperty auto
globalvariable property toto2 auto
int toto
int toto1
Import game
  event oninit()
	  if toto2.getvalueint() == 1
		  toto = playerref.getitemcount(alphaproperty)
		  toto1 = playerref.getitemcount(alphaproperty1)
	  endif
   endevent


En clair, si la valeur de la variable toto2 est égale à 1 au moment de l'initialisation du script, les variables de ce script toto et toto1 seront remplies avec le nombre d'objets alphaproperty et alphaproperty1 détenus par le joueur.

6. Les events

Les events sont des évènement qui déclencheront la partie de script comprise entre le mot "event" et le "endevent".
Par exemple, un event onitemadded() se déclenchera dès que l'objet sur lequel est attaché le script reçoit un objet.
Cependant, si on tape ceci dans un script ça ne marchera pas :
Event onitemadded(gold001)
		debug.notification("Chouette de l'or!!!")
endevent


Il faut mettre :
miscobject property gold001 auto ;propriété pour faire comprendre au script ce qu'est gold001

Event OnItemAdded(Form akBaseItem, int aiItemCount, ObjectReference akItemReference, ObjectReference akSourceContainer)
		  if akbaseitem == gold001
				  debug.notification("Chouette " + aiitemcount + " pièces d'or!!!")
		   endif
endevent

akbaseitem est le form de l'objet ajouté,
aiitemcount est le nombre d'objets ajouté
akitemreference est la référence de l'objet s'il en possède une
akSourcecontainer est la provenance de l'objet. None si ramassé par terre.

Donc ce bout de script se déclenche à l'ajout d'un objet et se termine à endevent.
On peut placer plusieurs events dans un même script.

La liste des events et leur syntaxe est donnée ICI

Une variable définie dans un event ne sera valable que pour cet event.

Il faut veiller à la compatibilité entre l'event utilisé et ce qui suit le extends de la première ligne du script. En cas d'incompatibilité, l'event sera ignoré et le script ne fonctionnera pas.

Un même event peut être lancé plusieurs fois en même temps si l'évènement se reproduit alors que le script n'est pas terminé. Ce sont les joies du multithreading. Il faut donc prévoir cette éventualité pour certains scripts (comme ceux qui lancent des animations par exemple).

7. Les states ou l'art de proposer plusieurs modes de fonctionnement pour un script.

Qu'est ce qu'un state? C'est tout simplement un état.

Une explication :
Prenons l'exemple d'un script ayant un état "attente" et un état "occupé". Il y aura dans l'état attente un event correspondant au fait que l'on active l'objet. Cet event déclenchera une série d'instructions.
Si on active une deuxième fois l'objet, la série d'instruction sera lancée une nouvelle fois même si la première n'est pas finie. Pour éviter cela, on va basculer vers l'état "occupé" qui ne contiendra pas l'event d'activation donc ne lancera pas d'instructions.
A la fin de la série d'instruction, il est nécessaire de revenir à l'état "attente" pour permettre une nouvelle activation.

En gros, l'architecture de ce script d'activateur ressemblerait à ça :

Nom du script et type (scriptname tartanpion extends objectreference par exemple)

Déclaration des propriétés et variables

event oninit() si besoin.
fin d'event oninit()

Etat "Attente" par défaut
	   - event onactivate() (portion de script se déclenchant à l'activation)
					 - on passe en état "occupé"
					 - on exécute les instructions
					 - on repasse en état "attente"
	   - fin d'event
fin d'état "attente"

Etat "Occupé"
	   Il n'y a pas d'event onactivate() dans cette portion donc il ne se passe rien en cas de double activation.
Fin d'état "occupé"

On peut aussi utiliser les états pour compter un nombre d'activations dans un temps donné et ainsi permettre plusieurs fonctions différentes à l'activation d'un même objet.

Exemple :
event oninit()
	  self.blockactivation(true) ;je bloque l'activation normale de l'objet pour la remplacer par celle du script
endevent

auto state dep; je déclare l'état "attente" comme étant l'état par défaut.

Event OnCombatStateChanged(Actor akTarget, int aeCombatState)
   ;un event n'ayant rien à voir pour montrer qu'il peut y avoir autant d'events que l'on veut dans un state
		;Il faut se souvenir que cet event ne se lancera que dans l'état "dep"  car il n'est pas présent dans l'état "occupé". S'il doit être déclenché dans l'état "oneclick", il faut faire un copier-coller de cet event dans l'autre état.
endevent

Event OnActivate(ObjectReference akActionRef)
   gotostate("oneclick") ; j'ai effectué mon premier clic donc à partir de maintenant, pour le temps choisi en dessous (0.5 secondes, je change d'état et compte les clics. Le changement d'état m'évite aussi une deuxième activation.
   clic = 1 ;j'ai appuyé une fois
   utility.wait(0.5)   ;j'attend 0.5 secondes. Pendant ce temps c'est l'event de l'état "occupé" qui compte les clics. A la fin de la tempo, je regarde combien il y a eu de clics et déclenche le mode de fonctionnement désiré.
   if clic == 1
	  ;premier mode de fonctionnement
   elseif clic == 2
	  ;deuxième mode de fonctionnement
   else
	  ;troisième mode de fonctionnement - ne pas mettre de condition sur le dernier au cas où le joueur fait plus de clics que nécessaire.
   endif
   clic = 0
   gotostate("dep") ;j'ai fini, je revient donc à l'état "dep"
endevent
endstate   ;fin d'état "dep"

state oneclick ; début d'état "oneclick"
   Event OnActivate(ObjectReference akActionRef) ;c'est cet event qui est déclenché dans l'état oneclick
	  clic = clic + 1 ;je compte mes clics et rien d'autre
   endevent
endstate

Attention, ne pas confondre un gotostate() (changement d'état) avec un goto style language basic.
Dans le cas d'un gotostate(), les instructions qui sont présentes dans l'event après cette instruction sont exécutées jusqu'à la fin de l'event.
Dans l'exemple ci-dessus, on change d'état mais on continue de dérouler le bout de script de l'event onactivate de l'état "dep".


Donc pour résumer, jusqu'à présent, nous avons vu :
-ce qu'est un script physiquement sur un disque dur
- le nommage des propriétés (et l'utilité d'utiliser une propriété playerref plutôt que game.getplayer())
- la fonction import et le fait qu'elle n'a aucune incidence sur la compilation
- les déclarations de variables et leur champ d'existence.
- les events (des déclencheurs de bouts de scripts)
- les states (des ensemble d'events)
Tout ceci combiné avec la page scripting reference du site web du CK devrait vous permettre de comprendre les scripts déjà présents et vous aider à créer les votres en évitant certaines petites erreurs.
L'ours blanc est l'un des plus grands carnivores de Nirn. Les poils du pelage sont translucides et creux. C'est la réfraction de la lumière visible sur la surface interne des poils creux et incolores qui les fait paraître blancs. Cette particularité lui permet de se camoufler dans son environnement de neige et de glace, afin de mieux surprendre ses proies. Ce plantigrade vit exclusivement en Bordeciel et sur l'île de Solstheim.

#2 Aurix

Aurix

    La Bidouille ou un truc comme ça


Posté 29 août 2012 - 16:08

tiens, je n'avais jamais essayé le goto (surtout parce que je le prenais pour le même que celui du basic comme tu le dis) je n'en avais pas trop eu l'utilité jusque là non plus...

en tout cas, MERCI, grâce à toi, des milliers de gens vont commencer à scripter... je ne sais pas encore si c'est une bonne chose :P
"You are the best Septim that's ever ruled. Well, except for that Martin fellow, but he turned into a dragon god, and that's hardly sporting... You know, I was there for that whole sordid affair. Marvelous time! Butterflies, blood, a Fox, a severed head... Oh, and the cheese! To die for."

Shéogorath - Prince de la folie

Vrai Grand Moddeur et FPIA à ses heures...

#3 Angel Eyes Sentenza

Angel Eyes Sentenza

    Cave Canem


Posté 29 août 2012 - 16:13

A wiwikiser  ?
Burro català : "Le caractère catalan semble comporter les vertus de l'âne : ténacité, détermination, ardeur à la tâche et fidélité. "

"J'aime à voir les choses tomber en place."

Kerro Panille

Bloc-notes


#4 Gérauld

Gérauld

Posté 30 août 2012 - 08:12

J'ai récemment créé un compte sur le wiwiki mais il va falloir que je relise un grand coup et de manière précise sa charte avant de faire des bêtises... D'après ce que j'ai lu, il faudra enlever le 1er paragraphe qui n'apporte rien au sujet, remettre en forme, faire des liens pour le plan... Je ne maîtrise pas encore l'outil wiki... en fait.
Promis, dès que je suis sûr de ne pas faire de bêtises, je colle ça sur le Wiwiki. :)

Si d'ici là, des moddeurs veulent compléter, améliorer ou corriger cette explication, je les invite à poster ici. Je mettrai à jour le premier post.
L'ours blanc est l'un des plus grands carnivores de Nirn. Les poils du pelage sont translucides et creux. C'est la réfraction de la lumière visible sur la surface interne des poils creux et incolores qui les fait paraître blancs. Cette particularité lui permet de se camoufler dans son environnement de neige et de glace, afin de mieux surprendre ses proies. Ce plantigrade vit exclusivement en Bordeciel et sur l'île de Solstheim.

#5 joxeyona

joxeyona

Posté 30 août 2012 - 16:10

Bravo et merci ;) tout l e monde en aura besoin (même si je demanderai pour l'utilisatin des scripts; c'est trop galère trop peur des fausses manip pour ma part )
créer un monde meilleur est chose aisée dans le virtuel, c'est plus compliquez dans la vie réel !! quoi que...

>Mes mods

#6 Gérauld

Gérauld

Posté 30 août 2012 - 17:06

En fait, tant que l'on ne touche pas aux scripts de base du jeu, il y a quand même peu de risques de faire des bêtises... Il faut quand même faire attention avec toutes les instructions contenant register... (voir autre tuto sur propreté - compatibilité dans la rubrique CK).

En tant cas moins de risques que si on s'amuse à modifier en profondeur le fonctionnement d'objets de base du jeu.
Il ne faut pas avoir peur des scripts. Par exemple, ils ne nuisent pas à nos précieuses images par seconde contrairement à une cell trop chargée et/ou mal optimisée et ont moins de chances de provoquer des CTD que des meshes bricolés à la va-vite.

Du coup, je pense qu'il va falloir ajouter un petit paragraphe sur l'organisation du temps alloué aux scripts ainsi que sur le multithreading (le même script peut avoir plusieurs instances tournant en même temps si un évènement à lieu plusieurs fois de manière rapprochées par exemple...)

Pour en revenir au wiwiki, mon plan ne colle pas trop avec celui en place... Il va falloir que j'adapte un petit peu ce tuto pour que ça colle...
Quel est le wikinaute avec qui il faut en discuter? On pourrait voir ça par MP et il pourrait me guider un peu pour la première fois... J'ai envie de participer mais pas envie de tout casser... :)
L'ours blanc est l'un des plus grands carnivores de Nirn. Les poils du pelage sont translucides et creux. C'est la réfraction de la lumière visible sur la surface interne des poils creux et incolores qui les fait paraître blancs. Cette particularité lui permet de se camoufler dans son environnement de neige et de glace, afin de mieux surprendre ses proies. Ce plantigrade vit exclusivement en Bordeciel et sur l'île de Solstheim.

#7 Tony67

Tony67

Posté 30 août 2012 - 20:47

Ben moi j'ai pas trouvé la personne qui s'en occupe alors j'ai édité (un peu à l'arrache je l'avoue mais avec un maximum de screens)
D'ailleurs si un modérateur du wiwiki passe par là il peux bien sur l'éditer (tuto sur la création d'un PNJ vendeur)

#8 Nehluxhes

Nehluxhes

    Les mots s'arrêtent à TABRONEH.


Posté 30 août 2012 - 21:07

C'est un wiki, c'est communautaire, tout le monde peut participer :)
Les règles sont juste là pour encadrer un minimum et ne pas faire n'importe quoi, ton tuto me paraît d'ailleurs très bien à mettre tel quel (avec des inter-liens quand c'est nécessaire et possible)
Maintenant si vous voulez vraiment un modérateur du wiwiki, vous pouvez vous adresser à Mike89.


Et j'en profite pour te remercier pour ces deux tutos Gérauld, surtout pour celui sur la compatibilité dans mon cas car ces informations étaient disséminés un peu partout et difficile à retrouver :good:

#9 Gérauld

Gérauld

Posté 31 août 2012 - 03:50

Ça y est :
http://wiwiki.wiwila...ts_introduction

J'essaierai de contribuer régulièrement au Wiwiki. :)
L'ours blanc est l'un des plus grands carnivores de Nirn. Les poils du pelage sont translucides et creux. C'est la réfraction de la lumière visible sur la surface interne des poils creux et incolores qui les fait paraître blancs. Cette particularité lui permet de se camoufler dans son environnement de neige et de glace, afin de mieux surprendre ses proies. Ce plantigrade vit exclusivement en Bordeciel et sur l'île de Solstheim.

#10 Tony67

Tony67

Posté 31 août 2012 - 08:57

:good: Et le Wiwiki reprend de l'activité pour Skyrim ! :grin:

#11 Spitoven

Spitoven

Posté 08 septembre 2012 - 12:46

Bonjour.

Serait-il possible d'avoir une liste exhaustive des propriétés et variables scriptables ? Actuellement cette liste ne semble même pas exister sur le site officiel du CK (on n'y trouve que les fonctions).

Par exemple, je ne parviens pas à finaliser un script censé créer un objet à la mort d'un acteur, parce que je ne connais pas (et ne parviens pas à trouver) la variable property qui permet de faire reconnaître l'objet dans le script.
Image IPB

#12 Gérauld

Gérauld

Posté 08 septembre 2012 - 13:10

Toutes les propriétés et variables sont définies par le script donc sont toutes "scriptables" par définition...
Une propriété ou ne variable a le nom que l'auteur du script lui donne. Cette propriété pointe vers l'objet du CK du type correspondant que l'auteur du script aura choisi. On ne peut donc faire de liste.

Si je décide d'appeler "toto" la propriété de type actor faisant référence au joueur dans le script, il me faudra mettre :
"actor property toto auto" et remplir la propriété toto avec playerref qui est un objet de type actor et non la propriété du script....
toto est la propriété, playerref est un objet de type actor pointant vers le joueur.

Pour faire reconnaitre un objet dans un script, il suffit de créer une propriété du même type que l'objet voulu et de remplir cette propriété en choisissant l'objet désiré dans la liste déroulante.
Autre méthode, donner à la propriété le nom exact de l'objet et cliquer sur auto-fill. Si le type est bon, elle se remplira automatiquement.

Si on désire utiliser une variable globale existante dans un script, il faut créer une propriété de type globalvariable et la faire pointer vers la variable voulue. Ensuite, il faudra utiliser les instructions utilisables avec le type d'objet (à savoir, de mémoire, getvalue(), getvalueint(), setvalue() et setvalueint() ).
globalvariable property toto1 auto ; je fais pointer cette propriété vers la variable globale (objet du CK) que je veux.

;Pour tester la valeur d'une variable globale :
if toto1.getvalueint() == 1
debug.notification("toto1 est égale à 1")
endif

On ne peut faire de listes de variables ou de propriétés car elles sont crées en même temps que le script par l'auteur de celui-ci. Les propriétés sont là pour permettre l'accès aux objets présents dans le CK aux scripts (mis à par les tableaux qui ont d'autres utilités).

J'espère que le concept de propriété est un peu plus clair maintenant.

Modifié par Gérauld, 08 septembre 2012 - 13:12.

L'ours blanc est l'un des plus grands carnivores de Nirn. Les poils du pelage sont translucides et creux. C'est la réfraction de la lumière visible sur la surface interne des poils creux et incolores qui les fait paraître blancs. Cette particularité lui permet de se camoufler dans son environnement de neige et de glace, afin de mieux surprendre ses proies. Ce plantigrade vit exclusivement en Bordeciel et sur l'île de Solstheim.

#13 Spitoven

Spitoven

Posté 08 septembre 2012 - 16:05

Non ce que je voulais dire c'est par rapport aux termes employés pour définir les différents types de variables et de propriétés, pas à leur nom.

Par exemple le "Actor property". Je ne connais pas l'équivalent pour un objet droppable ou un élément de décor par exemple. Et ces termes-là ne sont référencés nulle part.

Modifié par Spitoven, 08 septembre 2012 - 16:06.

Image IPB

#14 Gérauld

Gérauld

Posté 08 septembre 2012 - 16:58

En fait, c'est référencé. Ce sont directement les types d'objets présents dans le CK donc c'est répertorié ici :
La plupart des types (sinon tous) de propriétés correspondent aux classes d'objets décrites ici :
http://www.creationk...:Object_Classes


"Objet droppable" ne veut rien dire car, par exemple, les types suivants le sont : miscobject, armor, weapon, soulgem, ingredient, potion, book... En gros, tous ceux présents dans items dans l'explorateur d'objets du CK.
"Objet droppable" n'est pas une classe d'objet du CK.

A chaque fois, il faut que la propriété soit du type de l'objet voulu.
Si on veut faire référence à un objet spécifique présent dans Bordeciel, on utilise une propriété de type objectreference sinon, on par par l'objet de base et son type associé (armor pour bouclier, weapon pour un hache...)

Il y a aussi des propriétés qui sont des nombres (entier (type int), type float...), des tableaux (associés à un type d'objet), des forms, des variables globales... Pour connaître la liste, il suffit de regarder ce que propose le CK quand on créé une propriété à partir de la fenêtre servant à les remplir.

Il y a autant de propriétés possibles que de place dans le script et que d'objets dans le CK. On peut même avoir le même onjet dans plusieurs propriétés si on veut. Les propriétés sont à la base, un moyen de faire le lien entre le script et des objets du CK.
Elles sont aussi un moyen de s'assurer qu'une information peut être disponible pour d'autres scripts (dans certains cas précis) ou pour le script lui-même car les propriétés sont sauvegardées en jeu.
Les propriétés demeurent avant tout des variables dont on peut modifier la valeur si on le désire. Quand on remplit une propriété, c'est une valeur par défaut que l'on donne.

Tu as besoin d'utiliser un bouclier dans un script. Tu fais une propriété de type armor et tu la remplis en faisant le lien avec ce type de bouclier. A chaque fois que tu utilises cette propriété dans le script, celui-ci sait que c'est un objet de type armor et que c'est ce type de bouclier. Tu ne peux donc utiliser que des insttructions compatibles avec le type armor.

Si tu as besoin d'un actor, tu créé une propriété de type actor qui ne pourra recevoir que des instructions compatibles avec le type actor.

Par exemple, pour appeler le joueur, tu créé une propriété de type actor appelée playerref, tu la remplis avec un auto-fill et à chaque fois tu peux utiliser playerref à la place de game.getplayer() (qui est une instruction très lente...). Seules les instructions du type actor fonctionneront, pas toutes les autres. Pour avoir une indication sur le type d'une instruction, il suffit de regarder ce qu'il y a écrit après celle-ci dans cette page : http://www.creationk...ategory:Papyrus
En gros, tous ce qui est instruction avec - actor doit normalement fonctionner avec les objets rype actor et pareil pour le reste.

Ensuite, il y a des subtilités et des points de détails qui seront à aborder une fois le principe de classe d'objet et de type de propriété intégré.
L'ours blanc est l'un des plus grands carnivores de Nirn. Les poils du pelage sont translucides et creux. C'est la réfraction de la lumière visible sur la surface interne des poils creux et incolores qui les fait paraître blancs. Cette particularité lui permet de se camoufler dans son environnement de neige et de glace, afin de mieux surprendre ses proies. Ce plantigrade vit exclusivement en Bordeciel et sur l'île de Solstheim.

#15 Spitoven

Spitoven

Posté 09 septembre 2012 - 18:47

Donc c'est pour ça que "Item property" ne fonctionne pas, par exemple ? Il faut utiliser le type d'objet comme intitulé ?

Modifié par Spitoven, 09 septembre 2012 - 18:47.

Image IPB

#16 Gérauld

Gérauld

Posté 09 septembre 2012 - 21:27

Oui, c'est ça. Un crochet sera un miscobject, une épée une objet de type weapon, une torche un objet de type light, un personnage un objet de type actor... dans le cas où on parle d'un objet de ce type (du genre ajouter un objet de ce type dans l'inventaire, compter le nombre d'objets de ce type dans l'inventaire...).

Pour une quête, le type est quest.
Pour un alias de quête, le type est referencealias.

Pour faire référence à l'objet présent dans une CELL (donc dans le jeu) et non un objet (LE au lieu de UN, donc en excluant les autres objets du même type), on utilisera le type objectreference.

Bons scripts.
L'ours blanc est l'un des plus grands carnivores de Nirn. Les poils du pelage sont translucides et creux. C'est la réfraction de la lumière visible sur la surface interne des poils creux et incolores qui les fait paraître blancs. Cette particularité lui permet de se camoufler dans son environnement de neige et de glace, afin de mieux surprendre ses proies. Ce plantigrade vit exclusivement en Bordeciel et sur l'île de Solstheim.

#17 Spitoven

Spitoven

Posté 12 septembre 2012 - 01:21

Merci bien pour tout :)

Modifié par Spitoven, 12 septembre 2012 - 01:21.

Image IPB





Aussi étiqueté avec TUTO, Scripts

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

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