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){