I have this script that should cycle through a list of body parts (In a rather clunky manner) And weld a set of parts to the specified body part. However, When the script is activated, Nothing Happened

local OB = PlayerAttire:WaitForChild("OutfitBottom")

Previously, this line used FindFirstChild which resulted in OB coming back as nil. OutfitBottom is a StringValue within a folder named Outfit.

Sorry for the gross code at the bottom, I'm gonna put that list of body parts into a table or something. Thanks for any help!

wait(.1)
local player
while not player do
	wait()
	player = game:GetService('Players').LocalPlayer
	
end
local PE = Instance.new("Model")
PE.Name = ("PlayerEquipment")


function weld(p1,p2,c0)
	local w = Instance.new("Weld",p1)
	w.Part0 = p1
	w.Part1 = p2
	w.C0 = c0 or p1.CFrame:inverse() * p2.CFrame
	return w
end

local PD = player.PlayerGui:FindFirstChild("PlayerData")
local PlayerAttire = PD:FindFirstChild("Outfit")
local WD = PD:FindFirstChild("WeldData")

local Weldee = PD.Weldee


function PerformWeld()
	
	local Outfit = game.Lighting.OutfitStorage:FindFirstChild(Weldee.Value):Clone()
	local char = player.Character or player.CharacterAdded:wait()
	local CurrentSection = Outfit:FindFirstChild(WD.Value.."Components"):Clone()
	CurrentSection.Parent = char

	for _,v in pairs(CurrentSection:GetChildren()) do
		if v.ClassName == "Part" or v.ClassName == "UnionOperation" then
			v.Anchored = true
		end
	end
	
	CurrentSection.Parent = PE

	for _,v in pairs(CurrentSection:GetChildren()) do
		if v.ClassName == "Part" or v.ClassName == "UnionOperation" then
			if v ~= CurrentSection["ArmorCore"] then
				weld(v, CurrentSection["ArmorCore"])
			end
		end
	end
	
	local CurrentSectionWeld = weld(CurrentSection["ArmorCore"], char[WD.Value], CFrame.new())
	
	for _,v in pairs(CurrentSection:GetChildren()) do
		if v.ClassName == "Part" or v.ClassName == "UnionOperation" then
			v.Anchored = false
			v.CanCollide = false
		end
	end
end



function SetOutfit()
	local OB = PlayerAttire:WaitForChild("OutfitBottom")
	local OT = PlayerAttire:WaitForChild("OutfitTop")
	 OB.Value = ("Standard Military Platelegs")
	 OT.Value = ("Standard Military Platebody")
	player.PlayerGui.TeamAButton:Destroy()
	player.PlayerGui.TeamBButton:Destroy()
end

SetOutfit()
	wait(0.5)
	PE.Parent = player.Character
	local SP = game.Lighting.SwordPlaySystemMK2:Clone()
	SP.Parent = player.PlayerGui
	SP.Disabled = false
	local OT = PlayerAttire:FindFirstChild("OutfitTop")
	Weldee.value = OT.Value
	WD.Value = ("Chest")
	PerformWeld()
	wait(0.1)
	WD.Value = ("Torso")
	PerformWeld()
	wait(0.1)
	WD.Value = ("Pelvis")
	PerformWeld()
	wait(0.1)
	WD.Value = ("LeftArm")
	PerformWeld()
	wait(0.1)
	WD.Value = ("RightArm")
	PerformWeld()
	wait(0.1)
	WD.Value = ("LeftForearm")
	PerformWeld()
	wait(0.1)
	WD.Value = ("RightForearm")
	PerformWeld()
	wait(0.1)
	WD.Value = ("LeftElbow")
	PerformWeld()
	wait(0.1)
	WD.Value = ("RightElbow")
	PerformWeld()
	wait(0.1)
	WD.Value = ("LeftShoulder")
	PerformWeld()
	wait(0.1)
	WD.Value = ("RightShoulder")
	PerformWeld()
	wait(0.1)
	WD.Value = ("RightHand")
	PerformWeld()
	wait(0.1)
	WD.Value = ("LeftHand")
	PerformWeld()
	wait(0.1)
	
	Weldee.value = PlayerAttire.OutfitBottom.Value
	
	WD.Value = ("LeftThigh")
	PerformWeld()
	wait(0.1)
	WD.Value = ("LeftCalf")
	PerformWeld()
	wait(0.1)
	WD.Value = ("LeftKnee")
	PerformWeld()
	wait(0.1)
	WD.Value = ("LeftFoot")
	PerformWeld()
	wait(0.1)
	WD.Value = ("Pelvis")
	PerformWeld()
	wait(0.1)
	WD.Value = ("RighttThigh")
	PerformWeld()
	wait(0.1)
	WD.Value = ("RightCalf")
	PerformWeld()
	wait(0.1)
	WD.Value = ("RightKnee")
	PerformWeld()
	wait(0.1)
	WD.Value = ("RightFoot")
	PerformWeld()
	wait(0.1)