How modifying Game_Actor is "instead of using a script" I can't figure out, but all you need to change is the exp= method of Game_Actor.
Around line 454 you'll see:
#--------------------------------------------------------------------------
# * Change EXP
# exp : new EXP
#--------------------------------------------------------------------------
def exp=(exp)
@exp = [[exp, 9999999].min, 0].max
# Level up
while @exp >= @exp_list[@level+1] and @exp_list[@level+1] > 0
@level += 1
# Learn skill
for j in $data_classes[@class_id].learnings
if j.level == @level
learn_skill(j.skill_id)
end
end
end
# Level down
while @exp < @exp_list[@level]
@level -= 1
end
# Correction if exceeding current max HP and max SP
@hp = [@hp, self.maxhp].min
@sp = [@sp, self.maxsp].min
end
Where you have:
while @exp >= @exp_list[@level+1] and @exp_list[@level+1] > 0
@level += 1
add recover_all, so:
while @exp >= @exp_list[@level+1] and @exp_list[@level+1] > 0
@level += 1
recover_all
I think that will work.