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ón | Descripció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ón | Descripció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ón | Descripció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.