diff --git a/shared/crafting.lua b/shared/crafting.lua index 8ba96c0..f31fe90 100644 --- a/shared/crafting.lua +++ b/shared/crafting.lua @@ -376,7 +376,10 @@ end --- }) --- ``` -function makeItem(data) +function makeItem(origData) + + local data = cloneTable(origData) + local Ped = PlayerPedId() if CraftLock then return end CraftLock = true @@ -418,7 +421,7 @@ function makeItem(data) print("^1Error^7: ^2Inventory is open, you tried to break things") stopCam(0) ClearPedTasks(Ped) - if canReturn then craftingMenu(data) end + if canReturn then craftingMenu(origData) end CraftLock = false return end @@ -442,7 +445,7 @@ function makeItem(data) if not crafted then stopCam(0) ClearPedTasks(Ped) - if canReturn then craftingMenu(data) end + if canReturn then craftingMenu(origData) end CraftLock = false return end @@ -527,7 +530,7 @@ function makeItem(data) --Wait(500) stopCam(0) CraftLock = false - if canReturn then craftingMenu(data) end + if canReturn then craftingMenu(origData) end ClearPedTasks(Ped) end diff --git a/shared/helpers.lua b/shared/helpers.lua index f5c17bc..f26f4d6 100644 --- a/shared/helpers.lua +++ b/shared/helpers.lua @@ -651,6 +651,29 @@ function lookEnt(entity) end end +-- Function to clone tables, to use when referencing tables that need to be hard set +function cloneTable(obj, opts, seen) + if type(obj) ~= "table" then return obj end + seen = seen or {} + if seen[obj] then return seen[obj] end + + local copy = {} + seen[obj] = copy + + -- Copy entries + for k, v in pairs(obj) do + local k2 = (opts and opts.copy_keys) and cloneTable(k, opts, seen) or k + copy[k2] = cloneTable(v, opts, seen) + end + + -- Preserve metatable unless told not to + if not (opts and opts.strip_meta) then + local mt = getmetatable(obj) + if mt ~= nil then setmetatable(copy, mt) end + end + + return copy +end ------------------------------------------------------------- -- Material and Prop Functions