From bf15c7d860447351a5d605abb37cfbdd93cd9b42 Mon Sep 17 00:00:00 2001 From: kwaroran Date: Thu, 25 Apr 2024 04:00:08 +0900 Subject: [PATCH] Add support for var loading in calc and add special syntax for calc --- src/ts/parser.ts | 8 ++++++++ src/ts/process/infunctions.ts | 15 ++++++++++++++- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/src/ts/parser.ts b/src/ts/parser.ts index 050784b7..7128f9a7 100644 --- a/src/ts/parser.ts +++ b/src/ts/parser.ts @@ -1011,6 +1011,11 @@ const matcher = (p1:string,matcherArg:matcherArg) => { let main = p1.substring("datetimeformat".length + 1) return dateTimeFormat(main) } + if(p1.startsWith('? ')){ + const substring = p1.substring(2) + + return calcString(substring).toString() + } return null } catch (error) { return null @@ -1427,6 +1432,9 @@ export function getChatVar(key:string){ const db = get(DataBase) const selectedChar = get(selectedCharID) const char = db.characters[selectedChar] + if(!char){ + return 'null' + } const chat = char.chats[char.chatPage] chat.scriptstate = chat.scriptstate ?? {} return (chat.scriptstate['$' + key])?.toString() ?? 'null' diff --git a/src/ts/process/infunctions.ts b/src/ts/process/infunctions.ts index 5b491368..5841d9ad 100644 --- a/src/ts/process/infunctions.ts +++ b/src/ts/process/infunctions.ts @@ -1,3 +1,4 @@ +import { getChatVar } from "../parser"; function toRPN(expression:string) { let outputQueue = ''; @@ -60,10 +61,22 @@ function calculateRPN(expression:string) { } }); - return stack.pop(); + if(stack.length === 0){ + return 0 + } + + return stack.pop() } function executeRPNCalculation(text:string) { + text = text.replace(/\$([a-zA-Z0-9_]+)/, (_, p1) => { + const v = getChatVar(p1) + const parsed = parseFloat(v) + if(isNaN(parsed)){ + return "0" + } + return parsed.toString() + }) const expression = toRPN(text); const evaluated = calculateRPN(expression); return evaluated