X3 TUTORIAL: GESTION DES SLOTS DE COMMANDE
======================================
[Anarkis Federation - X2, X3 Script and Modding Station]
======================================
Voici comme promis, un petit tutorial sans prétentions pour l'ajout de commandes à vos vaisseaux et à vos usines. Il nécessite quelques connaissances basiques dans le fonctionnement de l'éditeur de scripts et dans l'édition des fichiers textes .xml du jeu. L'édition de ces derniers peut se faire au bloc-note, mais je conseille très vigoureusement d'utiliser un editeur de texte (Scite) avec coloriage de la syntaxe xml, c'est beaucoup plus facile à lire.
Pour ce tutorial, nous allons rajouter 2 commandes à un vaisseau. L'une sera d'aller déposer une mine squash à l'emplacement de votre choix. L'autre commande est de verifier l'état de la coque du vaisseau, et de lui ordonner d'arréter ce qu'il est en train de faire et de rentrer à sa base dès qu'il a moins de 80%.

La première chose à savoir, et la plus importante, est que le nombre de total de slots est limité. Deux scripts différents utilisant un même slot sont incompatibles. Vous trouverez une liste des commandes utilisées par les autres scripteurs ici pour les scripts francophones, et là pour les scripts anglais. Et il vous est fortement recommandé d'utiliser des slots vides quand celà est possible.

1.1 Les commandes standards
Ce sont les commandes que vous trouvez dans le menu "Navigate", "Trade", "Combat", etc.. Votre vaisseau ne peut en exécuter qu'une seule à la fois. C'est habituellement cette commande que est liée au comportement principal de votre vaisseau. Et c'est donc ce type de commande que l'on va utiliser pour notre script de posage de mine.
Voici comment le jeu nomme par défaut les commandes de ce type :
1.2 Les commandes additionnellesMenu Naviguer
De <t id="216">COMMAND_TYPE_NAV_16</t> à <t id="263">COMMAND_TYPE_NAV_63</t>
Menu Combat
De <t id="316">COMMAND_TYPE_FIGHT_16</t> à <t id="363">COMMAND_TYPE_FIGHT_63</t>
Et ainsi de suite pour :
COMMAND_TYPE_TRADE (416-463)
COMMAND_TYPE_SPECIAL (516-563)
COMMAND_TYPE_PIRACY (616-663)
COMMAND_TYPE_CUSTOM (716-763)
COMMAND_TYPE_GENERAL (816-863)
Chaque navire peut avoir deux commandes additionnelles qui tournent en simultané. Lancer ces commandes n'arrète pas la commande standard en train de tourner. Les usines n'ont que des commandes de ce type, et elles peuvent en faire tourner une bonne dizaine simultanément au lieu de deux. Ce sont des slots très prisés et très utiles, mais aussi les moins nombreux.
{ Note : Les slots en dessous de 16 sont utilisés en partie par les commandes du jeu, et sont réservés pour les scripts qui seront signés. }Stations
<t id="1116">COMMAND_TYPE_STATION_16</t> à <t id="1163">COMMAND_TYPE_STATION_63</t>
Navires
<t id="1216">COMMAND_TYPE_SHIP_16</t> à <t id="1263">COMMAND_TYPE_SHIP_63</t>

Le fichier de langue (qui doit aller dans le dossier t de votre dossier d'installation. Son nom doit se composer d'une suite de chiffre qui se compose ainsi :
338990.xml
Code du langage (33: français, 44: anglais, 49: allemand)
Nombre à 4 chiffres de votre choix
Dans le cas présent notre fichier s'appelera donc : 338990.xml
Son contenu se composera ainsi :
Code: Select all
<?xml version="1.0" encoding="UTF-8" ?>
<language id="33">
<page id="2008">
<t id="620">TUTORIAL_DROPSQUASH</t>
<t id="1230">TUTORIAL_CHECKHULL</t>
</page>
<page id="2010">
<t id="620">Poser une mine...</t>
<t id="1230">Repli si coque abimée</t>
</page>
<page id="2011">
<t id="620">drop.squash</t>
<t id="1230">check.hull</t>
</page>
<page id="2022">
<t id="620">Ce vaisseau ira poser une mine dans le secteur de votre choix</t>
<t id="1230">Ce vaisseau arrétera l'action en cours et rentrera à la base si sa l'état de sa coque est inférieure à 80%</t>
</page>
</language>
La page 2010 permet de choisir le nom que portera votre dans le menu du vaisseau ou de la station.
La page 2011 est utiliser pour définir le diminutif de vos commandes (la partie droite entre crochet du menu d'ordres)
La page 2022 est utilisée pour afficher un petit ecran d'aide ou d'information concernant la commande quand l'utilisateur appuie sur la touche 'i'.

Maintenant que votre fichier texte est fin pret dans votre dossier T, il est grand temps de lancer X3 et d'ouvrir l'éditeur de script. Nous allons créer un nouveau script appelé tutorial.drop.squash qui prendra un simple parametre de position dans un secteur choisi par le joueur. Sa fonction sera de vérifier la présence d'une mine dans le cargo, puis de voler jusqu'à la position indiquée pour lacher la mine.
Notez que dans le code suivant la variable [THIS] correspond au vaisseau sur lequel vous executez votre commande. Etant donné que ce tutorial ne porte que sur l'attribution de nouveaux ordres aux vaisseaux et usine, je ne donnerai ici que le pseudo-code nécessaire :
Code: Select all
Parametres
(1) Destination : Var/Position
--
$x := Destination[0]
$y := Destination[1]
$z := Destination[2]
$dest.sector := Destination[3]
cargo = [THIS] -> Recuperer la quanté de "SQUASH Mine" dans le cargo
current.sector = [THIS] -> Récuperer le secteur courant
Si cargo > 0 Alors
- Si $current.sector != $dest.sector
- - [THIS] -> Executer le script pour se deplacer vers $dest.sector
- Fin
- [THIS] -> Deplacer vers x=$x y=$y z=$z approx = 200 M.
- Squash = Creer vaisseau: type="SQASH Mine" owner="PLAYER" x=$x y=$y z=$z sector=$dest.sector
- [THIS] -> Ajouter -1 du produit "SQUASH Mine" au cargo
sinon
- AfficherMessage("Pas de Squash Mine dans le cargo de [THIS]")
fin

Pour celui ci nous allons créer un second script appelé tutorial.check.hull. Contrairement au script précédent qui était linéaire (fait ceci, fait ça, et c'est fini) celui ci est basé sur une boucle qui va vérifier périodiquement l'état de la coque du vaisseau et qui s'interrompera quand il passe en dessous de 80% d'intégrité ou quand l'utilisateur arrétera la commande. Bien entendu, [THIS] dans le pseudo code suivant correspondra aussi au vaisseau sur lequel est exécuté la commande.
Code: Select all
Parametres
aucun
--
$coque = [THIS] -> Recuperer le % de coque
Tant Que $coque > 80
- $coque = [THIS] -> Recuperer le % de coque
- Wait(5000) // attendre 5 secondes
fin
AfficherMessage("[THIS] est endommagé et retourne à sa base")
[THIS] -> Executer le script "ship.cmd.returnhome"

Ce script sera lancé au démarrage d'une partie ou quand l'utilisateur charge une sauvegarde, et il est donc utilisé pour charger le fichier texte et pour attribuer les nouvelles commandes aux scripts que nous venons de créer. Le nom du script doit obligatoirement commencer par "setup.". Nous allons donc l'appeler ici setup.tutorial.
Note Importante : il y a un soucis entre la VF et la VO. C'est la même commande dans les deux mais pour une raison qui echappe à toute raison, elle ne porte pas le même nom dans les deux éditions.
Voici donc ce que ça donne pour la version anglaise du jeu :
Code: Select all
001 load text: id=8990
002 set script command upgrade: command=TUTORIAL_DROPSQUASH upgrade=[TRUE]
003 global script map: set: key=TUTORIAL_DROPSQUASH, class=Ship, race=Player, script='tutorial.drop.squash', prio=0
004
005 set script command upgrade: command=TUTORIAL_CHECKHULL upgrade=[TRUE]
006 global script map: set: key=TUTORIAL_CHECKHULL, class=Ship, race=Player, script='tutorial.check.hull', prio=0
007
008 return null
Code: Select all
001 load text: id=8990
002 set ship command upgrade: command=TUTORIAL_DROPSQUASH upgrade=[TRUE]
003 global script map: set: key=TUTORIAL_DROPSQUASH, class=Ship, race=Player, script='tutorial.drop.squash', prio=0
004
005 set ship command upgrade: command=TUTORIAL_CHECKHULL upgrade=[TRUE]
006 global script map: set: key=TUTORIAL_CHECKHULL, class=Ship, race=Player, script='tutorial.check.hull', prio=0
007
008 return null
Voici maintenant l'explication des différentes commandes utilisées pour le script de setup :
Code: Select all
001 load text: id=8990
Code: Select all
002 set script command upgrade: command=TUTORIAL_DROPSQUASH upgrade=[TRUE]
Code: Select all
003 global script map: set: key=TUTORIAL_DROPSQUASH, class=Ship, race=Player, script='tutorial.drop.squash', prio=0

Plus qu'une dernière touche à modifier dans les deux scripts de commande tutorial.drop.squash, et tutorial.check.hull. Executez votre fichier de setup pour charger votre fichier de langue, pour allez editer tutorial.drop.squash. Au dessus de la ligne permettant de choisir les paramêtres du script il y a une ligne qui s'appelle "Command Name". Selectionnez-la et tapez [Entrée]. Dans le menu qui apparait, choisissez Select Command/Signal, puis descendez dans la liste jusqu'à trouver TUTORIAL_DROPSQUASH. Sauvegardez le script et faite de même pour le fichier tutorial.check.hull et TUTORIAL_CHECKHULL.
Voilà, c'est terminé. Chargez une nouvelle partie, ou réinitialisez le 'script cache' et vous aurez les deux nouvelles commandes rajoutées à vos vaisseaux.

Je l'ai déjà dit, mais on ne le répétera jamais assez, le nombre de commandes total est très limité, donc si vous comptez poster votre script ici, essayez d'en utiliser le moins possible, particulièrement pour les slots de commande additionnels. Un choix de parametre intelligent permet souvent de pouvoir regrouper 2 ou 3 commandes en une seule.
Dans tous les cas essayez de ne pas utiliser les slots pris par quelqu'un d'autre quand celà est possible. Si ce n'est pas possible, ecrasez des commandes prises par des cheat scripts, et s'il n'y en a plus non plus ecrasez celles de scripts faisant double emploi avec le votre. { d'ailleurs lire ce tutorial vous engage automatiquement à ne jamais ecraser de commande utilisée par l'un de mes scripts

Notez que vous n'etes pas forcément obligés de faire une condition de sortie de boucle (pour des scripts similaires à la vérification de la coque). Vous pouvez très bien avoir des cas pour lesquels un "while [TRUE]" puisse être utilisé. Le joueur pourra de toute façon interrompre lui-même votre commande dans son menu d'ordre.
Même si ce tutorial a été ecrit en pensant à X3, il est tout aussi valable pour X2, la seule différence étant que X2 offre un nombre inférieur de slots de commande.
=============
NOTE IMPORTANTE
=============
Il semblerait que les slots 62 et 63 ne fonctionnent que pour les slots de commandes additionels et pas pour les commandes comme "Fight", "Trade", etc..
Amusez vous bien avec tout ça !
