Et pour commencer la fête, je chope des migraines avec un script devant permettre le réapprovisionnement automatisé d'escadre -en tous cas avec la première partie de celui-ci, càd la plus simple: en résumé, trouve la station, vas-y en utilisant éventuellement le jumpdrive, reforme l'escadre et va t'amarrer. J'ai quasiment recopié un autre script que j'avais bricolé il y a quelques jours, et qui fonctionne très bien; j'y ai juste apporté quelques petites améliorations mineures, pour assurer que l'escadre ne se sépare pas (ils sautent tous ou pas du tout, le leader attend ses ailiers une fois dans le bon secteur) et pour éviter que l'escadre ne poursuive pendant trois jours un vaisseau porteur sans arriver à le rattraper.
Voilà donc la première partie de ce script, celle qui était censée ne poser aucun problème:
Code: Select all
Description
rearmer escadre
Arguments
1: stationcible , Var/Station/Carrier to dock at , 'destination'
2: quantite , Var/Number , 'quantite'
3: matos , Var/Ware , 'ware'
Source Text
001 $testage = 1
002
003 * 1- identifier la station et s y amarrer
004
005 if [THIS] -> is docked
006 if [DOCKEDAT] == $destination
007 goto label DebutChargt
008 else
009 @ = [THIS] -> call script '!move.undock' :
010 end
011 end
012
013 Restart:
014 while not [THIS] -> is in same sector as $destination
015
016 * Si la station est eloignee, regrouper l escadre pour le saut
017 skip if not $testage == 1
018 write to player logbook 'Calcul de la trajectoire...'
019
020 $SecteurDestination = $destination -> get sector
021 $Nombresauts = get jumps from sector [SECTOR] to sector $SecteurDestination
022 if $Nombresauts > 1
023 @ $EscadreJumpOK = [THIS] -> call script 'Escadre.prepare.for.jump' : Secteur de
destination=$SecteurDestination
024 if $EscadreJumpOK
025
026 skip if not $testage == 1
027 write to player logbook 'Jump Device charging...'
028 @ = wait randomly from 4000 to 8000 ms
029 @ $PortailDest = [THIS] -> call script 'baseperso.trouver.portail' :
destination=$destination
030 @ = [THIS] -> call script '!move.jump' : gate or
sector=$PortailDest followers should jump too=[TRUE]
031 end
032 end
033
034 * Si le saut est impossible ou la station proche, y aller a pattes
035 @ = [THIS] -> fly to sector $SecteurDestination
036 end
037
038 if [THIS] -> is in same sector as $destination
039
040 skip if not $testage == 1
041 write to player logbook 'On est a cote, on y va!'
042 skip if not $destination -> is of class Vaisseau Porteur
043 $destination -> interrupt with script 'baseperso.attendre.arrimage'
and prio 50: arg1=[THIS] arg2=null arg3=null arg4=null
044
045 @ = [THIS] -> call script 'Escadre.attend.formation' :
046 @ = [THIS] -> fly to station $destination
047 end
048
049 skip if not $testage == 1
050 write to player logbook 'On est arrives.'
051
J'ai enlevé ici les vérifications classiques "is docking allowed"/ "is docking possible" (des fois que), mais ça marchait pas non plus avec. La variable "$testage" et les couples de lignes qui y font référence sont juste là pour m'aider à suivre où on en est, et là aussi j'ai essayé de les enlever à tout hasard, ça ne résout évidemment pas le pb.
Les autres scripts auxquels je fais appel ('Escadre.prepare.for.jump', 'baseperso.attendre.arrimage' , 'baseperso.trouver.portail') sont très courts, ont été abondamment testés, et je suis à 99% sûr qu'ils ne posent pas de pb...
Enfin, j'appelle le script depuis les commandes de "THIS" (le leader) via une commande personnalisée, qui fonctionne très bien si je l'utilise pour tester d'autres scripts.
DONC, voilà où ça cloche: où que soit $destination (station ou vaisseau cible), dans le même secteur que THIS ou à perpète, THIS se met en route vers Kingdom End, l'origine de la carte. Il n'utilise pas son moteur de saut pour aller jusque là-bas (ce qui est logique, si on veut), mais m'envoie toujours les messages de vérifications que j'ai placés.
C'est d'autant plus bizarre que, si vous regardez le script, il ne devrait pas en passer par là s'il est dans le même secteur que $destination (il devrait aller directement à la ligne 038 pour s'amarrer) -or même dans ce cas, il se barre vers Kingdom End et m'envoie "calcul de la trajectoire...". Il prend donc tout le "while" de la ligne 14 à la ligne 38, ignorant apparemment la condition "while not [THIS] -> is in same sector as $destination" (au lieu d'aller directement après cette boucle à "if this in the same sector...").
Ca suggère donc, si mon cerveau n'est pas complètement HS, que le bug est dès le début du script, mais franchement je vois pas ce qui cloche...
Y'a pas grand monde sur le forum ces temps-ci (tout le monde n'est pas en attente de contrat, je sais!), mais par pitié si quelqu'un a une suggestion, allez-y, parce que moi je sèche méchamment...