mirror of
https://github.com/ComfyFactory/ComfyFactorio.git
synced 2025-01-04 00:15:45 +02:00
180 lines
5.6 KiB
Lua
180 lines
5.6 KiB
Lua
--luacheck: ignore
|
|
local Event = require 'utils.event'
|
|
local WD = require 'modules.wave_defense.table'
|
|
local WPT = require 'maps.amap.table'
|
|
local Difficulty = require 'modules.difficulty_vote_by_amount'
|
|
local atry_talbe = require 'maps.amap.enemy_arty'
|
|
local function calc_players()
|
|
local players = game.connected_players
|
|
local check_afk_players = WPT.get('check_afk_players')
|
|
if not check_afk_players then
|
|
return #players
|
|
end
|
|
local total = 0
|
|
for i = 1, #players do
|
|
local player = players[i]
|
|
if player.afk_time < 36000 then
|
|
total = total + 1
|
|
end
|
|
end
|
|
if total <= 0 then
|
|
total = 1
|
|
end
|
|
return total
|
|
end
|
|
|
|
local easy = function()
|
|
local wave_defense_table = WD.get_table()
|
|
local player_count = calc_players()
|
|
|
|
wave_defense_table.max_active_biters = 768 + player_count * 180
|
|
|
|
if wave_defense_table.max_active_biters >= 4000 then
|
|
wave_defense_table.max_active_biters = 4000
|
|
end
|
|
local wave_number = WD.get('wave_number')
|
|
if wave_number >= 1500 then
|
|
wave_number = 1500
|
|
end
|
|
-- threat gain / wave
|
|
local max_threat = 1 + player_count * 0.1
|
|
if max_threat >= 4 then
|
|
max_threat = 4
|
|
end
|
|
|
|
max_threat = max_threat + wave_number * 0.0013
|
|
|
|
WD.set_biter_health_boost(wave_number * 0.002 + 1)
|
|
wave_defense_table.threat_gain_multiplier = max_threat
|
|
|
|
wave_defense_table.wave_interval = 4200 - player_count * 30
|
|
if wave_defense_table.wave_interval < 1800 or wave_defense_table.threat <= 0 then
|
|
wave_defense_table.wave_interval = 1800
|
|
end
|
|
local mintime = 7500 - player_count * 150
|
|
if mintime <= 6000 then
|
|
mintime = 6000
|
|
end
|
|
game.map_settings.enemy_expansion.min_expansion_cooldown = mintime
|
|
-- game.map_settings.enemy_expansion.max_expansion_cooldown = 104000
|
|
end
|
|
local med = function()
|
|
local wave_defense_table = WD.get_table()
|
|
local player_count = calc_players()
|
|
|
|
wave_defense_table.max_active_biters = 768 + player_count * 220
|
|
|
|
if wave_defense_table.max_active_biters >= 4000 then
|
|
wave_defense_table.max_active_biters = 4000
|
|
end
|
|
local wave_number = WD.get('wave_number')
|
|
-- threat gain / wave
|
|
if wave_number >= 1500 then
|
|
wave_number = 1500
|
|
end
|
|
local max_threat = 1 + player_count * 0.1
|
|
if max_threat >= 4 then
|
|
max_threat = 4
|
|
end
|
|
|
|
max_threat = max_threat + wave_number * 0.0013
|
|
WD.set_biter_health_boost(wave_number * 0.002 + 1)
|
|
wave_defense_table.threat_gain_multiplier = max_threat
|
|
|
|
wave_defense_table.wave_interval = 4200 - player_count * 45
|
|
if wave_defense_table.wave_interval < 1800 or wave_defense_table.threat <= 0 then
|
|
wave_defense_table.wave_interval = 1800
|
|
end
|
|
local mintime = 7500 - player_count * 240
|
|
if mintime <= 3600 then
|
|
mintime = 3600
|
|
end
|
|
game.map_settings.enemy_expansion.min_expansion_cooldown = mintime
|
|
-- game.map_settings.enemy_expansion.max_expansion_cooldown = 104000
|
|
end
|
|
local hard = function()
|
|
local wave_defense_table = WD.get_table()
|
|
local player_count = calc_players()
|
|
|
|
wave_defense_table.max_active_biters = 768 + player_count * 280
|
|
|
|
if wave_defense_table.max_active_biters >= 4000 then
|
|
wave_defense_table.max_active_biters = 4000
|
|
end
|
|
|
|
local wave_number = WD.get('wave_number')
|
|
-- threat gain / wave
|
|
if wave_number >= 1500 then
|
|
wave_number = 1500
|
|
end
|
|
local max_threat = 1 + player_count * 0.1
|
|
if max_threat >= 4 then
|
|
max_threat = 4
|
|
end
|
|
|
|
max_threat = max_threat + wave_number * 0.0013
|
|
WD.set_biter_health_boost(wave_number * 0.002 + 1)
|
|
wave_defense_table.threat_gain_multiplier = max_threat
|
|
|
|
wave_defense_table.wave_interval = 3900 - player_count * 60
|
|
if wave_defense_table.wave_interval < 1800 or wave_defense_table.threat <= 0 then
|
|
wave_defense_table.wave_interval = 1800
|
|
end
|
|
local mintime = 7500 - player_count * 300
|
|
if mintime <= 3000 then
|
|
mintime = 3000
|
|
end
|
|
game.map_settings.enemy_expansion.min_expansion_cooldown = mintime
|
|
-- game.map_settings.enemy_expansion.max_expansion_cooldown = 104000
|
|
end
|
|
|
|
local set_diff = function()
|
|
local game_lost = WPT.get('game_lost')
|
|
if game_lost then
|
|
return
|
|
end
|
|
|
|
local diff = Difficulty.get()
|
|
if diff.difficulty_vote_index == 1 then
|
|
easy()
|
|
end
|
|
if diff.difficulty_vote_index == 2 then
|
|
med()
|
|
end
|
|
if diff.difficulty_vote_index == 3 then
|
|
hard()
|
|
end
|
|
|
|
--med()
|
|
local wave_number = WD.get('wave_number')
|
|
local damage_increase = 0
|
|
-- local any=wave_number+150
|
|
-- local k= math.floor(any/1000)
|
|
-- if k <= 1 then
|
|
-- k =1
|
|
-- end
|
|
-- if k >= 5 then
|
|
-- k =5
|
|
-- end
|
|
local k = math.sqrt(diff.difficulty_vote_index)
|
|
if k <= 1 then
|
|
k = 1
|
|
end
|
|
k = math.floor(k)
|
|
damage_increase = wave_number * 0.001 * k
|
|
game.forces.enemy.set_ammo_damage_modifier('artillery-shell', damage_increase)
|
|
game.forces.enemy.set_ammo_damage_modifier('rocket', damage_increase)
|
|
game.forces.enemy.set_ammo_damage_modifier('melee', damage_increase)
|
|
game.forces.enemy.set_ammo_damage_modifier('biological', damage_increase)
|
|
|
|
local table = atry_talbe.get()
|
|
local radius = math.floor(wave_number * 0.15) * k
|
|
table.radius = 350 + radius
|
|
local pace = wave_number * 0.0002 * k + 1
|
|
if pace >= 2 then
|
|
pace = 2
|
|
end
|
|
table.pace = pace
|
|
end
|
|
Event.on_nth_tick(600, set_diff)
|