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

0

Try providing part of the code so we can see. Are you sure you're using PlayerAdded to handle joining players?

0

Yeah

0

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 .