When multiple people load at the same time, it will take a value and duplicate it into one player's inventory. Let's say two people join, the intvalue will be created two times in a player's inventory. A player that is joining, ofcourse. And the other player that was joining does not get that intvalue. It just gives it to the other player that was joining at the same time. Does anyone know a fix for this bug? line 19-20
function loadplayerinventory(player)
repeat wait() until player.Character
print"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
playerfolder = Instance.new("Folder", game:GetService("ReplicatedStorage"))
playerfolder.Name = (player.UserId.."_folder")
local playerinventory = Instance.new("Folder", game.Workspace)
playerinventory.Name = (player.UserId.."_playerinventory")
local inventoryowner = Instance.new("StringValue", playerinventory)
inventoryowner.Name = (player.Name.."_"..player.UserId)
inventoryowner.Value = player.Name
local playerinventorystock = Instance.new("Folder", playerfolder)
playerinventorystock.Name = ("playerinventorystock")
local inventory = DSS:GetAsync(player.UserId.."_playerinventory")
local inventorystock = DSS:GetAsync(player.UserId.."_playerinventorystock")
local inventoryobjpos = DSS:GetAsync(player.UserId.."_playerinventoryobjpos")
local inventoryobjangle = DSS:GetAsync(player.UserId.."_playerinventoryobjangle")
local ObjNotAdded = Instance.new("Folder", game:GetService("ReplicatedStorage")[player.UserId.."_folder"])
ObjNotAdded.Name = ("notaddedtoinv")
local cash = DSS:GetAsync(player.UserId.."_cash")
local cashvalue = Instance.new("IntValue", playerfolder)
cashvalue.Name = ("Money")
print(cashvalue.Parent.Name)
local newslot = _G.AssignSlot(player)
local oldslot = DSS:GetAsync(player.UserId.."_playerslot")
if oldslot then
distance = newslot.PrimaryPart.Position-game.Workspace.Slots[oldslot].PrimaryPart.Position
else
distance = Vector3.new(0,0,0)
end
local loadedposes = {}
local loadedangles = {}
if inventory then
print("Calculating "..player.Name.."'s items and their positions.")
for i,v in pairs(inventory) do
local obj = game:GetService("ReplicatedStorage").Objects:WaitForChild(v)
if obj then
-------------------------------------------------------------------------------------------------------------------
local posx = inventoryobjpos[#loadedposes+1]
table.insert(loadedposes, posx)
local posy = inventoryobjpos[#loadedposes+1]
table.insert(loadedposes, posx)
local posz = inventoryobjpos[#loadedposes+1]
table.insert(loadedposes, posx)
-------------------------------------------------------------------------------------------------------------------
local angley = inventoryobjangle[#loadedangles+1]
table.insert(loadedangles, angley)
-------------------------------------------------------------------------------------------------------------------
local objclone = obj:Clone()
objclone.Parent = playerinventory
objclone:SetPrimaryPartCFrame(CFrame.new(posx+distance.x,posy+distance.y,posz+distance.z) * CFrame.Angles(0, math.rad(angley), 0))
end
end
print(player.Name.."'s items have been loaded!")
else
print"Player has no inventory!"
end
if inventorystock then
for i,v in pairs(inventorystock) do
local obj = game:GetService("ReplicatedStorage").Objects:WaitForChild(v)
if obj then
local objclone = obj:Clone()
objclone.Parent = playerfolder["playerinventorystock"]
end
end
end
cashvalue.Value = (cash)
print"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
end

3 comments
Try providing part of the code so we can see. Are you sure you're using PlayerAdded to handle joining players?
Yeah
Why is lines 21 and 57 wrapped in brackets? Brackets are redundant in your case, they should only be used in math. also, the parent argument to instance.new is deprecated, assign the parent in another line .