You can use HumanoidDescription
to solve this problem!
you can make a default rig using Roblox’s plugin in plugins tab:
[color = Red]WARNING:[/color] make sure that you delete the duped face instance in the rig’s head
now once you’re done with it you can use this script that I usually use for these cases
Script
local desc1 = game:GetService("Players"):GetHumanoidDescriptionFromUserId(Player_UserId) --> Getting the player's description(character).
local newDesc = Instance.new("HumanoidDescription") --> Instancing a new description to apply.
local model = game --> path to the cloned rig
local properties = {
"BackAccessory";
"FaceAccessory";
"FrontAccessory" ;
"HairAccessory";
"HatAccessory";
"NeckAccessory" ;
"ShouldersAccessory";
"WaistAccessory";
["BodyTypeScale"] = desc1.BodyTypeScale/2; --> Do NOT change these unless you want to make the character way more smaller
["DepthScale"] = desc1.DepthScale/2;
["HeadScale"] = desc1.HeadScale/2;
["HeightScale"] = desc1.HeightScale/2;
["ProportionScale"] = desc1.ProportionScale/2;
["WidthScale"] = desc1.WidthScale/2;
"Face";
"Head";
"LeftArm";
"LeftLeg";
"RightArm";
"RightLeg";
"Torso";
"GraphicTShirt";
"Pants";
"Shirt";
"HeadColor";
"LeftLegColor";
"LeftArmColor";
"RightArmColor";
"RightLegColor";
"TorsoColor"
}
for property,value in pairs(properties) do --> changing the new HumanoidDescription's properties to match with the player's character but smaller.
if typeof(property)~= "string" then
newDesc[value] = desc1[value]
else --> if we had a default value for the property apply it.
newDesc[property] = value
end
end
model.Humanoid:ApplyDescription(newDesc) --> applying the Description to the rig.
Result
You can read this for more information:
https://developer.roblox.com/en-us/api-reference/class/HumanoidDescription
EDIT1:
You can also make a tool with a handle and put your dummy within it, then add a server script to your dummy with the following code and boom! everything will be done automatically!
Code
local desc1 = game.Players:GetHumanoidDescriptionFromUserId(1023166785)
local newDesc = Instance.new("HumanoidDescription",game.Workspace)
local model = script.Parent
local p = {
"BackAccessory";
"FaceAccessory";
"FrontAccessory" ;
"HairAccessory";
"HatAccessory";
"NeckAccessory" ;
"ShouldersAccessory";
"WaistAccessory";
["BodyTypeScale"] = desc1.BodyTypeScale/2;
["DepthScale"] = desc1.DepthScale/2;
["HeadScale"] = desc1.HeadScale/2;
["HeightScale"] = desc1.HeightScale/2;
["ProportionScale"] = desc1.ProportionScale/2;
["WidthScale"] = desc1.WidthScale/2;
"Face";
"Head";
"LeftArm";
"LeftLeg";
"RightArm";
"RightLeg";
"Torso";
"GraphicTShirt";
"Pants";
"Shirt";
"HeadColor";
"LeftLegColor";
"LeftArmColor";
"RightArmColor";
"RightLegColor";
"TorsoColor"
}
for property,value in pairs(p) do
if typeof(property)~= "string" then
print("1",value,property, typeof(property))
newDesc[value] = desc1[value]
else
print("2",value,property)
newDesc[property] = value
end
end
model.Humanoid:ApplyDescription(newDesc)
model.Humanoid:SetStateEnabled(Enum.HumanoidStateType.Dead, false)
model.Humanoid:SetStateEnabled(Enum.HumanoidStateType.Swimming, false)
model.Humanoid:SetStateEnabled(Enum.HumanoidStateType.Running, false)
model.Humanoid:SetStateEnabled(Enum.HumanoidStateType.Ragdoll, false)
model.Humanoid:SetStateEnabled(Enum.HumanoidStateType.Freefall, false)
model.Humanoid:SetStateEnabled(Enum.HumanoidStateType.GettingUp, false)
model.Humanoid:SetStateEnabled(Enum.HumanoidStateType.Seated, false)
model.Humanoid:SetStateEnabled(Enum.HumanoidStateType.PlatformStanding, false)
model.Humanoid:SetStateEnabled(Enum.HumanoidStateType.Landed, false)
model.Humanoid:SetStateEnabled(Enum.HumanoidStateType.Flying, false)
model.Humanoid:SetStateEnabled(Enum.HumanoidStateType.FallingDown, false)
model.Humanoid:SetStateEnabled(Enum.HumanoidStateType.Climbing, false)
model.Humanoid:SetStateEnabled(Enum.HumanoidStateType.RunningNoPhysics, false)
model.Humanoid:SetStateEnabled(Enum.HumanoidStateType.StrafingNoPhysics, false)
model.Humanoid:SetStateEnabled(Enum.HumanoidStateType.None, false)
model.Humanoid:SetStateEnabled(Enum.HumanoidStateType.Physics, true)
local newModel = Instance.new("Model",model)
newModel.Name = "Rig"
newModel.PrimaryPart = model.PrimaryPart
model.PrimaryPart = nil
local weld = Instance.new("WeldConstraint",model.HumanoidRootPart)
weld.Part0 = model.Parent.Handle
weld.Part1 = model.HumanoidRootPart
for _,v in pairs(model:GetChildren()) do
if v ~= newModel and v ~= script then
v.Parent = newModel
end
end
for _,v in pairs(model:GetDescendants()) do
if v:IsA("BasePart") then
v.Anchored = false
v.CanCollide = false
v.Massless = true
end
end
model = newModel
model.Humanoid:ChangeState(Enum.HumanoidStateType.Physics)
model.Humanoid.DisplayDistanceType = Enum.HumanoidDisplayDistanceType.None