Voir la version complète : Script questions de débutant
salut
avec les conseils de peroxyde je développe un petit script mais je me heurte a plusieurs problèmes.
-le premier est que je ne sais pas comment exporter mon script. en effet je le développe dans le jeu mais je ne trouve pas de fichier exploitable au nom de mon script dans le dossier du jeu.
-le second est que je ne sais pas comment arrêter mon script. quand j'ai tenté de faire un "return null" (méthode sale apprise en C) le jeu a planté.
pas d'autres questions de base pour l'instant. je retourne potasser le tuto de cyrow.
peroxyde
24/07/2011, 16h10
Je pense qu'il serait intéressant que tu écrives ton script -afin qu'on puisse te guider plus facilement- entre balises [ code ]
001 * Ici tes instructions
002 return null
Le fichier créé Ingame est un fichier XML créé dans le dossier script dans le répertoire de ton jeu.
- le return null n'est pas une erreur. D'ailleurs si tu oublies de le mettre, le jeu le rajoute d'office.
[edit]
Bon je n'ai pas retrouvé mon script "Stock to Docked" but, J'en ai un que je peux te donner pour voir un peu comment jouer avec les commandes.
Il s'agit d'un petit utilitaire qui permet de surveiller les usines PNJ pour avoir les produits au prix que l'on veut (ici au prix moyen). Je te met des commentaires pour mieux comprendre.
Description
Alerte quand un stock d'usine est au prix moyen (simple description, c'est pour toi personne ne la verra)
Arguments
1: Produit , Var/Station and Product , 'Quel Produit de quelle usine?'
(permet lors du lancement du script de choisir une station et son produit. Les deux données sont enregistrées dans le tableau $Produit.
L'argument peut être donné par un autre script)
Source Text
001 depart:
002 $Station = $Produit[1] (je redistribue les variables du tableau pour pouvoir les utiliser avec les commandes qui viennent)
003 $Produit = $Produit[0]
004 $volume = $Station -> get max. store amount of ware $Produit
(je regarde le maximum de produit de ce type que peut contenir cette station)
005 $volume = $volume / 2
006 $Stock = $Station -> get amount of ware $Produit in cargo bay
(Je regarde le nombre actuel de ce produit qu'elle a en soute)
007 while $Stock < [color=lime]$volume
(tant que le nombre de ce produit est inférieur à la moitié de ce qu'elle peut contenir (cad le prix est supérieur au prix moyen) j'attends)
008 @ |= wait 10000 ms (j'attends 10 secondes)
009 |$Stock = $Station -> get amount of ware $Produit in cargo bay
010 |write to player logbook: printf: fmt='Stock:%s; Volume moyen:%s', $Stock, $volume, null, null, null
011 end
012 play sample 924 (petite alarme constituée de 3 bips espacés d'une seconde)
013 @ = wait 1000 ms
014 play sample 924
015 @ = wait 1000 ms
016 play sample 924
017 $Stock = 'La station ' + $Station + 'à son stock à moitié prix!'
(je constitue un message)
018 display subtitle text: text=$Stock duration=30000 ms (j'affiche le message en sous-titre)
019 return null (la surveillance s'arrête ici (il faut relancer le script si on veut de nouveau surveiller))
[edit 2] si tu veux pas te casser la tête pour mettre en couleur t'as un ptit logiciel en ligne (http://sadiablo.seraphin.at/msci/index.php) qui fait ça très bien!
Et pour transférer c'est pas dur tu ajoutes d'un côté, tu supprimes de l'autre.
[THIS] -> add -12 units of Photopiles (en assumant que tu fais tourner le script sur ta station et donc que [THIS]= Station)
$Vaisseau -> add 12 units of Photopiles
(En assumant que tu as fait un test pour vérifier :
- 1: Que ton vaisseau est encore docké
- 2: Que la place qu'il a en soute est suffisante
- 3: que la taille de la marchandise (M,L,XL) entre dans la soute
(y'a des commandes pour connaitre le volume et la taille des produits
voila la version actuel du script (je t'ai piqué le nom). avec ton message j'ai quelques amélioration a faire (notament pour l'arret du script.) je te la livre brut
l'architecture que j'ai choisit c'est un script d'affichage de bouton appel le script"main". j'utiliserais donc deux scripts séparé pour faire marcher mon bazard.
aaaaaaa.stocktodock.perso
0
44
Description
main:
* préparation des donées pour les tests
$environement = $ship -> get environment
$ware.cargoType = get transport class of ware $ware
$cargo.type = $ship -> get max. ware transport class
* test de validité
if $environement != $station OR $ware.cargoType <= $cargo.type
* on quite
end
* fin des test de validité
* boucle de test momentanée/transfert
transfert:
* préparation des tests momentané
$cargo.free = $ship -> get free volume of cargo bay
$station.wareStock = $station -> get amount of ware $ware in cargo bay
$ware.volume = get volume of ware $ware
* fin de préparation
if $cargo.free >= $ware.volume AND $station.wareStock > 0
* transfert
= $ship -> add 1 units of $ware
= $station -> add -1 units of $ware
goto label transfert
* fin de la boucle de transfert
end
= wait 1000 ms
goto label main
return nulledit pour le transfert je me demandais juste si il n'y avais pas un moyen élégant de transférer car ma boucle de transfert peut avoir a tourner jusqu’à 70 000 fois de suite ce qui fait un temps d’exécution non négligeable.(j'ai en tête une idée d'optimisation en transférant tout d'un coup mais je préfère avoir une version plus ou moins fonctionnel avant pour valider l’algorithme)
merci pour ton aide.
ps le script était dans C:\Users\meewan\AppData\Local\VirtualStore\Program Files (x86)\EGOSOFT\X3 Terran Conflict\scripts
peut être parce que je suis sous win7
peroxyde
24/07/2011, 19h03
Bon déjà je voie pourquoi X3 n'aime pas ton script. Il n'y a pas de wait dans ta boucle.
Il faut savoir que les script et autre fonction du jeu sont en "coopératif" (je sais plus le terme exact).
Bref, ils ne s’exécutent que les uns à la suite des autres et ne se passent la mains que quand il y a un wait. (même très court, 10ms suffisent)
Donc si tu ne mets pas de wait dans ta boucle, le script ne laissera jamais la main au reste du jeu, ce qui se traduit visuellement par un freeze.
l'architecture que j'ai choisit c'est un script d'affichage de bouton appel le script"main".
Heu là j'ai pas compris! ^^
pour le transfert je me demandais juste si il n'y avais pas un moyen élégant de transférer car ma boucle de transfert peut avoir a tourner jusqu’à 70 000 fois de suite ce qui fait un temps d’exécution non négligeable.(j'ai en tête une idée d'optimisation en transférant tout d'un coup mais je préfère avoir une version plus ou moins fonctionnel avant pour valider l’algorithme)
Heu oui... Tu peux tout transférer d'un coup ça serait plus élégant:
$Cargo.Libre = $Vaisseau -> get free volume of ware $Produit in cargo bay
$Station.stock = $Station -> get amount of ware $Produit in cargo bay
if $Station.stock <= Cargo.Libre
| $Vaisseau -> add $Station.stock units of $Produit
| $Station.stock = 0 - $StationStock
| $Station -> add $Station.stock units of $Produit
else
| $Vaisseau -> add $Cargo.Libre units of $Produit
| $Cargo.Libre = 0 - $Cargo.Libre
| $Station -> add $Cargo.Libre units of $Produit
end
Par contre je note que tes variable ne sont pas définies (ou alors tu les passeras en arguments, j'imagine). A savoir $ware, $Ship et $Station
aaaaaaatchoum.stocktodock.perso
001 main:
002
003 * préparation des données pour les tests
004 $environement = $ship -> get environment
005 $ware.cargoType = get transport class of ware $ware
006 $cargo.type = $ship -> get max. ware transport class
007
008 * test de validité
009 if $environement != $station OR $ware.cargoType >=$cargo.type (attention petite erreur!)
010 | return null
011 * (On quitte comme ça! Tout simplement)
012 end
013
014 * boucle de test momentanée/transfert
015 transfert:
016 * préparation des tests momentané
017 $cargo.free = $ship -> get free volume of cargo bay
018 $station.wareStock = $station -> get amount of ware $ware in cargo bay
019 $ware.volume = get volume of ware $ware
020
021 if $cargo.free >= $ware.volume AND $station.wareStock > 0
022 * transfert
023 | = $ship -> add 1 units of $ware
024 | = $station -> add -1 units of $ware
025 | = wait 10 ms (évite de freezer le jeu)
026 | goto label transfert
027 end
028 * fin de la boucle de transfert
029
030
031 = wait 1000 ms
032 goto label main
033
034
035 return null
Bon déjà je voie pourquoi X3 n'aime pas ton script. Il n'y a pas de wait dans ta boucle.
Ah, les Wait !
Tout un programme ! :biggreen:
merci. j'ai un autre probleme. je n'arrive pas a créer de bouton.
j'ai un fichier t en UTF-8 du nom de 8874-L033.xml contenant le code suivant(une modification grossière du fichier t de ring of firepour faire des tests)
<?xml version="1.0" encoding="UTF-8" ?>
<language id="33">
<page id="2008" title="Script Object Commands" descr="0">
<t id="1221">528_RING_OF_FIRE</t>
</page>
<page id="2010" title="Commands" descr="">
<t id="1221">Ring de \33RF\33Yir\33Re\33X</t>
</page>
<page id="2011" title="Commands" descr=" ">
<t id="1221">R.o.D.</t>
</page>
<page id="2022" title="Commands" descr="">
<t id="1221">Deploys 15-360 Lasertowers in a perfect circle.\nEnter an illegal value like 0 Lasertowers for full explanation.</t>
</page>
</language>mais ça ne marches pas. dans la liste des commande je trouve toujours la commande ship 21 au lieu de 528_ring_of_fire (celle du vrai script est 529_ring_of_fire car il utilise la commande 529)
ensuite pour répondre a ton post
la modif que tu propose est celle que j'avais en tête
pour le wait je n'avais pas été jusque la dans les tests.
peroxyde
24/07/2011, 19h56
Ah ça c'est déjà plus chaud.
Moi même j'ai un peu de mal (là pour un script de NH j'ai galéré une journée complète...)
il faut bien suivre le tuto de Cycrow...
le problème c'est que j'ai suivis le tuto de cyrow a la lettre. et je ne trouve pas ou est mon erreur.
edit: comment le jeu peut il connaitre le contenu d'un fichier texte si on ne lui dit pas de la charger ?
désolé pour le multi-post mais la je bloque
quand je lance ma commande j'ai un menu ou sélectionner la ressource puis l'IA me dit "ordre accepté" et après rien. même la commande écrire "débug 2" dans le journal ne s’exécute pas.
voila les sources
8874-L033.xml (fichier t)
<?xml version="1.0" encoding="UTF-8" ?>
<language id="33">
<page id="2008" title="Script Object Commands" descr="0">
<t id="527">527_STOCK_TO_DOCK</t>
</page>
<page id="2010" title="Commands" descr="">
<t id="527">stocker les produits sur ce vaisseau</t>
</page>
<page id="2011" title="Commands" descr=" ">
<t id="527">stock</t>
</page>
<page id="2022" title="Commands" descr="">
<t id="527">none</t>
</page>
</language>le setup
setup.stocktodock
0
44
Description
load text: id=8874
set script command upgrade: command=527_STOCK_TO_DOCK upgrade=[TRUE]
global script map: set: key=527_STOCK_TO_DOCK, class=TS, race=Player, script=stocktodock, prio=0
return nullet le fichier de script principal (ware est un argument)
stocktodock
0
44
Description
write to player logbook [THIS]
write to player logbook 'debug 2'
main:
* cette partie n'est lu que lors du lancement du script
write to player logbook $debug
$ware.volume = get volume of ware $ware
$environement = [THIS] -> get environment
$ware.class = get transport class of ware $ware
$cargo.class = [THIS] -> get max. ware transport class
if $environement -> is of class Station
$station.owner = $environement -> get owner race
skip if $station.owner == Player
goto label end
skip if $cargo.class >= $ware.class
goto label end
goto label stockage
end
* boucle de stockage
stockage:
= wait 109 ms
$cargo.free = [THIS] -> get free volume of cargo bay
$station.stock = $environement -> get amount of ware $ware in cargo bay
$stock.volume = $ware.volume * $station.stock
$station = [THIS] -> get environment
skip if $station == $environement
goto label end
if $stock.volume <= $cargo.free
= [THIS] -> add $station.stock units of $ware
$station.stock = -1 * $station.stock
= $station -> add $station.stock units of $ware
else
$station.stock = $cargo.free / $ware.volume
= [THIS] -> add $station.stock units of $ware
$station.stock = -1 * $station.stock
= $station -> add $station.stock units of $ware
end
goto label stockage
end:
return nullvoila encore une fois je vous demande de l'aide:Respect:
ps j'ai entièrement réécris le script de transfert.
edit c'était une erreur de logique dans un test.
il manque un test pour que le script fonctionne bien puis lje le publierais. il reste assez primitif mais il marche. après j'ai d'autres idées a ajouter.
edit 2:
le script est fonctionnel, je le nettoie et le met en ligne ce soir. j'y ajouterais probablement d'autres fonctionnalité cette nuit.
peroxyde
25/07/2011, 16h48
Ma foi, il commence a être parfait ce script!
Deux trois choses:
le goto label stockage dans la partie main est inutile. Une fois sortie du If le script va y aller de lui même.
Sauf si (et oui!) tu as d'autres conditions à rajouter après. Et c'est le cas!
Je vais te laisser trouver par toi même mais avec un petit indice : Que se passe t-il si le script est lancé alors que le vaisseau n'est pas amarré?
Une boucle d'attente de 109ms est inutile, t'as déjà trouvé une usine qui crée un produit tout les 1 dixième de seconde? Tu peux facilement mettre à la minute (60 000ms). Tu garderas un jeu plus fluide.
Le script s'arrête si le vaisseau désarrime. Ok. Mais si le vaisseau est plein? Un petit message au joueur serais sympa. (vaisseau produit et secteur) et le script devrait s'arrêter aussi (inutile de consommer des ressources CPU pour rien)
Est-ce que tu as mis, dans le fichier principal, la commande correspondant à celle que tu as faite (rechercher dans la liste des commandes 527_STOCK_TO_DOCK)
Ma foi, il commence a être parfait ce script!
Deux trois choses:
le goto label stockage dans la partie main est inutile. Une fois sortie du If le script va y aller de lui même.
Sauf si (et oui!) tu as d'autres conditions à rajouter après. Et c'est le cas!
Je vais te laisser trouver par toi même mais avec un petit indice : Que se passe t-il si le script est lancé alors que le vaisseau n'est pas amarré?
c'est le cas en fait il y a deux autres commandes prévu un "remplir la station" et un "échange de marchandises" qui utiliserons stockage
Une boucle d'attente de 109ms est inutile, t'as déjà trouvé une usine qui crée un produit tout les 1 dixième de seconde? Tu peux facilement mettre à la minute (60 000ms). Tu garderas un jeu plus fluide.
c'est pas faux
Le script s'arrête si le vaisseau désarrime. Ok. Mais si le vaisseau est plein? Un petit message au joueur serais sympa. (vaisseau produit et secteur) et le script devrait s'arrêter aussi (inutile de consommer des ressources CPU pour rien)
[si le vaisseau est plein le script ne s’arrête pas et c'est un choix(je vois le vaisseau comme un stockage suplémentaire qui peut etre vider sans bouge)
[quote]
Est-ce que tu as mis, dans le fichier principal, la commande correspondant à celle que tu as faite (rechercher dans la liste des commandes 527_STOCK_TO_DOCK)
oui. par contre j'aimerais rajouter la ressource ($ware) dans l’affichage (comme dans les affichages du MK3) tu sais si c'est possible ?
j'ai du travail ce soir mais je pense que ce sera finit avant demain matin.
ps le code que tu as commenté est incomplet, j'ai ajouter pas mal de commandes pour dire au joueur ce qui se passe.
si le vaisseau est plein le script ne s’arrête pas et c'est un choix(je vois le vaisseau comme un stockage suplémentaire qui peut etre vider sans bouge)
J'ignore quasiment tout du Script Editor, je suis orienté MD, mais si le but de ton script est d'utiliser des vaisseaux comme stockage supplémentaire pour une station, Station Storage Extension (http://forum.egosoft.com/viewtopic.php?t=239414) de Tim-O le fait déjà... :neutral:
Si c'est bien la fonction de ton script, autant que tu saches qu'il y aura de la concurrence, alors à toi de faire mieux que ce qui existe déjà ! :Bien_joué:
peroxyde
25/07/2011, 20h46
c'est le cas en fait il y a deux autres commandes prévu un "remplir la station" et un "échange de marchandises" qui utiliserons stockage
Hooo. C'est bien plus que je ne pensais! Très intéressant!
Cela dit dans tout les cas il doit être arrimé. Or là:
if $environement -> is of class Station
| bla bla
end
La condition ne traite que le fait que le vaisseau est arrimé. S'il ne l'est pas, il saute tout ce paragraphe pour tomber sur le label stockage.
Ce que je voulais dire, c'est que si le vaisseau n'est pas amarré, le script n'as pas de raison de tourner. Donc : Return null (juste avant ton commentaire * boucle stockage)
Et si tu veux qu'il tourne quand même, juste avant ton commentaire : * boucle de stockage, il faut mettre un Wait et un goto main (ainsi dès qu'il se réarrimera à une station contenant ce produit il se mettra automatiquement en mode stockage externe.
oui. par contre j'aimerais rajouter la ressource ($ware) dans l’affichage (comme dans les affichages du MK3) tu sais si c'est possible ?
Heu oui c'est possible, mais je ne me souviens plus la commande. Je sais que je l'ai déjà fais, mais comment...
C'est c0n que j'ai pas beaucoup de temps.
Demain entre deux recherches d'appartement j'essaierais de te dire ça...
[edit au vu du post d'OPR] Mince je savais qu'il existait déjà un script pour stocker à l'extérieur, mais il n'était pas aussi bien que celui là (que je ne connaissait pas)
En tout cas, j'espère que ça ne découragera pas ce nouveau scripteur. (qui a l'air de se ballader vu comment il s'est déjà approprié les commandes...)
et voila comment j'aurais pu gagner 3 jours...merci opr.
tant que j'ai commencé je vais finir ce script.
@peroxyde en fait il y a un "else" mais je l'ai rajouter apres avoir poster cette version du code. la version que tu commente n'est plus du tout a jour. la version actuel ne me semble pas etre bugger (en tout cas pour les failles auquelles j'ai pensé)
peroxyde
25/07/2011, 21h08
tant que j'ai commencé je vais finir ce script.
Il n'y a rien de plus gratifiant que d'avoir fait un travail qui fonctionne (même s'il a moins de fonction qu'un similaire.) Je suis content que t'essaie au moins de le finir.
@peroxyde en fait il y a un "else" mais je l'ai rajouter après avoir poster cette version du code. la version que tu commente n'est plus du tout a jour. la version actuel ne me semble pas etre bugger (en tout cas pour les failles auxquelles j'ai pensé)
Pas de soucis, je ne peux commenter que ce que tu m'as donné... ^^
[edit] je me doutais bien que j'allais pas chercher longtemps. c'est une commande au nom ambigu je trouve:
<RefObj> -> set command: <Object Command>
Ça c'est ce qui permet l'affichage de la commande en cour dans le menu propriété.
Après comment faire passer la variable.. heu ... je sais plus ^^
et voila comment j'aurais pu gagner 3 jours...merci opr.
tant que j'ai commencé je vais finir ce script.
C'était pas pour te décourager ! Je suis ravi que tu continues ton script, j'en aurais fais autant à ta place ! C'est le meilleur moyen d'apprendre, bravo ! :Bien_joué:
j’arrête pour ce soir j'ai envi de jouer un peu a X3
cette version ne contiens que la fonction de stockage mais utilise les slots de commandes 537 et 538 car il contiens la fonction d'alimentation dans le fichier t (pas encore dans le code.)
je pense que c'est la forme définitive de la fonction de stockage.
http://www.megaupload.com/?d=02K3W2EX
peroxyde
26/07/2011, 11h36
Bonjour!
Bien dormi et bien joué? ^^
Bon ton script est fonctionnel. Je ne vais pas tout démolir, ça ne serait ni constructif ni plaisant.
Je ne suis pas un maitre du scripting non plus, je ne suis qu'un initié dirons-nous. (j'ai ma propre idole du scripting... ^^ )
Bref tout ça pour dire que si ton code est bon il pourrait être améliorable. Si tu veux savoir quoi, je te dirais, sinon je laisse.
Un truc qui m'a fait tiqué par contre:
Tu utilises le display subtitle (DS) et le write player logbook (WPL). Les deux n'écrivent pas au même endroit.
A savoir : en ligne 16 tu utilise un WPL alors qu'aux autres lignes de test d'applicabilité du script tu utilises un DS.
C'est pas encore gênant, mais si tu fais comme pour tes lignes 57 à 59 (inclue) ça ne vas pas marcher : une partie du message sera inscrite dans le Log une autre en sous titré...
[edit] Autant pour moi c'est deux messages différents, mais celui du Log ne va pas marcher...
Pour afficher un message avec une variable contenue dedans il faut utiliser la commande:
$msg = sprintf: pageid=8874 textid=6, $station, null, null, null, null
avec
display subtitle text: text=$msg duration=2000 ms (ou write to player logbook $msg)
ou
write to player logbook: printf: pageid=8874 textid=6, $station, null, null, null, null
avec dans ton fichier t
<page id="8874" title="stocktodock" descr="">
<t id="6">Attention le transport docké à %s est plein</t>
</page>
Le %s est remplacé par ta variable.
Comme tu peux remarquer que la commande peux utiliser 5 variables, tu peux donc en mettre 5 dans ton message:
<t id="6">Attention! Le transport %s de stokage de %s docké à %s dans le secteur %s est plein</t>
write to player logbook: printf: pageid=8874 textid=6, [THIS], $Ware, $Station, [SECTOR], null
Ou pour les sous titres:
$msg = sprintf: pageid=8874 textid=6, [THIS], $Ware, $Station, [SECTOR], null
display subtitle text: text=$msg duration=2000 ms
Après, bien le wait! ^^
Au moins le message n'apparaitra que toutes les minutes!
main:
* cette partie n'est lu que lors du lancement du script
$ware.volume = get volume of ware $ware
$environement = [THIS]->get environment
$ware.class = get transport class of ware $ware
$cargo.class = [THIS]->get max. ware transport class
if $environement->is of class {Station}
$station.owner = $environement->get owner race
if not $station.owner == {Joueur}
$speak = read text: page=8874 id=1
display subtitle text: text=$speak duration=2000 ms
goto label end
end
if $cargo.class < $ware.class
$speak = read text: page=8874 id=2
write to player logbook $speak
goto label end
end
$station.ware = $environement->get product ware
$station.ware = array alloc: size=50
$station.ware = $environement->get tradeable ware array from station
$i = 0
while not $i > 50
$station.ware.test = $station.ware[$i]
if $station.ware.test == $ware
$speak = read text: page=8874 id=3
display subtitle text: text=$speak duration=2000 ms
goto label stockage
end
inc $i =
end
if $i > 50
$speak = read text: page=8874 id=4
display subtitle text: text=$speak duration=2000 ms
goto label end
end
else
$speak = read text: page=8874 id=5
display subtitle text: text=$speak duration=2000 ms
goto label end
end
* boucle de stockage
stockage:
= wait 60000 ms
$cargo.free = [THIS]->get free volume of cargo bay
$station.stock = $environement->get amount of ware $ware in cargo bay
$stock.volume = $ware.volume * $station.stock
$station = [THIS]->get environment
skip if $station == $environement
goto label end
if $stock.volume <= $cargo.free
= [THIS]->add $station.stock units of $ware
$station.stock = -1 * $station.stock
= $station->add $station.stock units of $ware
else if $cargo.free < $ware.volume
write to player logbook: printf: pageid=8874 textid=6, $station, 7, null, null, null
$speak = read text: page=8874 id=8
display subtitle text: text=$speak duration=2000 ms
play sample 924
else
$station.stock = $cargo.free / $ware.volume
= [THIS]->add $station.stock units of $ware
$station.stock = -1 * $station.stock
= $station->add $station.stock units of $ware
end
goto label stockage
end:
return null
je répond vite fait (je dois aller bosser) pour le reste je te répondrais mieux ce soir
pour ton maitre ce ne serais pas Azz ?
pour les amélioration dis les moi ça m’intéresse
edit pour l'apparition du message on peut utiliser une variable $flag qui évite de remettre le message a chaque fois et qui dépend de la dernière action. (si le statut du vaisseau a changer alors on transmet le message sinon on ne transmet rien)
peroxyde
26/07/2011, 13h45
pour ton maitre ce ne serais pas Azz ?
Ah... Bien que j'ai aussi regardé ses scripts pour apprendre et que j'ai beaucoup apprécié Azz, celui qui m'a beaucoup aidé (tant par ses script que par ses conseils) C'est Serial Kicked.
Pour les amélioration dis les moi ça m’intéresse
Ok allons-y!
ligne 4 :$environement = [THIS]->get environment
Tu as une constante qui fait déjà ça. C'est pas une amélioration super importante mais c'est bon à savoir : [ENVIRONMENT]
(C'est SK qui me l'as appris, comme quoi...)
[ENVIRONMENT] = station si docké,
[ENVIRONMENT] = [SECTOR] si en vol
ligne 19 et 20:
$station.ware = $environement->get product ware
$station.ware = array alloc: size=50
Inutiles dans ton cas puisque la commande suivante va créer un nouvel array qui va écraser ceux que tu viens de faire (soit dit en passant, la ligne 20 écrase la 19)
Ligne 21 à 37 (la vraie grosse amélioration)
Je l'ai jamais utilisée, mais cette commande (t'as dû passer à côté sans la voir) devrait suffire:
if $station -> trades with ware $ware
Sinon tu as cette commande qui regarde si ce que tu recherches est dans une liste:
if find $ware in array: $station.ware
faire des "goto label end" est pratique quand avant de quitter le script il y a une ou plusieurs commandes à effectuer.
Ici tu peux remplacer tout tes goto par des return null.
Ça gagne visuellement rien en temps machine je te l'accorde, c'est juste plus propre...
merci monsieur peroxyde :tongue:
serial kicked est dans la communauté fr ? je pensais qu'il ne travaillait que sur des scripts anglais(pas que ce soit gênant mais je n'aurais pas eu le reflexe de demander de l'aide a un anglophone)
en gros la plus part de mes préparation pour les test sont inutiles parce que j'avais pas vue la constante [environnement]
pour les goto tu as presque raison sauf que je pense que ma méthode est plus lourde pour le proc (de quelques cycles mais quand même)
j'applique ce soir les modification de tes deux derniers posts. dsl pour hier soir j'avais même pas démarrer mon pc avec X3
peroxyde
27/07/2011, 11h34
Serial Kicked est dans la communauté fr ?
Biensûr! Mais la communauté X étant surtout anglophone (et surtoput l'anglais étant la langue de communication tendant à être internationnale) il bosse plus en anglais!
Voici (pas loins d'ailleurs) le gros cours qu'il m'a donné: - Topic- (http://www.3enfamille.net/vb/showthread.php?1216-Mise-%E0-jours-de-scripts-actifs)
En gros la plus part de mes préparation pour les test sont inutiles parce que j'avais pas vue la constante [environnement]
T'inquiète je suis passé par là aussi!
Bon jeu!
merci.
les modifs sont faites
j'ai bien entamer la rédaction du script inverse (restocker un objet dans la station ou le vendre si la station n'est pas a nous) au travail. je pense le finir demain. je le poste comme un script a part.
le troisième script sera très simple puisqu'il ne fera qu’appeler les deux précédents (on stocke une ressource et on en distribue une autre)
la nouvelle version du setup vérifie aussi que le vaisseau soit docker et le propriétaire de la station pour proposer (ou non) la commande
bref j'ai du travail.
Powered by vBulletin™ Version 4.0.3 Copyright © 2012 vBulletin Solutions, Inc. Tous droits réservés - Version française vbulletin-fr.org