这段代码看起来没有明显的 bug,逻辑也比较清晰。首先判断对象是否为 clone,如果不是则直接销毁;然后判断玩家是否有足够权限丢弃该对象;再判断当前环境是否允许丢弃;最后如果玩家不是巫师,则判断对象是否装备,如果是则提示必须脱下或解除装备才能丢掉。

 if (!clonep(obj))
	{
		write(obj->query('name') + '化作一道流光消失了!!\n');
		destruct(obj);
		return 1;
	}

	 if (wiz_level(me) < 3 && obj->query('no_drop'))
		return notify_fail( obj->name() + '不能被丢弃。\n');

	 if (no_drop = environment(me)->query('no_drop'))
		return notify_fail(stringp(no_drop) ? no_drop : '这里东西丢弃下去也看不见。\n');
 if(!wizardp(me)){
	 switch ((string)obj->query('equipped'))
	 {
	 case 'worn':
		tell_object(me, obj->name() + '必须脱下来才能丢掉。\n');
		return 0;

	 case 'wielded':
		tell_object(me, obj->name() + '必须解除装备才能丢掉。\n');
		return 0;
	 }
}

需要注意的是,第三个判断中使用了一个赋值操作符“=”,可能是打算写成“==”相等判断符的笔误,需要确认一下。

MUD 游戏中物品丢弃逻辑分析:代码解析及潜在问题

原文地址: https://www.cveoy.top/t/topic/m5Px 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录