mirror of
https://github.com/sbrl/Minetest-WorldEditAdditions.git
synced 2024-09-12 08:08:30 +02:00
wea.parse.chance: add weight mode
This commit is contained in:
parent
040d7fbfde
commit
81f3a87180
@ -1,12 +1,15 @@
|
|||||||
|
|
||||||
--- Parses a chance value, and returns the 1-in-N value thereof.
|
--- Parses a chance value, and returns the 1-in-N value thereof.
|
||||||
-- @param str string The string to parse.
|
-- @param str string The string to parse.
|
||||||
|
-- @param invert_percent string The operation mode. Valid modes: "1-in-n" (default), "weight". "1-in-n" refers to a 1-in-N chance of something happening (lower numbers mean greater likelihood). "weight", on the other hand, is instead a weighting that something will happen (higher numbers mean a greater likelihood).
|
||||||
-- @returns number|nil The 1-in-N chance if parsing was successful, otherwise nil.
|
-- @returns number|nil The 1-in-N chance if parsing was successful, otherwise nil.
|
||||||
function worldeditadditions.parse.chance(str)
|
function worldeditadditions.parse.chance(str, mode)
|
||||||
|
if not mode then mode = "1-in-n" end
|
||||||
if tonumber(str) ~= nil then return tonumber(str) end
|
if tonumber(str) ~= nil then return tonumber(str) end
|
||||||
if str:sub(#str) == "%" then
|
if str:sub(#str) == "%" then
|
||||||
local result = tonumber(str:sub(1, #str-1))
|
local result = tonumber(str:sub(1, #str-1))
|
||||||
if not result then return nil end
|
if not result then return nil end
|
||||||
|
if mode == "weight" then result = 100 - result end
|
||||||
return 1 / (result / 100) -- Convert percentage to 1-in-N chance
|
return 1 / (result / 100) -- Convert percentage to 1-in-N chance
|
||||||
end
|
end
|
||||||
return nil
|
return nil
|
||||||
|
@ -27,7 +27,7 @@ function worldeditadditions.parse.weighted_nodes(parts, as_list, func_normalise)
|
|||||||
mode = MODE_EITHER
|
mode = MODE_EITHER
|
||||||
elseif mode == MODE_EITHER then
|
elseif mode == MODE_EITHER then
|
||||||
-- print("mode: either");
|
-- print("mode: either");
|
||||||
local chance = tonumber(part)
|
local chance = worldeditadditions.parse.chance(part, "weight")
|
||||||
if not chance then
|
if not chance then
|
||||||
-- print("not a chance, trying a node name")
|
-- print("not a chance, trying a node name")
|
||||||
local node_name
|
local node_name
|
||||||
@ -59,5 +59,7 @@ function worldeditadditions.parse.weighted_nodes(parts, as_list, func_normalise)
|
|||||||
else result[last_node_name] = 1 end
|
else result[last_node_name] = 1 end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
print(worldeditadditions.format.map(result, " "))
|
||||||
|
|
||||||
return true, result
|
return true, result
|
||||||
end
|
end
|
||||||
|
Loading…
Reference in New Issue
Block a user