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