当一个到MUDOS的连接创建时,系统将调用MASTER_OB(在配置文件里定义的,一般是/adm/obj/master.c)里的connect函数(也有的是/adm/single/master.c)。
这个函数可以有参数也可以无参数,如果有参数,则参数将传入玩家连接的端口号,有的MUD通过不同的端口实现GB/BIG双系统就是在这个原理上实现的。(一般最多有4个端口可以让玩家连入游戏)
在connect函数里,一个新的LOGIN_OB将被创建,在大多数MUDLIB里,这个LOGIN OB是/clone/user/login.c。
然后系统将调用这个LOGIN_OB的logon()函数,并将interactive传给LOGIN_OB,这时候
logon函数又调用LOGIN_D也就是/adm/daemons/logind.c里的logon()函数,开始进入正式的登录过程。
在登录过程中根据输入创建了一个ID的USER OB,并用exec将interactive从OGIN OB传到了USER OB上,这时候USER OB的process_input才开始起作用。
由此可以看出LOGIN OB和USER OB本质上并没有什么不同。你可以将LOGIN OB的代码进行修改以实现一定的功能。
喜欢LPMUD的可以到CIE站上去取一份TMI2的MUDLIB,然后好好看看里面的文档。相信比大多数流传的中文MUDLIB里的文挡和注释要全很多。
可以看看process_input的说明:
If process_input is present in the player object,then the MudOS driver will send it a copy of each line the player types. Process_input makes it easy to implement features like command history and protection against wizcuffs.
process_input can also modify the player input before it is parsed. if process_input returns a non-zero string, that string is used by the driver instead of what the player typed!
关于在ALIAS里的FLOOD,还有一种办法可以自动减少掉1/3左右的可能性,而对于蓄意FLOOD的人来说,很有可能50%都会被挡住。
刷屏的情况一般有以下几种情况:
1,重复说话,或者说重复命令。
2,说类似的话,比如在前一句话的基础上加上一两个字符
3,说很短的话,比如每句话只有一个字。
4,杂乱无章的话
由于F ALIAS有一个history数组记录着命令,所以理论上可以进行一定的判断来避免FLOOD
另外要注意的是,增加了判断必然要影响效率,但是因为是用户输入接口,所以估计耗费不大(对机器人狂多的MUD例外,而对我架构的聊天室则无所谓)
在我用MUDOS架构的聊天室上我对前3种情况进行过一定的判断,对重复的话我限制了最多几句相同
对短的话进行数量统计,否则就判断是否为相似(采用了折半,减两端字符然后比较是否包含来计算相似度)
这样对3个结果进行一定的判断(重复超过多少,相似度超过多少,短话超过多少)来对输入进行过滤。
这一部分我自己还在尝试找到一个合适的界限。
我很久没怎么碰MUD了。很多地方都记得不大清楚了,有纰漏的地方请多多指正,但是我更希望能起到一个抛砖引玉的作用,大家都能谈谈自己的一些经验之得。不要让整个MUD界总是陷在资源下载,复制,架站,入门的怪圈里。
很多人都认为MUD很容易学是个优点,然而现在看来更是个缺点,太多的人自以为是了,太多的人总是只满足于入门级。对MUD界的发展有何用处?
补充一下:对于命令的历史记录应该只针对会产生信息的命令进行记录!
jackyboy
2001年1月8日贴于泥巴大王
此文并没太多内涵,而且还应该说说以下方面
上面都只是说了MUDLIB里的一些编程和处理,如果谁能补充一下MUDOS调用LIB里用户相关的输入函数的流程,以及MUDOS里对一个用户连接的处理过程最好了。。。。
尊重作者 转载请注明出处52mud.com