function parseCondition(condition) { const conditions = []; const length = condition.length; const stack = []; stack.unshift(conditions); let cursor = 0; const catchString = i => { const str = condition.substring(cursor, i).trim(); cursor = i; if(str) stack[0].push(str); }; for(let i=0; i<\!\?=]/); const prop = condition.substring(0,i); const symbol = condition.substring(i, i+=(condition[i+1]=='='?2:1)); const d = condition.substring(i, length); const propData = property.get(prop); const conditionData = d[0]=='['? JSON.parse(d): Number(d); switch(symbol) { case '>': return propData > conditionData; case '<': return propData < conditionData; case '>=': return propData >= conditionData; case '<=': return propData <= conditionData; case '=': if(Array.isArray(propData)) return propData.includes(conditionData); return propData == conditionData; case '!=': if(Array.isArray(propData)) return !propData.includes(conditionData); return propData != conditionData; case '?': if(Array.isArray(propData)) { for(const p of propData) if(conditionData.includes(p)) return true; return false; } return conditionData.includes(propData); case '!': if(Array.isArray(propData)) { for(const p of propData) if(conditionData.includes(p)) return false; return true; } return !conditionData.includes(propData); default: return false; } } export 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; }