mirror of
https://github.com/PHIDIAS0303/ExpCluster.git
synced 2025-12-27 11:35:22 +09:00
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:
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user