The way to limit it to exalted feats is with a test, performed after the feats is added.
Now, you'll want to execute this test only once the feat is added, not before, so you'll make an eval rule (eval rules are a cross between eval scripts and prereqs, and are only run once the selection is added to the character).
Okay, for your feat, you've already figured out how to calculate +1 / 2 levels:
Code:
var bonus as number
bonus = (#totallevelcount[] / 2)
bonus = round(bonus,0,-1)
and since we're running this script on an exalted feat, we'll need to look for one more:
What we'll test in the eval rule is that the hero has that many exalted feats. First, we'll search through all the feats on the hero, looking for those that are exalted feats (note; change fCategory.Exalted to whatever ID you've given your exalted feat category), and count them:
Code:
var featcount as number
foreach pick in hero from BaseFeat where "fCategory.Exalted"
featcount += 1
nexteach
Now, test that the count of exalted feats on the hero is at least equal to the number of bonus feats we're assigning, plus ourselves:
Code:
validif (featcount >= bonus)
Assembling all that for easy copying:
Code:
var bonus as number
bonus = (#totallevelcount[] / 2)
bonus = round(bonus,0,-1)
bonus += 1
var featcount as number
foreach pick in hero from BaseFeat where "fCategory.Exalted"
featcount += 1
nexteach
validif (featcount >= bonus)
Oh yeah, eval rules need a phase and priority, like scripts. Use the validation phase, any priority.