请教有关mud的代码问题
mud吧
全部回复
仅看楼主
level 1
coorabcoorab 楼主
最近玩的书剑,刚开始学源代码,有些东西晦涩不清楚,请高手指点
下面是华山思过崖siguoya.c文件的编码中的一段
set("exits", ([
"eastdown" : __DIR__"xiaolu2",
"enter" : __DIR__"hole",
]));
set("objects", ([
__DIR__"npc/linghuchong" : 1,
]));
int valid_leave(object me, string dir)
{
object *inv = deep_inventory(me);
object *obj;
obj = filter_array(inv,(:get_object:));
if( sizeof(obj) && dir =="enter" )
return notify_fail("你负重过多,行动过于笨拙,脑门一下撞在山壁上。\n");
if (me->query("fengset") && dir=="enter" ) {
me->move(__DIR__"jiabi");
return notify_fail("你循着高速的捷径一下子进入了夹山壁。\n");
}
return ::valid_leave(me, dir);
}
还有就是上面提到的出口xiaolu2的代码中的init函数
void init()
{
object me = this_player();
if( me->query("family")
&& me->query("family/family_name") != "华山派"
&& me->query("fengset")){
me->delete("fengset");
}
}
"fengset"应该是与风清扬相关的一个标记,quest成功是会赋值为1。
此时,玩家可直接在思过崖enter进夹山壁去拜风为师。
疑问如下:1)me->query("fengset")这个标记会不会在玩家quit时,系统delete掉?
2) if( me->query("family")
&& me->query("family/family_name") != "华山派"
&& me->query("fengset")){
me->delete("fengset");
这段代码不是很理解。
第一个条件me->query("family")是说玩家是否已经有师门,有的话判断为真?
第二个条件me->query("family/family_name") != "华山派"
是说玩家的师门是否不是华山,有的话判断为真?
第三个条件me->query("fengset")
是说玩家的"fengset"标记是否不为0?不为0的话判断为真?
特别是第三个条件,要是"fengset"不为0的话,后面的执行语句me->delete("fengset")岂不是把这个标记删掉了。那风弟子下次岂不是进不了夹山壁了?
2014年10月17日 01点10分 1
level 8
1、按道理说quit不会清掉。不过你最好找到set的代码。一般set_temp(xxxx)属于临时标记,quit会清掉,set(xxx)属于永久标记,除非delete,否则不会清掉
2、第一个条件me->query("family")是说玩家是否已经有师门,有的话判断为真?正确
第二个条件me->query("family/family_name") != "华山派"
是说玩家的师门是否不是华山,有的话判断为真?其中前半句是否不是华山正确。但后半句是不是华山派是为真
第三个条件me->query("fengset")
是说玩家的"fengset"标记是否不为0?不为0的话判断为真?
这句是判断是否已有标记,有的话为1,没有的话为0
你帖子中的所有代码结合起来是这个意思:
如果某人有门派,而门派又不是华山,但他又有风的标记,那么删掉。
翻译过来就是华山弟子才与风清扬有关联,一旦脱离华山派拜入其他门派(叛师)则取消风标记。即要求风弟子必须是华山弟子。。。
2014年10月17日 12点10分 2
相当全面[真棒]
2014年10月17日 15点10分
level 1
coorabcoorab 楼主
很清楚了,谢谢xiuliinlove兄指教
2014年10月17日 14点10分 3
1