You can write your topic however you want, but you need to answer these questions:
-
While the initial code is fine, when changing the property of ClassValue (inside of the script used to run the whole thing.) it doesn’t change.
-
I tried adding some delays, but only managed to make it worse.
local ClassName = "Blinded" -- Initial Class.
local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local StarterPlayer = game:GetService("StarterPlayer")
local Characters = ReplicatedStorage.Characters
local function ClassCharacter(ClassName, plrCharacter, plr)
StarterPlayer.LoadCharacterAppearance = false
if plrCharacter then
local ClassType = plr:FindFirstChild("Class")
if ClassType.Value == ClassName then
local Types = Characters:GetDescendants()
for _,Type in pairs(Types) do
local Classes = Type:GetDescendants()
for _,Class in pairs(Classes) do
if Class.Name == ClassName then
plrCharacter:Destroy()
local ChosenCharacter = Class.Value:Clone() -- MAKE SURE YOU PIN THE CHARACTER TO THE CLASS VALUE OTHERWISE IT WOULDN'T WORK.
ChosenCharacter.Name = "StarterCharacter"
ChosenCharacter.Parent = StarterPlayer
plr:LoadCharacter()
else
warn("Invalid ClassName Character.")
end
end
end
else
warn("Invalid ClassName.")
end
else
warn("Invalid Character.")
end
end
Players.PlayerAdded:Connect(function(plr)
local Class = Instance.new("StringValue", plr)
Class.Name = "Class"
Class.Value = ClassName
plr.CharacterAdded:Connect(function(char)
ClassCharacter(ClassName, char, plr)
end)
script.ClassValue.Changed:Connect(function(NewClass)
Class.Value = NewClass
task.wait(0.1)
ClassCharacter(NewClass, plr.Character, plr)
end)
end)
I want to know any solutions to this problem so I can learn in the future.