Merge pull request #2474 from Esalarc/talkativeness

Tweaks to activateNaturalOrder
This commit is contained in:
Cohee
2024-07-04 20:02:39 +03:00
committed by GitHub

View File

@@ -1006,6 +1006,7 @@ function activateNaturalOrder(members, input, lastMessage, allowSelfResponses, i
} }
} }
let chattyMembers = [];
// activation by talkativeness (in shuffled order, except banned) // activation by talkativeness (in shuffled order, except banned)
const shuffledMembers = shuffle([...members]); const shuffledMembers = shuffle([...members]);
for (let member of shuffledMembers) { for (let member of shuffledMembers) {
@@ -1023,19 +1024,24 @@ function activateNaturalOrder(members, input, lastMessage, allowSelfResponses, i
if (talkativeness >= rollValue) { if (talkativeness >= rollValue) {
activatedMembers.push(member); activatedMembers.push(member);
} }
if (talkativeness > 0){
chattyMembers.push(member);
}
} }
// pick 1 at random if no one was activated // pick 1 at random if no one was activated
let retries = 0; let retries = 0;
while (activatedMembers.length === 0 && ++retries <= members.length) { // try to limit the selected random character to those with talkativeness > 0
const randomIndex = Math.floor(Math.random() * members.length); let randomPool = chattyMembers.length > 0? chattyMembers : members;
const character = characters.find((x) => x.avatar === members[randomIndex]); while (activatedMembers.length === 0 && ++retries <= randomPool.length) {
const randomIndex = Math.floor(Math.random() * randomPool.length);
const character = characters.find((x) => x.avatar === randomPool[randomIndex]);
if (!character) { if (!character) {
continue; continue;
} }
activatedMembers.push(members[randomIndex]); activatedMembers.push(randomPool[randomIndex]);
} }
// de-duplicate array of character avatars // de-duplicate array of character avatars