coolking 发表于 2013-6-5 06:44:56

关于自动屏蔽重复语句的构思和疑问

挂机的时候总难免有很多麻烦的重复语句,就算不挂机也经常有路过的人刷啦啦屏幕上出现一大串吧..
虽说老玩家手动屏蔽掉很多ID和语句后也能让屏幕干净不少,但是屏蔽ID有时确实麻烦(主要是忘了关),而且见一个屏蔽一个也很讨厌
单纯的自动屏蔽其实很容易想,写一个空触发开始,获取当前这一行的语句,然后在接下来一段时间(比如10秒)内循环判断,这句话每出现一次就给一个变量+1,最终大于一定值之后就判断为重复语句,用#gag来屏蔽掉就行了,以上行为无限循环(其实也可以考虑开多线程同步触发来提高效率),就可以实现自动屏蔽的目标了
但是这样做也有缺点,就是很容易生成一大串#gag内容,如果对此无所谓的话放那放着留一个干净的屏幕也没什么不好,问题是手动的时候总还是想看得更丰富些吧..想删的时候就没那么容易了。
我稍微尝试了一下发现在721里在class内使用#gag生成的屏蔽触发依然在根目录下,这样就管理而言几乎是不可能的任务...于是我的问题是如何能让#gag定向生成触发放进选定的class里面呢?就算不能放进别的或者新生成的class,放进产生#gag语句自身的class内也好啊...
总之最终设想是通过一个3选项按钮,打开式自动开始记录重复语句并且#gag,关闭时使#gag触发所在的class无效化,还有一个选项可以删除(或清空)class,从而重新开始记录

北大侠客行MUD,中国最好的MUD

ycryu 发表于 2013-6-5 15:30:40

我用的462,如果要在462里面实现这个效果,要准备两个list变量,一个用来存信息语句,一个用来存每一个信息语句对应的出现次数,比如listA = {你略一凝神,精神看起来好多了。|你的内力不够。},listB = {1|1}。用#tr {(*)} {#if (%ismember(%1,listA)) {}} 捕捉每一行信息,并验证是否出现过,如果没有出现过,则%additem(%1,listA),%additem(1,listB)往list里面增加item项;如果出现过,则获取它在listA的index,拿着这个index去listB取出对应的出现次数,然后验证这个次数是否超标,超标了就执行#tr {%1} {#gag} className;
我觉得按照这个思路可以实现,但是效率肯定会很慢

suxxx 发表于 2013-6-5 17:25:58

是用#trigger命令来创建gag触发么, 用#trigger {xxx} {yyy} zzz的格式,那个zzz就是你创建的这个trigger放置的子class
页: [1]
查看完整版本: 关于自动屏蔽重复语句的构思和疑问