Manual/ Referencia de la API

Random

Aleatorios con semilla: rangos, probabilidades, direcciones, listas.

Números aleatorios para botines, apariciones, daño crítico o partículas. Con Random.seed(n) la secuencia se repite exactamente igual: útil para niveles generados que tienen que salir siempre iguales.

local dano = Random.int(8, 12)              -- 8, 9, 10, 11 o 12
if Random.chance(0.1) then dano = dano * 2 end  -- 10 % de critico
local premio = Random.pick({ "espada", "escudo", "pocion" })
local punto = self.entity.position + Random.insideUnitCircle() * 5   -- en un circulo de 5 m en el suelo

Números

FunciónDescripción
Random.value()Decimal de 0 a 1.
Random.range(min, max)Decimal entre min y max.
Random.int(min, max)Entero entre min y max, los dos incluidos.
Random.chance(probabilidad)true con esa probabilidad (0.25 = 25 %).
Random.sign()-1 o 1.
Random.seed(n)Fija la semilla: la misma semilla da la misma secuencia.

Direcciones, puntos y giros

FunciónDescripción
Random.onUnitSphere()Una dirección al azar (longitud 1).
Random.insideUnitSphere()Un punto al azar dentro de una esfera de radio 1.
Random.insideUnitCircle()Un punto al azar dentro de un círculo de radio 1 en el suelo (y = 0).
Random.rotation()Un Quat al azar (todas las orientaciones igual de probables).

Listas

FunciónDescripción
Random.pick(lista)Un elemento al azar (nil si está vacía).
Random.shuffle(lista)Baraja la lista (la cambia y la devuelve).

Ejemplo: botín con pesos

Cofre.lua

local Cofre = {}

-- Cuanto mas peso, mas probable.
local tabla = {
    { cosa = "monedas", peso = 60 },
    { cosa = "pocion", peso = 30 },
    { cosa = "espada legendaria", peso = 1 },
}

local function sortear()
    local total = 0
    for _, e in ipairs(tabla) do total = total + e.peso end
    local r = Random.range(0, total)
    for _, e in ipairs(tabla) do
        r = r - e.peso
        if r <= 0 then return e.cosa end
    end
    return tabla[#tabla].cosa
end

function Cofre:OnTriggerEnter(otro)
    if otro.tag == "Player" then
        Debug.log("Has encontrado:", sortear())
        self.entity:destroy()
    end
end

return Cofre

¿Algo no queda claro o falta algo? Pregunta en el Discord.