菜单
2019-9-8 18:05 1527 9 1 0 1

登陆查看完整内容

您需要 登录 才可以下载或查看,没有帐号?注册






   扩展技能栏更新之后,能排放宠物按键的地方也多了很多,甚至在召唤的过程中切换技能栏的容错率也小了很多。在这篇文章中我就来教大家如何写一段完整的宠物召唤宏,还不熟悉G502设置的话可以先浏览逻辑G系列鼠标-宠物召唤宏(1)


  • 快捷键设置

   如果用宏来召唤宠物会涉及很多快捷键的调用,设置的不合理会与正常释放技能的按键发生冲突,通常是蓄力技能(蓄力技能最好设置到F1-F12)和召唤按键的冲突,所以合理设置快捷键是很有必要,以下是我的快捷键。


1.png 取消.png
快捷.png




  • 代码实现

  1. --按键设置类 保存宠物对应的技能栏和按键--
  2. Skills = {
  3.         skill = "", --技能栏快捷键
  4.         backSkill ="", --默认技能栏
  5.         petKeys = {}, --技能栏上宠物对应的按键[1~=]
  6.         waitSleep = 500 --宠物召唤后停留500毫秒后取消召唤,该值为默认值
  7. }
  8. function Skills:new(skill,backSkill,petKeys,waitSleep)
  9.     local o = {};
  10.     setmetatable(o, self);
  11.     o.skill = skill;
  12.         o.backSkill = backSkill;
  13.         o.petKeys = petKeys;
  14.         o.waitSleep = waitSleep;
  15.         return o;
  16. end
复制代码


  1. --当前宠物索引及技能栏索引
  2. CurrentIds = {
  3.         currentSkillIndex = 1,
  4.         currentPetIndex = 1
  5. }

  6. function CurrentIds:new(currentSkillIndex,currentPetIndex)
  7.         local o = {};
  8.         setmetatable(o, self);
  9.         o.currentSkillIndex = currentSkillIndex;
  10.         o.currentPetIndex = currentPetIndex;
  11.         return o
  12. end
复制代码



看下我的古龙设置位置,举例我古龙设置的第一个技能栏是6号,代码中第一个Skills的“semicolon对应的是“;” ,
“tide” 对应的是“·”

古龙6.png
古龙5.png
古龙4.png
  1. --古龙
  2. G5CurrentIds = CurrentIds:new(1,1)
  3. G5Skills = {
  4.                 Skills:new("semicolon","tilde",{"1","2","3","4","5","6","7","8","9","0","minus","equal"},550),
  5.                 Skills:new("quote","tilde",{"1","2","3","4","5","6","7","8","9","0","minus","equal"},550),
  6.                 Skills:new("4","tilde",{"6","7","8","9","0","minus","equal"},550)
  7. }
复制代码





这是具体的宠物召唤实现
  1. --currentIds 记录当前宠物所在的技能栏以及键位
  2. --skills 技能栏集合
  3. --isChange2 是否切换到扩展技能栏2 默认true
  4. --召唤古龙

  5. function DragonCallNext(currentIds,skills,isChange2)
  6.         OutputLogMessage("skillslength = %s  ",table.getn(skills));
  7.         OutputLogMessage("currentSkillIndex = %s  ",currentIds.currentSkillIndex);

  8.         skill = skills[currentIds.currentSkillIndex];
  9.         pets = skill.petKeys;
  10.         pet = pets[currentIds.currentPetIndex];
  11.         OutputLogMessage("pet = %s",(currentIds.currentPetIndex));
  12.         --召唤前先取消宠物
  13.         PressKey(skill.backSkill);
  14.         ReleaseKey(skill.backSkill);
  15.         Sleep(100)
  16.         if(isChange2 == true) then
  17.                 PressKey("lalt");
  18.                 PressKey("v");
  19.                 ReleaseKey("lalt");
  20.                 ReleaseKey("v");
  21.         end
  22.         --切换到技能栏
  23.         if(skill.skill == "4" or skill.skill == "3" or skill.skill == "2") then
  24.                 PressKey("lalt");
  25.                 PressKey(skill.skill);
  26.                 ReleaseKey("lalt");
  27.                 ReleaseKey(skill.skill);
  28.         else
  29.                 PressKey(skill.skill);
  30.                 ReleaseKey(skill.skill);
  31.         end
  32.         --召唤宠物
  33.         PressKey(pet);
  34.         ReleaseKey(pet);
  35.         --Sleep(100)
  36.         --切换回默认技能栏
  37.         PressKey("lalt");
  38.         PressKey(skill.backSkill);
  39.         ReleaseKey("lalt");
  40.         ReleaseKey(skill.backSkill);

  41.         if(isChange2 == true) then
  42.                 PressKey("lalt");
  43.                 PressKey("v");
  44.                 ReleaseKey("lalt");
  45.                 ReleaseKey("v");
  46.         end
  47.         Sleep(550)
  48.         --取消宠物
  49.         PressKey(skill.backSkill);
  50.         ReleaseKey(skill.backSkill);
  51.         --Sleep(300)
  52.         --更新技能栏以及宠物键位
  53.         if(currentIds.currentPetIndex < table.getn(pets)) then
  54.                 currentIds.currentPetIndex = currentIds.currentPetIndex + 1;
  55.         else
  56.                 currentIds.currentSkillIndex = currentIds.currentSkillIndex + 1;
  57.                 currentIds.currentPetIndex = 1;
  58.         end
  59.         if(currentIds.currentSkillIndex > table.getn(skills)) then
  60.                 currentIds.currentSkillIndex = 1;
  61.                 currentIds.currentPetIndex = 1;
  62.         end
  63.         return currentIds;
  64. end
复制代码




G键触发事件
  1. function OnEvent(event, arg)
  2.         --G5
  3.         if (event == "MOUSE_BUTTON_RELEASED" and arg == 5) then
  4.                 OutputLogMessage("in MOUSE_BUTTON_RELEASED 5 \n");
  5.                 G5CurrentIds=DragonCallNext(G5CurrentIds,G5Skills,true)
  6.         end
  7. end
复制代码




  • 附上本人使用的完整的代码
  1. ----------------
  2. --   洛奇宏 宠物召唤   --
  3. ---------------

  4. --按键设置类 保存宠物对应的技能栏和按键--
  5. Skills = {
  6.         skill = "", --技能栏快捷键
  7.         backSkill ="", --默认技能栏
  8.         petKeys = {}, --技能栏上宠物对应的按键[1~=]
  9.         waitSleep = 500 --宠物召唤后停留500毫秒后取消召唤,该值为默认值
  10. }
  11. function Skills:new(skill,backSkill,petKeys,waitSleep)
  12.     local o = {};
  13.     setmetatable(o, self);
  14.     o.skill = skill;
  15.         o.backSkill = backSkill;
  16.         o.petKeys = petKeys;
  17.         o.waitSleep = waitSleep;
  18.         return o;
  19. end

  20. --当前宠物索引及技能栏索引,用来计算宠物的循环周期
  21. CurrentIds = {
  22.         currentSkillIndex = 1,
  23.         currentPetIndex = 1,
  24.         closeStatus = true  --宠物关闭状态,手动关闭宠物时使用
  25. }

  26. function CurrentIds:new(currentSkillIndex,currentPetIndex)
  27.         local o = {};
  28.         setmetatable(o, self);
  29.         o.currentSkillIndex = currentSkillIndex;
  30.         o.currentPetIndex = currentPetIndex;
  31.         return o
  32. end


  33. --宠物索引
  34. --冰龙
  35. G9CurrentIds = CurrentIds:new(1,1)
  36. G9Skills = {
  37.                 Skills:new("2","tilde",{"6","7","8","9","0","minus","equal"},450)
  38. }
  39. --羊云
  40. G8CurrentIds = CurrentIds:new(1,1)
  41. G8Skills = {
  42.                 Skills:new("lbracket","tilde",{"5","6","7","8","9","0","minus","equal"},450)
  43. }
  44. --僵尸
  45. G7CurrentIds = CurrentIds:new(1,1)
  46. G7Skills = {
  47.                 Skills:new("rbracket","tilde",{"1","2","3","4","5","6","7","8","9","0","minus","equal"},550)
  48. }
  49. --古龙
  50. G5CurrentIds = CurrentIds:new(1,1)
  51. G5Skills = {
  52.                 Skills:new("semicolon","tilde",{"1","2","3","4","5","6","7","8","9","0","minus","equal"},550),
  53.                 Skills:new("quote","tilde",{"1","2","3","4","5","6","7","8","9","0","minus","equal"},550),
  54.                 Skills:new("4","tilde",{"6","7","8","9","0","minus","equal"},550)
  55. }
  56. --青龙
  57. G4CurrentIds = CurrentIds:new(1,1)
  58. G4Skills = {
  59.                 Skills:new("3","tilde",{"7","8","9","0","minus","equal"},550)
  60. }

  61. --古龙鬼泣
  62. G6CurrentIds = CurrentIds:new(1,1)
  63. G6Skills = {
  64.                 Skills:new("semicolon","tilde",{"1","2","3","4","5","6","7","8","9","0","minus","equal"},550),
  65.                 Skills:new("quote","tilde",{"1","2","3","4","5","6","7","8","9","0","minus","equal"},550),
  66.                 Skills:new("4","tilde",{"6","7","8","9","0","minus","equal"},550)
  67. }


  68. --G键事件函数
  69. function OnEvent(event, arg)

  70.         
  71.         OutputLogMessage("event = %s, arg = %s\n", event, arg);
  72.         --G1
  73.         if (event == "MOUSE_BUTTON_RELEASED" and arg == 1) then
  74.                 --OutputLogMessage("in MOUSE_BUTTON_RELEASED 1 \n");
  75.         end
  76.         --G2
  77.         if (event == "MOUSE_BUTTON_RELEASED" and arg ==2) then
  78.                 --OutputLogMessage("in MOUSE_BUTTON_RELEASED 2 \n");
  79.         end
  80.         --G3
  81.         if (event == "MOUSE_BUTTON_RELEASED" and arg == 3) then
  82.                 --OutputLogMessage("in MOUSE_BUTTON_RELEASED 3 \n");
  83.         end
  84.         --G8
  85.         if (event == "MOUSE_BUTTON_RELEASED" and arg == 8) then
  86.                 OutputLogMessage("in MOUSE_BUTTON_RELEASED 8 \n");
  87.                 G8CurrentIds=DragonCallNext(G8CurrentIds,G8Skills,true,true)
  88.         end
  89.         --G7
  90.         if (event == "MOUSE_BUTTON_RELEASED" and arg == 7) then
  91.                 OutputLogMessage("in MOUSE_BUTTON_RELEASED 7 \n");
  92.                 G7CurrentIds=DragonCallNext(G7CurrentIds,G7Skills,true,true)
  93.         end
  94.         --G5
  95.         if (event == "MOUSE_BUTTON_RELEASED" and arg == 5) then
  96.                 OutputLogMessage("in MOUSE_BUTTON_RELEASED 5 ");
  97.                 --
  98.                 G5CurrentIds=DragonCallNext(G5CurrentIds,G5Skills,true,true)
  99.         end
  100.         --G4
  101.         if (event == "MOUSE_BUTTON_RELEASED" and arg == 4) then
  102.                 OutputLogMessage("in MOUSE_BUTTON_RELEASED 4 \n");
  103.                 G4CurrentIds=DragonCallNext(G4CurrentIds,G4Skills,true,true)
  104.         end
  105.         --G11
  106.         if (event == "MOUSE_BUTTON_RELEASED" and arg == 11) then
  107.                 OutputLogMessage("in MOUSE_BUTTON_RELEASED 11 \n");
  108.                
  109.         end
  110.         --G10
  111.         if (event == "MOUSE_BUTTON_RELEASED" and arg == 10) then
  112.                 OutputLogMessage("in MOUSE_BUTTON_RELEASED 10 \n");
  113.         end
  114.         --G9
  115.         if (event == "MOUSE_BUTTON_RELEASED" and arg == 9) then
  116.         OutputLogMessage("in MOUSE_BUTTON_RELEASED 8 \n");
  117.                 G9CurrentIds=DragonCallNext(G9CurrentIds,G9Skills,true,true)
  118.         end
  119.         --G6
  120.         if (event == "MOUSE_BUTTON_RELEASED" and arg == 6) then  
  121.                 OutputLogMessage("in MOUSE_BUTTON_RELEASED 6 \n");
  122.                 G6CurrentIds=GQ(G6CurrentIds,G6Skills,true)
  123.         end
  124. end



  125. -----------------------------------------------------------------------------------------
  126. --currentIds 记录当前宠物所在的技能栏以及键位
  127. --skills 技能栏集合
  128. --isChange2 是否切换到扩展技能栏2 默认true
  129. --isColse 是否取消宠物 默认true ,如果需要手动取消宠物请设置为false,重复按G键为取消
  130. --召唤古龙
  131. function DragonCallNext(currentIds,skills,isChange2,isColse)
  132.         OutputLogMessage("skillslength = %s  ",table.getn(skills));
  133.         OutputLogMessage("currentSkillIndex = %s  ",currentIds.currentSkillIndex);

  134.         --手动关闭宠物模式时,判断当前是否没有关闭宠物 ,如果没有则执行关闭的流程
  135.         if (currentIds.closeStatus == false) then
  136.                 PressKey(skill.backSkill);
  137.                 ReleaseKey(skill.backSkill);
  138.                 --取消宠物后标记关闭状态
  139.                 currentIds.closeStatus = true
  140.         else
  141.         
  142.         skill = skills[currentIds.currentSkillIndex];
  143.         pets = skill.petKeys;
  144.         pet = pets[currentIds.currentPetIndex];
  145.         OutputLogMessage("pet = %s \n",(currentIds.currentPetIndex));
  146.         --召唤前先取消宠物
  147.         PressKey(skill.backSkill);
  148.         ReleaseKey(skill.backSkill);
  149.         Sleep(100)
  150.         if(isChange2 == true) then
  151.                 PressKey("lalt");
  152.                 PressKey("v");
  153.                 ReleaseKey("lalt");
  154.                 ReleaseKey("v");
  155.         end
  156.         --切换到技能栏
  157.         if(skill.skill == "4" or skill.skill == "3" or skill.skill == "2") then
  158.                 PressKey("lalt");
  159.                 PressKey(skill.skill);
  160.                 ReleaseKey("lalt");
  161.                 ReleaseKey(skill.skill);
  162.         else
  163.                 PressKey(skill.skill);
  164.                 ReleaseKey(skill.skill);
  165.         end
  166.         --召唤宠物
  167.         PressKey(pet);
  168.         ReleaseKey(pet);
  169.         --Sleep(100)
  170.         --切换回默认技能栏
  171.         PressKey("lalt");
  172.         PressKey(skill.backSkill);
  173.         ReleaseKey("lalt");
  174.         ReleaseKey(skill.backSkill);

  175.         if(isChange2 == true) then
  176.                 PressKey("lalt");
  177.                 PressKey("v");
  178.                 ReleaseKey("lalt");
  179.                 ReleaseKey("v");
  180.         end
  181.         --此处设置延迟
  182.         Sleep(skill.waitSleep)
  183.         --Sleep(550)
  184.         --取消宠物
  185.         if(isColse == true) then
  186.                 PressKey(skill.backSkill);
  187.                 ReleaseKey(skill.backSkill);
  188.         else
  189.                 --在手动关闭宠物的模式下 需要标记关闭状态为false
  190.                 currentIds.closeStatus = false
  191.         end
  192.         --Sleep(300)
  193.         --更新技能栏以及宠物键位
  194.         if(currentIds.currentPetIndex < table.getn(pets)) then
  195.                 currentIds.currentPetIndex = currentIds.currentPetIndex + 1;
  196.         else
  197.                 currentIds.currentSkillIndex = currentIds.currentSkillIndex + 1;
  198.                 currentIds.currentPetIndex = 1;
  199.         end
  200.         if(currentIds.currentSkillIndex > table.getn(skills)) then
  201.                 currentIds.currentSkillIndex = 1;
  202.                 currentIds.currentPetIndex = 1;
  203.         end
  204.         end  
  205.         return currentIds;
  206. end


  207. ---鬼泣释放--
  208. function GQ(currentIds,skills,isChange2)
  209.                
  210.         skill = skills[currentIds.currentSkillIndex];
  211.         pets = skill.petKeys;
  212.         pet = pets[currentIds.currentPetIndex];
  213.         OutputLogMessage("pet = %s",(currentIds.currentPetIndex));
  214.         --召唤前先取消宠物
  215.         PressKey(skill.backSkill);
  216.         ReleaseKey(skill.backSkill);
  217.         Sleep(100)
  218.         if(isChange2 == true) then
  219.                 PressKey("lalt");
  220.                 PressKey("v");
  221.                 ReleaseKey("lalt");
  222.                 ReleaseKey("v");
  223.         end
  224.         --切换到技能栏
  225.         if(skill.skill == "4" or skill.skill == "3") then
  226.                 PressKey("lalt");
  227.                 PressKey(skill.skill);
  228.                 ReleaseKey("lalt");
  229.                 ReleaseKey(skill.skill);
  230.         else
  231.                 PressKey(skill.skill);
  232.                 ReleaseKey(skill.skill);
  233.         end

  234.         --召唤宠物
  235.         PressKey(pet);
  236.         ReleaseKey(pet);
  237.         --Sleep(100)
  238.         --切换回默认技能栏
  239.         PressKey("lalt");
  240.         PressKey(skill.backSkill);
  241.         ReleaseKey("lalt");
  242.         ReleaseKey(skill.backSkill);

  243.         if(isChange2 == true) then
  244.                 PressKey("lalt");
  245.                 PressKey("v");
  246.                 ReleaseKey("lalt");
  247.                 ReleaseKey("v");
  248.         end

  249.         --使用鬼泣
  250.         Sleep(600);
  251.         PressKey("f12");
  252.         ReleaseKey("f12");
  253.         Sleep(400);
  254.         PressKey("lctrl","lshift");

  255.         Sleep(900);
  256.         ReleaseKey("lctrl","lshift");
  257.          
  258.         --取消宠物
  259.         PressKey(skill.backSkill);
  260.         ReleaseKey(skill.backSkill);
  261.          
  262.         --更新技能栏以及宠物键位
  263.         if(currentIds.currentPetIndex < table.getn(pets)) then
  264.                 currentIds.currentPetIndex = currentIds.currentPetIndex + 1;
  265.         else
  266.                 currentIds.currentSkillIndex = currentIds.currentSkillIndex + 1;
  267.                 currentIds.currentPetIndex = 1;
  268.         end
  269.         if(currentIds.currentSkillIndex > table.getn(skills)) then
  270.                 currentIds.currentSkillIndex = 1;
  271.                 currentIds.currentPetIndex = 1;
  272.         end
  273.         return currentIds;
  274. end

复制代码




注:此文禁止转载!







评分总计 : 1人参与 +15 | 查看全部评分
\(•ㅂ•)/♥+15

HOT

kidmaomao /显示全部评论

三叶草探索者

 

感谢楼主的文章,为了搞懂楼主的内容,让我也去浅学了一些LUA~
楼主就是没有把自定义化的内容标注出来,可能有一些玩家会看不懂
班门弄斧一下,请楼主指教~

确定某个键需要召唤宠物的宠物摆放位置,

G5Skills = {
Skills:new("semicolon",  -----这个是分号,对应楼主的6排快捷栏,ALT是另外组合搭配,在下方代码中添加的

"tilde",  ----这个是波浪号,切回1号主技能栏键,ALT是另外组合搭配,在下方添加的,

{"1","2","3","4","5","6","7","8","9","0","minus","equal"},    -----该技能栏放宠物的对应位置,哪些格子放了骨龙了,大括号中就填哪些号,minus是减号,equal是等于号

550), -----取消召唤宠物的延迟设置


Skills:new("quote","tilde",{"1","2","3","4","5","6","7","8","9","0","minus","equal"},550),   -----逻辑同上,quote是引号,对应楼主6号快捷栏的骨龙

Skills:new("4","tilde",{"6","7","8","9","0","minus","equal"},550)  -----逻辑同上,4是对应楼主4号快捷栏,ALT是另外组合搭配的
}

确定切左二行和右二行的快捷键,
  • if(isChange2 == true) then
  •                 PressKey("lalt");   -------楼主的快捷键是ALT+V,搜索楼主的代码,然后在这里替换你需要替换的快捷键
  •                 PressKey("v");
  •                 ReleaseKey("lalt");
  •                 ReleaseKey("v");
  •         end



楼主的技能栏快捷键设置,
  • if(skill.skill == "4" or skill.skill == "3" or skill.skill == "2") then  -----因为楼主的2、3、4排快捷栏是要搭配ALT来按的
  •                 PressKey("lalt");
  •                 PressKey(skill.skill);
  •                 ReleaseKey("lalt");
  •                 ReleaseKey(skill.skill);
  •         else                                           -------5、6、7、8不需要搭配ATL来按,应该是根据你的需要,来修改这里
  •                 PressKey(skill.skill);
  •                 ReleaseKey(skill.skill);
  •         end

楼主的1号主技能栏和取消宠物键是绑定了的~
按照楼主的代码,1号主技能栏是ALT+波浪号,取消宠物是波浪号,这两个功能是通过按不按ALT来区分了,波浪号应该是可以替换其他的吧?



其他应该保持和楼主一致就可以了~非常好的代码教学~

风来の东林 : kidmaomao同学分析的非常对,热烈鼓掌~ / 2019-9-10 13:59
发表于 2019-9-9 22:35举报 +1 引用

2#

丶范尼斯 /显示全部评论

 

发表于 2019-9-8 20:05举报 引用

4#

西鼠霸王 /显示全部评论

三叶草

 

我缺的是古龙啊
发表于 2019-9-11 09:05举报 引用

5#

收藏收藏
发表于 2019-9-15 09:35举报 引用

6#

a58565621 /显示全部评论

 

完全不懂
发表于 2019-9-23 19:46举报 引用

7#

猫的树和我的你 /显示全部评论

三叶草春的呢喃

 

罗技G603 鼠标一直处于无连接状态。。。。。。。。。。。。。。。。头大
发表于 2019-9-25 12:46举报 引用

8#

天河幻想 /显示全部评论

三叶草小幽灵

 

膜拜大神我是完全没看懂
发表于 2019-10-14 14:25举报 引用

9#

羙系丨琻鱼丶 /显示全部评论

三叶草

 

非常实用啊~~
发表于 2019-11-6 08:01举报 引用

Tir na nOg

Mabinogi洛奇玩家基地

联系我们 : mabinogionline@qq.com

帮助中心

举报通道

BUG反馈与建议

私有徽章信息登记

捐助迪尔纳诺

交流群:241182316

Powered by Discuz! , Tir na nOg