diff --git a/src/functions/condition.js b/src/functions/condition.js index 59a2342..f523d5f 100644 --- a/src/functions/condition.js +++ b/src/functions/condition.js @@ -113,4 +113,17 @@ function checkProp(property, condition) { } } -export { checkCondition }; \ No newline at end of file +function extractMaxTriggers(condition) { + // Assuming only age related talents can be triggered multiple times. + const RE_AGE_CONDITION = /AGE\?\[([0-9\,]+)\]/; + const match_object = RE_AGE_CONDITION.exec(condition); + if (match_object == null) { + // Not age related, single trigger. + return 1; + } + + const age_list = match_object[1].split(","); + return age_list.length; +} + +export { checkCondition, extractMaxTriggers }; \ No newline at end of file diff --git a/src/life.js b/src/life.js index cfde44e..8da596f 100644 --- a/src/life.js +++ b/src/life.js @@ -26,7 +26,7 @@ class Life { } restart(allocation) { - this.#triggerTalents = new Set(); + this.#triggerTalents = {}; this.#property.restart(allocation); this.doTalent(); this.#property.record(); @@ -36,6 +36,10 @@ class Life { return this.#talent.allocationAddition(talents); } + getTalentCurrentTriggerCount(talentId) { + return this.#triggerTalents[talentId] || 0; + } + next() { const {age, event, talent} = this.#property.ageNext(); @@ -52,13 +56,13 @@ class Life { doTalent(talents) { if(talents) this.#property.change(this.#property.TYPES.TLT, talents); talents = this.#property.get(this.#property.TYPES.TLT) - .filter(talentId=>!this.#triggerTalents.has(talentId)); + .filter(talentId => this.getTalentCurrentTriggerCount(talentId) < this.#talent.get(talentId).max_triggers); const contents = []; for(const talentId of talents) { const result = this.#talent.do(talentId, this.#property); if(!result) continue; - this.#triggerTalents.add(talentId); + this.#triggerTalents[talentId] = this.getTalentCurrentTriggerCount(talentId) + 1; const { effect, name, description, grade } = result; contents.push({ type: this.#property.TYPES.TLT, diff --git a/src/talent.js b/src/talent.js index 41cc3d2..3e85c1d 100644 --- a/src/talent.js +++ b/src/talent.js @@ -1,5 +1,5 @@ import { clone } from './functions/util.js'; -import { checkCondition } from './functions/condition.js'; +import { checkCondition, extractMaxTriggers } from './functions/condition.js'; class Talent { constructor() {} @@ -12,6 +12,7 @@ class Talent { const talent = talents[id]; talent.id= Number(id); talent.grade = Number(talent.grade); + talent.max_triggers = extractMaxTriggers(talent.condition); } }