mirror of
https://github.com/ComfyFactory/ComfyFactorio.git
synced 2025-01-10 00:43:27 +02:00
74 lines
2.4 KiB
Lua
74 lines
2.4 KiB
Lua
local event = require 'utils.event'
|
|
local math_random = math.random
|
|
|
|
local valid_entities = {
|
|
["rock-big"] = true,
|
|
["rock-huge"] = true,
|
|
["sand-rock-big"] = true
|
|
}
|
|
|
|
local rock_mining_chance_weights = {
|
|
{"iron-ore", 25},
|
|
{"copper-ore",18},
|
|
{"coal",14},
|
|
{"stone",10},
|
|
{"uranium-ore",3}
|
|
}
|
|
|
|
local ore_raffle = {}
|
|
for _, t in pairs (rock_mining_chance_weights) do
|
|
for x = 1, t[2], 1 do
|
|
table.insert(ore_raffle, t[1])
|
|
end
|
|
end
|
|
|
|
local size_raffle = {
|
|
{"huge", 33, 42},
|
|
{"big", 17, 32},
|
|
{"", 8, 16},
|
|
{"tiny", 3, 7}
|
|
}
|
|
|
|
local ore_prints = {
|
|
["coal"] = {"dark", "Coal"},
|
|
["iron-ore"] = {"shiny", "Iron"},
|
|
["copper-ore"] = {"glimmering", "Copper"},
|
|
["uranium-ore"] = {"glowing", "Uranium"},
|
|
["stone"] = {"solid", "Stone"}
|
|
}
|
|
|
|
local function on_player_mined_entity(event)
|
|
local entity = event.entity
|
|
if not entity.valid then return end
|
|
if valid_entities[entity.name] then
|
|
if math_random(1,128) == 1 then
|
|
local player = game.players[event.player_index]
|
|
local p = {x = entity.position.x, y = entity.position.y}
|
|
local tile_distance_to_center = p.x^2 + p.y^2
|
|
local radius = 32
|
|
if entity.surface.count_entities_filtered{area={{p.x - radius,p.y - radius},{p.x + radius,p.y + radius}}, type="resource", limit=1} == 0 then
|
|
local size = size_raffle[math_random(1, #size_raffle)]
|
|
local ore = ore_raffle[math_random(1, #ore_raffle)]
|
|
player.print("You notice something " .. ore_prints[ore][1] .. " underneath the rubble covered floor. It's a " .. size[1] .. " vein of " .. ore_prints[ore][2] .. "!!", { r=0.98, g=0.66, b=0.22})
|
|
tile_distance_to_center = math.sqrt(tile_distance_to_center)
|
|
local ore_entities_placed = 0
|
|
local modifier_raffle = {{0,-1},{-1,0},{1,0},{0,1}}
|
|
while ore_entities_placed < math_random(size[2],size[3]) do
|
|
local a = math.ceil((math_random(tile_distance_to_center*4, tile_distance_to_center*5)) / 1 + ore_entities_placed * 0.5, 0)
|
|
for x = 1, 150, 1 do
|
|
local m = modifier_raffle[math_random(1,#modifier_raffle)]
|
|
local pos = {x = p.x + m[1], y = p.y + m[2]}
|
|
if entity.surface.can_place_entity({name=ore, position=pos, amount=a}) then
|
|
entity.surface.create_entity {name=ore, position=pos, amount=a}
|
|
p = pos
|
|
break
|
|
end
|
|
end
|
|
ore_entities_placed = ore_entities_placed + 1
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
event.add(defines.events.on_player_mined_entity, on_player_mined_entity) |