mirror of
https://github.com/ComfyFactory/ComfyFactorio.git
synced 2024-12-30 23:17:53 +02:00
78 lines
2.4 KiB
Lua
78 lines
2.4 KiB
Lua
-- nighttime is dangerous, stay near your lamps -- by mewmew
|
|
|
|
local Event = require 'utils.event'
|
|
|
|
local unearthing_worm = require 'functions.unearthing_worm'
|
|
local unearthing_biters = require 'functions.unearthing_biters'
|
|
|
|
local immune_tiles = {
|
|
['concrete'] = true,
|
|
['hazard-concrete-left'] = true,
|
|
['hazard-concrete-right'] = true,
|
|
['refined-concrete'] = true,
|
|
['refined-hazard-concrete-left'] = true,
|
|
['refined-hazard-concrete-right'] = true,
|
|
['stone-path'] = true
|
|
}
|
|
|
|
local function on_player_changed_position(event)
|
|
local player = game.players[event.player_index]
|
|
if not player.character then
|
|
return
|
|
end
|
|
if player.character.driving == true then
|
|
return
|
|
end
|
|
if player.surface.daytime < 0.33 then
|
|
return
|
|
end
|
|
if player.surface.daytime > 0.66 then
|
|
return
|
|
end
|
|
if math.random(1, 32) ~= 1 then
|
|
return
|
|
end
|
|
|
|
for _, lamp in pairs(
|
|
player.surface.find_entities_filtered({area = {{player.position.x - 18, player.position.y - 18}, {player.position.x + 18, player.position.y + 18}}, name = 'small-lamp'})
|
|
) do
|
|
local circuit = lamp.get_or_create_control_behavior()
|
|
if circuit then
|
|
if lamp.energy > 25 and circuit.disabled == false then
|
|
return
|
|
end
|
|
else
|
|
if lamp.energy > 25 then
|
|
return
|
|
end
|
|
end
|
|
end
|
|
|
|
local positions = {}
|
|
local r = 8
|
|
for x = r * -1, r, 1 do
|
|
for y = r * -1, r, 1 do
|
|
local distance = x ^ 2 + y ^ 2
|
|
if distance > 4 and distance < 49 then
|
|
if player.surface.can_place_entity({name = 'stone-furnace', position = {x = player.position.x + x, y = player.position.y + y}}) then
|
|
if not immune_tiles[player.surface.get_tile({x = player.position.x + x, y = player.position.y + y}).name] then
|
|
positions[#positions + 1] = {x = player.position.x + x, y = player.position.y + y}
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
if #positions == 0 then
|
|
return
|
|
end
|
|
|
|
if math.random(1, 3) == 1 then
|
|
unearthing_biters(player.surface, positions[math.random(1, #positions)], math.random(3, 9))
|
|
else
|
|
unearthing_worm(player.surface, positions[math.random(1, #positions)])
|
|
end
|
|
end
|
|
|
|
Event.add(defines.events.on_player_changed_position, on_player_changed_position)
|