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
for i=1,#items do
local item = items[i]
local chest = next_chest(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
chest.insert(item)
last_chest = chest
if item.valid_for_read then
local chest = next_chest(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
chest.insert(item)
last_chest = chest
end
end
return last_chest
end

View File

@@ -3,13 +3,13 @@
local Event = require 'utils.event' --- @dep utils.event
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 player = game.players[event.player_index]
local inv = player.get_main_inventory()
move_items(inv.get_contents())
move_items_stack(inv)
inv.clear()
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 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'
--- Clears a players inventory
@@ -14,10 +14,10 @@ Commands.new_command('clear-inventory', 'Clears a players inventory')
:add_param('player', false, 'player-role')
:add_alias('clear-inv', 'move-inventory', 'move-inv')
:register(function(_, player)
local inv = player.get_main_inventory()
if not inv then
return Commands.error{'expcore-commands.reject-player-alive'}
end
move_items(inv.get_contents())
inv.clear()
end)
local inv = player.get_main_inventory()
if not inv then
return Commands.error{'expcore-commands.reject-player-alive'}
end
move_items_stack(inv)
inv.clear()
end)