- SukaiPoppuGo
CC lava refuel
Jeu 14 Juin - 15:18
Un moyen pour recharger facilement ses turtle, sans réinventer la roue.
Ce programme tiens à peu de ligne, mais illustre quelques éléments très utile nos programmes.
Comme la condition que j'indique est bêtement "true" (vrai), la boucle va tourner indéfiniment.
Ce qui va venir temporiser, c'est l'appel à la fonction os.pullEvent()
Elle a pour effet de bloquer l'exécution du programme, en attendant qu'un évènement survienne. On peut préciser un type d'évènement particulier, et ici j'ai indiqué "turtle_inventory", ce qui fait que le programme ne reprend que lors d'une interaction avec l'inventaire de la tortue.
C'est à dire que j’attends qu'un seau de lave (ou n'importe quel fuel) soit déposé dans l'inventaire pour poursuivre. NB: Mais l'évènement sera quand même déclenché, du moment que je dépose ou retire n'importe quel item de l'inventaire. (Quoi qu'il en soit, ce sera sans conséquence)
Ensuite, s'il se trouve du combustible dans l'inventaire il s'agit de l'utiliser pour recharger la tortue. Il s'agirait donc de rédiger une fonction mettrait ça en oeuvre, en même temps les tortues sont déjà équipées d'un programme qui gère cela. Donc à moins de vouloir optimiser tout le processus, autant exécuter ce programme là avec les paramètres nécessaires.
C'est tout à fait la fonction shell.run() qui permet d’exécuter une ligne de commande.
D'ordinaire j'utilise le programme refuel avec le paramètre all pour qu'il consomme tout le combustible disponible si nécessaire. Il suffit donc d'indiquer cette commande en paramètre de la fonction shell.run()
Bien souvent lorsqu'on utilise les boucles while (boucles dites infinies), on recommande d'ajouter un délai pour temporiser et ne pas surcharger LUA. (Il faut dire que selon le contenu de ces boucles il est possible qu'elle aillent jusqu'à faire 1000 tours à la seconde...)
Ici ça ne serait pas nécessaire, car c'est os.pullEvent qui temporise. Car il n'y a que peu de chances que ce type d'évènement se produisent en boucle plusieurs fois par tick, sinon assez longtemps pour encombrer LUA.
Néanmoins, j'ai quand même ajouté un délai d'une seconde
Le délai d'une seconde laisse assez de temps pour récupérer le seau sans relancer la boucle. Le délai est aussi assez court pour que la boucle soit prête à refaire un tour, le temps qu'on revienne avec un seau de lave plein.
De plus trouver un lac de lave tiens moins au hasard que de trouver des filons de charbon. Il suffit de creuser devant soi à la couche 12, ou d'aller dans le nether, la ressource est quasiment garantie en quantité nécessaire.
Je pense que ce programme est une bonne entrée en matière pour apprendre à programmer LUA avec ComputerCraft. Déjà parce qu'il est utile en début de partie, il laisse une vaste marge d'améliorations possible, mais aussi qu'il aborde des éléments très utile dans tous les programmes (boucle, évènements, commandes)
Je reviendrait peut-être publier des versions plus sophistiquées, mais si vous pouvez publier les votres n'hésitez pas
Avant propos
Un seau de lave vaut 1000 burn time. C'est la ressource d'énergie vanilla la plus élevée (ref), malgré quelque inconvenants, mais on va tenter de régler ça. En début de partie, lorsque je parviens à crafter mes premières tortues, c'est souvent mon réflexe. Il suffit de trouver un lac de lave, et en moins de deux la tortue est chargée à bloc. Ainsi je réserve mon stock de charbon pour crafter des torches et alimenter mon four.Ce programme tiens à peu de ligne, mais illustre quelques éléments très utile nos programmes.
Le code
(https://pastebin.com/j9VrbZHk)- Code:
print("wait fuel")
while true do
local e = os.pullEvent("turtle_inventory")
shell.run("refuel all")
sleep(1)
end
Installation
- Code:
pastebin get j9VrbZHk fuel
Usage
- Posez la tortue sur la berge d'un lac de lave et munissez vous d'un seau
- Lancez le programme
- Puisez de la lave
- Ouvrez l'inventaire de la tortue
- Déposez le seau de lave, récupérez le seau vide
- Ainsi de suite jusqu'à ce que la turtle soit à pleine charge
- Ctrl+T pour terminer le programme, sinon à l'ancienne : un petit coups de pioche
Le code dans le détail
Il s'agit d'une boucle "while", qui tourne tant que la condition indiquée est vraieComme la condition que j'indique est bêtement "true" (vrai), la boucle va tourner indéfiniment.
- Code:
while true do
--
end
Ce qui va venir temporiser, c'est l'appel à la fonction os.pullEvent()
Elle a pour effet de bloquer l'exécution du programme, en attendant qu'un évènement survienne. On peut préciser un type d'évènement particulier, et ici j'ai indiqué "turtle_inventory", ce qui fait que le programme ne reprend que lors d'une interaction avec l'inventaire de la tortue.
- Code:
local e = os.pullEvent("turtle_inventory")
C'est à dire que j’attends qu'un seau de lave (ou n'importe quel fuel) soit déposé dans l'inventaire pour poursuivre. NB: Mais l'évènement sera quand même déclenché, du moment que je dépose ou retire n'importe quel item de l'inventaire. (Quoi qu'il en soit, ce sera sans conséquence)
Ensuite, s'il se trouve du combustible dans l'inventaire il s'agit de l'utiliser pour recharger la tortue. Il s'agirait donc de rédiger une fonction mettrait ça en oeuvre, en même temps les tortues sont déjà équipées d'un programme qui gère cela. Donc à moins de vouloir optimiser tout le processus, autant exécuter ce programme là avec les paramètres nécessaires.
C'est tout à fait la fonction shell.run() qui permet d’exécuter une ligne de commande.
D'ordinaire j'utilise le programme refuel avec le paramètre all pour qu'il consomme tout le combustible disponible si nécessaire. Il suffit donc d'indiquer cette commande en paramètre de la fonction shell.run()
- Code:
shell.run("refuel all")
Bien souvent lorsqu'on utilise les boucles while (boucles dites infinies), on recommande d'ajouter un délai pour temporiser et ne pas surcharger LUA. (Il faut dire que selon le contenu de ces boucles il est possible qu'elle aillent jusqu'à faire 1000 tours à la seconde...)
Ici ça ne serait pas nécessaire, car c'est os.pullEvent qui temporise. Car il n'y a que peu de chances que ce type d'évènement se produisent en boucle plusieurs fois par tick, sinon assez longtemps pour encombrer LUA.
Néanmoins, j'ai quand même ajouté un délai d'une seconde
- Code:
sleep(1)
Le délai d'une seconde laisse assez de temps pour récupérer le seau sans relancer la boucle. Le délai est aussi assez court pour que la boucle soit prête à refaire un tour, le temps qu'on revienne avec un seau de lave plein.
Conclusion
Ce programme est complètement perfectible, mais déjà bien utile. Recharger à bloc les tortues leur offre une grande autonomie (20000 pas, 100000 pour une tortue avancée)De plus trouver un lac de lave tiens moins au hasard que de trouver des filons de charbon. Il suffit de creuser devant soi à la couche 12, ou d'aller dans le nether, la ressource est quasiment garantie en quantité nécessaire.
Je pense que ce programme est une bonne entrée en matière pour apprendre à programmer LUA avec ComputerCraft. Déjà parce qu'il est utile en début de partie, il laisse une vaste marge d'améliorations possible, mais aussi qu'il aborde des éléments très utile dans tous les programmes (boucle, évènements, commandes)
Je reviendrait peut-être publier des versions plus sophistiquées, mais si vous pouvez publier les votres n'hésitez pas
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum