找回密码
 注册
搜索
楼主: freely@tj

终极大招,防flood研究

[复制链接]
门派:武当派
 楼主| 发表于 2019-3-8 14:11:13 | 显示全部楼层
kkfromch@tj 发表于 2019-3-8 13:19
我刚刚才有空细看你这个code,很有意思的东西,好多都是我不知道的,我也先弄上测试一下!

效果好的话 ...

   呵,感谢加分鼓励,我在你和岛主的帖子里学了很多
门派:明教
发表于 2019-3-8 14:41:02 | 显示全部楼层
freely@tj 发表于 2019-3-8 14:11
呵,感谢加分鼓励,我在你和岛主的帖子里学了很多

很好用,基本上没有flood了,有的话也是短暂的一下子,我这是开100步,跑0.01秒间隔测的。

效率方面也有显著提升,因为减少了flood,也就减少了跑错路,重新定位的损失,非常不错!

赞!!!
门派:明教
发表于 2019-3-8 14:44:25 | 显示全部楼层
freely@tj 发表于 2019-3-8 14:11
呵,感谢加分鼓励,我在你和岛主的帖子里学了很多

之前看到有资料说,lua的os.time有弊端,运行久了会导致抓不到准确时间。

你这个一上来就socket.gettime,我顿时眼睛一亮,知道是高手出手了,真心不错!学到很多技巧啊!

以后多来点这样的高端技术呗!
门派:明教
发表于 2019-3-8 14:50:09 | 显示全部楼层
zhaoziyu@tj 发表于 2019-3-8 13:42
正在赶路中,在过河过江的时候特别明显

是啊!我看到程序里有把这个关掉,但是不知为什么还是在运行?
门派:明教
发表于 2019-3-8 14:52:26 | 显示全部楼层
freely@tj 发表于 2019-3-8 14:07
我最新的code这儿有改进,不用定时器了,用的DoAfterSpecial

你是说,彻底舍弃原版的正在赶路中的秒定时器了?

DoAfterSpecial 用法是在哪里介绍的?我去看看
门派:明教
发表于 2019-3-8 14:56:47 | 显示全部楼层
freely@tj 发表于 2019-3-8 14:07
我最新的code这儿有改进,不用定时器了,用的DoAfterSpecial

DoAfterSpecial
Script function

world.DoAfterSpecial

Read about scripting
Type

Method

Summary

Adds a one-shot, temporary, timer to carry out some special action

Prototype

long DoAfterSpecial(long Seconds, BSTR SendText, short SendTo);

View list of data type meanings
Description

This routine adds an unlabelled, temporary, one-shot timer, set to go off after
the designated number of seconds.

The timer sends its "SendText" text to the designated location when it fires.
----

去mush网站查了一下,这是一次性计时器啊!如果flood吞掉第一个指令,它关闭了,起不到防flood作用了,怎么破呢?

还有——

这个DoAfterSpecial和 公版的

-- 创建一个一次性秒定时器
function create_timer_st(t_name,t_second,t_function)
      return AddTimer(t_name,0,0,t_second,'',timer_flag.Enabled+timer_flag.ActiveWhenClosed+timer_flag.Replace+timer_flag.OneShot,t_function)
end

这个一次性的秒计时器,它俩作用是一样的吗?
门派:武当派
 楼主| 发表于 2019-3-8 15:00:10 | 显示全部楼层
kkfromch@tj 发表于 2019-3-8 14:44
之前看到有资料说,lua的os.time有弊端,运行久了会导致抓不到准确时间。

你这个一上来就socket.getti ...

呵,高端说不上,我对lua也是新手,这阵跟着你和岛主的帖子花了点时间熟悉了一下。
我用socket.gettime就是发现os.time的精度不够高,才网上有人推荐这个,刚好现在集成的lua里有这个扩展
门派:武当派
 楼主| 发表于 2019-3-8 15:04:38 | 显示全部楼层
kkfromch@tj 发表于 2019-3-8 14:56
DoAfterSpecial
Script function

这个要结合我另一个帖子中的内容,加一个标志,我上代码:
  1. function walk_wait()
  2.        EnableTriggerGroup("walk",true)
  3.            EnableTrigger("hp12",true)
  4.            if isFlood then
  5.               wait.make(function()
  6.                       wait.time(1)
  7.                   end)
  8.            end
  9.            if tmp.find then
  10.                  create_timer_s('walkWait',0.5,'walkTimer')
  11.                   if cntr1() > 0 then
  12.              exe('alias action 正在赶路中')
  13.                   else
  14.                      cntr1 = countR(15)
  15.                   end
  16.            else
  17.                  exe('alias action 正在赶路中')                --增加此指令,快速赶路 by freely
  18.                          antiFlood="walkTimer"
  19.                          DoAfterSpecial(0.35,'return AntiFloodTimer()',12)
  20.              --create_timer_s('walkWait',0.35,'walkTimer')   --0.1改为0.35 by freely
  21.            end
  22. end
  23. function walkTimer()
  24.     --EnableTriggerGroup("walk",true)
  25.     exe('alias action 正在赶路中')
  26. end
  27. function walk_goon()
  28.     antiFlood=""
  29.         EnableTriggerGroup("walk",false)
  30.     EnableTimer('walkwait',false)
  31.         EnableTrigger("hp12",false)
  32.         if tmp.find then
  33.        return searchFunc()
  34.         end
  35.         EnableTrigger("hp12",true)
  36.     create_timer_s('roadWait',road.wait,'path_start')
  37. end
复制代码


然后定义AntiFloodTimer
  1. --Anti Flood
  2. function AntiFloodTimer()
  3.     print('Anti Flood Sucessful!   antiFlood='..antiFlood)
  4.     if antiFlood=="" then
  5.            return
  6.         elseif antiFlood=="duCjiang_start"then
  7.            if string.find(locl.room,'长江') then
  8.               check_busy(duCjiang_start())
  9.            else
  10.               walk.make(function()
  11.                       wait.time(1)
  12.                           check_bei(walk_wait())
  13.                         end)
  14.            end
  15.         elseif antiFlood=="duhe"then
  16.            if string.find(locl.room,'渡口') then
  17.                  check_bei(duHhe_start())
  18.            else
  19.               walk.make(function()
  20.                       wait.time(1)
  21.                           check_bei(walk_wait())
  22.                         end)
  23.            end
  24.         elseif antiFlood=="hqgzc_askNPC" then
  25.             if flag.find==1 then
  26.                     exe('look')
  27.             else
  28.                     return walk_wait()
  29.                 end
  30.     else
  31.             return _G[antiFlood]()
  32.         end
  33. end
复制代码

评分

1

查看全部评分

门派:明教
发表于 2019-3-8 15:07:52 | 显示全部楼层
freely@tj 发表于 2019-3-8 15:04
这个要结合我另一个帖子中的内容,加一个标志,我上代码:

很不错,等我测试一下子!
门派:武当派
 楼主| 发表于 2019-3-8 15:13:43 | 显示全部楼层
kkfromch@tj 发表于 2019-3-8 15:07
很不错,等我测试一下子!

这样可以把那个赶路的提示减少到最低,一般最多出现两个,大多数只会出现一个
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-6-17 23:02 , Processed in 0.048293 second(s), 26 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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