z_mirror/EditorExtensions

git clone https://git.raiguard.me/z_mirror/EditorExtensions

Patrick 'Quezler' MounierMerge branch 'master' into patch-1e65a4b6

Quezler/patch-1
5.4 KiB187 linesraw
1local util = require("scripts.util")
2
3local character_modifiers = {
4  character_build_distance_bonus = 1000000,
5  character_mining_speed_modifier = 2,
6  character_reach_distance_bonus = 1000000,
7  character_resource_reach_distance_bonus = 1000000,
8}
9
10local equipment_to_add = {
11  { name = "ee-infinity-fission-reactor-equipment", position = { 0, 0 } },
12  { name = "ee-super-personal-roboport-equipment", position = { 1, 0 } },
13  { name = "ee-super-exoskeleton-equipment", position = { 2, 0 } },
14  { name = "ee-super-exoskeleton-equipment", position = { 3, 0 } },
15  { name = "ee-super-energy-shield-equipment", position = { 4, 0 } },
16  { name = "ee-super-night-vision-equipment", position = { 5, 0 } },
17  { name = "ee-super-battery-equipment", position = { 6, 0 } },
18  { name = "belt-immunity-equipment", position = { 7, 0 } },
19}
20
21local items_to_add = {
22  { name = "ee-infinity-accumulator", count = 50 },
23  { name = "ee-infinity-chest", count = 50 },
24  { name = "ee-super-construction-robot", count = 100 },
25  { name = "ee-super-inserter", count = 50 },
26  { name = "ee-infinity-loader", count = 50 },
27  { name = "ee-infinity-pipe", count = 50 },
28  { name = "ee-super-substation", count = 50 },
29}
30
31local items_to_remove = {
32  { name = "express-loader", count = 50 },
33  { name = "bulk-inserter", count = 50 },
34  { name = "substation", count = 50 },
35  { name = "construction-robot", count = 100 },
36  { name = "electric-energy-interface", count = 1 },
37  { name = "infinity-chest", count = 20 },
38  { name = "infinity-pipe", count = 10 },
39  { name = "linked-chest", count = 10 },
40}
41
42--- @param inventory LuaInventory?
43local function set_armor(inventory)
44  if not inventory or not inventory.valid then
45    return
46  end
47  inventory[1].set_stack({ name = script.active_mods["space-age"] and "mech-armor" or "power-armor-mk2" })
48  local grid = inventory[1].grid
49  if not grid then
50    return
51  end
52  for i = 1, #equipment_to_add do
53    grid.put(equipment_to_add[i])
54  end
55end
56
57--- @param player LuaPlayer
58local function set_character_cheats(player)
59  if player.character_reach_distance_bonus >= 1000000 then
60    return
61  end
62  local character = player.character
63  if not character or not character.valid then
64    return
65  end
66  for modifier, amount in pairs(character_modifiers) do
67    character[modifier] = character[modifier] + amount
68  end
69end
70
71--- @param player LuaPlayer
72local function set_loadout(player)
73  -- Remove default items
74  local main_inventory = player.get_main_inventory()
75  if not main_inventory then
76    return
77  end
78  local items_to_remove = items_to_remove
79  for i = 1, #items_to_remove do
80    main_inventory.remove(items_to_remove[i])
81  end
82  -- Add custom items
83  local items_to_add = items_to_add
84  for i = 1, #items_to_add do
85    main_inventory.insert(items_to_add[i])
86  end
87  if player.controller_type == defines.controllers.character then
88    set_armor(player.get_inventory(defines.inventory.character_armor))
89    set_character_cheats(player)
90  elseif player.controller_type == defines.controllers.editor then
91    set_armor(player.get_inventory(defines.inventory.editor_armor))
92  end
93end
94
95--- @param force LuaForce
96local function disable_recipes(force)
97  for _, recipe in pairs(force.recipes) do
98    if recipe.category == "ee-testing-tool" then
99      recipe.enabled = false
100    end
101  end
102end
103
104--- @param force LuaForce
105local function enable_recipes(force)
106  for _, recipe in pairs(force.recipes) do
107    if recipe.category == "ee-testing-tool" then
108      recipe.enabled = true
109    end
110  end
111  for _, player in pairs(force.players) do
112    player.clear_recipe_notifications()
113  end
114end
115
116--- @param e EventData.on_console_command
117local function on_console_command(e)
118  if e.command ~= "cheat" or not game.console_command_used then
119    return
120  end
121  local player = game.get_player(e.player_index)
122  if not player or not player.valid then
123    return
124  end
125  if e.parameters == "all" then
126    set_loadout(player)
127  end
128  enable_recipes(player.force --[[@as LuaForce]])
129  if game.is_multiplayer() then
130    player.force.print({ "message.ee-tools-enabled", player.name })
131  end
132end
133
134--- @param e EventData.on_player_created
135local function on_player_created(e)
136  local player = game.get_player(e.player_index)
137  if not player then
138    return
139  end
140  if util.in_debug_world() or util.in_testing_scenario() then
141    set_loadout(player)
142    enable_recipes(player.force --[[@as LuaForce]])
143  end
144end
145
146--- @param e EventData.on_player_toggled_map_editor
147local function on_player_toggled_map_editor(e)
148  local player = game.get_player(e.player_index)
149  if not player or not player.cheat_mode or player.controller_type ~= defines.controllers.character then
150    return
151  end
152  set_character_cheats(player)
153end
154
155local cheat_mode = {}
156
157function cheat_mode.on_configuration_changed()
158  for _, force in pairs(game.forces) do
159    for _, player in pairs(force.players) do
160      if player.cheat_mode then
161        enable_recipes(force)
162        break
163      end
164    end
165  end
166end
167
168cheat_mode.events = {
169  [defines.events.on_console_command] = on_console_command,
170  [defines.events.on_player_created] = on_player_created,
171  [defines.events.on_player_toggled_map_editor] = on_player_toggled_map_editor,
172}
173
174cheat_mode.add_remote_interface = function()
175  remote.add_interface("ee_cheat_mode", {
176    --- @param force LuaForce
177    disable_testing_recipes = function(force)
178      disable_recipes(force)
179    end,
180    --- @param force LuaForce
181    enable_testing_recipes = function(force)
182      enable_recipes(force)
183    end,
184  })
185end
186
187return cheat_mode