北大侠客行MUD论坛

 找回密码
 注册
搜索
热搜: 新手 wiki 升级
查看: 6950|回复: 5

在mush中能否使用lua的table?

[复制链接]
发表于 2010-2-16 09:22:46 | 显示全部楼层 |阅读模式
lua的特色就是table,不知道能不能在mush中使用lua?
问题是,在mush中lua的变量都只能保存在mush的变量中,如果传递到lua脚本中只能在function中起作用,function结束后,变量就释放了。所以,如何在lua中保存全局变量,这是个关键。lua本身是默认变量为全局变量的,但在mush中却不一样了。该怎么在mush中使用lua的table?高手指教。
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2010-2-16 09:33:59 | 显示全部楼层
原帖由 wzice 于 2010-2-16 09:22 AM 发表
lua的特色就是table,不知道能不能在mush中使用lua?
问题是,在mush中lua的变量都只能保存在mush的变量中,如果传递到lua脚本中只能在function中起作用,function结束后,变量就释放了。所以,如何在lua中保存全局变 ...


好象不是这样的吧?lua中变量如果不主动释放,就会一直存在的吧?
至少我写的脚本中,没有考虑过lua变量会消失的问题.我考虑的是尽可能少用几个变量,可以节省资源
呼唤ddid,我还没研究的太透
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 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 if hp.jingli if hp.jingxue end

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

[ 本帖最后由 sauron 于 2010-2-16 11:35 AM 编辑 ]
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 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)是什么意思?
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2010-2-17 19:05:13 | 显示全部楼层
GetInfo是mush内置函数用来取得一系列环境参数
35就对应取得脚本所在目录
你在scite下是调试不过的,但是在mush就没问题。
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 2010-2-17 20:09:03 | 显示全部楼层
我改了,可以了。
谢谢sauron老大。
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|北大侠客行MUD ( 京ICP备16065414号-1 )

GMT+8, 2024-11-24 05:43 PM , Processed in 0.010652 second(s), 14 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表