diff --git a/src/main/scala/li/cil/oc/util/LuaStateFactory.scala b/src/main/scala/li/cil/oc/util/LuaStateFactory.scala index aeee6afb6..b82d25895 100644 --- a/src/main/scala/li/cil/oc/util/LuaStateFactory.scala +++ b/src/main/scala/li/cil/oc/util/LuaStateFactory.scala @@ -247,17 +247,18 @@ object LuaStateFactory { // necessarily thread-safe. val random = new Random state.pushScalaFunction(lua => { + val r = random.nextDouble() lua.getTop match { - case 0 => lua.pushNumber(random.nextDouble()) + case 0 => lua.pushNumber(r) case 1 => - val u = lua.checkNumber(1).toInt + val u = lua.checkNumber(1) lua.checkArg(1, 1 <= u, "interval is empty") - lua.pushInteger(1 + random.nextInt(u)) + lua.pushNumber(math.floor(r * u) + 1) case 2 => - val l = lua.checkNumber(1).toInt - val u = lua.checkNumber(2).toInt - lua.checkArg(1, l <= u, "interval is empty") - lua.pushInteger(l + random.nextInt(u - (l - 1))) + val l = lua.checkNumber(1) + val u = lua.checkNumber(2) + lua.checkArg(2, l <= u, "interval is empty") + lua.pushNumber(math.floor(r * (u - l + 1)) + l) case _ => throw new IllegalArgumentException("wrong number of arguments") } 1 @@ -265,7 +266,7 @@ object LuaStateFactory { state.setField(-2, "random") state.pushScalaFunction(lua => { - random.setSeed(lua.checkInteger(1)) + random.setSeed(lua.checkNumber(1).toLong) 0 }) state.setField(-2, "randomseed")