diff --git a/band.lua b/band.lua index 8ec025f2..140dcdc3 100644 --- a/band.lua +++ b/band.lua @@ -6,6 +6,7 @@ -- SETTINGS local option_band_change_interval = 60 * 3 -- in ticks +if not global.band_last_change then global.band_last_change = {} end -- Role list: "band_roles.lua" local band_roles = require "band_roles" @@ -21,13 +22,14 @@ end local expand_band_gui -local band_last_change = -option_band_change_interval + -- store current role local local_role local function create_band_gui(event) - local player = game.players[event.player_index] + local player = game.players[event.player_index] + global.band_last_change[event.player_index] = game.tick if player.gui.top.band_toggle_btn == nil then local button = player.gui.top.add { name = "band_toggle_btn", type = "sprite-button", caption = "Tag", style = "dialog_button_style" } button.style.font = "default-bold" @@ -384,8 +386,8 @@ local function on_gui_click(event) --role button clicked if name:find("band_role_") == 1 then - if not player.admin and event.tick - band_last_change < option_band_change_interval then - player.print("Too fast! Please wait... " .. math.floor(1+(band_last_change + option_band_change_interval - event.tick)/60).." s.") + if not player.admin and event.tick - global.band_last_change[event.player_index] < option_band_change_interval then + player.print("Too fast! Please wait... " .. math.floor(1+(global.band_last_change[event.player_index] + option_band_change_interval - event.tick)/60).." s.") return end local _,role_ind_start = name:find("band_role_") @@ -398,7 +400,7 @@ local function on_gui_click(event) for role, role_icons in pairs(roles) do if (name_role == role) then - band_last_change = event.tick + global.band_last_change[event.player_index] = event.tick player.gui.top.band_toggle_btn.caption = "" player.gui.top.band_toggle_btn.sprite = event.element.sprite --get_random_from_table(role_icons) diff --git a/control.lua b/control.lua index f637aee0..a2444163 100644 --- a/control.lua +++ b/control.lua @@ -3,6 +3,7 @@ require "locale/utils/event" require "config" require "locale/utils/utils" require "base_data" +require "chatlog" require "info" require "player_list" require "poll" diff --git a/fish_market.lua b/fish_market.lua index 6f12af86..59118573 100644 --- a/fish_market.lua +++ b/fish_market.lua @@ -52,7 +52,7 @@ function market() market.destructible = false market.add_market_item{price={{"raw-fish", 10}}, offer={type="give-item", item="exoskeleton-equipment"}} - market.add_market_item{price={{"raw-fish", 25}}, offer={type="give-item", item="small-plane"}} + market.add_market_item{price={{"raw-fish", 30}}, offer={type="give-item", item="small-plane"}} market.add_market_item{price={{"raw-fish", 1}}, offer={type="give-item", item="rail", count=2}} market.add_market_item{price={{"raw-fish", 2}}, offer={type="give-item", item="rail-signal"}} market.add_market_item{price={{"raw-fish", 2}}, offer={type="give-item", item="rail-chain-signal"}} @@ -319,6 +319,7 @@ local function on_tick(event) end end +--[[ function help() local infotext = global.player_pets[1].entity.help() player = game.players[1] @@ -343,6 +344,7 @@ function help() text_box.style.left_padding = 5 text_box.style.bottom_padding = 5 end +--]] Event.register(defines.events.on_preplayer_mined_item, preplayer_mined_item) Event.register(defines.events.on_entity_died, fish_drop_entity_died) diff --git a/info.lua b/info.lua index 3b8acd68..57cd78b4 100644 --- a/info.lua +++ b/info.lua @@ -22,12 +22,17 @@ Hi stranger, I'm a fish.. And this is what you ought to know: - Please be nice and don't grief. + - Fix personal confrontations diplomatically. + - No political, racist, or misogynistic content. + - If you suspect you desync while connecting, close and relaunch Factorio ASAP. Very bad for us. -- Join our community on discord.me/redmew + +- Join our community on https://discord.gg/gKyDpQE for questions and feedback. Also on /r/redmew (reddit) + - You can contribute to server costs and upgrades with bitcoin: 13qh5uJh3UDUiWKyQaybkpxC1gfLVDB1ww ]===] diff --git a/map_layout.lua b/map_layout.lua index 96562c73..7a9bd32c 100644 --- a/map_layout.lua +++ b/map_layout.lua @@ -11,52 +11,40 @@ notes: --]] require "perlin_noise" -require "shapes" -Spiral.width=6 -Spiral.size=2 -Spiral.build() perlin:load( ) -if not global.perlin_noise_seed then global.perlin_noise_seed = math.random(1000,1000000) end -local map_styles = {} -map_styles = { + +local map_styles = { up = false, -right = false, +right = true, square = false, circle = false, +rivers = false, +resource_rainbow = true, red_planet = false, +red_planet_2 = false, +red_planet_2_messy_resources = false, dagobah_swamp = false, grey_void = false, resource_cluster_truck = false, perlin_01 = false, -perlin_02 = false, -spiral = true +perlin_02 = false } -if map_styles.red_planet == true or map_styles.dagobah_swamp == true then +--if map_styles.red_planet == true or map_styles.red_planet_2 == true or map_styles.dagobah_swamp == true then wreck_item_pool = {} wreck_item_pool = {{name="iron-gear-wheel", count=32},{name="iron-plate", count=64},{name="rocket-control-unit", count=1} ,{name="coal", count=4},{name="rocket-launcher", count=1},{name="rocket", count=32},{name="copper-cable", count=128},{name="land-mine", count=64},{name="railgun", count=1},{name="railgun-dart", count=128},{name="fast-inserter", count=8},{name="stack-filter-inserter", count=2},{name="belt-immunity-equipment", count=1},{name="fusion-reactor-equipment", count=1},{name="electric-engine-unit", count=8},{name="exoskeleton-equipment", count=1},{name="rocket-fuel", count=10},{name="used-up-uranium-fuel-cell", count=3},{name="uranium-fuel-cell", count=2}} -end - -local function removeChunk(event) - local tiles = {} - for x = event.area.left_top.x, event.area.right_bottom.x do - for y = event.area.left_top.y, event.area.right_bottom.y do - table.insert(tiles, {name = "out-of-map", position = {x,y}}) - end - end - event.surface.set_tiles(tiles) -end +--end local function place_entities(surface, entity_list) - local directions = {defines.direction.north, defines.direction.east, defines.direction.south, defines.direction.west} - for _, entity in pairs(entity_list) do - local r = math.random(1,entity.chance) + local directions = {defines.direction.north, defines.direction.east, defines.direction.south, defines.direction.west} + for _, entity in pairs(entity_list) do + local r = math.random(1,entity.chance) if r == 1 then if not entity.force then entity.force = "player" end - local r = math.random(1,4) - if surface.can_place_entity {name=entity.name, position=entity.pos, direction=directions[r], force=entity.force} then + local r = math.random(1,4) + if surface.can_place_entity {name=entity.name, position=entity.pos, direction=directions[r], force=entity.force} then local e = surface.create_entity {name=entity.name, position=entity.pos, direction=directions[r], force=entity.force} if entity.health then if entity.health == "low" then e.health = ((e.health / 1000) * math.random(33,330)) end @@ -65,8 +53,8 @@ local function place_entities(surface, entity_list) if entity.health == "random" then e.health = ((e.health / 1000) * math.random(1,1000)) end end return true, e - end - end + end + end end return false end @@ -79,17 +67,17 @@ local function auto_place_entity_around_target(entity, scan_radius, mode, densit if not entity then return end if not mode then mode = "ball" end if not density then density = 1 end - - if surface.can_place_entity {name=entity.name, position={x,y}} then + + if surface.can_place_entity {name=entity.name, position={x,y}} then local e = surface.create_entity {name=entity.name, position={x,y}} return true, e end - + local i = 2 - local r = 1 - + local r = 1 + if mode == "ball" then - if math.random(1,2) == 1 then + if math.random(1,2) == 1 then density = density * -1 end r = math.random(1,4) @@ -109,178 +97,178 @@ local function auto_place_entity_around_target(entity, scan_radius, mode, densit if mode == "block" then r = 1 density = 1 - end - + end + if r == 1 then --start placing at -1,-1 while i <= scan_radius do - y = y - density - x = x - density - for a = 1, i, 1 do - if surface.can_place_entity {name=entity.name, position={x,y}} then + y = y - density + x = x - density + for a = 1, i, 1 do + if surface.can_place_entity {name=entity.name, position={x,y}} then local e = surface.create_entity {name=entity.name, position={x,y}} return true, e end x = x + density - end - for a = 1, i, 1 do - if surface.can_place_entity {name=entity.name, position={x,y}} then + end + for a = 1, i, 1 do + if surface.can_place_entity {name=entity.name, position={x,y}} then local e = surface.create_entity {name=entity.name, position={x,y}} return true, e end y = y + density - end - for a = 1, i, 1 do - if surface.can_place_entity {name=entity.name, position={x,y}} then + end + for a = 1, i, 1 do + if surface.can_place_entity {name=entity.name, position={x,y}} then local e = surface.create_entity {name=entity.name, position={x,y}} return true, e end x = x - density - end - for a = 1, i, 1 do - if surface.can_place_entity {name=entity.name, position={x,y}} then + end + for a = 1, i, 1 do + if surface.can_place_entity {name=entity.name, position={x,y}} then local e = surface.create_entity {name=entity.name, position={x,y}} return true, e end y = y - density - end + end i = i + 2 end end - + if r == 2 then --start placing at 0,-1 while i <= scan_radius do - y = y - density + y = y - density x = x - density for a = 1, i, 1 do x = x + density - if surface.can_place_entity {name=entity.name, position={x,y}} then + if surface.can_place_entity {name=entity.name, position={x,y}} then local e = surface.create_entity {name=entity.name, position={x,y}} return true, e end - end + end for a = 1, i, 1 do y = y + density - if surface.can_place_entity {name=entity.name, position={x,y}} then + if surface.can_place_entity {name=entity.name, position={x,y}} then local e = surface.create_entity {name=entity.name, position={x,y}} return true, e end - end + end for a = 1, i, 1 do x = x - density - if surface.can_place_entity {name=entity.name, position={x,y}} then + if surface.can_place_entity {name=entity.name, position={x,y}} then local e = surface.create_entity {name=entity.name, position={x,y}} return true, e end - end + end for a = 1, i, 1 do y = y - density - if surface.can_place_entity {name=entity.name, position={x,y}} then + if surface.can_place_entity {name=entity.name, position={x,y}} then local e = surface.create_entity {name=entity.name, position={x,y}} return true, e end - end + end i = i + 2 end end - + if r == 3 then --start placing at 1,-1 while i <= scan_radius do - y = y - density - x = x + density - for a = 1, i, 1 do - if surface.can_place_entity {name=entity.name, position={x,y}} then + y = y - density + x = x + density + for a = 1, i, 1 do + if surface.can_place_entity {name=entity.name, position={x,y}} then local e = surface.create_entity {name=entity.name, position={x,y}} return true, e end y = y + density - end - for a = 1, i, 1 do - if surface.can_place_entity {name=entity.name, position={x,y}} then + end + for a = 1, i, 1 do + if surface.can_place_entity {name=entity.name, position={x,y}} then local e = surface.create_entity {name=entity.name, position={x,y}} return true, e end x = x - density - end - for a = 1, i, 1 do - if surface.can_place_entity {name=entity.name, position={x,y}} then + end + for a = 1, i, 1 do + if surface.can_place_entity {name=entity.name, position={x,y}} then local e = surface.create_entity {name=entity.name, position={x,y}} return true, e end y = y - density end - for a = 1, i, 1 do - if surface.can_place_entity {name=entity.name, position={x,y}} then + for a = 1, i, 1 do + if surface.can_place_entity {name=entity.name, position={x,y}} then local e = surface.create_entity {name=entity.name, position={x,y}} return true, e end x = x + density - end + end i = i + 2 end end - + if r == 4 then --start placing at 1,0 while i <= scan_radius do y = y - density - x = x + density + x = x + density for a = 1, i, 1 do y = y + density - if surface.can_place_entity {name=entity.name, position={x,y}} then + if surface.can_place_entity {name=entity.name, position={x,y}} then local e = surface.create_entity {name=entity.name, position={x,y}} return true, e end - end + end for a = 1, i, 1 do x = x - density - if surface.can_place_entity {name=entity.name, position={x,y}} then + if surface.can_place_entity {name=entity.name, position={x,y}} then local e = surface.create_entity {name=entity.name, position={x,y}} return true, e end - end + end for a = 1, i, 1 do y = y - density - if surface.can_place_entity {name=entity.name, position={x,y}} then + if surface.can_place_entity {name=entity.name, position={x,y}} then local e = surface.create_entity {name=entity.name, position={x,y}} return true, e end end for a = 1, i, 1 do x = x + density - if surface.can_place_entity {name=entity.name, position={x,y}} then + if surface.can_place_entity {name=entity.name, position={x,y}} then local e = surface.create_entity {name=entity.name, position={x,y}} return true, e end - end + end i = i + 2 end end - + return false end local function create_entitie_cluster(name, pos, amount) - - local surface = game.surfaces[1] - local entity = {} + + local surface = game.surfaces[1] + local entity = {} entity.pos = pos entity.name = name local mode = "ball" - + for i = 1, amount, 1 do local b, e = auto_place_entity_around_target(entity, 30, mode) if b == true then if 1 == math.random(1,40) then entity.pos = e.position - end + end if e.type == "resource" then e.amount = math.random(500,1500) - end + end end - end + end return b, e end @@ -291,20 +279,20 @@ local function create_rock_cluster(pos, amount) local mode = "line_down" if math.random(1,2) == 1 then mode = "line_up" end local entity = {} - entity.pos = pos + entity.pos = pos for i = 1, amount, 1 do if 1 == math.random(1,3) then entity.name = "red-desert-rock-huge-01" else entity.name = "red-desert-rock-big-01" - end + end local b, e = auto_place_entity_around_target(entity, scan_radius, mode) if b == true then if 1 ~= math.random(1,20) then entity.pos = e.position - end + end end - end + end return b, e end @@ -312,28 +300,28 @@ local function create_tree_cluster(pos, amount) if not pos then return false end if amount == nil then amount = 7 end local scan_radius = amount * 2 - --local mode = "line_down" + --local mode = "line_down" --if math.random(1,2) == 1 then mode = "line_up" end local mode = "ball" local entity = {} - entity.pos = pos + entity.pos = pos for i = 1, amount, 1 do entity.name = "tree-06" local density = 2 - if 1 == math.random(1,20) then entity.name = "tree-07" end + if 1 == math.random(1,20) then entity.name = "tree-07" end if 1 == math.random(1,70) then entity.name = "tree-09" end if 1 == math.random(1,10) then entity.name = "tree-04" end if 1 == math.random(1,9) then density = 1 end if 1 == math.random(1,3) then density = 3 end if 1 == math.random(1,3) then density = 4 end - + local b, e = auto_place_entity_around_target(entity, scan_radius, mode, density) if b == true then if 1 == math.random(1,3) then entity.pos = e.position - end + end end - end + end return b, e end @@ -347,19 +335,19 @@ local function find_tile_placement_spot_around_target_position(tilename, positio if not density then density = 1 end local cluster_tiles = {} local auto_correct = false - + local scanned_tile = surface.get_tile(x,y) if scanned_tile.name ~= tilename then table.insert(cluster_tiles, {name = tilename, position = {x,y}}) surface.set_tiles(cluster_tiles,false) return true, x, y end - + local i = 2 - local r = 1 - + local r = 1 + if mode == "ball" then - if math.random(1,2) == 1 then + if math.random(1,2) == 1 then density = density * -1 end r = math.random(1,4) @@ -379,170 +367,170 @@ local function find_tile_placement_spot_around_target_position(tilename, positio if mode == "block" then r = 1 density = 1 - end - + end + if r == 1 then --start placing at -1,-1 while i <= scan_radius do - y = y - density - x = x - density - for a = 1, i, 1 do - local scanned_tile = surface.get_tile(x,y) - if scanned_tile.name ~= tilename then + y = y - density + x = x - density + for a = 1, i, 1 do + local scanned_tile = surface.get_tile(x,y) + if scanned_tile.name ~= tilename then table.insert(cluster_tiles, {name = tilename, position = {x,y}}) surface.set_tiles(cluster_tiles,auto_correct) return true, x, y end x = x + density - end - for a = 1, i, 1 do + end + for a = 1, i, 1 do local scanned_tile = surface.get_tile(x,y) - if scanned_tile.name ~= tilename then + if scanned_tile.name ~= tilename then table.insert(cluster_tiles, {name = tilename, position = {x,y}}) surface.set_tiles(cluster_tiles,auto_correct) return true, x, y end y = y + density - end - for a = 1, i, 1 do + end + for a = 1, i, 1 do local scanned_tile = surface.get_tile(x,y) - if scanned_tile.name ~= tilename then + if scanned_tile.name ~= tilename then table.insert(cluster_tiles, {name = tilename, position = {x,y}}) surface.set_tiles(cluster_tiles,auto_correct) return true, x, y end x = x - density - end - for a = 1, i, 1 do + end + for a = 1, i, 1 do local scanned_tile = surface.get_tile(x,y) - if scanned_tile.name ~= tilename then + if scanned_tile.name ~= tilename then table.insert(cluster_tiles, {name = tilename, position = {x,y}}) surface.set_tiles(cluster_tiles,auto_correct) return true, x, y end y = y - density - end + end i = i + 2 end end - + if r == 2 then --start placing at 0,-1 while i <= scan_radius do - y = y - density + y = y - density x = x - density for a = 1, i, 1 do x = x + density local scanned_tile = surface.get_tile(x,y) - if scanned_tile.name ~= tilename then + if scanned_tile.name ~= tilename then table.insert(cluster_tiles, {name = tilename, position = {x,y}}) surface.set_tiles(cluster_tiles,auto_correct) return true, x, y end - end + end for a = 1, i, 1 do y = y + density local scanned_tile = surface.get_tile(x,y) - if scanned_tile.name ~= tilename then + if scanned_tile.name ~= tilename then table.insert(cluster_tiles, {name = tilename, position = {x,y}}) surface.set_tiles(cluster_tiles,auto_correct) return true, x, y end - end + end for a = 1, i, 1 do x = x - density local scanned_tile = surface.get_tile(x,y) - if scanned_tile.name ~= tilename then + if scanned_tile.name ~= tilename then table.insert(cluster_tiles, {name = tilename, position = {x,y}}) surface.set_tiles(cluster_tiles,auto_correct) return true, x, y end - end + end for a = 1, i, 1 do y = y - density local scanned_tile = surface.get_tile(x,y) - if scanned_tile.name ~= tilename then + if scanned_tile.name ~= tilename then table.insert(cluster_tiles, {name = tilename, position = {x,y}}) surface.set_tiles(cluster_tiles,auto_correct) return true, x, y end - end + end i = i + 2 end end - + if r == 3 then --start placing at 1,-1 while i <= scan_radius do - y = y - density - x = x + density - for a = 1, i, 1 do + y = y - density + x = x + density + for a = 1, i, 1 do local scanned_tile = surface.get_tile(x,y) - if scanned_tile.name ~= tilename then + if scanned_tile.name ~= tilename then table.insert(cluster_tiles, {name = tilename, position = {x,y}}) surface.set_tiles(cluster_tiles,auto_correct) return true, x, y end y = y + density - end - for a = 1, i, 1 do + end + for a = 1, i, 1 do local scanned_tile = surface.get_tile(x,y) - if scanned_tile.name ~= tilename then + if scanned_tile.name ~= tilename then table.insert(cluster_tiles, {name = tilename, position = {x,y}}) surface.set_tiles(cluster_tiles,auto_correct) return true, x, y end x = x - density - end - for a = 1, i, 1 do + end + for a = 1, i, 1 do local scanned_tile = surface.get_tile(x,y) - if scanned_tile.name ~= tilename then + if scanned_tile.name ~= tilename then table.insert(cluster_tiles, {name = tilename, position = {x,y}}) surface.set_tiles(cluster_tiles,auto_correct) return true, x, y end y = y - density end - for a = 1, i, 1 do + for a = 1, i, 1 do local scanned_tile = surface.get_tile(x,y) - if scanned_tile.name ~= tilename then + if scanned_tile.name ~= tilename then table.insert(cluster_tiles, {name = tilename, position = {x,y}}) surface.set_tiles(cluster_tiles,auto_correct) return true, x, y end x = x + density - end + end i = i + 2 end end - + if r == 4 then --start placing at 1,0 while i <= scan_radius do y = y - density - x = x + density + x = x + density for a = 1, i, 1 do y = y + density local scanned_tile = surface.get_tile(x,y) - if scanned_tile.name ~= tilename then + if scanned_tile.name ~= tilename then table.insert(cluster_tiles, {name = tilename, position = {x,y}}) surface.set_tiles(cluster_tiles,auto_correct) return true, x, y end - end + end for a = 1, i, 1 do x = x - density local scanned_tile = surface.get_tile(x,y) - if scanned_tile.name ~= tilename then + if scanned_tile.name ~= tilename then table.insert(cluster_tiles, {name = tilename, position = {x,y}}) surface.set_tiles(cluster_tiles,auto_correct) return true, x, y end - end + end for a = 1, i, 1 do y = y - density local scanned_tile = surface.get_tile(x,y) - if scanned_tile.name ~= tilename then + if scanned_tile.name ~= tilename then table.insert(cluster_tiles, {name = tilename, position = {x,y}}) surface.set_tiles(cluster_tiles,auto_correct) return true, x, y @@ -551,15 +539,15 @@ local function find_tile_placement_spot_around_target_position(tilename, positio for a = 1, i, 1 do x = x + density local scanned_tile = surface.get_tile(x,y) - if scanned_tile.name ~= tilename then + if scanned_tile.name ~= tilename then table.insert(cluster_tiles, {name = tilename, position = {x,y}}) surface.set_tiles(cluster_tiles,auto_correct) return true, x, y end - end + end i = i + 2 end - end + end return false end @@ -572,199 +560,876 @@ local function create_tile_cluster(tilename,position,amount) local y = pos.y for i = 1, amount, 1 do local b,x,y = find_tile_placement_spot_around_target_position(tilename, pos, mode) - if b == true then + if b == true then if 1 == math.random(1,2) then pos.x = x pos.y = y - end + end end if b == false then return false,x,y end if i >= amount then return true,x,y end - end + end end -local function on_chunk_generated(event) - - if map_styles.spiral == true then - if Spiral.onshape({event.area.left_top.x, event.area.left_top.y}) then - removeChunk(event) - end - end - - if map_styles.perlin_02 == true then - local seed = global.perlin_noise_seed - local surface = game.surfaces[1] - local tiles = {} - local void_tiles = {} - local entities = surface.find_entities(event.area) - for _, entity in pairs(entities) do - if entity.type ~= "player" then +local function on_chunk_generated(event) + + if map_styles.resource_rainbow == true then + + if not global.perlin_noise_seed then global.perlin_noise_seed = math.random(1000,1000000) end + local seed = global.perlin_noise_seed + local entities = event.surface.find_entities(event.area) + for _, entity in pairs(entities) do + if entity.type == "resource" and entity.name ~= "crude-oil" then entity.destroy() - end + end end + + local width_modifier = 0.8 for x = 0, 31, 1 do - for y = 0, 31, 1 do + for y = 0, 31, 1 do + local pos_x = event.area.left_top.x + x + local pos_y = event.area.left_top.y + y + local noise_terrain_1 = perlin:noise(((pos_x+seed)/350),((pos_y+seed)/350),0) + local noise_terrain_2 = perlin:noise(((pos_x+seed)/50),((pos_y+seed)/50),0) + local noise_terrain = noise_terrain_1 + (noise_terrain_2 * 0.01) + + if noise_terrain > -0.1 * width_modifier and noise_terrain <= -0.075 * width_modifier then + local a = pos_x + local b = pos_y + local c = 1 + if event.area.right_bottom.x < 0 then a = event.area.right_bottom.x * -1 end + if event.area.right_bottom.y < 0 then b = event.area.right_bottom.y * -1 end + if a > b then c = a else c = b end + local resource_amount_distance_multiplicator = (((c + 1) / 75) / 75) + 1 + local noise_resource_amount_modifier = perlin:noise(((pos_x+seed)/200),((pos_y+seed)/200),0) + local resource_amount = 1 + ((700 + (700*noise_resource_amount_modifier*0.2)) * resource_amount_distance_multiplicator) + if event.surface.can_place_entity {name="iron-ore", position={pos_x,pos_y}} then + event.surface.create_entity {name="iron-ore", position={pos_x,pos_y}, amount=resource_amount} + end + end + if noise_terrain > -0.075 * width_modifier and noise_terrain <= -0.05 * width_modifier then + local a = pos_x + local b = pos_y + local c = 1 + if event.area.right_bottom.x < 0 then a = event.area.right_bottom.x * -1 end + if event.area.right_bottom.y < 0 then b = event.area.right_bottom.y * -1 end + if a > b then c = a else c = b end + local resource_amount_distance_multiplicator = (((c + 1) / 75) / 75) + 1 + local noise_resource_amount_modifier = perlin:noise(((pos_x+seed)/200),((pos_y+seed)/200),0) + local resource_amount = 1 + ((400 + (400*noise_resource_amount_modifier*0.2)) * resource_amount_distance_multiplicator) + if event.surface.can_place_entity {name="copper-ore", position={pos_x,pos_y}} then + event.surface.create_entity {name="copper-ore", position={pos_x,pos_y}, amount=resource_amount} + end + end + if noise_terrain > -0.05 * width_modifier and noise_terrain <= -0.04 * width_modifier then + local a = pos_x + local b = pos_y + local c = 1 + if event.area.right_bottom.x < 0 then a = event.area.right_bottom.x * -1 end + if event.area.right_bottom.y < 0 then b = event.area.right_bottom.y * -1 end + if a > b then c = a else c = b end + local resource_amount_distance_multiplicator = (((c + 1) / 75) / 75) + 1 + local noise_resource_amount_modifier = perlin:noise(((pos_x+seed)/200),((pos_y+seed)/200),0) + local resource_amount = 1 + ((400 + (400*noise_resource_amount_modifier*0.2)) * resource_amount_distance_multiplicator) + if event.surface.can_place_entity {name="stone", position={pos_x,pos_y}} then + event.surface.create_entity {name="stone", position={pos_x,pos_y}, amount=resource_amount} + end + end + if noise_terrain > -0.04 * width_modifier and noise_terrain <= -0.03 * width_modifier then + local a = pos_x + local b = pos_y + local c = 1 + if event.area.right_bottom.x < 0 then a = event.area.right_bottom.x * -1 end + if event.area.right_bottom.y < 0 then b = event.area.right_bottom.y * -1 end + if a > b then c = a else c = b end + local resource_amount_distance_multiplicator = (((c + 1) / 75) / 75) + 1 + local noise_resource_amount_modifier = perlin:noise(((pos_x+seed)/200),((pos_y+seed)/200),0) + local resource_amount = 1 + ((400 + (400*noise_resource_amount_modifier*0.2)) * resource_amount_distance_multiplicator) + if event.surface.can_place_entity {name="coal", position={pos_x,pos_y}} then + event.surface.create_entity {name="coal", position={pos_x,pos_y}, amount=resource_amount} + end + end + if noise_terrain > -0.03 * width_modifier and noise_terrain <= -0.02 * width_modifier then + local a = pos_x + local b = pos_y + local c = 1 + if event.area.right_bottom.x < 0 then a = event.area.right_bottom.x * -1 end + if event.area.right_bottom.y < 0 then b = event.area.right_bottom.y * -1 end + if a > b then c = a else c = b end + local resource_amount_distance_multiplicator = (((c + 1) / 75) / 75) + 1 + local noise_resource_amount_modifier = perlin:noise(((pos_x+seed)/200),((pos_y+seed)/200),0) + local resource_amount = 1 + ((400 + (400*noise_resource_amount_modifier*0.2)) * resource_amount_distance_multiplicator) + if event.surface.can_place_entity {name="uranium-ore", position={pos_x,pos_y}} then + event.surface.create_entity {name="uranium-ore", position={pos_x,pos_y}, amount=resource_amount} + end + end + + end + end + end + + if map_styles.red_planet_2_messy_resources == true then + + if not global.perlin_noise_seed then global.perlin_noise_seed = math.random(1000,1000000) end + + --787460 + local surface = game.surfaces[1] + local tiles = {} + local decoratives = {} + local tree_to_place = {"dry-tree","dry-hairy-tree","tree-06","tree-06","tree-01","tree-02","tree-03"} + local ore = {"iron-ore","coal","copper-ore","stone"} + local entities = surface.find_entities(event.area) + for _, entity in pairs(entities) do + if entity.type == "simple-entity" or entity.type == "resource" or entity.type == "tree" then + entity.destroy() + end + end + + for x = 0, 31, 1 do + for y = 0, 31, 1 do local pos_x = event.area.left_top.x + x local pos_y = event.area.left_top.y + y - table.insert(void_tiles, {name = "concrete", position = {pos_x,pos_y}}) - local tile = surface.get_tile(pos_x,pos_y) + local tile = surface.get_tile(pos_x,pos_y) local tile_to_insert = "concrete" + + local a = pos_x + local b = pos_y + local c = 1 + if event.area.right_bottom.x < 0 then a = event.area.right_bottom.x * -1 end + if event.area.right_bottom.y < 0 then b = event.area.right_bottom.y * -1 end + if a > b then c = a else c = b end + local resource_amount_distance_multiplicator = (((c + 1) / 75) / 75) + 1 + local resource_entity_placed = false + + local entity_list = {} + table.insert(entity_list, {name="big-ship-wreck-1", pos={pos_x,pos_y},chance = 75000, health="random"}) + table.insert(entity_list, {name="big-ship-wreck-2", pos={pos_x,pos_y},chance = 75000, health="random"}) + table.insert(entity_list, {name="big-ship-wreck-3", pos={pos_x,pos_y},chance = 75000, health="random"}) + table.insert(entity_list, {name="medium-ship-wreck", pos={pos_x,pos_y},chance = 50000, health="medium"}) + table.insert(entity_list, {name="small-ship-wreck", pos={pos_x,pos_y},chance = 25000, health="medium"}) + table.insert(entity_list, {name="car", pos={pos_x,pos_y},chance = 250000, health="low"}) + table.insert(entity_list, {name="laser-turret", pos={pos_x,pos_y},chance = 250000, force="enemy", health="low"}) + table.insert(entity_list, {name="nuclear-reactor", pos={pos_x,pos_y},chance = 1000000, force="enemy", health="medium"}) + local b, placed_entity = place_entities(surface, entity_list) + if b == true then + if placed_entity.name == "big-ship-wreck-1" or placed_entity.name == "big-ship-wreck-2" or placed_entity.name == "big-ship-wreck-3" then + placed_entity.insert(wreck_item_pool[math.random(1,#wreck_item_pool)]) + placed_entity.insert(wreck_item_pool[math.random(1,#wreck_item_pool)]) + placed_entity.insert(wreck_item_pool[math.random(1,#wreck_item_pool)]) + end + end + + local seed_increment_number = 10000 + local seed = global.perlin_noise_seed + + local noise_terrain_1 = perlin:noise(((pos_x+seed)/400),((pos_y+seed)/400),0) + noise_terrain_1 = noise_terrain_1 * 100 + seed = seed + seed_increment_number + local noise_terrain_2 = perlin:noise(((pos_x+seed)/250),((pos_y+seed)/250),0) + noise_terrain_2 = noise_terrain_2 * 100 + seed = seed + seed_increment_number + local noise_terrain_3 = perlin:noise(((pos_x+seed)/100),((pos_y+seed)/100),0) + noise_terrain_3 = noise_terrain_3 * 50 + seed = seed + seed_increment_number + local noise_terrain_4 = perlin:noise(((pos_x+seed)/20),((pos_y+seed)/20),0) + noise_terrain_4 = noise_terrain_4 * 10 + seed = seed + seed_increment_number + local noise_terrain_5 = perlin:noise(((pos_x+seed)/5),((pos_y+seed)/5),0) + noise_terrain_5 = noise_terrain_5 * 4 + seed = seed + seed_increment_number + local noise_sand = perlin:noise(((pos_x+seed)/18),((pos_y+seed)/18),0) + noise_sand = noise_sand * 10 + + --DECORATIVES + seed = seed + seed_increment_number + local noise_decoratives_1 = perlin:noise(((pos_x+seed)/20),((pos_y+seed)/20),0) + noise_decoratives_1 = noise_decoratives_1 + seed = seed + seed_increment_number + local noise_decoratives_2 = perlin:noise(((pos_x+seed)/30),((pos_y+seed)/30),0) + noise_decoratives_2 = noise_decoratives_2 + seed = seed + seed_increment_number + local noise_decoratives_3 = perlin:noise(((pos_x+seed)/30),((pos_y+seed)/30),0) + noise_decoratives_3 = noise_decoratives_3 + + + seed = seed + seed_increment_number + local noise_water_1 = perlin:noise(((pos_x+seed)/250),((pos_y+seed)/300),0) + noise_water_1 = noise_water_1 * 100 + seed = seed + seed_increment_number + local noise_water_2 = perlin:noise(((pos_x+seed)/100),((pos_y+seed)/150),0) + noise_water_2 = noise_water_2 * 50 + + --RESOURCES + seed = seed + seed_increment_number + local noise_resources = perlin:noise(((pos_x+seed)/40),((pos_y+seed)/40),0) + seed = seed + seed_increment_number + local noise_resources_2 = perlin:noise(((pos_x+seed)/150),((pos_y+seed)/150),0) + seed = seed + seed_increment_number + local noise_resources_3 = perlin:noise(((pos_x+seed)/20),((pos_y+seed)/20),0) + seed = seed + seed_increment_number + local noise_resources_4 = perlin:noise(((pos_x+seed)/20),((pos_y+seed)/20),0) + noise_resources_2 = noise_resources_2 + (noise_resources_3 * 0.2) + noise_resources = noise_resources * 100 + noise_resources_4 = noise_resources_4 * 20 + + seed = seed + seed_increment_number + local noise_resource_amount_modifier = perlin:noise(((pos_x+seed)/200),((pos_y+seed)/200),0) + local resource_amount = 1 + ((400 + (400*noise_resource_amount_modifier*0.2)) * resource_amount_distance_multiplicator) + seed = seed + seed_increment_number + local noise_resources_iron_and_copper = perlin:noise(((pos_x+seed)/100),((pos_y+seed)/100),0) + noise_resources_iron_and_copper = noise_resources_iron_and_copper * 100 + seed = seed + seed_increment_number + local noise_resources_coal_and_uranium = perlin:noise(((pos_x+seed)/50),((pos_y+seed)/50),0) + noise_resources_coal_and_uranium = noise_resources_coal_and_uranium * 100 + seed = seed + seed_increment_number + local noise_resources_stone_and_oil = perlin:noise(((pos_x+seed)/150),((pos_y+seed)/150),0) + noise_resources_stone_and_oil = noise_resources_stone_and_oil * 100 - --if tile.name ~= "water" and tile.name ~= "deepwater" then - local noise_terrain_1 = perlin:noise(((pos_x+seed)/500),((pos_y+seed)/500),0) - noise_terrain_1 = noise_terrain_1 * 100 - local noise_terrain_2 = perlin:noise(((pos_x+seed+40000)/250),((pos_y+seed+40000)/250),0) - noise_terrain_2 = noise_terrain_2 * 50 - local noise_terrain_3 = perlin:noise(((pos_x+seed+50000)/50),((pos_y+seed+50000)/50),0) - noise_terrain_3 = noise_terrain_3 * 50 - local noise_terrain_4 = perlin:noise(((pos_x+seed+50000)/20),((pos_y+seed+70000)/20),0) - noise_terrain_4 = noise_terrain_4 * 10 - local noise_terrain_5 = perlin:noise(((pos_x+seed+50000)/5),((pos_y+seed+70000)/5),0) - noise_terrain_5 = noise_terrain_5 * 10 - local noise_red_desert_rocks = perlin:noise(((pos_x+seed+100000)/10),((pos_y+seed+100000)/10),0) - noise_red_desert_rocks = noise_red_desert_rocks * 100 - local p3 = perlin:noise(((pos_x+seed+200000)/10),((pos_y+seed+200000)/10),0) - p3 = p3 * 100 - local noise_forest = perlin:noise(((pos_x+seed+300000)/100),((pos_y+seed+300000)/100),0) - noise_forest = noise_forest * 100 - - local terrain_smoothing = math.random(0,1) - - if noise_terrain_1 < 8 + terrain_smoothing + noise_terrain_2 + noise_terrain_3 + noise_terrain_4 then - tile_to_insert = "red-desert" - - if noise_terrain_1 < -75 + noise_terrain_2 + noise_terrain_5 then - tile_to_insert = "water" - local a = pos_x + 1 - table.insert(tiles, {name = tile_to_insert, position = {a,pos_y}}) - local a = pos_y + 1 - table.insert(tiles, {name = tile_to_insert, position = {pos_x,a}}) - local a = pos_x - 1 - table.insert(tiles, {name = tile_to_insert, position = {a,pos_y}}) - local a = pos_y - 1 - table.insert(tiles, {name = tile_to_insert, position = {pos_x,a}}) + seed = seed + seed_increment_number + local noise_red_desert_rocks_1 = perlin:noise(((pos_x+seed)/20),((pos_y+seed)/20),0) + noise_red_desert_rocks_1 = noise_red_desert_rocks_1 * 100 + seed = seed + seed_increment_number + local noise_red_desert_rocks_2 = perlin:noise(((pos_x+seed)/10),((pos_y+seed)/10),0) + noise_red_desert_rocks_2 = noise_red_desert_rocks_2 * 50 + seed = seed + seed_increment_number + local noise_red_desert_rocks_3 = perlin:noise(((pos_x+seed)/5),((pos_y+seed)/5),0) + noise_red_desert_rocks_3 = noise_red_desert_rocks_3 * 100 + seed = seed + seed_increment_number + local noise_forest = perlin:noise(((pos_x+seed)/100),((pos_y+seed)/100),0) + noise_forest = noise_forest * 100 + seed = seed + seed_increment_number + local noise_forest_2 = perlin:noise(((pos_x+seed)/20),((pos_y+seed)/20),0) + noise_forest_2 = noise_forest_2 * 20 + + local terrain_smoothing = math.random(0,1) + local place_tree_number + + if noise_terrain_1 < 8 + terrain_smoothing + noise_terrain_2 + noise_terrain_3 + noise_terrain_4 then + tile_to_insert = "red-desert" + if noise_water_1 + noise_water_2 + noise_sand > -10 and noise_water_1 + noise_water_2 + noise_sand < 25 and noise_terrain_1 < -52 + noise_terrain_2 + noise_terrain_3 + noise_terrain_4 + noise_terrain_5 then + tile_to_insert = "sand" + place_tree_number = math.random(3,#tree_to_place) + else + place_tree_number = math.random(1,(#tree_to_place - 3)) + end + + if noise_water_1 + noise_water_2 > 0 and noise_water_1 + noise_water_2 < 15 and noise_terrain_1 < -60 + noise_terrain_2 + noise_terrain_3 + noise_terrain_4 + noise_terrain_5 then + tile_to_insert = "water" + local a = pos_x + 1 + table.insert(tiles, {name = tile_to_insert, position = {a,pos_y}}) + local a = pos_y + 1 + table.insert(tiles, {name = tile_to_insert, position = {pos_x,a}}) + local a = pos_x - 1 + table.insert(tiles, {name = tile_to_insert, position = {a,pos_y}}) + local a = pos_y - 1 + table.insert(tiles, {name = tile_to_insert, position = {pos_x,a}}) + if noise_water_1 + noise_water_2 < 2 or noise_water_1 + noise_water_2 > 13 then + if math.random(1,15) == 1 then + table.insert(decoratives, {name="green-carpet-grass", position={pos_x,pos_y}, amount=1}) + end + if math.random(1,15) == 1 then + table.insert(decoratives, {name="brown-cane-cluster", position={pos_x,pos_y}, amount=1}) + end + end + end + + if tile_to_insert ~= "water" then + if noise_water_1 + noise_water_2 > 16 and noise_water_1 + noise_water_2 < 25 and noise_terrain_1 < -55 + noise_terrain_2 + noise_terrain_3 + noise_terrain_4 + noise_terrain_5 then + if math.random(1,35) == 1 then + table.insert(decoratives, {name="brown-carpet-grass", position={pos_x,pos_y}, amount=1}) + end end - - if noise_terrain_1 < -5 then - if noise_forest > 0 and noise_forest <= 10 then - if math.random(1,50) == 1 then - if surface.can_place_entity {name="dry-tree", position={pos_x,pos_y}} then - surface.create_entity {name="dry-tree", position={pos_x,pos_y}} - end - end - end - if noise_forest > 10 and noise_forest <= 20 then - if math.random(1,25) == 1 then - if surface.can_place_entity {name="dry-tree", position={pos_x,pos_y}} then - surface.create_entity {name="dry-tree", position={pos_x,pos_y}} - end - end - end - if noise_forest > 20 then - if math.random(1,10) == 1 then - if surface.can_place_entity {name="dry-tree", position={pos_x,pos_y}} then - surface.create_entity {name="dry-tree", position={pos_x,pos_y}} - end + if noise_water_1 + noise_water_2 > -10 and noise_water_1 + noise_water_2 < -1 and noise_terrain_1 < -55 + noise_terrain_2 + noise_terrain_3 + noise_terrain_4 + noise_terrain_5 then + if math.random(1,35) == 1 then + table.insert(decoratives, {name="brown-carpet-grass", position={pos_x,pos_y}, amount=1}) + end + end + if noise_decoratives_1 > 0.5 and noise_decoratives_1 <= 0.8 then + if math.random(1,12) == 1 then table.insert(decoratives, {name="red-desert-bush", position={pos_x,pos_y}, amount=1}) end + end + if noise_decoratives_1 > 0.4 and noise_decoratives_1 <= 0.5 then + if math.random(1,4) == 1 then table.insert(decoratives, {name="red-desert-bush", position={pos_x,pos_y}, amount=1}) end + end + end + + --HAPPY TREES + if noise_terrain_1 < -30 + noise_terrain_2 + noise_terrain_3 + noise_terrain_5 + noise_forest_2 then + if noise_forest > 0 and noise_forest <= 10 then + if math.random(1,50) == 1 then + if surface.can_place_entity {name=tree_to_place[place_tree_number], position={pos_x,pos_y}} then + surface.create_entity {name=tree_to_place[place_tree_number], position={pos_x,pos_y}} end end end - else - tile_to_insert = "red-desert-dark" - - if noise_red_desert_rocks > 20 and noise_terrain_1 > -2 + terrain_smoothing + noise_terrain_2 + noise_terrain_3 then - if math.random(1,3) == 1 then - if surface.can_place_entity {name="red-desert-rock-huge-01", position={pos_x,pos_y}} then - surface.create_entity {name="red-desert-rock-huge-01", position={pos_x,pos_y}} + if noise_forest > 10 and noise_forest <= 20 then + if math.random(1,25) == 1 then + if surface.can_place_entity {name=tree_to_place[place_tree_number], position={pos_x,pos_y}} then + surface.create_entity {name=tree_to_place[place_tree_number], position={pos_x,pos_y}} end - else - if surface.can_place_entity {name="red-desert-rock-big-01", position={pos_x,pos_y}} then - surface.create_entity {name="red-desert-rock-big-01", position={pos_x,pos_y}} + end + end + if noise_forest > 20 then + if math.random(1,10) == 1 then + if surface.can_place_entity {name=tree_to_place[place_tree_number], position={pos_x,pos_y}} then + surface.create_entity {name=tree_to_place[place_tree_number], position={pos_x,pos_y}} end end end end - --else - -- if tile.name == "water" then tile_to_insert = "water" end - -- if tile.name == "deepwater" then tile_to_insert = "deepwater" end - --end + + if tile_to_insert ~= "water" then + if noise_terrain_1 < 8 + noise_terrain_2 + noise_terrain_3 + noise_terrain_4 and noise_terrain_1 > -5 + noise_terrain_2 + noise_terrain_3 + noise_terrain_4 then + if math.random(1,45) == 1 then + table.insert(decoratives, {name="red-desert-rock-medium", position={pos_x,pos_y}, amount=1}) + end + if math.random(1,20) == 1 then + table.insert(decoratives, {name="red-desert-rock-tiny", position={pos_x,pos_y}, amount=1}) + end + else + if math.random(1,375) == 1 then + table.insert(decoratives, {name="red-desert-rock-medium", position={pos_x,pos_y}, amount=1}) + end + if math.random(1,45) == 1 then + table.insert(decoratives, {name="red-desert-rock-tiny", position={pos_x,pos_y}, amount=1}) + end + end + end + else + tile_to_insert = "red-desert-dark" + end + if resource_entity_placed == false and noise_resources_iron_and_copper + noise_resources > 92 and noise_terrain_1 > 15 + noise_terrain_2 + noise_terrain_3 + noise_terrain_4 + noise_resources_4 then + if surface.can_place_entity {name="uranium-ore", position={pos_x,pos_y}} then + surface.create_entity {name="uranium-ore", position={pos_x,pos_y}, amount=resource_amount} + resource_entity_placed = true + end + end + + local a = 1 + local b = 90 + for i = 1, 32, 1 do + if a == 5 then a = 1 end + if resource_entity_placed == false and noise_resources_iron_and_copper + noise_resources > b and noise_terrain_1 > 15 + noise_terrain_2 + noise_terrain_3 + noise_terrain_4 + noise_resources_4 then + if surface.can_place_entity {name=ore[a], position={pos_x,pos_y}} then + surface.create_entity {name=ore[a], position={pos_x,pos_y}, amount=resource_amount} + resource_entity_placed = true + end + end + b = b - 2 + a = a + 1 + end + + if resource_entity_placed == false and noise_resources_stone_and_oil + noise_resources < -70 and noise_terrain_1 < -50 + noise_terrain_2 + noise_terrain_3 + noise_terrain_4 then + if math.random(1,42) == 1 then + if surface.can_place_entity {name="crude-oil", position={pos_x,pos_y}} then + surface.create_entity {name="crude-oil", position={pos_x,pos_y}, amount=(resource_amount*500)} + resource_entity_placed = true + end + end + end + + if resource_entity_placed == false and noise_red_desert_rocks_1 + noise_red_desert_rocks_2 + noise_red_desert_rocks_3 > 20 and noise_red_desert_rocks_1 + noise_red_desert_rocks_2 < 60 and noise_terrain_1 > 7 + noise_terrain_2 + noise_terrain_3 + noise_terrain_4 then + if math.random(1,3) == 1 then + if math.random(1,3) == 1 then + if surface.can_place_entity {name="red-desert-rock-huge-01", position={pos_x,pos_y}} then + surface.create_entity {name="red-desert-rock-huge-01", position={pos_x,pos_y}} + end + else + if surface.can_place_entity {name="red-desert-rock-big-01", position={pos_x,pos_y}} then + surface.create_entity {name="red-desert-rock-big-01", position={pos_x,pos_y}} + end + end + end + end + + if noise_red_desert_rocks_1 + noise_red_desert_rocks_2 + noise_red_desert_rocks_3 + noise_terrain_4 >= 10 and noise_red_desert_rocks_1 + noise_red_desert_rocks_2 + noise_red_desert_rocks_3 < 20 and noise_terrain_1 > 7 + noise_terrain_2 + noise_terrain_3 + noise_terrain_4 then + if math.random(1,5) == 1 then + table.insert(decoratives, {name="red-desert-rock-medium", position={pos_x,pos_y}, amount=1}) + end + else + if tile_to_insert ~= "water" and tile_to_insert ~= "sand" then + if math.random(1,15) == 1 then + table.insert(decoratives, {name="red-desert-rock-small", position={pos_x,pos_y}, amount=1}) + else + if math.random(1,8) == 1 then + table.insert(decoratives, {name="red-desert-rock-tiny", position={pos_x,pos_y}, amount=1}) + end + end + end + end + if tile_to_insert ~= "water" then + if noise_decoratives_2 > 0.6 then + if math.random(1,9) == 1 then table.insert(decoratives, {name="red-asterisk", position={pos_x,pos_y}, amount=1}) end + else + if noise_decoratives_2 > 0.4 then + if math.random(1,17) == 1 then table.insert(decoratives, {name="red-asterisk", position={pos_x,pos_y}, amount=1}) end + end + end + if noise_decoratives_3 < -0.6 then + if math.random(1,2) == 1 then table.insert(decoratives, {name="brown-fluff-dry", position={pos_x,pos_y}, amount=1}) end + else + if noise_decoratives_3 < -0.4 then + if math.random(1,5) == 1 then table.insert(decoratives, {name="brown-fluff-dry", position={pos_x,pos_y}, amount=1}) end + end + end + end table.insert(tiles, {name = tile_to_insert, position = {pos_x,pos_y}}) end end - --surface.set_tiles(void_tiles,false) + surface.set_tiles(tiles,true) - --surface.set_tiles(tiles,true) - + for _,deco in pairs(decoratives) do + surface.create_decoratives{check_collision=false, decoratives={deco}} + end end - - if map_styles.perlin_01 == true then - local seed = global.perlin_noise_seed + + if map_styles.red_planet_2 == true then + if not global.perlin_noise_seed then global.perlin_noise_seed = math.random(1000,1000000) end + local surface = game.surfaces[1] local tiles = {} - local entities = event.surface.find_entities(event.area) - for _, entity in pairs(entities) do - if entity.type ~= "player" then + local decoratives = {} + local tree_to_place = {"dry-tree","dry-hairy-tree","tree-06","tree-06","tree-01","tree-02","tree-03"} + local entities = surface.find_entities(event.area) + for _, entity in pairs(entities) do + if entity.type == "simple-entity" or entity.type == "resource" or entity.type == "tree" then entity.destroy() - end + end end - local entity_list = {} + for x = 0, 31, 1 do - for y = 0, 31, 1 do + for y = 0, 31, 1 do local pos_x = event.area.left_top.x + x local pos_y = event.area.left_top.y + y - local p = perlin:noise(((pos_x+seed)/10),((pos_y+seed)/10),0) - p = round((p * 100),0) + 50 - if p < 55 then table.insert(tiles, {name = "concrete", position = {pos_x,pos_y}}) end - if p >= 55 then table.insert(tiles, {name = "stone-path", position = {pos_x,pos_y}}) end - if p >= 56 and p <= 80 then - if event.surface.can_place_entity {name="stone-wall", position={pos_x,pos_y}} then - event.surface.create_entity {name="stone-wall", position={pos_x,pos_y}} + local tile = surface.get_tile(pos_x,pos_y) + local tile_to_insert = "concrete" + + local a = pos_x + local b = pos_y + local c = 1 + if event.area.right_bottom.x < 0 then a = event.area.right_bottom.x * -1 end + if event.area.right_bottom.y < 0 then b = event.area.right_bottom.y * -1 end + if a > b then c = a else c = b end + local resource_amount_distance_multiplicator = (((c + 1) / 75) / 75) + 1 + local resource_entity_placed = false + + local entity_list = {} + table.insert(entity_list, {name="big-ship-wreck-1", pos={pos_x,pos_y},chance = 65000, health="random"}) + table.insert(entity_list, {name="big-ship-wreck-2", pos={pos_x,pos_y},chance = 65000, health="random"}) + table.insert(entity_list, {name="big-ship-wreck-3", pos={pos_x,pos_y},chance = 65000, health="random"}) + table.insert(entity_list, {name="medium-ship-wreck", pos={pos_x,pos_y},chance = 25000, health="medium"}) + table.insert(entity_list, {name="small-ship-wreck", pos={pos_x,pos_y},chance = 15000, health="medium"}) + table.insert(entity_list, {name="car", pos={pos_x,pos_y},chance = 150000, health="low"}) + table.insert(entity_list, {name="laser-turret", pos={pos_x,pos_y},chance = 100000, force="enemy", health="low"}) + table.insert(entity_list, {name="nuclear-reactor", pos={pos_x,pos_y},chance = 1000000, force="enemy", health="medium"}) + local b, placed_entity = place_entities(surface, entity_list) + if b == true then + if placed_entity.name == "big-ship-wreck-1" or placed_entity.name == "big-ship-wreck-2" or placed_entity.name == "big-ship-wreck-3" then + placed_entity.insert(wreck_item_pool[math.random(1,#wreck_item_pool)]) + placed_entity.insert(wreck_item_pool[math.random(1,#wreck_item_pool)]) + placed_entity.insert(wreck_item_pool[math.random(1,#wreck_item_pool)]) + end + end + + local seed_increment_number = 10000 + local seed = global.perlin_noise_seed + + local noise_terrain_1 = perlin:noise(((pos_x+seed)/400),((pos_y+seed)/400),0) + noise_terrain_1 = noise_terrain_1 * 100 + seed = seed + seed_increment_number + local noise_terrain_2 = perlin:noise(((pos_x+seed)/250),((pos_y+seed)/250),0) + noise_terrain_2 = noise_terrain_2 * 100 + seed = seed + seed_increment_number + local noise_terrain_3 = perlin:noise(((pos_x+seed)/100),((pos_y+seed)/100),0) + noise_terrain_3 = noise_terrain_3 * 50 + seed = seed + seed_increment_number + local noise_terrain_4 = perlin:noise(((pos_x+seed)/20),((pos_y+seed)/20),0) + noise_terrain_4 = noise_terrain_4 * 10 + seed = seed + seed_increment_number + local noise_terrain_5 = perlin:noise(((pos_x+seed)/5),((pos_y+seed)/5),0) + noise_terrain_5 = noise_terrain_5 * 4 + seed = seed + seed_increment_number + local noise_sand = perlin:noise(((pos_x+seed)/18),((pos_y+seed)/18),0) + noise_sand = noise_sand * 10 + + --DECORATIVES + seed = seed + seed_increment_number + local noise_decoratives_1 = perlin:noise(((pos_x+seed)/20),((pos_y+seed)/20),0) + noise_decoratives_1 = noise_decoratives_1 + seed = seed + seed_increment_number + local noise_decoratives_2 = perlin:noise(((pos_x+seed)/30),((pos_y+seed)/30),0) + noise_decoratives_2 = noise_decoratives_2 + seed = seed + seed_increment_number + local noise_decoratives_3 = perlin:noise(((pos_x+seed)/30),((pos_y+seed)/30),0) + noise_decoratives_3 = noise_decoratives_3 + + + seed = seed + seed_increment_number + local noise_water_1 = perlin:noise(((pos_x+seed)/250),((pos_y+seed)/300),0) + noise_water_1 = noise_water_1 * 100 + seed = seed + seed_increment_number + local noise_water_2 = perlin:noise(((pos_x+seed)/100),((pos_y+seed)/150),0) + noise_water_2 = noise_water_2 * 50 + + --RESOURCES + seed = seed + seed_increment_number + local noise_resources = perlin:noise(((pos_x+seed)/100),((pos_y+seed)/100),0) + seed = seed + seed_increment_number + local noise_resources_2 = perlin:noise(((pos_x+seed)/40),((pos_y+seed)/40),0) + seed = seed + seed_increment_number + local noise_resources_3 = perlin:noise(((pos_x+seed)/20),((pos_y+seed)/20),0) + noise_resources = noise_resources * 50 + noise_resources_2 * 20 + noise_resources_3 * 20 + noise_resources = noise_resources_2 * 100 + + seed = seed + seed_increment_number + local noise_resource_amount_modifier = perlin:noise(((pos_x+seed)/200),((pos_y+seed)/200),0) + local resource_amount = 1 + ((400 + (400*noise_resource_amount_modifier*0.2)) * resource_amount_distance_multiplicator) + seed = seed + seed_increment_number + local noise_resources_iron_and_copper = perlin:noise(((pos_x+seed)/250),((pos_y+seed)/250),0) + noise_resources_iron_and_copper = noise_resources_iron_and_copper * 100 + seed = seed + seed_increment_number + local noise_resources_coal_and_uranium = perlin:noise(((pos_x+seed)/250),((pos_y+seed)/250),0) + noise_resources_coal_and_uranium = noise_resources_coal_and_uranium * 100 + seed = seed + seed_increment_number + local noise_resources_stone_and_oil = perlin:noise(((pos_x+seed)/150),((pos_y+seed)/150),0) + noise_resources_stone_and_oil = noise_resources_stone_and_oil * 100 + + seed = seed + seed_increment_number + local noise_red_desert_rocks_1 = perlin:noise(((pos_x+seed)/20),((pos_y+seed)/20),0) + noise_red_desert_rocks_1 = noise_red_desert_rocks_1 * 100 + seed = seed + seed_increment_number + local noise_red_desert_rocks_2 = perlin:noise(((pos_x+seed)/10),((pos_y+seed)/10),0) + noise_red_desert_rocks_2 = noise_red_desert_rocks_2 * 50 + seed = seed + seed_increment_number + local noise_red_desert_rocks_3 = perlin:noise(((pos_x+seed)/5),((pos_y+seed)/5),0) + noise_red_desert_rocks_3 = noise_red_desert_rocks_3 * 100 + seed = seed + seed_increment_number + local noise_forest = perlin:noise(((pos_x+seed)/100),((pos_y+seed)/100),0) + noise_forest = noise_forest * 100 + seed = seed + seed_increment_number + local noise_forest_2 = perlin:noise(((pos_x+seed)/20),((pos_y+seed)/20),0) + noise_forest_2 = noise_forest_2 * 20 + + local terrain_smoothing = math.random(0,1) + local place_tree_number + + if noise_terrain_1 < 8 + terrain_smoothing + noise_terrain_2 + noise_terrain_3 + noise_terrain_4 then + tile_to_insert = "red-desert" + if noise_water_1 + noise_water_2 + noise_sand > -10 and noise_water_1 + noise_water_2 + noise_sand < 25 and noise_terrain_1 < -52 + noise_terrain_2 + noise_terrain_3 + noise_terrain_4 + noise_terrain_5 then + tile_to_insert = "sand" + place_tree_number = math.random(3,#tree_to_place) + else + place_tree_number = math.random(1,(#tree_to_place - 3)) + end + + if noise_water_1 + noise_water_2 > 0 and noise_water_1 + noise_water_2 < 15 and noise_terrain_1 < -60 + noise_terrain_2 + noise_terrain_3 + noise_terrain_4 + noise_terrain_5 then + tile_to_insert = "water" + local a = pos_x + 1 + table.insert(tiles, {name = tile_to_insert, position = {a,pos_y}}) + local a = pos_y + 1 + table.insert(tiles, {name = tile_to_insert, position = {pos_x,a}}) + local a = pos_x - 1 + table.insert(tiles, {name = tile_to_insert, position = {a,pos_y}}) + local a = pos_y - 1 + table.insert(tiles, {name = tile_to_insert, position = {pos_x,a}}) + if noise_water_1 + noise_water_2 < 2 or noise_water_1 + noise_water_2 > 13 then + if math.random(1,15) == 1 then + table.insert(decoratives, {name="green-carpet-grass", position={pos_x,pos_y}, amount=1}) + end + if math.random(1,15) == 1 then + table.insert(decoratives, {name="brown-cane-cluster", position={pos_x,pos_y}, amount=1}) + end + end + end + + if tile_to_insert ~= "water" then + if noise_water_1 + noise_water_2 > 16 and noise_water_1 + noise_water_2 < 25 and noise_terrain_1 < -55 + noise_terrain_2 + noise_terrain_3 + noise_terrain_4 + noise_terrain_5 then + if math.random(1,35) == 1 then + table.insert(decoratives, {name="brown-carpet-grass", position={pos_x,pos_y}, amount=1}) + end + end + if noise_water_1 + noise_water_2 > -10 and noise_water_1 + noise_water_2 < -1 and noise_terrain_1 < -55 + noise_terrain_2 + noise_terrain_3 + noise_terrain_4 + noise_terrain_5 then + if math.random(1,35) == 1 then + table.insert(decoratives, {name="brown-carpet-grass", position={pos_x,pos_y}, amount=1}) + end + end + if noise_decoratives_1 > 0.5 and noise_decoratives_1 <= 0.8 then + if math.random(1,12) == 1 then table.insert(decoratives, {name="red-desert-bush", position={pos_x,pos_y}, amount=1}) end + end + if noise_decoratives_1 > 0.4 and noise_decoratives_1 <= 0.5 then + if math.random(1,4) == 1 then table.insert(decoratives, {name="red-desert-bush", position={pos_x,pos_y}, amount=1}) end + end + end + + --HAPPY TREES + if noise_terrain_1 < -30 + noise_terrain_2 + noise_terrain_3 + noise_terrain_5 + noise_forest_2 then + if noise_forest > 0 and noise_forest <= 10 then + if math.random(1,50) == 1 then + if surface.can_place_entity {name=tree_to_place[place_tree_number], position={pos_x,pos_y}} then + surface.create_entity {name=tree_to_place[place_tree_number], position={pos_x,pos_y}} + end + end + end + if noise_forest > 10 and noise_forest <= 20 then + if math.random(1,25) == 1 then + if surface.can_place_entity {name=tree_to_place[place_tree_number], position={pos_x,pos_y}} then + surface.create_entity {name=tree_to_place[place_tree_number], position={pos_x,pos_y}} + end + end + end + if noise_forest > 20 then + if math.random(1,10) == 1 then + if surface.can_place_entity {name=tree_to_place[place_tree_number], position={pos_x,pos_y}} then + surface.create_entity {name=tree_to_place[place_tree_number], position={pos_x,pos_y}} + end + end end end - if p >= 99 and p < 100 then - if event.surface.can_place_entity {name="accumulator", position={pos_x,pos_y}} then - event.surface.create_entity {name="accumulator", position={pos_x,pos_y}} + + if tile_to_insert ~= "water" then + if noise_terrain_1 < 8 + noise_terrain_2 + noise_terrain_3 + noise_terrain_4 and noise_terrain_1 > -5 + noise_terrain_2 + noise_terrain_3 + noise_terrain_4 then + if math.random(1,45) == 1 then + table.insert(decoratives, {name="red-desert-rock-medium", position={pos_x,pos_y}, amount=1}) + end + if math.random(1,20) == 1 then + table.insert(decoratives, {name="red-desert-rock-tiny", position={pos_x,pos_y}, amount=1}) + end + else + if math.random(1,375) == 1 then + table.insert(decoratives, {name="red-desert-rock-medium", position={pos_x,pos_y}, amount=1}) + end + if math.random(1,45) == 1 then + table.insert(decoratives, {name="red-desert-rock-tiny", position={pos_x,pos_y}, amount=1}) + end + end + end + else + tile_to_insert = "red-desert-dark" + end + if resource_entity_placed == false and noise_resources_coal_and_uranium + noise_resources < -72 and noise_terrain_1 > 65 + noise_terrain_2 + noise_terrain_3 + noise_terrain_4 then + if surface.can_place_entity {name="uranium-ore", position={pos_x,pos_y}} then + surface.create_entity {name="uranium-ore", position={pos_x,pos_y}, amount=resource_amount} + resource_entity_placed = true + end + end + if resource_entity_placed == false and noise_resources_iron_and_copper + noise_resources > 72 and noise_terrain_1 > 15 + noise_terrain_2 + noise_terrain_3 + noise_terrain_4 then + if surface.can_place_entity {name="iron-ore", position={pos_x,pos_y}} then + surface.create_entity {name="iron-ore", position={pos_x,pos_y}, amount=resource_amount} + resource_entity_placed = true + end + end + if resource_entity_placed == false and noise_resources_coal_and_uranium + noise_resources > 70 and noise_terrain_1 > 15 + noise_terrain_2 + noise_terrain_3 + noise_terrain_4 then + if surface.can_place_entity {name="coal", position={pos_x,pos_y}} then + surface.create_entity {name="coal", position={pos_x,pos_y}, amount=resource_amount} + resource_entity_placed = true + end + end + if resource_entity_placed == false and noise_resources_iron_and_copper + noise_resources < -72 and noise_terrain_1 > 15 + noise_terrain_2 + noise_terrain_3 + noise_terrain_4 then + if surface.can_place_entity {name="copper-ore", position={pos_x,pos_y}} then + surface.create_entity {name="copper-ore", position={pos_x,pos_y}, amount=resource_amount} + resource_entity_placed = true + end + end + if resource_entity_placed == false and noise_resources_stone_and_oil + noise_resources > 72 and noise_terrain_1 > 15 + noise_terrain_2 + noise_terrain_3 + noise_terrain_4 then + if surface.can_place_entity {name="stone", position={pos_x,pos_y}} then + surface.create_entity {name="stone", position={pos_x,pos_y}, amount=resource_amount} + resource_entity_placed = true + end + end + if resource_entity_placed == false and noise_resources_stone_and_oil + noise_resources < -70 and noise_terrain_1 < -50 + noise_terrain_2 + noise_terrain_3 + noise_terrain_4 then + if math.random(1,42) == 1 then + if surface.can_place_entity {name="crude-oil", position={pos_x,pos_y}} then + surface.create_entity {name="crude-oil", position={pos_x,pos_y}, amount=(resource_amount*500)} + resource_entity_placed = true + end + end + end + + if resource_entity_placed == false and noise_red_desert_rocks_1 + noise_red_desert_rocks_2 + noise_red_desert_rocks_3 > 20 and noise_red_desert_rocks_1 + noise_red_desert_rocks_2 < 60 and noise_terrain_1 > 7 + noise_terrain_2 + noise_terrain_3 + noise_terrain_4 then + if math.random(1,3) == 1 then + if math.random(1,3) == 1 then + if surface.can_place_entity {name="red-desert-rock-huge-01", position={pos_x,pos_y}} then + surface.create_entity {name="red-desert-rock-huge-01", position={pos_x,pos_y}} + end + else + if surface.can_place_entity {name="red-desert-rock-big-01", position={pos_x,pos_y}} then + surface.create_entity {name="red-desert-rock-big-01", position={pos_x,pos_y}} + end end end - if p >= 102 and p < 105 then - if event.surface.can_place_entity {name="substation", position={pos_x,pos_y}} then - event.surface.create_entity {name="substation", position={pos_x,pos_y}} + end + + if noise_red_desert_rocks_1 + noise_red_desert_rocks_2 + noise_red_desert_rocks_3 + noise_terrain_4 >= 10 and noise_red_desert_rocks_1 + noise_red_desert_rocks_2 + noise_red_desert_rocks_3 < 20 and noise_terrain_1 > 7 + noise_terrain_2 + noise_terrain_3 + noise_terrain_4 then + if math.random(1,5) == 1 then + table.insert(decoratives, {name="red-desert-rock-medium", position={pos_x,pos_y}, amount=1}) + end + else + if tile_to_insert ~= "water" and tile_to_insert ~= "sand" then + if math.random(1,15) == 1 then + table.insert(decoratives, {name="red-desert-rock-small", position={pos_x,pos_y}, amount=1}) + else + if math.random(1,8) == 1 then + table.insert(decoratives, {name="red-desert-rock-tiny", position={pos_x,pos_y}, amount=1}) + end end end - if p >= 105 and p < 111 then - if event.surface.can_place_entity {name="solar-panel", position={pos_x,pos_y}} then - event.surface.create_entity {name="solar-panel", position={pos_x,pos_y}} - end - end - if p >= 111 then - if event.surface.can_place_entity {name="laser-turret", position={pos_x,pos_y}} then - event.surface.create_entity {name="laser-turret", position={pos_x,pos_y}} - end + end + if tile_to_insert ~= "water" then + if noise_decoratives_2 > 0.6 then + if math.random(1,9) == 1 then table.insert(decoratives, {name="red-asterisk", position={pos_x,pos_y}, amount=1}) end + else + if noise_decoratives_2 > 0.4 then + if math.random(1,17) == 1 then table.insert(decoratives, {name="red-asterisk", position={pos_x,pos_y}, amount=1}) end + end end + if noise_decoratives_3 < -0.6 then + if math.random(1,2) == 1 then table.insert(decoratives, {name="brown-fluff-dry", position={pos_x,pos_y}, amount=1}) end + else + if noise_decoratives_3 < -0.4 then + if math.random(1,5) == 1 then table.insert(decoratives, {name="brown-fluff-dry", position={pos_x,pos_y}, amount=1}) end + end + end + end + table.insert(tiles, {name = tile_to_insert, position = {pos_x,pos_y}}) end end + + surface.set_tiles(tiles,true) + for _,deco in pairs(decoratives) do + surface.create_decoratives{check_collision=false, decoratives={deco}} + end + end + + if map_styles.perlin_01 == true then + local seed = global.perlin_noise_seed + local tiles = {} + local entities = event.surface.find_entities(event.area) + for _, entity in pairs(entities) do + if entity.type ~= "player" then + entity.destroy() + end + end + local entity_list = {} + for x = 0, 31, 1 do + for y = 0, 31, 1 do + local pos_x = event.area.left_top.x + x + local pos_y = event.area.left_top.y + y + local p = perlin:noise(((pos_x+seed)/10),((pos_y+seed)/10),0) + p = round((p * 100),0) + 50 + if p < 55 then table.insert(tiles, {name = "concrete", position = {pos_x,pos_y}}) end + if p >= 55 then table.insert(tiles, {name = "stone-path", position = {pos_x,pos_y}}) end + if p >= 56 and p <= 80 then + if event.surface.can_place_entity {name="stone-wall", position={pos_x,pos_y}} then + event.surface.create_entity {name="stone-wall", position={pos_x,pos_y}} + end + end + if p >= 99 and p < 100 then + if event.surface.can_place_entity {name="accumulator", position={pos_x,pos_y}} then + event.surface.create_entity {name="accumulator", position={pos_x,pos_y}} + end + end + if p >= 102 and p < 105 then + if event.surface.can_place_entity {name="substation", position={pos_x,pos_y}} then + event.surface.create_entity {name="substation", position={pos_x,pos_y}} + end + end + if p >= 105 and p < 111 then + if event.surface.can_place_entity {name="solar-panel", position={pos_x,pos_y}} then + event.surface.create_entity {name="solar-panel", position={pos_x,pos_y}} + end + end + if p >= 111 then + if event.surface.can_place_entity {name="laser-turret", position={pos_x,pos_y}} then + event.surface.create_entity {name="laser-turret", position={pos_x,pos_y}} + end + end + end + end event.surface.set_tiles(tiles,true) end - if map_styles.square == true then - local size = 30 + if map_styles.perlin_02 == true then + if not global.perlin_noise_seed then global.perlin_noise_seed = 1000000 end + local seed = global.perlin_noise_seed + local tiles = {} + local entities = event.surface.find_entities(event.area) + for _, entity in pairs(entities) do + if entity.type ~= "player" then + entity.destroy() + end + end + local entity_list = {} + for x = 0, 31, 1 do + for y = 0, 31, 1 do + local pos_x = event.area.left_top.x + x + local pos_y = event.area.left_top.y + y + local p = perlin:noise(((pos_x+seed)/150),((pos_y+seed)/150),0) + local p2 = perlin:noise(((pos_x+seed)/45),((pos_y+seed)/45),0) + local p3 = perlin:noise(((pos_x+seed)/10),((pos_y+seed)/10),0) + p2 = p2 * 0.2 + p3 = p3 * 0.1 + if p + p2 < -0.2 then table.insert(tiles, {name = "water", position = {pos_x,pos_y}}) end + if p + p2 >= -0.2 and p + p2 <= 0.5 then table.insert(tiles, {name = "grass", position = {pos_x,pos_y}}) end + if p + p2 >= 0.5 then table.insert(tiles, {name = "red-desert-dark", position = {pos_x,pos_y}}) end + + end + end + event.surface.set_tiles(tiles,true) + end + + if map_styles.rivers == true then + + --- maybe add fish in rivers + + if not global.perlin_noise_seed then global.perlin_noise_seed = math.random(1000,1000000) end + local seed = global.perlin_noise_seed + local tiles = {} + for x = 0, 31, 1 do + for y = 0, 31, 1 do + local pos_x = event.area.left_top.x + x + local pos_y = event.area.left_top.y + y + local noise_terrain_1 = perlin:noise(((pos_x+seed)/150),((pos_y+seed)/150),0) + local noise_terrain_2 = perlin:noise(((pos_x+seed)/75),((pos_y+seed)/75),0) + local noise_terrain_3 = perlin:noise(((pos_x+seed)/50),((pos_y+seed)/50),0) + local noise_terrain_4 = perlin:noise(((pos_x+seed)/7),((pos_y+seed)/7),0) + local noise_terrain = noise_terrain_1 + (noise_terrain_2 * 0.2) + (noise_terrain_3 * 0.1) + (noise_terrain_4 * 0.02) + local tile_to_insert + if noise_terrain > -0.03 and noise_terrain < 0.03 then + tile_to_insert = "water-green" + local a = pos_x + 1 + table.insert(tiles, {name = tile_to_insert, position = {a,pos_y}}) + local a = pos_y + 1 + table.insert(tiles, {name = tile_to_insert, position = {pos_x,a}}) + local a = pos_x - 1 + table.insert(tiles, {name = tile_to_insert, position = {a,pos_y}}) + local a = pos_y - 1 + table.insert(tiles, {name = tile_to_insert, position = {pos_x,a}}) + table.insert(tiles, {name = tile_to_insert, position = {pos_x,pos_y}}) + end + end + end + event.surface.set_tiles(tiles,true) + end + + if map_styles.square == true then + local size = 30 size = size / 2 size = round(size,0) local negative_size = size * -1 - local area = event.area + local area = event.area local surface = event.surface - local tiles = {} + local tiles = {} for x = 0, 31, 1 do for y = 0, 31, 1 do local pos_x = event.area.left_top.x + x - local pos_y = event.area.left_top.y + y - if pos_y >= size or pos_x >= size or pos_x < negative_size or pos_y < negative_size then - table.insert(tiles, {name = "out-of-map", position = {pos_x,pos_y}}) + local pos_y = event.area.left_top.y + y + if pos_y >= size or pos_x >= size or pos_x < negative_size or pos_y < negative_size then + table.insert(tiles, {name = "out-of-map", position = {pos_x,pos_y}}) end end - end + end surface.set_tiles(tiles) end - + if map_styles.circle == true then local radius = 1609 local radsquare = radius*radius @@ -776,7 +1441,7 @@ local function on_chunk_generated(event) local pos_x = event.area.left_top.x + x local pos_y = event.area.left_top.y + y local a = pos_y * pos_y - local b = pos_x * pos_x + local b = pos_x * pos_x local tile_distance_to_center = a + b if tile_distance_to_center >= radsquare then table.insert(tiles, {name = "out-of-map", position = {pos_x,pos_y}}) @@ -785,41 +1450,41 @@ local function on_chunk_generated(event) end surface.set_tiles(tiles) end - + if map_styles.resource_cluster_truck == true then if not global.resource_cluster_truck then global.resource_cluster_truck = 1 end local entities = event.surface.find_entities(event.area) for _, entity in pairs(entities) do if entity.type == "resource" then entity.destroy() - end - end + end + end local pos_x = event.area.left_top.x + math.random(10, 20) - local pos_y = event.area.left_top.y + math.random(10, 20) + local pos_y = event.area.left_top.y + math.random(10, 20) local radius = 10 - local surface = event.surface + local surface = event.surface local tiles = {} local center = 15 local ore_spawn = math.random(1,6) local oil_amount = math.random(10000,150000) local resource_amount = math.random(400,7000) if math.random(1,12) == 1 then resource_amount = math.random(7000,150000) end - if global.resource_cluster_truck % 2 == 1 then + if global.resource_cluster_truck % 2 == 1 then for x = 0, 31, 1 do for y = 0, 31, 1 do local tile_distance_to_center = nil local pos_x = event.area.left_top.x + x local pos_y = event.area.left_top.y + y center_x = event.area.left_top.x + center - center_y = event.area.left_top.y + center + center_y = event.area.left_top.y + center local a = (pos_x - center_x) * (pos_x - center_x) - local b = (pos_y - center_y) * (pos_y - center_y) + local b = (pos_y - center_y) * (pos_y - center_y) local tile_distance_to_center = math.sqrt(a + b) if tile_distance_to_center < radius then - + if tile_distance_to_center <= 0 then tile_distance_to_center = tile_distance_to_center * -1 end tile_distance_to_center = tile_distance_to_center + 1 - + local amount = resource_amount if tile_distance_to_center < radius / 2 then amount = resource_amount * 1.5 @@ -827,54 +1492,54 @@ local function on_chunk_generated(event) if tile_distance_to_center < radius / 3 then amount = resource_amount * 2 end - - if ore_spawn == 6 then amount = oil_amount end - + + if ore_spawn == 6 then amount = oil_amount end + if ore_spawn == 1 then - if surface.can_place_entity {name="stone", position={x=pos_x,y=pos_y}, amount = amount} then - surface.create_entity {name="stone", position={x=pos_x,y=pos_y}, amount = amount} + if surface.can_place_entity {name="stone", position={x=pos_x,y=pos_y}, amount = amount} then + surface.create_entity {name="stone", position={x=pos_x,y=pos_y}, amount = amount} end end if ore_spawn == 2 then - if surface.can_place_entity {name="iron-ore", position={x=pos_x,y=pos_y}, amount = amount} then - surface.create_entity {name="iron-ore", position={x=pos_x,y=pos_y}, amount = amount} - end + if surface.can_place_entity {name="iron-ore", position={x=pos_x,y=pos_y}, amount = amount} then + surface.create_entity {name="iron-ore", position={x=pos_x,y=pos_y}, amount = amount} + end end if ore_spawn == 3 then - if surface.can_place_entity {name="coal", position={x=pos_x,y=pos_y}, amount = amount} then - surface.create_entity {name="coal", position={x=pos_x,y=pos_y}, amount = amount} - end + if surface.can_place_entity {name="coal", position={x=pos_x,y=pos_y}, amount = amount} then + surface.create_entity {name="coal", position={x=pos_x,y=pos_y}, amount = amount} + end end if ore_spawn == 4 then - if surface.can_place_entity {name="copper-ore", position={x=pos_x,y=pos_y}, amount = amount} then - surface.create_entity {name="copper-ore", position={x=pos_x,y=pos_y}, amount = amount} + if surface.can_place_entity {name="copper-ore", position={x=pos_x,y=pos_y}, amount = amount} then + surface.create_entity {name="copper-ore", position={x=pos_x,y=pos_y}, amount = amount} end end if ore_spawn == 5 then - if surface.can_place_entity {name="uranium-ore", position={x=pos_x,y=pos_y}, amount = amount} then - surface.create_entity {name="uranium-ore", position={x=pos_x,y=pos_y}, amount = amount} + if surface.can_place_entity {name="uranium-ore", position={x=pos_x,y=pos_y}, amount = amount} then + surface.create_entity {name="uranium-ore", position={x=pos_x,y=pos_y}, amount = amount} end end if ore_spawn == 6 then - if surface.can_place_entity {name="crude-oil", position={x=pos_x,y=pos_y}, amount = amount} then - surface.create_entity {name="crude-oil", position={x=pos_x,y=pos_y}, amount = amount} + if surface.can_place_entity {name="crude-oil", position={x=pos_x,y=pos_y}, amount = amount} then + surface.create_entity {name="crude-oil", position={x=pos_x,y=pos_y}, amount = amount} end - end + end end end end end global.resource_cluster_truck = global.resource_cluster_truck + 1 end - + if map_styles.up == true then - local area = event.area + local area = event.area local surface = event.surface local tiles = {} if event.area.left_top.y > 50 or event.area.left_top.x > 96 or event.area.left_top.x < -128 then for x = event.area.left_top.x, event.area.right_bottom.x do - for y = event.area.left_top.y, event.area.right_bottom.y do - table.insert(tiles, {name = "out-of-map", position = {x,y}}) + for y = event.area.left_top.y, event.area.right_bottom.y do + table.insert(tiles, {name = "out-of-map", position = {x,y}}) end end surface.set_tiles(tiles) @@ -882,13 +1547,13 @@ local function on_chunk_generated(event) end if map_styles.right == true then - local area = event.area + local area = event.area local surface = event.surface local tiles = {} if event.area.left_top.x < -75 or event.area.left_top.y > 32 or event.area.left_top.y < -400 then for x = event.area.left_top.x, event.area.right_bottom.x do - for y = event.area.left_top.y, event.area.right_bottom.y do - table.insert(tiles, {name = "out-of-map", position = {x,y}}) + for y = event.area.left_top.y, event.area.right_bottom.y do + table.insert(tiles, {name = "out-of-map", position = {x,y}}) end end surface.set_tiles(tiles) @@ -896,12 +1561,12 @@ local function on_chunk_generated(event) end if map_styles.dagobah_swamp == true then - local area = event.area + local area = event.area local surface = event.surface --local surface = game.surfaces[1] local tiles = {} local decoratives = {} - + local entities = surface.find_entities(area) for _, entity in pairs(entities) do if entity.type == "simple-entity" or entity.type == "tree" then @@ -910,83 +1575,84 @@ local function on_chunk_generated(event) end end end - local forest_cluster = true - if math.random(1,4) == 1 then forest_cluster = false end - + local forest_cluster = true + if math.random(1,4) == 1 then forest_cluster = false end + for x = 0, 31, 1 do for y = 0, 31, 1 do local pos_x = event.area.left_top.x + x local pos_y = event.area.left_top.y + y - local pos = {x = pos_x,y = pos_y} - local tile = surface.get_tile(pos_x,pos_y) + local pos = {x = pos_x,y = pos_y} + local tile = surface.get_tile(pos_x,pos_y) local tile_to_insert = tile local entity_placed = false - -- or tile.name == "grass-dry" - if tile.name ~= "water" and tile.name ~= "deepwater" then - tile_to_insert = "grass" - + -- or tile.name == "grass-dry" + --if tile.name ~= "water" and tile.name ~= "deepwater" and tile.name ~= "water-green" then + if tile.name ~= "water-green" then + table.insert(tiles, {name = "grass", position = {pos_x,pos_y}}) + local entity_list = {} table.insert(entity_list, {name="big-ship-wreck-1", pos={pos_x,pos_y},chance = 65000, health="random"}) table.insert(entity_list, {name="big-ship-wreck-2", pos={pos_x,pos_y},chance = 65000, health="random"}) - table.insert(entity_list, {name="big-ship-wreck-3", pos={pos_x,pos_y},chance = 65000, health="random"}) + table.insert(entity_list, {name="big-ship-wreck-3", pos={pos_x,pos_y},chance = 65000, health="random"}) local b, placed_entity = place_entities(surface, entity_list) - if b == true then + if b == true then placed_entity.insert(wreck_item_pool[math.random(1,#wreck_item_pool)]) placed_entity.insert(wreck_item_pool[math.random(1,#wreck_item_pool)]) placed_entity.insert(wreck_item_pool[math.random(1,#wreck_item_pool)]) - end - - local entity_list = {} + end + + local entity_list = {} table.insert(entity_list, {name="tree-04", pos={pos_x,pos_y},chance = 400}) table.insert(entity_list, {name="tree-09", pos={pos_x,pos_y},chance = 1000}) table.insert(entity_list, {name="tree-07", pos={pos_x,pos_y},chance = 400}) - table.insert(entity_list, {name="tree-06", pos={pos_x,pos_y},chance = 150}) + table.insert(entity_list, {name="tree-06", pos={pos_x,pos_y},chance = 150}) table.insert(entity_list, {name="stone-rock", pos={pos_x,pos_y},chance = 400}) table.insert(entity_list, {name="green-coral", pos={pos_x,pos_y},chance = 10000}) table.insert(entity_list, {name="medium-ship-wreck", pos={pos_x,pos_y},chance = 25000, health="random"}) table.insert(entity_list, {name="small-ship-wreck", pos={pos_x,pos_y},chance = 25000, health="random"}) - table.insert(entity_list, {name="car", pos={pos_x,pos_y},chance = 125000, health="low"}) - table.insert(entity_list, {name="stone-furnace", pos={pos_x,pos_y},chance = 100000, health="random", force="enemy"}) + table.insert(entity_list, {name="car", pos={pos_x,pos_y},chance = 125000, health="low"}) + table.insert(entity_list, {name="stone-furnace", pos={pos_x,pos_y},chance = 100000, health="random", force="enemy"}) local b, placed_entity = place_entities(surface, entity_list) if forest_cluster == true then if math.random(1,800) == 1 then create_tree_cluster(pos, 120) end end - + else - if tile.name == "water" then tile_to_insert = "water" end - if tile.name == "deepwater" then tile_to_insert = "deepwater" end - end - table.insert(tiles, {name = tile_to_insert, position = {pos_x,pos_y}}) + --if tile.name == "water" then tile_to_insert = "water" end + --if tile.name == "deepwater" then tile_to_insert = "deepwater" end + end + end - end + end surface.set_tiles(tiles,true) --check for existing chunk if you would overwrite decoratives local for_start_x = 0 local for_end_x = 31 local for_start_y = 0 - local for_end_y = 31 + local for_end_y = 31 local testing_pos = event.area.left_top.x - 1 local tile = surface.get_tile(testing_pos, event.area.left_top.y) - if tile.name then for_start_x = -1 end + if tile.name then for_start_x = -1 end local testing_pos = event.area.left_top.y - 1 local tile = surface.get_tile(event.area.left_top.x, testing_pos) - if tile.name then for_start_y = -1 end + if tile.name then for_start_y = -1 end local testing_pos = event.area.right_bottom.x local tile = surface.get_tile(testing_pos, event.area.right_bottom.y) - if tile.name then for_end_x = 32 end + if tile.name then for_end_x = 32 end local testing_pos = event.area.right_bottom.y local tile = surface.get_tile(event.area.right_bottom.x, testing_pos) if tile.name then for_end_y = 32 end - + for x = for_start_x, for_end_x, 1 do - for y = for_start_y, for_end_y, 1 do + for y = for_start_y, for_end_y, 1 do local pos_x = event.area.left_top.x + x local pos_y = event.area.left_top.y + y local tile = surface.get_tile(pos_x, pos_y) local decal_has_been_placed = false - + if tile.name == "grass" then if decal_has_been_placed == false then local r = math.random(1,3) @@ -994,7 +1660,7 @@ local function on_chunk_generated(event) table.insert(decoratives, {name="green-carpet-grass", position={pos_x,pos_y}, amount=1}) decal_has_been_placed = false end - end + end if decal_has_been_placed == false then local r = math.random(1,7) if r == 1 then @@ -1029,10 +1695,10 @@ local function on_chunk_generated(event) table.insert(decoratives, {name="green-asterisk", position={pos_x,pos_y}, amount=1}) decal_has_been_placed = false end - end - end - if tile.name == "water" then - + end + end + if tile.name == "water" or tile.name == "water-green" then + if decal_has_been_placed == false then local r = math.random(1,18) if r == 1 then @@ -1056,62 +1722,62 @@ local function on_chunk_generated(event) end end end - end + end for _,deco in pairs(decoratives) do surface.create_decoratives{check_collision=false, decoratives={deco}} - end + end end - + if map_styles.red_planet == true then - local area = event.area + local area = event.area local surface = event.surface local tiles = {} local water_tiles = {} local decoratives = {} - + local entities = surface.find_entities(area) for _, entity in pairs(entities) do if entity.type == "tree" or entity.type == "simple-entity" then entity.destroy() end end - local rock_cluster = true - if math.random(1,3) == 1 then rock_cluster = false end - + local rock_cluster = true + if math.random(1,3) == 1 then rock_cluster = false end + for x = 0, 31, 1 do for y = 0, 31, 1 do local pos_x = event.area.left_top.x + x local pos_y = event.area.left_top.y + y - local pos = {pos_x,pos_y} - local tile = surface.get_tile(pos_x,pos_y) + local pos = {pos_x,pos_y} + local tile = surface.get_tile(pos_x,pos_y) local entity_placed = false - -- or tile.name == "grass-dry" + -- or tile.name == "grass-dry" if tile.name == "grass" or tile.name == "sand" or tile.name == "dirt" or tile.name == "grass-medium" then table.insert(tiles, {name = "red-desert", position = {pos_x,pos_y}}) local entity_list = {} table.insert(entity_list, {name="dry-tree", pos={pos_x,pos_y},chance = 160}) - table.insert(entity_list, {name="red-desert-rock-big-01", pos={pos_x,pos_y},chance = 800}) - table.insert(entity_list, {name="red-desert-rock-huge-01", pos={pos_x,pos_y},chance = 1500}) + table.insert(entity_list, {name="red-desert-rock-big-01", pos={pos_x,pos_y},chance = 800}) + table.insert(entity_list, {name="red-desert-rock-huge-01", pos={pos_x,pos_y},chance = 1500}) table.insert(entity_list, {name="stone-rock", pos={pos_x,pos_y},chance = 1300}) table.insert(entity_list, {name="medium-ship-wreck", pos={pos_x,pos_y},chance = 15000, health="medium"}) table.insert(entity_list, {name="small-ship-wreck", pos={pos_x,pos_y},chance = 15000, health="medium"}) table.insert(entity_list, {name="car", pos={pos_x,pos_y},chance = 100000, health="low"}) - table.insert(entity_list, {name="nuclear-reactor", pos={pos_x,pos_y},chance = 1000000, force="enemy", health="medium"}) - local b, placed_entity = place_entities(surface, entity_list) + table.insert(entity_list, {name="nuclear-reactor", pos={pos_x,pos_y},chance = 1000000, force="enemy", health="medium"}) + local b, placed_entity = place_entities(surface, entity_list) if b == false then table.insert(entity_list, {name="big-ship-wreck-1", pos={pos_x,pos_y},chance = 75000, health="random"}) table.insert(entity_list, {name="big-ship-wreck-2", pos={pos_x,pos_y},chance = 75000, health="random"}) - table.insert(entity_list, {name="big-ship-wreck-3", pos={pos_x,pos_y},chance = 75000, health="random"}) + table.insert(entity_list, {name="big-ship-wreck-3", pos={pos_x,pos_y},chance = 75000, health="random"}) local b, placed_entity = place_entities(surface, entity_list) - if b == true then + if b == true then placed_entity.insert(wreck_item_pool[math.random(1,#wreck_item_pool)]) placed_entity.insert(wreck_item_pool[math.random(1,#wreck_item_pool)]) placed_entity.insert(wreck_item_pool[math.random(1,#wreck_item_pool)]) - end - end + end + end else if tile.name == "water" or tile.name == "water-green" then - --table.insert(water_tiles, {name = "water-green", position = {pos_x,pos_y}}) + --table.insert(water_tiles, {name = "water-green", position = {pos_x,pos_y}}) else if tile.name == "deepwater" or tile.name == "deepwater-green" then --table.insert(water_tiles, {name = "deepwater-green", position = {pos_x,pos_y}}) @@ -1120,31 +1786,31 @@ local function on_chunk_generated(event) if rock_cluster == true then if math.random(1,1200) == 1 then create_rock_cluster({x=pos_x,y=pos_y},math.random(15,75)) end end - local entity_list = {} + local entity_list = {} table.insert(entity_list, {name="red-desert-rock-big-01", pos={pos_x,pos_y},chance = 400}) table.insert(entity_list, {name="red-desert-rock-huge-01", pos={pos_x,pos_y},chance = 700}) table.insert(entity_list, {name="pipe-to-ground", pos={pos_x,pos_y},chance = 15000, force="enemy"}) table.insert(entity_list, {name="programmable-speaker", pos={pos_x,pos_y},chance = 25000, force="enemy", health="high"}) - table.insert(entity_list, {name="laser-turret", pos={pos_x,pos_y},chance = 50000, force="enemy", health="low"}) - table.insert(entity_list, {name="tank", pos={pos_x,pos_y},chance = 500000, health="low"}) - local b, placed_entity = place_entities(surface, entity_list) + table.insert(entity_list, {name="laser-turret", pos={pos_x,pos_y},chance = 50000, force="enemy", health="low"}) + table.insert(entity_list, {name="tank", pos={pos_x,pos_y},chance = 500000, health="low"}) + local b, placed_entity = place_entities(surface, entity_list) if b == false then table.insert(entity_list, {name="big-ship-wreck-1", pos={pos_x,pos_y},chance = 75000, health="random"}) table.insert(entity_list, {name="big-ship-wreck-2", pos={pos_x,pos_y},chance = 75000, health="random"}) - table.insert(entity_list, {name="big-ship-wreck-3", pos={pos_x,pos_y},chance = 75000, health="random"}) + table.insert(entity_list, {name="big-ship-wreck-3", pos={pos_x,pos_y},chance = 75000, health="random"}) local b, placed_entity = place_entities(surface, entity_list) - if b == true then + if b == true then placed_entity.insert(wreck_item_pool[math.random(1,#wreck_item_pool)]) placed_entity.insert(wreck_item_pool[math.random(1,#wreck_item_pool)]) placed_entity.insert(wreck_item_pool[math.random(1,#wreck_item_pool)]) - end + end end end - end - end - + end + end + end - end + end surface.set_tiles(tiles,true) --surface.set_tiles(water_tiles,false) --surface.set_tiles(water_tiles,false) @@ -1153,22 +1819,22 @@ local function on_chunk_generated(event) local for_start_x = 0 local for_end_x = 31 local for_start_y = 0 - local for_end_y = 31 + local for_end_y = 31 local testing_pos = event.area.left_top.x - 1 local tile = surface.get_tile(testing_pos, event.area.left_top.y) - if tile.name then for_start_x = -1 end + if tile.name then for_start_x = -1 end local testing_pos = event.area.left_top.y - 1 local tile = surface.get_tile(event.area.left_top.x, testing_pos) - if tile.name then for_start_y = -1 end + if tile.name then for_start_y = -1 end local testing_pos = event.area.right_bottom.x local tile = surface.get_tile(testing_pos, event.area.right_bottom.y) - if tile.name then for_end_x = 32 end + if tile.name then for_end_x = 32 end local testing_pos = event.area.right_bottom.y local tile = surface.get_tile(event.area.right_bottom.x, testing_pos) if tile.name then for_end_y = 32 end - + for x = for_start_x, for_end_x, 1 do - for y = for_start_y, for_end_y, 1 do + for y = for_start_y, for_end_y, 1 do local pos_x = event.area.left_top.x + x local pos_y = event.area.left_top.y + y local tile = surface.get_tile(pos_x, pos_y) @@ -1230,7 +1896,7 @@ local function on_chunk_generated(event) decal_has_been_placed = true end end - + end if tile.name == "red-desert-dark" then if decal_has_been_placed == false then @@ -1239,7 +1905,7 @@ local function on_chunk_generated(event) table.insert(decoratives, {name="red-desert-bush", position={pos_x,pos_y}, amount=1}) decal_has_been_placed = true end - end + end if decal_has_been_placed == false then local r = math.random(1,25) if r == 1 then @@ -1260,7 +1926,7 @@ local function on_chunk_generated(event) table.insert(decoratives, {name="red-desert-rock-tiny", position={pos_x,pos_y}, amount=1}) decal_has_been_placed = true end - end + end if decal_has_been_placed == false then local r = math.random(1,27) if r == 1 then @@ -1287,37 +1953,37 @@ local function on_chunk_generated(event) if r == 1 then table.insert(decoratives, {name="brown-cane-cluster", position={pos_x,pos_y}, amount=1}) decal_has_been_placed = true - end + end end --]] - end - --[[if tile.name == "grass" then + end + --[[if tile.name == "grass" then end if tile.name == "grass-dry" then end - if tile.name == "grass-medium" then + if tile.name == "grass-medium" then end - if tile.name == "dirt" then + if tile.name == "dirt" then end - if tile.name == "dirt-dark" then + if tile.name == "dirt-dark" then end--]] end - end + end for _,deco in pairs(decoratives) do surface.create_decoratives{check_collision=false, decoratives={deco}} - end - end + end + end if map_styles.grey_void == true then if not global.void_slime then global.void_slime = {x=0,y=0} end if not global.void_slime_is_alive then global.void_slime_is_alive = true end - local area = event.area + local area = event.area local surface = event.surface local tiles = {} local decoratives = {} local resource_tiles = {} local special_tiles = true - + local entities = surface.find_entities(area) for _, entity in pairs(entities) do if entity.type == "resource" then @@ -1330,60 +1996,52 @@ local function on_chunk_generated(event) end end end - + for x = 0, 31, 1 do for y = 0, 31, 1 do local pos_x = event.area.left_top.x + x local pos_y = event.area.left_top.y + y - local pos = {x = pos_x,y = pos_y} - local tile = surface.get_tile(pos_x,pos_y) + local pos = {x = pos_x,y = pos_y} + local tile = surface.get_tile(pos_x,pos_y) local tile_to_insert = tile local entity_placed = false if tile.name ~= "lab-dark-1" then - table.insert(tiles, {name = "lab-dark-1", position = {pos_x,pos_y}}) - end + table.insert(tiles, {name = "lab-dark-1", position = {pos_x,pos_y}}) + end end - end + end surface.set_tiles(tiles,false) surface.set_tiles(resource_tiles,false) - + if special_tiles == true then local pos_x = event.area.left_top.x + math.random(10,21) local pos_y = event.area.left_top.y + math.random(10,21) - local pos = {x = pos_x,y = pos_y} - if math.random(1,20) == 1 then create_tile_cluster("water", pos, 300) end + local pos = {x = pos_x,y = pos_y} + if math.random(1,20) == 1 then create_tile_cluster("water", pos, 300) end --if math.random(1,3) == 1 then create_tile_cluster("lab-dark-2", pos, 1000) end --if math.random(1,700) == 1 then create_tile_cluster("lab-dark-2", pos, 300) end - end - end + end + end + end -local function on_tick() +--[[ +local function on_tick() if map_styles.grey_void == true then - if game.tick % 60 == 0 then + if game.tick % 60 == 0 then if global.void_slime_is_alive == true then local b,x,y = create_tile_cluster("lab-dark-2",global.void_slime,1) global.void_slime.x = x - global.void_slime.y = y + global.void_slime.y = y if b == false then - global.void_slime_is_alive = false + global.void_slime_is_alive = false game.print("The void slime died.") end end end - end -end ---[[ -function regen() - game.surfaces[1].regenerate_decorative {"red-asterisk", "green-bush-mini", "green-carpet-grass" } -end - -function reveal(var) - local a = var - local b = var * -1 - game.forces.player.chart(game.player.surface, {lefttop = {x = a, y = a}, rightbottom = {x = b, y = b}}) + end end --]] -Event.register(defines.events.on_tick, on_tick) -Event.register(defines.events.on_chunk_generated, on_chunk_generated) +--Event.register(defines.events.on_tick, on_tick) +Event.register(defines.events.on_chunk_generated, on_chunk_generated) \ No newline at end of file diff --git a/player_list.lua b/player_list.lua index af85a4d5..65d8008c 100644 --- a/player_list.lua +++ b/player_list.lua @@ -3,24 +3,24 @@ Hello there! This will add a player list with "ranks" to your server. Oh.. and you can also "poke" a player. +pokemessages = 80% by redlabel To install, add: require "player_list" to your scenario control.lua. ---MewMew--- -pokemessage = 80% by redlabel - things to do (maybe) make it sorted by time played -make poke buttons count pokes -make division instead of for loop --]] -local pokemessages = {"a stick", "a leaf", "a moldy carrot", "a crispy slice of bacon", "a french fry", "a realistic toygun", "a broomstick", "a thirteen inch iron stick", "a mechanical keyboard", "a fly fishing cane", "a selfie stick", "an oversized fidget spinner", "a thumb extender", "a dirty straw", "a green bean", "a banana", "an umbrella", "grandpa's walking stick", "live firework", "a toilet brush", "a fake hand", "an undercooked hotdog", "a slice of yesterday's microwaved pizza", "bubblegum", "a biter leg", "grandma's toothbrush", "charred octopus", "a dollhouse bathtub", "a length of copper wire", "a decommissioned nuke", "a smelly trout", "an unopened can of deodorant", "a stone brick", "a half full barrel of lube", "a half empty barrel of lube", "an unexploded cannon shell", "a blasting programmable speaker", "a not so straight rail", "a mismatched pipe to ground", "a surplus box of landmines", "decommissioned yellow rounds", "an oily pumpjack shaft", "a melted plastic bar in the shape of the virgin mary", "a bottle of watermelon vitamin water", "a slice of watermelon", "a stegosaurus tibia", "a basking musician's clarinet", "a twig", "an undisclosed pokey item", "a childhood trophy everyone else got","a dead starfish","a titanium toothpick", "a nail file","a stamp collection","a bucket of lego","a rolled up carpet","a rolled up WELCOME doormat","Bobby's favorite bone","an empty bottle of cheap vodka","a tattooing needle","a peeled cucumber","a stack of cotton candy","a signed baseball bat","that 5 dollar bill grandma sent for christmas","a stack of overdue phone bills","the 'relax' section of the white pages","a bag of gym clothes which never made it to the washing machine","a handful of peanut butter","a pheasant's feather","a rusty pickaxe","a diamond sword","the bill of rights of a banana republic","one of those giant airport Toblerone's", "a long handed inserter", "a wiimote","an easter chocolate rabbit","a ball of yarn the cat threw up","a slightly expired but perfectly edible cheese sandwich", "conclusive proof of lizard people existence","a pen drive full of high res wallpapers","a pet hamster","an oversized goldfish","a one foot extension cord","a CD from Walmart's 1 dollar bucket","a magic wand","a list of disappointed people who believed in you","murder exhibit no. 3","a paperback copy of 'Great Expectations'", "a baby biter", "a little biter fang", "the latest diet fad","a belt that no longer fits you","an abandoned pet rock","a lava lamp", "some spirit herbs","a box of fish sticks found at the back of the freezer","a bowl of tofu rice", "a bowl of ramen noodles", "a live lobster!", "a miniature golf cart","dunce cap","a fully furnished x-mas tree", "an orphaned power pole"} +local symbol_asc = "▲" +local symbol_desc = "▼" -local function create_player_list_button(event) +local pokemessages = {"a stick", "a leaf", "a moldy carrot", "a crispy slice of bacon", "a french fry", "a realistic toygun", "a broomstick", "a thirteen inch iron stick", "a mechanical keyboard", "a fly fishing cane", "a selfie stick", "an oversized fidget spinner", "a thumb extender", "a dirty straw", "a green bean", "a banana", "an umbrella", "grandpa's walking stick", "live firework", "a toilet brush", "a fake hand", "an undercooked hotdog", "a slice of yesterday's microwaved pizza", "bubblegum", "a biter leg", "grandma's toothbrush", "charred octopus", "a dollhouse bathtub", "a length of copper wire", "a decommissioned nuke", "a smelly trout", "an unopened can of deodorant", "a stone brick", "a half full barrel of lube", "a half empty barrel of lube", "an unexploded cannon shell", "a blasting programmable speaker", "a not so straight rail", "a mismatched pipe to ground", "a surplus box of landmines", "decommissioned yellow rounds", "an oily pumpjack shaft", "a melted plastic bar in the shape of the virgin mary", "a bottle of watermelon vitamin water", "a slice of watermelon", "a stegosaurus tibia", "a basking musician's clarinet", "a twig", "an undisclosed pokey item", "a childhood trophy everyone else got","a dead starfish","a titanium toothpick", "a nail file","a stamp collection","a bucket of lego","a rolled up carpet","a rolled up WELCOME doormat","Bobby's favorite bone","an empty bottle of cheap vodka","a tattooing needle","a peeled cucumber","a stack of cotton candy","a signed baseball bat","that 5 dollar bill grandma sent for christmas","a stack of overdue phone bills","the 'relax' section of the white pages","a bag of gym clothes which never made it to the washing machine","a handful of peanut butter","a pheasant's feather","a rusty pickaxe","a diamond sword","the bill of rights of a banana republic","one of those giant airport Toblerone's", "a long handed inserter", "a wiimote","an easter chocolate rabbit","a ball of yarn the cat threw up","a slightly expired but perfectly edible cheese sandwich", "conclusive proof of lizard people existence","a pen drive full of high res wallpapers","a pet hamster","an oversized goldfish","a one foot extension cord","a CD from Walmart's 1 dollar bucket","a magic wand","a list of disappointed people who believed in you","murder exhibit no. 3","a paperback copy of 'Great Expectations'", "a baby biter", "a little biter fang", "the latest diet fad","a belt that no longer fits you","an abandoned pet rock","a lava lamp", "some spirit herbs","a box of fish sticks found at the back of the freezer","a bowl of tofu rice", "a bowl of ramen noodles", "a live lobster!", "a miniature golf cart","dunce cap","a fully furnished x-mas tree", "an orphaned power pole", "an horphaned power pole","an box of overpriced girl scout cookies","the cheapest item from the yard sale","a Sharpie","a glowstick","a thick unibrow hair","a very detailed map of Kazakhstan","the official Factorio installation DVD","a Liberal Arts degree","a pitcher of Kool-Aid","a 1/4 pound vegan burrito","a bottle of expensive wine","a hamster sized gravestone","a counterfeit Cuban cigar","an old Nokia phone","a huge inferiority complex","a dead real state agent","a deck of tarot cards","unreleased Wikileaks documents","a mean-looking garden dwarf","the actual mythological OBESE cat","a telescope used to spy on the MILF next door","a fancy candelabra","the comic version of the Kama Sutra","an inflatable 'Netflix & chill' doll","whatever it is redlabel gets high on","Obama's birth certificate","a deck of Cards Against Humanity","a copy of META MEME HUMOR for Dummies","an abandoned, not-so-young-anymore puppy","one of those useless items advertised on TV","a genetic blueprint of a Japanese teen idol" } + +local function on_player_joined_game(event) local player = game.players[event.player_index] if not global.poke_spam_protection then global.poke_spam_protection = {} end global.poke_spam_protection[event.player_index] = game.tick @@ -82,113 +82,182 @@ local function get_rank(player) --52 ranks - local time_needed = 15 + local time_needed = 15 -- in minutes between rank upgrades + m = m / time_needed + m = math.floor(m) + m = m + 1 - local time_counter = time_needed - for i=1,#ranks,1 do - if m < time_counter then return ranks[i] end - time_counter = time_counter + time_needed - end + if m > #ranks then m = #ranks end - return ranks[#ranks] + return ranks[m] end -local function player_list_show(player) +local function get_sorted_list(sort_by) + local player_list = {} + for i, player in pairs(game.connected_players) do + player_list[i] = {} + player_list[i].rank = get_rank(player) + player_list[i].name = player.name + player_list[i].played_time = get_formatted_playtime(player.online_time) + player_list[i].played_ticks = player.online_time + if not global.player_list_pokes_counter[player.index] then global.player_list_pokes_counter[player.index] = 0 end + player_list[i].pokes = global.player_list_pokes_counter[player.index] + player_list[i].player_index = player.index + end + --[[ + for i = 1, 4, 1 do + player_list[i] = {} + player_list[i].pokes = math.random(1,100) + player_list[i].name = "mewmew " .. i + player_list[i].played_ticks = math.random(1,115222000) + player_list[i].played_time = get_formatted_playtime(player_list[i].played_ticks) + player_list[i].rank = "item/heavy-armor" + player_list[i].player_index = 1 + end--]] + + for i = #player_list, 1, -1 do + for i2 = #player_list, 1, -1 do + if sort_by == "pokes_asc" then + if player_list[i].pokes > player_list[i2].pokes then + local a = player_list[i] + local b = player_list[i2] + player_list[i] = b + player_list[i2] = a + end + end + if sort_by == "pokes_desc" then + if player_list[i].pokes < player_list[i2].pokes then + local a = player_list[i] + local b = player_list[i2] + player_list[i] = b + player_list[i2] = a + end + end + if sort_by == "time_played_asc" then + if player_list[i].played_ticks > player_list[i2].played_ticks then + local a = player_list[i] + local b = player_list[i2] + player_list[i] = b + player_list[i2] = a + end + end + if sort_by == "time_played_desc" then + if player_list[i].played_ticks < player_list[i2].played_ticks then + local a = player_list[i] + local b = player_list[i2] + player_list[i] = b + player_list[i2] = a + end + end + if sort_by == "name_asc" then + if player_list[i].name > player_list[i2].name then + local a = player_list[i] + local b = player_list[i2] + player_list[i] = b + player_list[i2] = a + end + end + if sort_by == "name_desc" then + if player_list[i].name < player_list[i2].name then + local a = player_list[i] + local b = player_list[i2] + player_list[i] = b + player_list[i2] = a + end + end + end + end + return player_list +end + +local function player_list_show(player, sort_by) + + local frame = player.gui.left["player-list-panel"] + if frame then frame.destroy() end player.gui.left.direction = "horizontal" local frame = player.gui.left.add { type = "frame", name = "player-list-panel", direction = "vertical" } + frame.style.minimal_width = 408 frame.style.top_padding = 8 frame.style.left_padding = 8 frame.style.right_padding = 8 frame.style.bottom_padding = 8 - local player_list_panel_table = frame.add { type = "table", name = "player_list_panel_table", colspan = 4 } - local label = player_list_panel_table.add { type = "label", name = "player_list_panel_header_1", caption = "" } + local player_list_panel_header_table = frame.add { type = "table", name = "player_list_panel_header_table", colspan = 4 } + + local label = player_list_panel_header_table.add { type = "label", name = "player_list_panel_header_1", caption = " " .. #game.connected_players } label.style.font = "default-game" label.style.font_color = { r=0.00, g=0.00, b=0.00} label.style.minimal_width = 35 - local label = player_list_panel_table.add { type = "label", name = "player_list_panel_header_2", caption = "Players online" } + local str = "" + if sort_by == "name_asc" then str = symbol_asc .. " " end + if sort_by == "name_desc" then str = symbol_desc .. " " end + local label = player_list_panel_header_table.add { type = "label", name = "player_list_panel_header_2", caption = str .. "Players online" } label.style.font = "default-listbox" label.style.font_color = { r=0.98, g=0.66, b=0.22} - label.style.minimal_width = 140 + label.style.minimal_width = 160 + label.style.maximal_width = 160 - local label = player_list_panel_table.add { type = "label", name = "player_list_panel_header_3", caption = "Time played" } + str = "" + if sort_by == "time_played_asc" then str = symbol_asc .. " " end + if sort_by == "time_played_desc" then str = symbol_desc .. " " end + local label = player_list_panel_header_table.add { type = "label", name = "player_list_panel_header_3", caption = str .. "Time played" } label.style.font = "default-listbox" label.style.font_color = { r=0.98, g=0.66, b=0.22} - label.style.minimal_width = 140 + label.style.minimal_width = 130 + label.style.maximal_width = 130 - local label = player_list_panel_table.add { type = "label", name = "player_list_panel_header_4", caption = "Poke" } - label.style.font = "default-bold" + str = "" + if sort_by == "pokes_asc" then str = symbol_asc .. " " end + if sort_by == "pokes_desc" then str = symbol_desc .. " " end + local label = player_list_panel_header_table.add { type = "label", name = "player_list_panel_header_4", caption = str .. "Poke" } + label.style.font = "default-listbox" label.style.font_color = { r=0.98, g=0.66, b=0.22} - --label.style.minimal_width = 35 + label.style.minimal_width = 35 + + local player_list_panel_table = frame.add { type = "scroll-pane", name = "scroll_pane", direction = "vertical", horizontal_scroll_policy = "never", vertical_scroll_policy = "auto"} + player_list_panel_table.style.maximal_height = 530 - local x = 1 - local online_players_amount = 0 - --local connected_player_table = {} - - while (game.players[x] ~= nil) do + player_list_panel_table = player_list_panel_table.add { type = "table", name = "player_list_panel_table", colspan = 4 } - local player = game.players[x] - if player.connected then - - online_players_amount = online_players_amount + 1 - --connected_player_table[online_players_amount] = {t_player_index = x, t_player_playtime = player.online_time} - local str = get_rank(player) - - player_list_panel_table.add { type = "sprite", name = "player_rank_sprite_" .. x, sprite = str } - - local label = player_list_panel_table.add { type = "label", name = "player_list_panel_player_names_" .. x, caption = player.name } - label.style.font = "default" - label.style.font_color = { - r = .4 + player.color.r * 0.6, - g = .4 + player.color.g * 0.6, - b = .4 + player.color.b * 0.6, - } - --label.style.minimal_width = 140 - - local time_played = get_formatted_playtime(player.online_time) - - local label = player_list_panel_table.add { type = "label", name = "player_list_panel_player_time_played_" .. x, caption = time_played } - - if not global.player_list_pokes_counter[player.index] then global.player_list_pokes_counter[player.index] = 0 end - - local button = player_list_panel_table.add { type = "button", name = "poke_player_" .. player.name, caption = global.player_list_pokes_counter[player.index] } - button.style.font = "default" - label.style.font_color = { r=0.83, g=0.83, b=0.83} - button.style.minimal_height = 28 - button.style.minimal_width = 28 - button.style.maximal_height = 28 - button.style.maximal_width = 28 - button.style.top_padding = 0 - button.style.left_padding = 0 - button.style.right_padding = 0 - button.style.bottom_padding = 0 - - end - x = x + 1 - end - x = x - 1 - player_list_panel_table.player_list_panel_header_1.caption = " " .. online_players_amount + local player_list = get_sorted_list(sort_by) ---[[ - connected_player_table[2] = {t_player_index = 27, t_player_playtime = 235355} - connected_player_table[3] = {t_player_index = 7, t_player_playtime = 11532563} - connected_player_table[4] = {t_player_index = 9, t_player_playtime = 2355} - connected_player_table[5] = {t_player_index = 15, t_player_playtime = 43545} - - --table.sort(connected_player_table, function(a, b) return a[2] > b[2] end) - - for x=1,#connected_player_table,1 do - local z = connected_player_table[x] - local a = "t_player_index=" .. z.t_player_index - a = a.. " t_player_playtime=" - a = a .. z.t_player_playtime - game.print(a) - end ---]] + for i = 1, #player_list, 1 do + + local sprite = player_list_panel_table.add { type = "sprite", name = "player_rank_sprite_" .. i, sprite = player_list[i].rank } + sprite.style.minimal_width = 35 + + local label = player_list_panel_table.add { type = "label", name = "player_list_panel_player_names_" .. i, caption = player_list[i].name } + label.style.font = "default" + label.style.font_color = { + r = .4 + game.players[player_list[i].player_index].color.r * 0.6, + g = .4 + game.players[player_list[i].player_index].color.g * 0.6, + b = .4 + game.players[player_list[i].player_index].color.b * 0.6, + } + label.style.minimal_width = 160 + label.style.maximal_width = 160 + + local label = player_list_panel_table.add { type = "label", name = "player_list_panel_player_time_played_" .. i, caption = player_list[i].played_time } + label.style.minimal_width = 130 + label.style.maximal_width = 130 + + local flow = player_list_panel_table.add { type = "flow", name = "button_flow_" .. i, direction = "horizontal" } + flow.add { type = "label", name = "button_spacer_" .. i, caption = "" } + local button = flow.add { type = "button", name = "poke_player_" .. player_list[i].name, caption = player_list[i].pokes } + button.style.font = "default" + label.style.font_color = { r=0.83, g=0.83, b=0.83} + button.style.minimal_height = 30 + button.style.minimal_width = 30 + button.style.maximal_height = 30 + button.style.maximal_width = 30 + button.style.top_padding = 0 + button.style.left_padding = 0 + button.style.right_padding = 0 + button.style.bottom_padding = 0 + end end local function on_gui_click(event) @@ -196,15 +265,36 @@ local function on_gui_click(event) local player = game.players[event.element.player_index] local name = event.element.name - if (name == "player_list_button") then - local frame = player.gui.left["player-list-panel"] - if (frame) then - frame.destroy() + if (name == "player_list_button") then + if player.gui.left["player-list-panel"] then + player.gui.left["player-list-panel"].destroy() else - player_list_show(player) - end + player_list_show(player,"time_played_desc") + end end + if (name == "player_list_panel_header_2") then + if string.find(event.element.caption, symbol_desc) then + player_list_show(player,"name_asc") + else + player_list_show(player,"name_desc") + end + end + if (name == "player_list_panel_header_3") then + if string.find(event.element.caption, symbol_desc) then + player_list_show(player,"time_played_asc") + else + player_list_show(player,"time_played_desc") + end + end + if (name == "player_list_panel_header_4") then + if string.find(event.element.caption, symbol_desc) then + player_list_show(player,"pokes_asc") + else + player_list_show(player,"pokes_desc") + end + end + --Poke other players if event.element.type == "button" then local x = string.find(name, "poke_player_") @@ -233,25 +323,23 @@ local function on_gui_click(event) end -local function player_list_refresh() - if game.tick % 1800 == 0 then - local x = 1 - while game.players[x] ~= nil do - local player = game.players[x] - if player.connected then - local frame = player.gui.left["player-list-panel"] - if frame then - frame.destroy() - player_list_show(player) - end - end - x = x + 1 +local function on_tick() + if game.tick % 1200 == 0 then + for _,player in pairs(game.connected_players) do + if player.gui.left["player-list-panel"] then + local sort_method + if string.find(player.gui.left["player-list-panel"].player_list_panel_header_table.player_list_panel_header_2.caption, symbol_desc) then sort_method = "name_desc" end + if string.find(player.gui.left["player-list-panel"].player_list_panel_header_table.player_list_panel_header_2.caption, symbol_asc) then sort_method = "name_asc" end + if string.find(player.gui.left["player-list-panel"].player_list_panel_header_table.player_list_panel_header_3.caption, symbol_desc) then sort_method = "time_played_desc" end + if string.find(player.gui.left["player-list-panel"].player_list_panel_header_table.player_list_panel_header_3.caption, symbol_asc) then sort_method = "time_played_asc" end + if string.find(player.gui.left["player-list-panel"].player_list_panel_header_table.player_list_panel_header_4.caption, symbol_desc) then sort_method = "pokes_desc" end + if string.find(player.gui.left["player-list-panel"].player_list_panel_header_table.player_list_panel_header_4.caption, symbol_asc) then sort_method = "pokes_asc" end + player.gui.left["player-list-panel"].destroy() + player_list_show(player,sort_method) + end end end end - - -Event.register(defines.events.on_tick, player_list_refresh) -Event.register(defines.events.on_player_joined_game, create_player_list_button) -Event.register(defines.events.on_player_left_game, player_log_out) +Event.register(defines.events.on_tick, on_tick) +Event.register(defines.events.on_player_joined_game, on_player_joined_game) Event.register(defines.events.on_gui_click, on_gui_click) \ No newline at end of file diff --git a/poll.lua b/poll.lua index 1b5ac033..29ba1865 100644 --- a/poll.lua +++ b/poll.lua @@ -296,9 +296,9 @@ local function on_gui_click(event) end end -local function poll_timeout() - if game.tick % 60 == 0 then - for _, player in pairs(game.connected_players) do +local function on_tick() + if game.tick % 60 == 0 then + for _, player in pairs(game.connected_players) do if global.poll_panel_creation_time[player.index] then local frame = player.gui.left["poll-panel"] if frame then @@ -319,7 +319,7 @@ local function poll_timeout() end end -Event.register(defines.events.on_tick, poll_timeout) +Event.register(defines.events.on_tick, on_tick) Event.register(defines.events.on_gui_click, on_gui_click) Event.register(defines.events.on_player_joined_game, create_poll_gui) Event.register(defines.events.on_player_joined_game, poll_sync_for_new_joining_player) \ No newline at end of file