|
楼主 |
发表于 2017-6-18 00:06:32
|
显示全部楼层
本帖最后由 creat 于 2018-1-10 02:06 AM 编辑
下面是一个实例:实现了从一个world或者插件向其他world赋值。
要达到这个目标首先需要做得是把整个赋值语句转化为字符串形式用来进行传递
下面看一个把标准赋值语句转化为字符串的例子
- function pv2str(name,str)
- if type (str)~="function"
- then str=name .. "='" .. str .. "'"
- else str=name .."试图转换一个函数"
- error(str)
- end
- return str
- end
复制代码
把一个表转化为字符串的函数(会舍弃表内的所有函数)
- function tab2str(tname,t,str)
- if type(t)=="table" then
- str=str or ""
- if str~="" then str= str .. "['" .. tname .."']={"
- else str= str .. tname .."={" end
- for i,v in pairs (t)
- do if type(v)=="table"
- then --str=str .. i .. "="
- str=tab2str(i,v,str)
- elseif type(i)=="number"
- then str=str .. "[" .. i .. "]='" .. v .. "';"
- elseif type (i)=="string"
- then str=str .. "['" .. i .. "']='" .. v .. "';"
- end
- end
- str=str .. "};"
- return str
- else
- return pv2str(tname,t)
- end
- end
复制代码
这个过程很简单name是变量名,str是字符串或者数字。如果试图转化一个函数的时候会出错。
转化完毕就需要发送给目标world
- function trans2word(str,k)
- local k=k or GetWorldID()
- str=GetInfo(GetWorldById(k),36) .. str
- Execute (GetWorldById(k),str)
- end
复制代码
str用于接受一个转化为字符串的赋值语句,k用来接受目标world的ID值,如果没有指定目标world,则默认是发送到当前world
GetInfo(GetWorldById(k),36)的作用是获取指定world的脚本标识符,用于执行脚本命令。
再设置一个用于执行的别名
-
- script="pv2wv"
- match="^pv2wv\s*(.+,.+)$
- enabled="y"
- group="transV"
- regexp="y"
- sequence="100"
- >
-
复制代码
别名使用的脚本:
- function pv2wv(n,l,w)
- local w=w[1]
- local _,_,name=string.find(w,"(.-),")
- local _,_,var=string.find(w,",(.-),")
- local _,_,wid=string.find(w,".+,(.+)")
- if not var then var,wid=wid end
- var=_G[var]
- if not var then return print "var是空值" end
- local str=tab2str(name,var)
- trans2word(str,wid)
- str=name .. " trans ok:"
- print (str)
- end
复制代码 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|