文字MUD游戏论坛-天下泥潭群英会-水泊梁山  

返回   文字MUD游戏论坛-天下泥潭群英会-水泊梁山 > 西游之旅 > 『 巫师天下 』

『 巫师天下 』 学习如何挂MUD,如何制作MUD。讨论如何管理好一个MUD,做好一个巫师。

发表新主题 回复
 
LinkBack 主题工具 主题评分 显示模式
旧 2011-12-03   #1
高级会员
级别:6 | 在线时长:109小时 | 升级还需:31小时级别:6 | 在线时长:109小时 | 升级还需:31小时级别:6 | 在线时长:109小时 | 升级还需:31小时
 
Odysseus 的头像
 
注册: 08年04月11日
来自: 盘丝洞
帖子: 311
声望力: 20
声望: 50 Odysseus 初领妙道
现金:29两梁山币
资产:1245两梁山币
致谢数: 0
获感谢文章数:0
获会员感谢数:0
鬼魂回到阳间的bug

一个关于鬼魂回到阳间的BUG!


作者:llm  发表时间:2001年7月31日 15:51
--------------------------------------------------------------------------------

其实应该是一个很明显的BUG,但不知为何最近才突然发现,想想,应该不少MUD里
都会有。现提出来,希望如果有的话快快修改掉,已经改掉的,也可介绍介绍经验。
在MUD里会有很多延时后将玩家再move到目的地的代码,比如这个:
......
tell_object(ob, BLU "你在海上航行了很久很久.......\n" NOR ) ;
call_out("home", 10 , ob );
return 1 ;
}
void home( object ob )
{
tell_object(ob , "大船终于抵达了中原的一个繁华城市。你走下船来。\n" ) ;
ob->move ("/d/city2/haigang") ;
}
假设一个玩家上了船,设定10秒后呼叫home()到达海港。刚上船就来了PKer或者
这个玩家毒发身亡。于是这个玩家的object就执行正常的die()函数,处理后被move
到鬼门关,在那里等白无常给他还阳是要一点时间的,就在这时,前面call_out的
home()时间到了,于是这个玩家就立即被move到city2/haogang.当然此时的玩家已经
是鬼魂了。于是他便处于隐身状态了。
这个BUG的修改应该很简单,在文件里home()里判断一下就行了。但关键是这样的
程序会很多,而且以后还会有新巫师写出来。应该找一个从根本上解决的办法。




作者:doing  发表时间:2001年7月31日 19:31
--------------------------------------------------------------------------------

这几乎是不可解决的。

我建议修改所有相关的代码,也不会有多少。

当然,如果你非要另找办法,也可以采用类似的办法:当 die 的时候把所在 room 的
call_out 清除。这个方法有一个缺陷。也可以在 move 的时候判断一下调用者是否时
room,如果是,则判断调用者是否在这个 room,否则不予 move。

但是这么做都不如直接修改得好。
何况上面那段程序还有一个错误:在定时器启动的时候没有判断 ob 是否是合法的。


作者:darks  发表时间:2001年8月1日 08:52
--------------------------------------------------------------------------------

我对die()的处理可能和别人不一样
我改了这个

if( this_object()->is_ghost() ){

inv = all_inventory(this_object());
inv -= ({ 0 });
i = sizeof(inv);
while(i--) inv[i]->move(environment());
set("gin", 1); set("eff_gin", 1);
set("kee", 1); set("eff_kee", 1);
set("sen", 1); set("eff_sen", 1);
real_death();
return;
}

if( userp(this_object()) ) {
set("gin", 1); set("eff_gin", 1);
set("kee", 1); set("eff_kee", 1);
set("sen", 1); set("eff_sen", 1);
ghost = 1;
this_object()->save();
remove_call_out("real_death");
call_out("real_death", 10 + (int) this_object()->query_con());
}else destruct(this_object());


下面这个是真正的死亡函数
void real_death()
{
if (!this_object()->is_ghost())
return;
if (!userp(this_object())){
message_vision("$N渐渐的虚化,消失了...\n",this_object());
destruct(this_object());
return;
}
message_vision("突然一阵烟雾袭来,将$N卷走了...\n",this_object());
message("system", HIR "\n烟雾中出现牛头马面,二话不说,将枷锁镣铐往你头上一套....\n" NOR,this_object());
message("system", HIR "\n你的眼前一黑,接著什麽也不知道了....\n\n" NOR,this_object());
this_object()->move(DEATH_ROOM);
DEATH_ROOM->start_death(this_object());
}


以上转引自www.niub.net之mud制作讨论组
Odysseus 当前离线  
回复时引用此帖

发表新主题 回复

添加到书签


发帖规则
不可以发表主师
不可以回复帖子
不可以上传附件
不可以编辑自己的帖子

论坛启用 vB 代码
论坛启用 表情图标
论坛启用 [IMG] 代码
论坛禁用 HTML 代码
Trackbacks are 启用
Pingbacks are 启用
Refbacks are 启用



所有时间均为格林尼治时间 +9, 现在的时间是 07:14.


Powered by SPLS
版权所有 2001-2023 水泊梁山
皖ICP备05012024号

站长 fengyue

Content Relevant URLs by vBSEO 3.6.1