【tintin++】请问tintin++如何处理大数据
想做个npc,item的数据table。整理了一个txt。想用variable读入的。可我试了一下,200多条记录可以导入,到300条导入时提示#ERROR: #READ {npc_list.tin} - BUFFER OVERFLOW AT COMMAND: #variable {npc_list}.请问tintin++的前辈们是怎么处理这些数据的?
北大侠客行MUD,中国最好的MUD 求大神路过。。。 没碰过tintin++,纯猜测。
错误信息翻译过来是“命令缓冲区溢出”,应该是一条命令的长度有限制,试试用字符串追加的方式给变量赋值,从文本文件里读一行,给变量尾部追加一段。 回复 1# achates
能把你读数据的代码贴一下么?俺现在用到大数据都是有固定值的,所以可以直接把赋值语句写进.tin文件,还没遇到你说的这种情况。 数据我是从zmud那边拿来用的,最初想用variable来读入,搞了一个npc_list.tin, 内部格式如下:
#class {npc_list} open
#variable npc_list {
{「平通镖局」镖头}{fly dl;s;w;s;s;s;s;e;ne;n;nu;kill biao tou}
{镖头}{fly dl;s;w;s;s;s;s;e;ne;n;nu;kill biao tou}
{阿碧}{fly jx;n;nw;w;#2 nw;sw;nw;sw;se;s;qu mr;#alias nextAct {s;e;ne;e;kill a bi}}
{阿凡提}{#variable {kill_name} {巴依};cxy;w;#2 nw;e;kill bayi;#alias nextAct {e;kill afanti}}
{阿拉木罕}{fly xx;su;s;ed;#2 nw;kill alamuhan}
{阿庆嫂}{fly yz;w;#3 s;w;kill aqing sao}
{阿朱}{fly jx;n;nw;w;#2 nw;sw;nw;sw;se;s;qu mr;#alias nextAct {s;#2 w;nw;kill a zhu}}
.....
};
#class {npc_list} close
大概有近800个npc的信息。这种方式好像lua里用table读入没问题。但tintin里直接报buffer溢出。
我改过,大概200个npc的话能读入,没问题。300个就不行。
后来去tintin论坛上看到版主建议的itemlist方式,也就是每个npc单独用variable读入,我改了npc_list.tin的内容,如下:
#class {npc_list} open
#variable npc_list[「平通镖局」镖头] {fly dl;s;w;s;s;s;s;e;ne;n;nu;kill biao tou};
#variable npc_list[镖头] {fly dl;s;w;s;s;s;s;e;ne;n;nu;kill biao tou};
#variable npc_list[阿碧] {fly jx;n;nw;w;#2 nw;sw;nw;sw;se;s;qu mr;#alias nextAct {s;e;ne;e;kill a bi}};
#variable npc_list[阿凡提] {#variable {kill_name} {巴依};cxy;w;#2 nw;e;kill bayi;#alias nextAct {e;kill afanti}};
#variable npc_list[阿拉木罕] {fly xx;su;s;ed;#2 nw;kill alamuhan};
#variable npc_list[阿庆嫂] {fly yz;w;#3 s;w;kill aqing sao};
#variable npc_list[阿朱] {fly jx;n;nw;w;#2 nw;sw;nw;sw;se;s;qu mr;#alias nextAct {s;#2 w;nw;kill a zhu}};
.......
#class {npc_list} close
改成这样模式,读入没问题,但一访问这个变量npc_list,整个tintin就crash退出了。
我现在只找到一个办法,用#script {result_path} {grep $npc npc_list.tin}来得到所查npc的一行文字,然后再解析出来。不知道有没有更好的解决方案? tt崩溃的一个可能的原因是npc_list变量的内容过长了,虽然并没有查到tt的变量数据长度限值,但刚才测试了一下,过多的变量内容确实会引发tt的崩溃。你可以试试用第二种方式只读入100个或更少的npc信息,tt是否会crash。
因为即使是第二种方式,npc_list仍然只是一个变量,只不过变量的值变成{镖头} {fly dl;s;w;s;s;s;s;e;ne;n;nu;kill biao tou} {阿碧} {fly jx;n;nw;w;#2 nw;sw;nw;sw;se;s;qu mr;#alias nextAct {s;e;ne;e;kill a bi}}……这样的格式。
这样的话,就不能用npc_list[名字]这样的方式来保存信息,只能把信息分散到不同的变量中,比如你可以试试#var npc_list镖头 {....}这样的方式,这样有几条信息就需要生成几个变量。 生成几个变量好像有点烦琐。
再向前辈们问几个问题:
1)function是不是指定回传变量是result?而tt中变量又是全局的,那是不是意味在函数A中不能调用其他函数B(因为A中有result变量,作为函数B回传结果也是放在result里的)。
2)现在使用script的方法,问题蛮多。我在cygwin下运行正常,放到linux服务器上就跑不了。原因在于linux上需要调用screen来做后台运行,而linux缺省的locale是utf-8的,mud需要gbk的编码,所以screen设置为utf-8转gbk的。但在这样的配置下,grep $npc npc_list.tin,不管npc_list.tin是utf-8编码的还是gbk编码的,grep都检索不到结果。狂郁闷。有人做过这个设置嘛?还是需要npc_list 加载到内存上呀。tt啥时能解决这个问题。 生成多个变量和你用的第二种方法其实差不多,只不过一个把npc名字作为下标,一个直接放到变量名里,引用的时候也不麻烦。
第2个问题不清楚,script俺没用过,@redcoat。
关于function,虽然由统一 的result变量保存函数返回值,但只要在函数中避免多次对result进行计算,只是将它作为输出的结果,应该不影响函数的嵌套使用。
比如:
#function double {#math result {%1*2}};
#function triple {#math result {%1*3}};
#function sixtimes {#var result @triple{@double{%1}}};
这种简单的函数就可以嵌套。 多谢alucar的答复。昨天我试了很久的编码设置,还是搞不定。最终采用你的方法,把npc名字作为变量,现在可以运行了。还是期待tt能像lua那样使用大table。 回复 9# alucar
tt++和zmud长得好象的样子
页:
[1]
2