fix: LuaItemStack could be invalid

Fixed an issue with clearing inventories of players where the command
failed due to it attempting to access LuaItemStacks that were invalid
for read
This commit is contained in:
oof2win2
2022-05-14 15:38:03 +02:00
committed by Cooldude2606
parent 8caf3c0a82
commit 15a5d8d48a
3 changed files with 17 additions and 15 deletions

View File

@@ -645,10 +645,12 @@ function Common.move_items_stack(items, surface, position, radius, chest_type)
local last_chest local last_chest
for i=1,#items do for i=1,#items do
local item = items[i] local item = items[i]
local chest = next_chest(item) if item.valid_for_read then
if not chest or not chest.valid then return error(string.format('Cant move item %s to %s{%s, %s} no valid chest in radius', item_name, surface.name, p.x, p.y)) end local chest = next_chest(item)
chest.insert(item) if not chest or not chest.valid then return error(string.format('Cant move item %s to %s{%s, %s} no valid chest in radius', item_name, surface.name, p.x, p.y)) end
last_chest = chest chest.insert(item)
last_chest = chest
end
end end
return last_chest return last_chest
end end

View File

@@ -3,13 +3,13 @@
local Event = require 'utils.event' --- @dep utils.event local Event = require 'utils.event' --- @dep utils.event
local events = require 'config.inventory_clear' --- @dep config.inventory_clear local events = require 'config.inventory_clear' --- @dep config.inventory_clear
local move_items = _C.move_items --- @dep expcore.common local move_items_stack = _C.move_items_stack --- @dep expcore.common
local function clear_items(event) local function clear_items(event)
local player = game.players[event.player_index] local player = game.players[event.player_index]
local inv = player.get_main_inventory() local inv = player.get_main_inventory()
move_items(inv.get_contents()) move_items_stack(inv)
inv.clear() inv.clear()
end end
for _, event_name in ipairs(events) do Event.add(event_name, clear_items) end for _, event_name in ipairs(events) do Event.add(event_name, clear_items) end

View File

@@ -4,7 +4,7 @@
]] ]]
local Commands = require 'expcore.commands' --- @dep expcore.commands local Commands = require 'expcore.commands' --- @dep expcore.commands
local move_items = _C.move_items --- @dep expcore.common local move_items_stack = _C.move_items_stack --- @dep expcore.common
require 'config.expcore.command_role_parse' require 'config.expcore.command_role_parse'
--- Clears a players inventory --- Clears a players inventory
@@ -14,10 +14,10 @@ Commands.new_command('clear-inventory', 'Clears a players inventory')
:add_param('player', false, 'player-role') :add_param('player', false, 'player-role')
:add_alias('clear-inv', 'move-inventory', 'move-inv') :add_alias('clear-inv', 'move-inventory', 'move-inv')
:register(function(_, player) :register(function(_, player)
local inv = player.get_main_inventory() local inv = player.get_main_inventory()
if not inv then if not inv then
return Commands.error{'expcore-commands.reject-player-alive'} return Commands.error{'expcore-commands.reject-player-alive'}
end end
move_items(inv.get_contents()) move_items_stack(inv)
inv.clear() inv.clear()
end) end)