mirror of
https://github.com/Refactorio/RedMew.git
synced 2024-12-14 10:13:13 +02:00
8d7ca6e558
Player count Where -> Were How to Chat Allowing pipes Unminable chests explained by compilatron Better too heavy message Fixed auto shout formating Initial code for Map tag sync
88 lines
2.6 KiB
Lua
88 lines
2.6 KiB
Lua
local Event = require 'utils.event'
|
|
local Game = require 'utils.game'
|
|
local abs = math.abs
|
|
|
|
local allowed_entities = {
|
|
['transport-belt'] = true,
|
|
['fast-transport-belt'] = true,
|
|
['express-transport-belt'] = true,
|
|
['underground-belt'] = true,
|
|
['fast-underground-belt'] = true,
|
|
['express-underground-belt'] = true,
|
|
['splitter'] = true,
|
|
['fast-splitter'] = true,
|
|
['express-splitter'] = true,
|
|
['stone-wall'] = true,
|
|
['pipe'] = true,
|
|
['pipe-to-ground'] = true
|
|
}
|
|
|
|
local quadrant_bounds = {
|
|
['quadrant1'] = {x = 24, y = -24},
|
|
['quadrant2'] = {x = -24, y = -24},
|
|
['quadrant3'] = {x = -24, y = 24},
|
|
['quadrant4'] = {x = 24, y = 24}
|
|
}
|
|
|
|
local function on_built_entity(event)
|
|
local entity = event.created_entity
|
|
local force = entity.force
|
|
|
|
if not entity or not entity.valid then
|
|
return
|
|
end
|
|
|
|
local s_box = entity.selection_box
|
|
|
|
local size_x = abs(s_box.left_top.x - s_box.right_bottom.x)
|
|
local size_y = abs(s_box.left_top.y - s_box.right_bottom.y)
|
|
local pos = {x = abs(entity.position.x) - (size_x / 2), y = abs(entity.position.y) - (size_y / 2)}
|
|
local entity_pos = entity.position
|
|
|
|
local within_range = false
|
|
if string.find(force.name, 'quadrant') then
|
|
local quadrant_bound = quadrant_bounds[force.name]
|
|
if (force.name == 'quadrant1') then
|
|
within_range = (entity_pos.x >= quadrant_bound.x and entity_pos.y <= quadrant_bound.y)
|
|
elseif (force.name == 'quadrant2') then
|
|
within_range = (entity_pos.x <= quadrant_bound.x and entity_pos.y <= quadrant_bound.y)
|
|
elseif (force.name == 'quadrant3') then
|
|
within_range = (entity_pos.x <= quadrant_bound.x and entity_pos.y >= quadrant_bound.y)
|
|
elseif (force.name == 'quadrant4') then
|
|
within_range = (entity_pos.x >= quadrant_bound.x and entity_pos.y >= quadrant_bound.y)
|
|
end
|
|
end
|
|
|
|
if not (pos.x <= 23 or pos.y <= 23) and (within_range) then
|
|
return
|
|
end
|
|
|
|
local name = entity.name
|
|
|
|
local ghost = false
|
|
if name == 'entity-ghost' then
|
|
name = entity.ghost_name
|
|
ghost = true
|
|
end
|
|
|
|
if name == 'tile-ghost' then
|
|
return
|
|
end
|
|
|
|
if allowed_entities[name] and not (pos.x < 2 or pos.y < 2) and (within_range or (pos.x <= 23 or pos.y <= 23)) then
|
|
return
|
|
end
|
|
|
|
local p = Game.get_player_by_index(event.player_index)
|
|
if not p or not p.valid then
|
|
return
|
|
end
|
|
|
|
entity.destroy()
|
|
if not ghost then
|
|
p.insert(event.stack)
|
|
end
|
|
end
|
|
|
|
Event.add(defines.events.on_built_entity, on_built_entity)
|