1
0
mirror of https://github.com/ComfyFactory/ComfyFactorio.git synced 2024-12-30 23:17:53 +02:00
ComfyFactorio/modules/mineable_wreckage_yields_scrap.lua
2021-03-24 20:14:55 +01:00

163 lines
5.5 KiB
Lua

--mineable-wreckage yields scrap -- by mewmew
local mining_chance_weights = {
{name = 'iron-plate', chance = 1000},
{name = 'iron-gear-wheel', chance = 750},
{name = 'copper-plate', chance = 750},
{name = 'copper-cable', chance = 500},
{name = 'electronic-circuit', chance = 300},
{name = 'steel-plate', chance = 200},
{name = 'solid-fuel', chance = 150},
{name = 'pipe', chance = 100},
{name = 'iron-stick', chance = 50},
{name = 'battery', chance = 20},
{name = 'empty-barrel', chance = 10},
{name = 'crude-oil-barrel', chance = 30},
{name = 'lubricant-barrel', chance = 20},
{name = 'petroleum-gas-barrel', chance = 15},
{name = 'sulfuric-acid-barrel', chance = 15},
{name = 'heavy-oil-barrel', chance = 15},
{name = 'light-oil-barrel', chance = 15},
{name = 'water-barrel', chance = 10},
{name = 'green-wire', chance = 10},
{name = 'red-wire', chance = 10},
{name = 'explosives', chance = 5},
{name = 'advanced-circuit', chance = 5},
{name = 'nuclear-fuel', chance = 1},
{name = 'pipe-to-ground', chance = 10},
{name = 'plastic-bar', chance = 5},
{name = 'processing-unit', chance = 2},
{name = 'used-up-uranium-fuel-cell', chance = 1},
{name = 'uranium-fuel-cell', chance = 1},
{name = 'rocket-fuel', chance = 3},
{name = 'rocket-control-unit', chance = 1},
{name = 'low-density-structure', chance = 1},
{name = 'heat-pipe', chance = 1},
{name = 'engine-unit', chance = 4},
{name = 'electric-engine-unit', chance = 2},
{name = 'logistic-robot', chance = 1},
{name = 'construction-robot', chance = 1},
{name = 'land-mine', chance = 3},
{name = 'grenade', chance = 10},
{name = 'rocket', chance = 3},
{name = 'explosive-rocket', chance = 3},
{name = 'cannon-shell', chance = 2},
{name = 'explosive-cannon-shell', chance = 2},
{name = 'uranium-cannon-shell', chance = 1},
{name = 'explosive-uranium-cannon-shell', chance = 1},
{name = 'artillery-shell', chance = 1},
{name = 'cluster-grenade', chance = 2},
{name = 'defender-capsule', chance = 5},
{name = 'destroyer-capsule', chance = 1},
{name = 'distractor-capsule', chance = 2}
}
local scrap_yield_amounts = {
['iron-plate'] = 16,
['iron-gear-wheel'] = 8,
['iron-stick'] = 16,
['copper-plate'] = 16,
['copper-cable'] = 24,
['electronic-circuit'] = 8,
['steel-plate'] = 4,
['pipe'] = 8,
['solid-fuel'] = 4,
['empty-barrel'] = 3,
['crude-oil-barrel'] = 3,
['lubricant-barrel'] = 3,
['petroleum-gas-barrel'] = 3,
['sulfuric-acid-barrel'] = 3,
['heavy-oil-barrel'] = 3,
['light-oil-barrel'] = 3,
['water-barrel'] = 3,
['battery'] = 2,
['explosives'] = 4,
['advanced-circuit'] = 2,
['nuclear-fuel'] = 0.1,
['pipe-to-ground'] = 1,
['plastic-bar'] = 4,
['processing-unit'] = 1,
['used-up-uranium-fuel-cell'] = 1,
['uranium-fuel-cell'] = 0.3,
['rocket-fuel'] = 0.3,
['rocket-control-unit'] = 0.3,
['low-density-structure'] = 0.3,
['heat-pipe'] = 1,
['green-wire'] = 8,
['red-wire'] = 8,
['engine-unit'] = 2,
['electric-engine-unit'] = 2,
['logistic-robot'] = 0.3,
['construction-robot'] = 0.3,
['land-mine'] = 1,
['grenade'] = 2,
['rocket'] = 2,
['explosive-rocket'] = 2,
['cannon-shell'] = 2,
['explosive-cannon-shell'] = 2,
['uranium-cannon-shell'] = 2,
['explosive-uranium-cannon-shell'] = 2,
['artillery-shell'] = 0.3,
['cluster-grenade'] = 0.3,
['defender-capsule'] = 2,
['destroyer-capsule'] = 0.3,
['distractor-capsule'] = 0.3
}
local scrap_raffle = {}
for _, t in pairs(mining_chance_weights) do
for _ = 1, t.chance, 1 do
table.insert(scrap_raffle, t.name)
end
end
local size_of_scrap_raffle = #scrap_raffle
local function on_player_mined_entity(event)
local scraps = {
['crash-site-spaceship-wreck-small-1'] = true,
['crash-site-spaceship-wreck-small-2'] = true,
['crash-site-spaceship-wreck-small-3'] = true,
['crash-site-spaceship-wreck-small-4'] = true,
['crash-site-spaceship-wreck-small-5'] = true,
['crash-site-spaceship-wreck-small-6'] = true,
['mineable-wreckage'] = true
}
local entity = event.entity
if not entity.valid then
return
end
if not scraps[entity.name] then
return
end
event.buffer.clear()
local scrap = scrap_raffle[math.random(1, size_of_scrap_raffle)]
local amount_bonus = (game.forces.enemy.evolution_factor * 2) + (game.forces.player.mining_drill_productivity_bonus * 2)
local r1 = math.ceil(scrap_yield_amounts[scrap] * (0.3 + (amount_bonus * 0.3)))
local r2 = math.ceil(scrap_yield_amounts[scrap] * (1.7 + (amount_bonus * 1.7)))
local amount = math.random(r1, r2)
local player = game.players[event.player_index]
local inserted_count = player.insert({name = scrap, count = amount})
if inserted_count ~= amount then
local amount_to_spill = amount - inserted_count
entity.surface.spill_item_stack(entity.position, {name = scrap, count = amount_to_spill}, true)
end
entity.surface.create_entity(
{
name = 'flying-text',
position = entity.position,
text = '+' .. amount .. ' [img=item/' .. scrap .. ']',
color = {r = 0.98, g = 0.66, b = 0.22}
}
)
end
local Event = require 'utils.event'
Event.add(defines.events.on_player_mined_entity, on_player_mined_entity)