L'atelier des scripto-rameurs

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

Moderator: Modérateurs pour les forum Français

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

Post by RedEclipse »

Ah oui, aussi, évite le while (1), c'est bourrin. Tente le while ($Nouvelle.Campagne.Pas.Terminé), avec l'initialisation de cette variable à vrai avant le while et a FALSE après que la dernière mission est lançée (comme avec ton $evenement.deja.fait.numero.dernier, une ligne en dessous)

Note que le while ralentira le jeu souvent, car la plupart du temps, il tourne dans le vide pour rien faire. Le meilleur truc a faire est d'essayer de s'en passer en utilisant des signaux d'interruption...
PrizzZ
Posts: 2351
Joined: Sun, 28. Mar 04, 15:56
x3tc

Post by PrizzZ »

Concernant le problème que tu as posé dans le forum anglais RedEclipse, je te propose l'utilisation d'un variable globale de "contact". De toute facon tu ne pourras pas faire que l'editeur de script appelle le joueur et lui demande directement des données, alors la solution que j'utilise est en gros la suivante :

Pour le premier script, celui qui tourne et qui a besoin de l'information :
  • script 1 : Définie une variable globale, que tu appelles comme tu veux, ici "YourScript_Contact" pour moi, à null. Ceci nous permettra de savoir si le joueur a répondu quelque chose, et eventuellement effacer une ancienne réponse.
  • script 1 : Relie la commande de ton choix a un deuxième script qui servira a récupé les données, décrit ci-dessous.
  • script 1 : Envoie un message au player du genre "Voilà ya ca a définir, vous pouvez donner votre réponse avec la commande machin, et vous devez le faire dans la mizura impérativement"
  • script 1 : Attend une minute, une mizura ( enfin ca peut être plus long au plus court
  • script 1 : Déli la commande du deuxième script
  • script 1 : Lis la variable globale "YourScript_Contact" ou ce que tu veux dans laquelle est la réponse
Pour le second script :
  • Ce second script a comme argument ce que tu cherches récupé comme informations, et les enregistrent dans "YourScript_Contact" ( je te laisse le choix de la maniète, c'est surtout le principe qui est important ), mais surtout sous autre chose que null, ca permet de savoir que le joueur a quand même essayer de répondre pour un message d'erreur par exemple.
Tu peux aussi faire des variantes : ne pas deconnecté le deuxième script et lire la variable globale, et si elle reste a null alors re-attendre une minute, ... jusqu'a avoir une reponse si cette reponse est indispensable.

Pour le moment c'est la meilleur méthode que je connaisse pour demander des paramètre au joueur à partir d'un script une fois qu'il est lancé.

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

Post by RedEclipse »

...mais... Il commençe à me broutter le chou cet éditeur...

J'aurais tant voulu créer ma bibliothèque de menus pour tout les scripteurs :(

C'en est presque à me dégoutter du scripting tient.
User avatar
peroxyde
Posts: 2230
Joined: Sun, 2. Apr 06, 00:12
x3tc

Post by peroxyde »

Je me permet de déterrer ce topic puisqu'il est indexé, et au vu de son objectif, je pense qu'il vaut mieux que je poste ici plutôt que de créer un nouveau topic (si je me trompe je m'excuse d'avance)

Voilà, je voulais améliorer le script de ramassage d'Egosoft des marchandises relâchées dans l'espace.

Raison de ma démarche:
Vous allez me dire il y a déjà un script pour ça. Ben oui et non.
Le script de Wischmermill (un truc comme ça lol) lui même tiré d'un autre script, est une commande vaisseau secondaire. Il ne dirige pas les vaisseaux vers les contenaires.
Et bien qu'il fasse un tri des marchandises qu'il collecte, pour que la collecte se fasse, on doit lancer la commande D'Egosoft pour diriger le vaisseau vers les dites caisses.
Or si le vaisseau cible un contenaire par la commande d'ES et que vous ne souhaitez pas ramasser cette marchandise comme stipulé dans le script de Wisch, la marchandise sera ramassée quand même.


Ce que j'ai fait:
Déjà des recherches sur le forum car ça s'annonce pas simple.
J'avais remarqué que les scripts marqués d'un "!" dans le dossiers script n'étaient pas listés dans l'éditeur.
Après avoir juste changé l'extension pck en xml, (dérisoire mais on sais jamais), téléchargé après avoir cherché assez longtemps où il se trouvais le MSCIHandbook et où figure -alléluia!- un lien permettant de décompresser les pck en xml, après avoir réussi à faire fonctionner ce X2Tool.exe du X2modder kit... je bloque.

Pour le faire apparaitre InGame, je l'ai renommé (AAA.ship.cmd.collectflyingwares.pl.xml au lieu de !ship.cmd.collectflyingwares.pl.xml). Mais il reste absent lors de l'ouverture de L'éditeur.
J'ai ensuite ouvert avec le bloc note et ai remarqué que le nom du script figure également dans le script lui même. Rebelote...
Mais toujours pas de script existant dans l'éditeur.
Je précise que pour la dernière action j'avais lu qu'il fallait enregistrer en UTF8, mais pas mieux...

Une idée?
Dans le même ordre d'idée et pour le fun, j'aurais bien voulu modifier les script de positionnement des vaisseaux en formation pour qu'il soit pas que à une position donnée mais également avec le même cap et horizon (relatif) que leur leader...
[ external image ]
"On apprend en faisant des erreurs, mais le problème c'est qu'en explosifs, l'erreur est fatale." Aldébaran v10
[ external image ]<-- Clef Des Toilettes Privées Du Forum Français décernée par Thoto le 23/06/07
PrizzZ
Posts: 2351
Joined: Sun, 28. Mar 04, 15:56
x3tc

Post by PrizzZ »

Généralement, toute tentative de modifier un script hors de l'éditeur de script du jeu est voué à l'échec. En effet, le script est encodé sous la forme d'un XML avec des commandes lisibles, mais aussi une grosse matrice en dessous, qui contient les données du script. Changé le XML ne suffit généralement pas.
User avatar
peroxyde
Posts: 2230
Joined: Sun, 2. Apr 06, 00:12
x3tc

Post by peroxyde »

Donc il n'y a aucun moyen de pouvoir faire afficher ce script dans le ScriptEditor ingame?

En fait, je me souviens que Azz avait fait une modif de Script d'ES concernant les patrouilles. Mais ceux-ci ne sont pas affublé d'un "!".

Il y a aussi une signature en bas du xml. Qui ressemble a un gros code. La supprimer résoudrait le problème? (Ce qui semblerais normal puisque ça ne serait plus certifié ES).
[ external image ]
"On apprend en faisant des erreurs, mais le problème c'est qu'en explosifs, l'erreur est fatale." Aldébaran v10
[ external image ]<-- Clef Des Toilettes Privées Du Forum Français décernée par Thoto le 23/06/07
User avatar
Azz
Posts: 1031
Joined: Tue, 18. May 04, 20:14
x4

Post by Azz »

salut peroxyde




courage tu as presque tout bon :D

il reste une dernière étape : si tu regarde bien, tu dois normalement voir le nom du script également au début du code contenu dans le code array, (qui contient le code proprement dit du script). Il faut que tu le renomme là aussi de la même façon (enlever le '!' ).

Enfin n'oublie pas d'enlever la version pck du dossier script, car c'est toujours elle qui aurait priorité sur la version xml à l'exécution.

un outils très pratique pour décompresser les pck : X2 Archiver , ici :
http://themadgoner.com/TMG/X2/Scripts_M ... es001.html
iou naud ouate, aille ama pis | Pilote IA | Site
User avatar
peroxyde
Posts: 2230
Joined: Sun, 2. Apr 06, 00:12
x3tc

Post by peroxyde »

Azz je t'aime! Euh... enfin toute proportion gardée hein...

Effectivement, je sais pas pourquoi j'ai pas pensé à regarder s'il y avait d'autre occurrence du nom dans le fichier. Mais c'était juste ça!

Dire que j'ai galéré juste pour un seul point d'exclamation...

Bon maintenant reste à scripter ce que je veux. Mais à peine ai-je regardé dans leur script que j'ai vu qu'il pouvait être optimisé (c'est rien, juste une ligne en moins mais c'est quand même amusant...)

Encore merci!

Et la signature? Je l'ai pas supprimée mais je suppose qu'il faut que je le fasse?
[ external image ]
"On apprend en faisant des erreurs, mais le problème c'est qu'en explosifs, l'erreur est fatale." Aldébaran v10
[ external image ]<-- Clef Des Toilettes Privées Du Forum Français décernée par Thoto le 23/06/07
User avatar
peroxyde
Posts: 2230
Joined: Sun, 2. Apr 06, 00:12
x3tc

Post by peroxyde »

Juste une petite question au passage, pour le triturage de méninges, mais surtout car j'aime la précision et le fignolage...

J'envoie une question au joueur où il dispose de trois réponses:
1- Oui
2- Non
3- Abandon

Je voie bien l'intérêt du "else if" si il y a plusieurs commande à executer pour chaque condition mais si je n'ai qu'une commande, est-ce que:

Code: Select all

If reponse==3
return null
else if reponse==1
perte = [true]
else if reponse==2
perte = [false]
end
n'est pas moins bien en terme de rapidité d'exécution (ou autre que je ne saurais pas) que :

Code: Select all

Skip if reponse!=3
    return null
perte=[true]
skip if reponse==1
    perte=[false]
[ external image ]
"On apprend en faisant des erreurs, mais le problème c'est qu'en explosifs, l'erreur est fatale." Aldébaran v10
[ external image ]<-- Clef Des Toilettes Privées Du Forum Français décernée par Thoto le 23/06/07
User avatar
NalinElfleg
Moderator (Français)
Moderator (Français)
Posts: 4638
Joined: Fri, 17. Sep 04, 10:38
x4

Post by NalinElfleg »

En terme de rapidité, c'est la même chose, avec peut être même un léger ralentissement dû au Skip + test contre test. En fait, dans des langages aussi "simples", le if-then-else se traduit derrière, bien souvent, par le code que tu as mis ensuite. La différence va résider dans le fait que l'user peut entrer une réponse fausse, 4 par exemple, que ton test va considérer comme si elle était 2.
Image
User avatar
peroxyde
Posts: 2230
Joined: Sun, 2. Apr 06, 00:12
x3tc

Post by peroxyde »

Si effectivement, j'avais pas pris en compte le fait de rentrer une valeur fausse (quoique dans mon cas ce n'est pas une fenêtre input mais un incoming msg, donc pas de valeur fausse), j'avoue ne pas saisir ce que tu m'a dit juste avant.

Si le If-then-else est traduit en code que j'ai mis après, le second devrait être plus rapide puisque pas à "traduire"?

Je te remercie tout de même. Si c'est équivalent, en tout cas, ça prend moins de place et c'est plus rapide à rentrer que dans le premier cas!
[ external image ]
"On apprend en faisant des erreurs, mais le problème c'est qu'en explosifs, l'erreur est fatale." Aldébaran v10
[ external image ]<-- Clef Des Toilettes Privées Du Forum Français décernée par Thoto le 23/06/07
User avatar
Volcanosf
Posts: 1644
Joined: Tue, 20. Sep 05, 20:20
x3ap

Post by Volcanosf »

Il vaut mieux que le code que tu rédiges soit capable de faire face à toutes les situations possibles et imaginables. C'est pour cela que la première boucle que tu décris (la plus longue) est la plus avantageuse puisqu'elle réduit le risque de plantage suite à une utilisation erronée par le joueur.

En tout cas c'est mon avis de programmeur qui a appris la programmation à la dure sur une calculatrice programmable avant de passer au C. Et les astuces valables pour un langage le sont souvent pour beaucoup d'autres aussi ;)
Les humains n'ont jamais pu résister à la tentation d'utiliser une nouvelle arme.
Michael Liberty


Ne réveillez pas le volcan qui dort...
User avatar
peroxyde
Posts: 2230
Joined: Sun, 2. Apr 06, 00:12
x3tc

Post by peroxyde »

Note que les deux sont identique puisque dans mon cas il ne peux pas rentrer de valeur fausse.

En réalité la première question que je me posais, comme j'essayais de compter en temps machine, c'est si un temps de comparaison était aussi rapide qu'un temps execution

J'ai jamais réussi a me lancer dans le C, mais j'ai créé plein de chose sur la TI-82 dont un labyrinthe 3D sur base matricielle parce que celui existant ne fonctionnait pas. *nostalgie*
Bon et pis un peu de cracking en dasm (jamais réussi à utiliser S-I) aussi fut un temps...
[ external image ]
"On apprend en faisant des erreurs, mais le problème c'est qu'en explosifs, l'erreur est fatale." Aldébaran v10
[ external image ]<-- Clef Des Toilettes Privées Du Forum Français décernée par Thoto le 23/06/07
User avatar
Azz
Posts: 1031
Joined: Tue, 18. May 04, 20:14
x4

Post by Azz »

moi j'ai tendance à privilègier (fortement) la lisibilité du code plutôt que la concision.
Donc la 1ere solution est pour moi dix-mille fois préférable.
De plus je vais même jusqu'à rajouter des choses à priori inutile (enfin j'essaie d'y penser) pour que le code prenne en compte même ce qui ne doit pas arriver, par exemple ici rajouter un dernier test :

Code: Select all

else
perte = [false]
endif
ça permet d'éviter de planter si plus tard on modifie ailleurs le script sans penser à toutes les consèquences

de toute façon en terme de temps machine je doute que l'on sente la moindre différence entre la version 1 et 2
iou naud ouate, aille ama pis | Pilote IA | Site
User avatar
Volcanosf
Posts: 1644
Joined: Tue, 20. Sep 05, 20:20
x3ap

Post by Volcanosf »

D'autant plus que le temps machine se compte en millisecondes, non ? Du coup pour l'utilisateur ça ne fait pas de différence mesurable.
Les humains n'ont jamais pu résister à la tentation d'utiliser une nouvelle arme.
Michael Liberty


Ne réveillez pas le volcan qui dort...
User avatar
peroxyde
Posts: 2230
Joined: Sun, 2. Apr 06, 00:12
x3tc

Post by peroxyde »

Volcanosf wrote:D'autant plus que le temps machine se compte en millisecondes, non ? Du coup pour l'utilisateur ça ne fait pas de différence mesurable.
lol, ça c'est la mauvaise excuses pour programmer n'importe comment...
si ce contrôle avait été obligé de se retrouver dans une boucle, ben la milliseconde perdu un millier de fois ça fait une seconde... visible par le joueur (d'autant plus que là ce n'est que pour un script, alors si il y en a plusieurs...)

Je comprends, Azz.
Mais je ne pense pas que mon code soit illisible, au vu du nombre de REM qui s'y trouvent et de la compartimentation (fan de sub, moi, lol)
[ external image ]
"On apprend en faisant des erreurs, mais le problème c'est qu'en explosifs, l'erreur est fatale." Aldébaran v10
[ external image ]<-- Clef Des Toilettes Privées Du Forum Français décernée par Thoto le 23/06/07
fangamer
Posts: 12
Joined: Fri, 11. Apr 08, 22:09

Post by fangamer »

Bonjour

En cours de jeux, j'utilise la commande : add default equipment du cheats1.4 qui me permet d'installer les améliorations sur mes vaisseaux..
Je désirerais lors de l'utilisation de cette commande, charger le modèle (No1dans ce cas) de la liste de ravitaillement (de AzzPiloteIAIII) sur mon vaisseau le Buster Avant-garde.
J'ai essayé ce-ci dans install.systems.xml du cheats1.4:

083 end
084 if $ship -> is of type Buster Avant-garde
085 $cpy.prod = $list.modele.prod[1]
086 $cpy.qte = $list.modele.qte[1]
087 $i.size = size of array $cpy.prod
088 $list.prod = array alloc: size=$i.size
089 $list.qte = array alloc: size=$i.size
090 copy array $cpy.prod index 1 ... $i.size into array $list.prod at index 1
091 copy array $cpy.qte index 1 ... $i.size into array $list.qte at index 1
092 [THIS] -> set local variable: name='azz.ravitail.prod' value=$list.prod
093 [THIS] -> set local variable: name='azz.ravitail.qte' value=$list.qte
094 end
095 return null


Comme je n'ai jamais scripté, j'ai copiées dans azz.gr.ravitail.modele.charge. les lignes que je pensais indispensable et je les ai intégré dans install.systems.xml, puis j'ai tenté plusieurs modifications sans succès.

Je signale avoir 5 modèles de liste (de 0 à 4) et que si je les charges par la voie normale avec la commande communication avec le piloteIA cela fonctionne parfaitement.

J'espère avoir été suffisamment clair dans l'explication de mon problème et j'apprécierai bien volontier de l'aide.
PrizzZ
Posts: 2351
Joined: Sun, 28. Mar 04, 15:56
x3tc

Post by PrizzZ »

Il me faudrait l'intégralité du script, mais vu d'ici je dirais que remplacer [THIS] par $ship aux lignes 92 et 93 devrait aider (le cheat1.4, c'est celui de LV ?)
fangamer
Posts: 12
Joined: Fri, 11. Apr 08, 22:09

Post by fangamer »

Bonjour PrizzZ

Merci de ton aide
Oui le cheat1.4, c'est bien celui de LV et voici le dossier complet :

Code: Select all

Script install.systems
Version: 0
for Script Engine Version: 33

Description
install default items to ships
Arguments
1: ship , Var/Ship , 'ship' 
Source Text


001   = $ship -> add 1 units of Licence de chasseurs de prime Argon
002   = $ship -> add 1 units of Analyseur de prix d'achat 
003   = $ship -> add 1 units of Analyseur de prix de vente 
004   = $ship -> add 1 units of Licence de chasseurs de tête Boron
005   = $ship -> add 1 units of Booster 
006   = $ship -> add 1 units of Système de survie de soute 
007   = $ship -> add 1 units of Ordinateur d'Amarrage 
008   = $ship -> add 1 units of Projecteur écliptique
009   = $ship -> add 1 units of Analyseur de vaisseau
010   = $ship -> add 1 units of Logiciel de Commandes de Combat MK1
011   = $ship -> add 1 units of Logiciel de Commandes de Combat MK2
012   = $ship -> add 1 units of Moteur de saut 
013   = $ship -> add 1 units of Analyseur d'astéroïde
014   = $ship -> add 1 units of Pilote automatique de combat
015   = $ship -> add 1 units of Logiciel de Commandes de Navigation MK1 
016   = $ship -> add 1 units of Collecteur de Minerai 
017   = $ship -> add 1 units of Licence de chasseur de prime Paranid
018   = $ship -> add 1 units of Logiciel de commandes spéciales MK1
019   = $ship -> add 1 units of Booster MATS
020   = $ship -> add 5 units of Assurance de recouvrement
021   = $ship -> add 1 units of Moteur d'Accélération Temporelle à Singularité
022   = $ship -> add 1 units of Licence de chasseurs de prime Split
023   = $ship -> add 1 units of Téléporteur 
024   = $ship -> add 1 units of Logiciel de Commandes Commerciales MK1
025   = $ship -> add 1 units of Logiciel de Commandes Commerciales MK2
026   = $ship -> add 1 units of Système Commercial Distant 
027   = $ship -> add 1 units of Scanner Triplex
028   = $ship -> add 1 units of Licence de chasseurs de tête Teladi
029   = $ship -> add 1 units of Système Commercial Distant 
030   *= $ship -> add 1 units of 
031   *= $ship -> add 1 units of SS_WARE_SW_NEW19
032   *= $ship -> add 1 units of SS_WARE_SW_NEW10
033   *= $ship -> add 5 units of Invalide
034   *= $ship -> add 1 units of 
035   *= $ship -> add 1 units of 
036   *= $ship -> add 1 units of 
037   = $ship -> add 1 units of Kit de Mise à niveau BPH Mk1
038   = $ship -> add 1 units of Moteur de manoeuvre 
039   = $ship -> add 1 units of Jumelles Numériques 
040   = $ship -> add 1 units of Logiciel de Logistique de Produit MK1
041   = $ship -> add 1 units of Logiciel de Logistique de Produit MK2
042   = $ship -> add 1 units of Scanner Duplexe
043   = $ship -> add 1 units of Logiciel de Ravitaillement de Flotte
044   if $ship -> is of type Discoverer Avant-garde
045    = $ship -> install 210 units of Extension de capacité de soute
046    = $ship -> install 47 units of Optimisation de moteur
047    = $ship -> install 19 units of Optimisation de la direction
048    $ship -> set local variable: name='azz.level.combat' value=15
049   end
050   if $ship -> is of type Buster Avant-garde
051    = $ship -> install 390 units of Extension de capacité de soute
052    = $ship -> install 34 units of Optimisation de moteur
053    = $ship -> install 23 units of Optimisation de la direction
054    $ship -> set local variable: name='azz.level.combat' value=15
055    $ship -> set local variable: name='$list.modele.prod' value=1
056    $ship -> set local variable: name='$list.modele.qte' value=1
057   end
058   if $ship -> is of type Eclipse
059    = $ship -> install 650 units of Extension de capacité de soute
060    = $ship -> install 25 units of Optimisation de moteur
061    = $ship -> install 22 units of Optimisation de la direction
062    $ship -> set local variable: name='azz.level.combat' value=15
063   end
064   if $ship -> is of type Mammouth
065    = $ship -> add 1 units of Rayon tracteur
066    = $ship -> install 770000 units of Extension de capacité de soute
067    = $ship -> install 19 units of Optimisation de moteur
068    = $ship -> install 40 units of Optimisation de la direction
069    $ship -> set local variable: name='azz.level.combat' value=25
070    $ship -> set local variable: name='experience' value=25
071   end
072   if $ship -> is of type Déméter Super Transporteur
073    = $ship -> add 1800 units of Photopile
074    = $ship -> add 75 units of Missile Moustique 
075    = $ship -> add 36 units of Drone de combat 
076    = $ship -> install 5 units of Bouclier 25 MJ
077    = $ship -> install 1 units of Canon à Accélérateur de Particules Beta 
078    = $ship -> install 9000 units of Extension de capacité de soute
079    = $ship -> install 21 units of Optimisation de moteur
080    = $ship -> install 24 units of Optimisation de la direction
081    = $ship -> add 1 units of Logiciel de commandes commerciales MK3
082    $ship -> set local variable: name='experience' value=22
083   end
084   if $ship -> is of type Buster Avant-garde
085    $cpy.prod = $list.modele.prod[1]
086    $cpy.qte = $list.modele.qte[1]
087    $i.size =  size of array $cpy.prod
088    $list.prod =  array alloc: size=$i.size
089    $list.qte =  array alloc: size=$i.size
090    copy array $cpy.prod index 1 ... $i.size into array $list.prod at index 1
091    copy array $cpy.qte index 1 ... $i.size into array $list.qte at index 1
092    [THIS] -> set local variable: name='azz.ravitail.prod' value=$list.prod
093    [THIS] -> set local variable: name='azz.ravitail.qte' value=$list.qte
094   end
095   return null
Puis le dossier complet du script (un parmi les nombreux de AzzPiloteIAIII )dans lequel j'ai copié les quelque lignes.

Code: Select all

Script azz.gr.ravitail.modele.charge
Version: 0
for Script Engine Version: 32

Description
Chargement d un modele de liste reappro
Arguments
Source Text


001   * **** Preparation des donnees ***
002   
003 @ $tab.IA = $dummy -> call script 'Azz.prime.Rech.IA' :  Select ship=[THIS]
004   $pilote.name = $tab.IA[0]
005   $level.combat = $tab.IA[1]
006   $pname =  get player name
007   $anull = null
008   
009 @ = wait randomly from 100 to 500 ms
010   
011   $list.modele.prod = get global variable: name='azz.ravitail.modele.prod'
012   $list.modele.qte = get global variable: name='azz.ravitail.modele.qte'
013   
014   if $list.modele.prod == null
015    $msg = sprintf: pageid=7163 textid=38, $pilote.name, $pname, $anull, null, null
016    send incoming message $msg to player: display it=[TRUE]
017    return null
018   end
019   
020   
021   * Message de bienvenue
022   $msg = sprintf: pageid=7163 textid=1197, $pilote.name, $pname, $anull, null, null
023   send incoming message $msg to player: display it=[TRUE]
024   
025   * Affichage liste des modeles
026   $question = sprintf: pageid=7163 textid=1199, $pilote.name, null, null, null, null
027   
028   
029   
030   
031   $no.quest = 0
032   while $no.quest < 10
033    
034    
035    $libel = ' '
036    $i.nb = 30
037   * Constitution du libel
038    while $i.nb
039     dec $i.nb = 
040     $i.prod = $list.modele.prod[$no.quest][$i.nb]
041     $i.qte = $list.modele.qte[$no.quest][$i.nb]
042     if $i.prod != null
043      $msg = sprintf: pageid=7163 textid=40, $i.prod, $i.qte, null, null, null
044      $libel = $libel + $msg
045     end
046    end
047    
048   * Affichage de la ligne
049    $msg.id = 1200 + $no.quest
050    $msg = sprintf: pageid=7163 textid=$msg.id, $anull, $no.quest, $libel, null, null
051    $question = $question + $msg
052 @  = wait 5 ms
053   fin.quest:
054    inc $no.quest = 
055   end
056   $msg = sprintf: pageid=7163 textid=1120, $anull, $anull, $anull, null, null
057   $question = $question + $msg
058   
059   
060   gosub Pose.Quest
061   
062   if $reponse < 99
063   * Memoristaon de la liste
064    $cpy.prod = $list.modele.prod[$reponse]
065    $cpy.qte = $list.modele.qte[$reponse]
066    $i.size =  size of array $cpy.prod
067    $list.prod =  array alloc: size=$i.size
068    $list.qte =  array alloc: size=$i.size
069    copy array $cpy.prod index 0 ... $i.size into array $list.prod at index 0
070    copy array $cpy.qte index 0 ... $i.size into array $list.qte at index 0
071    
072    [THIS] -> set local variable: name='azz.ravitail.prod' value=$list.prod
073    [THIS] -> set local variable: name='azz.ravitail.qte' value=$list.qte
074    
075    $msg = sprintf: pageid=7163 textid=39, $pilote.name, $pname, $anull, null, null
076    send incoming message $msg to player: display it=[TRUE]
077    
078   end
079   
080   return null
081   
082   * ========Sous Programmes=======
083   
084   Pose.Quest:
085   $reponse = null
086   set global variable: name='azz.prime.reponse' value=null
087   send incoming question $question to player: callback='azz.prime.sais.reponse'
088   $rnd = 0
089   while $reponse == null
090    $reponse = get global variable: name='azz.prime.reponse'
091 @  = wait 1000 ms
092    inc $rnd = 
093    skip if $rnd < 50
094     $reponse = 'trop tard'
095   end
096   if $reponse == 'trop tard'
097    play sample 992
098 @  = wait 500 ms
099    $msg = sprintf: pageid=7161 textid=1229, $pilote.name, $pname, null, null, null
100    send incoming message $msg to player: display it=[TRUE]
101    return null
102   end
103   endsub
104   
105   return null
Je serais de retour seulement vers 23h, je ne pourrais répondre avant.

Cordialement fangamer
PrizzZ
Posts: 2351
Joined: Sun, 28. Mar 04, 15:56
x3tc

Post by PrizzZ »

Les variables $list.modele.prod et $list.modele.qte ne sont pas initialisées. Essaye en remplaçant :

Code: Select all

084   if $ship -> is of type Buster Avant-garde

[...]

094   end
095   return null
par

Code: Select all

084   if $ship -> is of type Buster Avant-garde
085    $list.modele.prod = get global variable: name='azz.ravitail.modele.prod'
086    $list.modele.qte = get global variable: name='azz.ravitail.modele.qte'
087    $cpy.prod = $list.modele.prod[1]
088    $cpy.qte = $list.modele.qte[1]
089    $i.size =  size of array $cpy.prod
090    $list.prod =  array alloc: size=$i.size
091    $list.qte =  array alloc: size=$i.size
092    copy array $cpy.prod index 1 ... $i.size into array $list.prod at index 1
093    copy array $cpy.qte index 1 ... $i.size into array $list.qte at index 1
094    $ship -> set local variable: name='azz.ravitail.prod' value=$list.prod
095    $ship -> set local variable: name='azz.ravitail.qte' value=$list.qte
096   end
097   return null

Return to “Script et Modding pour la Trilogie X”