How do I create a gun stance?

Hi, I have a interesting problem, so I want to try and create a gun model (which I have already done), and use that gun model on a gun stance (Basically putting the gun on a clone), but the clone will only appear after the game has started, I am trying to have both hands of the clone (Right side on “Grip” and Left side on “HandGaurd”)

The issue is that it is either not, or cannot find the gun parts, or it gives me an error saying that the gun parts are nil, I also tried to move and rotate the body parts of the clone (“RightUpperArm” “RightLowerArm” “RightHand” “LeftUpperArm” “LeftLowerArm” “LeftHand”), but it does not work, It does not give any errors.

I have tried to put the gun orientation script inside of clone, thats what I tried first, and I tried putting it in seperate scripts, I tried using different methods, but those methods do not work as well

local player = game.Players.LocalPlayer
local character = player.Character or player.CharacterAdded:Wait()
local humanoid = character:WaitForChild("Humanoid")

local clone = character:Clone()
clone.Parent = workspace
clone.Name = "Clone"

local handGuard = workspace:WaitForChild("HandGuard") -- Assuming "HandGuard" is the name of the handguard part in Workspace
local grip = workspace:WaitForChild("Grip") -- Assuming "Grip" is the name of the grip part in Workspace

local rightUpperArm = clone:WaitForChild("RightUpperArm")
local rightLowerArm = rightUpperArm:WaitForChild("RightLowerArm")
local rightHand = rightLowerArm:WaitForChild("RightHand")

local leftUpperArm = clone:WaitForChild("LeftUpperArm")
local leftLowerArm = leftUpperArm:WaitForChild("LeftLowerArm")
local leftHand = leftLowerArm:WaitForChild("LeftHand")

-- Position and orient the right arm and hand
rightUpperArm.CFrame = CFrame.new(Vector3.new(-0.5, 1.5, 0)) * CFrame.Angles(math.rad(0), 0, 0)
rightLowerArm.CFrame = CFrame.new(Vector3.new(0, -1, 0)) * CFrame.Angles(math.rad(45), 0, 0)
rightHand.CFrame = CFrame.new(Vector3.new(0, -0.5, 0.5)) * CFrame.Angles(math.rad(90), 0, 0)

-- Position and orient the left arm and hand
leftUpperArm.CFrame = CFrame.new(Vector3.new(0.5, 1.5, 0)) * CFrame.Angles(math.rad(0), 0, 0)
leftLowerArm.CFrame = CFrame.new(Vector3.new(0, -1, 0)) * CFrame.Angles(math.rad(45), 0, 0)
leftHand.CFrame = CFrame.new(Vector3.new(0, -0.5, -0.5)) * CFrame.Angles(math.rad(90), 0, 0)

-- Position and orient the gun parts in the hands
handGuard.CFrame = rightHand.CFrame * CFrame.new(0, 0, 1) * CFrame.Angles(math.rad(180), 0, 0)
grip.CFrame = rightHand.CFrame * CFrame.new(0, 0, -1) * CFrame.Angles(math.rad(180), 0, 0)
--Here is the other scripts I tried
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local CloneAvatarEvent = ReplicatedStorage:WaitForChild("CloneAvatarEvent")
local Players = game:GetService("Players")

local function orientateAndPositionBodyParts(clone)
    local leftUpperArm = clone:WaitForChild("LeftUpperArm")
    local leftLowerArm = clone:WaitForChild("LeftLowerArm")
    local leftHand = clone:WaitForChild("LeftHand")
    local rightUpperArm = clone:WaitForChild("RightUpperArm")
    local rightLowerArm = clone:WaitForChild("RightLowerArm")
    local rightHand = clone:WaitForChild("RightHand")

    leftUpperArm.CFrame = CFrame.new(14.164, 1.655, 0.001)
    leftLowerArm.CFrame = CFrame.new(26.778, 1.655, 0)
    leftHand.CFrame = CFrame.new(26.778, 1.655, 0)

    rightUpperArm.CFrame = CFrame.new(32.589, 1.654, 0)
    rightLowerArm.CFrame = CFrame.new(55.894, 1.655, 0)
    rightHand.CFrame = CFrame.new(55.894, 1.655, 0)
end

local function clonePlayerCharacter(player)
    local character = player.Character or player.CharacterAdded:Wait()
    character.Archivable = true

    local newAvatar = character:Clone()
    newAvatar:SetPrimaryPartCFrame(CFrame.new(Vector3.new(0, 0, 0)))
    newAvatar.Parent = game.Workspace
    newAvatar:MoveTo(Vector3.new(0, 0, 0))
    orientateAndPositionBodyParts(newAvatar)

    return newAvatar
end

CloneAvatarEvent.OnServerEvent:Connect(clonePlayerCharacter)

Players.PlayerAdded:Connect(function(player)
    CloneAvatarEvent:FireClient(player)
end)

print("Script loaded successfully.")
--and than the clone kept appearing somewhere else than 0, 0, 0
local function clonePlayerCharacter(player)
    local character = player.Character or player.CharacterAdded:Wait()
    character.Archivable = true
    local newAvatar = character:Clone()
    newAvatar:SetPrimaryPartCFrame(CFrame.new(Vector3.new(0, 0, 0)))
    newAvatar.Parent = game.Workspace
    newAvatar:MoveTo(Vector3.new(0, 0, 0))

    local gunModel = game.Workspace.M4A1:Clone()
    gunModel.Parent = game.Workspace

    local rightHand = newAvatar:FindFirstChild("GRIP")
    local leftHand = newAvatar:FindFirstChild("Handle")

    if rightHand and leftHand then
        local rightOffset = CFrame.new(0, -1, -1.5)
        local rightRotation = CFrame.Angles(math.rad(90), 0, 0)
        gunModel:SetPrimaryPartCFrame(rightHand.CFrame * rightOffset * rightRotation)

        local leftOffset = CFrame.new(0, -1, 1.5)
        local leftRotation = CFrame.Angles(math.rad(90), 0, 0)
        gunModel:SetPrimaryPartCFrame(leftHand.CFrame * leftOffset * leftRotation)
    else
        warn("RightHand (GRIP) or LeftHand (Handle) not found in character model.")
    end
end'
--if i use this script, it will keep saying that it cannot find the parts "grip and handle"
local function clonePlayerCharacter(player)
    local character = player.Character or player.CharacterAdded:Wait()
    character.Archivable = true
    local newAvatar = character:Clone()
    newAvatar:SetPrimaryPartCFrame(CFrame.new(Vector3.new(0, 0, 0)))
    newAvatar.Parent = game.Workspace
    newAvatar:MoveTo(Vector3.new(0, 0, 0))

    local humanoid = newAvatar:WaitForChild("Humanoid")
    local torso = newAvatar:WaitForChild("UpperTorso")

    -- Get the right and left arms
    local rightArm = newAvatar:WaitForChild("Right Arm")
    local leftArm = newAvatar:WaitForChild("Left Arm")

    -- Calculate the target positions for the arms
    local rightArmTarget = torso.Position + Vector3.new(0, 1, -1.5)  -- Example offset, adjust as needed
    local leftArmTarget = torso.Position + Vector3.new(0, 1, 1.5)  -- Example offset, adjust as needed

    -- Move the arms to the target positions
    humanoid:MoveTo(rightArmTarget, rightArm)
    humanoid:MoveTo(leftArmTarget, leftArm)
end
--i simplified the script to see if it would work, but it gave me error: 21:41:04.547  Infinite yield possible on 'Workspace.flhkjudkrutj:WaitForChild("Right Arm")'  -  Studio

really need help, like, where did I do wrong? the arms not even moving, its either no error, or part cannot be found, or infinite yield possible on “location”

I also tried to add wait to the script, thinking that the parts might not have loaded, but no luck