mirror of
https://github.com/Refactorio/RedMew.git
synced 2025-02-09 13:37:05 +02:00
Fixed upvalues
This commit is contained in:
parent
9b6a9784ba
commit
712d6bd006
@ -2,6 +2,8 @@ local floor = math.floor
|
|||||||
local RestrictEntities = require 'map_gen.shared.entity_placement_restriction'
|
local RestrictEntities = require 'map_gen.shared.entity_placement_restriction'
|
||||||
local Event = require 'utils.event'
|
local Event = require 'utils.event'
|
||||||
local b = require 'map_gen.shared.builders'
|
local b = require 'map_gen.shared.builders'
|
||||||
|
local Token = require 'utils.token'
|
||||||
|
local Color = require 'resources.color_presets'
|
||||||
|
|
||||||
local redmew_config = global.config
|
local redmew_config = global.config
|
||||||
|
|
||||||
@ -93,7 +95,7 @@ local entity_tiers = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
--Creates rich text icons of the tiered entities
|
--Creates rich text icons of the tiered entities
|
||||||
local tier_2_items = ""
|
local tier_2_items = ''
|
||||||
local tier_3_items = ''
|
local tier_3_items = ''
|
||||||
|
|
||||||
local tier_2_counter = 0
|
local tier_2_counter = 0
|
||||||
@ -108,7 +110,6 @@ for k, v in pairs(entity_tiers) do
|
|||||||
tier_2_counter = tier_2_counter + 1
|
tier_2_counter = tier_2_counter + 1
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
if tier_3_counter > 14 then
|
if tier_3_counter > 14 then
|
||||||
tier_3_counter = 0
|
tier_3_counter = 0
|
||||||
tier_3_items = tier_3_items .. '\n'
|
tier_3_items = tier_3_items .. '\n'
|
||||||
@ -118,7 +119,7 @@ for k, v in pairs(entity_tiers) do
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
local tile_tiers_entities = "You may only build the factory on:\n"
|
local tile_tiers_entities = 'You may only build the factory on:\n'
|
||||||
local tile_tiers_entities_counter = 0
|
local tile_tiers_entities_counter = 0
|
||||||
|
|
||||||
for k, _ in pairs(tile_tiers) do
|
for k, _ in pairs(tile_tiers) do
|
||||||
@ -131,8 +132,8 @@ for k, _ in pairs(tile_tiers) do
|
|||||||
end
|
end
|
||||||
|
|
||||||
ScenarioInfo.add_map_extra_info(
|
ScenarioInfo.add_map_extra_info(
|
||||||
tile_tiers_entities ..
|
tile_tiers_entities ..
|
||||||
[[
|
[[
|
||||||
|
|
||||||
|
|
||||||
Exceptions:
|
Exceptions:
|
||||||
@ -144,7 +145,7 @@ but some require better ground support!
|
|||||||
|
|
||||||
Ground support minimum concrete:
|
Ground support minimum concrete:
|
||||||
]] ..
|
]] ..
|
||||||
tier_2_items .. [[
|
tier_2_items .. [[
|
||||||
|
|
||||||
Ground support minimum refined concrete:
|
Ground support minimum refined concrete:
|
||||||
]] .. tier_3_items
|
]] .. tier_3_items
|
||||||
@ -152,44 +153,62 @@ Ground support minimum refined concrete:
|
|||||||
|
|
||||||
--- The logic for checking that there are the correct ground support under the entity's position
|
--- The logic for checking that there are the correct ground support under the entity's position
|
||||||
RestrictEntities.set_keep_alive_callback(
|
RestrictEntities.set_keep_alive_callback(
|
||||||
function(entity)
|
Token.register(
|
||||||
local get_tile = entity.surface.get_tile
|
function(entity)
|
||||||
local area = entity.bounding_box
|
local get_tile = entity.surface.get_tile
|
||||||
local left_top = area.left_top
|
local area = entity.bounding_box
|
||||||
local right_bottom = area.right_bottom
|
local left_top = area.left_top
|
||||||
local name = entity.name
|
local right_bottom = area.right_bottom
|
||||||
|
local name = entity.name
|
||||||
|
|
||||||
if name == 'entity-ghost' then
|
if name == 'entity-ghost' then
|
||||||
name = entity.ghost_name
|
name = entity.ghost_name
|
||||||
end
|
end
|
||||||
|
|
||||||
for x = floor(left_top.x), floor(right_bottom.x) do
|
for x = floor(left_top.x), floor(right_bottom.x) do
|
||||||
for y = floor(left_top.y), floor(right_bottom.y) do
|
for y = floor(left_top.y), floor(right_bottom.y) do
|
||||||
local tile_name = get_tile(x, y).name
|
local tile_name = get_tile(x, y).name
|
||||||
local tier = tile_tiers[tile_name]
|
local tier = tile_tiers[tile_name]
|
||||||
|
|
||||||
if not((entity_tiers[name] or 1) <= (tier or 0)) then
|
if not ((entity_tiers[name] or 1) <= (tier or 0)) then
|
||||||
return false
|
return false
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
return true
|
||||||
end
|
end
|
||||||
return true
|
)
|
||||||
end
|
|
||||||
)
|
)
|
||||||
|
|
||||||
|
local function print_floating_text(player, entity, text, color)
|
||||||
|
color = color or Color.white
|
||||||
|
local surface = player.surface
|
||||||
|
local position = entity.position
|
||||||
|
|
||||||
|
return surface.create_entity {
|
||||||
|
name = 'tutorial-flying-text',
|
||||||
|
color = color,
|
||||||
|
text = text,
|
||||||
|
position = position
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
--- Warning for players when their entities are destroyed (needs to be pre because of the stack)
|
--- Warning for players when their entities are destroyed (needs to be pre because of the stack)
|
||||||
local function on_destroy(event)
|
local function on_destroy(event)
|
||||||
local p = game.get_player(event.player_index)
|
local p = game.get_player(event.player_index)
|
||||||
local name = event.stack.name
|
local name = event.stack.name
|
||||||
if p and p.valid then
|
if p and p.valid then
|
||||||
if not (name == 'blueprint') then
|
if not (name == 'blueprint') then
|
||||||
local tier = 'stone path'
|
local entity = event.created_entity
|
||||||
|
local tier = '[tile=stone-path]'
|
||||||
if (entity_tiers[name] == 2) then
|
if (entity_tiers[name] == 2) then
|
||||||
tier = 'concrete'
|
tier = '[tile=concrete]'
|
||||||
elseif (entity_tiers[name] == 3) then
|
elseif (entity_tiers[name] == 3) then
|
||||||
tier = 'refined concrete'
|
tier = '[tile=refined-concrete]'
|
||||||
end
|
end
|
||||||
p.print('[color=yellow]This [/color][color=red]' .. name .. '[/color][color=yellow] cannot be placed here, it needs ground support of at least [/color][color=red]' .. tier .. '[/color]')
|
local text = 'Requires at least ' .. tier
|
||||||
|
--local text = '[color=yellow]This [/color][item=' .. name .. '][color=yellow] cannot be placed here, it needs ground support of at least [/color]' .. tier
|
||||||
|
print_floating_text(p, entity, text)
|
||||||
else
|
else
|
||||||
p.print('[color=yellow]Some parts of this [/color][color=red]blueprint[/color][color=yellow] cannot be placed here, they need better ground support![/color]')
|
p.print('[color=yellow]Some parts of this [/color][color=red]blueprint[/color][color=yellow] cannot be placed here, they need better ground support![/color]')
|
||||||
end
|
end
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
-- This module prevents all but the allowed items from being built on top of resources
|
-- This module prevents all but the allowed items from being built on top of resources
|
||||||
local RestrictEntities = require 'map_gen.shared.entity_placement_restriction'
|
local RestrictEntities = require 'map_gen.shared.entity_placement_restriction'
|
||||||
local Event = require 'utils.event'
|
local Event = require 'utils.event'
|
||||||
|
local Token = require 'utils.token'
|
||||||
|
|
||||||
--- Items explicitly allowed on ores
|
--- Items explicitly allowed on ores
|
||||||
RestrictEntities.add_allowed(
|
RestrictEntities.add_allowed(
|
||||||
@ -25,18 +26,20 @@ RestrictEntities.add_allowed(
|
|||||||
|
|
||||||
--- The logic for checking that there are resources under the entity's position
|
--- The logic for checking that there are resources under the entity's position
|
||||||
RestrictEntities.set_keep_alive_callback(
|
RestrictEntities.set_keep_alive_callback(
|
||||||
function(entity)
|
Token.register(
|
||||||
-- Some entities have a bounding_box area of zero, eg robots.
|
function(entity)
|
||||||
local area = entity.bounding_box
|
-- Some entities have a bounding_box area of zero, eg robots.
|
||||||
local left_top, right_bottom = area.left_top, area.right_bottom
|
local area = entity.bounding_box
|
||||||
if left_top.x == right_bottom.x and left_top.y == right_bottom.y then
|
local left_top, right_bottom = area.left_top, area.right_bottom
|
||||||
return true
|
if left_top.x == right_bottom.x and left_top.y == right_bottom.y then
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
local count = entity.surface.count_entities_filtered {area = area, type = 'resource', limit = 1}
|
||||||
|
if count == 0 then
|
||||||
|
return true
|
||||||
|
end
|
||||||
end
|
end
|
||||||
local count = entity.surface.count_entities_filtered {area = area, type = 'resource', limit = 1}
|
)
|
||||||
if count == 0 then
|
|
||||||
return true
|
|
||||||
end
|
|
||||||
end
|
|
||||||
)
|
)
|
||||||
|
|
||||||
--- Warning for players when their entities are destroyed
|
--- Warning for players when their entities are destroyed
|
||||||
|
@ -9,6 +9,8 @@
|
|||||||
This means you can use any custom logic you want to determine whether an entity should be destroyed or not.
|
This means you can use any custom logic you want to determine whether an entity should be destroyed or not.
|
||||||
The callback function is supplied a valid LuaEntity as an argument.
|
The callback function is supplied a valid LuaEntity as an argument.
|
||||||
A return of true indicates the entity should be kept alive, while false or nil indicate it should be destroyed.
|
A return of true indicates the entity should be kept alive, while false or nil indicate it should be destroyed.
|
||||||
|
This function must be a registered with the Token module and the keep_alive_callback function will take the Token-id as parameter
|
||||||
|
This is to prevent upvalue errors
|
||||||
|
|
||||||
Refunds for items that were placed can be toggled on or off via the enable and disable_refund functions
|
Refunds for items that were placed can be toggled on or off via the enable and disable_refund functions
|
||||||
|
|
||||||
@ -24,16 +26,18 @@
|
|||||||
-- The function provided does nothing but return nil
|
-- The function provided does nothing but return nil
|
||||||
-- every entity will be destroyed except those on the allowed list
|
-- every entity will be destroyed except those on the allowed list
|
||||||
RestrictEntities.add_allowed({'transport-belt'})
|
RestrictEntities.add_allowed({'transport-belt'})
|
||||||
RestrictEntities.set_keep_alive_callback(function() end)
|
RestrictEntities.set_keep_alive_callback(Token.register(function() end))
|
||||||
|
|
||||||
-- Danger ores (a lot of important code omitted for the sake of a brief example)
|
-- Danger ores (a lot of important code omitted for the sake of a brief example)
|
||||||
RestrictEntities.add_allowed({belts, power_poles, mining_drills, 'pumpjack'})
|
RestrictEntities.add_allowed({belts, power_poles, mining_drills, 'pumpjack'})
|
||||||
RestrictEntities.set_keep_alive_callback(
|
RestrictEntities.set_keep_alive_callback(
|
||||||
function(entity)
|
Token.register(
|
||||||
if entity.surface.count_entities_filtered {area = entity.bounding_box, type = 'resource', limit = 1} == 0 then
|
function(entity)
|
||||||
return true
|
if entity.surface.count_entities_filtered {area = entity.bounding_box, type = 'resource', limit = 1} == 0 then
|
||||||
|
return true
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
)
|
||||||
)
|
)
|
||||||
]]
|
]]
|
||||||
local Event = require 'utils.event'
|
local Event = require 'utils.event'
|
||||||
@ -132,7 +136,7 @@ local on_built_token =
|
|||||||
-- destroy in these cases:
|
-- destroy in these cases:
|
||||||
-- all banned ents
|
-- all banned ents
|
||||||
-- not banned and callback function and not saved by callback
|
-- not banned and callback function and not saved by callback
|
||||||
if not banned_entities[name] and (not keep_alive_callback or keep_alive_callback(entity)) then
|
if not banned_entities[name] and (not keep_alive_callback or Token.get(keep_alive_callback)(entity)) then
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -201,8 +205,8 @@ end
|
|||||||
-- logic on what entities should and should not be destroyed.
|
-- logic on what entities should and should not be destroyed.
|
||||||
-- @param keep_alive_callback <function>
|
-- @param keep_alive_callback <function>
|
||||||
function Public.set_keep_alive_callback(keep_alive_callback)
|
function Public.set_keep_alive_callback(keep_alive_callback)
|
||||||
if type(keep_alive_callback) ~= 'function' then
|
if type(keep_alive_callback) ~= 'number' then
|
||||||
error('Sending a non-function')
|
error('Sending a non-token function')
|
||||||
end
|
end
|
||||||
primitives.keep_alive_callback = keep_alive_callback
|
primitives.keep_alive_callback = keep_alive_callback
|
||||||
check_event_status()
|
check_event_status()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user