mirror of
https://github.com/PHIDIAS0303/ExpCluster.git
synced 2025-12-28 03:55:23 +09:00
102 lines
3.7 KiB
Lua
102 lines
3.7 KiB
Lua
-- made by cooldude
|
|
-- idea from Mylon - Dirt Path
|
|
|
|
local adjacency_boost = 10 -- makes paths more lickly to be next to each other
|
|
local placed_paths = {
|
|
['refined-concrete']=true,
|
|
['refined-hazard-concrete-right']=true,
|
|
['refined-hazard-concrete-left']=true,
|
|
['concrete']=true,
|
|
['hazard-concrete-right']=true,
|
|
['hazard-concrete-left']=true,
|
|
['stone-path']=true
|
|
}
|
|
local paths = {
|
|
-- ['tile name'] = {health,convert to}
|
|
-- health is the average number of steps in hundards before it changes
|
|
['refined-concrete']={40,'concrete'},
|
|
['refined-hazard-concrete-right']={40,'hazard-concrete-right'},
|
|
['refined-hazard-concrete-left']={40,'hazard-concrete-left'},
|
|
['concrete']={30,'stone-path'},
|
|
['hazard-concrete-right']={30,'stone-path'},
|
|
['hazard-concrete-left']={30,'stone-path'},
|
|
['stone-path']={25,'world-gen'}, -- world-gen just makes it pick the last tile not placed by a player
|
|
['sand-1']={1,'sand-2'},
|
|
['sand-2']={3,'sand-3'},
|
|
['sand-3']={1,'red-desert-3'},
|
|
['red-desert-3']={1,'red-desert-2'},
|
|
['red-desert-2']={3,'dirt-1'},
|
|
['grass-2']={1,'grass-1'},
|
|
['grass-1']={1,'grass-3'},
|
|
['grass-3']={3,'red-desert-0'},
|
|
['red-desert-0']={1,'red-desert-1'},
|
|
['red-desert-1']={3,'dirt-1'},
|
|
['dirt-1']={1,'dirt-2'},
|
|
['dirt-2']={1,'dirt-3'},
|
|
['dirt-3']={3,'dirt-4'},
|
|
['dirt-4']={1,'dirt-5'},
|
|
['dirt-5']={1,'dirt-6'},
|
|
['grass-4']={3,'dirt-4'}
|
|
}
|
|
for tile,value in pairs(paths) do
|
|
value[1]=1/(value[1]*125)
|
|
end
|
|
|
|
local function global_key(surface,pos)
|
|
return 'S'..surface.name..'X'..math.floor(pos.x)..'Y'..math.floor(pos.y)
|
|
end
|
|
|
|
local function down_grade(surface,pos)
|
|
local tile = surface.get_tile(pos).name
|
|
local new_tile = paths[tile][2]
|
|
if new_tile == 'world-gen' then
|
|
if global.paths == nil then global.paths = {} end -- nil as you can set to false to disable
|
|
new_tile = global.paths[global_key(surface,pos)] or 'grass-1'
|
|
end
|
|
surface.set_tiles{{name=new_tile,position=pos}}
|
|
end
|
|
|
|
Event.register(defines.events.on_player_built_tile, function(event)
|
|
local surface = game.surfaces[event.surface_index]
|
|
local old_tiles = event.tiles
|
|
for _,old_tile in pairs(old_tiles) do
|
|
if placed_paths[old_tile.old_tile.name] or old_tile.old_tile.name == 'water' or old_tile.old_tile.name == 'deep-water' then else
|
|
if global.paths == nil then global.paths = {} end -- nil as you can set to false to disable
|
|
global.paths[global_key(surface,old_tile.position)]=old_tile.old_tile.name
|
|
end
|
|
end
|
|
end)
|
|
|
|
Event.register(defines.events.on_player_changed_position, function(event)
|
|
local player = Game.get_player(event)
|
|
if player.afk_time > 300 then return end
|
|
local surface = player.surface
|
|
local pos = player.position
|
|
local tile_name = surface.get_tile(pos).name
|
|
if not paths[tile_name] then return end
|
|
local chance = paths[tile_name][1]
|
|
local count = 1
|
|
for x = -1,1 do for y = -1,1 do
|
|
local _pos = {pos.x+x,pos.y+y}
|
|
if paths[tile_name][2] == 'world-gen' and not placed_paths[surface.get_tile(_pos).name]
|
|
or surface.get_tile(_pos).name == paths[tile_name][2]
|
|
then chance=chance*(adjacency_boost/count) count=count+1 end
|
|
end end
|
|
if math.random() < chance then
|
|
down_grade(surface,pos)
|
|
end
|
|
end)
|
|
|
|
--[[
|
|
/interface
|
|
local tile_name = tile.name
|
|
local chance = paths[tile_name][1]
|
|
local count = 1
|
|
for x = -1,1 do for y = -1,1 do
|
|
local _pos = {position.x+x,position.y+y}
|
|
if paths[tile_name][2] == 'world-gen' and not placed_paths[surface.get_tile(_pos).name]
|
|
or surface.get_tile(_pos).name == paths[tile_name][2]
|
|
then game.print('boost '..tostring(count)) chance=chance=chance*(adjacency_boost/count) count=count+1 end end
|
|
end
|
|
return chance
|
|
]] |