diff --git a/src/interaction/siRules.js b/src/interaction/siRules.js index 0a2a8e381634687f4330d665bde0e4d9826be815..36e60ce7c78167a305fae5064d9f92661ac6933a 100644 --- a/src/interaction/siRules.js +++ b/src/interaction/siRules.js @@ -139,9 +139,11 @@ App.UI.SlaveInteract.rules = function(slave) { } // Rest - if (["be a servant", "be a subordinate slave", "get milked", "please you", "serve in the club", "serve the public", "whore", "work as a farmhand", "work in the brothel", "work a glory hole"].includes(slave.assignment) || (V.dairyRestraintsSetting < 2 && slave.assignment === "work in the dairy")) { - div = document.createElement("div"); - div.append("Sleep rules: "); + div = document.createElement("div"); + div.append("Sleep rules: "); + if ([Job.NURSE, Job.HEADGIRL, Job.TEACHER, Job.STEWARD, Job.MATRON, Job.FARMER, Job.MADAM, Job.WARDEN, Job.DJ, Job.MILKMAID].includes(slave.assignment)) { + App.UI.DOM.appendNewElement("span", div, ` ${His} sleeping schedule is managed by ${his} assignment.`, "note"); + } else if ([Job.QUARTER, Job.DAIRY, Job.FUCKTOY, Job.CLUB, Job.PUBLIC, Job.FARMYARD, Job.WHORE, Job.GLORYHOLE].includes(slave.assignment) || (V.dairyRestraintsSetting < 2 && slave.assignment === Job.DAIRY)) { choices = [ {value: "none"}, {value: "cruel"}, @@ -150,8 +152,11 @@ App.UI.SlaveInteract.rules = function(slave) { {value: "mandatory"}, ]; div.append(listChoices(choices, "rest")); - p.append(div); + } else { + App.UI.DOM.appendNewElement("span", div, ` ${His} assignment does not allow setting a sleeping schedule.`, "note"); } + p.append(div); + // Mobility Aids if (!canWalk(slave) && canMove(slave)) { diff --git a/src/js/DefaultRules.js b/src/js/DefaultRules.js index 8d8a956ee2cb007cdfe57b036380c0d2e035a721..b30d6a50d7437588c04866f84fa997f7df4f94c4 100644 --- a/src/js/DefaultRules.js +++ b/src/js/DefaultRules.js @@ -63,8 +63,7 @@ globalThis.DefaultRules = (function() { if (slave.preg > 0 && slave.pregKnown === 1 && slave.broodmother === 0) { ProcessAbortions(slave, rule); } - ProcessOtherDrugs(slave, rule); - ProcessAssetGrowthDrugs(slave, rule); + ProcessDrugs(slave, rule); ProcessEnema(slave, rule); ProcessDiet(slave, rule); ProcessCuratives(slave, rule); @@ -1165,12 +1164,13 @@ globalThis.DefaultRules = (function() { * @param {App.Entity.SlaveState} slave * @param {FC.RA.RuleSetters} rule */ - function ProcessAssetGrowthDrugs(slave, rule) { + function ProcessDrugs(slave, rule) { + // First we check AssetGrowthDrugs, then if 1. no growth targets or 2. targets have been hit, we check other drugs. if ((slave.drugs === "super fertility drugs" || slave.drugs === "fertility drugs") && isFertile(slave)) { r += `<br>${slave.slaveName} is on ${slave.drugs} and will not be considered for drug enhancement until that regime is complete.`; - return; + ProcessOtherDrugs(slave, rule); } else if (slave.indentureRestrictions > 1 || (rule.growth.boobs === null && rule.growth.butt === null && rule.growth.lips === null && rule.growth.dick === null && rule.growth.balls === null)) { - return; + ProcessOtherDrugs(slave, rule); } // Asset Growth @@ -1208,7 +1208,7 @@ globalThis.DefaultRules = (function() { growDrugs.balls = "testicle enhancement"; } - if (rule.hyper_drugs === 1 && V.arcologies[0].FSAssetExpansionistResearch === 1) { + if (V.arcologies[0].FSAssetExpansionistResearch === 1 && rule.hyper_drugs === 1) { growDrugs.boobs = "hyper breast injections"; growDrugs.butt = "hyper butt injections"; if (slave.dick > 0) { @@ -1307,8 +1307,8 @@ globalThis.DefaultRules = (function() { } } } else if (growthDrugs.has(slave.drugs)) { - slave.drugs = "no drugs"; r += `<br>${slave.slaveName}'s body has met all relevant growth targets, so ${his} pharmaceutical regime has been ended.`; + ProcessOtherDrugs(slave,rule); } } @@ -1322,19 +1322,19 @@ globalThis.DefaultRules = (function() { let flag = true; switch (rule.drug) { case "anti-aging cream": - if (slave.visualAge < 18) { + if (V.arcologies[0].FSYouthPreferentialistResearch !== 1 || slave.visualAge < 18) { flag = false; } break; case "growth stimulants": - if (!canImproveHeight(slave)) { + if (V.growthStim !== 1 || !canImproveHeight(slave)) { flag = false; } break; case "sag-B-gone": - if (!(slave.boobs > 250 && slave.boobShape !== "saggy")) { + if (V.purchasedSagBGone !== 1 || (!(slave.boobs > 250 && slave.boobShape !== "saggy"))) { flag = false; } break; @@ -1358,7 +1358,7 @@ globalThis.DefaultRules = (function() { break; case "psychostimulants": - if (!canImproveIntelligence(slave)) { + if (V.arcologies[0].FSSlaveProfessionalismResearch !== 1 || !canImproveIntelligence(slave)) { flag = false; } break; @@ -1370,7 +1370,7 @@ globalThis.DefaultRules = (function() { break; case "hyper breast injections": - if (slave.boobs >= 50000) { + if (V.arcologies[0].FSAssetExpansionistResearch !== 1 || slave.boobs >= 50000) { flag = false; } break; @@ -1381,7 +1381,7 @@ globalThis.DefaultRules = (function() { } break; case "breast redistributors": - if (slave.boobs - slave.boobsImplant <= 100) { + if (V.arcologies[0].FSSlimnessEnthusiastResearch !== 1 || (slave.boobs - slave.boobsImplant <= 100)) { flag = false; } break; @@ -1393,19 +1393,19 @@ globalThis.DefaultRules = (function() { break; case "hyper butt injections": - if (slave.butt >= 20) { + if (V.arcologies[0].FSAssetExpansionistResearch !== 1 || slave.butt >= 20) { flag = false; } break; case "nipple atrophiers": - if (!(["cute", "huge", "puffy"].includes(slave.nipples))) { + if (V.arcologies[0].FSSlimnessEnthusiastResearch !== 1 || !(["cute", "huge", "puffy"].includes(slave.nipples))) { flag = false; } break; case "butt redistributors": - if (slave.buttImplant <= 0) { + if (V.arcologies[0].FSSlimnessEnthusiastResearch !== 1 || slave.buttImplant <= 0) { flag = false; } break; @@ -1417,13 +1417,13 @@ globalThis.DefaultRules = (function() { break; case "lip atrophiers": - if (slave.lips - slave.lipsImplant <= 0) { + if (V.arcologies[0].FSSlimnessEnthusiastResearch !== 1 || slave.lips - slave.lipsImplant <= 0) { flag = false; } break; case "super fertility drugs": - if (!(slave.indentureRestrictions < 1 && (slave.breedingMark !== 1 || V.propOutcome === 0 || V.eugenicsFullControl === 1 || V.arcologies[0].FSRestart === "unset"))) { + if ((V.seeHyperPreg !== 1 || V.superFertilityDrugs !== 1) || !(slave.indentureRestrictions < 1 && (slave.breedingMark !== 1 || V.propOutcome === 0 || V.eugenicsFullControl === 1 || V.arcologies[0].FSRestart === "unset"))) { flag = false; } break; @@ -1435,13 +1435,13 @@ globalThis.DefaultRules = (function() { break; case "hyper penis enhancement": - if (!((slave.dick > 0 && slave.dick < 31) || slave.clit < 5)) { + if (V.arcologies[0].FSAssetExpansionistResearch !== 1 || !((slave.dick > 0 && slave.dick < 31) || slave.clit < 5)) { flag = false; } break; case "penis atrophiers": - if (slave.dick <= 1) { + if (V.arcologies[0].FSSlimnessEnthusiastResearch !== 1 || slave.dick <= 1) { flag = false; } break; @@ -1453,37 +1453,37 @@ globalThis.DefaultRules = (function() { break; case "hyper testicle enhancement": - if (slave.balls <= 0) { + if (V.arcologies[0].FSAssetExpansionistResearch !== 1 || slave.balls <= 0) { flag = false; } break; case "testicle atrophiers": - if (slave.balls <= 1) { + if (V.arcologies[0].FSSlimnessEnthusiastResearch !== 1 || slave.balls <= 1) { flag = false; } break; case "clitoris atrophiers": - if (slave.clit <= 0) { + if (V.arcologies[0].FSSlimnessEnthusiastResearch !== 1 || slave.clit <= 0) { flag = false; } break; case "labia atrophiers": - if (slave.labia <= 0) { + if (V.arcologies[0].FSSlimnessEnthusiastResearch !== 1 || slave.labia <= 0) { flag = false; } break; case "appetite suppressors": - if (slave.weight > -95) { + if (V.arcologies[0].FSSlimnessEnthusiastResearch !== 1 || slave.weight > -95) { flag = false; } break; case "priapism agents": - if (slave.dick === 0 || slave.dick > 10 || slave.chastityPenis === 1 || (canAchieveErection(slave) && slave.drugs !== "priapism agents")) { + if (slave.dick === 0 || slave.dick > 10 || slave.chastityPenis === 1 || (canAchieveErection(slave))) { flag = false; } break; @@ -1491,7 +1491,7 @@ globalThis.DefaultRules = (function() { if (flag) { slave.drugs = rule.drug; r += `<br>${slave.slaveName} has been put on ${slave.drugs}.`; - } else { + } else if (slave.drugs !== "no drugs") { slave.drugs = "no drugs"; r += `<br>${slave.slaveName} cannot benefit from ${his} assigned drug and has been defaulted to ${slave.drugs}`; } @@ -1563,20 +1563,76 @@ globalThis.DefaultRules = (function() { * @param {FC.RA.RuleSetters} rule */ function ProcessDiet(slave, rule) { - // Diet Setting - if ((rule.diet !== undefined && rule.diet !== null) || rule.weight !== null || rule.muscles !== null) { - /* - if ((slave.boobs >= 1600) && (slave.muscles <= 5) && !isAmputee(slave) && ((rule.muscles == null) || (rule.muscles === 0))) { + /* Here the slave's diets are processed, with the following priorities: + 1. Attractive Weight + 2. Weight Based Rule + 3. Muscle Rule + 4. Specific Diet Rule + ?. TODO: appetite suppressors + */ + + function weightRule(slave, rule) { + if ((rule.diet === "attractive")) { + if (((slave.weight > 95) || ((slave.weight > 30) && (slave.hips < 2)))) { + if ((slave.diet !== "restricted")) { + slave.diet = "restricted"; + r += `<br>${slave.slaveName} is too fat so ${his} diet has been set to restricted.`; + } + } else if (((slave.weight < -95) || ((slave.weight < -30) && (slave.hips > -2)))) { + if ((slave.diet !== "fattening")) { + slave.diet = "fattening"; + r += `<br>${slave.slaveName} is too skinny so ${his} diet has been set to fattening.`; + } + } else if (["restricted", "fattening"].includes(slave.diet)){ + r += `<br>${slave.slaveName} is at the target weight, so ${his} diet has been normalized.`; + muscleRule(slave, rule); + } else { + muscleRule(slave, rule); + } + } else { + if (slave.weight > rule.weight.max) { + if (slave.diet !== "restricted") { + slave.diet = "restricted"; + r += `<br>${slave.slaveName} is too fat so ${his} diet has been set to restricted.`; + } + } else if (slave.weight < rule.weight.min) { + if (slave.diet !== "fattening") { + slave.diet = "fattening"; + r += `<br>${slave.slaveName} is too skinny so ${his} diet has been set to fattening.`; + } + } else if (["restricted", "fattening"].includes(slave.diet)) { + r += `<br>${slave.slaveName} is at the target weight, so ${his} diet has been normalized.`; + muscleRule(slave, rule); + } else { + muscleRule(slave, rule); + } + } + } + + function muscleRule(slave, rule) { + if (!isAmputee(slave) && App.RA.shallShrink(slave.muscles, rule.muscles, 8)) { + if ((slave.diet !== "slimming")) { + slave.diet = "slimming"; + r += `<br>${slave.slaveName} has been put on a slimming exercise regime.`; + } + } else if (!isAmputee(slave) && App.RA.shallGrow(slave.muscles, rule.muscles, 2)) { if ((slave.diet !== "muscle building")) { - slave.diet = "muscle building" - r += `<br>${slave.slaveName} has big tits and no back muscles, so ${he}'s been assigned to gain some.` + slave.diet = "muscle building"; + r += `<br>${slave.slaveName} has been put on a muscle building exercise regime.`; } - } else if ((slave.boobs >= 1600) && (slave.muscles > 5) && (slave.diet == "muscle building") && ((rule.muscles == null) || (rule.muscles === 0))) { - */ + } else if (!isAmputee(slave) && ["slimming", "muscle building"].includes(slave.diet)) { + r += `<br>${slave.slaveName} is at the target musculature, so ${his} diet has been normalized.`; + dietRule(slave, rule); + } else { + dietRule(slave, rule); + } + } + + function dietRule(slave, rule) { if (rule.diet === "healthy" && slave.diet !== "healthy") { slave.diet = "healthy"; r += `<br>${slave.slaveName} has been assigned to a healthy diet.`; - } else if ((slave.boobs >= 1600) && (slave.muscles > 5) && (slave.diet === "muscle building") && ((rule.muscles === null) || (rule.muscles.val === 0))) { + } else if ((slave.boobs >= 1600) && (slave.muscles > 5) && (slave.diet === "muscle building") && ((rule.muscles === null) || (rule.muscles.val < 5))) { slave.diet = "healthy"; r += `<br>${slave.slaveName} has huge boobs, but ${he} already has the back muscles to bear them, so ${he}'s been assigned to stop working out so hard.`; } else if ((rule.dietGrowthSupport === 1) && ((slave.drugs === "breast injections") || (slave.drugs === "butt injections")) && (slave.weight <= 95)) { @@ -1584,117 +1640,87 @@ globalThis.DefaultRules = (function() { slave.diet = "fattening"; r += `<br>${slave.slaveName} is on drugs designed to expand major body parts, so ${he}'s been put on a fattening diet to provide ${his} body as much fuel for growth as possible.`; } - } else { - // priority to growing/losing muscles, then general body mass, then rest of the diets - if (!isAmputee(slave) && App.RA.shallShrink(slave.muscles, rule.muscles, 8)) { - if ((slave.diet !== "slimming")) { - slave.diet = "slimming"; - r += `<br>${slave.slaveName} has been put on a slimming exercise regime.`; - } - } else if (!isAmputee(slave) && App.RA.shallGrow(slave.muscles, rule.muscles, 2)) { - if ((slave.diet !== "muscle building")) { - slave.diet = "muscle building"; - r += `<br>${slave.slaveName} has been put on a muscle building exercise regime.`; - } - } else if (!isAmputee(slave) && ["slimming", "muscle building"].includes(slave.diet)) { - slave.diet = "healthy"; - r += `<br>${slave.slaveName} is at the target musculature, so ${his} diet has been normalized.`; - } else if (rule.weight !== null && slave.weight > rule.weight.max) { - if (slave.diet !== "restricted") { - slave.diet = "restricted"; - r += `<br>${slave.slaveName} is too fat so ${his} diet has been set to restricted.`; + } else if ((rule.diet === "XX")) { + if ((slave.diet !== "XX")) { + slave.diet = "XX"; + r += `<br>${slave.slaveName} has been put on a diet that favors feminine development.`; + } + } else if ((rule.diet === "XY")) { + if ((slave.diet !== "XY")) { + slave.diet = "XY"; + r += `<br>${slave.slaveName} has been put on a diet that favors masculine development.`; + } + } else if ((rule.diet === "XXY")) { + if (slave.balls > 0 && (slave.ovaries === 1 || slave.mpreg === 1)) { + if ((slave.diet !== "XXY")) { + slave.diet = "XXY"; + r += `<br>${slave.slaveName} has been put on a diet that enhances a herm's unique sexuality.`; } - } else if (rule.weight !== null && slave.weight < rule.weight.min) { - if (slave.diet !== "fattening") { - slave.diet = "fattening"; - r += `<br>${slave.slaveName} is too skinny so ${his} diet has been set to fattening.`; + } else { + if ((slave.diet !== "healthy")) { + slave.diet = "healthy"; + r += `<br>${slave.slaveName} has been put on a standard diet since ${he} is not a hermaphrodite.`; } - } else if (rule.weight !== null && ["restricted", "fattening"].includes(slave.diet)) { - slave.diet = "healthy"; - r += `<br>${slave.slaveName} is at the target weight, so ${his} diet has been normalized.`; - } else if ((rule.diet === "attractive")) { - if (((slave.weight > 95) || ((slave.weight > 30) && (slave.hips < 2)))) { - if ((slave.diet !== "restricted")) { - slave.diet = "restricted"; - r += `<br>${slave.slaveName} is too fat so ${his} diet has been set to restricted.`; - } - } else if (((slave.weight < -95) || ((slave.weight < -30) && (slave.hips > -2)))) { - if ((slave.diet !== "fattening")) { - slave.diet = "fattening"; - r += `<br>${slave.slaveName} is too skinny so ${his} diet has been set to fattening.`; - } - } else { - if ((slave.diet !== "healthy")) { - slave.diet = "healthy"; - r += `<br>${slave.slaveName} is at the target weight, so ${his} diet has been normalized.`; - } + } + } else if (V.dietCleanse === 1 && (rule.diet === "cleansing")) { + if ((slave.diet !== "cleansing")) { + slave.diet = "cleansing"; + r += `<br>${slave.slaveName} has been put on a diet of cleansers.`; + } + } else if ((rule.diet === "fertility")) { + if ((isFertile(slave) && slave.preg === 0) || (slave.geneticQuirks.superfetation === 2 && canGetPregnant(slave) && V.geneticMappingUpgrade !== 0)) { + if ((slave.diet !== "fertility")) { + slave.diet = "fertility"; + r += `<br>${slave.slaveName} has been put on a diet to enhance fertility.`; } - } else if ((rule.diet === "XX")) { - if ((slave.diet !== "XX")) { - slave.diet = "XX"; - r += `<br>${slave.slaveName} has been put on a diet that favors feminine development.`; - } - } else if ((rule.diet === "XY")) { - if ((slave.diet !== "XY")) { - slave.diet = "XY"; - r += `<br>${slave.slaveName} has been put on a diet that favors masculine development.`; - } - } else if ((rule.diet === "XXY")) { - if (slave.balls > 0 && (slave.ovaries === 1 || slave.mpreg === 1)) { - if ((slave.diet !== "XXY")) { - slave.diet = "XXY"; - r += `<br>${slave.slaveName} has been put on a diet that enhances a herm's unique sexuality.`; - } - } else { - if ((slave.diet !== "healthy")) { - slave.diet = "healthy"; - r += `<br>${slave.slaveName} has been put on a standard diet since ${he} is not a hermaphrodite.`; + } else { + if ((slave.diet !== "healthy")) { + slave.diet = "healthy"; + if (slave.pregKnown === 0 && slave.preg > 0) { + r += `<br>${slave.slaveName} has been put on a standard diet since tests reveal ${he} has become pregnant.`; + slave.pregKnown = 1; + } else { + r += `<br>${slave.slaveName} has been put on a standard diet since ${he} is currently unable to become pregnant.`; } } - } else if ((rule.diet === "cleansing")) { - if ((slave.diet !== "cleansing") && (slave.health.condition < 90 || slave.chem >= 10)) { - slave.diet = "cleansing"; - r += `<br>${slave.slaveName} has been put on a diet of cleansers.`; - } - } else if ((rule.diet === "fertility")) { - if ((isFertile(slave) && slave.preg === 0) || (slave.geneticQuirks.superfetation === 2 && canGetPregnant(slave) && V.geneticMappingUpgrade !== 0)) { - if ((slave.diet !== "fertility")) { - slave.diet = "fertility"; - r += `<br>${slave.slaveName} has been put on a diet to enhance fertility.`; - } - } else { - if ((slave.diet !== "healthy")) { - slave.diet = "healthy"; - if (slave.pregKnown === 0 && slave.preg > 0) { - r += `<br>${slave.slaveName} has been put on a standard diet since tests reveal ${he} has become pregnant.`; - slave.pregKnown = 1; - } else { - r += `<br>${slave.slaveName} has been put on a standard diet since ${he} is currently unable to become pregnant.`; - } - } + } + } else if ((rule.diet === "cum production")) { + if (slave.balls > 0) { + if ((slave.diet !== "cum production")) { + slave.diet = "cum production"; + r += `<br>${slave.slaveName} has been put on a diet to promote cum production.`; } - } else if ((rule.diet === "cum production")) { - if (slave.balls > 0) { - if ((slave.diet !== "cum production")) { - slave.diet = "cum production"; - r += `<br>${slave.slaveName} has been put on a diet to promote cum production.`; - } - } else { - if ((slave.diet !== "healthy")) { - slave.diet = "healthy"; - r += `<br>${slave.slaveName} has been put on a standard diet since ${he} is no longer able to produce cum.`; - } + } else { + if ((slave.diet !== "healthy")) { + slave.diet = "healthy"; + r += `<br>${slave.slaveName} has been put on a standard diet since ${he} is no longer able to produce cum.`; } } + } else { + if (slave.diet !== "healthy") { + slave.diet = "healthy"; + r += `<br>${slave.slaveName} has been put on a standard diet.`; + } } + } - if (slave.drugs === "appetite suppressors" && slave.diet !== "restricted") { - slave.drugs = "no drugs"; - r += `<br>${slave.slaveName} no longer needs to lose weight, so ${he}'s no longer being given appetite suppressors.`; - } else if (slave.diet === "restricted" && V.arcologies[0].FSSlimnessEnthusiastResearch === 1 && slave.drugs === "no drugs") { - slave.drugs = "appetite suppressors"; - r += `<br>${slave.slaveName} needs to lose weight so ${he} will be given weight loss pills.`; - } + if (rule.weight !== null) { + weightRule(slave, rule); + } + if (rule.weight === null && rule.muscles !== null) { + muscleRule(slave, rule); + } + if (rule.weight === null && rule.muscles === null && (rule.diet !== undefined && rule.diet !== null)) { + dietRule(slave, rule); + } + + // TODO: Place these somewhere in a function too. + if (slave.drugs === "appetite suppressors" && slave.diet !== "restricted") { + slave.drugs = "no drugs"; + r += `<br>${slave.slaveName} no longer needs to lose weight, so ${he}'s no longer being given appetite suppressors.`; + } else if (slave.diet === "restricted" && V.arcologies[0].FSSlimnessEnthusiastResearch === 1 && slave.drugs === "no drugs") { + slave.drugs = "appetite suppressors"; + r += `<br>${slave.slaveName} needs to lose weight so ${he} will be given weight loss pills.`; } } @@ -1835,18 +1861,19 @@ globalThis.DefaultRules = (function() { * @param {FC.RA.RuleSetters} rule */ function ProcessLivingStandard(slave, rule) { - if ((rule.livingRules !== undefined) && (rule.livingRules !== null)) { + if (rule.livingRules !== undefined && rule.livingRules !== null && slave.rules.living !== rule.livingRules) { if (setup.facilityCareers.includes(slave.assignment)) { - r += ""; // `<br>${slave.slaveName}'s living standards are controlled by ${his} assignment.`; + // Handled in Rules tab of SI now. + //r += `<br>${slave.slaveName}'s living standards are controlled by ${his} assignment.`; } else if (((slave.assignment === Job.HEADGIRL) && (V.HGSuite === 1)) || ((slave.assignment === Job.BODYGUARD) && (V.dojo > 1))) { - r += `<br>${slave.slaveName} has a private room.`; + //r += `<br>${slave.slaveName} has a private room.`; } else if ((slave.fetish === "mindbroken")) { if ((slave.rules.living !== "spare")) { slave.rules.living = "spare"; r += `<br>Since ${slave.slaveName} is mindbroken, ${his} living standard has been set to spare.`; } - } else if (slave.rules.living !== rule.livingRules) { - if (rule.livingRules !== "luxurious") { + } else { + if (rule.livingRules === "luxurious") { if (canMoveToRoom(slave)) { slave.rules.living = rule.livingRules; r += `<br>${slave.slaveName}'s living standard has been set to ${rule.livingRules}.`; @@ -1858,9 +1885,9 @@ globalThis.DefaultRules = (function() { slave.rules.living = rule.livingRules; r += `<br>${slave.slaveName}'s living standard has been set to ${rule.livingRules}.`; } - penthouseCensus(); } } + penthouseCensus(); } /** @@ -1870,8 +1897,12 @@ globalThis.DefaultRules = (function() { function ProcessRest(slave, rule) { if ((rule.restRules !== undefined) && (rule.restRules !== null)) { if (slave.rules.rest !== rule.restRules ) { - slave.rules.rest = rule.restRules; - r += `<br>${slave.slaveName}'s resting time has been set to ${rule.restRules}.`; + if ([Job.NURSE, Job.HEADGIRL, Job.TEACHER, Job.STEWARD, Job.MATRON, Job.FARMER, Job.MADAM, Job.WARDEN, Job.DJ, Job.MILKMAID].includes(slave.assignment)) { + // These assignments enforce "restrictive", do not let RA attempt to change it. + } else { + slave.rules.rest = rule.restRules; + r += `<br>${slave.slaveName}'s resting time has been set to ${rule.restRules}.`; + } } } } @@ -1930,26 +1961,28 @@ globalThis.DefaultRules = (function() { * @param {FC.RA.RuleSetters} rule */ function ProcessRelease(slave, rule) { - if ((rule.releaseRules !== undefined) && (rule.releaseRules !== null)) { + const releaseProperties = [ + 'masturbation', + 'partner', + 'facilityLeader', + 'family', + 'slaves', + 'master', + ]; + if ((rule.releaseRules !== undefined) && (rule.releaseRules !== null) && processReleaseProp(releaseProperties)) { + r += `<br>${slave.slaveName}'s release rules have been set to: ${App.Utils.releaseSummaryLong(slave)}.`; + } + function processReleaseProp(releaseProperties) { let changed = false; - let processReleaseProp = (property) => { + for (const property of releaseProperties) { if (rule.releaseRules[property] !== undefined && rule.releaseRules[property] !== null) { if (slave.rules.release[property] !== rule.releaseRules[property]) { slave.rules.release[property] = rule.releaseRules[property]; - return true; + changed = true; } } - return false; - }; - changed = processReleaseProp('masturbation') || false; - changed = processReleaseProp('partner') || false; - changed = processReleaseProp('facilityLeader') || false; - changed = processReleaseProp('family') || false; - changed = processReleaseProp('slaves') || false; - changed = processReleaseProp('master') || false; - if (changed) { - r += `<br>${slave.slaveName}'s release rules have been set to: ${App.Utils.releaseSummaryLong(slave)}.`; } + return changed; } } @@ -2402,8 +2435,10 @@ globalThis.DefaultRules = (function() { if (rule.skinColor !== undefined && rule.skinColor !== null && rule.skinColor !== slave.skin) { if (rule.skinColor === "natural") { - slave.skin = slave.origSkin; - r += `<br>${slave.slaveName}'s skin color has been returned to ${slave.origSkin}.`; + if (slave.skin !== slave.origSkin) { + slave.skin = slave.origSkin; + r += `<br>${slave.slaveName}'s skin color has been returned to ${slave.origSkin}.`; + } } else { slave.skin = rule.skinColor; r += `<br>${slave.slaveName}'s skin color has been set to ${rule.skinColor}.`; @@ -2613,7 +2648,7 @@ globalThis.DefaultRules = (function() { if (slave.clitPiercing === 3) { let _used = 0; if (rule.clitSetting !== undefined && rule.clitSetting !== null && rule.clitSetting !== "random") { - if (slave.clitSetting !== rule.clitSetting) { + if (slave.clitSetting !== rule.clitSetting && slave.fetishStrength !== 100) { slave.clitSetting = rule.clitSetting; _used = 1; r += `<br>${slave.slaveName}'s smart piercing has been set to ${slave.clitSetting}.`; @@ -2676,6 +2711,13 @@ globalThis.DefaultRules = (function() { } } } + if (_used === 0) { + if (rule.clitSetting !== undefined && rule.clitSetting !== null && slave.clitSetting !== rule.clitSetting) { + slave.clitSetting = rule.clitSetting; + _used = 1; + r += `<br>${slave.slaveName}'s smart piercing has been set to ${slave.clitSetting}.`; + } + } } } diff --git a/src/js/releaseRules.js b/src/js/releaseRules.js index fd443122021f54e376d41afbe1fb3c1caa402b32..e16e71cac7e98ea7233a9e7f3156962923b418a5 100644 --- a/src/js/releaseRules.js +++ b/src/js/releaseRules.js @@ -117,22 +117,34 @@ App.Utils.releaseSummaryShort = function releaseSummaryShort(slave) { App.Utils.releaseSummaryLong = function releaseSummaryLong(slave) { const rel = slave.rules.release; const includeFamily = (rel.family === 1) && (V.seeIncest === 1); - if (rel.masturbation === 0 && rel.partner === 0 && !includeFamily && rel.slaves === 0 && rel.master === 0) { + let _counter = rel.masturbation + rel.partner + rel.facilityLeader + rel.slaves + rel.master; + if (includeFamily) { + _counter += 1; + } + + if (rel.masturbation === 0 && rel.partner === 0 && rel.facilityLeader === 0 && !includeFamily && rel.slaves === 0 && rel.master === 0) { return "chastity"; - } else if (rel.masturbation === 1 && rel.partner === 0 && !includeFamily && rel.slaves === 0 && rel.master === 0) { + } else if (rel.masturbation === 1 && rel.partner === 0 && rel.facilityLeader === 0 && !includeFamily && rel.slaves === 0 && rel.master === 0) { return "masturbation only"; - } else if (rel.masturbation === 0 && rel.partner === 1 && !includeFamily && rel.slaves === 0 && rel.master === 0) { + } else if (rel.masturbation === 0 && rel.partner === 1 && rel.facilityLeader === 0 && !includeFamily && rel.slaves === 0 && rel.master === 0) { return "partner only"; - } else if (rel.masturbation === 0 && rel.partner === 0 && includeFamily && rel.slaves === 0 && rel.master === 0) { + } else if (rel.masturbation === 0 && rel.partner === 0 && rel.facilityLeader === 1 && !includeFamily && rel.slaves === 0 && rel.master === 0) { + return "facility leaders only"; + } else if (rel.masturbation === 0 && rel.partner === 0 && rel.facilityLeader === 0 && includeFamily && rel.slaves === 0 && rel.master === 0) { return "family only"; - } else if (rel.masturbation === 0 && rel.partner === 0 && !includeFamily && rel.slaves === 0 && rel.master === 1) { + } else if (rel.masturbation === 0 && rel.partner === 0 && rel.facilityLeader === 0 && !includeFamily && rel.slaves === 1 && rel.master === 0) { + return "slaves only"; + } else if (rel.masturbation === 0 && rel.partner === 0 && rel.facilityLeader === 0 && !includeFamily && rel.slaves === 0 && rel.master === 1) { return "you only"; - } else if (rel.slaves === 1) { + } else if (_counter >= 3) { let ret = "permissive"; let exceptions = []; if (rel.partner === 0) { exceptions.push("partner"); } + if (rel.facilityLeader === 0) { + exceptions.push("facility leaders"); + } if (!includeFamily) { exceptions.push("family"); } @@ -146,22 +158,30 @@ App.Utils.releaseSummaryLong = function releaseSummaryLong(slave) { ret += ", no masturbation"; } return ret; - } else { + } else if (_counter > 0 && _counter < 3){ + let ret = "restrictive"; let permissions = []; - if (rel.masturbation === 1) { - permissions.push("masturbation"); - } if (rel.partner === 1) { permissions.push("partner"); } + if (rel.facilityLeader === 1) { + permissions.push("facility leaders"); + } if (includeFamily) { permissions.push("family"); } if (rel.master === 1) { permissions.push("you"); } - if (permissions.length < 1) { return "unknown"; } // probably means BC didn't get run, but let's not die because of it - return permissions.reduce(function(res, ch, i, arr) { return res + (i === arr.length - 1 ? ' and ' : ', ') + ch; }); + if (permissions.length > 0) { + ret += " but permits " + permissions.reduce(function(res, ch, i, arr) { return res + (i === arr.length - 1 ? ' and ' : ', ') + ch; }); + } + if (rel.masturbation === 1) { + ret += ", and allowed to masturbate"; + } + return ret; + } else { + return "no release rules"; } };