MathUtil.lua 1.01 KB
-- 初始化
function math.randomInit(seed)
	seed = seed or skynet.timex()
	math.randomseed(tonumber(tostring(seed):reverse():sub(1,6)))
end

-- 随机浮点数
function math.randomFloat(lower, greater)
    return math.min(lower, greater) + math.random()  * math.abs(greater - lower);
end

function math.randomInt(lower, greater)
	return math.random(math.min(lower, greater), math.max(lower, greater))
end

-- 根据权重值从数据集合里面随机出
-- @param dataset	数据集合
-- @param field 	权重域
function math.randWeight(dataset, field)
	if not dataset then return nil end

	field = field or "weight"

	-- 计算权值总和
	local weightSum = 0
	for key, value in pairs(dataset) do
		weightSum = weightSum + tonumber(value[field])
	end

	local randWeight = math.randomFloat(0, weightSum)
	for key, value in pairs(dataset) do
		if tonumber(value[field]) > 0 then
			if randWeight > tonumber(value[field]) then
				randWeight = randWeight - tonumber(value[field])
			else
				return key
			end
		end
	end

	return nil
end