A quick look shows it is to be expected, as the class_id value is a constant of "1" say, if they start with class_id 1. Since the experince isnt class based, the way it handles a class change is removing all unusable equipment but doesnt refresh skill list or experince as it doesnt need to.
#--------------------------------------------------------------------------
# * Change Class ID
# class_id : New class ID
#--------------------------------------------------------------------------
def class_id=(class_id)
@class_id = class_id
for i in 0..4 # Remove unequippable items
change_equip(i, nil) unless equippable?(equips[i])
end
end
As you can see it doesnt update the skill list or experience list, since it only cares about new levels and skills not old.
To test this I printed the class_id out before the game started(at the menu) and after the class change and it remained constant at 1. Even recalling the game_Actor class it still has value 1.
p $data_actors[1].class_id
on a script event for this, after he changed to a knight(class_id 5).
My solution which unfortunately I dont have time to code due to exams :S would be to set a variable(within the script) for each actor to the starting class_id and make the Game Actor class_id determine its value of this, then just make sure you update that variable when you change the class.
If another is found Id love to know myself but since its 2:45am here Id say thats enough thinking
I know I havnt been much help at solving your problem but by identifying why its acting strangely you could find a suitable solution.
theconqueror