diff --git a/commands/misc.lua b/commands/misc.lua index e77ed6e8..f94c0748 100644 --- a/commands/misc.lua +++ b/commands/misc.lua @@ -1,10 +1,15 @@ local Session = require 'utils.session_data' +local Modifiers = require 'player_modifiers' +local Server = require 'utils.server' +local Color = require 'utils.color_presets' commands.add_command( 'spaghetti', 'Does spaghett.', function(cmd) + local p_modifer = Modifiers.get_table() local player = game.player + local _a = p_modifer local param = tostring(cmd.parameter) local force = game.forces["player"] local p @@ -13,16 +18,23 @@ commands.add_command( if player ~= nil then p = player.print if not player.admin then - p("You're not admin!", {r = 1, g = 0.5, b = 0.1}) + p("[ERROR] You're not admin!", Color.fail) return end else p = log end end - if param == nil then player.print("Arguments are true/false", {r=0.22, g=0.99, b=0.99}) return end + + if param == nil then player.print("[ERROR] Arguments are true/false", Color.yellow) return end if param == "true" then - game.print("The world has been spaghettified!", {r = 1, g = 0.5, b = 0.1}) + if not _a.spaghetti_are_you_sure then + _a.spaghetti_are_you_sure = true + player.print("Spaghetti is not enabled, run this command again to enable spaghett", Color.yellow) + return + end + if _a.spaghetti_enabled == true then player.print("Spaghetti is already enabled.", Color.yellow) return end + game.print("The world has been spaghettified!", Color.success) force.technologies["logistic-system"].enabled = false force.technologies["construction-robotics"].enabled = false force.technologies["logistic-robotics"].enabled = false @@ -47,8 +59,10 @@ commands.add_command( force.technologies["worker-robots-speed-4"].enabled = false force.technologies["worker-robots-speed-5"].enabled = false force.technologies["worker-robots-speed-6"].enabled = false + _a.spaghetti_enabled = true elseif param == "false" then - game.print("The world is no longer spaghett!", {r = 1, g = 0.5, b = 0.1}) + if _a.spaghetti_enabled == false or _a.spaghetti_enabled == nil then player.print("Spaghetti is already disabled.", Color.yellow) return end + game.print("The world is no longer spaghett!", Color.yellow) force.technologies["logistic-system"].enabled = true force.technologies["construction-robotics"].enabled = true force.technologies["logistic-robotics"].enabled = true @@ -73,6 +87,7 @@ commands.add_command( force.technologies["worker-robots-speed-4"].enabled = true force.technologies["worker-robots-speed-5"].enabled = true force.technologies["worker-robots-speed-6"].enabled = true + _a.spaghetti_enabled = false end end) @@ -80,6 +95,8 @@ commands.add_command( 'generate_map', 'Pregenerates map.', function(cmd) + local p_modifer = Modifiers.get_table() + local _a = p_modifer local player = game.player local param = tonumber(cmd.parameter) local p @@ -88,18 +105,26 @@ commands.add_command( if player ~= nil then p = player.print if not player.admin then - p("You're not admin!", {r = 1, g = 0.5, b = 0.1}) + p("[ERROR] You're not admin!", Color.fail) return end else p = log end end - if param == nil then player.print("Must specify radius!", {r=0.22, g=0.99, b=0.99}) return end + if param > 50 then player.print("[ERROR] Value is too big.", Color.fail) return end + if param == nil then player.print("[ERROR] Must specify radius!", Color.fail) return end + + if not _a.generate_map then + _a.generate_map = true + player.print("[WARNING] This command will make the server LAG, run this command again if you really want to do this!", Color.yellow) + return + end local radius = param local surface = game.players[1].surface if surface.is_chunk_generated({radius, radius}) then - game.print("Map generation done!", {r=0.22, g=0.99, b=0.99}) + game.print("Map generation done!", Color.success) + _a.generate_map = nil return end surface.request_to_generate_chunks({0,0}, radius) @@ -107,13 +132,16 @@ commands.add_command( for _, pl in pairs(game.connected_players) do pl.play_sound{path="utility/new_objective", volume_modifier=1} end - game.print("Map generation done!", {r=0.22, g=0.99, b=0.99}) + game.print("Map generation done!", Color.success) + _a.generate_map = nil end) commands.add_command( 'dump_layout', 'Dump the current map-layout.', function() + local p_modifer = Modifiers.get_table() + local _a = p_modifer local player = game.player local p @@ -121,12 +149,17 @@ commands.add_command( if player ~= nil then p = player.print if not player.admin then - p("You're not admin!", {r = 1, g = 0.5, b = 0.1}) + p("[ERROR] You're not admin!", Color.warning) return end else p = log end + end + if not _a.dump_layout then + _a.dump_layout = true + player.print("[WARNING] This command will make the server LAG, run this command again if you really want to do this!", Color.yellow) + return end local surface = game.players[1].surface game.write_file("layout.lua", "" , false) @@ -167,14 +200,17 @@ commands.add_command( str = str .. t.name str = str .. '"},' game.write_file("layout.lua", str .. '\n' , true) - player.print("Dumped layout as file: layout.lua") + player.print("Dumped layout as file: layout.lua", Color.success) end + _a.dump_layout = false end) commands.add_command( 'creative', 'Enables creative_mode.', function() + local p_modifer = Modifiers.get_table() + local _a = p_modifer local player = game.player local p @@ -182,40 +218,54 @@ commands.add_command( if player ~= nil then p = player.print if not player.admin then - p("You're not admin!", {r = 1, g = 0.5, b = 0.1}) + p("[ERROR] You're not admin!", Color.fail) return end else p = log end end - game.print(player.name .. " has activated creative-mode!", {r=0.22, g=0.99, b=0.99}) - log(player.name .. " has activated creative-mode!") - player.cheat_mode = true - player.insert{name="power-armor-mk2", count = 1} - local p_armor = player.get_inventory(5)[1].grid - p_armor.put({name = "fusion-reactor-equipment"}) - p_armor.put({name = "fusion-reactor-equipment"}) - p_armor.put({name = "fusion-reactor-equipment"}) - p_armor.put({name = "exoskeleton-equipment"}) - p_armor.put({name = "exoskeleton-equipment"}) - p_armor.put({name = "exoskeleton-equipment"}) - p_armor.put({name = "energy-shield-mk2-equipment"}) - p_armor.put({name = "energy-shield-mk2-equipment"}) - p_armor.put({name = "energy-shield-mk2-equipment"}) - p_armor.put({name = "energy-shield-mk2-equipment"}) - p_armor.put({name = "personal-roboport-mk2-equipment"}) - p_armor.put({name = "night-vision-equipment"}) - p_armor.put({name = "battery-mk2-equipment"}) - p_armor.put({name = "battery-mk2-equipment"}) - local item = game.item_prototypes - local i = 0 - for k, v in pairs(item) do - i = i + 1 - if k and v.type ~= "mining-tool" then - player.force.character_inventory_slots_bonus = tonumber(i) - player.insert{name=k, count=v.stack_size} - player.print("Inserted all items") + if not _a.creative_are_you_sure then + _a.creative_are_you_sure = true + player.print("[WARNING] This command will enable creative/cheat-mode for all connected players, run this command again if you really want to do this!", Color.yellow) + return + end + if _a.creative_enabled == true then player.print("[ERROR] Creative/cheat-mode is already active!", Color.fail) return end + + game.print(player.name .. " has activated creative-mode!", Color.warning) + Server.to_discord_bold(table.concat{'[Creative] ' .. player.name .. ' has activated creative-mode!'}) + + for k, v in pairs(game.connected_players) do + v.cheat_mode = true + v.insert{name="power-armor-mk2", count = 1} + if v.character ~= nil then + local p_armor = v.get_inventory(5)[1].grid + p_armor.put({name = "fusion-reactor-equipment"}) + p_armor.put({name = "fusion-reactor-equipment"}) + p_armor.put({name = "fusion-reactor-equipment"}) + p_armor.put({name = "exoskeleton-equipment"}) + p_armor.put({name = "exoskeleton-equipment"}) + p_armor.put({name = "exoskeleton-equipment"}) + p_armor.put({name = "energy-shield-mk2-equipment"}) + p_armor.put({name = "energy-shield-mk2-equipment"}) + p_armor.put({name = "energy-shield-mk2-equipment"}) + p_armor.put({name = "energy-shield-mk2-equipment"}) + p_armor.put({name = "personal-roboport-mk2-equipment"}) + p_armor.put({name = "night-vision-equipment"}) + p_armor.put({name = "battery-mk2-equipment"}) + p_armor.put({name = "battery-mk2-equipment"}) + local item = game.item_prototypes + local i = 0 + for _k, _v in pairs(item) do + i = i + 1 + if _k and _v.type ~= "mining-tool" then + _a[k].character_inventory_slots_bonus["creative"] = tonumber(i) + v.character_inventory_slots_bonus = _a[k].character_inventory_slots_bonus["creative"] + v.insert{name=_k, count=_v.stack_size} + v.print("Inserted all base items.", Color.success) + _a.creative_enabled = true + end + end end end end) @@ -234,7 +284,7 @@ commands.add_command( p = player.print if not trusted[player.name] then if not player.admin then - p("Only admins and trusted weebs are allowed to run this command!", {r = 1, g = 0.5, b = 0.1}) + p("[ERROR] Only admins and trusted weebs are allowed to run this command!", Color.fail) return end end @@ -242,10 +292,11 @@ commands.add_command( p = log end end - if param == nil then player.print("Must specify radius!", {r=0.22, g=0.99, b=0.99}) return end + if param > 500 then player.print("[ERROR] Value is too big.", Color.warning) return end + if param == nil then player.print("[ERROR] Must specify radius!", Color.warning) return end local radius = {{x = -param, y = -param}, {x = param, y = param}} or {{x = -1, y = -1}, {x = 1, y = 1}} for _, entity in pairs(player.surface.find_entities_filtered{area = radius, type = "corpse"}) do - player.print("Cleared biter-corpses.") + player.print("Cleared biter-corpses.", Color.success) entity.destroy() end end) \ No newline at end of file diff --git a/maps/mountain_fortress_v2/main.lua b/maps/mountain_fortress_v2/main.lua index 4205a7e8..51408811 100644 --- a/maps/mountain_fortress_v2/main.lua +++ b/maps/mountain_fortress_v2/main.lua @@ -253,6 +253,7 @@ end local function set_difficulty() local wave_defense_table = WD.get_table() + wave_defense_table.threat_gain_multiplier = 2 + #game.connected_players * 0.1 --20 Players for fastest wave_interval wave_defense_table.wave_interval = 3600 - #game.connected_players * 90 @@ -260,6 +261,7 @@ local function set_difficulty() end local function on_player_joined_game(event) + local player_modifiers = Modifier.get_table() local player = game.players[event.player_index] set_difficulty() @@ -283,7 +285,7 @@ local function on_player_joined_game(event) end end - global.player_modifiers[player.index].character_mining_speed_modifier["mountain_fortress"] = 0.5 + player_modifiers[player.index].character_mining_speed_modifier["mountain_fortress"] = 0.5 Modifier.update_player_modifiers(player) end diff --git a/maps/scrapyard/main.lua b/maps/scrapyard/main.lua index ec526a02..8593bb38 100644 --- a/maps/scrapyard/main.lua +++ b/maps/scrapyard/main.lua @@ -260,6 +260,7 @@ local function on_player_left_game(event) end local function on_player_joined_game(event) + local player_modifiers = Modifier.get_table() local surface = game.surfaces[global.active_surface_index] local player = game.players[event.player_index] @@ -272,7 +273,7 @@ local function on_player_joined_game(event) end end - global.player_modifiers[player.index].character_mining_speed_modifier["scrapyard"] = 0 + player_modifiers[player.index].character_mining_speed_modifier["scrapyard"] = 0 Modifier.update_player_modifiers(player) if global.first_load then return end Public.reset_map() diff --git a/modules/hunger.lua b/modules/hunger.lua index dca94d01..d6e09d2c 100644 --- a/modules/hunger.lua +++ b/modules/hunger.lua @@ -80,6 +80,7 @@ local function update_hunger_gui(player) end function hunger_update(player, food_value) + local player_modifiers = P.get_table() if not player.character then return end if food_value == -1 and player.character.driving == true then return end @@ -117,11 +118,11 @@ function hunger_update(player, food_value) if not player.character then return end if player_hunger_buff[global.player_hunger[player.name]] < 0 then - global.player_modifiers[player.index].character_running_speed_modifier["hunger"] = player_hunger_buff[global.player_hunger[player.name]] * 0.75 + player_modifiers[player.index].character_running_speed_modifier["hunger"] = player_hunger_buff[global.player_hunger[player.name]] * 0.75 else - global.player_modifiers[player.index].character_running_speed_modifier["hunger"] = player_hunger_buff[global.player_hunger[player.name]] * 0.15 + player_modifiers[player.index].character_running_speed_modifier["hunger"] = player_hunger_buff[global.player_hunger[player.name]] * 0.15 end - global.player_modifiers[player.index].character_mining_speed_modifier["hunger"] = player_hunger_buff[global.player_hunger[player.name]] + player_modifiers[player.index].character_mining_speed_modifier["hunger"] = player_hunger_buff[global.player_hunger[player.name]] P.update_player_modifiers(player) update_hunger_gui(player) diff --git a/modules/rpg.lua b/modules/rpg.lua index 8cb3c5c8..0f947582 100644 --- a/modules/rpg.lua +++ b/modules/rpg.lua @@ -99,24 +99,25 @@ local function update_char_button(player) end local function update_player_stats(player) + local player_modifiers = P.get_table() local strength = rpg_t[player.index].strength - 10 - global.player_modifiers[player.index].character_inventory_slots_bonus["rpg"] = math.round(strength * 0.2, 3) - global.player_modifiers[player.index].character_mining_speed_modifier["rpg"] = math.round(strength * 0.008, 3) + player_modifiers[player.index].character_inventory_slots_bonus["rpg"] = math.round(strength * 0.2, 3) + player_modifiers[player.index].character_mining_speed_modifier["rpg"] = math.round(strength * 0.008, 3) local magic = rpg_t[player.index].magic - 10 local v = magic * 0.15 - global.player_modifiers[player.index].character_build_distance_bonus["rpg"] = math.round(v, 3) - global.player_modifiers[player.index].character_item_drop_distance_bonus["rpg"] = math.round(v, 3) - global.player_modifiers[player.index].character_reach_distance_bonus["rpg"] = math.round(v, 3) - global.player_modifiers[player.index].character_loot_pickup_distance_bonus["rpg"] = math.round(v * 0.5, 3) - global.player_modifiers[player.index].character_item_pickup_distance_bonus["rpg"] = math.round(v * 0.25, 3) - global.player_modifiers[player.index].character_resource_reach_distance_bonus["rpg"] = math.round(v * 0.15, 3) + player_modifiers[player.index].character_build_distance_bonus["rpg"] = math.round(v, 3) + player_modifiers[player.index].character_item_drop_distance_bonus["rpg"] = math.round(v, 3) + player_modifiers[player.index].character_reach_distance_bonus["rpg"] = math.round(v, 3) + player_modifiers[player.index].character_loot_pickup_distance_bonus["rpg"] = math.round(v * 0.5, 3) + player_modifiers[player.index].character_item_pickup_distance_bonus["rpg"] = math.round(v * 0.25, 3) + player_modifiers[player.index].character_resource_reach_distance_bonus["rpg"] = math.round(v * 0.15, 3) local dexterity = rpg_t[player.index].dexterity - 10 - global.player_modifiers[player.index].character_running_speed_modifier["rpg"] = math.round(dexterity * 0.002, 3) - global.player_modifiers[player.index].character_crafting_speed_modifier["rpg"] = math.round(dexterity * 0.015, 3) + player_modifiers[player.index].character_running_speed_modifier["rpg"] = math.round(dexterity * 0.002, 3) + player_modifiers[player.index].character_crafting_speed_modifier["rpg"] = math.round(dexterity * 0.015, 3) - global.player_modifiers[player.index].character_health_bonus["rpg"] = math.round((rpg_t[player.index].vitality - 10) * 6, 3) + player_modifiers[player.index].character_health_bonus["rpg"] = math.round((rpg_t[player.index].vitality - 10) * 6, 3) P.update_player_modifiers(player) end diff --git a/player_modifiers.lua b/player_modifiers.lua index 2a56f939..434ec693 100644 --- a/player_modifiers.lua +++ b/player_modifiers.lua @@ -1,7 +1,18 @@ --Central to add all player modifiers together. +local Global = require "utils.global" +local Event = require 'utils.event' + +local this = {} + +Global.register(this, function(t) this = t end) + local Public = {} +function Public.get_table() + return this +end + local modifiers = { "character_build_distance_bonus", "character_crafting_speed_modifier", @@ -19,7 +30,7 @@ local modifiers = { function Public.update_player_modifiers(player) for _, modifier in pairs(modifiers) do local sum_value = 0 - for _, value in pairs(global.player_modifiers[player.index][modifier]) do + for _, value in pairs(this[player.index][modifier]) do sum_value = sum_value + value end if player.character then @@ -29,19 +40,13 @@ function Public.update_player_modifiers(player) end local function on_player_joined_game(event) - if global.player_modifiers[event.player_index] then return end - global.player_modifiers[event.player_index] = {} + if this[event.player_index] then return end + this[event.player_index] = {} for _, modifier in pairs(modifiers) do - global.player_modifiers[event.player_index][modifier] = {} + this[event.player_index][modifier] = {} end end -local function on_init(event) - global.player_modifiers = {} -end - -local event = require 'utils.event' -event.on_init(on_init) -event.add(defines.events.on_player_joined_game, on_player_joined_game) +Event.add(defines.events.on_player_joined_game, on_player_joined_game) return Public \ No newline at end of file