So basically, I made a turret that detects when a humanoid is in its range, and it will fire missiles at it, that fly towards the humanoid using RocketPropulsion. It works just fine, however when there are many humanoids in the place (NOT within he turrets range!), the missiles just get slow. And I mean, really slow. The moment I get rid of all the humanoids, it returns to normal speed. And its only the missiles that are slow; the rest of the place moves around and runs just fine.
So yeah, why is this happening? The game is a MOBA by the way, so if you know what that means, this effect occurs the moment minions spawn. Here's the code if you want to see the turret script, there will be some things you wont understand though :
local arr = { } local delay = 2-- speed of shooting local tempdelay = 0 local previouschar local range = 52 while wait(0.1) do arr = { } for _,v in pairs(script.Parent:GetChildren()) do if v:IsA("ObjectValue") then table.insert(arr,v) end end if #arr > 0 then local ind = 1 if (Workspace:FindFirstChild(arr[1].Name) == nil) then arr[1]:Destroy() else local minrange = (script.Parent.Torso.Position - Workspace[arr[1].Name].Torso.Position).magnitude for i = 1,#arr do local r = (script.Parent.Torso.Position - Workspace[arr[i].Name].Torso.Position).magnitude if (r < minrange and r <= range) then minrange = r ind = i end end if minrange <= range then local char = Workspace:findFirstChild(arr[ind].Name) if char ~= nil then if game.Players:FindFirstChild(char.Name) ~= nil then if game.Players[char.Name]:findFirstChild("Ding") == nil then local dng = script.Parent.Ding:Clone() dng.Parent = game.Players[char.Name] dng:Play() end script.Parent.DetectorV.BrickColor = BrickColor.Red() else if (previouschar ~= nil) then if (game.Players:findFirstChild(previouschar.Name) ~= nil) then if game.Players[previouschar.Name]:findFirstChild("Ding") ~= nil then game.Players[previouschar.Name].Ding:Destroy() end end end script.Parent.DetectorV.BrickColor = BrickColor.Green() end if tempdelay >= delay then tempdelay = 0 local sht = script.Parent.Shoot:Clone() sht.Parent = char.Torso sht:Play() local hitsound = script.Parent.Hit:Clone() local blast = script.Parent.Diamond:Clone() blast.Script:Destroy() blast.Transparency = 0.3 blast.CanCollide = false blast.Anchored = false blast.Name = "Blast" blast.Parent = script.Parent blast.CFrame = script.Parent.Diamond.CFrame local rp = Instance.new("RocketPropulsion",blast) rp.ThrustP = 3 * char.Humanoid.WalkSpeed rp.MaxSpeed = 3 * char.Humanoid.WalkSpeed local targ = Instance.new("StringValue",blast) targ.Name = "Target" targ.Value = arr[ind].Name local fire = Instance.new("Fire",blast) if blast.BrickColor.Name == "Bright green" then fire.Color = Color3.new(0.5,1,0) fire.SecondaryColor = Color3.new(0,1,0) else fire.Color = Color3.new(0.5,0,1) fire.SecondaryColor = Color3.new(0,0,1) end hitsound.Parent = blast local sc = script.BlastScript:clone() sc.Parent = blast sc.Disabled = false end previouschar = char end end end else script.Parent.DetectorV.BrickColor = BrickColor.Yellow() end tempdelay = tempdelay + 0.1 end
Here is the Missile Script :
local diam = script.Parent local rp = diam:findFirstChild("RocketPropulsion") local targ = diam:findFirstChild("Target") local hit = diam:findFirstChild("Hit") if (rp == nil or targ == nil or hit == nil) then print("Lacking rocketpropulsion or target or sound") script.Parent:Destroy() end local char = Workspace:FindFirstChild(targ.Value) if char ~= nil then rp.Target = char.Torso rp:Fire() print("Fired") end rp.ReachedTarget:connect(function() if char ~= nil then char.Humanoid:TakeDamage(10) hit:Play() end script.Parent:Destroy() end)
Thanks in advance!