Update :
Actually thinking about ML exp and CL exp, they are specific in game player UI. For now I don't thing that handling them as "Quest" XP or other weird Quest Property would do much good, this is some "table join" that will be forgotten when Admin try to maintain their character table !
But anyway I don't think it's stupid to handle "player progress" as a World Wide Quest... I understand "AbstractRules" are here to handle fighting / targetting rules, they also care of reward actually (RP/XP...) but I don't think that's appropriate...
This could be totally handled by a quest for which every mobs is a target, responsible of changing player level, computing level xp range and earning, relying on player rules to identify enemies object and max level
After All ML's and CL's are activated after a quest, and need a quest reward to advance in level...
For now I would like to focus on "Specialization Career" !
What is missing in DOL :
Table CharClassXSpecialization, for now Specs are handled from hardcoded "BaseClass" object, here is our chance to make it dynamic using a table that tracks which specialization is acquired by which class
Fields : ID (auto inc), Class ID, Spec Keyname, Level acquired
KeyName references Specialization Table
Specialization Table need some Update
Actual Field : UUID (...), KeyName, Name (Displayed ?), Icon ID, Description (no ?)
New Field : ID (auto inc, the UUID is not needed keyname is the PK !), Implementation (track c# classes handling this spec)
Specialization should be a "Skill" implementing some career and advancement.
Typical specialization "implementation" :
LiveSpellLineSpecialization, handles spell lines containing "Spec's KeyName" as "Spec" field, if "baseline" advance on leveling, if "specline" advance on training. should handle "isBaseClass()" to not allow spec line spells for base class (if I remember correctly ?)
LiveWeaponSpecialization, handles styles retrieving style table "classID:SpecKeyName", advance only on training. (if there is any baseline style-like skill like an awarded style for a given level it could be handled in an other Career Spec)
LiveAbilitySpecialization, handles specs like Stealth, Parry, etc... no style or spells are awarded from specc'ing into this but rather ability and skill obtained from "SpecXAbility" table...
LiveCareerSpecialization, untrainable undisplayed spec, may be used to link Classes specific Ability (like Quickcast for caster, all fighter ability, etc) should rely on "SpecXAbility" which references a "specLevel" that will be used like a "baseline" advance
For easier Maintenance Career Spec could rely on trying to link Style and Spell table using the same keyname, this keyname will mostly be the "Game Class" name like "Skald Career"
Even if I have no knowledge of "baseline style", the custom Career could handle this, for spell there is mostly no use as you could already add many baseline/specline to a Specilization, they could still reference some "default" spell line that is always considered as player level (as this is a "default" spec that is meant to be virtually trained every level) that looks like an interesting feature for ML or CL which have no baseline/specline checks !!
So the first main step of this improvement would be to rely on existing tables and create a simple new one
implementing all this through skill objects and remove everything that look hardcoded around char progress !
Maybe I'll have some kind of PoC (proof of concept) around tomorrow