diff --git a/src/engine/rules/alive.ts b/src/engine/rules/alive.ts index 67e950f..e2eb9a3 100644 --- a/src/engine/rules/alive.ts +++ b/src/engine/rules/alive.ts @@ -9,11 +9,13 @@ export default function alive(rule: Rule) { label: rule.label, trigger: [topics.alive, ...rule.trigger], given: rule.given, - when: (trigger, given) => { + when: (t, given) => { + const trigger = [...t]; const aliveValue = trigger.shift(); return aliveValue && rule.when(trigger, given); }, - then: (trigger, given) => { + then: (t, given) => { + const trigger = [...t]; trigger.shift(); return rule.then(trigger, given); }, diff --git a/src/engine/rules/betweenSeconds.ts b/src/engine/rules/betweenSeconds.ts index c0336e1..885d1cc 100644 --- a/src/engine/rules/betweenSeconds.ts +++ b/src/engine/rules/betweenSeconds.ts @@ -16,7 +16,8 @@ export default function betweenSeconds( label: inGameRule.label, trigger: [topics.time, ...inGameRule.trigger], given: inGameRule.given, - when: (trigger, given) => { + when: (t, given) => { + const trigger = [...t]; const time = trigger.shift(); if (min && time < min) { return false; @@ -26,7 +27,8 @@ export default function betweenSeconds( } return inGameRule.when(trigger, given); }, - then: (trigger, given) => { + then: (t, given) => { + const trigger = [...t]; trigger.shift(); return inGameRule.then(trigger, given); }, diff --git a/src/engine/rules/conditionalEveryIntervalSeconds.ts b/src/engine/rules/conditionalEveryIntervalSeconds.ts index b4b631b..26a519b 100644 --- a/src/engine/rules/conditionalEveryIntervalSeconds.ts +++ b/src/engine/rules/conditionalEveryIntervalSeconds.ts @@ -18,7 +18,9 @@ export default function conditionalEveryIntervalSeconds( label: rule.label, trigger: [topics.time, ...rule.trigger], given: [reminderTopic, ...rule.given], - when: (trigger, given) => { + when: (t, g) => { + const trigger = [...t]; + const given = [...g]; const time = trigger.shift(); const lastRemindedTime = given.shift(); if (lastRemindedTime === undefined) { @@ -31,7 +33,10 @@ export default function conditionalEveryIntervalSeconds( return isReminderTime; } }, - then: (trigger, given) => { + then: (t, g) => { + const trigger = [...t]; + const given = [...g]; + const time = trigger.shift(); const lastRemindedTime = given.shift(); diff --git a/src/engine/rules/configurable.ts b/src/engine/rules/configurable.ts index f2a6c76..77aa483 100644 --- a/src/engine/rules/configurable.ts +++ b/src/engine/rules/configurable.ts @@ -22,14 +22,16 @@ export default function configurable(configTopicString: string, rule: Rule) { label: rule.label, trigger: rule.trigger, given: [configTopic, ...rule.given], - when: (trigger, given) => { + when: (trigger, g) => { + const given = [...g]; const config = given.shift(); if (config === EffectConfig.NONE) { return false; } return rule.when(trigger, given); }, - then: (trigger, given) => { + then: (trigger, g) => { + const given = [...g]; const config: EffectConfig = given.shift(); const effect = configToEffectTopic[config]; if (effect) { diff --git a/src/engine/rules/everyIntervalSeconds.ts b/src/engine/rules/everyIntervalSeconds.ts index 4f8d19d..aac7785 100644 --- a/src/engine/rules/everyIntervalSeconds.ts +++ b/src/engine/rules/everyIntervalSeconds.ts @@ -20,7 +20,8 @@ export default function everyIntervalSeconds( label: rule.label, trigger: [topics.time, ...rule.trigger], given: rule.given, - when: (trigger, given) => { + when: (t, given) => { + const trigger = [...t]; const time = trigger.shift(); return ( // If time is a multiple of interval @@ -28,7 +29,8 @@ export default function everyIntervalSeconds( rule.when(trigger, given) ); }, - then: (trigger, given) => { + then: (t, given) => { + const trigger = [...t]; trigger.shift(); return rule.thenArray(trigger, given); }, diff --git a/src/engine/rules/inGame.ts b/src/engine/rules/inGame.ts index e972711..5fbba7e 100644 --- a/src/engine/rules/inGame.ts +++ b/src/engine/rules/inGame.ts @@ -9,13 +9,15 @@ export default function inGame(rule: Rule) { label: rule.label, trigger: rule.trigger, given: [topics.inGame, topics.time, ...rule.given], - when: (trigger, given) => { + when: (trigger, g) => { + const given = [...g]; const inGame = given.shift() || false; const time = given.shift(); const timeCheck = time !== undefined && time > 0; return rule.when(trigger, given) && inGame && timeCheck; }, - then: (trigger, given) => { + then: (trigger, g) => { + const given = [...g]; given.shift(); given.shift(); return rule.then(trigger, given); diff --git a/src/engine/rules/inRegularGame.ts b/src/engine/rules/inRegularGame.ts index d986b42..4b134f1 100644 --- a/src/engine/rules/inRegularGame.ts +++ b/src/engine/rules/inRegularGame.ts @@ -11,9 +11,12 @@ export default function inRegularGame(rule: Rule) { label: rule.label, trigger: rule.trigger, given: [topics.customGameName, ...rule.given], - when: (trigger, given) => - given.shift()?.length === 0 && rule.when(trigger, given), - then: (trigger, given) => { + when: (trigger, g) => { + const given = [...g]; + return given.shift()?.length === 0 && rule.when(trigger, given); + }, + then: (trigger, g) => { + const given = [...g]; given.shift(); return rule.then(trigger, given); }, diff --git a/src/engine/rules/isLiveGame.ts b/src/engine/rules/isLiveGame.ts index 9781e5b..396b4c6 100644 --- a/src/engine/rules/isLiveGame.ts +++ b/src/engine/rules/isLiveGame.ts @@ -9,8 +9,12 @@ export default function isLiveGame(rule: Rule) { label: rule.label, trigger: [topics.gsiEventsFromLiveGame, ...rule.trigger], given: rule.given, - when: (trigger, given) => trigger.shift() && rule.when(trigger, given), - then: (trigger, given) => { + when: (t, given) => { + const trigger = [...t]; + return trigger.shift() && rule.when(trigger, given); + }, + then: (t, given) => { + const trigger = [...t]; trigger.shift(); return rule.then(trigger, given); },