Fix sticky/cooldown interaction. Add icons

This commit is contained in:
Cohee 2024-06-21 02:42:15 +03:00
parent aa473dd749
commit 9c3cad2df2
2 changed files with 39 additions and 15 deletions

View File

@ -5424,8 +5424,11 @@
</div>
<div class="flex2 flex-container flexFlowColumn flexNoGap" data-i18n="[title]Sticky entries will stay active for N messages after being triggered." title="Sticky entries will stay active for N messages after being triggered.">
<div class="flex-container justifySpaceBetween marginBot5">
<small for="sticky" data-i18n="Sticky">
Sticky
<small class="flex-container alignItemsBaseline" for="sticky" data-i18n="Sticky">
<span data-i18n="Sticky">
Sticky
</span>
<i class="fa-solid fa-comments fa-xs"></i>
</small>
</div>
<div class="range-block-range">
@ -5434,8 +5437,11 @@
</div>
<div class="flex2 flex-container flexFlowColumn flexNoGap" data-i18n="[title]Entries with a cooldown can't be activated N messages after being triggered." title="Entries with a cooldown can't be activated N messages after being triggered.">
<div class="flex-container justifySpaceBetween marginBot5">
<small for="cooldown" data-i18n="Cooldown">
Cooldown
<small class="flex-container alignItemsBaseline" for="cooldown" data-i18n="Cooldown">
<span data-i18n="Cooldown">
Cooldown
</span>
<i class="fa-solid fa-comments fa-xs"></i>
</small>
</div>
<div class="range-block-range">

View File

@ -107,9 +107,14 @@ class WorldInfoBuffer {
static externalActivations = [];
/**
* @type {object[]} Array of entries that need to be suppressed no matter what
* @type {object[]} Array of entries that need to be activated due to sticky
*/
static externalSuppressions = [];
static stickyActivations = [];
/**
* @type {object[]} Array of entries that need to be suppressed due to cooldown
*/
static cooldownSuppressions = [];
/**
* @type {string[]} Array of messages sorted by ascending depth
@ -270,12 +275,21 @@ class WorldInfoBuffer {
}
/**
* Check if the current entry is externally suppressed.
* Check if the current entry is sticky activated.
* @param {object} entry WI entry to check
* @returns {boolean} True if the entry is forcefully suppressed
* @returns {boolean} True if the entry is sticky activated
*/
isExternallySuppressed(entry) {
return WorldInfoBuffer.externalSuppressions.some(x => JSON.stringify(x) === JSON.stringify(entry));
isStickyActivated(entry) {
return WorldInfoBuffer.stickyActivations.some(x => JSON.stringify(x) === JSON.stringify(entry));
}
/**
* Check if the current entry is on cooldown.
* @param {object} entry WI entry to check
* @returns {boolean} True if the entry is suppressed by cooldown
*/
isOnCooldown(entry) {
return WorldInfoBuffer.cooldownSuppressions.some(x => JSON.stringify(x) === JSON.stringify(entry));
}
/**
@ -283,7 +297,8 @@ class WorldInfoBuffer {
*/
resetExternalEffects() {
WorldInfoBuffer.externalActivations.splice(0, WorldInfoBuffer.externalActivations.length);
WorldInfoBuffer.externalSuppressions.splice(0, WorldInfoBuffer.externalSuppressions.length);
WorldInfoBuffer.stickyActivations.splice(0, WorldInfoBuffer.stickyActivations.length);
WorldInfoBuffer.cooldownSuppressions.splice(0, WorldInfoBuffer.cooldownSuppressions.length);
}
/**
@ -2913,7 +2928,10 @@ async function checkWorldInfo(chat, maxContext, isDryRun) {
}
}
if (buffer.isExternallySuppressed(entry)) {
const isSticky = buffer.isStickyActivated(entry);
const isCooldown = buffer.isOnCooldown(entry);
if (isCooldown && !isSticky) {
console.debug(`WI entry ${entry.uid} suppressed by external suppression`);
continue;
}
@ -2926,7 +2944,7 @@ async function checkWorldInfo(chat, maxContext, isDryRun) {
continue;
}
if (entry.constant || buffer.isExternallyActivated(entry)) {
if (entry.constant || buffer.isExternallyActivated(entry) || isSticky) {
activatedNow.add(entry);
continue;
}
@ -3251,8 +3269,8 @@ function checkTimedEvents(chat, entries) {
}
}
processEntries('sticky', WorldInfoBuffer.externalActivations);
processEntries('cooldown', WorldInfoBuffer.externalSuppressions);
processEntries('sticky', WorldInfoBuffer.stickyActivations);
processEntries('cooldown', WorldInfoBuffer.cooldownSuppressions);
}
/**