Here's another version, that I think should run more like requested...
Code:
item card = $item[dance card];
while (my_adventures() > 0 && have_effect($effect[beaten up]) == 0)
{
if(get_counters("dance card", 0, 4) == "" && item_amount(card) > 0) use( item_amount(card), card );
adventure(1 ,$location[haunted ballroom] );
}
This one should start by checking if there's a current dance card counter, and if not and there's a card available, use it. Otherwise, keep adventuring until you get one, then use the card, keep adventuring, repeat until done...
Edit: Yes, strictly speaking, what he asked for is exactly what Bale's script does. But what he actually wants is more like what we've posted following, for optimal ballroom moxie training.
Edit2: And yes, this is a script I've considered writing/updating for myself several times, despite using the counter checker, for precisely this reason... newly acquired dance cards, when the counter isn't active, don't get used, but if you set the goal and get one before the counter expires, you have to disable the goal, run 3 adventures manually, reapply the dance card, and re-set the goal, if you didn't manage to get a card in those 4 (since Bale's script automatically runs an extra adventure over what you set) adventures, otherwise you run another 3 adventures, and repeat the process...