From 31a480643b4ec26c340f3e414e930581e1cacc50 Mon Sep 17 00:00:00 2001 From: Inha Hwang <73149145+HyperBlaze456@users.noreply.github.com> Date: Tue, 8 Apr 2025 06:01:12 +0900 Subject: [PATCH 1/2] feat: luascript getGlobal(Chat)Var support setGlobal(Chat)Var needs to be studied too. --- src/ts/parser.svelte.ts | 6 +++++- src/ts/process/lua.ts | 17 ++++++++++++++--- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/src/ts/parser.svelte.ts b/src/ts/parser.svelte.ts index d831d517..0c5b5c4e 100644 --- a/src/ts/parser.svelte.ts +++ b/src/ts/parser.svelte.ts @@ -1278,7 +1278,7 @@ function basicMatcher (p1:string,matcherArg:matcherArg,vars:{[key:string]:string } case 'getglobalvar':{ return getGlobalChatVar(v) - } + } // setglobalvar cbs support? case 'button':{ return `` } @@ -2235,6 +2235,10 @@ export function getGlobalChatVar(key:string){ return DBState.db.globalChatVariables[key] ?? 'null' } +export function setGlobalChatVar(key:string, value:bool){ // TODO: check globalChatVariables possible type + DBState.db.globalChatVariables[key] = value +} + export function setChatVar(key:string, value:string){ const selectedChar = get(selectedCharID) if(!DBState.db.characters[selectedChar].chats[DBState.db.characters[selectedChar].chatPage].scriptstate){ diff --git a/src/ts/process/lua.ts b/src/ts/process/lua.ts index e44fa188..bfe71cda 100644 --- a/src/ts/process/lua.ts +++ b/src/ts/process/lua.ts @@ -1,4 +1,4 @@ -import { getChatVar, hasher, setChatVar, type simpleCharacterArgument } from "../parser.svelte"; +import { getChatVar, hasher, setChatVar, getGlobalChatVar, type simpleCharacterArgument } from "../parser.svelte"; import { LuaEngine, LuaFactory } from "wasmoon"; import { getCurrentCharacter, getCurrentChat, getDatabase, setCurrentChat, setDatabase, type Chat, type character, type groupChat } from "../storage/database.svelte"; import { get } from "svelte/store"; @@ -25,7 +25,8 @@ interface LuaEngineState { mutex: Mutex; chat: Chat; setVar: (key:string, value:string) => void, - getVar: (key:string) => string + getVar: (key:string) => string, + getGlobalVar: (key:string) => any, } let LuaEngines = new Map() @@ -35,6 +36,7 @@ export async function runLua(code:string, arg:{ chat?:Chat setVar?: (key:string, value:string) => void, getVar?: (key:string) => string, + getGlobalVar?: (key:string) => any, lowLevelAccess?: boolean, mode?: string, data?: any @@ -42,6 +44,7 @@ export async function runLua(code:string, arg:{ const char = arg.char ?? getCurrentCharacter() const setVar = arg.setVar ?? setChatVar const getVar = arg.getVar ?? getChatVar + const getGlobalVar = arg.getGlobalVar ?? getGlobalChatVar const mode = arg.mode ?? 'manual' const data = arg.data ?? {} let chat = arg.chat ?? getCurrentChat() @@ -60,7 +63,8 @@ export async function runLua(code:string, arg:{ mutex: new Mutex(), chat, setVar, - getVar + getVar, + getGlobalVar } LuaEngines.set(mode, luaEngineState) wasEmpty = true @@ -68,6 +72,7 @@ export async function runLua(code:string, arg:{ luaEngineState.chat = chat luaEngineState.setVar = setVar luaEngineState.getVar = getVar + luaEngineState.getGlobalVar = getGlobalVar } return await luaEngineState.mutex.runExclusive(async () => { if (wasEmpty || code !== luaEngineState.code) { @@ -87,6 +92,12 @@ export async function runLua(code:string, arg:{ } return luaEngineState.getVar(key) }) + luaEngine.global.set('getGlobalVar', (id:string, key:string) => { + if(!LuaSafeIds.has(id) && !LuaEditDisplayIds.has(id)){ + return + } + return luaEngineState.getGlobalVar(key) + }) luaEngine.global.set('stopChat', (id:string) => { if(!LuaSafeIds.has(id)){ return From c21dd9e7559dd582f0b765b55cf9c473a2096f6a Mon Sep 17 00:00:00 2001 From: Inha Hwang <73149145+HyperBlaze456@users.noreply.github.com> Date: Tue, 8 Apr 2025 06:02:07 +0900 Subject: [PATCH 2/2] fix: wrong type --- src/ts/parser.svelte.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ts/parser.svelte.ts b/src/ts/parser.svelte.ts index 0c5b5c4e..50aa74bd 100644 --- a/src/ts/parser.svelte.ts +++ b/src/ts/parser.svelte.ts @@ -2235,8 +2235,8 @@ export function getGlobalChatVar(key:string){ return DBState.db.globalChatVariables[key] ?? 'null' } -export function setGlobalChatVar(key:string, value:bool){ // TODO: check globalChatVariables possible type - DBState.db.globalChatVariables[key] = value +export function setGlobalChatVar(key:string, value:string){ + DBState.db.globalChatVariables[key] = value // String to String Map(dictionary) } export function setChatVar(key:string, value:string){