Character not changing despite ClassValue property being interacted with

You can write your topic however you want, but you need to answer these questions:

  1. 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.

  2. 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.

1 Like