1
0
mirror of https://github.com/ComfyFactory/ComfyFactorio.git synced 2025-01-10 00:43:27 +02:00
ComfyFactorio/maps/biter_battles_v2/biter_raffle.lua
2020-09-03 05:50:00 +02:00

106 lines
2.7 KiB
Lua

local Public = {}
local math_random = math.random
local math_floor = math.floor
local function get_raffle_table(level, name)
local raffle = {
["small-" .. name] = 1000 - level * 1.75,
["medium-" .. name] = -250 + level * 1.5,
["big-" .. name] = 0,
["behemoth-" .. name] = 0,
}
if level > 500 then
raffle["medium-" .. name] = 500 - (level - 500)
raffle["big-" .. name] = (level - 500) * 2
end
if level > 900 then
raffle["behemoth-" .. name] = (level - 900) * 8
end
for k, v in pairs(raffle) do
if raffle[k] < 0 then raffle[k] = 0 end
end
return raffle
end
local function roll(evolution_factor, name)
local raffle = get_raffle_table(math_floor(evolution_factor * 1000), name)
local max_chance = 0
for k, v in pairs(raffle) do
max_chance = max_chance + v
end
local r = math_random(0, math_floor(max_chance))
local current_chance = 0
for k, v in pairs(raffle) do
current_chance = current_chance + v
if r <= current_chance then return k end
end
end
local function get_biter_name(evolution_factor)
return roll(evolution_factor, "biter")
end
local function get_spitter_name(evolution_factor)
return roll(evolution_factor, "spitter")
end
local function get_worm_raffle_table(level)
local raffle = {
["small-worm-turret"] = 1000 - level * 1.75,
["medium-worm-turret"] = level,
["big-worm-turret"] = 0,
["behemoth-worm-turret"] = 0,
}
if level > 500 then
raffle["medium-worm-turret"] = 500 - (level - 500)
raffle["big-worm-turret"] = (level - 500) * 2
end
if level > 900 then
raffle["behemoth-worm-turret"] = (level - 900) * 3
end
for k, v in pairs(raffle) do
if raffle[k] < 0 then raffle[k] = 0 end
end
return raffle
end
local function get_worm_name(evolution_factor)
local raffle = get_worm_raffle_table(math_floor(evolution_factor * 1000))
local max_chance = 0
for k, v in pairs(raffle) do
max_chance = max_chance + v
end
local r = math_random(0, math_floor(max_chance))
local current_chance = 0
for k, v in pairs(raffle) do
current_chance = current_chance + v
if r <= current_chance then return k end
end
end
local function get_unit_name(evolution_factor)
if math_random(1, 3) == 1 then
return get_spitter_name(evolution_factor)
else
return get_biter_name(evolution_factor)
end
end
local type_functions = {
["spitter"] = get_spitter_name,
["biter"] = get_biter_name,
["mixed"] = get_unit_name,
["worm"] = get_worm_name,
}
function Public.roll(entity_type, evolution_factor)
if not entity_type then return end
if not type_functions[entity_type] then return end
local evo = evolution_factor
if not evo then evo = game.forces.enemy.evolution_factor end
return type_functions[entity_type](evo)
end
return Public