<codearray> ou les mystères du script

Tout sur les scripts et les mods pour X², X³, X³TC et X³AP.

Moderator: Modérateurs pour les forum Français

Post Reply
User avatar
Serial Kicked
Posts: 3823
Joined: Fri, 12. Aug 05, 20:46
x3tc

<codearray> ou les mystères du script

Post by Serial Kicked » Sun, 28. Aug 05, 15:50

Note préliminaire : Ce texte n'a pas grand intérêt pour le scripteur lambda, et vous pouvez parfaitement continuer à scripter sans comprendre un traitre mot de ce qui va suivre. il s'adresse aux gens voulant savoir comment fonctionne exactement le moteur de script de X² et X³. Une bonne connaissance du xml et du moteur de script sont requis.

------

Voici donc la traduction de ce que l'on sait actuellement sur la partie <codearray> des scripts. Partie réellement utilisée par le moteur de script de X².

:arrow: Niveau 0

-> Entrée 0 : Racine du <codearray>.
Type Table de taille 10.

:arrow: Niveau 1

-> Entrée 1 : Nom du script
Type Chaine

-> Entrée 2 : Version du moteur de script
Type Entier
Valeur 25 pour X², on peut supposer que ce sera 30 pour X³

-> Entrée 3 : Description du script
Type Chaine

-> Entrée 4 : Version du script
Type Entier
Valeur Par défaut, 0

-> Entrée 5 : [inconnu] probablement un caractère séparateur.
Type Entier
Valeur 0

-> Entrée 6 : Declaration des variables utilisées par le script.
Type Tableau, dont la taille dépend du nombre de variables.

Chaque sous entrée de ce tableau est de type "string" (chaine) et correspond à une variable utilisée par le script. Si on utilise par exemple dans le script la variable I, on trouvera une entrée de valeur "I" et de type string.

-> Entrée 7 : Le script en lui même. Le premier niveau est un tableau dont la taille correspond au nombre de lignes utiles du script. Dans ce tableau chaque commande est elle même définie par un sous tableau dont la taille dépend du nombre de paramêtres pour la commande en question.
Chaque sous-tableau se compose ainsi :
- La première valeur correspond à la commande elle même. C'est un entier et sa valeur est récupérée dans le fichier de langue du jeu. (exemple pour un INC (incrémente) c'est 142).
- Les valeurs suivantes sont les paramêtres passés à la commande. C'est aussi un entier dont la valeur correspond à la sous entrée correspondante dans la liste des variables (voir l'entrée 6). La première variable declarée étant la numero 0.

-> Entrée 8 : Liste des parametres passés au script. Si aucun c'est un simple entier de valeur 0. Sinon c'est un tableau dont la taille correspond au nombre de paramêtres. Les sous entrées de ce tableau sont alors présentées ainsi :
- Un entier pour représenter le type du parametre (ex : var/station), dont le numero est déterminé depuis le fichier de langue correspondant.
- Une chaine contenant la description du parametre.
Le nom de la variable sera celui se trouvant au même niveau dans la declaration des variables (voir entrée 6)

-> Entrée 9 : Commandes "décoratives" comme les commentaires, les "end" etc.. Si vide, sa valeur c'est un simple entier de valeur 0. Sinon c'est un tableau de la taille du nombre de commandes de ce type.
[il me manque quelques détails à ce sujet pour une explication détaillée]

-> Entrée 10 : C'est la description qui sera utilisée si ce script est utilisée sur un navire. Elle peut etre de type String (avec comme contenu la description elle même) ou de type Entier (avec comme contenu la référence dans un fichier langue). Si ce script n'est pas destiné à être utilisé sur un navire c'est un entier de valeur 0.


Voilà pour l'instant. C'est surement excessivement indigeste pour la plupart d'entre vous :mrgreen: mais je rajouterai des exemples pour eclairer votre lanterne quand j'aurais un peu plus de temps libre.

------

Sinon en réponse à Redeclipse dans un autre topic qui commençait à devenir pas mal hors sujet et dont la réponse se trouvera beaucoup mieux ici :
RedEclipse wrote:Je voulais dire qu'en modifiant un script tapé sur le script editor (on va se la jouer vieux routard et taper "se", hein) par un bloc-note, le vieux titre du script aparaissait tjrs la liste de script du se, mais pas le nouveau texte. Il m'a fallu copier le script (avec c je crois) et le renommer pour tomber sur le bon texte. Du coup,dans si d'autres script appelait celui-la, je l'aurais eu dans le baba.
Oki c'est bien ce que je pensais, donc CQFD un bloc note peut pas remplacer un SE, à la limite comme script viewer ça passouille. :p
Sinon, pour moi la vision du code arrayque je me fais est qu'il bien utilisé à l'appel de script.
Yep, <codearray>, lu par l'interpréteur de script, chargé et utilisé par X². Et <scriptarray>, version humainement lisible, probablement utilisée pour afficher les lignes plus rapidement dans le SE sans que X² ai a tripatouiller le fichier de langue à chaque chargement dans le SE.

Je ne connais pas les commandes exactes, mais si tu tapes un truc du style $toto = appel du script machin, je pense que l'initialisation du type de $toto est faite avant l'appel du script. C'est plus rapide si c'est pas dynamique. (il faut analyser tout les return sinon et c'est un truc qui peut être fait avant l'execution d'un script, tu comprend ce que je veux dire ?)
Yep, l'initialisation de toutes les variables du script est faite à ce que j'en ai lu dans la partie 6 du codearray. Une fois ces variables chargées en mémoire par X², il passe à la 7 qui contient les commandes elles même avec les réferences aux variables declarées dans la partie 6.
De plus, je doute que le code array soit juste là pour faire joli, avec ses résumés de variable d'entrée. Pour moi il est lu et utilisé à l'appel.
Vi vi, t'as du mal me lire, j'ai dit que je doutais de l'utilité du <scriptarray>. Et qu'en fait on pourrait y ecrire joyeusement n'importe quoi sans que ça n'influence réellement le script. Enfin supposition, je n'ai pas testé.
[edit] au fait, ca ne me dérange pas de travailler en anglais (bon... en allemand, chui une taupe mais en anglais ca va)
Pour être honnète ça m'arrangerait follement de discuter de l'éditeur de script en priorité dans le forum anglais. D'une part parce qu'on y retrouve les gens (de toutes les langues) qui s'y connaissent le mieux dans ce domaine (doubleshadow,moggy2, moonraven, et j'en passe) et d'autre part parce qu'on y a déjà un topic dédié au sujet :)

Voilou voilou.
X3:TC/AP Pirate Guild 3 - Yaki Armada 2 - Anarkis Defense System

Anarkis Gaming HQ
Independent Game Development
X3 Scripting and Modding Station

User avatar
RedEclipse
Posts: 1269
Joined: Sat, 11. Sep 04, 16:43
x4

Post by RedEclipse » Sun, 28. Aug 05, 18:34

Pas de problèmes pour l'anglais, mais on est bien en opposition de phase sur l'utilité du code-array. Si tu dit que tu peut écrire n'importe quoi dedans sans changer le fonctionement d'un script, moi je dis que si tu en change une seule valeur ton script ne marche plus. ;)

Enfin, moi si j'avais été programmeur, j'aurais mis mon type de retour tout près des variables d'entrée, cad en numéro 5.

Il faudrait essayer de lire les code-array de plusieurs scripts differents, tout cons du style :
- return TRUE
- return null
- return $var

(ou var est une variable donnée en entrée du script).

Mmm... Le code-array, tu peut le lire au début du xml, c'est ça ? (edit : non à la fin. Je passe sur le forum anglais)

User avatar
Serial Kicked
Posts: 3823
Joined: Fri, 12. Aug 05, 20:46
x3tc

Post by Serial Kicked » Sun, 28. Aug 05, 18:47

Moi je dis que tu as trop bu hier soir :D

<SCRIPTarray> = inutile, lisible mais parfaitement décoratif.
<CODEarray> = indispensable et illisible.

Donc nous sommes d'accords :)

Et pour le test de Return, je suis d'accord faut tester de toute façon (et pas que pour lui d'ailleurs).


edit : moi je retourne sous battlefield 2, je repasserai ce soir ou demaing sur le board.
X3:TC/AP Pirate Guild 3 - Yaki Armada 2 - Anarkis Defense System

Anarkis Gaming HQ
Independent Game Development
X3 Scripting and Modding Station

Post Reply

Return to “Script et Modding pour la Trilogie X”