You've already forked ComfyFactorio
mirror of
https://github.com/ComfyFactory/ComfyFactorio.git
synced 2025-12-28 00:13:51 +02:00
191 lines
6.0 KiB
Lua
191 lines
6.0 KiB
Lua
local Public = require 'modules.wave_defense.table'
|
|
local Task = require 'utils.task_token'
|
|
local round = math.round
|
|
|
|
function Public.wave_defense_roll_biter_name()
|
|
local biter_raffle = Public.get('biter_raffle') --[[@as table]]
|
|
local max_chance = 0
|
|
for _, v in pairs(biter_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(biter_raffle) do
|
|
current_chance = current_chance + v
|
|
if r <= current_chance then
|
|
return k
|
|
end
|
|
end
|
|
end
|
|
|
|
function Public.wave_defense_roll_boss_name()
|
|
local boss_raffle = Public.get('boss_raffle') --[[@as table]]
|
|
local max_chance = 0
|
|
for _, v in pairs(boss_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(boss_raffle) do
|
|
current_chance = current_chance + v
|
|
if r <= current_chance then
|
|
return k
|
|
end
|
|
end
|
|
end
|
|
|
|
function Public.wave_defense_roll_spitter_name()
|
|
local spitter_raffle = Public.get('spitter_raffle') --[[@as table]]
|
|
local max_chance = 0
|
|
for _, v in pairs(spitter_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(spitter_raffle) do
|
|
current_chance = current_chance + v
|
|
if r <= current_chance then
|
|
return k
|
|
end
|
|
end
|
|
end
|
|
|
|
function Public.wave_defense_set_unit_raffle(level)
|
|
local unit_settings = Public.get('unit_settings') --[[@as table]]
|
|
if unit_settings.custom_unit_raffle then
|
|
local callback = Task.get(unit_settings.custom_unit_raffle)
|
|
callback({ level = level })
|
|
else
|
|
Public.set(
|
|
'biter_raffle',
|
|
{
|
|
['small-biter'] = round(1000 - level * 1.75, 6),
|
|
['medium-biter'] = round(level, 6),
|
|
['big-biter'] = 0,
|
|
['behemoth-biter'] = 0
|
|
}
|
|
)
|
|
|
|
Public.set(
|
|
'spitter_raffle',
|
|
{
|
|
['small-spitter'] = round(1000 - level * 1.75, 6),
|
|
['medium-spitter'] = round(level, 6),
|
|
['big-spitter'] = 0,
|
|
['behemoth-spitter'] = 0
|
|
}
|
|
)
|
|
|
|
Public.set(
|
|
'boss_raffle',
|
|
{
|
|
['behemoth-biter'] = round(1000 - level * 1.75, 6),
|
|
['behemoth-spitter'] = round(level, 6),
|
|
}
|
|
)
|
|
|
|
local biter_raffle = Public.get('biter_raffle') --[[@as table]]
|
|
local spitter_raffle = Public.get('spitter_raffle') --[[@as table]]
|
|
local boss_raffle = Public.get('boss_raffle') --[[@as table]]
|
|
if level > 500 then
|
|
biter_raffle['medium-biter'] = round(500 - (level - 500), 6)
|
|
spitter_raffle['medium-spitter'] = round(500 - (level - 500), 6)
|
|
biter_raffle['big-biter'] = round((level - 500) * 2, 6)
|
|
spitter_raffle['big-spitter'] = round((level - 500) * 2, 6)
|
|
boss_raffle['behemoth-biter'] = round((level - 500) * 2, 6)
|
|
boss_raffle['behemoth-spitter'] = round((level - 500) * 2, 6)
|
|
end
|
|
if level > 800 then
|
|
biter_raffle['behemoth-biter'] = round((level - 800) * 2.75, 6)
|
|
spitter_raffle['behemoth-spitter'] = round((level - 800) * 2.75, 6)
|
|
boss_raffle['behemoth-biter'] = round((level - 800) * 2.75, 6)
|
|
boss_raffle['behemoth-spitter'] = round((level - 800) * 2.75, 6)
|
|
end
|
|
for k, _ in pairs(biter_raffle) do
|
|
if biter_raffle[k] < 0 then
|
|
biter_raffle[k] = 0
|
|
end
|
|
end
|
|
for k, _ in pairs(spitter_raffle) do
|
|
if spitter_raffle[k] < 0 then
|
|
spitter_raffle[k] = 0
|
|
end
|
|
end
|
|
for k, _ in pairs(boss_raffle) do
|
|
if boss_raffle[k] < 0 then
|
|
boss_raffle[k] = 0
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
function Public.wave_defense_roll_worm_name(exclude)
|
|
local worm_raffle = Public.get('worm_raffle') --[[@as table]]
|
|
|
|
if exclude then
|
|
local copied_raffle = {}
|
|
for k, v in pairs(worm_raffle) do
|
|
if not string.find(k, exclude, 1, true) then
|
|
copied_raffle[k] = v
|
|
end
|
|
end
|
|
if next(copied_raffle) then
|
|
worm_raffle = copied_raffle
|
|
end
|
|
end
|
|
|
|
|
|
local max_chance = 0
|
|
for _, v in pairs(worm_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(worm_raffle) do
|
|
current_chance = current_chance + v
|
|
if r <= current_chance then
|
|
return k
|
|
end
|
|
end
|
|
end
|
|
|
|
function Public.wave_defense_set_worm_raffle(level)
|
|
local unit_settings = Public.get('unit_settings') --[[@as table]]
|
|
if unit_settings.custom_worm_raffle then
|
|
local callback = Task.get(unit_settings.custom_worm_raffle)
|
|
callback({ level = level })
|
|
else
|
|
Public.set(
|
|
'worm_raffle',
|
|
{
|
|
['small-worm-turret'] = round(1000 - level * 1.75, 6),
|
|
['medium-worm-turret'] = round(level, 6),
|
|
['big-worm-turret'] = 0,
|
|
['behemoth-worm-turret'] = 0
|
|
}
|
|
)
|
|
local worm_raffle = Public.get('worm_raffle') --[[@as table]]
|
|
|
|
if level > 500 then
|
|
worm_raffle['medium-worm-turret'] = round(500 - (level - 500), 6)
|
|
worm_raffle['big-worm-turret'] = round((level - 500) * 2, 6)
|
|
end
|
|
if level > 800 then
|
|
worm_raffle['behemoth-worm-turret'] = round((level - 800) * 3, 6)
|
|
end
|
|
for k, _ in pairs(worm_raffle) do
|
|
if worm_raffle[k] < 0 then
|
|
worm_raffle[k] = 0
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
function Public.wave_defense_print_chances(tbl)
|
|
for k, v in pairs(tbl) do
|
|
game.print(k .. ' chance = ' .. v)
|
|
end
|
|
end
|
|
|
|
return Public
|