From 5f98dc017bed08176a2156178a24c3ffabdc3bb2 Mon Sep 17 00:00:00 2001 From: Redo Date: Mon, 6 Oct 2025 00:13:00 -0500 Subject: [PATCH] fix named ts object method calling --- BlockLua.dll | Bin 375335 -> 375335 bytes readme.md | 1 + src/util/libbl-support.cs | 4 ++-- src/util/libbl.lua | 15 ++++++++++----- 4 files changed, 13 insertions(+), 7 deletions(-) diff --git a/BlockLua.dll b/BlockLua.dll index 6d9a7bfe89d91ace1eb04c9a7621caf2563289a8..58d6e4573dc1ffa06b4c883b730660ac21e85ae3 100644 GIT binary patch delta 6743 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 delta 6726 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 Gg#0f{Kh>=O diff --git a/readme.md b/readme.md index b06faf4..1e5e5c2 100644 --- a/readme.md +++ b/readme.md @@ -25,6 +25,7 @@ Lua scripting for Blockland `bl.varName` - Read a TorqueScript global variable `bl['varName']` - Read a TorqueScript global variable (i.e. with special characters in the name, or from an array) `bl.set('varName', value)` - Write a TorqueScript global variable +`bl['namespaceName::funcName'](args)` - Call a namespaced TorqueScript function ### Accessing Torque Objects from Lua `bl.objectName` - Access a Torque object by name diff --git a/src/util/libbl-support.cs b/src/util/libbl-support.cs index f2be6e6..c4032d0 100644 --- a/src/util/libbl-support.cs +++ b/src/util/libbl-support.cs @@ -1,7 +1,7 @@ // Private - Utilities used by libbl from the Lua side -package _bllua_smartEval { +package smartEval { // Allow prepending ' to console commands to eval in lua instead of TS // Also wraps TS lines with echo(...); if they don't end in ; or } function ConsoleEntry::eval() { @@ -28,7 +28,7 @@ package _bllua_smartEval { } } }; -activatePackage(_bllua_smartEval); +activatePackage(smartEval); package _bllua_objectDeletionHook { // Hook object deletion to clean up its lua data diff --git a/src/util/libbl.lua b/src/util/libbl.lua index 34c6357..efd5889 100644 --- a/src/util/libbl.lua +++ b/src/util/libbl.lua @@ -303,7 +303,10 @@ local tsObjectMeta = { for inh in objectInheritedMetas(rawget(t,'_tsClassName')) do if inh[name] then return inh[name] end end - if tsIsFunctionNs(rawget(t,'_tsNamespace'), name) then + if + tsIsFunctionNs(rawget(t,'_tsNamespace'), name) or + tsIsFunctionNs(rawget(t,'_tsName'), name) + then return function(t, ...) local args = {...} local argsS = arglistToTs(args) @@ -921,10 +924,12 @@ end -- bl.new and bl.datablock local function createTsObj(keyword, class, name, inherit, props) local propsT = {} - for k,v in pairs(props) do - if not isValidFuncName(k) then - error('bl.new/bl.datablock: invalid property name \''..k..'\'') end - table.insert(propsT, k..'="'..valToTs(v)..'";') + if props then + for k,v in pairs(props) do + if not isValidFuncName(k) then + error('bl.new/bl.datablock: invalid property name \''..k..'\'') end + table.insert(propsT, k..'="'..valToTs(v)..'";') + end end local objS = _bllua_ts.eval(