[X3 Tutorial] Ajout de commandes aux vaisseaux et usines (25.02.06)

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

[X3 Tutorial] Ajout de commandes aux vaisseaux et usines (25.02.06)

Post by Serial Kicked » Sun, 26. Feb 06, 05:16

======================================
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%.


:arrow: Préambule

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.


:arrow: 1. Les 2 catégories de commandes

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 :
Menu 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)
1.2 Les commandes additionnelles

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.
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>
{ 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. }


:arrow: 2. Créer un fichier de langue pour donner un nom à vos commandes

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 2008 représente le nouvel identifiant que vous voulez donner à votre script à la place de son identifiant (les COMMAND_TYPE_...). Dans le cas de notre scipt nous allons remplacer la commande COMMAND_TYPE_PIRACY_20 (slot 620) par TUTORIAL_DROPSQUASH et le slot de commande additionel pour vaisseau numero 30 (slot 1230) par TUTORIAL_CHECKHULL.

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'.


:arrow: 3. Ecrire le script de posage de mines

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


:arrow: 4. Ecrire le script de la vérification du bouclier

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"
{ Note: si vous ètes un absolu débutant en script, vous devez savoir impérativement ceci : à partir du moment ou vous faites une boucle ("while" par exemple) vous devez inclure une commande wait dans cette boucle. En effet le "multitache" de X3 marche en mode coopératif. C'est à dire que chaque script qui tourne pendant un moment doit faire des pauses pour laisser l'occasion aux autres de s'exécuter. Plus vos wait sont courts et plus ils ralentiront globalement X3 }

:arrow: 5. Faire un script de "setup"

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
et voici pour la version française :

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
Comme vous pouvez le voir la commande "set script command upgrade" devient "set ship command upgrade" en VF.

Voici maintenant l'explication des différentes commandes utilisées pour le script de setup :

Code: Select all

001   load text: id=8990
Charge en mémoire le fichier texte 8990. Si le jeu est en VF il chargera le fichier 338990.xml, en anglais 448990.xml, etc. dans le dossier t.

Code: Select all

002   set script command upgrade: command=TUTORIAL_DROPSQUASH  upgrade=[TRUE]
Permet de choisir quel upgrade du vaisseau est nécessaire pour que la commande s'affiche dans le menu. Si vous mettez [TRUE] au parametre "upgrade" le vaisseau n'aura pas besoin de logiciel particulier pour que la commande soit visible.

Code: Select all

003   global script map: set: key=TUTORIAL_DROPSQUASH, class=Ship, race=Player, script='tutorial.drop.squash', prio=0
Cette ligne associe votre commande aux scripts que nous venons de taper. Dans le cas présent elle associe la commande TUTORIAL_DROPSQUASH au script tutorial.drop.squash pour tous les vaisseaux appartenant au joueur. Le parametre prio est ici peu important, mais sert à déterminer quel script aura l'ascendant sur l'autre quand c'est à leur tour de s'éxécuter.


:arrow: 6. Et là, c'est presque terminé !

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.


:arrow: Quelques conseils

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 :p }

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 ! :)
Last edited by Serial Kicked on Fri, 3. Mar 06, 06:48, edited 1 time in total.
X3:TC/AP Pirate Guild 3 - Yaki Armada 2 - Anarkis Defense System

Anarkis Gaming HQ
Independent Game Development
X3 Scripting and Modding Station

Morpheus81fr
Posts: 17
Joined: Sun, 16. Jan 05, 18:29
x3

Post by Morpheus81fr » Sun, 26. Feb 06, 17:47

Merci beaucoup !!!

j'ai pu ajouter une commande dans mes stations. :D

User avatar
Whismerhill
Posts: 579
Joined: Wed, 20. Oct 04, 21:16
x3ap

Post by Whismerhill » Tue, 28. Feb 06, 02:17

génial !
super ça vas m'aider beaucoup :)
j'avais la flemme de lire des tutoriaux de ce type en anglais (en plus j'avais pas trouvé :p )

winchy
Posts: 48
Joined: Sat, 28. May 05, 19:03
x4

Post by winchy » Thu, 2. Mar 06, 21:01

génial,

du coup, je vais essayer d'en faire 1 (si je réussis à comprendre les commandes)

User avatar
Whismerhill
Posts: 579
Joined: Wed, 20. Oct 04, 21:16
x3ap

Post by Whismerhill » Thu, 2. Mar 06, 23:42

note: avec la VO1.3.2beta les commandes numéro 762 et 763 ne semblent pas marcher
seul autre script d'installé : les cheats scripts anglais (mais aucune commande en 7xx n'est utilisée)

User avatar
Azz
Posts: 1031
Joined: Tue, 18. May 04, 20:14
x4

Post by Azz » Fri, 3. Mar 06, 01:04

Tiens, c'est intérèssant ça, moi aussi il me semble que j'ai eu le probleme avec d'autres types de commandes (genre 862, 863....) :?
iou naud ouate, aille ama pis | Pilote IA | Site

User avatar
Whismerhill
Posts: 579
Joined: Wed, 20. Oct 04, 21:16
x3ap

Post by Whismerhill » Fri, 3. Mar 06, 01:37

en vérifiant de plus près je me suis aperçu que dans la liste des commandes du jeu il y a
COMMAND_TYPE_FIGHT_61

et toutes les autres s'arrêtent à 61

sauf SHIP qui s'arrête à 63
STATION à 63

(sans script installé évidemment)

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

Post by Serial Kicked » Fri, 3. Mar 06, 04:53

Heuuuuu, bah "normalement" ces commandes x62-x63 sont censées marcher mais j'avoue ne pas avoir essayé pour l'instant. Ceci dit après vérification il n'y a aucun script qui utilise les emplacements x62 et x63 sauf pour les parties SHIP et STATION. Donc en effet, il doit y avoir un soucis quelque part.

Je vais rajouter un avertissement dans le tutorial en conséquence. Merci.
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”