MUD 游戏代码分析:检测 Bug 和逻辑是否正常运行
这段代码看起来没有明显的 Bug,并且逻辑也比较清晰。首先判断输入参数是否为'all',如果是,则需要判断玩家是否为巫师,然后将玩家身上所有的物品都丢掉,并给出相应的提示。如果输入参数不是'all',则需要判断玩家身上是否有这个物品,然后将其丢掉,并给出相应的提示。
在 do_drop 函数中,首先判断玩家是否正在骑乘,如果是,则需要让玩家先下马,然后再进行丢弃操作。如果玩家没有骑乘,直接将物品丢弃到当前环境中即可。
需要注意的是,这段代码没有考虑到物品的权限问题。如果某个物品设置了不可丢弃的权限,玩家仍然可以通过这段代码将其丢掉,这可能会导致一些问题。因此,在实际使用中需要注意这一点,并且根据实际需要进行相应的修改。
if (arg == "all")
{
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");
object->delete_temp("is_rided_by");
object->move(environment(me));
return 1;
}
原文地址: http://www.cveoy.top/t/topic/m5N3 著作权归作者所有。请勿转载和采集!