i am trying to make a part spawn in the workspace when a player is added in a folder named "PartsInWorkspace". my issue is, when the player leaves i dont think it deletes from the game and gets GC'ed.
my first issue is my game has ungodly amount of untracked data, about 500mb in a blank, new baseplate, and on a good day like 300mb, which makes my overall memory 700 and sometimes 450 to 600. i feel my only way is to work around it. otherwise i dont really know how i can do this game idea at all because when my player moves the data goes up and doesnt ever come back down, especially when i stop testing and reenter it, the memory jumps up about 10-50mb. when i test the game with Player1 etc, it drops to about 500mb maybe 450, but it rises over time and doesnt stop(this is in a blank baseplate with nothing, and usually happens when the player moves).
so i am testing the ability to work around it and i created this script (the original works fine, this is an example script of what im working with.) i am afraid it isnt getting GC'ed when the player leaves the game, because i still notice memory rising, it does drop but less than a single mb, and it rises faster than it drops. also, lua GC is usually at 0% which tells me nothing is really getting cleaned up.
i read about scope also, but it wasnt too clear. is this "out of scope"?
one more thing, i read about disconnecting events, but when i do it doesnt activate for other players so, i assume that cant be done with this. i read about "return" as well but i dont know what that does, or how to use it in this case very well.
Thanks, any help is appreciated the code is below:
--/ all of this is located in a ServerScript --/ im gonna use a part for example to prevent a wall of code --/can player added still reference the player? game.Players.PlayerAdded:Connect(function(player) if player then local parts = game.ServerStorage.parts:GetChildren() for i=1,#parts do local v = parts[i]:Clone() if v.PartInfo.Value == player:WaitForChild("leaderstats").part.Value then v.Name = player.Name v.Parent = game.Workspace.PartsInWorkspace for i,bc in pairs(v:GetChildren())do if (bc:IsA("BasePart")) then bc.BrickColor = BrickColor.new("Alder") end end end end end end) -- when i remove the part i do this: game.Players.PlayerRemoving:Connect(function(player) for i,p in pairs(game.Workspace.PartsInWorkspace:GetChildren())do if (p:IsA("BasePart")) then if p.Name == player.Name then p:Destroy() end end end end)