feat: luascript getGlobal(Chat)Var support
setGlobal(Chat)Var needs to be studied too.
This commit is contained in:
@@ -1278,7 +1278,7 @@ function basicMatcher (p1:string,matcherArg:matcherArg,vars:{[key:string]:string
|
|||||||
}
|
}
|
||||||
case 'getglobalvar':{
|
case 'getglobalvar':{
|
||||||
return getGlobalChatVar(v)
|
return getGlobalChatVar(v)
|
||||||
}
|
} // setglobalvar cbs support?
|
||||||
case 'button':{
|
case 'button':{
|
||||||
return `<button class="button-default" risu-trigger="${arra[2]}">${arra[1]}</button>`
|
return `<button class="button-default" risu-trigger="${arra[2]}">${arra[1]}</button>`
|
||||||
}
|
}
|
||||||
@@ -2235,6 +2235,10 @@ export function getGlobalChatVar(key:string){
|
|||||||
return DBState.db.globalChatVariables[key] ?? 'null'
|
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){
|
export function setChatVar(key:string, value:string){
|
||||||
const selectedChar = get(selectedCharID)
|
const selectedChar = get(selectedCharID)
|
||||||
if(!DBState.db.characters[selectedChar].chats[DBState.db.characters[selectedChar].chatPage].scriptstate){
|
if(!DBState.db.characters[selectedChar].chats[DBState.db.characters[selectedChar].chatPage].scriptstate){
|
||||||
|
|||||||
@@ -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 { LuaEngine, LuaFactory } from "wasmoon";
|
||||||
import { getCurrentCharacter, getCurrentChat, getDatabase, setCurrentChat, setDatabase, type Chat, type character, type groupChat } from "../storage/database.svelte";
|
import { getCurrentCharacter, getCurrentChat, getDatabase, setCurrentChat, setDatabase, type Chat, type character, type groupChat } from "../storage/database.svelte";
|
||||||
import { get } from "svelte/store";
|
import { get } from "svelte/store";
|
||||||
@@ -25,7 +25,8 @@ interface LuaEngineState {
|
|||||||
mutex: Mutex;
|
mutex: Mutex;
|
||||||
chat: Chat;
|
chat: Chat;
|
||||||
setVar: (key:string, value:string) => void,
|
setVar: (key:string, value:string) => void,
|
||||||
getVar: (key:string) => string
|
getVar: (key:string) => string,
|
||||||
|
getGlobalVar: (key:string) => any,
|
||||||
}
|
}
|
||||||
|
|
||||||
let LuaEngines = new Map<string, LuaEngineState>()
|
let LuaEngines = new Map<string, LuaEngineState>()
|
||||||
@@ -35,6 +36,7 @@ export async function runLua(code:string, arg:{
|
|||||||
chat?:Chat
|
chat?:Chat
|
||||||
setVar?: (key:string, value:string) => void,
|
setVar?: (key:string, value:string) => void,
|
||||||
getVar?: (key:string) => string,
|
getVar?: (key:string) => string,
|
||||||
|
getGlobalVar?: (key:string) => any,
|
||||||
lowLevelAccess?: boolean,
|
lowLevelAccess?: boolean,
|
||||||
mode?: string,
|
mode?: string,
|
||||||
data?: any
|
data?: any
|
||||||
@@ -42,6 +44,7 @@ export async function runLua(code:string, arg:{
|
|||||||
const char = arg.char ?? getCurrentCharacter()
|
const char = arg.char ?? getCurrentCharacter()
|
||||||
const setVar = arg.setVar ?? setChatVar
|
const setVar = arg.setVar ?? setChatVar
|
||||||
const getVar = arg.getVar ?? getChatVar
|
const getVar = arg.getVar ?? getChatVar
|
||||||
|
const getGlobalVar = arg.getGlobalVar ?? getGlobalChatVar
|
||||||
const mode = arg.mode ?? 'manual'
|
const mode = arg.mode ?? 'manual'
|
||||||
const data = arg.data ?? {}
|
const data = arg.data ?? {}
|
||||||
let chat = arg.chat ?? getCurrentChat()
|
let chat = arg.chat ?? getCurrentChat()
|
||||||
@@ -60,7 +63,8 @@ export async function runLua(code:string, arg:{
|
|||||||
mutex: new Mutex(),
|
mutex: new Mutex(),
|
||||||
chat,
|
chat,
|
||||||
setVar,
|
setVar,
|
||||||
getVar
|
getVar,
|
||||||
|
getGlobalVar
|
||||||
}
|
}
|
||||||
LuaEngines.set(mode, luaEngineState)
|
LuaEngines.set(mode, luaEngineState)
|
||||||
wasEmpty = true
|
wasEmpty = true
|
||||||
@@ -68,6 +72,7 @@ export async function runLua(code:string, arg:{
|
|||||||
luaEngineState.chat = chat
|
luaEngineState.chat = chat
|
||||||
luaEngineState.setVar = setVar
|
luaEngineState.setVar = setVar
|
||||||
luaEngineState.getVar = getVar
|
luaEngineState.getVar = getVar
|
||||||
|
luaEngineState.getGlobalVar = getGlobalVar
|
||||||
}
|
}
|
||||||
return await luaEngineState.mutex.runExclusive(async () => {
|
return await luaEngineState.mutex.runExclusive(async () => {
|
||||||
if (wasEmpty || code !== luaEngineState.code) {
|
if (wasEmpty || code !== luaEngineState.code) {
|
||||||
@@ -87,6 +92,12 @@ export async function runLua(code:string, arg:{
|
|||||||
}
|
}
|
||||||
return luaEngineState.getVar(key)
|
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) => {
|
luaEngine.global.set('stopChat', (id:string) => {
|
||||||
if(!LuaSafeIds.has(id)){
|
if(!LuaSafeIds.has(id)){
|
||||||
return
|
return
|
||||||
|
|||||||
Reference in New Issue
Block a user