I wrote a code down below that's supposed to counteract gravity in parts that the "manipulator" part is pointing at. However, sometimes the loop in the function "manipulate" runs once, twice, or not at all. I know that it's not the if statement on line 10 that's stopping the code, because I tried to troubleshoot my code there by printing a phrase, and it didn't print anything. Any help?
local event = Instance.new("RemoteEvent",game.ReplicatedFirst) event.Name = "descendantadded" local parts = {} local function manipulate(manipulator,part) coroutine.resume(coroutine.create(function() local n while true do if not manipulator or not part then return end local p = manipulator:pointToObjectSpace(part.Position) if p.x <= -manipulator.Size.x/2 and p.x >= -manipulator.Size.x/2 and p.z <= -manipulator.Size.z/2 and p.z >= -manipulator.Size.z/2 and p.y >= manipulator.Size.y/2 then if not part:FindFirstChild("NoGravity") then n = Instance.new("BodyForce",part) n.Name = "NoGravity" end n.Force = Vector3.new(0,196.2,0)*part:GetMass() else if part:FindFirstChild("NoGravity") then n:Destroy() end end game:GetService("RunService").RenderStepped:wait() end end)) end local function findparts(manipulator) event.OnServerEvent:connect(function(nothing,descendant) manipulate(manipulator,descendant) end) for i,v in pairs(parts) do manipulate(manipulator,v) end end workspace.DescendantAdded:connect(function(descendant) if descendant:IsA("Part") and descendant.Name ~= "Baseplate" then if descendant.Name == "Gravity Manipulator" then findparts(descendant) else table.insert(parts,#parts+1,descendant) event:FireServer(descendant) end end end) workspace.DescendantRemoving:connect(function(descendant) for i,v in pairs(parts) do if v == descendant then table.remove(parts,i) break end end end) local function indexparts(instance) local children = instance:GetChildren() if #children > 0 then for i,v in pairs(children) do if #v:GetChildren() > 0 then indexparts(v) end if v:IsA("Part") and v.Name ~= "Baseplate" then if v.Name == "Gravity Manipulator" then findparts(v) else table.insert(parts,#parts+1,v) end end end end end indexparts(workspace)
Nevermind, I fixed it. Line 13 was casting the method on the part "manipulator", rather than its cframe.