mirror of
https://github.com/Refactorio/RedMew.git
synced 2025-02-19 19:10:33 +02:00
Implement entity restriction by type for Danger Ores (#1456)
* Implement entity restriction by type for Danger Ores * Remove legacy function * Add resources as allowed entities * Add item refund to allowed_entities
This commit is contained in:
parent
7b0971452b
commit
8d6d54a5d3
@ -1,53 +0,0 @@
|
||||
return {
|
||||
'basic-transport-belt',
|
||||
'transport-belt',
|
||||
'fast-transport-belt',
|
||||
'express-transport-belt',
|
||||
'turbo-transport-belt',
|
||||
'ultimate-transport-belt',
|
||||
'basic-underground-belt',
|
||||
'underground-belt',
|
||||
'fast-underground-belt',
|
||||
'express-underground-belt',
|
||||
'turbo-underground-belt',
|
||||
'ultimate-underground-belt',
|
||||
'small-electric-pole',
|
||||
'medium-electric-pole',
|
||||
'medium-electric-pole-2',
|
||||
'medium-electric-pole-3',
|
||||
'medium-electric-pole-4',
|
||||
'big-electric-pole',
|
||||
'big-electric-pole-2',
|
||||
'big-electric-pole-3',
|
||||
'big-electric-pole-4',
|
||||
'substation',
|
||||
'substation-2',
|
||||
'substation-3',
|
||||
'substation-4',
|
||||
'electric-mining-drill',
|
||||
'bob-mining-drill-1',
|
||||
'bob-mining-drill-2',
|
||||
'bob-mining-drill-3',
|
||||
'bob-mining-drill-4',
|
||||
'bob-area-mining-drill-1',
|
||||
'bob-area-mining-drill-2',
|
||||
'bob-area-mining-drill-3',
|
||||
'bob-area-mining-drill-4',
|
||||
'burner-mining-drill',
|
||||
'steam-mining-drill',
|
||||
'pumpjack',
|
||||
'bob-pumpjack-1',
|
||||
'bob-pumpjack-2',
|
||||
'bob-pumpjack-3',
|
||||
'bob-pumpjack-4',
|
||||
'water-miner-1',
|
||||
'water-miner-2',
|
||||
'water-miner-3',
|
||||
'water-miner-4',
|
||||
'water-miner-5',
|
||||
'car',
|
||||
'tank',
|
||||
'bob-tank-2',
|
||||
'bob-tank-3',
|
||||
'spidertron'
|
||||
}
|
@ -1,53 +0,0 @@
|
||||
return {
|
||||
'basic-transport-belt',
|
||||
'transport-belt',
|
||||
'fast-transport-belt',
|
||||
'express-transport-belt',
|
||||
'turbo-transport-belt',
|
||||
'ultimate-transport-belt',
|
||||
'basic-underground-belt',
|
||||
'underground-belt',
|
||||
'fast-underground-belt',
|
||||
'express-underground-belt',
|
||||
'turbo-underground-belt',
|
||||
'ultimate-underground-belt',
|
||||
'small-electric-pole',
|
||||
'medium-electric-pole',
|
||||
'medium-electric-pole-2',
|
||||
'medium-electric-pole-3',
|
||||
'medium-electric-pole-4',
|
||||
'big-electric-pole',
|
||||
'big-electric-pole-2',
|
||||
'big-electric-pole-3',
|
||||
'big-electric-pole-4',
|
||||
'substation',
|
||||
'substation-2',
|
||||
'substation-3',
|
||||
'substation-4',
|
||||
'electric-mining-drill',
|
||||
'bob-mining-drill-1',
|
||||
'bob-mining-drill-2',
|
||||
'bob-mining-drill-3',
|
||||
'bob-mining-drill-4',
|
||||
'bob-area-mining-drill-1',
|
||||
'bob-area-mining-drill-2',
|
||||
'bob-area-mining-drill-3',
|
||||
'bob-area-mining-drill-4',
|
||||
'burner-mining-drill',
|
||||
'pumpjack',
|
||||
'bob-pumpjack-1',
|
||||
'bob-pumpjack-2',
|
||||
'bob-pumpjack-3',
|
||||
'bob-pumpjack-4',
|
||||
'water-miner-1',
|
||||
'water-miner-2',
|
||||
'water-miner-3',
|
||||
'water-miner-4',
|
||||
'water-miner-5',
|
||||
'car',
|
||||
'tank',
|
||||
'bob-tank-2',
|
||||
'bob-tank-3',
|
||||
'spidertron',
|
||||
'thermal-water-extractor'
|
||||
}
|
@ -1,39 +0,0 @@
|
||||
return {
|
||||
-- belts
|
||||
'transport-belt',
|
||||
'fast-transport-belt',
|
||||
'express-transport-belt',
|
||||
-- undergrounds
|
||||
'underground-belt',
|
||||
'fast-underground-belt',
|
||||
'express-underground-belt',
|
||||
-- poles
|
||||
'small-electric-pole',
|
||||
'medium-electric-pole',
|
||||
'big-electric-pole',
|
||||
'substation',
|
||||
-- pipes
|
||||
'pipe',
|
||||
'pipe-to-ground',
|
||||
-- drills
|
||||
'electric-mining-drill',
|
||||
'electric-mining-drill-2',
|
||||
'electric-mining-drill-3',
|
||||
'burner-mining-drill',
|
||||
'pumpjack',
|
||||
'gas-extractor',
|
||||
-- vehicles
|
||||
'car',
|
||||
'tank',
|
||||
'spidertron',
|
||||
-- rails
|
||||
'straight-rail',
|
||||
'curved-rail',
|
||||
'rail-signal',
|
||||
'rail-chain-signal',
|
||||
'train-stop',
|
||||
'locomotive',
|
||||
'cargo-wagon',
|
||||
'fluid-wagon',
|
||||
'artillery-wagon'
|
||||
}
|
@ -1,52 +0,0 @@
|
||||
return {
|
||||
-- belts
|
||||
'transport-belt',
|
||||
'fast-transport-belt',
|
||||
'express-transport-belt',
|
||||
'ei_neo-belt',
|
||||
-- undergrounds
|
||||
'underground-belt',
|
||||
'fast-underground-belt',
|
||||
'express-underground-belt',
|
||||
'ei_neo-underground-belt',
|
||||
-- pipes
|
||||
'pipe',
|
||||
'pipe-to-ground',
|
||||
'ei_insulated-pipe',
|
||||
'ei_insulated-underground-pipe',
|
||||
-- poles
|
||||
'small-electric-pole',
|
||||
'medium-electric-pole',
|
||||
'big-electric-pole',
|
||||
'substation',
|
||||
-- drills
|
||||
'electric-mining-drill',
|
||||
'ei_advanced-electric-mining-drill',
|
||||
'ei_superior-electric-mining-drill',
|
||||
'ei_deep-drill',
|
||||
'ei_advanced-deep-drill',
|
||||
'burner-mining-drill',
|
||||
'pumpjack',
|
||||
'ei_steam-oil-pumpjack',
|
||||
-- vehicles
|
||||
'car',
|
||||
'tank',
|
||||
'spidertron',
|
||||
-- rails
|
||||
'straight-rail',
|
||||
'curved-rail',
|
||||
'rail-signal',
|
||||
'rail-chain-signal',
|
||||
'train-stop',
|
||||
'locomotive',
|
||||
'cargo-wagon',
|
||||
'fluid-wagon',
|
||||
'artillery-wagon',
|
||||
'ei_steam-basic-locomotive',
|
||||
'ei_steam-basic-wagon',
|
||||
'ei_steam-advanced-locomotive',
|
||||
'ei_steam-advanced-wagon',
|
||||
'ei_steam-advanced-fluid-wagon',
|
||||
-- special
|
||||
'ei_alien-stabilizer',
|
||||
}
|
@ -1,60 +0,0 @@
|
||||
return {
|
||||
-- belts
|
||||
'transport-belt',
|
||||
'fast-transport-belt',
|
||||
'express-transport-belt',
|
||||
-- undergrounds
|
||||
'underground-belt',
|
||||
'fast-underground-belt',
|
||||
'express-underground-belt',
|
||||
-- pipes
|
||||
'copper-pipe',
|
||||
'copper-pipe-to-ground',
|
||||
'copper-pipe-to-ground-short',
|
||||
'steam-pipe',
|
||||
'steam-pipe-to-ground',
|
||||
'steam-pipe-to-ground-short',
|
||||
'pipe',
|
||||
'pipe-to-ground',
|
||||
'pipe-to-ground-short',
|
||||
'air-pipe',
|
||||
'air-pipe-to-ground',
|
||||
'air-pipe-to-ground-short',
|
||||
-- poles
|
||||
'small-electric-pole',
|
||||
'medium-electric-pole',
|
||||
'big-electric-pole',
|
||||
'substation',
|
||||
'small-bronze-pole',
|
||||
'small-iron-pole',
|
||||
'big-wooden-pole',
|
||||
-- drills
|
||||
'electric-mining-drill',
|
||||
'burner-mining-drill',
|
||||
'pumpjack',
|
||||
'steam-drill',
|
||||
'chrome-drill',
|
||||
'copper-derrick',
|
||||
'steel-derrick',
|
||||
-- simulation (needed?)
|
||||
--'electric-mining-drill-simulation',
|
||||
--'steam-drill-simulation',
|
||||
--'chrome-drill-simulation',
|
||||
-- vehicles
|
||||
'car',
|
||||
'tank',
|
||||
'spidertron',
|
||||
'monowheel',
|
||||
'heavy-roller',
|
||||
'heavy-picket',
|
||||
-- rails
|
||||
'straight-rail',
|
||||
'curved-rail',
|
||||
'rail-signal',
|
||||
'rail-chain-signal',
|
||||
'train-stop',
|
||||
'locomotive',
|
||||
'cargo-wagon',
|
||||
'fluid-wagon',
|
||||
'artillery-wagon',
|
||||
}
|
@ -1,46 +0,0 @@
|
||||
return {
|
||||
-- belts
|
||||
'transport-belt',
|
||||
'fast-transport-belt',
|
||||
'express-transport-belt',
|
||||
'kr-advanced-transport-belt',
|
||||
'kr-superior-transport-belt',
|
||||
-- undergrounds
|
||||
'underground-belt',
|
||||
'fast-underground-belt',
|
||||
'express-underground-belt',
|
||||
'kr-advanced-underground-belt',
|
||||
'kr-superior-underground-belt',
|
||||
-- poles
|
||||
'small-electric-pole',
|
||||
'medium-electric-pole',
|
||||
'big-electric-pole',
|
||||
'substation',
|
||||
'kr-substation-mk2',
|
||||
-- drills
|
||||
'electric-mining-drill',
|
||||
'electric-mining-drill-2',
|
||||
'electric-mining-drill-3',
|
||||
'burner-mining-drill',
|
||||
'pumpjack',
|
||||
'kr-electric-mining-drill-mk2',
|
||||
'kr-electric-mining-drill-mk3',
|
||||
'kr-quarry-drill',
|
||||
'kr-mineral-water-pumpjack',
|
||||
-- vehicles
|
||||
'car',
|
||||
'tank',
|
||||
'kr-advanced-tank',
|
||||
'spidertron',
|
||||
-- rails
|
||||
'straight-rail',
|
||||
'curved-rail',
|
||||
'rail-signal',
|
||||
'rail-chain-signal',
|
||||
'train-stop',
|
||||
'locomotive',
|
||||
'kr-nuclear-locomotive',
|
||||
'cargo-wagon',
|
||||
'fluid-wagon',
|
||||
'artillery-wagon'
|
||||
}
|
@ -1,50 +0,0 @@
|
||||
local entities = {
|
||||
-- belts
|
||||
'basic-transport-belt',
|
||||
'transport-belt',
|
||||
'fast-transport-belt',
|
||||
'express-transport-belt',
|
||||
-- undergrounds
|
||||
'basic-underground-belt',
|
||||
'underground-belt',
|
||||
'fast-underground-belt',
|
||||
'express-underground-belt',
|
||||
-- pipes
|
||||
'pipe',
|
||||
'pipe-to-ground',
|
||||
-- poles
|
||||
'small-electric-pole',
|
||||
'small-iron-electric-pole',
|
||||
'small-omnium-electric-pole',
|
||||
'medium-electric-pole',
|
||||
'big-electric-pole',
|
||||
'substation',
|
||||
-- drills
|
||||
'electric-mining-drill',
|
||||
'burner-mining-drill',
|
||||
-- vehicles
|
||||
'car',
|
||||
'tank',
|
||||
'spidertron',
|
||||
-- rails
|
||||
'straight-rail',
|
||||
'curved-rail',
|
||||
'rail-signal',
|
||||
'rail-chain-signal',
|
||||
'train-stop',
|
||||
'locomotive',
|
||||
'cargo-wagon',
|
||||
'fluid-wagon',
|
||||
'artillery-wagon',
|
||||
}
|
||||
|
||||
local list = {}
|
||||
for _, e in pairs(entities) do
|
||||
table.insert(list, e)
|
||||
table.insert(list, e .. '-compressed-compact')
|
||||
table.insert(list, e .. '-compressed-nanite')
|
||||
table.insert(list, e .. '-compressed-quantum')
|
||||
table.insert(list, e .. '-compressed-singularity')
|
||||
end
|
||||
|
||||
return list
|
@ -1,137 +0,0 @@
|
||||
return {
|
||||
-- belts
|
||||
'transport-belt',
|
||||
'fast-transport-belt',
|
||||
'express-transport-belt',
|
||||
-- undergrounds
|
||||
'underground-belt',
|
||||
'fast-underground-belt',
|
||||
'express-underground-belt',
|
||||
-- splitters
|
||||
'splitter',
|
||||
'fast-splitter',
|
||||
'express-splitter',
|
||||
-- pipes
|
||||
'pipe',
|
||||
'pipe-to-ground',
|
||||
-- poles
|
||||
'small-electric-pole',
|
||||
'medium-electric-pole',
|
||||
'big-electric-pole',
|
||||
'substation',
|
||||
-- drills
|
||||
'electric-mining-drill',
|
||||
'burner-mining-drill',
|
||||
'pumpjack',
|
||||
-- vehicles
|
||||
'car',
|
||||
'tank',
|
||||
'spidertron',
|
||||
-- rails
|
||||
'straight-rail',
|
||||
'curved-rail',
|
||||
'rail-signal',
|
||||
'rail-chain-signal',
|
||||
'train-stop',
|
||||
'locomotive',
|
||||
'cargo-wagon',
|
||||
'fluid-wagon',
|
||||
'artillery-wagon',
|
||||
-- inserters
|
||||
'burner-inserter',
|
||||
'inserter',
|
||||
'long-handed-inserter',
|
||||
'fast-inserter',
|
||||
'bulk-inserter',
|
||||
-- Py drills
|
||||
'aluminium-mine',
|
||||
'antimonium-drill-mk01',
|
||||
'antimonium-drill-mk02',
|
||||
'antimonium-drill-mk03',
|
||||
'antimonium-drill-mk04',
|
||||
'bitumen-seep-mk01',
|
||||
'bitumen-seep-mk02',
|
||||
'bitumen-seep-mk03',
|
||||
'bitumen-seep-mk04',
|
||||
'borax-mine-mk02',
|
||||
'borax-mine-mk03',
|
||||
'borax-mine-mk04',
|
||||
'borax-mine',
|
||||
'chromium-mine',
|
||||
'coal-mine',
|
||||
'collector-mk02',
|
||||
'collector-mk03',
|
||||
'collector-mk04',
|
||||
'collector',
|
||||
'copper-mine',
|
||||
'diamond-mine',
|
||||
'fluid-drill-mk01',
|
||||
'fluid-drill-mk02',
|
||||
'fluid-drill-mk03',
|
||||
'fluid-drill-mk04',
|
||||
'geothermal-plant-mk01',
|
||||
'harvester',
|
||||
'iron-mine',
|
||||
'lead-mine',
|
||||
'mo-mine',
|
||||
'natural-gas-extractor-mk01',
|
||||
'natural-gas-extractor-mk02',
|
||||
'natural-gas-extractor-mk03',
|
||||
'natural-gas-extractor-mk04',
|
||||
'natural-gas-seep-mk01',
|
||||
'natural-gas-seep-mk02',
|
||||
'natural-gas-seep-mk03',
|
||||
'natural-gas-seep-mk04',
|
||||
'nexelit-mine',
|
||||
'nickel-mine',
|
||||
'niobium-mine',
|
||||
'oil-derrick-mk01',
|
||||
'oil-derrick-mk02',
|
||||
'oil-derrick-mk03',
|
||||
'oil-derrick-mk04',
|
||||
'oil-sand-extractor-mk01',
|
||||
'oil-sand-extractor-mk02',
|
||||
'oil-sand-extractor-mk03',
|
||||
'oil-sand-extractor-mk04',
|
||||
'phosphate-mine-02',
|
||||
'phosphate-mine',
|
||||
'quartz-mine',
|
||||
'rare-earth-mine',
|
||||
'ree-mining-drill-mk01',
|
||||
'ree-mining-drill-mk02',
|
||||
'ree-mining-drill-mk03',
|
||||
'ree-mining-drill-mk04',
|
||||
'regolite-mine',
|
||||
'salt-mine',
|
||||
'sulfur-mine',
|
||||
'tar-extractor-mk01',
|
||||
'tar-extractor-mk02',
|
||||
'tar-extractor-mk03',
|
||||
'tar-extractor-mk04',
|
||||
'tar-seep-mk01',
|
||||
'tar-seep-mk02',
|
||||
'tar-seep-mk03',
|
||||
'tar-seep-mk04',
|
||||
'tin-mine',
|
||||
'titanium-mine',
|
||||
'uranium-mine',
|
||||
'zinc-mine',
|
||||
-- Py Industry
|
||||
'mk02-locomotive',
|
||||
'mk02-wagon',
|
||||
'mk02-fluid-wagon',
|
||||
'niobium-pipe',
|
||||
'niobium-pipe-to-ground',
|
||||
-- Py High Tech
|
||||
'ht-pipes',
|
||||
'ht-pipes-to-ground',
|
||||
'ht-locomotive',
|
||||
'ht-generic-wagon',
|
||||
'ht-generic-fluid-wagon',
|
||||
-- Py Alternative Energy
|
||||
'nexelit-power-pole',
|
||||
'nexelit-substation',
|
||||
'mk04-locomotive',
|
||||
'mk04-wagon',
|
||||
'mk04-fluid-wagon',
|
||||
}
|
@ -1,53 +1,41 @@
|
||||
return {
|
||||
-- pipes
|
||||
'pump',
|
||||
'pipe',
|
||||
'pipe-to-ground',
|
||||
-- fluids
|
||||
['pipe'] = true,
|
||||
['pipe-to-ground'] = true,
|
||||
['pump'] = true,
|
||||
|
||||
-- belts
|
||||
'transport-belt',
|
||||
'fast-transport-belt',
|
||||
'express-transport-belt',
|
||||
'turbo-transport-belt',
|
||||
-- undergrounds
|
||||
'underground-belt',
|
||||
'fast-underground-belt',
|
||||
'express-underground-belt',
|
||||
'turbo-underground-belt',
|
||||
-- poles
|
||||
'small-electric-pole',
|
||||
'medium-electric-pole',
|
||||
'big-electric-pole',
|
||||
'substation',
|
||||
-- drills
|
||||
'big-mining-drill',
|
||||
'electric-mining-drill',
|
||||
'electric-mining-drill-2',
|
||||
'electric-mining-drill-3',
|
||||
'burner-mining-drill',
|
||||
'pumpjack',
|
||||
['transport-belt'] = true,
|
||||
['underground-belt'] = true,
|
||||
|
||||
-- misc
|
||||
['resource'] = true,
|
||||
['tile-ghost'] = true,
|
||||
['electric-pole'] = true,
|
||||
['mining-drill'] = true,
|
||||
|
||||
-- vehicles
|
||||
'car',
|
||||
'tank',
|
||||
'spidertron',
|
||||
-- rails
|
||||
'straight-rail',
|
||||
'curved-rail',
|
||||
'curved-rail-a',
|
||||
'curved-rail-b',
|
||||
'half-diagonal-rail',
|
||||
'legacy-straight-rail',
|
||||
'legacy-curved-rail',
|
||||
'rail-signal',
|
||||
'rail-chain-signal',
|
||||
'rail-ramp',
|
||||
'rail-support',
|
||||
'elevated-straight-rail',
|
||||
'elevated-curved-rail-a',
|
||||
'elevated-curved-rail-b',
|
||||
'elevated-half-diagonal-rail',
|
||||
'train-stop',
|
||||
'locomotive',
|
||||
'cargo-wagon',
|
||||
'fluid-wagon',
|
||||
'artillery-wagon',
|
||||
}
|
||||
['car'] = true,
|
||||
['spider-vehicle'] = true,
|
||||
|
||||
-- trains
|
||||
['curved-rail-a'] = true,
|
||||
['curved-rail-b'] = true,
|
||||
['elevated-curved-rail-a'] = true,
|
||||
['elevated-curved-rail-b'] = true,
|
||||
['elevated-half-diagonal-rail'] = true,
|
||||
['elevated-straight-rail'] = true,
|
||||
['half-diagonal-rail'] = true,
|
||||
['legacy-curved-rail'] = true,
|
||||
['legacy-straight-rail'] = true,
|
||||
['rail-chain-signal'] = true,
|
||||
['rail-ramp'] = true,
|
||||
['rail-signal'] = true,
|
||||
['rail-support'] = true,
|
||||
['straight-rail'] = true,
|
||||
['train-stop'] = true,
|
||||
['locomotive'] = true,
|
||||
['cargo-wagon'] = true,
|
||||
['fluid-wagon'] = true,
|
||||
['artillery-wagon'] = true,
|
||||
}
|
||||
|
@ -8,8 +8,10 @@ return {
|
||||
},
|
||||
allowed_entities = {
|
||||
enabled = true,
|
||||
entities = require 'map_gen.maps.danger_ores.config.vanilla_allowed_entities',
|
||||
message = nil,
|
||||
refund = true,
|
||||
types = require 'map_gen.maps.danger_ores.config.vanilla_allowed_entities',
|
||||
allowed_entities = {},
|
||||
banned_entities = {},
|
||||
},
|
||||
biter_drops = {
|
||||
enabled = true,
|
||||
|
212
map_gen/maps/danger_ores/modules/allowed_entities.lua
Normal file
212
map_gen/maps/danger_ores/modules/allowed_entities.lua
Normal file
@ -0,0 +1,212 @@
|
||||
-- This module prevents all but the allowed entities to be built on top of resources
|
||||
--
|
||||
-- Params (by precedence):
|
||||
-- 1. Banned entities: entities/ghosts (by name) that will never be placed, regardless of type.
|
||||
-- 2. Allowed entities: entities/ghosts (by name) that will be allowed if not blacklisted, regardless of type.
|
||||
-- 3. Types: entity types allowed to be built
|
||||
-- 4. Refund: true - refund and spill contents or, false/nil - destroy entity
|
||||
--
|
||||
-- Usage:
|
||||
-- local config = {
|
||||
-- types = { ['transport-belt'] = true, }, -- all belts allowed on ore
|
||||
-- allowed_entities = { ['burner-inserter'] = true, } -- Burner inserters allowed as well, even if they're not of type `transport-belt`
|
||||
-- banned_entities = { ['turbo-transport-belt'] = true, } -- Turbo belts not allowed on ore, even if they're of type `transport-belt`
|
||||
-- }
|
||||
-- local AllowedEntities = require 'map_gen.maps.danger_ores.modules.allowed_entities'
|
||||
-- AllowedEntities.register(config)
|
||||
|
||||
local Event = require 'utils.event'
|
||||
local Global = require 'utils.global'
|
||||
local random = math.random
|
||||
|
||||
local types = {}
|
||||
local allowed_entities = {}
|
||||
local banned_entities = {}
|
||||
local primitives = {
|
||||
refund = true,
|
||||
message = '',
|
||||
}
|
||||
|
||||
Global.register({
|
||||
types = types,
|
||||
allowed_entities = allowed_entities,
|
||||
banned_entities = banned_entities,
|
||||
primitives = primitives,
|
||||
}, function(tbl)
|
||||
types = tbl.types
|
||||
allowed_entities = tbl.allowed_entities
|
||||
banned_entities = tbl.banned_entities
|
||||
primitives = tbl.primitives
|
||||
end)
|
||||
|
||||
local danger_alerts = {
|
||||
[[Ooooh, that's going to leave a mark!]],
|
||||
[[LOOK OUT! THE GROUND IS ANGRY!]],
|
||||
[[YOU'VE AWAKENED THE BEAST!]],
|
||||
[[OOPS! That wasn't part of the plan!]],
|
||||
[[DANGER! You've breached the ore's sanctuary!]],
|
||||
[[RUN TO THE HILLS! or at least away from THE ORE!]],
|
||||
[["I just wanted to build a factory" - famous last words]],
|
||||
[[Congratulations! YOU'VE TRIGGERED THE ORE'S WRATH!]],
|
||||
[[FROM DUST TO DUST... AND FROM ORE TO DOOM!]],
|
||||
[[THE GROUND TREMBLES WITH VENGEANCE!]],
|
||||
[[FEAR THE CURSE OF THE DEAD MINER!]],
|
||||
[[THE ORE IS ALIVE... AND IT IS ANGRY!]],
|
||||
[[A PRICE MUST BE PAID FOR YOUR ARROGANCE!]],
|
||||
}
|
||||
|
||||
local explosions = {
|
||||
'explosion',
|
||||
'land-mine-explosion',
|
||||
'grenade-explosion',
|
||||
'medium-explosion',
|
||||
'big-explosion',
|
||||
'massive-explosion',
|
||||
'big-artillery-explosion',
|
||||
'nuke-explosion',
|
||||
}
|
||||
|
||||
local function get_entity_info(entity)
|
||||
local ghost = (entity.name == 'entity-ghost')
|
||||
return {
|
||||
name = (ghost and entity.ghost_name) or entity.name,
|
||||
type = (ghost and entity.ghost_type) or entity.type,
|
||||
ghost = ghost
|
||||
}
|
||||
end
|
||||
|
||||
local function get_resource_presence(entity)
|
||||
local area = entity.bounding_box
|
||||
local left_top, right_bottom = area.left_top, area.right_bottom
|
||||
if left_top.x == right_bottom.x and left_top.y == right_bottom.y then
|
||||
return false
|
||||
end
|
||||
local count = entity.surface.count_entities_filtered{ area = area, type = 'resource', limit = 1 }
|
||||
return (count > 0)
|
||||
end
|
||||
|
||||
local function handle_entity_refund(entity, event)
|
||||
-- spill contents
|
||||
if entity.has_items_inside() then
|
||||
local spill_item_stack = entity.surface.spill_item_stack
|
||||
local def = { position = entity.position, enable_looted = true, force = entity.force, allow_belts = true, max_radius = 32 }
|
||||
for i_id = 1, entity.get_max_inventory_index() do
|
||||
local inv = entity.get_inventory(i_id)
|
||||
if inv and inv.valid then
|
||||
local contents = inv.get_contents()
|
||||
for _, stack in pairs(contents) do
|
||||
def.stack = stack
|
||||
spill_item_stack(def)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- refund item to robot/player
|
||||
local stack = entity.prototype.items_to_place_this[1]
|
||||
if stack then
|
||||
stack.quality = entity.quality
|
||||
local actor = event.robot or (event.player_index and game.get_player(event.player_index))
|
||||
if actor and actor.valid and actor.can_insert(stack) then
|
||||
actor.insert(stack)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local function player_print(player, message)
|
||||
if not (player and player.valid) then
|
||||
return
|
||||
end
|
||||
player.print(message, { color = { r = 1, g = random(1, 100) * 0.01, b = 0 } })
|
||||
end
|
||||
|
||||
local function on_built(event)
|
||||
local entity = event.entity
|
||||
if not (entity and entity.valid) then
|
||||
return
|
||||
end
|
||||
|
||||
local e = get_entity_info(entity)
|
||||
if not banned_entities[e.name] and (allowed_entities[e.name] or types[e.type]) then
|
||||
return
|
||||
end
|
||||
|
||||
if not get_resource_presence(entity) then
|
||||
return
|
||||
end
|
||||
|
||||
entity.surface.create_entity{
|
||||
name = (e.ghost and 'water-splash') or explosions[random(#explosions)],
|
||||
position = entity.position,
|
||||
}
|
||||
|
||||
local player = event.player_index and game.get_player(event.player_index)
|
||||
|
||||
if not e.ghost then
|
||||
if primitives.refund then
|
||||
handle_entity_refund(entity, event)
|
||||
else
|
||||
player_print(player, danger_alerts[random(#danger_alerts)])
|
||||
end
|
||||
end
|
||||
|
||||
player_print(player, primitives.message)
|
||||
entity.destroy{ raise_destroy = true }
|
||||
end
|
||||
|
||||
Event.add(defines.events.on_built_entity, on_built)
|
||||
Event.add(defines.events.on_robot_built_entity, on_built)
|
||||
|
||||
local function merge_dictionary(src, dst, call)
|
||||
if not src or not dst then
|
||||
return
|
||||
end
|
||||
call = call or function(_, v) return v end
|
||||
for k, v in pairs(src) do
|
||||
dst[k] = call(k, v)
|
||||
end
|
||||
end
|
||||
|
||||
local function build_message()
|
||||
local items = {}
|
||||
|
||||
local entities = prototypes.get_entity_filtered
|
||||
for type_name, v in pairs(types) do
|
||||
if v then
|
||||
local filter = {{ filter = 'type', type = { type_name } }}
|
||||
merge_dictionary(entities(filter), items, function(k, _) return k end)
|
||||
end
|
||||
end
|
||||
merge_dictionary(allowed_entities, items)
|
||||
merge_dictionary(banned_entities, items, function(_, v) return not v end)
|
||||
merge_dictionary(items, items, function(k, v) return (v and prototypes.item[k]) or nil end)
|
||||
|
||||
local str = '[color=black][DangerOres][/color] You cannot build that on top of ores, only: '
|
||||
local images = {}
|
||||
for name, _ in pairs(items) do
|
||||
images[#images+1] = '[img=item.'..name..']'
|
||||
end
|
||||
primitives.message = str .. table.concat(images, ' ')
|
||||
end
|
||||
|
||||
local Public = {}
|
||||
|
||||
---@param config
|
||||
---@field types? table<string, bool>
|
||||
---@field allowed_entities? table<string, bool>
|
||||
---@field banned_entities? table<string, bool>
|
||||
---@field refund? bool
|
||||
Public.register = function(config)
|
||||
merge_dictionary(config.types, types)
|
||||
merge_dictionary(config.allowed_entities, allowed_entities)
|
||||
merge_dictionary(config.banned_entities, banned_entities)
|
||||
if config.refund ~= nil then
|
||||
primitives.refund = config.refund
|
||||
end
|
||||
if config.message then
|
||||
primitives.message = config.message
|
||||
end
|
||||
build_message()
|
||||
end
|
||||
|
||||
return Public
|
@ -18,10 +18,6 @@ DOC.map_config.resource_patches_config = require 'map_gen.maps.danger_ores.compa
|
||||
DOC.map_config.spawn_shape = B.circle(40)
|
||||
DOC.map_config.start_ore_shape = B.circle(48)
|
||||
DOC.rocket_launched.win_satellite_count = 2500
|
||||
DOC.allowed_entities.entities = table.merge{
|
||||
DOC.allowed_entities.entities,
|
||||
require 'map_gen.maps.danger_ores.compatibility.bob.allowed_entities'
|
||||
}
|
||||
DOC.map_gen_settings.settings = H.empty_map_settings{
|
||||
'bauxite-ore',
|
||||
'coal',
|
||||
|
@ -17,10 +17,6 @@ DOC.map_config.resource_patches_config = require 'map_gen.maps.danger_ores.compa
|
||||
DOC.map_config.spawn_shape = B.circle(80)
|
||||
DOC.map_config.start_ore_shape = B.circle(86)
|
||||
DOC.rocket_launched.enabled = false
|
||||
DOC.allowed_entities.entities = table.merge{
|
||||
DOC.allowed_entities.entities,
|
||||
require 'map_gen.maps.danger_ores.compatibility.bob_angel.allowed_entities'
|
||||
}
|
||||
DOC.map_gen_settings.settings = H.empty_map_settings{
|
||||
'angels-ore1', -- Saphirite
|
||||
'angels-ore2', -- Jivolite
|
||||
|
@ -15,10 +15,6 @@ DOC.map_config.main_ores = require 'map_gen.maps.danger_ores.compatibility.bz.or
|
||||
DOC.map_config.resource_patches_config = require 'map_gen.maps.danger_ores.compatibility.bz.resource_patches'
|
||||
DOC.map_config.spawn_tile = script.active_mods['alien-biomes'] and 'volcanic-green-heat-2' or 'grass-1'
|
||||
DOC.rocket_launched.win_satellite_count = 100
|
||||
DOC.allowed_entities.entities = table.merge{
|
||||
DOC.allowed_entities.entities,
|
||||
require 'map_gen.maps.danger_ores.compatibility.bz.allowed_entities'
|
||||
}
|
||||
DOC.map_gen_settings.settings = H.empty_map_settings{
|
||||
-- fluid patches
|
||||
'crude-oil',
|
||||
|
@ -15,10 +15,7 @@ DOC.scenario_name = 'danger-ore-exotic-industries'
|
||||
DOC.compatibility.redmew_data.remove_resource_patches = false
|
||||
DOC.game.technology_price_multiplier = 1
|
||||
DOC.map_config.resource_patches_config = require 'map_gen.maps.danger_ores.compatibility.exotic_industries.resource_patches'
|
||||
DOC.allowed_entities.entities = table.merge{
|
||||
DOC.allowed_entities.entities,
|
||||
require 'map_gen.maps.danger_ores.compatibility.exotic_industries.allowed_entities'
|
||||
}
|
||||
DOC.allowed_entities.allowed_entities['ei_alien-stabilizer'] = true
|
||||
DOC.map_gen_settings.settings = H.empty_map_settings{
|
||||
-- point patches
|
||||
'crude-oil',
|
||||
|
@ -18,10 +18,7 @@ DOC.map_config.main_ores_builder = require 'map_gen.maps.danger_ores.modules.mai
|
||||
DOC.map_config.no_resource_patch_shape = nil
|
||||
DOC.map_config.resource_patches_config = require 'map_gen.maps.danger_ores.compatibility.exotic_industries.resource_patches'
|
||||
DOC.map_config.spawn_tile = 'landfill'
|
||||
DOC.allowed_entities.entities = table.merge{
|
||||
DOC.allowed_entities.entities,
|
||||
require 'map_gen.maps.danger_ores.compatibility.exotic_industries.allowed_entities'
|
||||
}
|
||||
DOC.allowed_entities.allowed_entities['ei_alien-stabilizer'] = true
|
||||
DOC.map_gen_settings.settings = H.empty_map_settings{
|
||||
-- point patches
|
||||
'crude-oil',
|
||||
|
@ -30,10 +30,6 @@ DOC.scenario_name = 'danger-ore-industrial-revolution-3'
|
||||
DOC.game.technology_price_multiplier = 5
|
||||
DOC.map_config.main_ores = require 'map_gen.maps.danger_ores.compatibility.industrial_revolution_3.ores'
|
||||
DOC.map_config.resource_patches_config = require 'map_gen.maps.danger_ores.compatibility.industrial_revolution_3.resource_patches'
|
||||
DOC.allowed_entities.entities = table.merge{
|
||||
DOC.allowed_entities.entities,
|
||||
require 'map_gen.maps.danger_ores.compatibility.industrial_revolution_3.allowed_entities'
|
||||
}
|
||||
DOC.map_gen_settings.settings = H.empty_map_settings{
|
||||
-- point patches
|
||||
'crude-oil',
|
||||
|
@ -32,10 +32,6 @@ DOC.map_config.main_ores_builder = require 'map_gen.maps.danger_ores.modules.mai
|
||||
DOC.map_config.main_ores = require 'map_gen.maps.danger_ores.compatibility.industrial_revolution_3.ores_grid_factory'
|
||||
DOC.map_config.resource_patches_config = require 'map_gen.maps.danger_ores.compatibility.industrial_revolution_3.resource_patches'
|
||||
DOC.map_config.spawn_tile = 'tarmac'
|
||||
DOC.allowed_entities.entities = table.merge{
|
||||
DOC.allowed_entities.entities,
|
||||
require 'map_gen.maps.danger_ores.compatibility.industrial_revolution_3.allowed_entities'
|
||||
}
|
||||
DOC.map_gen_settings.settings = H.empty_map_settings{
|
||||
-- point patches
|
||||
'crude-oil',
|
||||
|
@ -34,10 +34,6 @@ DOC.game.technology_price_multiplier = 5
|
||||
DOC.map_config.spawn_tile = 'landfill'
|
||||
DOC.map_config.main_ores = require 'map_gen.maps.danger_ores.compatibility.krastorio2.ores'
|
||||
DOC.map_config.resource_patches_config = require 'map_gen.maps.danger_ores.compatibility.krastorio2.resource_patches'
|
||||
DOC.allowed_entities.entities = table.merge{
|
||||
DOC.allowed_entities.entities,
|
||||
require 'map_gen.maps.danger_ores.compatibility.krastorio2.allowed_entities'
|
||||
}
|
||||
DOC.map_gen_settings.settings = H.empty_map_settings{
|
||||
'coal',
|
||||
'copper-ore',
|
||||
|
@ -28,10 +28,6 @@ DOC.map_config.spawn_shape = B.square_diamond(36 * 2)
|
||||
DOC.map_config.spawn_tile = 'landfill'
|
||||
DOC.map_config.start_ore_shape = B.square_diamond(44 * 2)
|
||||
DOC.rocket_launched.win_satellite_count = 100
|
||||
DOC.allowed_entities.entities = table.merge{
|
||||
DOC.allowed_entities.entities,
|
||||
require 'map_gen.maps.danger_ores.compatibility.omnimatter.allowed_entities'
|
||||
}
|
||||
DOC.map_gen_settings.settings = H.empty_map_settings{
|
||||
'infinite-omnite',
|
||||
'omnite',
|
||||
|
@ -29,10 +29,6 @@ DOC.map_config.spawn_shape = B.square_diamond(36 * 2)
|
||||
DOC.map_config.spawn_tile = 'landfill'
|
||||
DOC.map_config.start_ore_shape = B.square_diamond(44 * 2)
|
||||
DOC.rocket_launched.win_satellite_count = 100
|
||||
DOC.allowed_entities.entities = table.merge{
|
||||
DOC.allowed_entities.entities,
|
||||
require 'map_gen.maps.danger_ores.compatibility.omnimatter.allowed_entities'
|
||||
}
|
||||
DOC.map_gen_settings.settings = H.empty_map_settings{
|
||||
'infinite-omnite',
|
||||
'omnite',
|
||||
|
@ -19,10 +19,8 @@ DOC.map_config.resource_patches_config = require 'map_gen.maps.danger_ores.compa
|
||||
DOC.map_config.spawn_shape = B.rectangle(100)
|
||||
DOC.map_config.spawn_tile = 'landfill'
|
||||
DOC.map_config.start_ore_shape = B.empty_shape
|
||||
DOC.allowed_entities.entities = table.merge{
|
||||
DOC.allowed_entities.entities,
|
||||
require 'map_gen.maps.danger_ores.compatibility.pyanodon.allowed_entities'
|
||||
}
|
||||
DOC.allowed_entities.types['inserter'] = true
|
||||
DOC.allowed_entities.types['splitter'] = true
|
||||
DOC.game.technology_price_multiplier = 1
|
||||
DOC.game.on_init = function()
|
||||
game.map_settings.pollution.diffusion_ratio = 0.01
|
||||
|
@ -40,7 +40,7 @@ Config.player_shortcuts.enabled = true
|
||||
Config.player_shortcuts.shortcuts.battery_charge = false
|
||||
Config.reactor_meltdown.enabled = false
|
||||
|
||||
local allowed_entities = require 'map_gen.maps.danger_ores.modules.banned_entities'
|
||||
local allowed_entities = require 'map_gen.maps.danger_ores.modules.allowed_entities'.register
|
||||
local concrete_on_landfill = require 'map_gen.maps.danger_ores.modules.concrete_on_landfill'
|
||||
local container_dump = require 'map_gen.maps.danger_ores.modules.container_dump'
|
||||
local map_builder = require 'map_gen.maps.danger_ores.modules.map'
|
||||
@ -56,7 +56,7 @@ Public.register = function(danger_ores_config)
|
||||
local _C = danger_ores_config
|
||||
|
||||
if _C.allowed_entities.enabled then
|
||||
allowed_entities(_C.allowed_entities.entities, _C.allowed_entities.message)
|
||||
allowed_entities(_C.allowed_entities)
|
||||
end
|
||||
if _C.biter_drops.enabled then
|
||||
require 'map_gen.maps.danger_ores.modules.biter_drops'
|
||||
|
Loading…
x
Reference in New Issue
Block a user