Scripting HelpersARCHIVE
A little piece of Roblox history. Preserved for everyone, one question at a time.Read about the archive →
COMMUNITY QUESTION

How would i make an infinite map without causing lag?

Hello, for one of my games i am making i'd like to make a map that generates as any player moves around i know about streamingenabled but my problem comes with server lag, so my best idea is to generate everything on the client, but i'm not too sure how to send information to other clients if anything on the map is changed, my idea is to replicate the change to server then back to clients and store the changes in the server, so when a new player joins the server can send the already existing information to the client.

2 answers

You have the right idea about loading it locally. I'd seperate the map into model chunks and only load each chunk if the character is within a certain distance from it's primary part. If it's close enough then I'd load the model a part at a time to avoid the lag from cloning a giant model into the game.

Instruction

  1. Make all the parts in the Workspace INVISIBLE (Transparency to 1)
  2. Insert in all part a BOOL VALUE with the Name RENDABLE (if you have to parts in the workspace, then use the second script) 3.Insert this in a LocalScript
--[Made 100% by Eternalove_fan32(PLS CREDITS)]--
--(sorry for bad englisch)

local RenderMaxDistance = 50 -- in Studs (Modifie only here)
local RenderMinDistance = 0 -- in Studs (Modifie only here)


local RendableParts = game.Workspace:GetDescendants() -- Hold all the Objects in the workspace

while true do
	wait(1)
	for i,Part in pairs(RendableParts)do
		if Part:IsA("BoolValue")then -- Check if the Object is a BoolValue
			if Part.Name == "Rendable"then -- Check if the Object is the BoolValue for the Rendering and not another
				-- Variable
				local RenderPart = Part.Parent
				-- Position
				local RenderPartPosition = RenderPart.Position
				local HumanoidRootPart = script.Parent:FindFirstChild("HumanoidRootPart")
				local HumanoidRootPartPosition = HumanoidRootPart.Position
				
				local RenderMagnitude = (RenderPartPosition - HumanoidRootPartPosition).Magnitude -- Calcule the Distance between the Player and the Parts that soll be render 
				
				-- Check if the Player was not to far or to close
				if RenderMagnitude >= RenderMinDistance and RenderMagnitude <= RenderMaxDistance then
					-- if the Player was not to far or to close then render the Part
					Part.Parent.Transparency = 0
				else
					-- else not Render the Part
					Part.Parent.Transparency = 1
				end
			end
		end
	end
end

Script Number 2:

local RendableParts = game.Workspace:GetDescendants()

for i,part in pairs(RendableParts) do
	if part:IsA("Part") or part:IsA("MeshPart") then
		local Bool = Istance.new("BoolValue", Part)
		Bool.Name = "Rendable"
	end
end

This discussion is preserved as it was. New answers, comments, and votes are closed.