Fix negative offsets not being supported by container[]
[oweals/minetest.git] / builtin / common / misc_helpers.lua
index 23b00eafe42437125fe5e7b35a06d20a11c230f8..25632b4ca21754aa6ff805323c8e76d6e8b6a0ce 100644 (file)
@@ -166,9 +166,9 @@ end
 --------------------------------------------------------------------------------
 function string.split(str, delim, include_empty, max_splits, sep_is_pattern)
        delim = delim or ","
-       max_splits = max_splits or -1
+       max_splits = max_splits or -2
        local items = {}
-       local pos, len, seplen = 1, #str, #delim
+       local pos, len = 1, #str
        local plain = not sep_is_pattern
        max_splits = max_splits + 1
        repeat
@@ -243,6 +243,20 @@ function math.sign(x, tolerance)
        return 0
 end
 
+--------------------------------------------------------------------------------
+function math.factorial(x)
+       assert(x % 1 == 0 and x >= 0, "factorial expects a non-negative integer")
+       if x >= 171 then
+               -- 171! is greater than the biggest double, no need to calculate
+               return math.huge
+       end
+       local v = 1
+       for k = 2, x do
+               v = v * k
+       end
+       return v
+end
+
 --------------------------------------------------------------------------------
 function get_last_folder(text,count)
        local parts = text:split(DIR_DELIM)
@@ -382,7 +396,7 @@ if INIT == "game" then
                        param2 = dirs1[fdir + 1]
                elseif isceiling then
                        if orient_flags.force_facedir then
-                               cparam2 = 20
+                               param2 = 20
                        else
                                param2 = dirs2[fdir + 1]
                        end
@@ -495,7 +509,7 @@ function core.string_to_pos(value)
                p.z = tonumber(p.z)
                return p
        end
-       local p = {}
+       p = {}
        p.x, p.y, p.z = string.match(value, "^%( *([%d.-]+)[, ] *([%d.-]+)[, ] *([%d.-]+) *%)$")
        if p.x and p.y and p.z then
                p.x = tonumber(p.x)