还是请教下源码函数的问题
zmud吧
全部回复
仅看楼主
level 1
coorabcoorab 楼主
int set_skills_level(int level)
{
object me;
mapping skills;
string *sk;
int i;
string *str_skill_other = ({"taoism", //武当:道学心法
"begging", //丐帮:叫化绝活
"bangjue", //丐帮:打狗棒口诀
"stealing", //丐帮:妙手空空
"checking", //丐帮:
"zhenqijue", //华山:正气诀
"tiezhang-xinfa", //铁掌:铁掌心法
"huanxi-chan", //大轮寺:欢喜禅
"shenlong-yaoli", //神龙岛:神龙药理
"dacheng-fofa", //峨嵋:大乘佛法
"qimen-bagua", //桃花岛:奇门八卦
"buddhism", //天龙寺,少林:禅宗心法
"art", //昆仑:琴棋书画
"daode-jing", //九阴:道德经
"literate",
"poison",
"medicine"
});
me=this_object();
skills = me->query_skills();
if (mapp(skills))
{
sk = keys(skills);
sk= sk - str_skill_other;
for (i=0;i<sizeof(sk);i++)
skills[sk[i]] = level;
}
}//end set_skills_level
问下1)这个skills = me->query_skills(),skills是复制了玩家的功夫么?
比如玩家的功夫只有2项:force 200级;zixia-gong 210级。那么skills是什么?
2)sk = keys(skills),这个sk又是什么呢?
3) skills[sk[i]] = level,这一句中,level不是一个数么?这句该怎么理解呢?
2014年10月12日 15点10分 1
level 1
整体回答一下:
架设如你所说,玩家(也就是代码里的me)目前skills如下:
基本内功(force)-200级
紫霞神功(zixia-gong)-210级
skills = me->query_skills();是查询你的skills(query是“查询”、“访问”的意思),它的储存方式应该是(可能不同的mud有所区别):
force:200
zixia-gong:200
上面这种格式一般叫做映射,格式是 key(关键字):value(对应数值)
比如在force:200中key就是force,value就是200.
keys是取一个映射中的所有key,sk = keys(skills);在例子中sk就是一个包含force和zixia-gong的集合。而在这个集合中sk[0]=force,sk[1]=zixia-gong.
映射还有个特性就是可以通过key来查询对应value的值。
skills[sk[i]]假设i=0,则skills[sk[i]]=skills[sk[0]]=skills[force],在映射skills中force对应的值是200,所以这里skills[sk[i]]最后的值是200.
因为有for (i=0;i<sizeof(sk);i++)这个语句,所以最后获得的结果就是skills[force]=200,skills[zixia-gogn]=210。即获得所有skills的等级level。level是个变量。
建议源代码问题到mud贴吧提问,那里高手多。我也是刚学的,讲错勿怪。
2014年10月13日 03点10分 2
level 1
coorabcoorab 楼主
非常感谢2楼,解惑良多
2014年10月13日 14点10分 3
level 1
coorabcoorab 楼主
还漏了一个
if (mapp(skills)) ,这个mapp语句是什么含义?
2014年10月13日 14点10分 4
mapp(skills):判断变量skills是否为一个映射 (mapping)
2014年12月23日 04点12分
1