Advertisement
Guest User

Untitled

a guest
Apr 15th, 2019
268
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.24 KB | None | 0 0
  1. require("json")
  2.  
  3. function getEnergyData(prototype, data)
  4. if prototype.burner_prototype ~= nil then
  5. data["burner_effectivity"]=prototype.burner_prototype.effectivity
  6. data["fuel_categories"]=prototype.burner_prototype.fuel_categories
  7. data["emissions"]=prototype.burner_prototype.emissions
  8. elseif prototype.electric_energy_source_prototype ~= nil then
  9. data["drain"]=prototype.electric_energy_source_prototype.drain*60
  10. data["emissions"]=prototype.electric_energy_source_prototype.emissions
  11. end
  12. return data
  13. end
  14.  
  15. function acquireData(event)
  16. local playersettings = settings.get_player_settings(game.players[event.player_index])
  17. if not playersettings["recipelister-output"].value then
  18. log("beep i'm out")
  19. return
  20. end
  21.  
  22. local entries = {
  23. recipe = {"name","localised_name","category","order","group","subgroup","energy","ingredients","products"},
  24. inserter = {"name","localised_name", "max_energy_usage", "inserter_extension_speed", "inserter_rotation_speed"},
  25. resource = {"name", "localised_name", "resource_category", "mineable_properties"},
  26. 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", },
  27. fluid = {"name", "localised_name", "order", "default_temperature", "max_temperature", "fuel_value", "emissions_multiplier"},
  28. technology = {"name", "localised_name", "effects", "research_unit_ingredients", "research_unit_count", "research_unit_energy", "max_level", "research_unit_count_formula"}
  29. }
  30. entries["assembling-machine"] = {"name","localised_name", "type", "energy_usage", "ingredient_count","crafting_speed","crafting_categories", "module_inventory_size", "allowed_effects"}
  31. entries.furnace = entries["assembling-machine"]
  32. entries["mining-drill"] = {"name","localised_name", "energy_usage", "mining_speed", "resource_categories", "allowed_effects"}
  33. entries["transport-belt"] = {"name","localised_name", "belt_speed"}
  34.  
  35. local outdata = {}
  36. local enabled_types = {}
  37. for k,v in pairs(playersettings) do
  38. if (string.sub(k,1,20) == "recipelister-enable-") and v.value then
  39. category = string.sub(k,21)
  40. enabled_types[category]=v.value
  41. outdata[category] = {}
  42. end
  43. end
  44.  
  45. local game_prototypes = {} -- this part could be more concise, but entities.
  46. if enabled_types.recipe then
  47. game_prototypes.recipe = game.recipe_prototypes
  48. end
  49. if enabled_types.item then
  50. game_prototypes.item = game.item_prototypes
  51. end
  52. if enabled_types.fluid then
  53. game_prototypes.fluid = game.fluid_prototypes
  54. end
  55. 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
  56. game_prototypes.entity = game.entity_prototypes
  57. end
  58. if enabled_types.technology then
  59. game_prototypes.technology = game.technology_prototypes
  60. end
  61.  
  62. for thetype,prototypes in pairs(game_prototypes) do
  63. for _,prototype in pairs(prototypes) do
  64. local t = thetype
  65. if thetype == "entity" then
  66. t = prototype.type
  67. end
  68. if enabled_types[t] then
  69. local data = {}
  70. for _, entry in pairs(entries[t]) do
  71. if entry == "group" or entry == "subgroup" then
  72. data[entry]={name = prototype[entry].name, type = prototype[entry].type}
  73. elseif entry == "energy_usage" or entry == "belt_speed" or entry == "max_energy_usage" then
  74. data[entry]=60*prototype[entry] -- prototype numbers were per tick
  75. elseif entry == "burnt_result" or entry == "equipment_grid" then
  76. if prototype[entry] and prototype[entry].name then
  77. data[entry] = prototype[entry].name
  78. end
  79. elseif entry == "rocket_launch_products" then
  80. if prototype[entry] and prototype[entry][1] then
  81. data[entry] = prototype[entry]
  82. end
  83. elseif entry == "fuel_acceleration_multiplier" or entry == "fuel_top_speed_multiplier" then
  84. if prototype.fuel_value and prototype.fuel_value ~= 0 then
  85. data[entry] = prototype[entry]
  86. end
  87. else
  88. data[entry]=prototype[entry]
  89. end
  90. end
  91. if thetype == "entity" then
  92. data = getEnergyData(prototype,data)
  93. local energyusage = data.energy_usage or data.max_energy_usage or 0
  94. local emissions = data.emissions or 0
  95. data.pollution = energyusage*emissions*60
  96. end
  97. if t == "technology" then
  98. data.prerequisites = {}
  99. for key, _ in pairs(prototype.prerequisites) do
  100. table.insert(data.prerequisites,key)
  101. end
  102. end
  103. outdata[t][prototype.name] = data
  104. end
  105. end
  106. end
  107.  
  108. local folder = "recipe-lister/"
  109. local filename = "crafting_data.json"
  110. game.remove_path(folder)
  111. if (playersettings["recipelister-split-output"].value) then
  112. for category,things in pairs(outdata) do
  113. game.write_file(folder..category..".json",global.json.stringify(things))
  114. end
  115. else
  116. game.write_file(folder..filename,global.json.stringify(outdata))
  117. end
  118.  
  119. end
  120.  
  121. script.on_event(defines.events.on_player_created, function(event)
  122. acquireData(event)
  123. game.players[event.player_index].print{"recipe.hi"}
  124. end)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement