限制flood的程序
2007/5/11 21:32:54

【 在 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

下一页
返回列表
返回首页
©2025 MUD游戏网_文字mud 电脑版
Powered by iwms