И то, и то можно сделать скриптами. Без них, думаю, не получится. При этом для первого случая есть два варианта реализации:
1) обычному рандомному герою даем опыт при освобождении
2) помещаем несколько героев в резерв, после выставляем случайного, но тут слишком много мороки.