luasubを簡単に定義する。

luasub.lua

-- luasub.lua
do
	local mt = {}

	-- 呼び出された時の処理
	mt.__index = function(t, k)
		return _G["NSCOM_"..k]
	end

	-- 代入時の処理
	mt.__newindex = function(t, k, v)
		local com_name = "NSCOM_"..k
		if _G[com_name] then
			NSOkBox(k.."を二度定義しようとしました。", "luasub")
			NSEnd()
		else
			NSExec("_luasub "..k)
			_G[com_name] = v
		end
	end

	-- 定義
	luasub = setmetatable({}, mt)
end

使い方

-- "sample"のポップアップを出すだけの命令、sampleを定義する。
luasub.sample = function() NSOkBox("sample", "sample") end

luasubの後に、ドットと命令名を付け加え、それにNScripter側で命令が実行された際にかわりに実行される関数(function)を代入すると、後はプログラムが勝手にやってくれます。

解説

通常、luasubのシステムはこのように説明されます。

最初の定義

define節でluasubで命令名を定義。

luasub sample

lua側で、実行される実体を定義。

function NSCOM_sample() ... end

両方に記述しなければならない。

Lua側だけでなんとかなる。
NSExec("luasub sample")
function NSCOM_sample() ... end

これなら、Lua側で命令を増やすも減らすも自由自在。しかし、同じ命令名を二度も書きたくない。
つうか、それでミススペルしてつまらないところでひっかかってイラっとしたことがある。

命令名を一回しか書きたくない。

こうなった。

luasub.sample = function() ... end

なんてシンプル。