mookt 发表于 2013-11-25 19:41:38

怎么在462中实现555中%ismember()的功能?

首先不得不说,糖果的帖子写的很好,可惜是对应zmud5.55,而本人一直用惯了462,难道462真的就没救了么,还得自己开动脑筋。

糖果的帖子里面有这么一段:

“在这个例子中@baobei中保存了所有随机装备的种类,@baobei2中保存所有随机装备的id,并且注意到@baobei和@baobei2中种类和id是一一对应的。
%ismember(%1,@baobei)返回%1在@baobei中的位置。比如如果掉落刀返回值为2,掉落鞭返回值为4
如果%1不在@baobei中,返回为0


悲剧的是在462中的%ismember只会返回1和0,不会返回位置。

想来想去只能利用#fuction命令来变相实现。

#fu item {%word(%1,%2,|)}
//462中没有%item系统函数,可以自己做一个

#fu ismember {%if(%ismember(%1,%2),@item(%2,%1),0}

举例:

#va abc "20|19|18|17|16|15|14|13|12|11|10|9|8|7|6|5|4|3|2|1"

#show @ismember(8,@abc)

显示13

#show @ismember(12,@abc)

显示9

都正确。

但是另外一个就不行了

#var baobei2 "sword|blade|staff|whip|axe|spear|hammer|halberd|dagger|armor|head|waist|boots|necklace|ring|surcoat|cloth|wrists|hands|shield"

#show @ismember(staff,@baobei2)

显示sword

#va baobei "剑|刀|杖|鞭|斧|枪|锤|戟|匕|铠甲|盔|腰带|靴|项链|戒指|披风|袍|护腕|手套|盾"
#show @ismember(斧,@baobei)
显示剑

不知道什么原因,请教高手指点。

北大侠客行MUD,中国最好的MUD

rubble 发表于 2013-11-25 20:38:01

只怪721对汉字支持不怎么好

mookt 发表于 2013-11-26 07:18:20

本帖最后由 mookt 于 2013-11-25 11:22 PM 编辑

快想破了脑袋,又在论坛上看了不少前辈的帖子,感觉终于搞定了。

#fu ismember {%if(%ismember(%1,%2),%if(%ismember(%1,%word(%2,%3,|)),%3,@ismember(%1,%2,[%3+1])),0)

测试结果如下:
#show @ismember(杖,@baobei,1)

显示3

#show @ismember(staff,@baobei2,1)

显示3

不过感觉不爽的就是5.55中的%ismember只需要两个参数,一个参数是需要判定在不在list中的变量(比如说杖,staff)一个参数是list列表,

462中自制的@ismember要多一个参数,这个参数设为1就好了(用于计数),从列表中的第一个开始比较,直到比较结束。

tlbblt 发表于 2013-11-26 15:25:41

太厉害了

snowboy 发表于 2013-11-26 21:46:11

我要做护镖路径集 就得30多个#if 嵌套 啊?

bluse 发表于 2013-11-27 10:13:39

我要做护镖路径集 就得30多个#if 嵌套 啊?
snowboy 发表于 2013-11-26 09:46 PM http://pkuxkx.net/forum/images/common/back.gif


    有必要么,可以一个连一个,非要嵌套?

puppet 发表于 2013-11-27 14:58:49

lst=99;#20 {#if %ismember(@abc,%word(@ku1,%i,|)) {lst=%i}};#if @lst<50 {#var cba {%word(@ku2,@lst,|)}}

puppet 发表于 2013-11-28 14:21:03

上次发你不在?今晚发,不见不散哈
页: [1]
查看完整版本: 怎么在462中实现555中%ismember()的功能?