MUD游戏物品掉落逻辑分析与BUG修复
这段代码用于处理玩家丢下物品的逻辑,其中包含了检测bug的部分。我们来看一下:
-
第一段代码是处理玩家丢下所有物品的逻辑,但是只有巫师可以这样操作。这里需要注意的是,如果玩家不是巫师,应该返回一个错误提示,而不是直接退出函数。
-
第二段代码是处理玩家丢下指定物品的逻辑,其中需要检测玩家身上是否有这个物品。这里需要注意的是,如果玩家身上没有这个物品,应该返回一个错误提示,而不是直接退出函数。
-
最后一段代码是处理玩家丢下物品的具体逻辑,其中需要注意的是,如果玩家正在骑乘物品,需要先下马再丢下物品。但是,这段代码中并没有检测玩家是否正在骑乘物品。这里需要加上一个检测,如果玩家正在骑乘物品,应该先下马再丢下物品。
综上所述,这段代码中需要加上一些错误处理和检测逻辑,以确保玩家的操作是合法的,并且不会出现bug。
{
if(!wizardp(me))
return notify_fail('只有巫师可以这样操作。\n');
inv = all_inventory(me);
for(amount = 0, i = 0; i < sizeof(inv); i++)
{
if (! living(me)) break;
amount += do_drop(me, inv[i], 1);
}
if (! amount)
{
write('你什么都没有丢掉。\n');
return 1;
}
message('vision', me->name() + '丢下了一堆东西。\n',
environment(me), ({ me }));
write('丢完了。\n');
return 1;
}
if (! objectp(obj = present(arg, me)))
return notify_fail('你身上没有这样东西。\n');
do_drop(me, obj, 0);
return 1;
}
int do_drop(object me, object obj, int raw)
{
mixed no_drop;
object riding;
if (obj == (riding = me->query_temp('is_riding')))
{
message_vision('$N从$n背上飞身跳下。\n', me, riding);
me->delete_temp('is_riding');
obj->delete_temp('is_rided_by');
obj->move(environment(me));
return 1;
}
原文地址: https://www.cveoy.top/t/topic/m5Ir 著作权归作者所有。请勿转载和采集!