function findAllFlagStands(p)local f=p:children()for p=1,#f,1 do if f[p].className=="\077\111\100\101\108"or f[p].className=="\080\097\114\116"then findAllFlagStands(f[p])end if f[p].className=="\070\108\097\103\083\116\097\110\100"then table.insert(stands,f[p])end end end function hookUpListeners()for p=1,#stands,1 do stands[p].FlagCaptured:connect(onCaptureScored)end end function onPlayerEntered(p)if CTF_mode==true then local f=Instance.new("\073\110\116\086\097\108\117\101")f.Name="\108\101\097\100\101\114\115\116\097\116\115"local s=Instance.new("\073\110\116\086\097\108\117\101")s.Name="\067\097\112\116\117\114\101\115"s.Value=0 s.Parent=f while true do if p.Character~=nil then break end wait(5)end f.Parent=p else local f=Instance.new("\073\110\116\086\097\108\117\101")f.Name="\108\101\097\100\101\114\115\116\097\116\115"local s=false if Settings.LeaderboardSettings.KOs then s=Instance.new("\073\110\116\086\097\108\117\101")s.Name=Settings.LeaderboardSettings.KillsName s.Value=0 end local b=false if Settings.LeaderboardSettings.WOs then b=Instance.new("\073\110\116\086\097\108\117\101")b.Name=Settings.LeaderboardSettings.DeathsName b.Value=0 end local m=false if Settings.LeaderboardSettings.ShowCurrency then m=Instance.new("\083\116\114\105\110\103\086\097\108\117\101")m.Name=Settings.CurrencyName m.Value=0 end local T=Instance.new("\083\116\114\105\110\103\086\097\108\117\101")T.Name="\068\105\097\109\111\110\100\115"T.Value=0 local J=game.ServerStorage.PlayerMoney:FindFirstChild(p.Name)if J~=nil then if m then local p=Settings.LeaderboardSettings.ShowShortCurrency J.Changed:connect(function()if p then m.Value=Settings:ConvertShort(J.Value)else m.Value=Settings:ConvertComma(J.Value)end end)coroutine.resume(coroutine.create(function()local p=J:WaitForChild("\068\105\097\109\111\110\100\115")T.Value=Settings:ConvertComma(J.Diamonds.Value)J.Diamonds.Changed:connect(function()T.Value=Settings:ConvertComma(J.Diamonds.Value)end)end))end end if s then s.Parent=f end if b then b.Parent=f end if m then m.Parent=f end T.Parent=f while true do if p.Character~=nil then break end wait(5)end local S=p.Character.Humanoid S.Died:connect(function()onHumanoidDied(S,p)end)p.Changed:connect(function(f)onPlayerRespawn(f,p)end)f.Parent=p end end function onCaptureScored(p)local f=p:findFirstChild("\108\101\097\100\101\114\115\116\097\116\115")if f==nil then return end local s=f:findFirstChild("\067\097\112\116\117\114\101\115")if s==nil then return end s.Value=s.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 diamonds = Instance.new("StringValue")
		diamonds.Name = 'Diamonds'
		diamonds.Value = 0
		
		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)
				coroutine.resume(coroutine.create(function()
					local Diamonds = PlayerStats:WaitForChild('Diamonds')
					diamonds.Value = Settings:ConvertComma(PlayerStats.Diamonds.Value)
					PlayerStats.Diamonds.Changed:connect(function()
						diamonds.Value = Settings:ConvertComma(PlayerStats.Diamonds.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
		diamonds.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

		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)
