mirror of
https://github.com/ComfyFactory/ComfyFactorio.git
synced 2025-01-26 03:52:22 +02:00
913d42d6d8
added tooltip for current biter health and damage bonus moved science gui button, to prevent cut off threat values for spectators reverted to old biter health boost method spawners and worms gain health boost too reduced trees in spawn area increased tree generation randomness overall bigger biter area, less worms border to biter lands tweaked biter area starts at ~y512 side area worm turrets start to appear at the same distance as the biter area starts chunks that are discovered north are mirrored to south as well biters will try to attack from different angles removed some console spam
212 lines
9.6 KiB
Lua
212 lines
9.6 KiB
Lua
local bb_config = require "maps.biter_battles_v2.config"
|
|
local Server = require 'utils.server'
|
|
|
|
local tables = require "maps.biter_battles_v2.tables"
|
|
local food_values = tables.food_values
|
|
local force_translation = tables.force_translation
|
|
local enemy_team_of = tables.enemy_team_of
|
|
|
|
local minimum_modifier = 125
|
|
local maximum_modifier = 250
|
|
local player_amount_for_maximum_threat_gain = 20
|
|
|
|
function get_instant_threat_player_count_modifier()
|
|
local current_player_count = #game.forces.north.connected_players + #game.forces.south.connected_players
|
|
local gain_per_player = (maximum_modifier - minimum_modifier) / player_amount_for_maximum_threat_gain
|
|
local m = minimum_modifier + gain_per_player * current_player_count
|
|
if m > maximum_modifier then m = maximum_modifier end
|
|
return m
|
|
end
|
|
|
|
local function set_biter_endgame_modifiers(force)
|
|
if force.evolution_factor ~= 1 then return end
|
|
local damage_mod = math.round((global.bb_evolution[force.name] - 1) * 0.5, 3)
|
|
local health_factor = math.round((global.bb_evolution[force.name] - 1) * 3.5, 3) + 1
|
|
|
|
force.set_ammo_damage_modifier("melee", damage_mod)
|
|
force.set_ammo_damage_modifier("biological", damage_mod)
|
|
force.set_ammo_damage_modifier("artillery-shell", damage_mod)
|
|
force.set_ammo_damage_modifier("flamethrower", damage_mod)
|
|
force.set_ammo_damage_modifier("laser-turret", damage_mod)
|
|
|
|
global.biter_health_boost_forces[force.index] = health_factor
|
|
end
|
|
|
|
local function get_enemy_team_of(team)
|
|
if global.training_mode then
|
|
return team
|
|
else
|
|
return enemy_team_of[team]
|
|
end
|
|
end
|
|
|
|
local function print_feeding_msg(player, food, flask_amount)
|
|
if not get_enemy_team_of(player.force.name) then return end
|
|
|
|
local n = bb_config.north_side_team_name
|
|
local s = bb_config.south_side_team_name
|
|
if global.tm_custom_name["north"] then n = global.tm_custom_name["north"] end
|
|
if global.tm_custom_name["south"] then s = global.tm_custom_name["south"] end
|
|
local team_strings = {
|
|
["north"] = table.concat({"[color=120, 120, 255]", n, "'s[/color]"}),
|
|
["south"] = table.concat({"[color=255, 65, 65]", s, "'s[/color]"})
|
|
}
|
|
|
|
local colored_player_name = table.concat({"[color=", player.color.r * 0.6 + 0.35, ",", player.color.g * 0.6 + 0.35, ",", player.color.b * 0.6 + 0.35, "]", player.name, "[/color]"})
|
|
local formatted_food = table.concat({"[color=", food_values[food].color, "]", food_values[food].name, " juice[/color]", "[img=item/", food, "]"})
|
|
local formatted_amount = table.concat({"[font=heading-1][color=255,255,255]" .. flask_amount .. "[/color][/font]"})
|
|
|
|
if flask_amount >= 20 then
|
|
local enemy = get_enemy_team_of(player.force.name)
|
|
game.print(table.concat({colored_player_name, " fed ", formatted_amount, " flasks of ", formatted_food, " to team ", team_strings[enemy], " biters!"}), {r = 0.9, g = 0.9, b = 0.9})
|
|
Server.to_discord_bold(table.concat({player.name, " fed ", flask_amount, " flasks of ", food_values[food].name, " to team ", enemy, " biters!"}))
|
|
else
|
|
local target_team_text = "the enemy"
|
|
if global.training_mode then
|
|
target_team_text = "your own"
|
|
end
|
|
if flask_amount == 1 then
|
|
player.print("You fed one flask of " .. formatted_food .. " to " .. target_team_text .. " team's biters.", {r = 0.98, g = 0.66, b = 0.22})
|
|
else
|
|
player.print("You fed " .. formatted_amount .. " flasks of " .. formatted_food .. " to " .. target_team_text .. " team's biters.", {r = 0.98, g = 0.66, b = 0.22})
|
|
end
|
|
end
|
|
end
|
|
|
|
local function add_stats(player, food, flask_amount,biter_force_name,evo_before_science_feed,threat_before_science_feed)
|
|
local colored_player_name = table.concat({"[color=", player.color.r * 0.6 + 0.35, ",", player.color.g * 0.6 + 0.35, ",", player.color.b * 0.6 + 0.35, "]", player.name, "[/color]"})
|
|
local formatted_food = table.concat({"[color=", food_values[food].color, "][/color]", "[img=item/", food, "]"})
|
|
local formatted_amount = table.concat({"[font=heading-1][color=255,255,255]" .. flask_amount .. "[/color][/font]"})
|
|
local n = bb_config.north_side_team_name
|
|
local s = bb_config.south_side_team_name
|
|
if global.tm_custom_name["north"] then n = global.tm_custom_name["north"] end
|
|
if global.tm_custom_name["south"] then s = global.tm_custom_name["south"] end
|
|
local team_strings = {
|
|
["north"] = table.concat({"[color=120, 120, 255]", n, "[/color]"}),
|
|
["south"] = table.concat({"[color=255, 65, 65]", s, "[/color]"})
|
|
}
|
|
if flask_amount > 1 then
|
|
local feed_time = math.round(game.tick,0)
|
|
local feed_time_mins = math.round(game.tick / (60*60),0)
|
|
local minute_unit = ""
|
|
if feed_time_mins <= 1 then
|
|
minute_unit = "min"
|
|
else
|
|
minute_unit = "mins"
|
|
end
|
|
|
|
local shown_feed_time_hours = ""
|
|
local shown_feed_time_mins = ""
|
|
shown_feed_time_mins = feed_time_mins .. minute_unit
|
|
local formatted_feed_time = shown_feed_time_hours .. shown_feed_time_mins
|
|
evo_before_science_feed = math.round(evo_before_science_feed*100,1)
|
|
threat_before_science_feed = math.round(threat_before_science_feed,0)
|
|
local formatted_evo_after_feed = math.round(global.bb_evolution[biter_force_name]*100,1)
|
|
local formatted_threat_after_feed = math.round(global.bb_threat[biter_force_name],0)
|
|
local evo_jump = table.concat({evo_before_science_feed .. " to " .. formatted_evo_after_feed})
|
|
local threat_jump = table.concat({threat_before_science_feed .. " to ".. formatted_threat_after_feed})
|
|
local evo_jump_difference = math.round(formatted_evo_after_feed - evo_before_science_feed,1)
|
|
local threat_jump_difference = math.round(formatted_threat_after_feed - threat_before_science_feed,0)
|
|
local line_log_stats_to_add = table.concat({ formatted_amount .. " " .. formatted_food .. " by " .. colored_player_name .. " to " })
|
|
local team_name_fed_by_science = get_enemy_team_of(player.force.name)
|
|
|
|
if global.science_logs_total_north == nil then
|
|
global.science_logs_total_north = { 0 }
|
|
global.science_logs_total_south = { 0 }
|
|
for a = 1, 7 do
|
|
table.insert(global.science_logs_total_north, 0)
|
|
table.insert(global.science_logs_total_south, 0)
|
|
end
|
|
end
|
|
|
|
local total_science_of_player_force = nil
|
|
if player.force.name == "north" then
|
|
total_science_of_player_force = global.science_logs_total_north
|
|
else
|
|
total_science_of_player_force = global.science_logs_total_south
|
|
end
|
|
|
|
local indexScience = tables.food_long_to_short[food].indexScience
|
|
total_science_of_player_force[indexScience] = total_science_of_player_force[indexScience] + flask_amount
|
|
|
|
if global.science_logs_text then
|
|
table.insert(global.science_logs_date,1, formatted_feed_time)
|
|
table.insert(global.science_logs_text,1, line_log_stats_to_add)
|
|
table.insert(global.science_logs_evo_jump,1, evo_jump)
|
|
table.insert(global.science_logs_evo_jump_difference,1, evo_jump_difference)
|
|
table.insert(global.science_logs_threat,1, threat_jump)
|
|
table.insert(global.science_logs_threat_jump_difference,1, threat_jump_difference)
|
|
table.insert(global.science_logs_fed_team,1, team_name_fed_by_science)
|
|
table.insert(global.science_logs_food_name,1, food)
|
|
else
|
|
global.science_logs_date = { formatted_feed_time }
|
|
global.science_logs_text = { line_log_stats_to_add }
|
|
global.science_logs_evo_jump = { evo_jump }
|
|
global.science_logs_evo_jump_difference = { evo_jump_difference }
|
|
global.science_logs_threat = { threat_jump }
|
|
global.science_logs_threat_jump_difference = { threat_jump_difference }
|
|
global.science_logs_fed_team = { team_name_fed_by_science }
|
|
global.science_logs_food_name = { food }
|
|
end
|
|
end
|
|
end
|
|
|
|
function set_evo_and_threat(flask_amount, food, biter_force_name)
|
|
local decimals = 9
|
|
local math_round = math.round
|
|
|
|
local instant_threat_player_count_modifier = get_instant_threat_player_count_modifier()
|
|
|
|
local food_value = food_values[food].value * global.difficulty_vote_value
|
|
|
|
for a = 1, flask_amount, 1 do
|
|
---SET EVOLUTION
|
|
local e2 = (game.forces[biter_force_name].evolution_factor * 100) + 1
|
|
local diminishing_modifier = (1 / (10 ^ (e2 * 0.017))) / (e2 * 0.5)
|
|
local evo_gain = (food_value * diminishing_modifier)
|
|
global.bb_evolution[biter_force_name] = global.bb_evolution[biter_force_name] + evo_gain
|
|
global.bb_evolution[biter_force_name] = math_round(global.bb_evolution[biter_force_name], decimals)
|
|
if global.bb_evolution[biter_force_name] <= 1 then
|
|
game.forces[biter_force_name].evolution_factor = global.bb_evolution[biter_force_name]
|
|
else
|
|
game.forces[biter_force_name].evolution_factor = 1
|
|
end
|
|
|
|
--ADD INSTANT THREAT
|
|
local diminishing_modifier = 1 / (0.2 + (e2 * 0.018))
|
|
global.bb_threat[biter_force_name] = global.bb_threat[biter_force_name] + (food_value * instant_threat_player_count_modifier * diminishing_modifier)
|
|
global.bb_threat[biter_force_name] = math_round(global.bb_threat[biter_force_name], decimals)
|
|
end
|
|
|
|
--SET THREAT INCOME
|
|
global.bb_threat_income[biter_force_name] = global.bb_evolution[biter_force_name] * 20
|
|
|
|
set_biter_endgame_modifiers(game.forces[biter_force_name])
|
|
end
|
|
|
|
local function feed_biters(player, food)
|
|
local enemy_force_name = get_enemy_team_of(player.force.name) ---------------
|
|
--enemy_force_name = player.force.name
|
|
|
|
local biter_force_name = enemy_force_name .. "_biters"
|
|
|
|
local i = player.get_main_inventory()
|
|
local flask_amount = i.get_item_count(food)
|
|
if flask_amount == 0 then
|
|
player.print("You have no " .. food_values[food].name .. " flask in your inventory.", {r = 0.98, g = 0.66, b = 0.22})
|
|
return
|
|
end
|
|
|
|
i.remove({name = food, count = flask_amount})
|
|
|
|
print_feeding_msg(player, food, flask_amount)
|
|
local evolution_before_feed = global.bb_evolution[biter_force_name]
|
|
local threat_before_feed = global.bb_threat[biter_force_name]
|
|
|
|
set_evo_and_threat(flask_amount, food, biter_force_name)
|
|
|
|
add_stats(player, food, flask_amount ,biter_force_name, evolution_before_feed, threat_before_feed)
|
|
end
|
|
|
|
return feed_biters
|