103 lines
3.2 KiB
Lua

local searchDirection = { {-1,0}, { -1, -1 }, {0,-1}, {1,-1}, {1,0}, {1, 1}, {0,1}, {-1,1} }
local function railFromThing(entity,neg)
local x=entity.position.x+(neg*searchDirection[entity.direction+1][1])
local y=entity.position.y+(neg*searchDirection[entity.direction+1][2])
return entity.surface.find_entities( {{x-0.5,y-0.5},{x+0.5,y+0.5}});
end
script.on_event(defines.events.on_robot_built_entity, function(event)
local checkThis = false;
local negDir = 1;
local item = event.created_entity.name;
if( item == "train-stop-scrap" ) then
checkThis = true;
negDir = 1;
elseif( item == "rail-signal-scrap" or item=="rail-chain-signal-scrap" ) then
checkThis = true;
negDir = -1;
end
if checkThis then
local near_items = railFromThing( event.created_entity, negDir );
local valid = false;
for i=1, #near_items do
log( 'near item:'..near_items[i].name);
if near_items[i].name == "curved-scrap-rail" or near_items[i].name == "straight-scrap-rail" then
valid = true;
break;
end
end
if not valid then
--game.players[event.player_index].print({"invalid-rail-type"})
event.robot.insert( { name = item, count=1 } )
event.created_entity.destroy();
end
end
end)
script.on_event(defines.events.on_built_entity, function(event)
local item = event.created_entity.name;
--log( "event.created_neity:"..tostring( event.created_entity.valid ).. " name:"..
-- tostring(item.name).. " other:"..event.created_entity.name
-- .. " pos ".. event.created_entity.direction.. " "..event.created_entity.position.x .. ",".. event.created_entity.position.y );
local checkThis;
local negDir;
if( item.name == "blueprint" ) then
if( item.name == "train-stop-scrap" ) then
checkThis = true;
negDir = 1;
elseif( item.name=="rail-signal-scrap"
or item.name=="rail-chain-signal-scrap" ) then
checkThis = true;
negDir = -1;
end
if( checkThis ) then
local near_items = railFromThing( event.created_entity, negDir );
for i=1, #near_items do
if near_items[i].name == "entity-ghost" then
if near_items[i].ghost_name == "curved-scrap-rail" or near_items[i].ghost_name == "straight-scrap-rail" then
valid = true;
break;
end
elseif near_items[i].name == "curved-scrap-rail" or near_items[i].name == "straight-scrap-rail" then
valid = true;
break;
end
end
if not valid then
event.created_entity.destroy();
end
end
end
if( item.name == "train-stop-scrap" ) then
checkThis = true;
negDir = 1;
elseif( item.name=="rail-signal-scrap"
or item.name=="rail-chain-signal-scrap" ) then
checkThis = true;
negDir = -1;
end;
if( checkThis ) then
local near_items = railFromThing( event.created_entity, negDir );
local valid = false;
for i=1, #near_items do
if near_items[i].name == "curved-scrap-rail" or near_items[i].name == "straight-scrap-rail" then
valid = true;
break;
end
end
if not valid then
game.players[event.player_index].print({"invalid-rail-type-"..item.name})
if event.created_entity.name ~= "ghost-entity" then
game.players[event.player_index].insert( { name = item.name, count=1 } )
end
event.created_entity.destroy();
end
end
end)