Solution
In fact, can get the character using an in- build function, or two lines of code taken fro Link 1:
local Appearance = Players:GetHumanoidDescriptionFromUserId(UserID)
Dummy.Humanoid:ApplyDescription(Appearance)
You need a dummy, and UserID, which is way simpler than I expected. I made a function that accepts PlayerID, Player, PlayerName, and Character, then applies it to the dummy.
See Link 2, and the discussion why :ApplyDescription() is only available on server scripts
function - made easy for beginners
function ApplyCharacter(Input, Dummy)
local Success
local ErrorMessage
if Dummy and Dummy:FindFirstChild("Humanoid") then
if Input then
if typeof(Input) == "number" then
ID = Input
Success, ErrorMessage = pcall(function()
game.Players:GetCharacterAppearanceInfoAsync(ID)
end)
elseif typeof(Input) == "string" then
Success, ErrorMessage = pcall(function()
ID = game.Players:GetUserIdFromNameAsync(Input)
end)
elseif typeof(Input) == "Instance" then
Player, ErrorMessage = pcall(function()
ID = Input.UserId
end)
if Player then Success = true end
if not Player then
Success, ErrorMessage = pcall(function()
User = game.Players:GetPlayerFromCharacter(Input)
ID = User.UserId
end)
end
end
end
if Success then
local Appearance = game.Players:GetHumanoidDescriptionFromUserId(ID)
Dummy.Humanoid:ApplyDescription(Appearance)
Dummy.Humanoid.DisplayName = game.Players:GetNameFromUserIdAsync(ID)
return ID
else
if ErrorMessage == "Players:GetUserIdFromName() failed because the user does not exist" then
game.TestService:Error("UserName " ..Input.. " does not exsist")
elseif string.match(ErrorMessage, "does not exsist") then
game.TestService:Error("UserName " ..Input.. " does not exsist")
elseif ErrorMessage == "Players:GetCharacterAppearanceInfoAsync() failed because HTTP 400 (Bad Request)" then
game.TestService:Error("UserID " ..Input.. " does not exsist")
elseif string.match(ErrorMessage, "UserId is not a valid member of") then
game.TestService:Error("Instance " ..Input.Name.. " Is not a valid Player or Character")
elseif string.match(ErrorMessage, "attempt to index nil with 'UserId'") then
game.TestService:Error("Instance " ..Input.Name.. " Is not a valid Player or Character")
end
return nil
end
end
end
Link1
https://devforum.roblox.com/t/how-to-get-a-players-entire-model-not-just-their-assets/421085
Link2
https://devforum.roblox.com/t/make-humanoid-applydescription-available-on-the-client/369092
4 comments
Players:GetCharacterAppearanceInfoAsync
Oh
Found InsertService:LoadAsset to load everything in, it says "You can use InsertService:LoadAsset to load the assets that are used in the player’s avatar"
Thanks