I am remaking SFOTH swords and one of them has a ability where when you double click you do a lunge attack that Is followed by a poison bubble which grows bigger damaging enemies when touching It, It works but I was wondering how to prevent making lag, you see when I use the ability and Im Inside of the bubble (The ability won't harm you If your the owner) It will lag

Script (Server Script):

local Tool = script.Parent ----The tool was originally called Swuvle (And yes, Its a underground war thing) Who even names a sword "Swuvle"?
----It was also originally called "Poison Ive" cuz I used to want to rename the SFOTH swords (Ignore dis)
local SoundFolder = Tool.Sounds
local CanDoubleClickBoolValue = Tool:WaitForChild("CanDoubleClick")
local TimerBeforeYouCanNOTDoubleClick = 0.5
local SlashAttack
local Boolens = {
	Debounce = false,
	CanDamage = false
}
local Animations = { ---Oh boi there Is alot
	EquipAnimation = Tool.EquipAnimation,
	Idle = Tool.Idle,
	Slash = Tool.Slash,
	Lunge = Tool.Lunge
}

Tool.Equipped:Connect(function()
	SoundFolder.Unsheath:Play()
	local Humanoid = Tool.Parent.Humanoid
	
	local EquipAnimationTrack = Humanoid:FindFirstChild("Animator"):LoadAnimation(Animations.EquipAnimation)
	EquipAnimationTrack:Play()
	task.wait(0.30)
	local Idle = Humanoid:FindFirstChild("Animator"):LoadAnimation(Animations.Idle)
	Idle:Play()
	Tool.Unequipped:Connect(function()
		Idle:Stop()
	end)
end)

Tool.Activated:Connect(function()
	if not Boolens.Debounce then
		Boolens.Debounce = true
		Boolens.CanDamage = true
		SoundFolder.Slash:Play()
		print("The tool has been clicked")
		local Humanoid = Tool.Parent.Humanoid

		SlashAttack = Humanoid:FindFirstChild("Animator"):LoadAnimation(Animations.Slash)
		SlashAttack:Play()
		CanDoubleClickBoolValue.Value = true
		wait(TimerBeforeYouCanNOTDoubleClick)
		CanDoubleClickBoolValue.Value = false
		Boolens.CanDamage = false
	elseif Boolens.Debounce and CanDoubleClickBoolValue.Value then
		SlashAttack:Stop()
		print("The tool has been Double clicked")
		CanDoubleClickBoolValue.Value = false
		SoundFolder.Lunge:Play()
		SoundFolder.Slash:Stop()
		local Humanoid = Tool.Parent.Humanoid
		Humanoid.Jump = true
		Humanoid.WalkSpeed = 0
		
		local Lunge = Humanoid:FindFirstChild("Animator"):LoadAnimation(Animations.Lunge)
		Lunge:Play()
		wait(0.2)
		local VectorForce = Instance.new("VectorForce", Humanoid.Parent.Torso)
		local Attachment = Instance.new("Attachment", Humanoid.Parent.Torso)
		
		VectorForce.Force = Vector3.new(0,300,-9000)
		VectorForce.Attachment0 = Attachment
		VectorForce.ApplyAtCenterOfMass = true
		game:GetService("Debris"):AddItem(VectorForce,0.5)
		game:GetService("Debris"):AddItem(Attachment,0.5)
		wait(0.3)
		Humanoid.JumpPower = 0
		wait(0.20)
		SoundFolder.Explode:Play()
		local MassiveExplosion = Instance.new("Part") ---Fun fact: Originally a white explosion that knockbacks enemies
		MassiveExplosion.Parent = game.Workspace
		MassiveExplosion.Position = Tool.Handle.Position
		MassiveExplosion.Size = Vector3.new(1,1,1)
		MassiveExplosion.BrickColor = BrickColor.Green()
		MassiveExplosion.Shape = Enum.PartType.Ball
		MassiveExplosion.Anchored = true
		MassiveExplosion.CanCollide = false
		MassiveExplosion.CastShadow = false
		MassiveExplosion.Material = Enum.Material.ForceField
		wait(0.30)
		Humanoid.JumpPower = 50
		Humanoid.WalkSpeed = 16
		MassiveExplosion.Touched:Connect(function(hit)
			local Player = game:GetService("Players"):GetPlayerFromCharacter(hit.Parent)
			if Player then
				local player1 = game.Players:GetPlayerFromCharacter(Tool.Parent)
				local player2 = game.Players:GetPlayerFromCharacter(hit.Parent)

				if (player1 ~= nil) and (player2 ~= nil) then
					local humanoid = (player2.Character or player2.CharacterAdded:Wait()):FindFirstChildWhichIsA("Humanoid")

					if (player1.TeamColor ~= player2.TeamColor) then
						if (humanoid ~= nil) then
							humanoid.Health = humanoid.Health - 20
							humanoid.WalkSpeed = 10
							humanoid.JumpPower = 30
							wait(5)
							humanoid.WalkSpeed = 16
							humanoid.JumpPower = 50
						end
					end
				end
			else
				local NPCHumanoid = hit.Parent:WaitForChild("Humanoid")
				if NPCHumanoid then
					NPCHumanoid.Health = NPCHumanoid.Health - 20
					NPCHumanoid.WalkSpeed = 10
					NPCHumanoid.JumpPower = 30
					wait(5)
					NPCHumanoid.WalkSpeed = 16
					NPCHumanoid.JumpPower = 50
				end
			end
		end)
		game:GetService("Debris"):AddItem(MassiveExplosion,3)
		while MassiveExplosion and wait(0) do
			MassiveExplosion.Size = MassiveExplosion.Size+Vector3.new(1,0,0)
			MassiveExplosion.Transparency = MassiveExplosion.Transparency + .01
		end
		wait(3)
		Boolens.Debounce = false
	end
	wait(1.5)
	Boolens.Debounce = false
end)

Tool.Handle.Touched:Connect(function(hit)
	local Player = game:GetService("Players"):GetPlayerFromCharacter(hit.Parent)
	if Player then
		local player1 = game.Players:GetPlayerFromCharacter(Tool.Parent)
		local player2 = game.Players:GetPlayerFromCharacter(hit.Parent)

		if (player1 ~= nil) and (player2 ~= nil) then
			local humanoid = (player2.Character or player2.CharacterAdded:Wait()):FindFirstChildWhichIsA("Humanoid")

			if (player1.TeamColor ~= player2.TeamColor) then
				if (humanoid ~= nil) and Boolens.CanDamage == true then
					Boolens.CanDamage = false
					humanoid:TakeDamage(10)
					humanoid.WalkSpeed = 10
					humanoid.JumpPower = 30
					wait(5)
					humanoid.WalkSpeed = 16
					humanoid.JumpPower = 50
				end
			end
		end
	else
		local NPCHumanoid = hit.Parent:WaitForChild("Humanoid")
		if NPCHumanoid and Boolens.CanDamage == true then
			Boolens.CanDamage = false
			NPCHumanoid:TakeDamage(10)
			NPCHumanoid.WalkSpeed = 10
			NPCHumanoid.JumpPower = 30
			wait(5)
			NPCHumanoid.WalkSpeed = 16
			NPCHumanoid.JumpPower = 50
		end
	end
end)