diff --git a/map_gen/maps/danger_ores/compatibility/bob/allowed_entities.lua b/map_gen/maps/danger_ores/compatibility/bob/allowed_entities.lua deleted file mode 100644 index 60d29e0c..00000000 --- a/map_gen/maps/danger_ores/compatibility/bob/allowed_entities.lua +++ /dev/null @@ -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' -} diff --git a/map_gen/maps/danger_ores/compatibility/bob_angel/allowed_entities.lua b/map_gen/maps/danger_ores/compatibility/bob_angel/allowed_entities.lua deleted file mode 100644 index 02b940d0..00000000 --- a/map_gen/maps/danger_ores/compatibility/bob_angel/allowed_entities.lua +++ /dev/null @@ -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' -} diff --git a/map_gen/maps/danger_ores/compatibility/bz/allowed_entities.lua b/map_gen/maps/danger_ores/compatibility/bz/allowed_entities.lua deleted file mode 100644 index d28a2351..00000000 --- a/map_gen/maps/danger_ores/compatibility/bz/allowed_entities.lua +++ /dev/null @@ -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' -} \ No newline at end of file diff --git a/map_gen/maps/danger_ores/compatibility/exotic_industries/allowed_entities.lua b/map_gen/maps/danger_ores/compatibility/exotic_industries/allowed_entities.lua deleted file mode 100644 index 6dd8294d..00000000 --- a/map_gen/maps/danger_ores/compatibility/exotic_industries/allowed_entities.lua +++ /dev/null @@ -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', -} diff --git a/map_gen/maps/danger_ores/compatibility/industrial_revolution_3/allowed_entities.lua b/map_gen/maps/danger_ores/compatibility/industrial_revolution_3/allowed_entities.lua deleted file mode 100644 index 940f84a4..00000000 --- a/map_gen/maps/danger_ores/compatibility/industrial_revolution_3/allowed_entities.lua +++ /dev/null @@ -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', -} diff --git a/map_gen/maps/danger_ores/compatibility/krastorio2/allowed_entities.lua b/map_gen/maps/danger_ores/compatibility/krastorio2/allowed_entities.lua deleted file mode 100644 index 0b6a1326..00000000 --- a/map_gen/maps/danger_ores/compatibility/krastorio2/allowed_entities.lua +++ /dev/null @@ -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' -} \ No newline at end of file diff --git a/map_gen/maps/danger_ores/compatibility/omnimatter/allowed_entities.lua b/map_gen/maps/danger_ores/compatibility/omnimatter/allowed_entities.lua deleted file mode 100644 index 8ebc1c4e..00000000 --- a/map_gen/maps/danger_ores/compatibility/omnimatter/allowed_entities.lua +++ /dev/null @@ -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 diff --git a/map_gen/maps/danger_ores/compatibility/pyanodon/allowed_entities.lua b/map_gen/maps/danger_ores/compatibility/pyanodon/allowed_entities.lua deleted file mode 100644 index c0dff1e6..00000000 --- a/map_gen/maps/danger_ores/compatibility/pyanodon/allowed_entities.lua +++ /dev/null @@ -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', -} diff --git a/map_gen/maps/danger_ores/config/vanilla_allowed_entities.lua b/map_gen/maps/danger_ores/config/vanilla_allowed_entities.lua index 83121e58..66f4e6e5 100644 --- a/map_gen/maps/danger_ores/config/vanilla_allowed_entities.lua +++ b/map_gen/maps/danger_ores/config/vanilla_allowed_entities.lua @@ -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', -} \ No newline at end of file + ['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, +} diff --git a/map_gen/maps/danger_ores/configuration.lua b/map_gen/maps/danger_ores/configuration.lua index 82c94b07..5be1f987 100644 --- a/map_gen/maps/danger_ores/configuration.lua +++ b/map_gen/maps/danger_ores/configuration.lua @@ -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, diff --git a/map_gen/maps/danger_ores/modules/allowed_entities.lua b/map_gen/maps/danger_ores/modules/allowed_entities.lua new file mode 100644 index 00000000..9afb107a --- /dev/null +++ b/map_gen/maps/danger_ores/modules/allowed_entities.lua @@ -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 +---@field allowed_entities? table +---@field banned_entities? table +---@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 \ No newline at end of file diff --git a/map_gen/maps/danger_ores/presets/danger_ore_bob.lua b/map_gen/maps/danger_ores/presets/danger_ore_bob.lua index c80a5507..726e212f 100644 --- a/map_gen/maps/danger_ores/presets/danger_ore_bob.lua +++ b/map_gen/maps/danger_ores/presets/danger_ore_bob.lua @@ -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', diff --git a/map_gen/maps/danger_ores/presets/danger_ore_bob_angel.lua b/map_gen/maps/danger_ores/presets/danger_ore_bob_angel.lua index 602f52d2..7585da6e 100644 --- a/map_gen/maps/danger_ores/presets/danger_ore_bob_angel.lua +++ b/map_gen/maps/danger_ores/presets/danger_ore_bob_angel.lua @@ -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 diff --git a/map_gen/maps/danger_ores/presets/danger_ore_bz.lua b/map_gen/maps/danger_ores/presets/danger_ore_bz.lua index d2f4b05f..51ee0edb 100644 --- a/map_gen/maps/danger_ores/presets/danger_ore_bz.lua +++ b/map_gen/maps/danger_ores/presets/danger_ore_bz.lua @@ -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', diff --git a/map_gen/maps/danger_ores/presets/danger_ore_exotic_industries.lua b/map_gen/maps/danger_ores/presets/danger_ore_exotic_industries.lua index ddcc2aad..525feb82 100644 --- a/map_gen/maps/danger_ores/presets/danger_ore_exotic_industries.lua +++ b/map_gen/maps/danger_ores/presets/danger_ore_exotic_industries.lua @@ -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', diff --git a/map_gen/maps/danger_ores/presets/danger_ore_exotic_industries_spiral.lua b/map_gen/maps/danger_ores/presets/danger_ore_exotic_industries_spiral.lua index 7131004e..afe6292f 100644 --- a/map_gen/maps/danger_ores/presets/danger_ore_exotic_industries_spiral.lua +++ b/map_gen/maps/danger_ores/presets/danger_ore_exotic_industries_spiral.lua @@ -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', diff --git a/map_gen/maps/danger_ores/presets/danger_ore_industrial_revolution_3.lua b/map_gen/maps/danger_ores/presets/danger_ore_industrial_revolution_3.lua index 5665b469..03edee76 100644 --- a/map_gen/maps/danger_ores/presets/danger_ore_industrial_revolution_3.lua +++ b/map_gen/maps/danger_ores/presets/danger_ore_industrial_revolution_3.lua @@ -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', diff --git a/map_gen/maps/danger_ores/presets/danger_ore_industrial_revolution_3_grid_factory.lua b/map_gen/maps/danger_ores/presets/danger_ore_industrial_revolution_3_grid_factory.lua index e6b14ead..cb1316f9 100644 --- a/map_gen/maps/danger_ores/presets/danger_ore_industrial_revolution_3_grid_factory.lua +++ b/map_gen/maps/danger_ores/presets/danger_ore_industrial_revolution_3_grid_factory.lua @@ -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', diff --git a/map_gen/maps/danger_ores/presets/danger_ore_krastorio2.lua b/map_gen/maps/danger_ores/presets/danger_ore_krastorio2.lua index ffb181e9..f5cdc8e5 100644 --- a/map_gen/maps/danger_ores/presets/danger_ore_krastorio2.lua +++ b/map_gen/maps/danger_ores/presets/danger_ore_krastorio2.lua @@ -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', diff --git a/map_gen/maps/danger_ores/presets/danger_ore_omnimatter.lua b/map_gen/maps/danger_ores/presets/danger_ore_omnimatter.lua index e6a915ba..4269f8bd 100644 --- a/map_gen/maps/danger_ores/presets/danger_ore_omnimatter.lua +++ b/map_gen/maps/danger_ores/presets/danger_ore_omnimatter.lua @@ -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', diff --git a/map_gen/maps/danger_ores/presets/danger_ore_omnimatter_cages.lua b/map_gen/maps/danger_ores/presets/danger_ore_omnimatter_cages.lua index 7901ec5a..bea5726d 100644 --- a/map_gen/maps/danger_ores/presets/danger_ore_omnimatter_cages.lua +++ b/map_gen/maps/danger_ores/presets/danger_ore_omnimatter_cages.lua @@ -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', diff --git a/map_gen/maps/danger_ores/presets/danger_ore_pyfe.lua b/map_gen/maps/danger_ores/presets/danger_ore_pyfe.lua index 4cd9ffae..5f09cebd 100644 --- a/map_gen/maps/danger_ores/presets/danger_ore_pyfe.lua +++ b/map_gen/maps/danger_ores/presets/danger_ore_pyfe.lua @@ -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 diff --git a/map_gen/maps/danger_ores/scenario.lua b/map_gen/maps/danger_ores/scenario.lua index 02992583..7fce8093 100644 --- a/map_gen/maps/danger_ores/scenario.lua +++ b/map_gen/maps/danger_ores/scenario.lua @@ -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'