z_mirror/Krastorio2

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

Caleb HeuerFix energy absorber limitation not working0babd38f

real-fusion-reactor
1.8 KiB62 linesraw
1local util = require("scripts.util")
2
3--- @param e EventData.on_player_placed_equipment
4local function on_player_placed_equipment(e)
5  local equipment = e.equipment
6  if not equipment.valid or equipment.name ~= "kr-energy-absorber-equipment" then
7    return
8  end
9  local grid = e.grid
10  if not grid.valid then
11    return
12  end
13
14  local player = game.get_player(e.player_index)
15  if not player then
16    return
17  end
18
19  local found = 0
20  for _, equipment_spec in pairs(grid.get_contents()) do
21    if equipment_spec.name == "kr-energy-absorber-equipment" then
22      found = equipment_spec.count
23      break
24    end
25  end
26  if found <= 1 then
27    return
28  end
29
30  -- Retrieve the equipment
31  grid.take({ equipment = equipment, by_player = player })
32
33  -- Return the item
34  local cursor_stack = player.cursor_stack
35  -- If we're holding another absorber
36  if cursor_stack and cursor_stack.valid_for_read and cursor_stack.name == "kr-energy-absorber-equipment" then
37    cursor_stack.count = cursor_stack.count + 1 --[[@as uint]]
38    -- If we're holding something else or the stack is empty
39  elseif cursor_stack and player.clear_cursor() then
40    cursor_stack.set_stack({ name = "kr-energy-absorber-equipment", count = 1 })
41  end
42
43  -- Show the error
44  if (storage.error_message_tick[e.player_index] or 0) + 30 < game.ticks_played then
45    util.flying_text_with_sound(player, { "message.kr-already-one-energy-absorber-equipment" })
46  end
47  storage.error_message_tick[e.player_index] = game.ticks_played
48end
49
50local energy_absorber = {}
51
52function energy_absorber.on_init()
53  --- Holds the last tick that an energy absorber error message was displayed for each player
54  --- @type table<number, number>
55  storage.error_message_tick = {}
56end
57
58energy_absorber.events = {
59  [defines.events.on_player_placed_equipment] = on_player_placed_equipment,
60}
61
62return energy_absorber