From 453c5220053508dc813f75aae30c1cbc0ec2c857 Mon Sep 17 00:00:00 2001
From: Trinidad <anchaiscastilla@gmail.com>
Date: Mon, 25 Sep 2023 22:17:59 +0200
Subject: [PATCH] 	modified:   src/events/randomEvent.js 	modified:  
 src/gui/options/options.js 	modified:   src/js/utilsSlaves.js

---
 src/events/randomEvent.js  | 13 ++++++-------
 src/gui/options/options.js | 12 ++++++------
 src/js/utilsSlaves.js      |  5 +++--
 3 files changed, 15 insertions(+), 15 deletions(-)

diff --git a/src/events/randomEvent.js b/src/events/randomEvent.js
index 2afc9da5fb5..6b61769f220 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 f6b59df2afe..84f52297505 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 904442e40f8..c3c3e6ebd27 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)
-- 
GitLab