File size: 4,659 Bytes
898c672 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 |
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
|