If it's possible for the engine to detect experience gains, it may be possible to set the experience gained from scrolls, traps, and locks to some arbitrary negative number. For instance, -1 through -9 for level 1 through 9 scrolls, -10 for traps, and -11 for locks. Supposing a script can detect when experience is gained, as well as the amount gained, it should be possible to detect these negative experience gains, and use that to trigger adding the correct amount of experience. Prior to the transition, the exact negative amount would be refunded, giving a net gain of 0. Following the transition, the amount for the action at the character level, plus the negative value, would be given.
Pseudo-code:
int Scroll01 = -1 int Scroll02 = -2 ... int Scroll09 = -9 int Trap = -10 int Lock = -11 If(Pre_Transition == 1) Do_Nothing Else(*catch negative experience gains here*) If( (Negative_Amount =< -1) && (Negative_Amount => -9) ) AddExperience (Negative_Amount * -1001) ElseIf(Negative_Amount == -10) AddExperience 10 AddExperience *amount based on character level for disarming trap here* ElseIf(Negative_Amount == -11) AddExperience 11 AddExperience *amount based on character level for opening lock here* EndIf EndIf
Again, no idea if this is even possible in the Infinity Engine, or what kind of overhead it might incur(though I doubt it would be an unmanageable amount). If someone wants to check the feasibility of this, great. If not, I should have time this weekend to play around with it a bit.
Now, back to studying.