canglan 发表于 2012-11-17 19:20:54

新人学mush,想求指教

哪位高手写个打坐机器人和hp之后能自动显示血量的机器人,最好能注明 “发送给”哪里选哪个

北大侠客行MUD,中国最好的MUD

canglan 发表于 2012-11-17 19:23:26

自己写的那个
匹配 ^[>]*\s*【 气血 】\s+(\d+)\s+/\s+(\d+)\s+\[\s*(\d+)\%]\s+【 内力 】\s+(\d+)\s+./\s+(\d+)\s+.*$
发送 say %1 %2 %3 %4 %5
发送到:选脚本解释器

但是无法触发到

canglan 发表于 2012-11-17 19:23:30

自己写的那个
匹配 ^[>]*\s*【 气血 】\s+(\d+)\s+/\s+(\d+)\s+\[\s*(\d+)\%]\s+【 内力 】\s+(\d+)\s+./\s+(\d+)\s+.*$
发送 say %1 %2 %3 %4 %5
发送到:选脚本解释器

但是无法触发到

flauto 发表于 2012-11-17 19:26:53

回复 2# canglan


    发送到选第一个(默认的那个)

dnd 发表于 2012-11-17 21:48:05

本帖最后由 dnd 于 2012-11-18 01:51 AM 编辑

require "wait"
-- ------------------------------------------------- 初始化一些必要的数据-- -----------------------------------------------function init ()      wait.make (function()                while true do                        cmd_count = 0                        cmd_count_start = GetInfo (232)                        wait.time (1)                end      end)end
-- ------------------------------------------------- 防止输入指令过快-- -----------------------------------------------function anti_toofast()      local t      cmd_count = cmd_count + 1      if cmd_count < 15 then return end      cmd_count_end = GetInfo (232)      t = cmd_count_end - cmd_count_start      t = 1 - (t - t%0.1) + 0.1      if t < 0.1 then t = 0.1 end      print ("输入指令速度控制:等待"..t.."秒...")      wait.time (t)end
-- ------------------------------------------------- 执行函数,加入了anti_toofast()-- -----------------------------------------------runre = rex.new ("([^;*\\\\]+)")function exe (str)      if str == "" or str == nil then return end      _cmds = {}      local i = 0      n = runre:gmatch (str, function (m, t)                i = i + 1                _cmds = m      end)      if (_cmds == nil) then return end      for i, cmd in pairs (_cmds) do                anti_toofast()                Queue (cmd, 0)                        Note (cmd)      endend

-- -----------------------------------------------
-- 获取hp信息
-- -----------------------------------------------
function get_hpinfo()
      local m={}
      exe("hpbrief")
      l,w=wait.regexp("#(.*),(\\d+),(\\d+),(\\d+),(\\d+),(\\d+)")
      m.exp=w
      m.pot=w
      m.neili_max=w*1
      m.neili_cur=w*1
      m.jingli_max=w*1
      m.jingli_cur=w*1
      l,w=wait.regexp("#(.*),(\\d+),(\\d+),(\\d+),(\\d+),(\\d+)")
      m.qixue_max=w*1
      m.qixue_percent=w*1
      m.qixue_cur=w*1
      m.jingshen_max=w*1
      m.jingshen_percent=w*1
      m.jingshen_cur=w*1
      m.qixue_zb=m.qixue_cur*100/m.qixue_max
      m.neili_percent=m.neili_cur*100/m.neili_max
      m.hpb=m.qixue_cur*10/(m.neili_cur+1)
      return m
end

-- -----------------------------------------------
-- dazuo到双倍内力,误差小于26内力小点
-- -----------------------------------------------
function dazuo()
      while true do
                hp=get_hpinfo()
                if hp.qixue_cur>=hp.qixue_max*0.9 then
                        if hp.jingshen_cur>=hp.jingshen_max*0.9 then
                              if hp.neili_cur>=(hp.neili_max*2-26) then
                                        print("打坐双倍内力完毕!")
                                        break
                              else
                                        if (hp.neili_max*2-hp.neili_cur-10) > (hp.qixue_cur*0.91-1) then
                                                exe("dazuo "..(hp.qixue_cur*0.91-1)/1.3)
                                                l,w=wait.regexp("你运功完毕,深深吸了口气,站了起来。|你将真气在体内沿脉络运行了一圈,缓缓纳入丹田,放下手,长吐了一口气。|你只觉神元归一,全身精力弥漫,无以复加,忍不住长啸一声,徐徐站了起来。")
                                        else
                                                exe("dazuo "..(hp.neili_max*2-hp.neili_cur-10)/1.3)
                                                l,w=wait.regexp("你运功完毕,深深吸了口气,站了起来。|你将真气在体内沿脉络运行了一圈,缓缓纳入丹田,放下手,长吐了一口气。|你只觉神元归一,全身精力弥漫,无以复加,忍不住长啸一声,徐徐站了起来。")
                                        end
                              end
                        else
                              exe("exert regenerate")
                        end
                else
                        exe("exert recover")
                end
      end
end
这个可以做成插件,比如上述代码作为mylib.lua,插件代码为:
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE muclient>
<!-- Saved on 星期五, 十一月 09, 2012, 8:48 上午 -->
<!-- MuClient version 4.84 -->

<!-- Plugin "dazuo" generated by Plugin Wizard -->

<muclient>
<plugin
   name="dazuo"
   id="b6a5dab140f604c9559af393"
   language="Lua"
   date_written="2012-11-09 08:46:53"
   requires="4.84"
   version="1.0"
   >

</plugin>


<!--Get our standard constants -->

<include name="constants.lua"/>

<!--Aliases-->

<aliases>
<alias
   name="dazuo_start"
   script="main"
   match="#dazuo"
   enabled="y"
   sequence="100"
>
</alias>
</aliases>

<!--Script-->


<script>
<![CDATA[
require "mylib"
require "wait"


DeleteTemporaryAliases ()
DeleteTemporaryTimers ()
DeleteTemporaryTriggers ()

function main()

init()

wait.make(function()

dazuo()

end)

end

AddAlias("dazuo_start","#dazuo","",alias_flag.Enabled + alias_flag.Replace,"main")

]]>
</script>


</muclient>


把F12的宏设置成#dazuo,
这样以后按F12就会自动打坐到双倍内力。

dnd 发表于 2012-11-17 21:50:29

额。。排版乱了,凑乎看吧yct63.

labaz 发表于 2012-11-18 00:01:55

本帖最后由 labaz 于 2012-11-18 12:03 AM 编辑

额。。排版乱了,凑乎看吧
dnd 发表于 2012-11-17 09:50 PM http://pkuxkx.com/forum/images/common/back.gif

少了一堆函数,你这插件给谁用啊yct7

dnd 发表于 2012-11-18 09:45:37

少了一堆函数,你这插件给谁用啊
labaz 发表于 2012-11-17 04:01 PM http://pkuxkx.com/forum/images/common/back.gif


    我封装了一下,你可能没有仔细看,没关系,我解释一下:
插件require wait和mylib。wait是lua线程封装库,mylib是自己写的库,实现dazuo()函数。
dazuo()用的是get_hpinfo()提取hp信息,exe()是发送命令,支持分号,自动防止一次性指令过长,自动断点停顿。

工作很正常啊,dazuo到双倍内力,误差小于26内力小点,缺点没有疗伤,自己加上就好。我9号写好用到现在,还没有出现问题。

dnd 发表于 2012-11-18 10:00:16

附上插件,函数库编译过。用法:
1,把mylib.lua放到mush根目录,或根目录里的lua文件夹下。
2,载入插件dazuo.xml
3,游戏中输入#dazuo
4,为了方便,按键F12可以设置成#dazuo,以后按下F12就自动打坐双倍内力。

zhongbushi 发表于 2012-11-18 10:16:41

回复 9# dnd


    没想到啊,yct43.童童居然是技术流选手……赶紧开发全自动机器人~
页: [1] 2 3
查看完整版本: 新人学mush,想求指教