TESCS : Scripting

De Wiwiki
Aller à la navigation Aller à la recherche


Tutoriels de références

Avant d'aller plus loin, les documents suivants sont l'alpha et l'oméga pour tout scripteur :


en français :

  • Morrowind Scripting for Dummies 8ème édition. Manuel essentiel et quasiment exhaustif qui commence par expliquer les bases avant de couvrir toutes les commandes, les difficultés et les demandes les plus courantes des scripteurs, y compris le scripting avancé, avec de nombreux exemples; recommandable du novice au scripteur chevronné.


en anglais :

  • Liste des commandes sur UESP la liste complète des commandes de scripting par ordre alphabétique, avec leur syntaxe, leur description et les subtilités d'utilisation. Le guide de référence.


Concepts de base

Objets, références, variables

Objets et références

Un objet est un élément défini dans le TESCS par un nom précis que l'on nommera id. Une référence est une instance d'un objet, placée dans le jeu. A une seule id peut donc correspondre plusieurs références placées dans le jeu, par exemple les gardes sont des copies d'un même PNJ, ils ont même id et donc mêmes caractéristiques.

Les commandes de script s'appliquent souvent à des éléments du jeu. Ces éléments sont placés dans le jeu, ce sont donc des références. Mais comme les références n'ont pas de nom en propre, la syntaxe du scripting utilise leurs id pour les nommer, ce qui occasionne bien des problèmes et des confusions.

La plupart du temps, ces commandes de script ne fonctionnent que s'il n'y a pas d'ambiguïté entre id et référence, c'est à dire qu'à une id correspond une unique référence placée dans le jeu. Par exemple, player est l'id du joueur, dont il n'existe qu'une référence associée placée dans le jeu. Player est donc valable pour désigner une référence.


Variables

Une variable est un espace de stockage pour un résultat. Dans Morrowind, une variable est toujours un nombre réel (en pratique, un nombre décimal compris dans une certaine fourchette) ou un nombre entier, Morrowind ne supportant que trois types de variables.

Ces types sont :

- short : un entier compris entre -32768 et 32767

- long : un entier compris entre -2147483648 et 2147483647

- float : un flottant avec au maximum 7 décimales, compris entre -3,4.10^38 et +3,4.10^38


Une variable peut être locale (c'est à dire interne à un script, qu'il soit global ou local) ou globale (utilisable et accessible partout).

Toute variable, locale ou globale, doit être déclarée; dans le TESCS (gameplay->globals) pour les globales et au début du script concerné pour les locales.

Certaines fonctions acceptent des variables en paramètres, d'autres non et n'acceptent que des valeurs numériques. L'extension Tribunal puis MWSE ont augmenté le nombre de commandes de script acceptant des variables.

Les différents types de script

Il existe trois types de scripts :


- le script local, attaché à un objet placé dans le jeu, c'est à dire à une référence. De cette façon, il permet de travailler directement avec cette référence en évitant les confusions entre id et référence.

Un script local ne s'exécute que dans la cellule où est placée sa référence, en intérieur, plus les huit cellules adjacentes, en extérieur.


- le script global est en général lancé par une commande startscript. Une seule instance de ce script s'exécute à la fois et il fonctionne en permanence jusqu'à ce qu'il soit arrêté par une commande stopscript.


- le script ciblé (targeted script) est un hybride entre script local et script global. C'est un script que l'on lance sur une référence à l'aide d'une commande startscript. Il donc est lié à une référence, mais il fonctionne en permanence sans restriction de cellule. Il est possible de lancer plusieurs scripts ciblés sur une même référence, y compris simultanément et même si celle-ci possède déjà un script attaché à son id dans le TESCS, mais il semblerait que lancer simultanément un même script sur différentes références puisse causer des problèmes.

Limitations du scripting

- la profondeur maximale de boucles if imbriquées est de 10

- il y a une limite au nombre de caractères du script (environ 32000) et une limite du nombre de lignes (autour de 1000, probablement 1024 lignes une fois le script compilé)

- il y a une limite de 255 commandes compilées dans une boucle if... endif

- il y a une limite au nombre de conditions if elseif dans un script.

- la 34e variable locale déclarée dans un script n'est pas prise en compte.

Liste alphabétique détaillée et commentée des commandes de scripts

Dans toute la suite :

  • ref désignera une référence
  • objet_id l'id d'un objet
  • n un nombre de type short, éventuellement une variable
  • x y z un nombre de type float, éventuellement une variable


AddItem

     ref->AddItem objet_id n

Permet d'ajouter n copies d'un objet d'id objet_id à l'inventaire de la référence ref.

Cette commande est la seule façon d'affecter une référence dans une cellule encore non visitée, au contraire des commandes de type Set<attribute>, Mod<attribute>, qui ne fonctionnent pas dans ce cas.


AiTravel

     ref->AiTravel x y z


Permet à la référence ref de se rendre aux points de coordonnées x y z dans la cell courante. Par conséquent ceci fonctionne aussi bien en extérieur qu'en intérieur puisque l'id de la cellule n'est pas mentionné.

AiTravel n'accepte pas les variables en argument, même avec Tribunal; cet écueil n'est surmontable qu'avec MWSE (voir la commande xAiTravel)

La présence ou non d'un pathgrid a un certain effet sur cette commande. Lorsqu'un pathgrid existe et permet à la référence en question de se rendre au point x y z, alors s'il n'y pas d'obstacle entre le PNJ et le point d'arrivée, le PNJ s'y rend en ligne droite en empruntant le chemin le plus court; sinon le PNJ se rend au point désiré en empruntant les lignes du pathgrid. S'il n'y a pas de pathgrid, la référence essaie toujours de se rendre au point x y z en ligne droite. S'il y a un obstacle entre le point de départ et le point d'arrivée, la référence aura alors tendance à warper, c'est à dire à disparaître lorsqu'elle rencontre l'obstacle pour réapparaître immédiatement au point x y z.

S'il n'y a pas de difficulté majeure en intérieur, en extérieur le franchissement de bordure d'une cellule pose par contre de gros problèmes. Si l'on veut éviter à la référence de warper, il faut conduire par un AiTravel la référence jusqu'au début de la cellule voisine – mais pas plus loin - puis appeler un autre AiTravel. Cette procédure est délicate et nécessite des tests in game soigneux.


CreateMaps

     CreateMaps "Morrowind.esm"

Commande console permettant permet de créer une carte des cells extérieurs du jeu, prenant en compte tous les esm et esp chargés.

Pour pouvoir utiliser cette commande, il convient de changer la ligne Create Maps Enable=0 en : Create Maps Enable=2 dans la section [General] de Morrowind.ini, et de créer un répertoire Maps dans le répertoire Morrowind; puis de l'appeler en cours de jeu à la console par CreateMaps "Morrowind.esm". Le processus charge successivement toutes les cells du jeu et peut s'avérer très long, souvent plus d'une heure. Le résultat est produit sous forme d'images au format bmp (une image par cell, de format 256x256, pesant chacune 193 ko). Morrowind compte environ un millier de cells extérieures.


Face

     ref->Face x y

Face x y fait se tourner un PNJ dans la direction de coordonnées x y dans la cell courante.

Il semble qu'essayer d'appeler cette commande continûment (par exemple, pour faire suivre du regard un objet se déplaçant), ou même à intervalles réguliers, fonctionne assez mal.


Position, PositionCell

     ref->Position x y z zrot
     ref->PositionCell x y z zrot cell_id

PositionCell place la référence concernée aux coordonnées x y z de la cell cell_id et avec la rotation autour de l'axe z d'angle zrot. Dans la commande Position, il n'y a pas de mention de la cell, cette commande fonctionne partout en extérieur, et peut téléporter à l'intérieur de la cell intérieure courante sans mention de celle-ci. PositionCell fonctionne aussi bien en extérieur qu'en intérieur et permet de téléporter d'une cell intérieure à une cell extérieure et vice-versa. Le paramètre zrot fonctionne aussi bien pour les PNJs que pour le PJ et les objets, mais il s'exprime en degrés pour les objets et le PJ, et en minutes d'arc pour les PNJs et les statics (1 degré = 60 minutes d'arc, donc 90°=5400 minutes).

Position peut créér des bugs graphiques sur les compagnons ainsi téléportés. Il est donc recommandable d'utiliser PositionCell dans ce cas.

D'après MSfD, utiliser PositionCell dans la case result d'un dialogue fonctionne mal et peut causer des crashes. Il est recommandé de lancer un script de téléportation à la place.

Get/Mod/Set

Caractéristiques


     Agility
     Endurance
     Intelligence
     Luck
     Personality
     Speed
     Strength
     Willpower


Compétences

Combat


     Armorer
     Athletics
     Axe
     Block
     BluntWeapon
     HandToHand
     HeavyArmor
     LightArmor
     LongBlade
     Marksman
     MediumArmor
     ShortBlade
     Spear
     Unarmored

Discrétion


     Mercantile
     Security
     Sneak
     Speechcraft


Magie


     Alchemy
     Alteration
     Conjuration
     Destruction
     Enchant
     Illusion
     Mysticism
     Restoration


Barres d'état


     Fatigue
     Health
     Magicka


Résistances


     ResistMagicka
     ResistFire
     ResistFrost
     ResistShock
     ResistDisease
     ResistBlight
     ResistCorprus
     ResistPoison
     ResistParalysis
     ResistNormalWeapons

Effets modificateurs actifs


     ArmorBonus
     AttackBonus
     DefendBonus
     Chameleon
     Invisible
     Flying
     SwimSpeed
     SuperJump
     WaterBreathing
     WaterWalking
     Blindness
     CastPenalty
     Paralysis
     Silence


Stats générales


     Level (only works with Set and Get)
     Reputation
     PCrimeLevel (PC Only)


IA


     Alarm (Changing this changes it for ALL references of the Actor)
     Fight (Changing this changes it for ALL references of the Actor)
     Flee (Changing this changes it for ALL references of the Actor)
     Hello (Changing this changes it for ALL references of the Actor)

Divers


     Scale (the 3D scale of the object)

Exe externes

Morrowind Enhanced (MWE)

Morrowind Scripting Extender (MWSE)

Page du projet libre MWSE

Télécharger MWSE (version 0.94)

Morrowind Graphic Extender (MGE)