背景:
阅读文章

限制flood的程序

[日期:2007-05-11] 来源:  作者: [字体: ]

【 在 cloner (!!!!!!!) 的大作中提到: 】
: 【 在 shure (韩姝儿) 的大作中提到: 】
: : 标  题: 请大家帮我check这个限制flood的程序
: : 发信站: 一塌糊涂站 (Tue May 22 20:47:43 2001) , 站内信件
: :
: : 写完有点头晕,单机调试通过,但还是担心有不周到的地方,尤其是没有各种ip的玩


家共
: : 同参与测试,所以。。。请大拿们帮我检查一下吧。
: :
: : // /adm/daemons/channeld.c
: :
: : void create()
: : {
: :     ……
: :     set_heart_beat(1);
: : }
: :
: : void heart_beat(){ sameip=([]);}
: :
: : varargs int do_channel(object me, string verb, string arg, int emote,int re
mote
: : )
: : {
: :     mixed *value,*index;
: :     int i,j;
: :     ……
: :     if(userp(me) && !wizardp(me)) {
: :           me->set_temp("last_channel_msg", arg);
: :            if(me->query("id") && query_ip_name(me)){
: :            if(i=member_array(query_ip_name(me),keys(sameip))!=-1){
: :               value= values(sameip);
: :               value[i-1] += ({me->query("id")});
:                 value[i-1] ? 应该是i吧,member_array返回的是索引值
:                 0..开始.:P
                  //这个我是非常奇怪的,按理说应该是value[i],但实际情况是只有v
alue[i-1]才能符合,还没有细想为什么。。
: :               sameip[query_ip_name(me)]= value[i-1];
: :               if (sizeof(value[i-1])>5){
: :               for(j=0; j < sizeof(value[i-1]); j++ ){
: :                  if(!find_player(value[i-1][j])->query("seal_time"))      
   
: :                   //这个写法不合适,你应该判断find_player是否成功的
:                     //你这里直接就调用了query()了  
                      //呵呵,当时想过这个问题,后来觉得一个流程处理下去,肯定
比玩家quit或!living快,所以就没加,sigh,态度不严谨。 
: :                      tell_object(find_player(value[i-1][j]),"由于短时间内收
到来
: : 自您的IP地址过多的信息\n系统将暂时关闭您的交谈频道。\n");
: :                  find_player(value[i-1][j])->set("seal_time", find_player(v
alue
: : [i-1][j])->query("mud_age"));
:                  从节约资源的角度来说,不要总用find_player来得到object,
:                  用个变量一次性固定下来。
                    //nod,这个的确是。不过想附带问一下,find_player3-5个id浪费
的程度是多少?
: :               }      
: :               return 1;  
: :            } else {
: :               value=({});
: :               value += ({me->query("id")});
: :               sameip[query_ip_name(me)]= value;
: :            }
: :         }
: :                 me->add_temp("channel_msg_cnt",1);
: :           if (time()-me->query_temp("chat_time")<5)
: :           {
: :            if (me->query_temp("channel_msg_cnt")>5){
: :                do_channel(this_object(), "rumor", sprintf("%s因为说话太多,
交谈
: : 频道被暂时关闭。\n", me->name(1) ));
: :                me->set("seal_time",me->query("mud_age"));
: :                me->delete_temp("channel_msg_cnt");
: :                return 1;
: :                }
: :             }
: :             else{
: :                 me->set_temp("chat_time",time());
: :                 me->delete_temp("channel_msg_cnt");
: :             }
: :     }
: : }
: :
: : 用心跳来晴空列表,呵呵,不错阿。不过不知道这个 same_ip初始化了没有。
:   否则可能出点小错误。
    // 是akuma的指点,初始化了,没贴出来。


尊重作者 转载请注明出处52mud.com

收藏 推荐 打印 | 录入:sbso | 阅读:
相关内容      
内容推送
52mud提供
一起回忆泥巴游戏QQ群68186072
52mud官方微信公众平台
热门评论