团队和个人的经典短句
作者:五月雨雪
前言
我以前写过类似功能的脚本,可以使一个键发挥多个键的功能,但是代码较为琐碎,拓展功能时较为麻烦,所以这次趁着有空重新整理一下,分享给有需要的朋友。
效果
![](https://p0.ssl.img.360kuai.com/t01056c10676873007e.jpg)
相信很多朋友都玩过moba类的游戏,这类游戏中大部分都集成有快速发信号的功能,即按下一个预设键后不要松开,拖动鼠标到四个不同的方向就可以发送四种对应的信号,比如援助、坚守、危险等。这种转盘形式的信号系统简单直观,熟悉之后下意识即可完成操作,而这也正是本篇文章中脚本的灵感来源。
启用脚本后按下预设键位不要松开,此时保持不动、向上、向下、向左或向右移动鼠标后松开预设键即可触发五种不同的功能。搭配ctrl
或ctrl
+alt
可以再分别拓展五种功能,总计15种不同的功能。理论上配合各种修饰键的组合可以实现更多的功能,但是我个人认为没有必要,一是记不住,二是可能产生键位冲突。
实现
编辑键位
确保自己的鼠标上有至少一个不用的按键,在对应的配置中将该键位禁用。此处也可以不禁用,但是后续在修改脚本模板时需要将鼠标原地不动对应的功能留空。
修改脚本
首先给出一个脚本模板:
-- 转盘移动方向判定的最小鼠标位移\nlocal TURNTABLE_MIN_DISTANCE = 20\n-- 修饰键状态查询时间间隔\nlocal TURNTABLE_MODIFIER_HEARTBEAT = 10\n-- 转盘两次触发最小时间间隔\nlocal TURNTABLE_MIN_INTERVAL = 50\n\nlocal turntableLastTriggerTime = GetRunningTime()\n\nlocal funcs = {\n function()\n OutputLogMessage("test")\n end,\n "test",\n function()\n OutputLogMessage("test")\n end,\n}\nfuncs[6] = "test2"\nfuncs[15] = "test3"\n\nEnablePrimaryMouseButtonEvents(true)\n\nfunction OnEvent(event, arg)\n if (event == "MOUSE_BUTTON_PRESSED" = 7) then\n x1, y1 = GetMousePosition()\n -- OutputLogMessage("Mouse pressed at %d, %dn", x1, y1)\n end\n if (event == "MOUSE_BUTTON_RELEASED" = 7) then\n x2, y2 = GetMousePosition()\n -- OutputLogMessage("Mouse released at %d, %dn", x2, y2)\n Turntable(x1, y1, x2, y2, funcs)\n end\nend\n\nfunction Turntable(x1, y1, x2, y2, funcs)\n -- 核验转盘上次触发时间\n if (GetRunningTime() - turntableLastTriggerTime < TURNTABLE_MIN_INTERVAL) then\n return\n end\n -- 定义局部变量\n local dx, dy, direction, func\n -- 计算鼠标指针位移\n dx = x2 - x1\n dy = y2 - y1\n -- 鼠标移动方向,1-5分别对应原地、上、下、左、右\n direction = 1\n if (math.abs(dx) < math.abs(dy) -TURNTABLE_MIN_DISTANCE) then\n direction = 2\n elseif (math.abs(dx) < math.abs(dy) TURNTABLE_MIN_DISTANCE) then\n direction = 3\n elseif (math.abs(dx) > math.abs(dy) -TURNTABLE_MIN_DISTANCE) then\n direction = 4\n elseif (math.abs(dx) > math.abs(dy) TURNTABLE_MIN_DISTANCE) then\n direction = 5\n end\n -- 根据按住修饰键的不同修改direction的数值,将按键功能由5拓展为15\n if IsModifierPressed("ctrl") direction + 10\n elseif IsModifierPressed("ctrl") then\n direction = direction + 5\n end\n -- 轮询修饰键状态,所有修饰键松开后开始执行对应功能\n while (IsModifierPressed("ctrl") funcs[direction]\n -- OutputLogMessage(direction)\n if (type(func) == "function") then\n func()\n elseif (type(func) == "string") then\n PlayMacro(func)\n end\n -- 更新上次触发时间\n turntableLastTriggerTime = GetRunningTime()\nend\n\n
具体需要修改的部分见下图:
![](https://p0.ssl.img.360kuai.com/t01115e848892b683d4.jpg)
代码解读
本部分内容可以跳过,只是记录一下写代码时的思路和解决方法,对于有兴趣自己编写罗技Lua脚本的朋友可以随便看看。
罗技的G HUB驱动虽然支持Lua脚本,但是这么多年过去了也没啥突破,还是一个半成品,各种问题很多。
首先要吐槽的一点就是字符串不支持中文,所有定义到变量中的字符串都会被识别为“?”,这一点可以通过sting.byte函数来验证。这就直接导致我想要将中文转为unicode编码通过WinCompose软件直接输出到文本编辑器中的计划破灭。虽然罗技驱动中通过编写宏的方式也可以直接输出中文字符,但是这就少了在代码中即时生成字符串的灵活性。而且实测该种方法输出的字符在WPS软件中会出现未知错误,输出的字符串皆为第一个字符的重复。
罗技的脚本是单线程运行的,希望各位在编写脚本时牢记心头。其实之前看到过一篇文章,该作者自己写了一个包实现了并行的效果,但我没仔细研究,一是懒,二是觉得真没必要,写个鼠标脚本不必如此深入。单线程带来的最大问题就是Sleep函数以及while循环要慎用。以我上面的代码为例,我为了防止按下修饰键对转盘功能的影响,将功能响应放在了松开所有修饰键后。这样设计主要是考虑到如下场景:将按下ctrl
并按住转盘键向上滑动的功能设置为按一下S
,如果没有上面的设计,就会变为ctrl
+S
这一保存的快捷键。这样设计的初衷是好的,但是会带来一个问题,那就是如果我在按住ctrl
后多次按下转盘键,就会因为代码中轮询修饰键状态而使所有的按键事件卡在一起结算。换个说法,第一次转盘键松开后进入while循环,之后的每次按键都会等待该while循环结束后再依次执行,表现出来的效果就是只有第一次按键执行了正确的功能,后面的每一次按键功能都会变为funcs[1]。为了解决这一弊端,我不得不又引入了执行间隔,也就是转盘键在触发一次后必须等待固定时间间隔后才能再次触发。上面两个操作会带来一个弊端,就是按下修饰键后无法在不松开修饰键的情况下触发多个不同的功能,不过为了兼容性我觉得这点代价还是可以接受的。如果没有键位冲突的顾虑可以自行将模板中对应的两部分代码删除。
应用
游戏发言
仅需一个键就可以在游戏中实现快速喷人沟通的所有语句。玩外服时可以将一些类似good try、we can win、have fun的短句绑定在转盘键上,瞬间化身社交达人,带领团队走向胜利。
文档编辑
类似ctrl
+C
、ctrl
+V
、ctrl
+A
、ctrl
+Z
等常用快捷键。
后记
本篇文章并不是针对一无所知的小白编写的,所有只是简单写了下关键步骤,如果看不太懂的话可以先看看我前两篇文章,里面配图多一些,可能好懂一点。实在看不明白又有强烈使用需求的朋友可以留言或者私信我,如果你的需求很有意思或者使用场景很经典的话,我可能会以你的需求额外写一篇文章。
阅读更多鼠标精彩内容,可前往什么值得买查看
","gnid":"9646d48aabc197f7e","img_data":[{"flag":2,"img":[{"desc":"","height":"512","title":"","url":"https://p0.ssl.img.360kuai.com/t01056c10676873007e.jpg","width":"512"},{"desc":"","height":"755","title":"","url":"https://p0.ssl.img.360kuai.com/t01115e848892b683d4.jpg","width":"600"}]}],"original":0,"pat":"art_src_1,fts0,sts0","powerby":"cache","pub_time":1689664265000,"pure":"","rawurl":"http://zm.news.so.com/fb62036638323307d7a6823ad1670c8c","redirect":0,"rptid":"19d5c5ee5802d4e4","rss_ext":[],"s":"t","src":"什么值得买","tag":[{"clk":"kdigital_1:罗技","k":"罗技","u":""}],"title":"罗技鼠标lua脚本 篇二:罗技鼠标lua脚本-以转盘形式拓展单键实现15个功能
葛皆背4930关于团结协作的名人名言
国性君17065756303 ______ 只有完美的团队,没有完美的个人.找方法才能成功,找借口只会失败.保持兴奋状态, 保持学习状态. 保持团队状态. 团结协作, 追求卓越!!!
葛皆背4930个人与集体的名言警句 -
国性君17065756303 ______ 团结就是力量 大家好才是真的好
葛皆背4930青春团队励志语言 -
国性君17065756303 ______ 我们还有青春,我们不能放弃自己的目标,青春更需要励志,. 001 追踪着鹿的猎人是看不见山的 002 谁不向前看,谁就会面临许多困难 003 有志始知蓬莱近,无为总觉咫尺远 004 雄心壮志是茫茫黑夜中的北斗星 005 志之所趋,无远...
葛皆背4930关于集体荣誉的名人名言 -
国性君17065756303 ______ 1、众人拾材火焰高. 2、哪一天你若和集体脱离,那便是末路的开始. 3、谁若认为自己是圣人,是埋没了的天才,谁若与集体脱离,谁的命运就要悲哀.集体什么时候都能提高你,并且使你两脚站得稳. —— 《奥斯特洛夫斯基两卷集》 4、...
葛皆背4930求够做人的经典名言一句 -
国性君17065756303 ______ 1、不要推卸责任,哪怕是别人的责任.无论发生任何事情,首先想到自己是不是做错了.如果自己没错(那是不可能的),那就站在对方的角度上,体验一下对方的感受.(将此点放在第一条是提醒自己永远都要带着责任心去做事)2、要让自...
葛皆背4930管理方面的名言 -
国性君17065756303 ______ 企业管理经典名言10句 01、在公司的管理方面,应该相信少就是多的道理,抓得少些,反而收获就多了. 02、领导者不是只告诉别人怎么干的家伙,而是要激发团队产生一定包袱,来并朝目标勇往直前. 03、什么是不简单?把简单的事情千...
葛皆背4930形容员工精神面貌句子
国性君17065756303 ______ 任何的限制,都是从自己的内心开始的.做得很好,继续努力.近来你工作各方面的... 21、该员工工作勤恳,用心,服从工作安排,不遗余力的做好自我的工作,是值得咱...
葛皆背4930写团结的句子有哪些 -
国性君17065756303 ______ 1、人们都羡慕球星,球星在一个球队里的作用可谓大矣!但是如果离开团结的球队,他们又将怎样呢?美国大名鼎鼎的“篮球巨人”率“公牛队”四夺总决赛冠军.人们都说是“飞人”乔丹创造了公牛队,乔丹却说:“是公牛队队员的团造就...
葛皆背4930谁有有关团结的语句,很经典的那种? -
国性君17065756303 ______ 52张天真的笑脸,52颗灵动的心,组成了七年级十四班这个大家庭.在这个温馨可爱的集体里,我们沐浴爱的春风,我们遨游知识的海洋,我们体验成功的喜悦,我们编织美丽的梦想;我们在老师引导下,将努力学会学习,学会自主,学会关爱...
葛皆背4930善待别人的名言警句? -
国性君17065756303 ______ 金无足赤,人无完人 已所不欲,勿施于人 人在高潮的时候享受成就,在低潮的时候享受人生. 尊重不被尊重的人,因为他们并和我们没多大不同. 朋友是知道你缺点并能接受你缺点的人. 成功不是靠个人而是靠团队. 世哗法糕盒蕹谷革贪宫楷界上没有懒惰的人,只是他的目标不够吸引. 改变别人最好的方法是选改变自己. 保持忙碌,让你腾不出时间考虑你的烦恼的病痛. 永远不要陷入绝望.但是如果你产生绝望情绪时,就去工作. 工作是年轻人所无法想象的成熟快乐之一. 学会将心思和精力投入到帮助他人之中,让自己剩余的精力再去思考自己的烦恼和不幸