Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- require("json")
- function getEnergyData(prototype, data)
- if prototype.burner_prototype ~= nil then
- data["burner_effectivity"]=prototype.burner_prototype.effectivity
- data["fuel_categories"]=prototype.burner_prototype.fuel_categories
- data["emissions"]=prototype.burner_prototype.emissions
- elseif prototype.electric_energy_source_prototype ~= nil then
- data["drain"]=prototype.electric_energy_source_prototype.drain*60
- data["emissions"]=prototype.electric_energy_source_prototype.emissions
- end
- return data
- end
- function acquireData(event)
- local playersettings = settings.get_player_settings(game.players[event.player_index])
- if not playersettings["recipelister-output"].value then
- log("beep i'm out")
- return
- end
- local entries = {
- recipe = {"name","localised_name","category","order","group","subgroup","energy","ingredients","products"},
- inserter = {"name","localised_name", "max_energy_usage", "inserter_extension_speed", "inserter_rotation_speed"},
- resource = {"name", "localised_name", "resource_category", "mineable_properties"},
- item = {"name", "localised_name", "order", "fuel_value", "category", "tier", "module_effects", "limitations", "fuel_category", "fuel_acceleration_multiplier", "fuel_top_speed_multiplier", "rocket_launch_products", "attack_parameters", "burnt_result", "equipment_grid", },
- fluid = {"name", "localised_name", "order", "default_temperature", "max_temperature", "fuel_value", "emissions_multiplier"},
- technology = {"name", "localised_name", "effects", "research_unit_ingredients", "research_unit_count", "research_unit_energy", "max_level", "research_unit_count_formula"}
- }
- entries["assembling-machine"] = {"name","localised_name", "type", "energy_usage", "ingredient_count","crafting_speed","crafting_categories", "module_inventory_size", "allowed_effects"}
- entries.furnace = entries["assembling-machine"]
- entries["mining-drill"] = {"name","localised_name", "energy_usage", "mining_speed", "resource_categories", "allowed_effects"}
- entries["transport-belt"] = {"name","localised_name", "belt_speed"}
- local outdata = {}
- local enabled_types = {}
- for k,v in pairs(playersettings) do
- if (string.sub(k,1,20) == "recipelister-enable-") and v.value then
- category = string.sub(k,21)
- enabled_types[category]=v.value
- outdata[category] = {}
- end
- end
- local game_prototypes = {} -- this part could be more concise, but entities.
- if enabled_types.recipe then
- game_prototypes.recipe = game.recipe_prototypes
- end
- if enabled_types.item then
- game_prototypes.item = game.item_prototypes
- end
- if enabled_types.fluid then
- game_prototypes.fluid = game.fluid_prototypes
- end
- if enabled_types["assembling-machine"] or enabled_types.furnace or enabled_types.resource or enabled_types.inserter or enabled_types["transport-belt"] or enabled_types["mining-drill"] then
- game_prototypes.entity = game.entity_prototypes
- end
- if enabled_types.technology then
- game_prototypes.technology = game.technology_prototypes
- end
- for thetype,prototypes in pairs(game_prototypes) do
- for _,prototype in pairs(prototypes) do
- local t = thetype
- if thetype == "entity" then
- t = prototype.type
- end
- if enabled_types[t] then
- local data = {}
- for _, entry in pairs(entries[t]) do
- if entry == "group" or entry == "subgroup" then
- data[entry]={name = prototype[entry].name, type = prototype[entry].type}
- elseif entry == "energy_usage" or entry == "belt_speed" or entry == "max_energy_usage" then
- data[entry]=60*prototype[entry] -- prototype numbers were per tick
- elseif entry == "burnt_result" or entry == "equipment_grid" then
- if prototype[entry] and prototype[entry].name then
- data[entry] = prototype[entry].name
- end
- elseif entry == "rocket_launch_products" then
- if prototype[entry] and prototype[entry][1] then
- data[entry] = prototype[entry]
- end
- elseif entry == "fuel_acceleration_multiplier" or entry == "fuel_top_speed_multiplier" then
- if prototype.fuel_value and prototype.fuel_value ~= 0 then
- data[entry] = prototype[entry]
- end
- else
- data[entry]=prototype[entry]
- end
- end
- if thetype == "entity" then
- data = getEnergyData(prototype,data)
- local energyusage = data.energy_usage or data.max_energy_usage or 0
- local emissions = data.emissions or 0
- data.pollution = energyusage*emissions*60
- end
- if t == "technology" then
- data.prerequisites = {}
- for key, _ in pairs(prototype.prerequisites) do
- table.insert(data.prerequisites,key)
- end
- end
- outdata[t][prototype.name] = data
- end
- end
- end
- local folder = "recipe-lister/"
- local filename = "crafting_data.json"
- game.remove_path(folder)
- if (playersettings["recipelister-split-output"].value) then
- for category,things in pairs(outdata) do
- game.write_file(folder..category..".json",global.json.stringify(things))
- end
- else
- game.write_file(folder..filename,global.json.stringify(outdata))
- end
- end
- script.on_event(defines.events.on_player_created, function(event)
- acquireData(event)
- game.players[event.player_index].print{"recipe.hi"}
- end)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement