From be4f624ac99c6cb469e85b8bf0bca53d0b3e74a6 Mon Sep 17 00:00:00 2001 From: Svornost <11434-svornost@users.noreply.gitgud.io> Date: Wed, 25 Dec 2019 14:53:07 -0800 Subject: [PATCH] Make the RA work with new release rules --- devTools/FC.d.ts | 10 ++++- src/js/DefaultRules.js | 24 ++++++----- src/js/releaseRules.js | 34 ++++++++-------- src/js/rulesAssistant.js | 13 +++++- src/js/rulesAssistantOptions.js | 70 +++++++++++++++++++++++++++------ 5 files changed, 112 insertions(+), 39 deletions(-) diff --git a/devTools/FC.d.ts b/devTools/FC.d.ts index a1089334617..c348d54bf8b 100644 --- a/devTools/FC.d.ts +++ b/devTools/FC.d.ts @@ -89,8 +89,16 @@ declare namespace App { intensity: number; } + class RuleReleaseSetters { + masturbation: number; + partner: number; + family: number; + slaves: number; + master: number; + } + class RuleSetters { - releaseRules: string; + releaseRules: RuleReleaseSetters; toyHole: string; clitSetting: string; clitSettingXY: number; diff --git a/src/js/DefaultRules.js b/src/js/DefaultRules.js index 22f9974b641..eb91cb40374 100644 --- a/src/js/DefaultRules.js +++ b/src/js/DefaultRules.js @@ -1939,16 +1939,22 @@ window.DefaultRules = (function() { * @param {object} rule */ function ProcessRelease(slave, rule) { - // FIXME: rule.releaseRules is currently a string - slave.rules.release isn't! if ((rule.releaseRules !== undefined) && (rule.releaseRules !== null)) { - let release = 0; - if (!App.Utils.hasNonassignmentSex(slave) && - !(["be a subordinate slave", "be confined in the arcade", "be your Head Girl", "get milked", "please you", "serve in the club", "serve in the master suite", "serve the public", "whore", "work a glory hole", "work as a farmhand", "work in the brothel", "work in the dairy"].contains(slave.assignment))) { - release = 1; - } - if ((release !== 1) && (slave.rules.release !== rule.releaseRules)) { - slave.rules.release = rule.releaseRules; - r += `<br>${slave.slaveName}'s release rules have been set to: ${App.Utils.releaseSummaryLong}.`; + let changed = false; + let processReleaseProp = (property) => { + if (rule.releaseRules[property] !== undefined && rule.releaseRules[property] !== null) { + slave.rules.release[property] = rule.releaseRules[property]; + return true; + } + return false; + }; + changed |= processReleaseProp('masturbation'); + changed |= processReleaseProp('partner'); + changed |= processReleaseProp('family'); + changed |= processReleaseProp('slaves'); + changed |= processReleaseProp('master'); + if (changed) { + r += `<br>${slave.slaveName}'s release rules have been set to: ${App.Utils.releaseSummaryLong(slave)}.`; } } } diff --git a/src/js/releaseRules.js b/src/js/releaseRules.js index 07f353a444c..18e55663bbd 100644 --- a/src/js/releaseRules.js +++ b/src/js/releaseRules.js @@ -102,15 +102,15 @@ 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 === 0 && rel.slaves === 0 && rel.master === 0) { + if (rel.masturbation === 0 && rel.partner === 0 && !includeFamily && rel.slaves === 0 && rel.master === 0) { return "chastity"; - } else if (rel.masturbation === 1 && rel.partner === 0 && includeFamily === 0 && rel.slaves === 0 && rel.master === 0) { + } else if (rel.masturbation === 1 && rel.partner === 0 && !includeFamily && rel.slaves === 0 && rel.master === 0) { return "masturbation only"; - } else if (rel.masturbation === 0 && rel.partner === 1 && includeFamily === 0 && rel.slaves === 0 && rel.master === 0) { + } else if (rel.masturbation === 0 && rel.partner === 1 && !includeFamily && rel.slaves === 0 && rel.master === 0) { return "partner only"; - } else if (rel.masturbation === 0 && rel.partner === 0 && includeFamily === 1 && rel.slaves === 0 && rel.master === 0) { + } else if (rel.masturbation === 0 && rel.partner === 0 && includeFamily && rel.slaves === 0 && rel.master === 0) { return "family only"; - } else if (rel.masturbation === 0 && rel.partner === 0 && includeFamily === 0 && rel.slaves === 0 && rel.master === 1) { + } else if (rel.masturbation === 0 && rel.partner === 0 && !includeFamily && rel.slaves === 0 && rel.master === 1) { return "you only"; } else if (rel.slaves === 1) { let ret = "permissive"; @@ -118,7 +118,7 @@ App.Utils.releaseSummaryLong = function releaseSummaryLong(slave) { if (rel.partner === 0) { exceptions.push("partner"); } - if (includeFamily === 0) { + if (!includeFamily) { exceptions.push("family"); } if (rel.master === 0) { @@ -139,7 +139,7 @@ App.Utils.releaseSummaryLong = function releaseSummaryLong(slave) { if (rel.partner === 1) { permissions.push("partner"); } - if (includeFamily === 1) { + if (includeFamily) { permissions.push("family"); } if (rel.master === 1) { @@ -160,26 +160,26 @@ App.Desc.releaseDesc = function releaseDesc(slave) { const includeFamily = (rel.family === 1) && (V.seeIncest === 1); let r = "and "; let appendFrequency = false; - if (rel.masturbation === 0 && rel.partner === 0 && includeFamily === 0 && rel.slaves === 0 && rel.master === 0) { + if (rel.masturbation === 0 && rel.partner === 0 && !includeFamily && rel.slaves === 0 && rel.master === 0) { r += "$he is to remain completely chaste."; - } else if (rel.masturbation === 1 && rel.partner === 0 && includeFamily === 0 && rel.slaves === 0 && rel.master === 0) { + } else if (rel.masturbation === 1 && rel.partner === 0 && !includeFamily && rel.slaves === 0 && rel.master === 0) { r += "$he is only allowed to masturbate"; if (slave.energy > 95) { r += ", which $he is constantly doing."; } else { r += "."; } - } else if (rel.masturbation === 0 && rel.partner === 1 && includeFamily === 0 && rel.slaves === 0 && rel.master === 0) { + } else if (rel.masturbation === 0 && rel.partner === 1 && !includeFamily && rel.slaves === 0 && rel.master === 0) { r += "$he is not allowed to masturbate or proposition "; if (slave.rules.relationship === "permissive" && slave.relationship >= 3) { r += `slaves other than $his ${relationshipTerm(slave)}.`; } else { r += "other slaves; $he must find sexual release in $his duties."; } - } else if (rel.masturbation === 0 && rel.partner === 0 && includeFamily === 1 && rel.slaves === 0 && rel.master === 0) { + } else if (rel.masturbation === 0 && rel.partner === 0 && includeFamily && rel.slaves === 0 && rel.master === 0) { r += "$he is not allowed to masturbate. $He is only allowed to achieve sexual release with close family members,"; appendFrequency = true; - } else if (rel.masturbation === 0 && rel.partner === 0 && includeFamily === 0 && rel.slaves === 0 && rel.master === 1) { + } else if (rel.masturbation === 0 && rel.partner === 0 && !includeFamily && rel.slaves === 0 && rel.master === 1) { r += "$he is not allowed to masturbate. $He must find you if $he wants sexual release,"; appendFrequency = true; } else if (rel.slaves === 1) { @@ -195,11 +195,11 @@ App.Desc.releaseDesc = function releaseDesc(slave) { } const exceptPartner = (rel.partner === 0) && (slave.rules.relationship === "permissive") && (slave.relationship >= 3); - if (exceptPartner && includeFamily === 0) { + if (exceptPartner && !includeFamily) { r += ` except for $his ${relationshipTerm(slave)} and close family members,`; } else if (exceptPartner) { r += ` except for $his ${relationshipTerm(slave)},`; - } else if (includeFamily === 0) { + } else if (!includeFamily) { r += ` except for $his close family members,`; } @@ -212,13 +212,13 @@ App.Desc.releaseDesc = function releaseDesc(slave) { } const showPartner = (rel.partner === 1) && (slave.rules.relationship === "permissive") && (slave.relationship >= 3); - if (includeFamily === 1 && showPartner) { + if (includeFamily && showPartner) { r += `have sex with $his ${relationshipTerm(slave)} and close family members,`; } else if (showPartner) { r += `fuck $his ${relationshipTerm(slave)} as much as he wants,`; - } else if (includeFamily === 1 && rel.master === 1) { + } else if (includeFamily && rel.master === 1) { r += `proposition sex from $his close family members and you,`; - } else if (includeFamily === 1) { + } else if (includeFamily) { r += `proposition sex from $his close family members,`; } else { // should mean rel.master === 1 r += `find you for sexual relief,`; diff --git a/src/js/rulesAssistant.js b/src/js/rulesAssistant.js index 2419b46e237..2e2a2961d33 100644 --- a/src/js/rulesAssistant.js +++ b/src/js/rulesAssistant.js @@ -257,7 +257,7 @@ App.RA.newRule = function() { /** @returns {App.RA.RuleSetters} */ function emptySetters() { return { - releaseRules: null, + releaseRules: emptyRelease(), toyHole: null, clitSetting: null, clitSettingXY: null, @@ -372,6 +372,17 @@ App.RA.newRule = function() { }; } + /** @returns {App.RA.RuleReleaseSetters} */ + function emptyRelease() { + return { + masturbation: null, + partner: null, + family: null, + slaves: null, + master: null + }; + } + /** @returns {App.RA.RuleGrowthSetters} */ function emptyGrowth() { return { diff --git a/src/js/rulesAssistantOptions.js b/src/js/rulesAssistantOptions.js index 222bd5dc661..515740cc651 100644 --- a/src/js/rulesAssistantOptions.js +++ b/src/js/rulesAssistantOptions.js @@ -1606,7 +1606,11 @@ window.rulesAssistantOptions = (function() { this.appendChild(new LivingStandardList()); this.appendChild(new PunishmentList()); this.appendChild(new RewardList()); - this.appendChild(new ReleaseList()); + this.appendChild(new ReleaseMasturbationSwitch()); + this.appendChild(new ReleasePartnerSwitch()); + this.appendChild(new ReleaseFamilySwitch()); + this.appendChild(new ReleaseSlavesSwitch()); + this.appendChild(new ReleaseMasterSwitch()); this.appendChild(new ToyHoleList()); this.appendChild(new SmartFetishList()); this.appendChild(new SmartXYAttractionList()); @@ -2777,19 +2781,63 @@ window.rulesAssistantOptions = (function() { } } - // FIXME: update for new release rules (slave.rules.release) - class ReleaseList extends ListSelector { + class ReleaseMasturbationSwitch extends RadioSelector { constructor() { const pairs = [ - ["permissive"], - ["sapphic"], - ["masturbation"], - ["restrictive"], - ["chastity"] + ["Allowed", 1], + ["Forbidden", 0], ]; - super("Release rules", pairs); - this.setValue(current_rule.set.releaseRules); - this.onchange = (value) => current_rule.set.releaseRules = value; + super("Masturbation", pairs); + this.setValue(current_rule.set.releaseRules.masturbation); + this.onchange = (value) => current_rule.set.releaseRules.masturbation = value; + } + } + + class ReleasePartnerSwitch extends RadioSelector { + constructor() { + const pairs = [ + ["Allowed", 1], + ["Forbidden", 0], + ]; + super("Sex with partner", pairs); + this.setValue(current_rule.set.releaseRules.partner); + this.onchange = (value) => current_rule.set.releaseRules.partner = value; + } + } + + class ReleaseFamilySwitch extends RadioSelector { + constructor() { + const pairs = [ + ["Allowed", 1], + ["Forbidden", 0], + ]; + super("Sex with family", pairs); + this.setValue(current_rule.set.releaseRules.family); + this.onchange = (value) => current_rule.set.releaseRules.family = value; + } + } + + class ReleaseSlavesSwitch extends RadioSelector { + constructor() { + const pairs = [ + ["Allowed", 1], + ["Forbidden", 0], + ]; + super("Sex with other slaves", pairs); + this.setValue(current_rule.set.releaseRules.slaves); + this.onchange = (value) => current_rule.set.releaseRules.slaves = value; + } + } + + class ReleaseMasterSwitch extends RadioSelector { + constructor() { + const pairs = [ + ["Granted", 1], + ["Denied", 0], + ]; + super(`Routine sex with ${properMaster()}`, pairs); + this.setValue(current_rule.set.releaseRules.master); + this.onchange = (value) => current_rule.set.releaseRules.master = value; } } -- GitLab