Public servants and whores have strange conditions for penetrative learning
I noticed that my male whores simply weren't improving their penetrative skills at all, and looking into the files, there are some oddities in the main conditions that govern whether public servants and whores improve their sexual skills. Whores only improve sexual skills if the following condition is false; if it's true, the game displays a "her sexual mastery is very valuable" text and skips skill improvement:
if ((slave.skill.oral >= 100) && ((slave.skill.anal >= 100) || !canDoAnal(slave)) && ((slave.skill.vaginal >= 100) || !canDoVaginal(slave))) {
So if they're oral masters, anal masters or anally unavailable, and vaginal masters or vaginally unavailable, their mastery is congratulated and they learn nothing. Notably, this does not check penetrative skill at all - this works fine for slaves who haven't mastered all of their other skills; however, any slave who has already mastered the non-penetrative skills will never gain any penetrative experience, regardless of penetrativeSocialUse.
if ((slave.skill.oral >= 100) && ((slave.skill.anal >= 100) || !canDoAnal(slave)) && ((slave.skill.vaginal >= 100) || !canDoVaginal(slave)) && (slave.skill.penetrative >= 100 && canPenetrate(slave))) {
By contrast, public servants use the above condition, which does check penetrative skill, but in an overreaching way - effectively, slaves who can't penetrate naturally will never be congratulated for their mastery, and will falsely claim to be improving their skills even after mastering all of their skills, penetrative included.
Not sure the best way to address this, because non-phallic penetration and penetrativeSocialUse means you can't just change (slave.skill.penetrative >= 100 && canPenetrate(slave)
to (slave.skill.penetrative >= 100 || !canPenetrate(slave))
, which would prevent slaves without dicks or large clits from learning how to penetrate with fingers and sex toys.
Maybe restructure it from "if (whatever) {congratulate} else {improve}" to "if (whatever) {congratulate}, if (not mastered) {try improve}"? Could set it so that the second block doesn't display any text if no skills are actually improved. The one slightly odd consequence of that would be slaves without a dick or large clit, who've already mastered all skills except penetration, being congratulated for their sexual mastery and then noting that their penetrative skill is improving, but I think that makes sense enough as a "bonus" skill that's not really expected of them.