找回密码
 注册
搜索
查看: 9163|回复: 121

终极大招,防flood研究

[复制链接]
门派:武当派
发表于 2019-3-7 23:14:34 | 显示全部楼层 |阅读模式
直接上code
  1. function exe(cmd)
  2.     if GetConnectDuration() == 0 then
  3.        return Connect()
  4.     end
  5.     if cmd==nil then cmd='look' end
  6.         local l_strCmd=cmd..';'
  7.         local l_thisCmdCnt=0
  8.         for v in string.gmatch(l_strCmd,"[^;];") do
  9.             --print(v)
  10.                 l_thisCmdCnt=l_thisCmdCnt+1
  11.     end
  12.         local l_waitTime=0.0001
  13.     print(l_thisCmdCnt)
  14.         local l_curTime=socket.gettime()
  15.         local l_lenTable=table.getn(lstCmdSend)
  16.         for i=1,l_lenTable -1 do
  17.             local l_tmp1=lstCmdSend[l_lenTable]-lstCmdSend[i]+l_thisCmdCnt
  18.                 local l_tmp2=l_curTime-lstCmdSendTime[i]
  19.             if  l_tmp1>80 and l_tmp2 < (l_tmp1/75.0)*3 then
  20.                     if  (l_tmp1/80.0)*3-l_tmp2 > l_waitTime then
  21.                            l_waitTime=(l_tmp1/80.0)*3-l_tmp2
  22.                         end
  23.                 end
  24.         end
  25.         print('l_waitTime='..l_waitTime)
  26.         if (l_waitTime>0.01) then
  27.              EnableTimer('walkwait',false)
  28.              wait.make(function()
  29.                      wait.time(l_waitTime)
  30.                          Execute(cmd)
  31.                          if road.i<=table.getn(road.detail) then EnableTimer('walkwait',true) end
  32.                          end)
  33.         else
  34.              Execute(cmd)
  35.         end
  36.         if l_thisCmdCnt<5 then
  37.             l_CmdCnt=l_CmdCnt+l_thisCmdCnt
  38.             lstCmdSend[l_lenTable]=l_CmdCnt
  39.                 lstCmdSendTime[l_lenTable]=l_curTime
  40.         else
  41.                 if  table.getn(lstCmdSend)>=10 then
  42.                         table.remove(lstCmdSend,1)
  43.                         table.remove(lstCmdSendTime,1)
  44.                 end
  45.                 l_CmdCnt=l_CmdCnt+l_thisCmdCnt
  46.                 table.insert(lstCmdSend,l_CmdCnt)
  47.                 table.insert(lstCmdSendTime,l_curTime)
  48.         end
  49.         print("curTime="..l_curTime.."    cmd="..cmd.."    l_CmdCnt="..l_CmdCnt)
  50. end
复制代码

  1. l_CmdCnt=0
  2. lstCmdSend={}
  3. lstCmdSendTime={}
复制代码


  1. l_CmdCnt=0
  2.     lstCmdSend[1]=0
  3.         lstCmdSendTime[1]=socket.gettime()
复制代码

评分

2

查看全部评分

门派:天龙寺
发表于 2019-3-8 11:40:25 | 显示全部楼层
任惊鸿,我帮你重新编辑一下,方便对MUSH不懂的筒子们
function exe(cmd)
    if GetConnectDuration() == 0 then
       return Connect()
    end
    if cmd==nil then cmd='look' end
        local l_strCmd=cmd..';'
        local l_thisCmdCnt=0
        for v in string.gmatch(l_strCmd,"[^;];") do
            --print(v)
                l_thisCmdCnt=l_thisCmdCnt+1
    end
        local l_waitTime=0.0001
    --print(l_thisCmdCnt)
        local l_curTime=socket.gettime()
        local l_lenTable=table.getn(lstCmdSend)
        for i=1,l_lenTable -1 do
            local l_tmp1=lstCmdSend[l_lenTable]-lstCmdSend[i]+l_thisCmdCnt
                local l_tmp2=l_curTime-lstCmdSendTime[i]
            if  l_tmp1>80 and l_tmp2 < (l_tmp1/75.0)*3 then
                    if  (l_tmp1/80.0)*3-l_tmp2 > l_waitTime then
                           l_waitTime=(l_tmp1/80.0)*3-l_tmp2
                        end
                end
        end
        --print('l_waitTime='..l_waitTime)
        if (l_waitTime>0.01) then
             EnableTimer('walkwait',false)
             wait.make(function()
                     wait.time(l_waitTime)
                         Execute(cmd)
                         if road.i<=table.getn(road.detail) then EnableTimer('walkwait',true) end
                         end)
        else
             Execute(cmd)
        end
        if l_thisCmdCnt<5 then
            l_CmdCnt=l_CmdCnt+l_thisCmdCnt
            lstCmdSend[l_lenTable]=l_CmdCnt
                lstCmdSendTime[l_lenTable]=l_curTime
        else
                if  table.getn(lstCmdSend)>=10 then
                        table.remove(lstCmdSend,1)
                        table.remove(lstCmdSendTime,1)
                end
                l_CmdCnt=l_CmdCnt+l_thisCmdCnt
                table.insert(lstCmdSend,l_CmdCnt)
                table.insert(lstCmdSendTime,l_curTime)
        end
        --print("curTime="..l_curTime.."    cmd="..cmd.."    l_CmdCnt="..l_CmdCnt)
end
以上这一段替换lujing.lu里的function exe(cmd),print我替你编辑的时候直接注释掉了
l_CmdCnt=0
lstCmdSend={}
lstCmdSendTime={}  -------------------------这一段加在lujing.lua的顶部

shujian.lua里的顶部:require "socket"

shujian.lua里找到function main(),加入下面的内容,不是替换啊,只是加进去下面这一段
l_CmdCnt=0
    lstCmdSend[1]=0
        lstCmdSendTime[1]=socket.gettime()
               

评分

1

查看全部评分

门派:明教
发表于 2019-3-7 23:19:55 | 显示全部楼层
茶楼,,啥意思?来个中文版说明书呗
门派:武当派
 楼主| 发表于 2019-3-7 23:20:50 | 显示全部楼层
pinkmoon@tj 发表于 2019-3-7 23:19
茶楼,,啥意思?来个中文版说明书呗

先自己看,有问题提出来
门派:明教
发表于 2019-3-7 23:21:49 | 显示全部楼层
freely@tj 发表于 2019-3-7 23:20
先自己看,有问题提出来

恩,我的问题就是。。。看不懂啊,哈哈
门派:武当派
 楼主| 发表于 2019-3-7 23:22:59 | 显示全部楼层
pinkmoon@tj 发表于 2019-3-7 23:21
恩,我的问题就是。。。看不懂啊,哈哈

呵呵,就是改造了function exe, 实时记录发出的命令
门派:明教
发表于 2019-3-7 23:26:07 | 显示全部楼层
freely@tj 发表于 2019-3-7 23:22
呵呵,就是改造了function exe, 实时记录发出的命令

那么,下一个问题,这玩意儿往哪塞呢?
门派:武当派
 楼主| 发表于 2019-3-7 23:32:44 | 显示全部楼层
lujing.lua  和 shujian.lua                    
门派:明教
发表于 2019-3-7 23:57:25 | 显示全部楼层
freely@tj 发表于 2019-3-7 23:32
lujing.lua  和 shujian.lua

这玩意儿用了之后可以飞到0.1 80了吗
门派:武当派
 楼主| 发表于 2019-3-8 00:00:01 | 显示全部楼层
pinkmoon@tj 发表于 2019-3-7 23:57
这玩意儿用了之后可以飞到0.1 80了吗

没试过,你可以测试一下   
门派:武当派
发表于 2019-3-8 00:00:44 | 显示全部楼层
说明下这三段代码怎么放?放哪里哦。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|书剑永恒MUD ( 闽ICP备14012032号|闽公网安备 35050202000162号 )

GMT+8, 2025-6-16 22:56 , Processed in 0.037816 second(s), 28 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表