|
local config = {script_data = {}} |
|
|
|
config.get_config = function() |
|
|
|
local data = {} |
|
|
|
data.game_config = |
|
{ |
|
time_limit = 0, |
|
allow_spectators = false, |
|
no_rush_time = 0, |
|
base_exclusion_time = 0, |
|
reveal_team_positions = true, |
|
reveal_map_center = true, |
|
team_walls = true, |
|
team_moat = true, |
|
team_turrets = true, |
|
turret_ammunition = |
|
{ |
|
options = {"firearm-magazine"}, |
|
selected = "firearm-magazine" |
|
}, |
|
team_artillery = false, |
|
give_artillery_remote = false, |
|
auto_new_round_time = 0, |
|
protect_empty_teams = false, |
|
enemy_building_restriction = false, |
|
neutral_chests = false, |
|
seed = 0 |
|
} |
|
|
|
data.victory = |
|
{ |
|
last_silo_standing = |
|
{ |
|
active = true |
|
}, |
|
space_race = |
|
{ |
|
active = true, |
|
required_rockets_sent = 1 |
|
}, |
|
production_score = |
|
{ |
|
active = false, |
|
required_production_score = 50000000 |
|
}, |
|
oil_harvest = |
|
{ |
|
active = false, |
|
required_oil = 1000000 |
|
}, |
|
kill_score = |
|
{ |
|
active = false, |
|
required_kill_score = 1000000 |
|
} |
|
} |
|
|
|
local items = game.item_prototypes |
|
|
|
local entity_name = "gun-turret" |
|
local prototype = game.entity_prototypes[entity_name] |
|
if not prototype then |
|
data.game_config.team_turrets = nil |
|
data.game_config.turret_ammunition = nil |
|
else |
|
local category = prototype.attack_parameters.ammo_category |
|
if category then |
|
local ammos = {} |
|
for name, item in pairs (items) do |
|
if item.type == "ammo" then |
|
local ammo = item.get_ammo_type() |
|
if ammo and ammo.category == category then |
|
table.insert(ammos, name) |
|
end |
|
end |
|
end |
|
data.game_config.turret_ammunition.options = ammos |
|
if not items["firearm-magazine"] then |
|
data.game_config.turret_ammunition.selected = ammos[1] or "" |
|
end |
|
end |
|
end |
|
|
|
data.team_config = |
|
{ |
|
friendly_fire = true, |
|
unlock_combat_research = false, |
|
defcon_mode = false, |
|
max_players = 0, |
|
defcon_timer = 5, |
|
starting_chest_multiplier = 5, |
|
research_level = |
|
{ |
|
options = {"none"}, |
|
selected = "none" |
|
}, |
|
average_team_displacement = math.floor(game.surfaces[1].get_starting_area_radius()) * 6 , |
|
always_day = false, |
|
evolution_factor = 0, |
|
duplicate_starting_area_entities = false, |
|
technology_price_multiplier = 1 |
|
} |
|
|
|
local packs = {} |
|
local sorted_packs = {} |
|
local techs = game.technology_prototypes |
|
for k, tech in pairs (techs) do |
|
for k, ingredient in pairs (tech.research_unit_ingredients) do |
|
if not packs[ingredient.name] then |
|
packs[ingredient.name] = true |
|
local order = tostring(items[ingredient.name].order) or "Z-Z" |
|
local added = false |
|
for k, t in pairs (sorted_packs) do |
|
if order < t.order then |
|
table.insert(sorted_packs, k, {name = ingredient.name, order = order}) |
|
added = true |
|
break |
|
end |
|
end |
|
if not added then |
|
table.insert(sorted_packs, {name = ingredient.name, order = order}) |
|
end |
|
end |
|
end |
|
end |
|
|
|
for k, t in pairs (sorted_packs) do |
|
table.insert(data.team_config.research_level.options, t.name) |
|
end |
|
|
|
data.research_ingredient_list = {} |
|
for k, research in pairs (data.team_config.research_level.options) do |
|
data.research_ingredient_list[research] = false |
|
end |
|
|
|
data.colors = |
|
{ |
|
{ name = "orange" , color = { r = 0.869, g = 0.5 , b = 0.130, a = 0.5 }}, |
|
{ name = "purple" , color = { r = 0.485, g = 0.111, b = 0.659, a = 0.5 }}, |
|
{ name = "red" , color = { r = 0.815, g = 0.024, b = 0.0 , a = 0.5 }}, |
|
{ name = "green" , color = { r = 0.093, g = 0.768, b = 0.172, a = 0.5 }}, |
|
{ name = "blue" , color = { r = 0.155, g = 0.540, b = 0.898, a = 0.5 }}, |
|
{ name = "yellow" , color = { r = 0.835, g = 0.666, b = 0.077, a = 0.5 }}, |
|
{ name = "pink" , color = { r = 0.929, g = 0.386, b = 0.514, a = 0.5 }}, |
|
{ name = "white" , color = { r = 0.8 , g = 0.8 , b = 0.8 , a = 0.5 }}, |
|
{ name = "black" , color = { r = 0.1 , g = 0.1 , b = 0.1, a = 0.5 }}, |
|
{ name = "gray" , color = { r = 0.4 , g = 0.4 , b = 0.4, a = 0.5 }}, |
|
{ name = "brown" , color = { r = 0.300, g = 0.117, b = 0.0, a = 0.5 }}, |
|
{ name = "cyan" , color = { r = 0.275, g = 0.755, b = 0.712, a = 0.5 }}, |
|
{ name = "acid" , color = { r = 0.559, g = 0.761, b = 0.157, a = 0.5 }} |
|
} |
|
|
|
data.color_map = {} |
|
for k, color in pairs (data.colors) do |
|
data.color_map[color.name] = k |
|
end |
|
|
|
data.teams = |
|
{ |
|
{name = game.backer_names[math.random(#game.backer_names)], color = "orange", team = "-", members = {}}, |
|
{name = game.backer_names[math.random(#game.backer_names)], color = "purple", team = "-", members = {}} |
|
} |
|
|
|
data.starting_equipment = |
|
{ |
|
options = {"none", "small", "medium", "large"}, |
|
selected = "none" |
|
} |
|
|
|
data.starting_chest = |
|
{ |
|
options = {"none", "small", "medium", "large"}, |
|
selected = "none" |
|
} |
|
|
|
data.inventory_list = |
|
{ |
|
none = |
|
{}, |
|
small = |
|
{ |
|
["iron-plate"] = 200, |
|
["pipe"] = 100, |
|
["pipe-to-ground"] = 20, |
|
["copper-plate"] = 200, |
|
["iron-gear-wheel"] = 200, |
|
["electronic-circuit"] = 200, |
|
["transport-belt"] = 400, |
|
["repair-pack"] = 20, |
|
["inserter"] = 100, |
|
["small-electric-pole"] = 50, |
|
["burner-mining-drill"] = 50, |
|
["stone-furnace"] = 50, |
|
["burner-inserter"] = 100, |
|
["assembling-machine-1"] = 20, |
|
["electric-mining-drill"] = 20, |
|
["boiler"] = 5, |
|
["steam-engine"] = 10, |
|
["offshore-pump"] = 2, |
|
["wood"] = 50 |
|
}, |
|
medium = |
|
{ |
|
["iron-plate"] = 200, |
|
["pipe"] = 100, |
|
["pipe-to-ground"] = 20, |
|
["iron-gear-wheel"] = 100, |
|
["copper-plate"] = 100, |
|
["steel-plate"] = 100, |
|
["electronic-circuit"] = 400, |
|
["transport-belt"] = 400, |
|
["underground-belt"] = 20, |
|
["splitter"] = 20, |
|
["repair-pack"] = 20, |
|
["inserter"] = 150, |
|
["small-electric-pole"] = 100, |
|
["medium-electric-pole"] = 50, |
|
["fast-inserter"] = 50, |
|
["long-handed-inserter"] = 50, |
|
["burner-inserter"] = 100, |
|
["burner-mining-drill"] = 50, |
|
["electric-mining-drill"] = 40, |
|
["stone-furnace"] = 100, |
|
["steel-furnace"] = 30, |
|
["assembling-machine-1"] = 40, |
|
["assembling-machine-2"] = 20, |
|
["boiler"] = 10, |
|
["steam-engine"] = 20, |
|
["chemical-plant"] = 20, |
|
["oil-refinery"] = 5, |
|
["pumpjack"] = 8, |
|
["offshore-pump"] = 2, |
|
["wood"] = 50 |
|
}, |
|
large = |
|
{ |
|
["iron-plate"] = 200, |
|
["pipe"] = 100, |
|
["pipe-to-ground"] = 20, |
|
["copper-plate"] = 200, |
|
["steel-plate"] = 200, |
|
["electronic-circuit"] = 400, |
|
["iron-gear-wheel"] = 250, |
|
["transport-belt"] = 400, |
|
["underground-belt"] = 40, |
|
["splitter"] = 40, |
|
["repair-pack"] = 20, |
|
["inserter"] = 200, |
|
["burner-inserter"] = 50, |
|
["small-electric-pole"] = 50, |
|
["burner-mining-drill"] = 50, |
|
["electric-mining-drill"] = 50, |
|
["stone-furnace"] = 100, |
|
["steel-furnace"] = 50, |
|
["electric-furnace"] = 20, |
|
["assembling-machine-1"] = 50, |
|
["assembling-machine-2"] = 40, |
|
["assembling-machine-3"] = 20, |
|
["fast-inserter"] = 100, |
|
["long-handed-inserter"] = 100, |
|
["medium-electric-pole"] = 50, |
|
["substation"] = 10, |
|
["big-electric-pole"] = 10, |
|
["boiler"] = 10, |
|
["steam-engine"] = 20, |
|
["chemical-plant"] = 20, |
|
["oil-refinery"] = 5, |
|
["pumpjack"] = 10, |
|
["offshore-pump"] = 2, |
|
["wood"] = 50 |
|
} |
|
} |
|
|
|
data.equipment_list = |
|
{ |
|
none = |
|
{ |
|
["pistol"] = 1, |
|
["firearm-magazine"] = 10 |
|
}, |
|
small = |
|
{ |
|
["submachine-gun"] = 1, |
|
["firearm-magazine"] = 30, |
|
["shotgun"] = 1, |
|
["shotgun-shell"] = 20, |
|
["heavy-armor"] = 1 |
|
}, |
|
medium = |
|
{ |
|
["submachine-gun"] = 1, |
|
["firearm-magazine"] = 40, |
|
["shotgun"] = 1, |
|
["shotgun-shell"] = 20, |
|
["car"] = 1, |
|
["modular-armor"] = 1 |
|
}, |
|
large = |
|
{ |
|
["submachine-gun"] = 1, |
|
["piercing-rounds-magazine"] = 40, |
|
["combat-shotgun"] = 1, |
|
["piercing-shotgun-shell"] = 20, |
|
["rocket-launcher"] = 1, |
|
["rocket"] = 80, |
|
["construction-robot"] = 25, |
|
["car"] = 1, |
|
["power-armor"] = 1, |
|
["fusion-reactor-equipment"] = 1, |
|
["exoskeleton-equipment"] = 1, |
|
["energy-shield-equipment"] = 2, |
|
["personal-roboport-mk2-equipment"] = 1 |
|
} |
|
} |
|
|
|
data.prototypes = |
|
{ |
|
chest = "steel-chest", |
|
wall = "stone-wall", |
|
gate = "gate", |
|
turret = "gun-turret", |
|
artillery = "artillery-turret", |
|
artillery_ammo = "artillery-shell", |
|
silo = "rocket-silo", |
|
tile_1 = "refined-concrete", |
|
tile_2 = "refined-hazard-concrete-left", |
|
artillery_remote = "artillery-targeting-remote", |
|
oil = "crude-oil", |
|
oil_resource = "crude-oil", |
|
moat = "water" |
|
} |
|
|
|
data.silo_offset = {x = 0, y = 0} |
|
data.chest_offset = {x = 0, y = 16} |
|
|
|
return data |
|
end |
|
|
|
config.give_equipment = function(player) |
|
if not config.script_data.config.equipment_list then return end |
|
if not config.script_data.config.starting_equipment then return end |
|
local setting = config.script_data.config.starting_equipment.selected |
|
if not setting then return end |
|
local equipment = config.script_data.config.equipment_list[setting] |
|
if not equipment then return end |
|
local items = game.item_prototypes |
|
local list = {items = {}, armor, equipment = {}} |
|
for name, count in pairs (equipment) do |
|
local item = items[name] |
|
if item then |
|
if item.type == "armor" then |
|
local count = count |
|
if not list.armor then |
|
list.armor = item |
|
end |
|
count = count - 1 |
|
if count > 0 then |
|
list.items[item] = (list.items[item] or 0) + count |
|
end |
|
elseif item.place_as_equipment_result then |
|
list.equipment[item] = (list.equipment[item] or 0) + count |
|
else |
|
list.items[item] = (list.items[item] or 0) + count |
|
end |
|
else |
|
equipment[name] = nil |
|
end |
|
end |
|
local put_equipment = false |
|
if list.armor then |
|
local stack = player.get_inventory(defines.inventory.character_armor)[1] |
|
stack.set_stack{name = list.armor.name} |
|
local grid = stack.grid |
|
if grid then |
|
put_equipment = true |
|
for prototype, count in pairs (list.equipment) do |
|
local equipment = prototype.place_as_equipment_result |
|
for k = 1, count do |
|
if not grid.put{name = equipment.name} then |
|
player.insert{name = prototype.name} |
|
end |
|
end |
|
end |
|
end |
|
end |
|
|
|
if not put_equipment then |
|
for prototype, count in pairs (list.equipment) do |
|
player.insert{name = prototype.name, count = count} |
|
end |
|
end |
|
|
|
for prototype, count in pairs (list.items) do |
|
player.insert{name = prototype.name, count = count} |
|
end |
|
end |
|
|
|
config.localised_names = |
|
{ |
|
seed = {"gui-map-generator.map-seed"} |
|
} |
|
|
|
|
|
config.localised_tooltips = |
|
{ |
|
friendly_fire = "", |
|
always_day = "", |
|
evolution_factor = "", |
|
duplicate_starting_area_entities = "", |
|
friendly_fire = "", |
|
technology_price_multiplier = "" |
|
} |
|
|
|
return config |
|
|