z_mirror/EditorExtensions

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

Caleb HeuerFix reach distance not being increased8f6b3b1

hidden-items
5.1 KiB173 linesraw
1local util = require("__EditorExtensions__/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-fusion-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 = "stack-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 = "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
111end
112
113--- @param e EventData.on_console_command
114local function on_console_command(e)
115  if e.command ~= "cheat" or not game.console_command_used then
116    return
117  end
118  local player = game.get_player(e.player_index)
119  if not player or not player.valid then
120    return
121  end
122  if e.parameters == "all" then
123    set_loadout(player)
124  end
125  enable_recipes(player.force --[[@as LuaForce]])
126  if game.is_multiplayer() then
127    player.force.print({ "message.ee-tools-enabled", player.name })
128  end
129end
130
131--- @param e EventData.on_player_created
132local function on_player_created(e)
133  local player = game.get_player(e.player_index)
134  if not player then
135    return
136  end
137  if util.in_debug_world() or util.in_testing_scenario() then
138    set_loadout(player)
139    enable_recipes(player.force --[[@as LuaForce]])
140  end
141end
142
143--- @param e EventData.on_player_toggled_map_editor
144local function on_player_toggled_map_editor(e)
145  local player = game.get_player(e.player_index)
146  if not player or not player.cheat_mode or player.controller_type ~= defines.controllers.character then
147    return
148  end
149  set_character_cheats(player)
150end
151
152local cheat_mode = {}
153
154cheat_mode.events = {
155  [defines.events.on_console_command] = on_console_command,
156  [defines.events.on_player_created] = on_player_created,
157  [defines.events.on_player_toggled_map_editor] = on_player_toggled_map_editor,
158}
159
160cheat_mode.add_remote_interface = function()
161  remote.add_interface("ee_cheat_mode", {
162    --- @param force LuaForce
163    disable_testing_recipes = function(force)
164      disable_recipes(force)
165    end,
166    --- @param force LuaForce
167    enable_testing_recipes = function(force)
168      enable_recipes(force)
169    end,
170  })
171end
172
173return cheat_mode