Tweening a part ontop of another part

Hello im trying to make a spell thats similar to Viribus from rogue lineage but im facing an issue, The spell is supposed to make pillars come out of the ground infront of the player and ontop of the surface that he’s standing on but this is where the issue comes in, the pillars dont tween ontop of the surface the player is standing on and i dont know why.

this how its supposed to look:
image

this is how it turns out:
image

model:
image

code that tweens the pillars:

local function Cast(player, _type)
	local character = player.Character
	local humanoid = character.Humanoid
	local root = character.HumanoidRootPart

	print("~~ Called")
	local playerFolder = Instance.new("Folder")
	playerFolder.Name = player.Name:lower()
	playerFolder.Parent = workspace.Instancefolder


	print("~~ Folder Name: ", playerFolder.Name)

	remote:FireClient(player, "using", {true})
	_settings.Using = true
	
	for i = 1, _settings.Server.amount_of_copies, 1 do
		local clone = model:Clone()

		clone:SetPrimaryPartCFrame(root.CFrame * CFrame.new(math.random(-3,3), (clone.Two.Size.Y/2)*-1,(_settings.Server.distance_between_each * i)*-1))
		clone.Parent = playerFolder
		debris:AddItem(clone, _settings.Server.linger+ 10)
		for i,v in pairs(clone:GetChildren()) do
			if v.Name ~= "Middle" then
				local epic = tweenService:Create(v, tweenInfo, {CFrame = CFrame.new(v.CFrame.X, v.Size.Y/2, v.CFrame.Z)})
				epic:Play()
				v.Smash:Play()

				coroutine.wrap(function()
					repeat wait() until epic.PlaybackState == Enum.PlaybackState.Completed
					print("done tweening")
					wait(0.2)
					v.CanTouch = false
				end)()
				v.Touched:Connect(function(obj)
					hit(obj)
				end)
			end
		end
		wait(0.1)
	end
	
	remote:FireClient(player, "using", {false})
	_settings.Using = false
	repeat wait() until #playerFolder:GetChildren() == 0
	workspace.Instancefolder:FindFirstChild(player.Name:lower()):Destroy()
end

any help is appreciated.

update: tried some stuff out but i still cant get it to tween properly
new update code:

local function Cast(player, _type)
	local character = player.Character
	local humanoid = character.Humanoid
	local root = character.HumanoidRootPart

	print("~~ Called")
	local playerFolder = Instance.new("Folder")
	playerFolder.Name = player.Name:lower()
	playerFolder.Parent = workspace.Instancefolder


	print("~~ Folder Name: ", playerFolder.Name)

	remote:FireClient(player, "using", {true})
	_settings.Using = true
	
	for i = 1, _settings.Server.amount_of_copies, 1 do
		local clone = model:Clone()
		clone:SetPrimaryPartCFrame(root.CFrame * CFrame.new(math.random(-3,3),0,(_settings.Server.distance_between_each * i) * -1))
		clone.Parent = playerFolder
		
		for i,v in pairs(clone:GetChildren()) do
			if v.Name ~= "Middle" then
				
				raycastParams.FilterDescendantsInstances = {v, player.Character}
				raycastParams.FilterType = Enum.RaycastFilterType.Blacklist
				local rayresults = workspace:Raycast(v.rayPart.Position, Vector3.new(0, -3,0), raycastParams)
				
				if rayresults then
					local hit = rayresults.Instance
					if hit then
						print("Something got hit: ", hit.Name)
						if hit.Name ~= v.Name and hit:IsA("BasePart") then
							clone:SetPrimaryPartCFrame(clone.PrimaryPart.CFrame * CFrame.new(0, (v.Size.Y/2) * -1 , 0))
							v.Material = hit.Material
							v.Transparency = 0
							
							-- create the tween
							local tween = tweenService:Create(v, tweenInfo, {CFrame = CFrame.new(v.CFrame.X, (v.Size.Y/2) + (hit.Size.Y/2), v.CFrame.Z)})
							tween:Play()
							v.Smash:Play()
						end
					end
				end
			end
		end
	end
end

Any errors in console when testing?

You haven’t defined “tweenInfo” for both “tweenService:Create()” function calls.

You can use the enumerations found in the above documentation page.