I want to override the player’s package with the old R15 blocky rig, I have an idea in mind that replaces each part’s mesh, but I feel as if there is a more efficient way than this. I don’t wanna sound bad but naming each part would be tedious.
Personally, I don’t know if it’s optimal or not, but what I do is
put a model I want each character be based off of, in starterplayer as shown above. (Note the name must be StarterCharacter)
and then I simply have a server script, connect to PlayerAdded, and CharacterAdded
that looks somewhat like this.
local Players = game:GetService("Players")
local Cache = {}
local Valid = {"Shirt", "Pants", "Accessory", "BodyColors"}
local function CharacterAdded(Player)
local Character = Player.Character
local Hrp = Character:WaitForChild("HumanoidRootPart", 100)
local Humanoid = Character:WaitForChild("Humanoid", 100)
if Cache[Player] then
for _, v in pairs(Cache[Player]:GetChildren()) do
if table.find(Valid, v.ClassName) then
v:Clone().Parent = Character
elseif v.Name:lower() == "face" then
local Face = Character:FindFirstChild("Head") and Character.Head:FindFirstChildOfClass("Decal")
if Face then
Face:Destroy()
end
v:Clone().Parent = Character:FindFirstChild("Head")
end
end
end
end
local function OnJoin(Player)
local Character = Player.Character or Player.CharacterAdded:Wait()
if Player.UserId > 0 then
Cache[Player] = Players:GetCharacterAppearanceAsync(Player.UserId)
end
CharacterAdded(Player)
Player.CharacterAdded:Connect(function() CharacterAdded(Player) end)
end
for _, Player in pairs(Players:GetPlayers()) do
OnJoin(Player)
end
Players.PlayerAdded:Connect(OnJoin)