Positioning the CFrame of an armor model

Hi! I’m making an armor equipping system for my inventory system, but the right arm and left arm parts aren’t positioned properly. I’ve tried adding CFrames to the model. (It’s also welded with weldconstraints.) But for some reason, I get this error on line 52

local rs = game:GetService("ReplicatedStorage")
local invremo = rs.RemoteEvents.Inventory.Inventory
local itemstorage = rs.Item
local fruits = itemstorage.Fruits
local weapons = itemstorage.Weapons
local armors = itemstorage.Armor

game.Players.PlayerAdded:Connect(function(play)
	play.CharacterAdded:Connect(function(char)
		local folder = Instance.new("Folder", char)
		folder.Name = "Armor"
	end)
end)

invremo.OnServerInvoke = function(plr, item, condition, itemtype)
	if condition == "Equipped" then
		if itemtype == "Weapon" then
			local cloneitem = weapons[item]:Clone()
			cloneitem.Parent = plr.Backpack
			cloneitem["Owner"].Value = plr
			cloneitem["Equip"]:Destroy()
			print("Equipped " .. item)
			return cloneitem
		elseif itemtype == "Fruit" then
			local cloneitem = fruits.Fruit[item]:Clone()
			cloneitem.Parent = plr.Backpack
			cloneitem["Owner"].Value = plr
			print("Equipped " .. item)
			return cloneitem
		elseif itemtype == "Armor" then
			for i, v in pairs(armors:GetChildren()) do
				if v.Name == item then
					for i, k in pairs(v.Model:GetChildren()) do
						if k:IsA("Model") then
							for i, e in pairs(plr.Character.Armor:GetChildren()) do
								if e:IsA("Folder") then
									e:Destroy()
								end
							end
							local clone = v:Clone()
							clone.Parent = plr.Character.Armor
							for i, armorparts in pairs(clone.Model:GetChildren()) do
								for i, bodyparts in pairs(plr.Character:GetChildren()) do
									if bodyparts:IsA("BasePart") then
										if armorparts.Name == bodyparts.Name then
											local weld = Instance.new("WeldConstraint")
											weld.Part0 = bodyparts
											weld.Part1 = armorparts.PrimaryPart
											weld.Parent = armorparts.PrimaryPart
											
											if armorparts.Name == "Right Arm" or armorparts.Name == "Left Arm" then
												armorparts.PrimaryPart.CFrame = bodyparts.CFrame + CFrame.new(0, 0.15, 0)
											else
												armorparts.PrimaryPart.CFrame = bodyparts.CFrame
											end
											
										end
									end
								end
							end
							
							return clone
						end
					end
				end
			end
		end
	elseif condition == "Unequipped" then
		invremo:InvokeClient(plr, item, itemtype)
	end
end```
local rs = game:GetService("ReplicatedStorage")
local invremo = rs.RemoteEvents.Inventory.Inventory
local itemstorage = rs.Item
local fruits = itemstorage.Fruits
local weapons = itemstorage.Weapons
local armors = itemstorage.Armor

game.Players.PlayerAdded:Connect(function(play)
	play.CharacterAdded:Connect(function(char)
		local folder = Instance.new("Folder", char)
		folder.Name = "Armor"
	end)
end)

invremo.OnServerInvoke = function(plr, item, condition, itemtype)
	if condition == "Equipped" then
		if itemtype == "Weapon" then
			local cloneitem = weapons[item]:Clone()
			cloneitem.Parent = plr.Backpack
			cloneitem["Owner"].Value = plr
			cloneitem["Equip"]:Destroy()
			print("Equipped " .. item)
			return cloneitem
		elseif itemtype == "Fruit" then
			local cloneitem = fruits.Fruit[item]:Clone()
			cloneitem.Parent = plr.Backpack
			cloneitem["Owner"].Value = plr
			print("Equipped " .. item)
			return cloneitem
		elseif itemtype == "Armor" then
			for i, v in pairs(armors:GetChildren()) do
				if v.Name == item then
					for i, k in pairs(v.Model:GetChildren()) do
						if k:IsA("Model") then
							for i, e in pairs(plr.Character.Armor:GetChildren()) do
								if e:IsA("Folder") then
									e:Destroy()
								end
							end
							local clone = v:Clone()
							clone.Parent = plr.Character.Armor
							for i, armorparts in pairs(clone.Model:GetChildren()) do
								for i, bodyparts in pairs(plr.Character:GetChildren()) do
									if bodyparts:IsA("BasePart") then
										if armorparts.Name == bodyparts.Name then
											local weld = Instance.new("WeldConstraint")
											weld.Part0 = bodyparts
											weld.Part1 = armorparts.PrimaryPart
											weld.Parent = armorparts.PrimaryPart

											if armorparts.Name == "Right Arm" or armorparts.Name == "Left Arm" then
												armorparts:SetPrimaryPartCFrame(bodyparts.CFrame * CFrame.new(0, 0.15, 0))
											else
												armorparts:SetPrimaryPartCFrame(bodyparts.CFrame)
											end

										end
									end
								end
							end

							return clone
						end
					end
				end
			end
		end
	elseif condition == "Unequipped" then
		invremo:InvokeClient(plr, item, itemtype)
	end
end

Instead of explicitly setting the “CFrame” property of the primary part of the model use the function “SetPrimaryPartCFrame()” instead which is shared by “Model” instances.

https://developer.roblox.com/en-us/api-reference/function/Model/SetPrimaryPartCFrame

What about the + cframe part? I don’t want it to multiply but instead add

This also happens image
my character moves, the model moves but it’s glitched or something.