Newer
Older
super();
this.appendChild(new OptionsItem("New Rule", () => newRule(root)));
this.appendChild(new OptionsItem("Remove Rule", () => removeRule(root)));
this.appendChild(new OptionsItem("Apply rules", () => this.appendChild(new ApplicationLog())));
this.appendChild(new OptionsItem("Lower Priority", () => lowerPriority(root)));
this.appendChild(new OptionsItem("Higher Priority", () => higherPriority(root)));
this.appendChild(new OptionsItem("Rename", () => this.appendChild(new RenameField(root))));
this.appendChild(new OptionsItem("Export this rule", () => this.appendChild(new ExportField(current_rule))));
this.appendChild(new OptionsItem("Export all rules", () => this.appendChild(new ExportField(...V.defaultRules))));
this.appendChild(new OptionsItem("Import rule(s)", () => this.appendChild(new NewRuleField(root))));
}
}
class ApplicationLog extends Element {
render() {
const elem = document.querySelector("#application-log") || document.createElement("div");
elem.id = "application-log";
}
}
class RenameField extends Element {
constructor(root) {
this.element.onblur = () => changeName(this.element.value, root);
this.element.onkeypress = (e) => { if (returnP(e)) { changeName(this.element.value, root); } };
elem.setAttribute("value", current_rule.name);
return elem;
render(...args) {
let element = document.getElementById("exportfield");
if (element === null) {
this.appendChild(new ConditionFunction());
this.appendChild(new AssignmentInclusion());
this.appendChild(new FacilityHeadAssignmentInclusion());
const items = [
["Never", false],
["Always", true],
["Custom", "custom"],
["Devotion", "devotion"],
["Trust", "trust"],
["Health", "health"],
["Weight", "weight"],
["Age", "actualAge"],
["Body Age", "physicalAge"],
["Visible Age", "visualAge"],
["Muscles", "muscles"],
["Lactation", "lactation"],
["Pregnancy", "preg"],
["Pregnancy Multiples", "pregType"],
["Belly Implant", "bellyImplant"],
["Belly Size", "belly"],
["Education", "intelligenceImplant"],
["Intelligence", "intelligence"],
["Fetish", "fetish"],
];
this.fnlist = new List("Activation function", items);
this.fnlist.setValue(current_rule.condition.function === "between" ? current_rule.condition.data.attribute : current_rule.condition.function);
this.show_custom_editor(CustomEditor, current_rule.condition.data);
this.show_custom_editor(RangeEditor, current_rule.condition.function, current_rule.condition.data);
case "belongs":
this.show_custom_editor(ItemEditor, current_rule.condition.function, current_rule.condition.data);
break;
betweenP(attribute) {
return [
"devotion",
"trust",
"health",
"energy",
"weight",
"actualAge",
"physicalAge",
"visualAge",
"muscles",
"lactation",
"preg",
"pregType",
"bellyImplant",
"belly",
"intelligenceImplant",
"intelligence",
].includes(attribute);
}
belongsP(attribute) {
return [
"fetish",
].includes(attribute);
}
this.custom_editor = new what(...args);
this.appendChild(this.custom_editor);
}
hide_custom_editor() {
if (this.custom_editor) {
this.custom_editor.remove();
this.custom_editor = null;
}
}
if (value === true || value === false) {
current_rule.condition.function = value;
current_rule.condition.data = {};
this.hide_custom_editor();
} else if (value === "custom") {
current_rule.condition.function = "custom";
current_rule.condition.data = "";
this.show_custom_editor(CustomEditor, current_rule.condition.data);
} else if (this.betweenP(value)) {
current_rule.condition.function = "between";
current_rule.condition.data = {attribute: value, value: [null, null]};
this.show_custom_editor(RangeEditor, current_rule.condition.function, current_rule.condition.data);
} else if (this.belongsP(value)) {
current_rule.condition.function = "belongs";
this.show_custom_editor(ItemEditor, current_rule.condition.function, current_rule.condition.data);
}
}
}
class CustomEditor extends Element {
constructor(data) {
if (data.length === 0) { data = "(slave) => slave.slaveName === 'Fancy Name'"; }
const elem = document.createElement("div");
const textarea = document.createElement("textarea");
const errorMessage = document.createElement("div");
$(errorMessage).addClass("yellow");
let checkRules = () => errorMessage.innerText = RuleHasError(current_rule) ? "WARNING: This rule attempts to set a variable; please ensure any '=' is replaced with '=='" : "";
$(textarea).blur(() => current_rule.condition.data = textarea.value);
$(textarea).blur(checkRules);
checkRules();
const explanation = document.createElement("div");
explanation.innerHTML = "Insert a valid <a target='_blank' class='link-external' href='https://www.w3schools.com/js/js_comparisons.asp'>JavaScript comparison and/or logical operation</a>.";
elem.appendChild(explanation);
const minlabel = document.createElement("label");
minlabel.innerHTML = "Lower bound: ";
elem.appendChild(minlabel);
const min = document.createElement("input");
min.setAttribute("type", "text");
min.onkeypress = e => { if (returnP(e)) { this.setmin(min.value); } };
elem.appendChild(document.createElement("br"));
const maxlabel = document.createElement("label");
maxlabel.innerHTML = "Upper bound: ";
elem.appendChild(maxlabel);
const max = document.createElement("input");
max.setAttribute("type", "text");
max.onkeypress = e => { if (returnP(e)) { this.setmax(max.value); } };
const infobar = document.createElement("div");
infobar.innerHTML = this.info(data.attribute);
elem.appendChild(infobar);
current_rule.condition.data.value[0] = this.parse(value);
this.min.value = `${current_rule.condition.data.value[0]}`;
current_rule.condition.data.value[1] = this.parse(value);
this.max.value = `${current_rule.condition.data.value[1]}`;
return ({
"devotion": "Very Hateful: (-∞, -95), Hateful: [-95, -50), Resistant: [-50, -20), Ambivalent: [-20, 20], Accepting: (20, 50], Devoted: (50, 95], Worshipful: (95, ∞)",
"trust": "Extremely terrified: (-∞, -95), Terrified: [-95, -50), Frightened: [-50, -20), Fearful: [-20, 20], Careful: (20, 50], Trusting: (50, 95], Total trust: (95, ∞)",
"health": "Death: (-∞, -100), Near Death: [-100, -90), Extremely Unhealthy: [-90, -50), Unhealthy: [-50, -20), Healthy: [-20, 20], Very Healthy: (20, 50], Extremely Healthy: (50, 90], Unnaturally Healthy: (90, ∞)",
"energy": "Frigid: (-∞, 20], Poor: (20, 40], Average: (40, 60], Powerful: (60, 80], Sex Addict: (80, 100), Nympho: 100",
"weight": "Emaciated: (-∞, -95), Skinny: [-95, -30), Thin: [-30, -10), Average: [-10, 10], Plush: (10, 30], Fat: (30, 95], Overweight: (95, ∞)",
"lactation": "None: 0, 1: Natural, 2: Lactation implant",
"preg": "Barren: -2, On contraceptives: -1, Not pregnant: 0, Pregnancy weeks: [1, ∞)",
"pregType": "Fetus count, known only after the 10th week of pregnancy",
"bellyImplant": "Volume in CCs. None: -1",
"belly": "Volume in CCs, any source",
"intelligenceImplant": "Education level. 0: uneducated, 15: educated, 30: advanced education, (0, 15): incomplete education.",
"intelligence": "From moronic to brilliant: [-100, 100]",
"accent": "No accent: 0, Nice accent: 1, Bad accent: 2, Can't speak language: 3 and above",
"waist": "Masculine waist: (95, ∞), Ugly waist: (40, 95], Unattractive waist: (10, 40], Average waist: [-10, 10], Feminine waist: [-40, -10), Wasp waist: [-95, -40), Absurdly narrow: (-∞, -95)",
class ItemEditor extends Element {
render(fn, data) {
const elem = document.createElement("div");
const input = document.createElement("input");
input.setAttribute("type", "text");
input.value = JSON.stringify(data.value);
input.onkeypress = e => { if (returnP(e)) { this.setValue(input); } };
this.input = input;
elem.appendChild(input);
const infobar = document.createElement("div");
infobar.innerHTML = this.info(data.attribute);
elem.appendChild(infobar);
return elem;
}
info(attribute) {
"fetish": "buttslut, cumslut, masochist, sadist, dom, submissive, boobs, pregnancy, none (AKA vanilla)",
setValue(input) {
try {
const arr = JSON.parse(input.value);
current_rule.condition.data.value = arr;
input.value = JSON.stringify(arr);
} catch (e) {
alert(e);
}
}
}
class AssignmentInclusionBase extends ButtonList {
/**
* @param {string} label
* @param {App.Data.JobDesc[]} [jobs]
* @param {App.Entity.Facilities.SingleJobFacility[]} [facilities]
*/
constructor(label, jobs, facilities) {
super(label);
this._attributes = {};
if (jobs !== undefined) {
jobs.forEach(job => {
this._attributes[capFirstChar(job.position)] = job.assignment;
});
if (facilities !== undefined) {
facilities.forEach(f => {
if (f.established && f.desc.defaultJob != null) { /* eslint-disable-line eqeqeq */
const displayName = f.name === "the " + f.genericName ? f.genericName : f.name;
this._attributes[displayName] = f.desc.jobs[f.desc.defaultJob].assignment;
}
});
for (const i in this._attributes) {
this.appendChild(new ButtonItem(i, this.getAttribute(i), current_rule.condition.assignment.includes(this.getAttribute(i))));
const allValues = this.getAllValues();
current_rule.condition.assignment = this.getSelection().concat(current_rule.condition.assignment.filter(a => !allValues.includes(a)));
return this._attributes[what];
}
}
class AssignmentInclusion extends AssignmentInclusionBase {
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
let facilities = [];
for (const f of Object.values(App.Entity.facilities)) {
if (f === App.Entity.facilities.penthouse) {
continue;
}
if (f.established) {
facilities.push(f);
}
}
super("Apply to assignments and facilities", Object.values(App.Data.Facilities.penthouse.jobs), facilities);
}
}
class FacilityHeadAssignmentInclusion extends AssignmentInclusionBase {
constructor() {
const jobs = [];
for (const f of Object.values(App.Entity.facilities)) {
if (f.established && f.desc.manager !== null) {
jobs.push(f.desc.manager);
}
}
super("Apply to facility heads", jobs);
}
}
class SpecificInclusionExclusion extends Options {
constructor() {
this.appendChild(new OptionsItem("Limit to specific slaves", () => this.show_slave_selection()));
this.appendChild(new OptionsItem("Exclude specific slaves", () => this.show_slave_exclusion()));
this.subwidget = null;
}
show_slave_selection() {
this.subwidget = new SlaveSelection();
this.appendChild(this.subwidget);
}
show_slave_exclusion() {
this.subwidget = new SlaveExclusion();
this.appendChild(this.subwidget);
}
}
class SlaveSelection extends ButtonList {
constructor() {
super("Include specific slaves");
V.slaves.forEach(slave => this.appendChild(new ButtonItem(
[slave.slaveName, slave.slaveSurname].join(" "),
slave.ID,
current_rule.condition.selectedSlaves.includes(slave.ID))));
}
onchange() {
current_rule.condition.selectedSlaves = this.getSelection();
}
}
class SlaveExclusion extends ButtonList {
constructor() {
super("Exclude specific slaves");
V.slaves.forEach(slave => this.appendChild(new ButtonItem(
[slave.slaveName, slave.slaveSurname].join(" "),
slave.ID,
current_rule.condition.excludedSlaves.includes(slave.ID))));
}
onchange() {
current_rule.condition.excludedSlaves = this.getSelection();
}
// parent section for effect editing
class EffectEditor extends Element {
constructor() {
this.appendChild(new AppearanceTab(this.tabButtons_));
this.appendChild(new CosmeticTab(this.tabButtons_));
this.appendChild(new BodyModTab(this.tabButtons_));
this.appendChild(new AutosurgeryTab(this.tabButtons_));
this.appendChild(new RegimenTab(this.tabButtons_));
this.appendChild(new BehaviourTab(this.tabButtons_));
this.appendChild(new OtherTab(this.tabButtons_));
element.className = "ra-setters";
this.tabButtons_ = document.createElement("div");
this.tabButtons_.className = "tab";
element.appendChild(this.tabButtons_);
class AppearanceTab extends Tab {
constructor(tabButtons) {
super("appearance", "Appearance", tabButtons);
this.appendChild(new ClothesList());
this.appendChild(new CollarList());
this.appendChild(new ShoeList());
this.appendChild(new CorsetList());
this.appendChild(new VagChastityList());
this.appendChild(new VagAccVirginsList());
this.appendChild(new VagAccAVirginsList());
this.appendChild(new VagAccOtherList());
this.appendChild(new DickChastityList());
this.appendChild(new DickAccVirginsList());
this.appendChild(new DickAccOtherList());
this.appendChild(new AnalChastityList());
this.appendChild(new ButtplugsVirginsList());
this.appendChild(new ButtplugsOtherList());
this.appendChild(new ButtplugAttachmentsList());
class RegimenTab extends Tab {
constructor(tabButtons) {
super("regiment", "Physical Regiment", tabButtons);
this.appendChild(new GrowthList());
this.appendChild(new CurrativesList());
this.appendChild(new AphrodisiacList());
this.appendChild(new ContraceptiveList());
this.appendChild(new FemaleHormonesList());
this.appendChild(new ShemaleHormonesList());
this.appendChild(new GeldingHormonesList());
this.appendChild(new OtherDrugsList());
if (V.enema === 1) {
this.appendChild(new EnemaList());
}
this.appendChild(new DietList());
this.appendChild(new DietGrowthList());
this.appendChild(new DietBaseList());
if (V.arcologies[0].FSHedonisticDecadenceResearch === 1) {
this.appendChild(new DietSolidFoodList());
}
this.appendChild(new MuscleList());
this.appendChild(new BraceList());
class BehaviourTab extends Tab {
constructor(tabButtons) {
super("behavior", "Behavior", tabButtons);
this.appendChild(new AutomaticAssignmentList());
this.appendChild(new LivingStandardList());
this.appendChild(new PunishmentList());
this.appendChild(new RewardList());
this.appendChild(new ReleaseList());
this.appendChild(new SmartFetishList());
this.appendChild(new SmartXYAttractionList());
this.appendChild(new SmartXXAttractionList());
this.appendChild(new SmartEnergyList());
this.appendChild(new SpeechList());
this.appendChild(new RelationshipList());
if (V.studio === 1) {
this.appendChild(new PornBroadcastStatus());
class OtherTab extends Tab {
constructor(tabButtons) {
super("other", "Other", tabButtons);
this.appendChild(new ClearLabelSwitch());
this.appendChild(new LabelRemoveList());
}
}
class ClearLabelSwitch extends BooleanSwitch {
constructor() {
super("Remove all tags (Gobal swith)", [false, true]);
this.setValue(current_rule.set.labelTagsClear);
this.onchange = (value) => current_rule.set.labelTagsClear = value;
class CosmeticTab extends Tab {
constructor(tabButtons) {
super("cosmetic", "Cosmetic", tabButtons);
this.appendChild(new EyewearList());
this.appendChild(new LensesList());
this.appendChild(new MakeupList());
this.appendChild(new NailsList());
this.appendChild(new HairLengthList());
this.appendChild(new EyebrowColorList());
this.appendChild(new EyebrowStyleList());
this.appendChild(new EyebrowFullnessList());
this.appendChild(new MarkingsList());
this.appendChild(new HornColorList());
class BodyModTab extends Tab {
constructor(tabButtons) {
super("bodyMod", "Body Mod", tabButtons);
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
this.appendChild(new EarPiercingList());
this.appendChild(new NosePiercingList());
this.appendChild(new EyebrowPiercingList());
this.appendChild(new NavelPiercingList());
this.appendChild(new NipplePiercingList());
this.appendChild(new AreolaPiercingList());
this.appendChild(new LipPiercingList());
this.appendChild(new TonguePiercingList());
this.appendChild(new ClitPiercingList());
this.appendChild(new LabiaPiercingList());
this.appendChild(new ShaftPiercingList());
this.appendChild(new PerineumPiercingList());
this.appendChild(new CorsetPiercingList());
this.appendChild(new AutoBrandingList());
this.appendChild(new BrandingLocationList());
this.appendChild(new BrandDesignList());
this.appendChild(new FaceTattooList());
this.appendChild(new ShoulderTattooList());
this.appendChild(new ChestTattooList());
this.appendChild(new ArmTattooList());
this.appendChild(new UpperBackTattooList());
this.appendChild(new LowerBackTattooList());
this.appendChild(new AbdomenTattooList());
this.appendChild(new ButtockTattooList());
this.appendChild(new AnalTattooList());
this.appendChild(new LegTattooList());
this.appendChild(new BirthsTattooList());
this.appendChild(new AbortionTattooList());
class AutosurgeryTab extends Tab {
constructor(tabButtons) {
super("autosurgery", "Autosurgery", tabButtons);
this.appendChild(new AutosurgerySwitch());
this.appendChild(new SmellSurgeryList());
this.appendChild(new TasteSurgeryList());
this.appendChild(new CosmeticSurgeryList());
this.appendChild(new LipSurgeryList());
this.appendChild(new ButtSurgeryList());
this.appendChild(new BreastSurgeryList());
this.appendChild(new TighteningSurgeryList());
this.appendChild(new BodyHairSurgeryList());
this.appendChild(new HairSurgeryList());
this.appendChild(new EarShapeSurgeryList());
this.appendChild(new HornSurgeryList());
class ClothesList extends List {
constructor() {
const items = [
["Select her own outfit", "choosing her own clothes"]
];
super("Clothes", items);
const nclothes = [
["Bangles", "slutty jewelry"],
["Bodysuit", "a comfortable bodysuit"],
["Clubslut netting", "clubslut netting"],
["Cutoffs and a t-shirt", "cutoffs and a t-shirt"],
["Fallen nun", "a fallen nuns habit"],
["Hijab and abaya", "a hijab and abaya"],
["Maid (slutty)", "a slutty maid outfit"],
["Nice lingerie", "attractive lingerie"],
["Schoolgirl", "a schoolgirl outfit"],
["Slutty outfit", "a slutty outfit"],
["Suit (slutty)", "slutty business attire"]
["Ballgown", "a ball gown"],
["Battledress", "battledress"],
["Boyshorts", "boyshorts"],
["Bra", "a bra"],
["Button-up shirt and panties", "a button-up shirt and panties"],
["Button-up shirt", "a button-up shirt"],
["Cutoffs", "cutoffs"],
["Cybersuit", "a cybersuit"],
["Halter top dress", "a halter top dress"],
["Hanbok", "a hanbok"],
["Hijab and blouse", "a hijab and blouse"],
["Jeans", "jeans"],
["Kitty lingerie", "kitty lingerie"],
["Latex catsuit", "a latex catsuit"],
["Leather pants and a tube top", "leather pants and a tube top"],
["Leather pants and pasties", "leather pants and pasties"],
["Leather pants", "leather pants"],
["Maid (nice)", "a nice maid outfit"],
["Mini dress", "a mini dress"],
["Monokini", "a monokini"],
["Mounty outfit", "a mounty outfit"],
["Nurse (nice)", "a nice nurse outfit"],
["One-piece swimsuit", "a one-piece swimsuit"],
["Over-sized t-shirt and boyshorts", "an oversized t-shirt and boyshorts"],
["Over-sized t-shirt", "an oversized t-shirt"],
["Panties", "panties"],
["Pasties", "pasties"],
["Pasties and panties", "panties and pasties"],
["Police Uniform", "a police uniform"],
["Pony outfit (nice)", "a nice pony outfit"],
["Pony outfit (slutty)", "a slutty pony outfit"],
["Santa dress", "a Santa dress"],
["Schutzstaffel uniform (nice)", "a schutzstaffel uniform"],
["Schutzstaffel uniform (slutty)", "a slutty schutzstaffel uniform"],
["Skimpy loincloth", "a skimpy loincloth"],
["Slave gown", "a slave gown"],
["Sport shorts and a sports bra", "sport shorts and a sports bra"],
["Sport shorts and a t-shirt", "sport shorts and a t-shirt"],
["Sport shorts", "sport shorts"],
["Sports bra", "a sports bra"],
["Striped Bra", "a striped bra"],
["Striped Panties", "striped panties"],
["Striped Underwear", "striped underwear"],
["Suit (nice)", "nice business attire"],
["Sweater and cutoffs", "a sweater and cutoffs"],
["Sweater and panties", "a sweater and panties"],
["Sweater", "a sweater"],
["T-shirt and jeans", "a t-shirt and jeans"],
["T-shirt and panties", "a t-shirt and panties"],
["T-shirt and thong", "a t-shirt and thong"],
["T-shirt", "a t-shirt"],
["Tank-top and panties", "a tank-top and panties"],
["Tank-top", "a tank-top"],
["Thong", "a thong"],
["Tube top and thong", "a tube top and thong"],
["Tube top", "a tube top"]
["Body oil (FS)", "body oil"],
["Bunny outfit (FS)", "a bunny outfit"],
["Chattel habit (FS)", "a chattel habit"],
["Conservative clothing (FS)", "conservative clothing"],
["Harem gauze (FS)", "harem gauze"],
["Huipil (FS)", "a huipil"],
["Kimono (FS)", "a kimono"],
["Maternity dress (FS)", "a maternity dress"],
["Maternity lingerie (FS)", "attractive lingerie for a pregnant woman"],
["Qipao (nice) (FS)", "a long qipao"],
["Qipao (slutty) (FS)", "a slutty qipao"],
["Stretch pants and a crop-top (FS)", "stretch pants and a crop-top"],
["Toga (FS)", "a toga"],
["Western clothing (FS)", "Western clothing"],
];
spclothes.forEach(pair => { if (isItemAccessible(pair[1])) { nclothes.push(pair); } });
fsnclothes.forEach(pair => { if (isItemAccessible(pair[1])) { nclothes.push(pair); } });
nclothes.sort(function(a, b) { if (a[0] < b[0]) { return -1; } if (a[0] > b[0]) { return 1; } return 0; });
this._nice = new ListSubSection(this, "Nice", nclothes);
const hclothes = [
["Nude", "no clothing"],
["Penitent nun", "a penitent nuns habit"],
["Restrictive latex", "restrictive latex"],
["Shibari ropes", "shibari ropes"],
["Uncomfortable straps", "uncomfortable straps"]
];
const fshclothes = [
["Chains (FS)", "chains"],
];
fshclothes.forEach(pair => { if (isItemAccessible(pair[1])) { hclothes.push(pair); } });
hclothes.sort(function(a, b) { if (a[0] < b[0]) { return -1; } if (a[0] > b[0]) { return 1; } return 0; });
this._harsh = new ListSubSection(this, "Harsh", hclothes);
_appendContentTo(container) {
super._appendContentTo(container);
this._nice._appendContentTo(container);
this._harsh._appendContentTo(container);
}
}
class CollarList extends List {
constructor() {
const items = [
["No collar", "none"],
];
super("Collar", items);
const ncollars = [
["Stylish leather", "stylish leather"],
["Satin choker", "satin choker"],
["Silken Ribbon", "silk ribbon"],
["Heavy Gold", "heavy gold"],
["Pretty jewelry", "pretty jewelry"],
if (V.seeAge !== 0) { ncollars.push(["Nice retirement counter", "nice retirement counter"]); }
fsncollars.forEach(pair => { if (isItemAccessible(pair[1])) { ncollars.push(pair); } });
this._nice = new ListSubSection(this, "Nice", ncollars);
const hcollars = [];
if (item.fs === "seeAge" && V.seeAge === 0) {
return;
} else if (item.fs === "seePreg" && V.seePreg === 0) {
return;
} else if (item.rs === "buyGag" && V.toysBoughtGags !== 1) {
return;
this._harsh = new ListSubSection(this, "Harsh", hcollars);
this.setValue(current_rule.set.collar);
this.onchange = (value) => current_rule.set.collar = value;
_appendContentTo(container) {
super._appendContentTo(container);
this._nice._appendContentTo(container);
this._harsh._appendContentTo(container);
}
class ShoeList extends ListSelector {
const shoes = [];
setup.shoes.forEach(acc => {
if (acc.fs === undefined && acc.rs === undefined) {
shoes.push([acc.name, acc.value]);
} else if (acc.fs === "statuesque" && V.arcologies[0].FSStatuesqueGlorification !== "unset") {
} else if (acc.rs === "boughtShoes" && V.shoesBoughtHeels === 1) {
shoes.push([`${acc.name} (Purchased)`, acc.value]);
this.setValue(current_rule.set.shoes);
this.onchange = (value) => current_rule.set.shoes = value;
class CorsetList extends ListSelector {
} else if (acc.fs === "repopulation" && V.arcologies[0].FSRepopulationFocus !== "unset") {
} else if (acc.rs === "boughtBelly" && V.clothesBoughtBelly === 1) {
this.onchange = (value) => current_rule.set.bellyAccessory = value;
class GlovesList extends ListSelector {
constructor() {
const items = [
["none"],
["hand gloves"],
["elbow gloves"],
];
super("Arm accessory", items, true, false, true);
this.setValue(current_rule.set.armAccessory);
this.onchange = (value) => current_rule.set.armAccessory = value;
}
}
["none"],
["short stockings"],
["long stockings"],
super("Leg accessory", items, true, false, true);
this.setValue(current_rule.set.legAccessory);
this.onchange = (value) => current_rule.set.legAccessory = value;
}
}
this.setValue(current_rule.set.chastityVagina);
this.onchange = (value) => current_rule.set.chastityVagina = value;
}
class VagAccVirginsList extends ListSelector {
} else if (acc.rs === "buyBigDildos" && V.toysBoughtDildos === 1) {
this.setValue(current_rule.set.virginAccessory);
this.onchange = (value) => current_rule.set.virginAccessory = value;
class VagAccAVirginsList extends ListSelector {
} else if (acc.rs === "buyBigDildos" && V.toysBoughtDildos === 1) {
this.setValue(current_rule.set.aVirginAccessory);
this.onchange = (value) => current_rule.set.aVirginAccessory = value;
class VagAccOtherList extends ListSelector {
} else if (acc.rs === "buyBigDildos" && V.toysBoughtDildos === 1) {
this.setValue(current_rule.set.vaginalAccessory);
this.onchange = (value) => current_rule.set.vaginalAccessory = value;
class VaginalAttachmentsList extends ListSelector {
} else if (acc.rs === "buyVaginalAttachments" && V.toysBoughtVaginalAttachments === 1) {
super("Vaginal attachments for slaves with vaginal accessories", accs);
this.setValue(current_rule.set.vaginalAttachment);
this.onchange = (value) => current_rule.set.vaginalAttachment = value;
}