I think the relevant function would be int AddCharacterExpNSChar(ref _refCharacter, string expName, int _exp) in PROGRAM\MAXIMUS_functions.c .
Would replacing this:With this:Code:if (curExp >= nextExp)
Be enough?Code:while (curExp >= nextExp) // PB: Keep doing this while necessary
Probably also replace this:With this:Code:int nextSkill = 50000; if (curSkill >= nextSkill) {
Code:int nextSkill; while (curSkill >= nextSkill) // PB: Keep doing this while necessary { nextSkill = 50000; // PB: Move down to reset
Probably! I had just staggered through various areas of code to arrive at this very function to suggest that is where a loop should go! I was going to ask what sti() and stf() do - fairly obviously an integer and float equivalent operation but what is it?
Hopefully that will at least introduce the desired loop so that too high values result in actual skill and level increases instead of the numbers "sticking around".
This won't fix the reason why these sudden huge XP gains occur but at least should make them behave a bit more sensibly.
I did see this in the same function
// Make sure our character has all the necessary attributes
//==========================================================
if (!CheckAttribute(_refCharacter,"Experience."+expName))
{
_refCharacter.Experience.(expName) = makeint(sti(Rand(19)+1)*1000);
on my way here and wondered if that could be the trigger -although why a character should be created missing values in expName would then be the question.?