wzice 发表于 2010-2-16 09:22:46

在mush中能否使用lua的table?

lua的特色就是table,不知道能不能在mush中使用lua?
问题是,在mush中lua的变量都只能保存在mush的变量中,如果传递到lua脚本中只能在function中起作用,function结束后,变量就释放了。所以,如何在lua中保存全局变量,这是个关键。lua本身是默认变量为全局变量的,但在mush中却不一样了。该怎么在mush中使用lua的table?高手指教。

lzkd 发表于 2010-2-16 09:33:59

原帖由 wzice 于 2010-2-16 09:22 AM 发表 http://www.pkuxkx.com/forum/images/common/back.gif
lua的特色就是table,不知道能不能在mush中使用lua?
问题是,在mush中lua的变量都只能保存在mush的变量中,如果传递到lua脚本中只能在function中起作用,function结束后,变量就释放了。所以,如何在lua中保存全局变 ...

好象不是这样的吧?lua中变量如果不主动释放,就会一直存在的吧?
至少我写的脚本中,没有考虑过lua变量会消失的问题.我考虑的是尽可能少用几个变量,可以节省资源
呼唤ddid,我还没研究的太透

sauron 发表于 2010-2-16 11:32:04

当然可以了,如果变量不是用来放在触发语句中都尽量放在脚本中。
在主脚本中添加
modpath=string.match(GetInfo(35),"^.*\\").."mods\\"
mappath=string.match(GetInfo(35),"^.*\\").."maps\\"
package.path = string.format("%s?.lua;%s?.lua",modpath,mappath)
这样就可以直接引用主脚本所在目录下的mods和maps目录下的脚本文件
在每个脚本文件起始最好加上下面一句以免脚本内变量污染全局。
module (..., package.seeall)

在后在主脚本中添加
require "xxxx"
就可以加载脚本了

比如下面一个status.lua
--invcap
inv_count=0
hp={
jingxue=0,
max_jingxue=0,
jingxue_per=0,
jingli=0,
max_jingli=0,
jingli_limit=0,
qixue=0,
max_qixue=0,
qixue_per=0,
neili=0,
max_neili=0,
jiali=0,
shen=0,
neili_limit=0,
food=0,
pot=0,
max_pot=0,
water=0,
exps=0,
exps_per=0
}
score={
id="",
name="",
gender=0,
party="",
master="",
masterid="",
mastercity="",
masterroomid=0,
deposit=0,--gold
vip=0,
attack_des=0,
dodge_des=0,
parry_des=0,
str=0,
con=0,
dex=0,
int=0
}
inv={
mudao=0,
fire=0,
weight=0,
things=0,
chantuiyao=0,
huoxuedan=0,
chuanbeiwan=0,
gold=0,
silver=0,
coin=0,
sld_shengzi=0,
wearlist={}
}
function initinv()
inv_count=0
inv.chantuiyao=0
inv.huoxuedan=0
inv.chuanbeiwan=0
inv.gold=0
inv.silver=0
inv.coin=0
inv.sld_shengzi=0
inv.thinglist={}
inv.wearlist={}
EnableGroup("cap_inv")
end
--·气血· 2610 /4792 (100%)
function judgehp()
if hp.qixue_per<80 and inv.chantuiyao>0 then Execute("fu yao;yun qi") end
if hp.jingxue_per<80 and inv.huoxuedan>0 then Execute("fu dan;yun jing") end
if hp.neili<1000 and inv.chuanbeiwan>0 then Execute("fu chuanbei wan") end
if hp.qixue<hp.max_qixue*3/4 then Execute("yun qi") end
if hp.jingli<hp.max_jingli/2 then Execute("yun jingli") end
if hp.jingxue<hp.max_jingxue/2 then Execute("yun jing") end
end

这样你可以在status脚本外任何地方通过
status.hp.xxx来引用(status内部只需要hp.xxx)
但是如果在声明hp的时候前面加上local则hp表仅仅在status内部可见,不是全局变量,,function也是的。
只要变量不是在一个代码段(比如function end..repeat end 等等)中声明的将一直保存其值,知道你重新载入脚本。

[ 本帖最后由 sauron 于 2010-2-16 11:35 AM 编辑 ]

wzice 发表于 2010-2-17 16:35:08

modpath=string.match(GetInfo(35),"^.*\\").."mods\\"
mappath=string.match(GetInfo(35),"^.*\\").."maps\\"
package.path = string.format("%s?.lua;%s?.lua",modpath,mappath)
sauron老大:
这三句话是什么意思?我在Scite里面试了下,调试不能通过。Getinfo(35)是什么意思?

sauron 发表于 2010-2-17 19:05:13

GetInfo是mush内置函数用来取得一系列环境参数
35就对应取得脚本所在目录
你在scite下是调试不过的,但是在mush就没问题。

wzice 发表于 2010-2-17 20:09:03

我改了,可以了。
谢谢sauron老大。
页: [1]
查看完整版本: 在mush中能否使用lua的table?