diff --git a/src/ts/process/infunctions.ts b/src/ts/process/infunctions.ts index 4c88d446..59ddd7a5 100644 --- a/src/ts/process/infunctions.ts +++ b/src/ts/process/infunctions.ts @@ -36,7 +36,7 @@ function toRPN(expression:string) { } function calculateRPN(expression:string) { - let stack = []; + let stack:number[] = []; expression.split(' ').forEach(token => { if (parseFloat(token) || token === '0') { @@ -54,30 +54,8 @@ function calculateRPN(expression:string) { return stack.pop(); } -function parseAndExecuteFunctions(s: string): string { - const functionRegex = /\$(\w+)\((.*?)\)/g; - let match; - while ((match = functionRegex.exec(s)) !== null) { - let [fullMatch, funcName, args] = match; - - let result = ''; - switch (funcName) { - case 'calc': - result = calc(parseAndExecuteFunctions(args)); - break; - default: - break; - } - - s = s.replace(fullMatch, result.toString()); - functionRegex.lastIndex = 0; // Reset the regex - } - - return s; -} - -function calc(args:string) { +export function calcString(args:string) { const expression = toRPN(args); const evaluated = calculateRPN(expression); return evaluated diff --git a/src/ts/process/scripts.ts b/src/ts/process/scripts.ts index 10f90547..f5a8a13e 100644 --- a/src/ts/process/scripts.ts +++ b/src/ts/process/scripts.ts @@ -5,6 +5,7 @@ import { downloadFile } from "../storage/globalApi"; import { alertError, alertNormal } from "../alert"; import { language } from "src/lang"; import { findCharacterbyId, selectSingleFile } from "../util"; +import { calcString } from "./infunctions"; const dreg = /{{data}}/g const randomness = /\|\|\|/g @@ -110,6 +111,7 @@ export function processScriptFull(char:character|groupChat, data:string, mode:Sc } } else{ + let mOut = outScript.replace(dreg, "$&") if(chatID !== -1){ const selchar = db.characters[get(selectedCharID)] const chat = selchar.chats[selchar.chatPage] @@ -134,6 +136,10 @@ export function processScriptFull(char:character|groupChat, data:string, mode:Sc } return selchar.firstMsgIndex === -1 ? selchar.firstMessage : selchar.alternateGreetings[selchar.firstMsgIndex] } + if(p1.startsWith('calc')){ + const v = p1.split("::")[1] + return calcString(v).toString() + } return v }) } @@ -141,7 +147,7 @@ export function processScriptFull(char:character|groupChat, data:string, mode:Sc const list = data.split('|||') data = list[Math.floor(Math.random()*list.length)]; } - data = data.replace(reg, outScript.replace(dreg, "$&")) + data = data.replace(reg, mOut) } } }