Vote:new("shuffleteamsdamage")
	:description("Randomly place players on each team, based on damage, with a map restart")
	:vote(function()
		return string.format("Shuffle teams by damage, with a map restart")
	end)
	:pass(function()
		local axisdmg = 0
		local alliesdmg = 0
		local damages = {}
	
		for j=0, tonumber(et.trap_Cvar_Get("sv_maxclients"))-1 do
			local team = tonumber(et.gentity_get(j, "sess.sessionTeam"))
			if team == 1 or team == 2 then
				if team == 1 then
					local dmg = tonumber(et.gentity_get(j, "sess.damage_given"))
					table.insert(damages, {j, dmg, 1})
					axisdmg = axisdmg + dmg
				elseif team == 2 then
					local dmg = tonumber(et.gentity_get(j, "sess.damage_given"))
					table.insert(damages, {j, dmg, 2})
					alliesdmg = alliesdmg + dmg
				end
			end
		end

		table.sort(damages, function(a, b) return a[2] > b[2] end)

		local weaker_team = {}
		local stronger_team = {}
		local wti = 1
		local sti = 1
	
		for k, v, t in ipairs(damages) do
			if k >= 1 and ((k - 1) % 2) == 0 then
				weaker_team[wti] = {v, t}
				wti = wti + 1
			else
				stronger_team[sti] = {v, t}
				sti = sti + 1
			end
		end
	
		if axisdmg >= alliesdmg then -- weaker_team == allies
			for k,v in ipairs(weaker_team) do
				if v[1][3] == 1 then
					et.trap_SendConsoleCommand(et.EXEC_APPEND, "ref putallies " .. v[1][1] .. "\n")
				end
			end
			for k,v in ipairs(stronger_team) do
				if v[1][3] == 2 then
					et.trap_SendConsoleCommand(et.EXEC_APPEND, "ref putaxis " .. v[1][1] .. "\n")
				end
			end
		elseif alliesdmg > axisdmg then -- weaker_team == axis
			for k,v in ipairs(weaker_team) do
				if v[1][3] == 2 then
					et.trap_SendConsoleCommand(et.EXEC_APPEND, "ref putaxis " .. v[1][1] .. "\n")
				end
			end
			for k,v in ipairs(stronger_team) do
				if v[1][3] == 1 then
					et.trap_SendConsoleCommand(et.EXEC_APPEND, "ref putallies " .. v[1][1] .. "\n")
				end
			end
		end
		et.trap_SendConsoleCommand(et.EXEC_APPEND, "map_restart\n")
	end)