Page 1 of 1
[0.17.41] ItemProductPrototype "amount" and "amount_min" capped at lower limit of 1, should be 0 like "result_count"
Posted: Sun May 19, 2019 12:04 pm
by Deadlock989
Let's say you have a recipe that specifies results like this:
Code: Select all
results = {
{type = "item", name = "steel-rod", amount_min = 0, amount_max = 12},
{type = "item", name = "copper-cable", amount_min = 0, amount_max = 7},
}
From what I understand from the documentation, this means that the result has an equal chance of producing 12 steel rods, 11 steel rods, etc. down to and including 0 steel rods. (0+1+2+3...+12) / 13 = 6, so on average you get 6 steel rods. For the copper cables, the same maths works out at an average of 3.5 copper cables. In both cases, it's an average over time of exactly 50% of the max amount.
What you actually see in the recipe tooltip is this:
- disassembly.png (155.52 KiB) Viewed 4044 times
I think one of two things is happening: either
amount_min = 0 is not being taken into account when calculating the average result and it's reporting the average of 1-12 instead, or there is an
undocumented lower limit of 1 for
amount_min which is being silently set instead. If it's the latter, it's inconsistent with plain ol'
amount, which can be set to 0 just fine.
You can work around this to some extent by applying a probability as well - for example if you want a real spread of 0-12, you can specify
amount_min = 1,
amount_max = 12 and
probability = (
amount_max/
amount_max+1), in this case 12/13ths. You then get the correct expected results in the tooltip. The drawbacks of that are (a) it's a pain, (b) you get very confusing descriptions from other mods (like FNEI) that report on results, and (c) it doesn't work well for more complex recipes where some of the ingredients have a low amount and are expensive to make.
Re: [0.17.41] Results reported wrongly for recipes that specify amount_min = 0
Posted: Sun May 19, 2019 12:16 pm
by Bilka
Deadlock989 wrote: ↑Sun May 19, 2019 12:04 pm
or there is an undocumented lower limit of 1 for amount_min which is being silently set instead. If it's the latter, it's inconsistent with plain ol' amount, which can be set to 0 just fine.
Indeed:
Code: Select all
this->countMin = Math::max(uint16_t(1), this->countMin);
this->countMax = Math::max(this->countMax, this->countMin);
Re: [0.17.41] Results reported wrongly for recipes that specify amount_min = 0
Posted: Sun May 19, 2019 12:17 pm
by Deadlock989
Thought so. Is there any reason it can't be 0? amount can be 0.
Edited thread title to better describe the problem.
Re: [0.17.41] Results reported wrongly for recipes that specify amount_min = 0
Posted: Sun May 19, 2019 12:24 pm
by posila
Deadlock989 wrote: ↑Sun May 19, 2019 12:17 pm
Thought so. Is there any reason it can't be 0?
amount can be 0.
I don't know if there is any reason for it, but amount can't be 0. It'll be set to 1 by the same code.
Re: [0.17.41] Results reported wrongly for recipes that specify amount_min = 0
Posted: Sun May 19, 2019 12:26 pm
by Deadlock989
posila wrote: ↑Sun May 19, 2019 12:24 pm
Deadlock989 wrote: ↑Sun May 19, 2019 12:17 pm
Thought so. Is there any reason it can't be 0?
amount can be 0.
I don't know if there is any reason for it, but amount can't be 0. It'll be set to 1 by the same code.
Then why does
this mod work just fine, and also another mod I have in development which has "incinerator" recipes that produce 0 items, easy as you like?
Code: Select all
for _,item in pairs(data.raw.item) do
if item.fuel_value and item.fuel_category == "chemical" then
local days = read_fuel_value(item.fuel_value)/4000000
if days > 0 then
local result = item.burnt_result or "deadlock-lamp-emptiness"
local result_count = item.burnt_result and 1 or 0
data:extend({{
name = "deadlock-lamp-burning-"..item.name,
type = "recipe",
category = "deadlock-lamp-burning",
result = result,
result_count = result_count,
emissions_multiplier = item.fuel_emissions_multiplier,
ingredients = {{item.name,1}},
hidden = true,
enabled = true,
hide_from_stats = true,
allow_decomposition = false,
allow_as_intermediate = false,
allow_intermediates = false,
energy_required = days * day,
}})
log("Created lamp fuel for "..item.name.." with burn time of "..days.." days")
else
log("Skipped creating lamp fuel for "..item.name..", couldn't read a sane fuel value.")
end
end
end
Re: [0.17.41] ItemProductPrototype "amount_min" is silently being capped at a lower limit of 1, should be 0 like "amount
Posted: Sun May 19, 2019 12:29 pm
by Bilka
Deadlock989 wrote: ↑Sun May 19, 2019 12:26 pm
Then why does this mod work just fine, and also another mod I have in development which has "incinerator" recipes that produce 0 items, easy as you like?
result_count isn't capped, amount and amount_min is capped (for items). Interestingly, 0 fluid recipes are *not* silently changed.
Re: [0.17.41] ItemProductPrototype "amount_min" is silently being capped at a lower limit of 1, should be 0 like "amount
Posted: Sun May 19, 2019 12:33 pm
by Deadlock989
Bilka wrote: ↑Sun May 19, 2019 12:29 pm
Deadlock989 wrote: ↑Sun May 19, 2019 12:26 pm
Then why does this mod work just fine, and also another mod I have in development which has "incinerator" recipes that produce 0 items, easy as you like?
result_count isn't capped, amount and amount_min is capped (for items). Interestingly, 0 fluid recipes are *not* silently changed.
So result_count is not capped but amount is capped? That's ... odd.
If result_count = 0 works as expected, then amount = 0, amount_min = 0 should follow that behaviour, no?
Re: [0.17.41] ItemProductPrototype "amount" and "amount_min" capped at lower limit of 1, should be 0 like "result_count"
Posted: Sun May 19, 2019 11:32 pm
by Rseding91
The values where set to always be > 0 due to a bug wayy back related to mining drills producing infinite items. I don't think it needs to exist these days and instead the original issue should have been fixed a different way (have the mining drill just not produce anything if it gets 0 items from some ore).
Re: [0.17.41] ItemProductPrototype "amount" and "amount_min" capped at lower limit of 1, should be 0 like "result_count"
Posted: Mon May 20, 2019 10:43 am
by Deadlock989
Great, thanks very much.
Re: [0.17.41] ItemProductPrototype "amount" and "amount_min" capped at lower limit of 1, should be 0 like "result_count"
Posted: Wed May 22, 2019 1:31 pm
by Deadlock989
Tested this in .42, works much better now, thanks for doing this.
@Bilka - you'll need to tweak your updated docs to reflect the change.
Re: [0.17.41] ItemProductPrototype "amount" and "amount_min" capped at lower limit of 1, should be 0 like "result_count"
Posted: Wed May 22, 2019 1:39 pm
by Bilka
Deadlock989 wrote: ↑Wed May 22, 2019 1:31 pm
@Bilka - you'll need to tweak your updated docs to reflect the change.
Thanks for the reminder, I fixed the doc and added that fluid amounts now may not be < 0.
Re: [0.17.41] ItemProductPrototype "amount" and "amount_min" capped at lower limit of 1, should be 0 like "result_count"
Posted: Wed May 22, 2019 4:37 pm
by Deadlock989
Bilka wrote: ↑Wed May 22, 2019 1:39 pmThanks for the reminder, I fixed the doc and added that fluid amounts now may not be < 0.
Cheers