![]() |
![]() |
#1 |
高级会员
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() 注册: 08年04月11日
来自: 盘丝洞
帖子: 311
声望力: 20
声望:
50
![]() 现金:29两梁山币
资产:1245两梁山币
致谢数: 0
获感谢文章数:0
获会员感谢数:0 |
限制flood的程序
发信人: shure (韩姝儿), 信区: Mud_Builder 标 题: Re: 请大家帮我check这个限制flood的程序 发信站: 一塌糊涂站 (Wed May 23 11:16:09 2001) , 站内信件 【 在 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的指点,初始化了,没贴出来。 : |
![]() |
![]() |