[DELETED BY ME] Furniture loading system feedback

I’ve decided to delete this script, because I don’t want to share my code. Please understand that.

1 Like

Pretty interesting, I’ve read through the code a bit, here’s some feedback!


First and foremost, you defined

local Parent = script.Parent.Parent.Parent

But you never really used it

I would definitely look to define variables and use them in places like this.

LoadScript:UnloadStube(script.Parent.Parent.Parent["4"])

script.Parent.Door1.Transparency = 0
script.Parent.Door1.CanCollide = true
script.Parent.Handle1.Transparency = 0
script.Parent.Handle1.CanCollide = true

script.Parent.Door2.Transparency = 1
script.Parent.Door2.CanCollide = false
script.Parent.Handle2.Transparency = 1
script.Parent.Handle2.CanCollide = false

script.Parent.Open.Value = false

script.Parent.Parent.Parent.Loaded.Value = false

Well one of the things that I think are contributing to the lag is this one line

local parts = workspace:FindPartsInRegion3(Region, nil, math.huge)

This means that it will cache ALL the parts that are in the region3
Then you are looping through ALL of those parts.

		for _, part in pairs(parts) do --this is really inefficient since you need to search all the parts
			if part.Parent:FindFirstChild("HumanoidRootPart") and game.Players:FindFirstChild(part.Parent.Name) then
				local plr = game.Players:FindFirstChild(part.Parent.Name)
				table.insert(playersInRegion,plr)
				print(plr.Name)
			end
		end

If you really insist on searching using region3, at least use either one of these
White List
Ignore List

However, I think that a better option would just to be to go through all the players, and determine if the humanoidRootPart is in the region. (Smart zone function here which I will use How do I get a player from a zone? - #7 by blokav)

function isInsideBrick(position, brick) -- this is from the other post
	local v3 = brick.CFrame:PointToObjectSpace(position)
	return (math.abs(v3.X) <= brick.Size.X / 2)
		and (math.abs(v3.Y) <= brick.Size.Y / 2)
		and (math.abs(v3.Z) <= brick.Size.Z / 2)
end

for _, player in pairs(Players:GetPlayers()) do
	local character = player.Character;
	local humanoidRootPart = character ~= nil and character:FindFirstChild("HumanoidRootPart");
	if humanoidRootPart and isInsideBrick(humanoidRootPart, RegionPunkt) then
		print(player.Name.." is in region");
	else 
		-- continue code ...
	end
end

This should definitely improve some performance. Don’t use region3 unless you have to really tbh.

That’s all for now, good luck with your project! :smiley:

1 Like

This won’t really help if you’re trying to load the room locally, when a server does something, it gets replicated across clients, therefore if a client joins a room, and the server loads it, it will be loaded on all clients.

Would highly recommend thinking that especially if you have a game with 6 rooms +, and a lot of players.