How to make character have four arms instead of 2

hey guys!

i have been trying to make my character have four arms… but when you do you get 2 bricks with the bodycolor… i want to make it so the other arms also look like arms with the shirttemplate over it…

what ive tried so far is cloning my character then making evrything invisible and then welding it to our character… this seemed to partly work but the thing is… the animations are handled via the client and other players see it for our character but the other arms cant be seen since its not a part of our player… this is so annoying so i thought yk what… what if there is a diffrent way to so this… and i dont really know if its possible but please if anybody knows please help me? here is the script i used for the arms

local function GrabAndSwing(grabber, grabbed, ourhrmp)
	local armAttachment = Instance.new("Attachment")
	armAttachment.Parent = ourhrmp
	grabbed.HumanoidRootPart.CFrame = ourhrmp.CFrame
	-- Create a part to act as Part0 for the WeldConstraint
	local armPart = Instance.new("Part")
	armPart.Position = ourhrmp.Position
	armPart.Rotation = ourhrmp.Rotation
	armPart.Size = Vector3.new(1, 1, 1) -- Adjust as needed
	armPart.Transparency = 1 -- Make the part invisible
	armPart.Anchored = false
	armPart.CanCollide = false
	armPart.Parent = grabber
	armPart.Massless = true
	local armpartweld = Instance.new("Weld")
	armpartweld.Parent = ourhrmp
	armpartweld.Part0 = ourhrmp
	armpartweld.Part1 = armPart
	armAttachment.Parent = armPart
	local weldConstraint = Instance.new("WeldConstraint")
	weldConstraint.Part0 = armPart
	weldConstraint.Part1 = grabbed.HumanoidRootPart
	weldConstraint.Parent = armPart
	grabbed.HumanoidRootPart.CFrame = grabber.HumanoidRootPart.CFrame:ToWorldSpace(armPart.CFrame)
end
local function SetNetworkOwnershipRecursive(part, player)
	if part:IsA("Part") then
		if part:GetNetworkOwner() ~= player then
			part:SetNetworkOwner(player)
		end
	end

	for _, child in ipairs(part:GetChildren()) do
		if child:IsA("Part") then
			SetNetworkOwnershipRecursive(child, player)
		end
	end
end

	local newfolder = Instance.new("Folder", workspace)
				newfolder.Name = Player.Name.."vous"

				Player.Character.Archivable = true
				local Clone = Player.Character:Clone()
				Clone.Parent = newfolder
				Clone.Name = Player.Name.."2arms"
			
				Player.Character.Archivable = false
				local animator =  Clone.Humanoid.Animator -- // Used to play animations on the ViewModel.
				Clone.Humanoid.DisplayDistanceType = Enum.HumanoidDisplayDistanceType.None -- // Disable name display.
				Clone.Humanoid.HealthDisplayType = Enum.HumanoidHealthDisplayType.AlwaysOff -- // Disable health display.
				Clone.Humanoid.BreakJointsOnDeath = false
				Clone.PrimaryPart = Clone.HumanoidRootPart
				Clone:SetPrimaryPartCFrame(CFrame.new(0, 5, 10))
				local boolvalue = Instance.new("BoolValue", Player.Character)
				boolvalue.Name = "Dummievous"
				boolvalue.Value = true
				Player.Character.Parent = newfolder
				for _, Part in pairs(Clone:GetDescendants()) do
					if Part:IsA("BasePart") then
						Part.Massless = true
						Part.CastShadow = false
						Part.CanCollide = false
						game:GetService("PhysicsService"):SetPartCollisionGroup(Part, "Arms")
						local LowerName = Part.Name:lower()
						if LowerName:match("leg") or LowerName:match("foot") then
							Part:Destroy()
						elseif not (LowerName:match("arm") or LowerName:match("hand")) then
							Part.Transparency = 1
						end
					elseif Part:IsA("Decal") then
						Part:Destroy() -- // Delete all decals (Face).
					elseif Part:IsA("Accessory") then
						Part:Destroy() -- // Delete all accessories.
					elseif Part:IsA("LocalScript") then
						Part:Destroy() -- // Destroy all scripts.
					end
				end
				Clone.HumanoidRootPart.CFrame = Player.Character:FindFirstChild("HumanoidRootPart").CFrame
				local playerToCharacter = {}
				local function AssignCharacterToPlayer(player, character)
					playerToCharacter[player] = character
				end
				local function GetCharacterOfPlayer(player)
					return playerToCharacter[player]
				end
				GrabAndSwing(Player.Character, Clone, Player.Character:FindFirstChild("Torso"))
				for _, Part in pairs(Clone:GetDescendants()) do
					if Part:IsA("BasePart") then
						Part.CanCollide = false
					end
				end

thanks!

4 Likes

I don’t think so using a shirt template object will also render shirt sleeves over other 2 arms,

You’d have to make the other two arms MeshParts, then map their UVs to the Roblox shirt template.

1 Like

this could be a good idea but, do you have an example on how i would correctly apply the UVs?

since i want it dynamically with evry player?

Oh. In that case, try setting the TextureID of the MeshPart (or Special Mesh if you’re using R6) to the texture of the Shirt.

i already tried this, the template of the shirt showed up on it and it didnt work at all… this is what i am seeing
image

Hey, Now I get how you want it to be.
Just normally attach the arms to the character, for the sleeves stuff, grab the shirt’s texture and UV map the new arms to the texture where the sleeves are.

1 Like