Hey there so I’m making a script where I will be changing the players avatar to either Dev which is me or Built who is my builder. The events work and all because the player does become the Parent of the Character. How can I make it so the player morphs into the Character from here?
local ReplicatedStorage = game:GetService("ReplicatedStorage")
ReplicatedStorage.Events.DevChosen.OnServerEvent:Connect(function(player)
local Characters = ReplicatedStorage.Characters
local character = Characters.Developer4Lifee:Clone()
character.Parent = player
end)
ReplicatedStorage.Events.BuiltChosen.OnServerEvent:Connect(function(player)
local Characters = ReplicatedStorage.Characters
local character = Characters.Being_Built:Clone()
character.Parent = player
end)
The characters are models so I’m wondering if i’d need to ungroup them at all?
You don’t parent the character model to the current character. Try this:
-- Note: This is only usable in a LocalScript
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local Players = game:GetService("Players")
function morphCharacter()
local charactersFolder = ReplicatedStorage:WaitForChild("Characters")
local player: Player = Players.LocalPlayer
local character: Model = player.Character
local morph: Model = charactersFolder.Whoever
local morphClone = morph:Clone()
local HumanoidRootPart = character:WaitForChild("HumanoidRootPart")
local morphHumanoidRootPart = morphClone:WaitForChild("HumanoidRootPart")
morphHumanoidRootPart.CFrame = HumanoidRootPart.CFrame -- put the morph in wherever your character currently is
morphClone.Name = player.Name -- name for the player
player.Character = morphClone -- sets the character model to the morph
morphClone.Parent = workspace
end
So should I edit my current local script for my UI and add that function when the choose button is clicked? Will this also show your avatar as changed for every other player on server?
You can do that. Just use one LocalScript, don’t add one per button. Also, first check if that script works.
And
No, I wrote this as part of a LocalScript, meaning changes are only visible to the client. For that, you would want to use a RemoteEvent (and a Server-sided script) instead.
-- LocalScript
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local Remote_morph = ReplicatedStorage:WaitForChild("Insert_Your_Remote_Name_Here")
local button = "" -- Insert your button here
button.Activated:Connect(function()
local morph = "" -- Insert your morph here
Remote_morph:FireServer(morph)
end)
-- ServerScript
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local Players = game:GetService("Players")
local Remote_morph = ReplicatedStorage:WaitForChild("Insert_Your_Remote_Name_Here")
Remote_morph.OnServerEvent:Connect(function(player, morph)
local charactersFolder = ReplicatedStorage:WaitForChild("Characters")
local player: Player = player
local character: Model = player.Character
local morph: Model = charactersFolder.Whoever
local morphClone = morph:Clone()
local HumanoidRootPart = character:WaitForChild("HumanoidRootPart")
local morphHumanoidRootPart = morphClone:WaitForChild("HumanoidRootPart")
morphHumanoidRootPart.CFrame = HumanoidRootPart.CFrame
morphClone.Name = player.Name
player.Character = morphClone
morphClone.Parent = workspace
end)