Add support for var loading in calc and add special syntax for calc
This commit is contained in:
@@ -1011,6 +1011,11 @@ const matcher = (p1:string,matcherArg:matcherArg) => {
|
|||||||
let main = p1.substring("datetimeformat".length + 1)
|
let main = p1.substring("datetimeformat".length + 1)
|
||||||
return dateTimeFormat(main)
|
return dateTimeFormat(main)
|
||||||
}
|
}
|
||||||
|
if(p1.startsWith('? ')){
|
||||||
|
const substring = p1.substring(2)
|
||||||
|
|
||||||
|
return calcString(substring).toString()
|
||||||
|
}
|
||||||
return null
|
return null
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
return null
|
return null
|
||||||
@@ -1427,6 +1432,9 @@ export function getChatVar(key:string){
|
|||||||
const db = get(DataBase)
|
const db = get(DataBase)
|
||||||
const selectedChar = get(selectedCharID)
|
const selectedChar = get(selectedCharID)
|
||||||
const char = db.characters[selectedChar]
|
const char = db.characters[selectedChar]
|
||||||
|
if(!char){
|
||||||
|
return 'null'
|
||||||
|
}
|
||||||
const chat = char.chats[char.chatPage]
|
const chat = char.chats[char.chatPage]
|
||||||
chat.scriptstate = chat.scriptstate ?? {}
|
chat.scriptstate = chat.scriptstate ?? {}
|
||||||
return (chat.scriptstate['$' + key])?.toString() ?? 'null'
|
return (chat.scriptstate['$' + key])?.toString() ?? 'null'
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
import { getChatVar } from "../parser";
|
||||||
|
|
||||||
function toRPN(expression:string) {
|
function toRPN(expression:string) {
|
||||||
let outputQueue = '';
|
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) {
|
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 expression = toRPN(text);
|
||||||
const evaluated = calculateRPN(expression);
|
const evaluated = calculateRPN(expression);
|
||||||
return evaluated
|
return evaluated
|
||||||
|
|||||||
Reference in New Issue
Block a user