Why is the CFrame of my part not tweening?

I’ve been trying to tween the CFrame of this part that I have welded onto the players HumanoidRootPart. I’m not getting any results, not a single error. It just doesn’t move.

	methods["Soul Siphon"] = function()
		local char = player.Character
		local root = char.HumanoidRootPart
		local animator = char.Humanoid.Animator
		local goingon = true
		local timeer = 3
		local distance = 25
		local waittime = 0.01
		
		local Animation = animator:LoadAnimation(NecromancyAnims:FindFirstChild("SiphonAnimation"))
		Animation:Play()
		
		local tweenINFO = TweenInfo.new(
			1,
			Enum.EasingStyle.Linear,
			Enum.EasingDirection.In,
			0,
			false,
			0
		)
		
		local cloneSiphon = NecromancyModels.Siphon:Clone()
		cloneSiphon.CFrame = root.CFrame*CFrame.new(0,1,-3)
		cloneSiphon.Parent = char
		
		local weldCon = Instance.new("WeldConstraint")
		weldCon.Part0 = root
		weldCon.Part1 = cloneSiphon
		weldCon.Parent = cloneSiphon
		
		for i,living in pairs(workspace.LivingThings:GetChildren()) do -- this is so anything in the folder can get attacked (including actual players)
			living.Archivable = true
		end
		
		wait(1)
		
		Animation:AdjustSpeed(0)
		
		for _,particles in pairs(cloneSiphon:GetDescendants()) do
			if particles:IsA("ParticleEmitter") then
				if particles.Name == "Charge" then
					
					local particleSize = {0,2.56}
					local particleSize2 = {1,0}
					
					for i = 1,timeer do
						particles.Size = NumberSequence.new({NumberSequenceKeypoint.new(particleSize[1],particleSize[2]),NumberSequenceKeypoint.new(particleSize2[1],particleSize2[2])})
						wait(waittime)
					end
				elseif particles.Name == "Wave" then
					local particleSize = {0,2.12}
					local particleSize2 = {1,0.313}

					for i = 1,timeer do
						particles.Size = NumberSequence.new({NumberSequenceKeypoint.new(particleSize[1],particleSize[2]),NumberSequenceKeypoint.new(particleSize2[1],particleSize2[2])})
						wait(waittime)
					end
				elseif particles.Name == "Wave2" then
					local particleSize = {0,1.56}
					local particleSize2 = {1,0.313}

					for i = 1,timeer do
						particles.Size = NumberSequence.new({NumberSequenceKeypoint.new(particleSize[1],particleSize[2]),NumberSequenceKeypoint.new(particleSize2[1],particleSize2[2])})
						wait(waittime)
					end
				elseif particles.Name == "1" then
					local particleSize = {0,1.19}
					local particleSize2 = {1,0.0625}

					for i = 1,timeer do
						particles.Size = NumberSequence.new({NumberSequenceKeypoint.new(particleSize[1],particleSize[2]),NumberSequenceKeypoint.new(particleSize2[1],particleSize2[2])})
						wait(waittime)
					end
				elseif particles.Name == "2" then
					local particleSize = {0,2.75}
					local particleSize2 = {1,0.875}

					for i = 1,timeer do
						particles.Size = NumberSequence.new({NumberSequenceKeypoint.new(particleSize[1],particleSize[2]),NumberSequenceKeypoint.new(particleSize2[1],particleSize2[2])})
						wait(waittime)
					end
				elseif particles.Name == "Wave3" then
					local particleSize = {0,2.56}
					local particleSize2 = {1,0.125}

					for i = 1,timeer do
						particles.Size = NumberSequence.new({NumberSequenceKeypoint.new(particleSize[1],particleSize[2]),NumberSequenceKeypoint.new(particleSize2[1],particleSize2[2])})
						wait(waittime)
					end
				end
			end
		end
		
		Animation:AdjustSpeed(1)
		TweenService:Create(cloneSiphon,tweenINFO,{CFrame = cloneSiphon.CFrame*CFrame.new(0,2.5,0)}):Play()
		wait(.45)
		Animation:AdjustSpeed(0)
		
		spawn(function()
			repeat
				for i,living in pairs(workspace.LivingThings:GetChildren()) do
					if player:DistanceFromCharacter(living.HumanoidRootPart.Position) <= distance and living.Name ~= player.Name then
						if living.Archivable == true then
							print(living.Name)
							local beam = NecromancyModels.SiphonBeam:Clone()
							local attachment = Instance.new("Attachment")
							
							attachment.Name = "ForBeam"
							attachment.Parent = living.HumanoidRootPart

							beam.Attachment0 = cloneSiphon.ForBeam
							beam.Attachment1 = attachment

							beam.Parent = cloneSiphon
							spawn(function()
								local enemyPart = NecromancyModels.EnemyParticle:Clone()
								enemyPart.Parent = living.HumanoidRootPart
								wait(10)
								enemyPart:Destroy()
							end)
							
							living.Archivable = false
						elseif living.Archivable == false and player:DistanceFromCharacter(living.HumanoidRootPart.Position) <= distance and living.Name ~= player.Name then
							Magic:DealDamage(char,living,.5,script.Parent)
						end
					else
						if living.Archivable == false and living.Name ~= player.Name then
							living.HumanoidRootPart.ForBeam:Destroy()
							living.HumanoidRootPart.EnemyParticle:Destroy()
							cloneSiphon.SiphonBeam:Destroy()
							living.Archivable = true
						end
					end
				end
				RunService.Heartbeat:Wait()
			until goingon == false
		end)
		
		spawn(function()
			wait(10)
			for i,living in pairs(workspace.LivingThings:GetChildren()) do
				living.Archivable = true
			end
				Animation:AdjustSpeed(1)
				goingon = false
				cloneSiphon:Destroy()
		end)
		
	end

I don’t think you can forcefully move CFrame when the part is welded by a Weld or WeldConstraint.
Try using an actual Weld, and tween the Weld’s C0 or C1 property instead.

-- this function welds two parts in place.
local function WeldTwoParts(part0, part1)
    local Weld = Instance.new("Weld")
    Weld.Name = part0.Name .. "_" .. part1.Name
    Weld.Part0 = part0
    Weld.Part1 = part1
    Weld.C0 = part0.CFrame:ToObjectSpace(part1.CFrame)
    Weld.Parent = part1
    return Weld
end

-- assume this is the TweenService and it's TweenInfo you're going to use
local TweenService
local tween_info

-- assume this is a HumanoidRootPart
local RootPart

-- assume this is the part you're trying to move
local Part

-- welding the two parts
Part.CFrame = RootPart.CFrame
local Weld = WeldTwoParts(RootPart, Part)

-- getting the positions
local CurrentCFrame = Weld.C0
local TargetCFrame = CurrentCFrame * CFrame.new(0, 2.5, 0)

-- animation
TweenService:Create(Weld, tween_info, {
    C0 = TargetCFrame
}):Play()
1 Like

Thanks a lot man! Really appreciate the help. Finally I can continue.