I have Hair Givers that Gives Custom Model Hairs NOT Accessory or Hat but a “Model”
https://gyazo.com/e153db0b5be45897c9a652935c4b10b3
They work fine but when I want to change the Size of the Entire Model two things will always happen
- It will break the Welds but I fix this by Re-Welding the Model to the Character’s Head
- The Model’s CFrame Changes and it’s Position is weird
Before Size Change
https://gyazo.com/0b187f44ef51d75cc8e9dbb549c639ca
After Size Change
https://gyazo.com/bfb7b7507beb57849beaf2e903802cc2
Here’s the Place File (72.8 KB)
Code
-- SERVICES --
local Players = game:GetService('Players')
-- VARS --
local SizeChanger = workspace:WaitForChild('SizeChanger')
local SizeChangerClickDetector = SizeChanger:WaitForChild('ClickDetector')
local SizeChangerButton = SizeChanger:WaitForChild('Button')
local DB
local Colors3 = {Red = Color3.new(1,0,0),Green = Color3.new(0,1,0)}
local SizeControlProp = {'BodyDepthScale','BodyHeightScale','BodyWidthScale','HeadScale'}
-- FUNCTIONS --
local function GetModel(Part)
local Model = Part:FindFirstAncestorOfClass('Model')
local Humanoid = Model and Model:FindFirstChildOfClass('Humanoid')
local Player = Humanoid and Players:GetPlayerFromCharacter(Model)
return Player,Model,Humanoid
end
local function Resize(Cha,Model,Scale) -- This is probably where it's broken
for _,v in pairs(Model:GetDescendants()) do
if v:IsA('BasePart') then
local VCFrame = v.CFrame
local _,_,_,C0,C1,C2,C3,C4,C5,C6,C7,C8 = VCFrame:components()
v.Size = v.Size * Scale
v.CFrame = CFrame.new(VCFrame.p * Scale) * CFrame.new(0,0,0,C0,C1,C2,C3,C4,C5,C6,C7,C8)
local Weld1 = Instance.new("Weld")
Weld1.Part0 = Model.Middle
Weld1.Part1 = v
local CF = CFrame.new(Model.Middle.Position)
local C0 = Model.Middle.CFrame:inverse()*CF
local C1 = v.CFrame:inverse()*CF
Weld1.C0 = C0
Weld1.C1 = C1
Weld1.Parent = Model.Middle
local Weld2 = Instance.new("Weld")
Weld2.Part0 = Cha.Head
Weld2.Part1 = Model.Middle
Weld2.C0 = CFrame.new(0, 0, 0)
Weld2.Parent = Weld2.Part0
end
end
end
local function ChangeSize(Par)
if not DB then
DB = true
SizeChangerButton.Color = Colors3.Red
if Par:IsA('Player') then
local plr,Cha,Hum = Par, Par.Character, Par.Character.Humanoid
if plr and Cha and Hum then
for i = 1 , #SizeControlProp do
local v = SizeControlProp[i]
Hum[v].Value = .8
end
end
Resize(plr.Character,plr.Character:FindFirstChild('Headz'),Vector3.new(.8,.8,.8))
elseif Par:IsA('BasePart') then
local plr,Cha,Hum = GetModel(Par)
if plr and Cha and Hum then
for i = 1 , #SizeControlProp do
local v = SizeControlProp[i]
Hum[v].Value = .8
end
end
Resize(plr.Character,plr.Character:FindFirstChild('Headz'),Vector3.new(.8,.8,.8))
end
wait(5)
DB = false
SizeChangerButton.Color = Colors3.Green
end
end
-- SCRIPTS --
SizeChangerClickDetector.MouseClick:Connect(ChangeSize)
SizeChangerButton.Touched:Connect(ChangeSize)