From 357643d1e5eb906439314626dba8d2196d664fed Mon Sep 17 00:00:00 2001 From: Valansch Date: Thu, 9 Aug 2018 00:47:01 +0200 Subject: [PATCH 01/10] Removed merge artifact --- control.lua | 7 ------- 1 file changed, 7 deletions(-) diff --git a/control.lua b/control.lua index 636822ce..5c297b3f 100644 --- a/control.lua +++ b/control.lua @@ -187,13 +187,6 @@ Event.add( data = {} cheat_items[pi] = data end - - if player.name == 'plague006' then - -- cyan player, aquamarine text - player.color = {r = 64, g = 224, b = 208, a = 0.5} - player.chat_color = {r = 175, g = 238, b = 238, a = 0.5} - end - local stack = event.item_stack local name = stack.name From 883bcbc2ebe4f0a643888c92322e9a1dea82d8fd Mon Sep 17 00:00:00 2001 From: grilledham Date: Fri, 10 Aug 2018 17:42:42 +0100 Subject: [PATCH 02/10] updates --- map_gen/presets/toxic_danger_ore_jungle.lua | 231 ++++++++++++++++++++ 1 file changed, 231 insertions(+) create mode 100644 map_gen/presets/toxic_danger_ore_jungle.lua diff --git a/map_gen/presets/toxic_danger_ore_jungle.lua b/map_gen/presets/toxic_danger_ore_jungle.lua new file mode 100644 index 00000000..ddc94cb4 --- /dev/null +++ b/map_gen/presets/toxic_danger_ore_jungle.lua @@ -0,0 +1,231 @@ +local b = require 'map_gen.shared.builders' +local Perlin = require 'map_gen.shared.perlin_noise' +local Event = require 'utils.event' +local Global = require 'utils.global' + +local oil_seed +local uranium_seed +local density_seed +local enemy_seed + +local oil_scale = 1 / 64 +local oil_threshold = 0.6 + +local uranium_scale = 1 / 128 +local uranium_threshold = 0.65 + +local density_scale = 1 / 48 +local density_threshold = 0.5 +local density_multiplier = 50 + +Global.register_init( + {}, + function(tbl) + tbl.seed = game.surfaces[1].map_gen_settings.seed + end, + function(tbl) + local seed = tbl.seed + oil_seed = seed + uranium_seed = seed * 2 + density_seed = seed * 3 + enemy_seed = seed * 4 + end +) + +local market_items = require 'resources.market_items' +table.remove(market_items, 13) +table.remove(market_items, 9) + +Event.add( + defines.events.on_research_finished, + function(event) + local p_force = game.forces.player + local r = event.research + + if r.name == 'flamethrower' then + p_force.recipes['flamethrower'].enabled = false + p_force.recipes['flamethrower-turret'].enabled = false + end + end +) + +local trees = { + 'tree-01', + 'tree-02', + 'tree-02-red', + 'tree-03', + 'tree-04', + 'tree-05', + 'tree-06', + 'tree-06-brown', + 'tree-07', + 'tree-08', + 'tree-08-brown', + 'tree-08-red', + 'tree-09', + 'tree-09-brown', + 'tree-09-red' +} + +local trees_count = #trees + +local function tree_shape(_, _, world) + local x, y = world.x, world.y + local tree = trees[math.random(trees_count)] + + local dx = math.random(-1, 1) + local dy = math.random(-1, 1) + + return {name = tree, position = {x + dx, y + dy}} + --return {name = tree} +end + +tree_shape = b.throttle_world_xy(tree_shape, 1, 2, 1, 2) + +local worm_names = {'small-worm-turret', 'medium-worm-turret', 'big-worm-turret'} +local spawner_names = {'biter-spawner', 'spitter-spawner'} +local factor = 10 / (768 * 32) +local max_chance = 1 / 6 + +local scale_factor = 48 +local sf = 1 / scale_factor +local m = 1 / 650 +local function enemy(x, y, world) + local d = math.sqrt(world.x * world.x + world.y * world.y) + + if d < 68 then + return nil + end + + if d < 100 then + return tree_shape(x, y, world) + end + + local threshold = 1 - d * m + threshold = math.max(threshold, 0.5) -- -0.125) + + x, y = x * sf, y * sf + if Perlin.noise(x, y, enemy_seed) > threshold then + if math.random(8) == 1 then + local lvl + if d < 400 then + lvl = 1 + elseif d < 650 then + lvl = 2 + else + lvl = 3 + end + + local chance = math.min(max_chance, d * factor) + + if math.random() < chance then + local worm_id + if d > 512 then + local power = 512 / d + worm_id = math.ceil((math.random() ^ power) * lvl) + worm_id = math.clamp(worm_id, 1, 3) + else + worm_id = math.random(lvl) + end + + return {name = worm_names[worm_id]} + end + else + local chance = math.min(max_chance, d * factor) + if math.random() < chance then + local spawner_id = math.random(2) + return {name = spawner_names[spawner_id]} + end + end + else + return tree_shape(x, y, world) + end +end + +local value = b.euclidean_value + +local oil_shape = b.throttle_world_xy(b.full_shape, 1, 8, 1, 8) +local oil_resource = b.resource(oil_shape, 'crude-oil', value(250000, 200)) + +local uranium_resource = b.resource(b.full_shape, 'uranium-ore', value(200, 1)) + +local ores = { + {resource = b.resource(b.full_shape, 'iron-ore', value(25, 0.5)), weight = 6}, + {resource = b.resource(b.full_shape, 'copper-ore', value(25, 0.5)), weight = 4}, + {resource = b.resource(b.full_shape, 'stone', value(25, 0.5)), weight = 1}, + {resource = b.resource(b.full_shape, 'coal', value(25, 0.5)), weight = 2} +} + +local weighted_ores = b.prepare_weighted_array(ores) +local total_ores = weighted_ores.total + +local spawn_zone = b.circle(64) + +local ore_circle = b.circle(68) +local start_ores = { + b.resource(ore_circle, 'iron-ore', value(100, 0)), + b.resource(ore_circle, 'copper-ore', value(50, 0)), + b.resource(ore_circle, 'coal', value(100, 0)), + b.resource(ore_circle, 'stone', value(50, 0)) +} + +local start_segment = b.segment_pattern(start_ores) + +local function ore(x, y, world) + if spawn_zone(x, y) then + return + end + + local start_ore = start_segment(x, y, world) + if start_ore then + return start_ore + end + + local oil_x, oil_y = x * oil_scale, y * oil_scale + + local oil_noise = Perlin.noise(oil_x, oil_y, oil_seed) + if oil_noise > oil_threshold then + return oil_resource(x, y, world) + end + + local uranium_x, uranium_y = x * uranium_scale, y * uranium_scale + local uranium_noise = Perlin.noise(uranium_x, uranium_y, uranium_seed) + if uranium_noise > uranium_threshold then + return uranium_resource(x, y, world) + end + + local i = math.random() * total_ores + local index = table.binary_search(weighted_ores, i) + if (index < 0) then + index = bit32.bnot(index) + end + + local resource = ores[index].resource + + local entity = resource(x, y, world) + local density_x, density_y = x * density_scale, y * density_scale + local density_noise = Perlin.noise(density_x, density_y, density_seed) + + if density_noise > density_threshold then + entity.amount = entity.amount * density_multiplier + end + entity.enable_tree_removal = false + return entity +end + +local water = b.circle(8) +water = b.change_tile(water, true, 'water-green') +water = b.any {b.rectangle(16, 4), b.rectangle(4, 16), water} + +local start = b.if_else(water, b.full_shape) +start = b.change_map_gen_collision_tile(start, 'water-tile', 'grass-1') + +local map = b.choose(ore_circle, start, b.full_shape) + +map = b.apply_entity(map, ore) +map = b.apply_entity(map, enemy) + +map = b.change_map_gen_tile(map, 'water', 'water-green') +map = b.change_map_gen_tile(map, 'deepwater', 'deepwater-green') + +return map From cd5a70fe3f0b736391870a56a67eaf319091e8ab Mon Sep 17 00:00:00 2001 From: grilledham Date: Fri, 10 Aug 2018 17:42:57 +0100 Subject: [PATCH 03/10] updated regulars --- resources/regulars.lua | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/resources/regulars.lua b/resources/regulars.lua index bf893181..d866c6e0 100644 --- a/resources/regulars.lua +++ b/resources/regulars.lua @@ -157,7 +157,6 @@ return { ['kidflash'] = true, ['koretego'] = true, ['kostrahb'] = true, - ['krul'] = true, ['leadhades27'] = true, ['legionmammal978'] = true, ['lejnel'] = true, @@ -599,5 +598,26 @@ return { ['thislsamerica'] = true, ['vesorakia'] = true, ['wavethrash'] = true, - ['xjohnson'] = true + ['xjohnson'] = true, + ['Ryix'] = true, + ['Mylon'] = true, + ['Terminutter'] = true, + ['Hafgrim'] = true, + ['l3igspeck'] = true, + ['lyman'] = true, + ['zsintai1987'] = true, + ['xubos'] = true, + ['Elsa-Zhou'] = true, + ['SirBlubbalot'] = true, + ['bulb5'] = true, + ['fellan03'] = true, + ['Irx99'] = true, + ['Spocks'] = true, + ['OmniMancer'] = true, + ['TfGuy44'] = true, + ['Krul'] = true, + ['moncada'] = true, + ['Wr1190'] = true, + ['Phoenix27833'] = true, + ['reddutton'] = true } From 21084bc241e989b6c083aae6dbcb2324767ef5f6 Mon Sep 17 00:00:00 2001 From: grilledham Date: Sat, 11 Aug 2018 12:38:12 +0100 Subject: [PATCH 04/10] bacon island map --- map_gen/data/.source_images/ham.jpg | Bin 0 -> 5794 bytes map_gen/data/.source_images/pig.jpg | Bin 0 -> 18585 bytes map_gen/data/presets/ham.lua | 106 +++++++++++ map_gen/data/presets/pig.lua | 266 ++++++++++++++++++++++++++++ map_gen/presets/bacon_islands.lua | 160 +++++++++++++++++ map_gen/shared/builders.lua | 14 ++ map_layout.lua | 1 + 7 files changed, 547 insertions(+) create mode 100644 map_gen/data/.source_images/ham.jpg create mode 100644 map_gen/data/.source_images/pig.jpg create mode 100644 map_gen/data/presets/ham.lua create mode 100644 map_gen/data/presets/pig.lua create mode 100644 map_gen/presets/bacon_islands.lua diff --git a/map_gen/data/.source_images/ham.jpg b/map_gen/data/.source_images/ham.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8355353cd64f3fb7694077fd0a757cef2d7e4fbf GIT binary patch literal 5794 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 JrC9#de*g^+7MuV8 literal 0 HcmV?d00001 diff --git a/map_gen/data/.source_images/pig.jpg b/map_gen/data/.source_images/pig.jpg new file mode 100644 index 0000000000000000000000000000000000000000..01b44aa2083bd91251cf8386d43bf0cc88b130bb GIT binary patch literal 18585 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 Date: Sat, 11 Aug 2018 12:44:26 +0100 Subject: [PATCH 05/10] added loaders back to the market --- resources/market_items.lua | 3 +++ 1 file changed, 3 insertions(+) diff --git a/resources/market_items.lua b/resources/market_items.lua index 617f8dde..5d8b3510 100644 --- a/resources/market_items.lua +++ b/resources/market_items.lua @@ -57,6 +57,9 @@ return { {price = {{'coin', 350}}, offer = {type = 'give-item', item = 'energy-shield-equipment'}}, {price = {{'coin', 350}}, offer = {type = 'give-item', item = 'personal-laser-defense-equipment'}}, {price = {{'coin', 1}}, offer = {type = 'give-item', item = 'refined-hazard-concrete'}}, + {price = {{'coin', 75}}, offer = {type = 'give-item', item = 'loader'}}, + {price = {{'coin', 150}}, offer = {type = 'give-item', item = 'fast-loader'}}, + {price = {{'coin', 225}}, offer = {type = 'give-item', item = 'express-loader'}}, --[[ {price = {{'coin', 5}}, offer = {type = 'give-item', item = 'science-pack-1'}}, {price = {{'coin', 10}}, offer = {type = 'give-item', item = 'science-pack-2'}}, From cfa6c228ffab3309c7b7a4af5bbb8399986acb3e Mon Sep 17 00:00:00 2001 From: grilledham Date: Sat, 11 Aug 2018 12:45:07 +0100 Subject: [PATCH 06/10] commented out infinite storage chests --- control.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/control.lua b/control.lua index 5c297b3f..8c951e99 100644 --- a/control.lua +++ b/control.lua @@ -9,7 +9,7 @@ require 'nuke_control' require 'follow' require 'autodeconstruct' require 'corpse_util' -require 'infinite_storage_chest' +--require 'infinite_storage_chest' require 'fish_market' require 'reactor_meltdown' require 'map_layout' From c5e92425a330c0ca6c7a223a3f07c57b6358abab Mon Sep 17 00:00:00 2001 From: grilledham Date: Sat, 11 Aug 2018 13:39:48 +0100 Subject: [PATCH 07/10] updated regulars --- resources/regulars.lua | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/resources/regulars.lua b/resources/regulars.lua index d866c6e0..d6044e30 100644 --- a/resources/regulars.lua +++ b/resources/regulars.lua @@ -147,7 +147,6 @@ return { ['jedifan'] = true, ['jinnjuice'] = true, ['joe32'] = true, - ['jokerofthez'] = true, ['jono777'] = true, ['judaires'] = true, ['junhinhow'] = true, @@ -619,5 +618,28 @@ return { ['moncada'] = true, ['Wr1190'] = true, ['Phoenix27833'] = true, - ['reddutton'] = true + ['reddutton'] = true, + ['4yDo'] = true, + ['jpszat'] = true, + ['DaHolli'] = true, + ['Blaster'] = true, + ['BluJester'] = true, + ['thisisjack'] = true, + ['Appadeia'] = true, + ['Scuideie-Guy'] = true, + ['drakferion'] = true, + ['thelegendxp'] = true, + ['SteelMK'] = true, + ['Marviniusus'] = true, + ['FrostDestructor'] = true, + ['Gorganus'] = true, + ['Sirnumnum'] = true, + ['telefrog'] = true, + ['wrex82'] = true, + ['fce2'] = true, + ['wampastompa09'] = true, + ['Magic'] = true, + ['ReinekeWF'] = true, + ['JokerOfTheZ'] = true, + ['DOSorDIE'] = true } From 560b211b14704cc3cfa42b09147d9ede9d9dd1aa Mon Sep 17 00:00:00 2001 From: grilledham Date: Sat, 11 Aug 2018 13:44:11 +0100 Subject: [PATCH 08/10] updated cheated items --- control.lua | 39 ++++++++++++++++++++++++++++++++++++--- 1 file changed, 36 insertions(+), 3 deletions(-) diff --git a/control.lua b/control.lua index 8c951e99..b3234871 100644 --- a/control.lua +++ b/control.lua @@ -168,8 +168,39 @@ Event.add( end ) -global.cheated_items = {} +local minutes_to_ticks = 60 * 60 +local hours_to_ticks = 60 * 60 * 60 +local ticks_to_minutes = 1 / minutes_to_ticks +local ticks_to_hours = 1 / hours_to_ticks +local function format_time(ticks) + local result = {} + + local hours = math.floor(ticks * ticks_to_hours) + if hours > 0 then + ticks = ticks - hours * hours_to_ticks + table.insert(result, hours) + if hours == 1 then + table.insert(result, 'hour') + else + table.insert(result, 'hours') + end + end + + local minutes = math.floor(ticks * ticks_to_minutes) + table.insert(result, minutes) + if minutes == 1 then + table.insert(result, 'minute') + else + table.insert(result, 'minutes') + end + + return table.concat(result, ' ') +end + + +global.cheated_items = {} +global.cheated_items_by_timestamp = {} Event.add( defines.events.on_player_crafted_item, function(event) @@ -190,8 +221,10 @@ Event.add( local stack = event.item_stack local name = stack.name - local count = data[name] or 0 - data[name] = stack.count + count + local user_item_record = data[name] or {count = 0} + local count = user_item_record.count + local time = user_item_record["time"] or format_time(game.tick) + data[name] = {count = stack.count + count, time = time} end ) From e0832abef3a07dc353ed95c9b36dcbbbbd5eeae5 Mon Sep 17 00:00:00 2001 From: grilledham Date: Sat, 11 Aug 2018 13:53:11 +0100 Subject: [PATCH 09/10] updates --- map_gen/presets/bacon_islands.lua | 1 + 1 file changed, 1 insertion(+) diff --git a/map_gen/presets/bacon_islands.lua b/map_gen/presets/bacon_islands.lua index 4200139e..1e2aef14 100644 --- a/map_gen/presets/bacon_islands.lua +++ b/map_gen/presets/bacon_islands.lua @@ -156,5 +156,6 @@ local ore_grid = b.grid_pattern_full_overlap(ore_pattern, 50, 50, 96, 96) ore_grid = b.translate(ore_grid, -50, 64) map = b.apply_entity(map, ore_grid) +map = b.fish(map, 0.0025) return map From 7469b6304e466b8e811b13e27f7273748aa564ef Mon Sep 17 00:00:00 2001 From: grilledham Date: Mon, 13 Aug 2018 12:39:27 +0100 Subject: [PATCH 10/10] added donator rank --- player_list.lua | 17 ++++++++++++----- resources/donators.lua | 4 ++++ user_groups.lua | 5 +++++ 3 files changed, 21 insertions(+), 5 deletions(-) create mode 100644 resources/donators.lua diff --git a/player_list.lua b/player_list.lua index c4d5a6bc..691825b3 100644 --- a/player_list.lua +++ b/player_list.lua @@ -16,6 +16,7 @@ local focus_color = {r = 1, g = 0.55, b = 0.1} local rank_colors = { {r = 1, g = 1, b = 1}, -- Guest {r = 0.155, g = 0.540, b = 0.898}, -- Regular + {r = 172.6, g = 70.2, b = 215.8}, -- Donator {r = 152, g = 24, b = 206} {r = 0.093, g = 0.768, b = 0.172} -- Admin } @@ -23,6 +24,7 @@ local inv_sprite_time_step = 1 / sprite_time_step local rank_names = { 'Guest', 'Regular', + 'Donator', 'Admin' } @@ -111,12 +113,17 @@ end local function get_rank_level(player) if player.admin then - return 3 - elseif UserGroups.is_regular(player.name) then - return 2 - else - return 1 + return 4 end + + local name = player.name + if UserGroups.is_donator(name) then + return 3 + elseif UserGroups.is_regular(name) then + return 2 + end + + return 1 end local function do_poke_spam_protection(player) diff --git a/resources/donators.lua b/resources/donators.lua new file mode 100644 index 00000000..c009f2a6 --- /dev/null +++ b/resources/donators.lua @@ -0,0 +1,4 @@ +return { + ['robertkruijt'] = true, + ['aldldl'] = true +} diff --git a/user_groups.lua b/user_groups.lua index ef78d909..111b6043 100644 --- a/user_groups.lua +++ b/user_groups.lua @@ -1,4 +1,5 @@ global.regulars = require 'resources.regulars' +global.donators = require 'resources.donators' local Event = require 'utils.event' local Utils = require 'utils.utils' @@ -66,6 +67,10 @@ function Module.get_rank(player) end end +function Module.is_donator(player_name) + return global.donators[player_name] +end + Event.add( defines.events.on_player_joined_game, function(event)