//没登陆

欢迎您来到凯恩之角,奈非天!

帖子:74

符文:55

31#
本帖最后由 zudikn 于 2019-7-4 11:50 编辑

六、代码分析
【一】分解和魔盒升级    -- 绝对水饺

  1. -------------------------------玩家设置-------------------------------

  2. YanChi = 30

  3. -------------------------------全局设置-------------------------------
  4. -- 鼠标左键默认不支持编程
  5. -- 写这句话可以让左键也支持编程
  6. EnablePrimaryMouseButtonEvents (true)

  7. -- 分解  需要手动打开铁匠铺的分解界面
  8. function FenJie()
  9.     -- 鼠标移动到分解按钮上
  10.     MoveMouseTo(6000,17000)                 
  11.     Sleep(100)
  12.     -- 点击鼠标左键
  13.     PressAndReleaseMouseButton(1)           
  14.     Sleep(50)
  15.     -- 循环60次,背包一共60个格子
  16.     k = 0
  17.     while k < 60
  18.     do
  19.         -- 一行10个, k / 10 = y ... x
  20.         -- %运算就是取余数
  21.         X = k % 10            -- 分解列
  22.         -- math.floor函数是LUA的math库里的,是下取整的意思
  23.         Y = math.floor(k/10)  --分解行
  24.         
  25.         -- 移动到对应的格子上
  26.         
  27.         -- 写代码的时候可以用GetMousePosition函数获取鼠标位置
  28.         -- (49000,36000)是背包第一个格子的位置
  29.         -- 1700,3000是偏移量
  30.         MoveMouseTo(49000+1700*X,36000+3000*Y)
  31.         Sleep(2)
  32.         
  33.         -- 点击鼠标左键
  34.         PressAndReleaseMouseButton(1)
  35.         Sleep(2)
  36.         -- 点击回车键
  37.         PressAndReleaseKey("Enter")
  38.         Sleep(2)
  39.         
  40.         -- 应该点击一次鼠标回车就够了...
  41.         -- 点击鼠标左键
  42.         PressAndReleaseMouseButton(1)
  43.         Sleep(2)
  44.         -- 点击回车键
  45.         PressAndReleaseKey("Enter")
  46.         
  47.         
  48.         Sleep(2)
  49.         k = k + 1
  50.     end
  51. end

  52. -- 魔盒
  53. function MoHe(i)
  54.     k = 0
  55.     while k<(60/i) and  IsKeyLockOn("capslock")
  56.     do
  57.         X = k % 10-- 物品列
  58.         Y=math.floor(k/10)--物品行
  59.         MoveMouseTo(49000+1700*X,36000+3000*Y*i)--物品
  60.         Sleep(YanChi)
  61.         PressAndReleaseMouseButton(3)
  62.         Sleep(YanChi)
  63.         MoveMouseTo(24500, 50500)--材料
  64.         Sleep(YanChi)
  65.         PressAndReleaseMouseButton(1)
  66.         Sleep(YanChi)
  67.         MoveMouseTo(8400, 50500)--重铸
  68.         Sleep(YanChi)
  69.         PressAndReleaseMouseButton(1)
  70.         Sleep(YanChi)
  71.         -- 升级有个时间较长的过长动画
  72.         -- 这里用了点击下一页再点击上一页取出装备
  73.         MoveMouseTo(29000, 50500)--下一页
  74.         Sleep(YanChi)
  75.         PressAndReleaseMouseButton(1)
  76.         Sleep(YanChi)
  77.         MoveMouseTo(20000, 50500)--上一页
  78.         Sleep(YanChi)
  79.         PressAndReleaseMouseButton(1)
  80.         Sleep(YanChi)
  81.         k=k+1
  82.     end
  83. end

  84. -- OnEvent触发事件,能捕捉鼠标动作,每次都从这里开始
  85. function OnEvent(event, arg)
  86.     -- 按下G3键分解
  87.     if(event=="MOUSE_BUTTON_PRESSED" and arg==3) then
  88.         FenJie()  -- 调用函数
  89.     end
  90.     --按下G5键升级一格黄装
  91.     if(event=="MOUSE_BUTTON_PRESSED"and arg==5 ) then  
  92.         PressKey("capslock")
  93.         ReleaseKey("capslock")
  94.         Sleep(200)
  95.         MoHe(1)
  96.     end
  97.     --G4键两格黄装
  98.     if(event=="MOUSE_BUTTON_PRESSED"and arg==4 ) then
  99.         PressKey("capslock")
  100.         ReleaseKey("capslock")
  101.         Sleep(200)
  102.         MoHe(2)
  103.     end
  104. end
复制代码
如果你点击G4,会发现不能停止这个事件,必须等他执行完
如果你快速点击两次G4,它就会连续执行两遍

两次点击G4,OnEvent函数就会捕捉到两次点击事件
对于目前的知识量来说,我主要想说明两点问题
1. 每次只能执行一个事件,它没结束时,不能执行别的事件
    如果一个宏编的很长,你不小心点了却没法停止,会很烦人
2. 有个存储你事件的地方(我们姑且称为"消息队列"),会在执行完这次事件后,接着执行接下来的事件
    这个会造成消息堵塞,也就是你的消息会先加入消息队列,不能及时处理,需要等他前面的都处理完
    这个问题以后再讲

第一个问题的解决方案
升级黄装里用了 大写锁定指示灯  当作循环判定条件
这个思路很不错,因为所有的鼠标事件都会加入到消息队列,键盘按键却能直接影响代码
不过罗技API只能获取ctrl,alt,shift和三个指示灯的状态

发表于 2019-7-3 09:44:30 |显示全部楼层

帖子:5

符文:10

32#
不会用啊,可以语音指导吗
发表于 2019-7-3 10:58:25 来自凯恩之角App |显示全部楼层

帖子:74

符文:55

33#
王大锤与多肉 发表于 2019-7-3 10:58
不会用啊,可以语音指导吗

哪里不会呀,跟着学习一遍差不多啊
发表于 2019-7-3 11:11:10 来自凯恩之角App |显示全部楼层

帖子:490

符文:2

34#
回去自己研究研究!!!!!!!!!!
发表于 2019-7-3 11:56:14 |显示全部楼层

帖子:830

符文:234

35#
非常不错!

建议在第一页注明下面第几楼有什么什么的详细分析,那么方便大家直接找到详细的代码解读。

辛苦!
发表于 2019-7-3 12:03:31 |显示全部楼层

帖子:398

符文:58

36#
学习了
发表于 2019-7-3 18:13:44 |显示全部楼层
[armory]http://hero.d.163.com/hero/cn/%E5%B0%8F%E5%B0%8F%E4%B9%8B%E6%A4%8D%E7%89%A9-58966/46566578[/armory]

帖子:74

符文:55

37#
本帖最后由 zudikn 于 2019-7-4 11:50 编辑

六、代码分析
【二】"仙林四精控宏"无缝切换    -- 狂野之弦
上回我们说到可以用ctrl、alt、shift和三个指示灯来改变代码的运行状态

这回我们来看看用
PlayMacro和AbortMacro函数的操作

PlayMacro( macroname )函数有一个参数,代表宏的名字,这个宏是 "多键-开始录制" 那里的
这么函数同一时间只能运行一个宏
调用宏时有运行的宏,如果和运行的宏相同,加入队列,否则,不会有任何效果
AbortMacro()函数停止运行中的宏
这个脚本的注释够清楚了,我只放一个链接   "仙林四精控宏"无缝切换


这种方式其实已经很好了,毕竟录制宏简单,写脚本麻烦
只用宏需要关闭一个,打开另一个
这里用脚本来协助切换,少了关闭的步骤,同理 天谴跑马之类的 也可以这么做

既然是脚本分析,我还是写个简单明了的,帮助理解吧
我的想法是,G4是一个宏,G5一个宏
按下G4,有三种情况
    1. 没有宏运行,直接运行G4的宏
    2.G4的宏在运行,关闭G4的宏
    3.其他的宏在运行,关闭运行的宏,并运行G4的宏
按下G5的情况和G4差不多
代码中我就直接把他们的宏名叫"G4"和"G5"了

  1. CurrrntMacro = ""  -- 当前正在执行的宏名
  2. function OnEvent(event, arg)
  3.     if (event == "MOUSE_BUTTON_PRESSED" and arg == 4) then
  4.         if (CurrentMacro == "") then
  5.             PlayMacro("G4")
  6.             CurrentMacro = "G4"
  7.         elseif (CurrentMacro == "G4") then
  8.             AbortMacro()
  9.             CurrentMacro = ""
  10.         else
  11.             AbortMacro()
  12.             PlayMacro("G4")
  13.             CurrentMacro = "G4"
  14.         end
  15.     end
  16.     if (event == "MOUSE_BUTTON_PRESSED" and arg == 5) then
  17.         if (CurrentMacro == "") then
  18.             PlayMacro("G5")
  19.             CurrentMacro = "G5"
  20.         elseif (CurrentMacro == "G5") then
  21.             AbortMacro()
  22.             CurrentMacro = ""
  23.         else
  24.             AbortMacro()
  25.             PlayMacro("G5")
  26.             CurrentMacro = "G5"
  27.         end
  28.     end
  29. end
复制代码
发表于 2019-7-4 11:40:24 |显示全部楼层

帖子:674

符文:14

38#
问一下 .lua文件怎么导入罗技鼠标.我看大部分都是.xml配置文件
发表于 2019-7-4 12:33:34 |显示全部楼层

帖子:74

符文:55

39#
本帖最后由 zudikn 于 2019-7-4 12:35 编辑
艾麗塔 发表于 2019-7-4 12:33
问一下 .lua文件怎么导入罗技鼠标.我看大部分都是.xml配置文件

第一节 罗技宏编写里有
发表于 2019-7-4 12:34:34 来自凯恩之角App |显示全部楼层

帖子:7514

符文:40

40#
求雷蛇宏!没有罗技!
发表于 2019-7-4 12:37:26 来自凯恩之角App |显示全部楼层

帖子:674

符文:14

41#
本帖最后由 艾麗塔 于 2019-7-4 12:46 编辑
zudikn 发表于 2019-7-4 12:34
第一节 罗技宏编写里有
并没有怎么导入lua文件 不过我知道怎么导入了 谢谢你的热心回答
发表于 2019-7-4 12:39:45 |显示全部楼层

帖子:74

符文:55

42#
艾麗塔 发表于 2019-7-4 12:39
确定吗.只有导入.并没有说lua文件怎么导入啊

一般下载的都是xml文件,里有脚本代码
全是脚本写的,复制粘贴进编写脚本里就行
发表于 2019-7-4 12:48:41 |显示全部楼层

帖子:74

符文:55

43#
幻术小菠萝 发表于 2019-7-4 12:37
求雷蛇宏!没有罗技!

我没有雷蛇鼠标,雷蛇不能编写脚本
宏的设置应该都差不多

如果不同的话,可以附带截图问  

留个暴雪账号问也行
发表于 2019-7-4 12:53:31 |显示全部楼层

帖子:114

符文:0

44#
用宏这么光明正大了么
发表于 2019-7-5 04:43:59 |显示全部楼层

帖子:664

符文:88

45#
想学 但看不懂
发表于 2019-7-6 02:36:13 来自凯恩之角App |显示全部楼层
您需要登录后才可以回帖 登录 | 注册网易通行证