mirror of
https://github.com/clusterio/clusterio.git
synced 2026-11-12 07:04:52 +09:00
56 lines
1.9 KiB
Lua
56 lines
1.9 KiB
Lua
function save_crafts(event)
|
|
if event.player_index then
|
|
local player = game.players[event.player_index]
|
|
local crafting_queue = {}
|
|
|
|
-- Avoid overwriting old save
|
|
if global["saved_crafting_queue_"..player.name] ~= nil then
|
|
player.print("You already have a saved crafting queue, restore it with /restore-crafts")
|
|
return
|
|
end
|
|
|
|
-- Serialize crafting queue
|
|
if player.crafting_queue == nil then
|
|
player.print("You can't save nothing, you silly goose")
|
|
return
|
|
end
|
|
for _, queueItem in pairs(player.crafting_queue) do
|
|
crafting_queue[queueItem.index] = {
|
|
count = queueItem.count,
|
|
recipe = queueItem.recipe,
|
|
}
|
|
end
|
|
|
|
-- Give player some more inventory space to avoid duplicating items
|
|
player.character_inventory_slots_bonus = player.character_inventory_slots_bonus + 100
|
|
-- Cancel old crafts to get the items back
|
|
while player.crafting_queue_size > 0 do
|
|
local queueItem = player.crafting_queue[1]
|
|
local recipe = game.recipe_prototypes[queueItem.recipe]
|
|
|
|
-- Cancel craft
|
|
player.cancel_crafting {
|
|
index = 1,
|
|
count = 1,
|
|
}
|
|
|
|
-- Remove ingredients from inventory
|
|
for _, item in pairs(recipe.ingredients) do
|
|
local inventory = player.get_main_inventory()
|
|
inventory.remove({
|
|
name = item.name,
|
|
count = item.amount,
|
|
})
|
|
end
|
|
game.print("Canceled craft "..recipe.name)
|
|
end
|
|
|
|
-- Remove extra inventory slots
|
|
player.character_inventory_slots_bonus = player.character_inventory_slots_bonus - 100
|
|
|
|
global["saved_crafting_queue_"..player.name] = crafting_queue
|
|
end
|
|
end
|
|
|
|
return save_crafts
|