So basically everything has been going smooth until the new roblox update and now my barrage effect clones make the game insanely laggy.
This is the code any help on optimizing it is greatly appreciated I know this might sound lazy but it would be great if you could optimize it for me and I can review the code. I have 0 idea how to optimize and this is my last hope.
local EffectModule = require(game.ServerStorage:WaitForChild("HitEffectModule")) local event = game:GetService("ReplicatedStorage"):WaitForChild("TheWorld").Barrage -- this is the event which fires from client to server local TweenService = game:GetService("TweenService") -- this is a very useful function for extra effects local Debris = game:GetService("Debris") local Damage = 1.8 local Punched = game.Workspace.Sounds.Punched --u can get ur own one im just using a free one as an example local function Detect(Character) local Hitbox = script.Hitbox:Clone() Hitbox.Parent = workspace Hitbox.CFrame = Character.PrimaryPart.CFrame * CFrame.new(0,0,Hitbox.Size.Z/2 * -1) Debris:AddItem(Hitbox,.3) local Connection Connection = Hitbox.Touched:Connect(function(hitted) if hitted.Parent:FindFirstChild("Humanoid") and not hitted:IsDescendantOf(Character) then local Enemy = hitted.Parent Enemy.Humanoid:TakeDamage(Damage) Connection:Disconnect() Hitbox:Destroy() local bv = Instance.new("BodyVelocity") bv.MaxForce = Vector3.new(1e6,1e6,1e6) bv.Velocity = Character.PrimaryPart.CFrame.LookVector * 10 Debris:AddItem(bv,.2) bv.Parent = Enemy.PrimaryPart EffectModule.Gore2(Enemy.UpperTorso) Enemy.Humanoid:LoadAnimation(script.HitAnim):Play() Punched:Play() Enemy.Humanoid.WalkSpeed = 3 wait(1) Enemy.Humanoid.WalkSpeed = 16 end end) end local function CreateArm(Character) local Stand = game:GetService("ServerStorage").StandModel.TheWorld local StartXR = math.random(150,350)/100 Detect(Character) local StartXL = math.random(150,350)/100 * -1 local StartYR = math.random(-150,250)/100 local StartYL = math.random(-150,250)/100 local LeftArmModel = Instance.new("Model") LeftArmModel.Name = "LeftArm" LeftArmModel.Parent = game.Workspace Debris:AddItem(LeftArmModel,.3) local LLA = Stand:FindFirstChild("LeftLowerArm"):Clone() LLA.Parent = LeftArmModel local LUA = Stand:FindFirstChild("LeftUpperArm"):Clone() LUA.Parent = LeftArmModel local LH = Stand:FindFirstChild("LeftHand"):Clone() LH.Parent = LeftArmModel local weld1 = Instance.new("WeldConstraint") weld1.Part0 = LH weld1.Part1 = LLA weld1.Parent = LH local weld2 = Instance.new("WeldConstraint") weld2.Part0 = LUA weld2.Part1 = LLA weld2.Parent = LUA for i , v in pairs(LeftArmModel:GetDescendants()) do if v:IsA("Texture") or v:IsA("BasePart") or v:IsA("Decal") then v.Transparency = .2 TweenService:Create(v,TweenInfo.new(.3),{Transparency = .75}):Play() end if v:IsA("Motor6D") then v:Destroy() end end LeftArmModel.PrimaryPart = LLA LeftArmModel.PrimaryPart.Anchored = true LeftArmModel.PrimaryPart.CFrame = CFrame.new(Character.PrimaryPart.CFrame * CFrame.new(StartXL,StartYL,-1.5).p,Character.PrimaryPart.CFrame * CFrame.new(StartXL * .4,StartYL * .4,-8).p) * CFrame.Angles(math.rad(90),0,0) TweenService:Create(LeftArmModel.PrimaryPart,TweenInfo.new(.3),{CFrame = LeftArmModel.PrimaryPart.CFrame * CFrame.new(0,-5,0)}):Play() local RightArmModel = Instance.new("Model") RightArmModel.Name = "LeftArm" RightArmModel.Parent = game.Workspace Debris:AddItem(RightArmModel,.3) local RLA = Stand:FindFirstChild("RightLowerArm"):Clone() RLA.Parent = RightArmModel local RUA = Stand:FindFirstChild("RightUpperArm"):Clone() RUA.Parent = RightArmModel local RH = Stand:FindFirstChild("RightHand"):Clone() RH.Parent = RightArmModel local weld1 = Instance.new("WeldConstraint") weld1.Part0 = RH weld1.Part1 = RLA weld1.Parent = RH local weld2 = Instance.new("WeldConstraint") weld2.Part0 = RUA weld2.Part1 = RLA weld2.Parent = RUA for i , v in pairs(RightArmModel:GetDescendants()) do if v:IsA("Texture") or v:IsA("BasePart") or v:IsA("Decal") then v.Transparency = .2 TweenService:Create(v,TweenInfo.new(.3),{Transparency = .75}):Play() end if v:IsA("Motor6D") then v:Destroy() end end RightArmModel.PrimaryPart = RLA RightArmModel.PrimaryPart.Anchored = true RightArmModel.PrimaryPart.CFrame = CFrame.new(Character.PrimaryPart.CFrame * CFrame.new(StartXR,StartYR,-1.5).p,Character.PrimaryPart.CFrame * CFrame.new(StartXR * .4,StartYR * .4,-8).p) * CFrame.Angles(math.rad(90),0,0) TweenService:Create(RightArmModel.PrimaryPart,TweenInfo.new(.3),{CFrame = RightArmModel.PrimaryPart.CFrame * CFrame.new(0,-5,0)}):Play() end event.OnServerEvent:Connect(function(Player,hold) local Character = Player.Character local Stand = Character:FindFirstChild(Character.Name) if Stand then if not Character:FindFirstChild("Barraging") then if hold == true and Character.UsingMove.Value == false then local barraging = Instance.new("BoolValue") barraging.Name = "Barraging" barraging.Parent = Character Character.UsingMove.Value = true Character.PrimaryPart.StandPosition.Position = Vector3.new(0,-1,-2) local Anim = Stand.AnimationController:LoadAnimation(script.Anim) Anim:Play() local Sound = script.BarrageSound:Clone() Sound.Parent = Character.PrimaryPart Sound:Play() local Starttime = tick() repeat wait(.30) CreateArm(Character) until tick() - Starttime >= 5 or not Character:FindFirstChild("Barraging") Character.PrimaryPart.StandPosition.Position = Vector3.new(-2,0.7,3) Anim:Stop() Sound:Destroy() Character.UsingMove.Value = false end else Character:FindFirstChild("Barraging"):Destroy() end end end)