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!
