找回密码
 注册
搜索
查看: 2373|回复: 24

小白学mush(第五篇)《如何应对送信flood》

[复制链接]
门派:明教
发表于 2018-12-12 02:37:28 | 显示全部楼层 |阅读模式
送信flood大概是所有flood中比较难以解决的,因为在到达目的地后,它并不是直接把信送给npc,而是先执行了一个checkbags(),看看背包里有没有信件,如果有的话送信,如果没有的话checkheal()。

而即便是送信,它也在外边嵌套了一个checknext(),所以就让情况变得异常复杂,假如flood吞掉了checkbags的指令,就会导致判断语句读取不到信件,而checkheal()的指令也相继吞掉,最后它会执行checknext()

下面附上一次送信flood的报错log——

http://www.sjever.net/bbs/forum.php?mod=viewthread&tid=215288

> 卧室 -
    这里是五毒教教主何铁手的卧室,屋内陈设典雅,芳香扑鼻.窗旁摆放着几
盆鲜花,墙上挂着一把宝剑。
    这里唯一的出口是 north。
  五毒教主 何铁手(He tieshou)
  穆子的尸体(Corpse)
> > > > > > > > > > > > 你把 "action" 设定为 "继续前进" 成功完成。
> 恭喜!您现在的新绰号是:「赶路中」
> 你决定用碧海潮生功作为你的内功。
> 你现在不忙。
> 你身上携带物品的别称如下(右方):
1: 信件 = letter, xin, secret letter
2: 石子 = shizi, shi
3: 三才无极箫 = wuji xiao, wuji, xiao, xiao

大家可以看到,在到达目的地后,本来是要给何铁手送信,但因为flood吞掉了一系列的指令,最后只剩下了checknext(),它是一个计时器的函数,不断地重复发送alias action "继续前进",于是就变成了送信任务不做了,跑去宋远桥那里发呆。

一次最少发呆8分钟,可谓危害巨大!

评分

1

查看全部评分

门派:姑苏慕容
发表于 2019-1-2 21:26:37 来自手机 | 显示全部楼层
原因是丢掉信笺的可能性小,没有必要冒flood的风险check。实践证明是可行的。checkbags就留到渡江渡河,岳灵姗等必定busy的地方就可以了
门派:神龙教
发表于 2018-12-12 02:41:52 | 显示全部楼层
你这么晚还不睡啊。。。。。。。
门派:神龙教
发表于 2018-12-12 02:42:35 | 显示全部楼层
这个问题你可以参照我的locate方式做修改。。。。。。
门派:明教
 楼主| 发表于 2018-12-12 02:55:36 | 显示全部楼层
我暂时想了个不算完美的办法,就是在送信1(直送)模式下,到达目的地后,选择说一句话,如果触发器收到这句话,表示flood已经过去;如果没收到,则每隔1秒发送一次这句话!

打开songxin.lua——

function songxin_send(n,l,w)
    EnableTrigger("songxin_find1",false)
    if flag.wait==0 then
       flag.wait=1
       sxjob.cnt=1
       sxjob.id=string.lower(w[1])
           create_trigger_t('flagsongxin',"^(> )*无法风是大帅比!",'','flagsongxinclose')
       exe('follow '..sxjob.id)
           exe('say 无法风是大帅比!')
           create_timer_s('sxflag',1.0,'sxflag')
       checkBags()
       return checkNext(songxin_check)
       --return check_halt(songxin_send_act)
    end
end
function sxflag()
        exe('say 无法风是大帅比!')
end
function flagsongxinclose()
        DeleteTimer("sxflag")
        EnableTrigger("flagsongxin",false)
end

function songxin_check()   
    if Bag["信件"] then
       return check_halt(songxin_send_act)
    else
       return check_heal()
    end
end
function songxin_send_act()
    exe('halt;songxin '..sxjob.id)
    tmp.cnt = 0
        EnableTrigger("hp12",true)
    create_timer_s('songxin',1,'songxin_act_set')
end
function songxin_act_set()
    EnableTrigger("hp12",false)
    if tmp.cnt then
           tmp.cnt = tmp.cnt + 1
        end
    if not tmp.cnt or tmp.cnt > 50 then
       return check_heal()
    end
    exe('halt;songxin '..sxjob.id..' '..sxjob.cnt)
end

红色是添加的部分,当然这么做也有风险,一旦说完这句话,遭遇了flood,那就点子太背了!

所以比较稳妥的做法是到达目的地后等待2秒再发指令,不过考虑到送信1(直送)经验很少,不值得再浪费2秒等待,所以我只能选择这种方式了。

如果有高手知道更好的办法,请不吝赐教!

门派:明教
 楼主| 发表于 2018-12-12 02:57:33 | 显示全部楼层
<!-- Produced by MUSHclient v 4.84 - www.mushclient.com -->


> 兵营 -
    这里是一个兵营,因为要防御蒙古铁骑的进攻,所以城里的兵大多都开到
城外和城墙上守城去了,这里只有几个留守的官兵。两个武将面有忧色地凑在
一起在谈论着什么。
    这里唯一的出口是
south
  二位武将(Wu jiang)
  焦兰的尸体(Corpse)
  四位官兵(Guan bing)
  墨戟(Mo ji)
  舒合的尸体(Corpse)
> 兵营 -
    这里是一个兵营,因为要防御蒙古铁骑的进攻,所以城里的兵大多都开到
城外和城墙上守城去了,这里只有几个留守的官兵。两个武将面有忧色地凑在
一起在谈论着什么。
    这里唯一的出口是
south
  二位武将(Wu jiang)
  焦兰的尸体(Corpse)
  四位官兵(Guan bing)
  墨戟(Mo ji)
  舒合的尸体(Corpse)
> 你现在不忙。
> 你现在不忙。
> 你决定跟随墨戟一起行动。
> 你说道:「无法风是大帅比!」
> 你身上携带物品的别称如下(右方):
1:
信件 = letter, xin, secret letter
2:
黄金 = gold, gold_money
3: 石子 = shizi, shi
4: 粗绳子 = cu shengzi, shengzi
5: 火折 = fire, huozhe
6:
白银 = silver, silver_money
7: 三才
无极箫 = wuji xiao, wuji, xiao, xiao
8:
龙灵浩气剑 = haoqi sword, haoqi, jian, sword
9: 菜谱 = cai pu, pu, hong's menu
10: 痘疹定论 = douzhen dinglun, medicine book
11: 木剑 = mu jian, jian
12: 背囊 = bei Nang, nang, bag
13:
紫长衫 = cloth
14:
黄龙甲胄 = huanglong armor, huanglong, armor
15:
九幽靴 = jiuyou boot, jiuyou, boot
16:
紫虹手套 = zihong glove, zihong, glove
17:
贵宾卡 = VIP Card, card
18:
龙凤玉佩 = jade
19:
翡翠玉镯 = bangle
20:
紫晶项链 = necklace
21:
黄金头饰 = headgear
22:
白金指环 = ring
23:
铜钱 = coin, coins, coin_money
> 你身上带着二十三件东西(负重 12.61%):
  十八锭
黄金(Gold)
  四百五十二颗石子(Shizi)
  二十七两
白银(Silver)
  二十六文
铜钱(Coin)
三才无极箫(Wuji xiao)
背囊(Bei Nang)
紫长衫(Cloth)
黄龙甲胄(Huanglong armor)
九幽靴(Jiuyou boot)
紫虹手套(Zihong glove)
贵宾卡(VIP Card)
龙凤玉佩(Jade)
翡翠玉镯(Bangle)
紫晶项链(Necklace)
黄金头饰(Headgear)
白金指环(Ring)
  一柄木剑(Mu jian)
  一本痘疹定论(Douzhen dinglun)
  一本菜谱(Cai pu)
  一柄
龙灵浩气剑(Haoqi sword)
  一条粗绳子(Cu shengzi)
  一封
信件(Letter)
  一支火折(Fire)
> 你的背囊里有:
  五颗
活血疗精丹(Huoxue dan)
  十颗
川贝内息丸(Chuanbei wan)
  十六颗
蝉蜕金疮药(Chantui yao)
  十二颗
黄芪内息丹(Huangqi dan)
  三颗
大还丹(Dahuan dan)
  一千二百块
金矿石(Jinkuang shi)                  【零级
  一千块
铁矿石(Tiekuang shi)                      【零级
  一百四十块
铜矿石(Tongkuang shi)                 【零级
  十四块
银矿石(Yinkuang shi)                      【零级
  三千三百三十团
原丝(Raw silk I)                  【一级】
  一百一十五块
精铁魄(Jingtie po I)                【一级】
> 你目前已经拥有了五件私有装备:紫虹手套,龙灵浩气剑,九幽靴,黄龙甲胄,三才无极箫
> 你把 "action" 设定为 "检查包裹" 成功完成。
> 你把 "action" 设定为 "继续前进" 成功完成。
> 你现在不忙。
> 你现在不忙。
> 你擦了一把额头的汗,从怀中掏出信交给墨戟说道,这是段王爷让在下送给您的信,请您收好。
墨戟接过信看了看,点了点头说道:这位兄台辛苦你了。
好!任务完成,你被奖励了:八十四点实战经验,十七点潜能。零点正神。
你为镇南王府成功送信二千零六十三次。
墨戟顺手在信上勾画了几下,然后合上信封,又交还给了你。
墨戟在你的耳边悄声说道:你赶紧把它送到「塘沽城钱庄」的「郭奉」手上。
墨戟在你的耳边悄声说道:可能有个武功和你相比
微不足道的家伙要来抢你的信,你应该随便对付几下就可以了吧。
你可以选择同意或者放弃不做(no)。
> 你把 "action" 设定为 "正在定位" 成功完成。
> 在这个房间中, 生物及物品的(英文)名称如下:
无法风 = kkfromch
焦兰的尸体 = corpse, shi ti
舒合的尸体 = corpse, shi ti
官兵 = guan bing, bing, guanbing
官兵 = guan bing, bing, guanbing
官兵 = guan bing, bing, guanbing
官兵 = guan bing, bing, guanbing
武将 = wu jiang, wujiang, wu, jiang
武将 = wu jiang, wujiang, wu, jiang
> 设定环境变量:look = "YES"
> 【你现在正处于襄阳城
                                               
                                    
                           
兵营               
                             |     
                           南城巷              
兵营 -
兵营|南城巷兵营
    这里是一个兵营,因为要防御蒙古铁骑的进攻,所以城里的兵大多都开到
城外和城墙上守城去了,这里只有几个留守的官兵。两个武将面有忧色地凑在
一起在谈论着什么。
    这里唯一的出口是
south
  二位武将(Wu jiang)
  焦兰的尸体(Corpse)
  四位官兵(Guan bing)
  舒合的尸体(Corpse)
> 现在是书剑庚戌年九月十三日巳时三刻。
您参与游戏的主机北京时间是 星期三 2018-十二月-12 02:50:55
                悉尼时间是 星期三 2018-十二月-12 05:50:55 (夏令时间)
      奥克兰、惠灵顿时间是 星期三 2018-十二月-12 07:50:55 (夏令时间)
      温哥华、洛杉矶时间是 星期二 2018-十二月-11 10:50:55
        多伦多、纽约时间是 星期二 2018-十二月-11 13:50:55
    柏林、罗马、巴黎时间是 星期二 2018-十二月-11 19:50:55
您已经连续玩了十六小时五十二分十三秒。
你最近玩了六十九天八小时二十六分二十一秒。
贵宾剩余时间:六百八十六天二十一小时三十八分三十三秒。
贵宾生效时间:二零一八年九月三十日零时二十九分二十八秒。
你共有贵宾累计时间:七百六十天。
> 你现在并没有跟随任何人。
> 你现在不忙。
> Ok.
> 你看了看信,决定还是不去了。
> 你身上包含下列特殊状态:
┌────────────────────────┐
│状态名称&#58853;&#58853;&#58853;&#58853;&#58853;约剩余时间&#58853;&#58853;&#58853;&#58853;&#58853;      类别│
├────────────────────────┤
│真实视野        &#58853;六百零一分              &#58853; ? │
└────────────────────────┘
当前你没有被判断为机器人。
> 你把 "action" 设定为 "等待一下" 成功完成。
> 你现在不忙。
> 取消全部技能准备。
> 你决定用旋风扫叶腿作为你的腿法。
> 完成拳脚技能准备。
> 你决定用落英神剑掌作为你的掌法。
> 完成拳脚技能准备。
> 恭喜!您现在的新绰号是:「去武当吃喝」



附上修改后的log
门派:明教
 楼主| 发表于 2018-12-12 03:04:02 | 显示全部楼层
<!-- Produced by MUSHclient v 4.84 - www.mushclient.com -->


> 正气堂 -
    这是华山掌门岳不群的居所「有所不为轩」,此处是前厅,厅上挂着「正
气堂」三字匾额。厅中很宽敞,却没什么摆设,靠墙放着两把交椅,这里是岳
不群议事、授徒的地方。
    这里明显的出口是
northsouth
  
芳草结叶行路「武当任务兰州城西城门」盘丝(Emxuanyi)
  
明教教主亲传弟子 少侠(Wdcm)
  丐帮第十八代帮主「学习读书写字」
小月亮(Zhubang)
  
华山派风清扬传人「华山任务中」孑孑子(Mutou)
  朝天一柱「洪七公任务嵩山观胜峰下」
慕容财红(Caihong)
  武当派第二代弟子「赶路中」王者荣耀(Mcyzcs)
  姑苏慕容第二代弟子「赶路中」慕容子弟(Mymr)
  
盍三脸上神色平和,身形凝重,稳如山岳。
  威德金刚脸上神色平和,身形凝重,稳如山岳。
  灭雨脸上红光隐现,双手搭落在膝盖上。
  渡宝脸上红光隐现,气象庄严。
  天龙寺第十三代弟子 本王(Wdwys)
  
万达影院头顶氤气蒸蒸,神色威严
  鹦鹉的尸体(Corpse)
  华山派第十三代掌门人「君子剑」岳不群(Yue buqun)
  华山派掌门夫人 宁中则(Ning zhongze)
> 你现在不忙。
> 你现在不忙。
> 你决定跟随岳不群一起行动。
> 你说道:「无法风是大帅比!」
> > > > > > > 岳不群对着盘丝点了点头。
你把 "action" 设定为 "继续前进" 成功完成。
> 恭喜!您现在的新绰号是:「赶路中」
> 你决定用碧海潮生功作为你的内功。
> 你现在不忙。
> 岳不群对着盍三点了点头。
你身上携带物品的别称如下(右方):
1:
信件 = letter, xin, secret letter
2: 皮靴 = normal boot, boot
3:
黄金 = gold, gold_money
4: 石子 = shizi, shi
5: 粗绳子 = cu shengzi, shengzi
6: 火折 = fire, huozhe
7:
白银 = silver, silver_money
8: 三才
无极箫 = wuji xiao, wuji, xiao, xiao



不幸被我言中了,说完那句话后真遇上了flood,汗!!
门派:明教
 楼主| 发表于 2018-12-12 03:43:15 | 显示全部楼层
经岛主启发,修改如下——

function songxin_send(n,l,w)
    EnableTrigger("songxin_find1",false)
    if flag.wait==0 then
       flag.wait=1
       sxjob.cnt=1
       sxjob.id=string.lower(w[1])
           create_trigger_t('flagsongxin','^(> )*你把 "action" 设定为 "检查包裹" 成功完成。$','','flagsongxinclose')
       exe('follow '..sxjob.id)
       checkBags()
           create_timer_s('sxflag',1.0,'sxflag')
       return checkNext(songxin_check)
       --return check_halt(songxin_send_act)
    end
end
function sxflag()
        checkBags()
end
function flagsongxinclose()
        DeleteTimer("sxflag")
        EnableTrigger("flagsongxin",false)
end

function flagsongxinclose()
        DeleteTimer("sxflag")
        EnableTrigger("flagsongxin",false)
end
function songxin_check()   
    if Bag["信件"] then
       return check_halt(songxin_send_act)
    else
       return check_heal()
    end
end
function songxin_send_act()
    exe('halt;songxin '..sxjob.id)
        create_timer_s('walkWait4',1.0,'songxin_send_act1')
    tmp.cnt = 0
        EnableTrigger("hp12",true)
    create_timer_s('songxin',1,'songxin_act_set')
end
function songxin_send_act1()
    exe('halt;songxin '..sxjob.id)
end


然后这些触发后边的所有函数开头,加关闭计时器语句DeleteTimer("walkWait4")

function songxin_find()
    DeleteTriggerGroup("songxin_find")
    create_trigger_t('songxin_find1','^>*\\s*\\D*'..job.target..'\\((\\D*)\\)','','songxin_send')
    create_trigger_t('songxin_find2','^>*\\s*你要送给谁','','songxin_goon')
    create_trigger_t('songxin_find3','^>*\\s*\\D*道:(这封信不是给我的,|你看清楚,)','','songxin_add')
    create_trigger_t('songxin_find4','^>*\\s*(这封信不是送给这个人的。|看清楚点,那是活人吗?!)','','songxin_add')
    create_trigger_t('songxin_find5','^>*\\s*你擦了一把额头的汗,从怀中掏出信交给','','songxin_finish')

    SetTriggerOption("songxin_find1","group","songxin_find")
    SetTriggerOption("songxin_find2","group","songxin_find")
    SetTriggerOption("songxin_find3","group","songxin_find")
    SetTriggerOption("songxin_find4","group","songxin_find")
    SetTriggerOption("songxin_find5","group","songxin_find")
    EnableTriggerGroup("songxin_find",false)
end
门派:丐帮
发表于 2018-12-12 06:19:16 | 显示全部楼层
技术贴,收藏一下备用。
门派:丐帮
发表于 2018-12-12 06:24:21 | 显示全部楼层
然后这些触发后边的所有函数开头,加关闭计时器语句DeleteTimer("walkWait4")

为什么要加那么多的关闭计时器呢?送信成功之后加一个关闭不就好了么?
对了说这个我想起来个事儿,你的少林领悟里面忘了加关闭计时器了吧?
门派:明教
 楼主| 发表于 2018-12-12 11:08:09 | 显示全部楼层
honglian@tj 发表于 2018-12-12 06:24
然后这些触发后边的所有函数开头,加关闭计时器语句DeleteTimer("walkWait4")

为什么要加那么多的关闭计 ...

要是送信的人不在,或者送错了,计时器已经被打开了,就会一直送信啊!

所以在所有有可能触发计时器的地方,都要加关闭指令。

领悟的程序你贴一下,我肯定是加了关闭的了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-6-8 21:00 , Processed in 0.043850 second(s), 28 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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