01 October 2018 Tagged: eulorac++

Build 34

Bundle bot debuts in this release.

Feedback is welcome, please use #eulora.

Bundling

First I took the existing bundle code and added it to foxybot. But evidently things have changed enough that something broke. It compiles but doesn’t succeed when you run it.

Well, I had an idea about how I wanted it to allow exact specification of ingredients and how I wanted it to use my two-table setup from craft bot so as to completely avoid needing to look in inventory. So I threw out the existing code and modeled bundle bot after craft bot. And also craft bot is fresh in my mind.

Usage

The command to use is:

/bot bundle nTimes m/M/i

m = use minimum quantity for all ingredients

M = use maximum quantity for all ingredients

i = infer the ingredient quantities

Example:

/bot bundle 2000 M

The min and max work exactly how you would expect if you have used foxybot for mining or crafting. Infer is something new that is intended to also do exactly what you’d expect given the name, but in any case is described below.

Requirements

Bundle bot has similar requirements to craft bot, but with some important differences.

  • You must have a bp equipped.

  • You must have an empty work container on the ground within reach and it must not be the type named in your equipped bp.

  • In addition to the above container, you must have a craft-table on the ground within reach holding your bundle ingredients.

  • The craft-table holding your ingredients must have an open slot.

The work container must not be the one named in the bp so that the actual crafting can never take place mistakenly, since bundle bot only makes the bundles. Once each bundle is made, it is stored back in the storage table. This is what the required empty slot in the storage table will be used for.

Note that bundle bot does not look at quality and does not mix bundles of the current run into existing bundles or even those of an immediately prior run. At each run, it will put all the bundles into the first empty slot identified at the start of the run.

Also there is no interaction with the storage system and therefore no need to be near an NPC. You can make bundles out in the field with a single craft-table and use an exploration marker as the work container. This works provided the above requirements are met, i.e. the marker is empty, within reach and is not of the type specified in the bp.

How It Works

When in min or max mode, the moving of ingredients to the work container proceeds exactly as with mining and crafting. The bot looks for a stack of each ingredient in turn, from top to bottom, whose stack size is at least the size needed for the recipe. In this case, as with craft bot, it is the storage table that is searched for ingredients.

As such, when in min or max mode, you can have multiple stacks of the same or different quality for each ingredient and you don’t necessarily have to compute the exact number bundles to make. If you use an arbitrarily large number for nTimes , the bot will just quit when materials run out.

Infer mode works differently. It is meant to address the desire to specify exact quantities per ingredient since using the max for everything can be wasteful. When running in infer mode, bundle bot takes a moment at the beginning of the run to examine each ingredient in the recipe and compare it to the stack size on-hand to compute how many to use to to get the number of bundles you requested.

For example if the bp calls for 3 to 5 waters and 4 to 11 numina and if you typed in:

/bot bundle 1000 i

If you have 3000 waters and 9000 numina in your storage table, then the bot will infer that you want to use 3 water and 9 numina per bundle.

Specifically, it divides stackCount by nTimes using integer division to compute the quantity. The fact that it uses integer division with no decimal means that in the above example, bundle bot will infer the same 3 and 9 even if you had stack sizes 3999 & 9999.

If the quantity inferred for any ingredient is larger than the max allowed then bundle bot will use the max instead. This is meant as a convenience so that if you know you will use the max for an ingredient, you can move a large stack to your table without having to compute the exact number.

If, on the other hand, the quantity inferred is less than the minimum, the bot will abort before starting (only in infer mode), giving details of what it computed and what the minimum is.

Another difference with infer mode is that the bot only looks at the first slot (searching top to bottom) that contains each ingredient. While max and min will use all available stacks in order, again, infer only uses the first. This is primarily to keep the calculations simple. It also makes it possible to have large stacks at the bottom of your table and for any ingredient you want to limit to below max, move some specific count to a slot above and then run bundle bot.

Report

Bundle bot works quite quickly and could make many bundles before you have a chance to realize any mistake. For this reason, at the beginning of every run bundle bot prints a report of what it will make and how many of each ingredient it will use. It then waits for 15 seconds before beginning the run. This should give you enough time to type in /bot stop if the bot is about to do something that is not what you want.

Warnings

  • This has been tested a low number of times, using recipes of a single ingredient that allow a quantity of between 1 and 2, because that’s all I’m able to do currently.

  • Build 31 is still recommended for bot exploring.

Diana Coman - 2018-10-02 07:01:57

"The craft-table holding your ingredients must have an open slot." → what is an open slot?

Mocky - 2018-10-02 15:42:06

The table can’t be full. It needs at least one open space for the new bundles to be placed.

Diana Coman - 2018-10-03 08:55:47

Ah, that’s an …​empty slot! Although I can see the appeal of the vast open slots of euloran tables :P

Mocky - 2018-10-04 02:03:02

Yes, empty slot. That does sound better.


Add a Comment