Partagez
Aller en bas

CC lava refuel

le Jeu 14 Juin - 15:18
Un moyen pour recharger facilement ses turtle, sans réinventer la roue.

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 vraie
Comme 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)
Car fatalement après la recharge, récupérer le seau vide re-déclencherait l'évènement. Le programme refuel serait exécute pour rien, et réinscrirait à l'écran une ligne de texte indiquant le niveau de fuel. (le même qu'à la ligne précédente) C'est parfaitement inutile.
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 Wink
Revenir en haut
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum