Is there a way to simplify my code?

game.Players.PlayerAdded:Connect(function(player)
	player.CharacterAdded:Connect(function(char)
	local leaderstats = player:WaitForChild("RandomStats")
	local CheckValue = leaderstats:WaitForChild(script.RandomStats.Value)
	
if CheckValue.Value >= 0 and CheckValue.Value < 500 then
		
			if char:WaitForChild("Head"):FindFirstChild("Rank") then
				task.wait(3)	
				char:WaitForChild("Head"):WaitForChild("Rank"):Destroy()	
			end	
			
			 if not char:WaitForChild("Head"):FindFirstChild("Rank") then
				local a = game.ServerStorage:WaitForChild("Ranks"):WaitForChild("STARTER"):Clone()
				a.Name = "Rank"
				a.Parent = char:WaitForChild("Head")
			end
			
	elseif CheckValue.Value >= 500 and CheckValue.Value < 1000 then
		
			if char:WaitForChild("Head"):FindFirstChild("Rank") then
				task.wait(3)	
				char:WaitForChild("Head"):WaitForChild("Rank"):Destroy()	
			end	
						 
			if not char:WaitForChild("Head"):FindFirstChild("Rank") then				
				local b = game.ServerStorage:WaitForChild("Ranks"):WaitForChild("BASIC"):Clone()
				b.Name = "Rank"
				b.Parent = char:WaitForChild("Head")
			end
			
		elseif CheckValue.Value >= 1000 and CheckValue.Value < 1500 then

			if char:WaitForChild("Head"):FindFirstChild("Rank") then
				task.wait(3)	
				char:WaitForChild("Head"):WaitForChild("Rank"):Destroy()	
			end	

			if not char:WaitForChild("Head"):FindFirstChild("Rank") then				
				local c = game.ServerStorage:WaitForChild("Ranks"):WaitForChild("PRO"):Clone()
				c.Name = "Rank"
				c.Parent = char:WaitForChild("Head")
			end
			
		elseif CheckValue.Value >= 1500 and CheckValue.Value < 2000 then

			if char:WaitForChild("Head"):FindFirstChild("Rank") then
				task.wait(3)	
				char:WaitForChild("Head"):WaitForChild("Rank"):Destroy()	
			end	

			if not char:WaitForChild("Head"):FindFirstChild("Rank") then				
				local d = game.ServerStorage:WaitForChild("Ranks"):WaitForChild("HERO"):Clone()
				d.Name = "Rank"
				d.Parent = char:WaitForChild("Head")
			end
			
		elseif CheckValue.Value >= 2000 and CheckValue.Value < 2500 then

			if char:WaitForChild("Head"):FindFirstChild("Rank") then
				task.wait(3)	
				char:WaitForChild("Head"):WaitForChild("Rank"):Destroy()	
			end	

			if not char:WaitForChild("Head"):FindFirstChild("Rank") then				
				local e = game.ServerStorage:WaitForChild("Ranks"):WaitForChild("ELITE"):Clone()
				e.Name = "Rank"
				e.Parent = char:WaitForChild("Head")
			end
			
		elseif CheckValue.Value >= 2500 and CheckValue.Value < 3000 then

			if char:WaitForChild("Head"):FindFirstChild("Rank") then
				task.wait(3)	
				char:WaitForChild("Head"):WaitForChild("Rank"):Destroy()	
			end	

			if not char:WaitForChild("Head"):FindFirstChild("Rank") then				
				local f = game.ServerStorage:WaitForChild("Ranks"):WaitForChild("MASTER"):Clone()
				f.Name = "Rank"
				f.Parent = char:WaitForChild("Head")
			end
			
		elseif CheckValue.Value >= 3000 and CheckValue.Value < 3500 then

			if char:WaitForChild("Head"):FindFirstChild("Rank") then
				task.wait(3)	
				char:WaitForChild("Head"):WaitForChild("Rank"):Destroy()	
			end	

			if not char:WaitForChild("Head"):FindFirstChild("Rank") then				
				local g = game.ServerStorage:WaitForChild("Ranks"):WaitForChild("CHAMPION"):Clone()
				g.Name = "Rank"
				g.Parent = char:WaitForChild("Head")
			end
			
		elseif CheckValue.Value >= 3500 and CheckValue.Value < 4000 then

			if char:WaitForChild("Head"):FindFirstChild("Rank") then
				task.wait(3)	
				char:WaitForChild("Head"):WaitForChild("Rank"):Destroy()	
			end	

			if not char:WaitForChild("Head"):FindFirstChild("Rank") then				
				local h = game.ServerStorage:WaitForChild("Ranks"):WaitForChild("LEGEND"):Clone()
				h.Name = "Rank"
				h.Parent = char:WaitForChild("Head")
			end

end
	
CheckValue.Changed:Connect(function()
if CheckValue.Value >= 0 and CheckValue.Value < 500 then
						
						if char:WaitForChild("Head"):FindFirstChild("Rank") then
							task.wait(2)	
							char:WaitForChild("Head"):WaitForChild("Rank"):Destroy()	
						end	
						
						if not char:WaitForChild("Head"):FindFirstChild("Rank") then
							local a = game.ServerStorage:WaitForChild("Ranks"):WaitForChild("STARTER"):Clone()
							a.Name = "Rank"
							a.Parent = char:WaitForChild("Head")
						end
						
					elseif CheckValue.Value >= 500 and CheckValue.Value < 1000 then
						
						if char:WaitForChild("Head"):FindFirstChild("Rank") then
							task.wait(2)	
							char:WaitForChild("Head"):WaitForChild("Rank"):Destroy()	
						end	
									 
						if not char:WaitForChild("Head"):FindFirstChild("Rank") then				
							local b = game.ServerStorage:WaitForChild("Ranks"):WaitForChild("BASIC"):Clone()
							b.Name = "Rank"
					b.Parent = char:WaitForChild("Head")
				end
				
			elseif CheckValue.Value >= 1000 and CheckValue.Value < 1500 then

				if char:WaitForChild("Head"):FindFirstChild("Rank") then
					task.wait(2)	
					char:WaitForChild("Head"):WaitForChild("Rank"):Destroy()	
				end	

				if not char:WaitForChild("Head"):FindFirstChild("Rank") then				
					local c = game.ServerStorage:WaitForChild("Ranks"):WaitForChild("PRO"):Clone()
					c.Name = "Rank"
					c.Parent = char:WaitForChild("Head")
				end
				
			elseif CheckValue.Value >= 1500 and CheckValue.Value < 2000 then

				if char:WaitForChild("Head"):FindFirstChild("Rank") then
					task.wait(2)	
					char:WaitForChild("Head"):WaitForChild("Rank"):Destroy()	
				end	

				if not char:WaitForChild("Head"):FindFirstChild("Rank") then				
					local d = game.ServerStorage:WaitForChild("Ranks"):WaitForChild("HERO"):Clone()
					d.Name = "Rank"
					d.Parent = char:WaitForChild("Head")
				end
				
			elseif CheckValue.Value >= 2000 and CheckValue.Value < 2500 then

				if char:WaitForChild("Head"):FindFirstChild("Rank") then
					task.wait(2)	
					char:WaitForChild("Head"):WaitForChild("Rank"):Destroy()	
				end	

				if not char:WaitForChild("Head"):FindFirstChild("Rank") then				
					local e = game.ServerStorage:WaitForChild("Ranks"):WaitForChild("ELITE"):Clone()
					e.Name = "Rank"
					e.Parent = char:WaitForChild("Head")
				end
				
			elseif CheckValue.Value >= 2500 and CheckValue.Value < 3000 then

				if char:WaitForChild("Head"):FindFirstChild("Rank") then
					task.wait(2)	
					char:WaitForChild("Head"):WaitForChild("Rank"):Destroy()	
				end	

				if not char:WaitForChild("Head"):FindFirstChild("Rank") then				
					local f = game.ServerStorage:WaitForChild("Ranks"):WaitForChild("MASTER"):Clone()
					f.Name = "Rank"
					f.Parent = char:WaitForChild("Head")
				end
				
			elseif CheckValue.Value >= 3000 and CheckValue.Value < 3500 then

				if char:WaitForChild("Head"):FindFirstChild("Rank") then
					task.wait(2)	
					char:WaitForChild("Head"):WaitForChild("Rank"):Destroy()	
				end	

				if not char:WaitForChild("Head"):FindFirstChild("Rank") then				
					local g = game.ServerStorage:WaitForChild("Ranks"):WaitForChild("CHAMPION"):Clone()
					g.Name = "Rank"
					g.Parent = char:WaitForChild("Head")
				end
				
			elseif CheckValue.Value >= 3500 and CheckValue.Value < 4000 then

				if char:WaitForChild("Head"):FindFirstChild("Rank") then
					task.wait(2)	
					char:WaitForChild("Head"):WaitForChild("Rank"):Destroy()	
				end	

				if not char:WaitForChild("Head"):FindFirstChild("Rank") then				
					local h = game.ServerStorage:WaitForChild("Ranks"):WaitForChild("LEGEND"):Clone()
					h.Name = "Rank"
					h.Parent = char:WaitForChild("Head")
				end
			end
		end)
	end)
end)

i think you should only use one :WaitForChild(“Head”) and remove the :WaitForChild(“Rank”) behiind the WaitForChild(“Head”)

I didn’t try it, but it should give you a good idea of how to simplify your code.

local ranks = {
	"STARTER",
	"BASIC",
	"PRO",
	"HERO",
	"ELITE",
	"MASTER",
	"CHAMPION",
	"LEGEND",
}

function onCheckValueChanged(CheckValue, char)
	if CheckValue.Value > 0 then
		local threshold = 0
		for i = 1, #ranks do
			threshold += 500
			if CheckValue.Value < threshold then
				if char.Head:FindFirstChild("Rank") then
					task.wait(3)
					char.Head.Rank:Destroy()
				else
					local a = game.ServerStorage.Ranks:WaitForChild(ranks[i]):Clone()
					a.Name = "Rank"
					a.Parent = char.Head
				end
				break
			end
		end
	end
end

game.Players.PlayerAdded:Connect(function(player)
	player.CharacterAdded:Connect(function(char)
		local leaderstats = player:WaitForChild("RandomStats")
		local CheckValue = leaderstats:WaitForChild(script.RandomStats.Value)

		char:WaitForChild("Head")
		game.ServerStorage:WaitForChild("Ranks")

		onCheckValueChanged(CheckValue, char)

		CheckValue.Changed:Connect(function()
			onCheckValueChanged(CheckValue, char)
		end)
	end)
end)
2 Likes