diff --git a/src/events/randomEvent.js b/src/events/randomEvent.js index 2afc9da5fb5da65af8f6923460ec1a93b5a34d3d..6b61769f220d112f43db61a5bb0ad2a94aa0cfd2 100644 --- a/src/events/randomEvent.js +++ b/src/events/randomEvent.js @@ -457,8 +457,8 @@ App.Events.playRandomIndividualEvent = function() { V.RIESkip.push(V.event.actors[0]); getSlave(V.event.actors[0]).counter.events++; V.experimental.REControl.events.push(V.event.eventName); - if (V.experimental.REControl.events.length > Math.max(10, V.experimental.REControl.level * 4 + 10)) { - V.experimental.REControl.events.splice(0, V.experimental.REControl.events.length - Math.max(10, V.experimental.REControl.level * 4 + 10)); + if (V.experimental.REControl.events.length > Math.max(10, V.experimental.REControl.level * V.RIEPerWeek * 2 + 10)) { + V.experimental.REControl.events.splice(0, V.experimental.REControl.events.length - Math.max(10, V.experimental.REControl.level * V.RIEPerWeek * 2 + 10)); } } else { const eligibleSlaves = getRieEligibleSlaves(); @@ -520,7 +520,7 @@ App.Events.playRandomIndividualEvent = function() { validEvents.forEach(e => { e.weightControl = recentEvents.indexOf(e.eventName) === -1 ? 0 : 1; // the event has been played recently if (e.weightControl) { - if (recentEvents.indexOf(e.eventName) !== recentEvents.lastIndexOf(e.eventName) && V.experimental.REControl.level > 12) { + if (recentEvents.indexOf(e.eventName) !== recentEvents.lastIndexOf(e.eventName) && V.experimental.REControl.level > 6) { e.weightControl = 2 // the event has been played recently at least twice and the control level is at least high } } @@ -534,8 +534,7 @@ App.Events.playRandomIndividualEvent = function() { }); } for (let xSlaves = 0; xSlaves < 3; xSlaves++) { // up to 3 loops to look for valid slaves with valid events - eventSlave = getBestSlaves({part: "counter.events", count: (Math.min(30 - V.experimental.REControl.level + xSlaves * 10, V.slaves.length)), largest: false, - filter: sc => sc.fuckdoll === 0 && (assignmentVisible(sc) || [Job.MASTERSUITE, Job.CONCUBINE, Job.QUARTER].includes(sc.assignment)) && !V.RIESkip.includes(sc.ID)}).random(); // look for a limited group of slaves among the ones that have been involved in less individual events + eventSlave = getBestSlaves({part: "counter.events", count: (Math.min(20 - V.experimental.REControl.level + xSlaves * 10, V.slaves.length)), largest: false}, eligibleSlaves).random(); // look for a limited group of slaves among the ones that have been involved in less individual events events = App.Events.getValidEvents(validEvents, eventSlave); if (events.length) { // if there is any valid event for the selected slave, choose one and end loops event = events.random(); @@ -564,8 +563,8 @@ App.Events.playRandomIndividualEvent = function() { V.RIESkip.push(event.actors[0]); getSlave(event.actors[0]).counter.events++; V.experimental.REControl.events.push(event.eventName); - if (V.experimental.REControl.events.length > Math.max(10, V.experimental.REControl.level * 4 + 10)) { - V.experimental.REControl.events.splice(0, V.experimental.REControl.events.length - Math.max(10, V.experimental.REControl.level * 4 + 10)); + if (V.experimental.REControl.events.length > Math.max(10, V.experimental.REControl.level * V.RIEPerWeek * 2 + 10)) { + V.experimental.REControl.events.splice(0, V.experimental.REControl.events.length - Math.max(10, V.experimental.REControl.level * V.RIEPerWeek * 2 + 10)); } } } diff --git a/src/gui/options/options.js b/src/gui/options/options.js index f6b59df2afe7f6207de313159824150725db1d07..84f522975059bdbc15fa068b76e8adab67275018 100644 --- a/src/gui/options/options.js +++ b/src/gui/options/options.js @@ -760,12 +760,12 @@ App.UI.optionsPassage = function() { options.addOption("Random events repeat control", "level", V.experimental.REControl) .addValueList([ ["No control", 0], - ["Very low", 3], - ["Low", 6], - ["Medium", 9], - ["High", 12], - ["Very high", 15], - ["Extreme", 25] + ["Very low", 2], + ["Low", 4], + ["Medium", 6], + ["High", 8], + ["Very high", 10], + ["Extreme", 15] ]) .addComment("This will control the repetition of random events and their actors to increase variation. The higher the control, the more weeks it will try to prevent the same event from happening again."); diff --git a/src/js/utilsSlaves.js b/src/js/utilsSlaves.js index 904442e40f8e5350625ed292774934ddbebc66b0..c3c3e6ebd2775adfbb0efe4f7a818631dab529a0 100644 --- a/src/js/utilsSlaves.js +++ b/src/js/utilsSlaves.js @@ -150,13 +150,14 @@ globalThis.slaveSortMinor = function(slaves) { * getBestSlaves({part:"dick", smallest:true, filter:(slave)=>slave.dick > 0});//defaults to top 3 * getBestSlaves({part:slave=>slave.intelligence+slave.intelligenceImplant}); * @param {getBestSlavesParams} params + * @param {App.Entity.SlaveState[]} [slaveArray] * @returns {App.Entity.SlaveState[]} sorted from best to worst */ -globalThis.getBestSlaves = function({part, count = 3, largest = true, filter = (() => true)}) { +globalThis.getBestSlaves = function({part, count = 3, largest = true, filter = (() => true)}, slaveArray = V.slaves) { const partCB = _.isFunction(part) ? part : (slave) => slave[part]; const sortMethod = largest ? (left, right) => right.value - left.value : (left, right) => left.value - right.value; - return V.slaves.filter(slave => filter(slave)) + return slaveArray.filter(slave => filter(slave)) .map(slave => ({slave, value: partCB(slave)})) .sort(sortMethod) .slice(0, count)