So I made a while true loop to make fire spread in my game. The first iteration it spreads fine, the second iteration it only spreads to a few of the bricks, and after that, the code seems to completely stop. Also, the game lags quite a lot when the loop runs, so any ideas on how to optimise it? Here is the code:
while true do for i,part in pairs(game.Workspace.Map:GetDescendants()) do local Checked = part:FindFirstChild("Checked") or Instance.new("BoolValue",part) Checked.Name = "Checked" Checked.Value = false end wait(5) for i,part in pairs(game.Workspace.Map:GetDescendants()) do if part:IsA("BasePart") then if part:FindFirstChild("OnFire") then if part:FindFirstChild("FireTime") then if part.OnFire.Value == false then end if part.OnFire.Value == true then part.Parent = game.Workspace.Immune if part:FindFirstChild("Checked").Value == false then local minvector = part.Position-(part.Size/2)-Vector3.new(1,1,1) print(minvector) local maxvector = part.Position+(part.Size/2)+Vector3.new(1,1+part.FireTime.Value,1) print(maxvector) part.FireTime.Value += 1 local Region = Region3.new(minvector,maxvector) for _,spreadpart in pairs(game.Workspace:FindPartsInRegion3(Region,game.Workspace.Immune,math.huge)) do if spreadpart:FindFirstChild("OnFire") and spreadpart.Name ~= "Smoke" and spreadpart:IsA("BasePart") then spreadpart.OnFire.Value = true spreadpart.Checked.Value = true end end end end else local firetime = Instance.new("IntValue") firetime.Parent = part firetime.Name = "FireTime" end else local OnFire = Instance.new("BoolValue") OnFire.Parent = part OnFire.Value = false OnFire.Name = "OnFire" end end end end