#include <config.h>

inherit F_CLEAN_UP;

int do_drop(object me, object obj, int raw);

void create() { seteuid(getuid()); }

int main(object me, string arg) { object obj, *inv, obj2; int i, amount; mixed info; string item;

if (! arg)
	return notify_fail('你要丢下什么东西?\n');

if (sscanf(arg, "%d %s", amount, item) == 2)
{
	if (! objectp(obj = present(item, me)))
		return notify_fail('你身上没有这样东西。\n');

	if (wiz_level(me) < 3 && (info = obj->query('no_drop')))
	{
		tell_object(me, stringp(info) ? info : obj->name() + '不能被丢弃。\n');
		return 1;
	}

	if (! obj->query_amount())
		return notify_fail( obj->name() + '不能被分开丢弃。\n');

	if (amount < 1)
		return notify_fail('东西的数量至少是一个。\n');

	if (amount > obj->query_amount())
		return notify_fail('你没有那么多的' + obj->name() + '。\n');
	else if (amount == (int)obj->query_amount())
	{
		if (! do_drop(me, obj, 0))
		{
			obj->move(environment(me));
			return 0;
		}
		// 处理 do_drop 函数返回的值
		if(!raw) {
			tell_object(me, '你丢下了' + obj->short() + '。\n');
			message('vision', me->name() + '丢下了一' + obj->query('unit') + obj->name() + '。\n', environment(me), ({ me }));
		}
		return 1;
	}
	else
	{
		obj->set_amount((int)obj->query_amount() - amount);
		obj2 = new(base_name(obj));
		obj2->set_amount(amount);
		if (! do_drop(me, obj2, 0))
		{
			obj2->move(environment(me));
			return 0;
		}
		// 处理 do_drop 函数返回的值
		if(!raw) {
			tell_object(me, '你丢下了' + obj2->short() + '。\n');
			message('vision', me->name() + '丢下了一' + obj2->query('unit') + obj2->name() + '。\n', environment(me), ({ me }));
		}
		return 1;
	}
}

}这段代码没有明显的bug,逻辑也比较清晰。它实现了玩家在游戏中丢弃物品的功能,包括丢弃数量不为1的物品。在丢弃物品之前,还进行了一系列的检查,确保玩家身上有要丢弃的物品,并且该物品可以被丢弃。在丢弃物品后,还会打印一些提示信息给玩家和其他玩家看。因此,该代码应该可以正常运行。

MUD游戏物品丢弃功能代码分析:逻辑清晰,功能完善

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

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