enemy7's picture
Upload 1553 files
898c672
local combat_technologies =
{
"follower-robot-count",
"energy-weapons-damage",
"laser-shooting-speed",
"physical-projectile-damage",
"weapon-shooting-speed",
"stronger-explosives",
"refined-flammables",
"artillery-shell-range",
"artillery-shell-speed"
}
local make_modifier_list = function()
local modifier_list =
{
character_modifiers =
{
character_running_speed_modifier = 0,
character_health_bonus = 0,
character_crafting_speed_modifier = 0,
character_mining_speed_modifier = 0,
character_build_distance_bonus = 0,
character_reach_distance_bonus = 0
},
force_modifiers =
{
worker_robots_speed_modifier = 0,
worker_robots_storage_bonus = 0,
worker_robots_battery_modifier = 0,
mining_drill_productivity_bonus = 0,
inserter_stack_size_bonus = 0,
stack_inserter_capacity_bonus = 0,
laboratory_speed_modifier = 0,
laboratory_productivity_bonus = 0,
following_robots_lifetime_modifier = 0,
maximum_following_robot_count = 0,
train_braking_force_bonus = 0
},
turret_attack_modifier = {},
ammo_damage_modifier ={},
gun_speed_modifier = {}
}
local entities = game.entity_prototypes
local turret_types =
{
["ammo-turret"] = true,
["electric-turret"] = true,
["fluid-turret"] = true,
["artillery-turret"] = true,
["turret"] = true
}
for name, entity in pairs (entities) do
if turret_types[entity.type] then
modifier_list.turret_attack_modifier[name] = 0
end
end
for name, ammo in pairs (game.ammo_category_prototypes) do
modifier_list.ammo_damage_modifier[name] = 0
modifier_list.gun_speed_modifier[name] = 0
end
return modifier_list
end
local balance = {script_data = {}}
balance.disable_combat_technologies = function(force)
if balance.script_data.config.team_config.unlock_combat_research then return end --If true, then we want them to stay unlocked
local tech = force.technologies
for k, name in pairs (combat_technologies) do
local i = 1
repeat
local full_name = name.."-"..i
if tech[full_name] then
tech[full_name].researched = false
end
i = i + 1
until not tech[full_name]
end
end
balance.apply_character_modifiers = function(player)
local apply = function(player, name, modifier)
if name == "character_health_bonus" and player.character then
modifier = modifier * player.character.prototype.max_health
end
player[name] = modifier
end
--Because some things want greater than 0, others wants greater than -1.
--Better to just catch the error than making some complicated code.
local modifier_list = balance.script_data.config.modifier_list or make_modifier_list()
for name, modifier in pairs (modifier_list.character_modifiers) do
local status, error = pcall(apply, player, name, modifier)
if not status then
log(name)
log(error)
modifier_list.character_modifiers[name] = 0
end
end
end
balance.init = function()
balance.script_data.config.modifier_list = make_modifier_list()
end
balance.apply_combat_modifiers = function(force)
local entities = game.entity_prototypes
local modifier_list = balance.script_data.config.modifier_list or make_modifier_list()
--This is the only one which needs to be at least 1...
modifier_list.force_modifiers.maximum_following_robot_count = math.max(modifier_list.force_modifiers.maximum_following_robot_count, 1)
for name, modifier in pairs (modifier_list.force_modifiers) do
force[name] = force[name] + modifier
end
for name, modifier in pairs (modifier_list.turret_attack_modifier) do
if entities[name] then
force.set_turret_attack_modifier(name, force.get_turret_attack_modifier(name) + modifier)
else
log(name.." removed from turret attack modifiers, as it is not a valid turret prototype")
modifier_list.turret_attack_modifier[name] = nil
end
end
local ammo = game.ammo_category_prototypes
for name, modifier in pairs (modifier_list.ammo_damage_modifier) do
if ammo[name] then
force.set_ammo_damage_modifier(name, force.get_ammo_damage_modifier(name) + modifier)
else
log(name.." removed from ammo damage modifiers, as it is not a valid turret prototype")
modifier_list.ammo_damage_modifier[name] = nil
end
end
for name, modifier in pairs (modifier_list.gun_speed_modifier) do
if ammo[name] then
force.set_gun_speed_modifier(name, force.get_gun_speed_modifier(name) + modifier)
else
modifier_list.gun_speed_modifier[name] = nil
end
end
end
return balance