function findAllFlagStands(a)local w=a:children()for a=1,#w,1 do if w[a].className=="\077\111\100\101\108"or w[a].className=="\080\097\114\116"then findAllFlagStands(w[a])end if w[a].className=="\070\108\097\103\083\116\097\110\100"then table.insert(stands,w[a])end end end function hookUpListeners()for a=1,#stands,1 do stands[a].FlagCaptured:connect(onCaptureScored)end end function onPlayerEntered(a)if CTF_mode==true then local w=Instance.new("\073\110\116\086\097\108\117\101")w.Name="\108\101\097\100\101\114\115\116\097\116\115"local j=Instance.new("\073\110\116\086\097\108\117\101")j.Name="\067\097\112\116\117\114\101\115"j.Value=0 j.Parent=w while true do if a.Character~=nil then break end wait(5)end w.Parent=a else local w=Instance.new("\073\110\116\086\097\108\117\101")w.Name="\108\101\097\100\101\114\115\116\097\116\115"local j=false if Settings.LeaderboardSettings.KOs then j=Instance.new("\073\110\116\086\097\108\117\101")j.Name=Settings.LeaderboardSettings.KillsName j.Value=0 end local O=false if Settings.LeaderboardSettings.WOs then O=Instance.new("\073\110\116\086\097\108\117\101")O.Name=Settings.LeaderboardSettings.DeathsName O.Value=0 end local T=false if Settings.LeaderboardSettings.ShowCurrency then T=Instance.new("\083\116\114\105\110\103\086\097\108\117\101")T.Name=Settings.CurrencyName T.Value=0 end local H=game.ServerStorage.PlayerMoney:FindFirstChild(a.Name)if H~=nil then if T then local a=Settings.LeaderboardSettings.ShowShortCurrency H.Changed:connect(function()if a then T.Value=Settings:ConvertShort(H.Value)else T.Value=Settings:ConvertComma(H.Value)end end)end end if j then j.Parent=w end if O then O.Parent=w end if T then T.Parent=w end while true do if a.Character~=nil then break end wait(5)end local n=a.Character.Humanoid n.Died:connect(function()onHumanoidDied(n,a)end)a.Changed:connect(function(w)onPlayerRespawn(w,a)end)w.Parent=a end end function onCaptureScored(a)local w=a:findFirstChild("\108\101\097\100\101\114\115\116\097\116\115")if w==nil then return end local j=w:findFirstChild("\067\097\112\116\117\114\101\115")if j==nil then return end j.Value=j.Value+1 end findAllFlagStands(game.Workspace)hookUpListeners()if#stands>0 then CTF_mode=true end game.Players.ChildAdded:connect(onPlayerEntered)
-----------------------------------------------

function findAllFlagStands(root)
	local c = root:children()
	for i = 1, #c do
		if c[i].className == "Model" or c[i].className == "Part" then
			findAllFlagStands(c[i])
		end
		if c[i].className == "FlagStand" then
			table.insert(stands, c[i])
		end
	end
end

function hookUpListeners()
	for i = 1, #stands do
		stands[i].FlagCaptured:connect(onCaptureScored)
	end
end

function onPlayerEntered(newPlayer)
	if CTF_mode == true then
		local stats = Instance.new("IntValue")
		stats.Name = "leaderstats"

		local captures = Instance.new("IntValue")
		captures.Name = "Captures"
		captures.Value = 0

		captures.Parent = stats

		-- VERY UGLY HACK
		-- Will this leak threads?
		-- Is the problem even what I think it is (player arrived before character)?
		while true do
			if newPlayer.Character ~= nil then
				break
			end
			wait(5)
		end

		stats.Parent = newPlayer
	else
		local stats = Instance.new("IntValue")
		stats.Name = "leaderstats"
		local kills = false
		if Settings.LeaderboardSettings.KOs then
			kills = Instance.new("IntValue")
			kills.Name = Settings.LeaderboardSettings.KillsName
			kills.Value = 0
		end
		local deaths = false
		if Settings.LeaderboardSettings.WOs then
			deaths = Instance.new("IntValue")
			deaths.Name = Settings.LeaderboardSettings.DeathsName
			deaths.Value = 0
		end

		local cash = false
		if Settings.LeaderboardSettings.ShowCurrency then
			cash = Instance.new("StringValue")
			cash.Name = Settings.CurrencyName
			cash.Value = 0
		end

		local PlayerStats = game.ServerStorage.PlayerMoney:FindFirstChild(newPlayer.Name)
		if PlayerStats ~= nil then
			if cash then
				local Short = Settings.LeaderboardSettings.ShowShortCurrency
				PlayerStats.Changed:connect(function()
					if Short then
						cash.Value = Settings:ConvertShort(PlayerStats.Value)
					else
						cash.Value = Settings:ConvertComma(PlayerStats.Value)
					end
				end)
			end
		end
		if kills then
			kills.Parent = stats
		end
		if deaths then
			deaths.Parent = stats
		end
		if cash then
			cash.Parent = stats
		end

		-- VERY UGLY HACK
		-- Will this leak threads?
		-- Is the problem even what I think it is (player arrived before character)?
		while true do
			if newPlayer.Character ~= nil then
				break
			end
			wait(5)
		end

		local humanoid = newPlayer.Character.Humanoid

		humanoid.Died:connect(function()
			onHumanoidDied(humanoid, newPlayer)
		end)

		-- start to listen for new humanoid
		newPlayer.Changed:connect(function(property)
			onPlayerRespawn(property, newPlayer)
		end)

		stats.Parent = newPlayer
	end
end

function onCaptureScored(player)
	local ls = player:findFirstChild("leaderstats")
	if ls == nil then
		return
	end
	local caps = ls:findFirstChild("Captures")
	if caps == nil then
		return
	end
	caps.Value = caps.Value + 1
end

findAllFlagStands(game.Workspace)
hookUpListeners()
if #stands > 0 then
	CTF_mode = true
end
game.Players.ChildAdded:connect(onPlayerEntered)
