search
尋找貓咪~QQ 地點 桃園市桃園區 Taoyuan , Taoyuan

羅技遊戲軟體 LUA腳本編程 從入門到放棄 篇一:開關與簡單連招

羅技的驅動程序,從最早的Mouseware,到後來的SetPoint,再到現在的羅技遊戲軟體(Logitech Gaming Software),除了不支持舊滑鼠比較操蛋,功能上的增強還是有目共睹的。特別是LGS有真正的腳本編程功能(非普通宏),不免會引來一些遐想:我能用這個功能做到什麼程度?

事實上,LGS的腳本功能相較於外掛,甚至是按鍵精靈來說,是相當弱的。它有許多做不到的事情。

LGS做不到的事情有:(基於8.91.48版本)

不能屏幕取色。按鍵精靈有屏幕取色的功能,以實現外掛的編寫。LGS當然不行。

不能響應普通鍵盤按鍵。LGS能響應的,只有驅動本身支持的滑鼠按鍵,以及G系列鍵盤的M鍵、G鍵。敲下字母或者回車或者空格之類的,是不能響應的。

不能響應滾輪事件。目前LGS只能模擬滾輪,而不能響應滾輪。也就是說你只能通過別的事件,模擬滾動。而不能接收滾動事件,去做別的事。

不能區分具體設備。LGS的事件只能區分設備類別,鍵盤,滑鼠,或是G13之類的左手控制器,但不能區分具體設備。比如同時插了G500和G600,事件無法區分。

搞明白什麼做不到,也就相當於知道了大概能做到什麼。

再來看LGS用的腳本語言。LGS用的是LUA,名氣可能沒有PYTHON大,但是在遊戲行業應用還是相當廣泛。以前我在某遊戲公司做到過LUA項目監製,所以相較於照抄百度百科就號稱內部員工的標題黨,以及號稱自己家3個月寶寶可以將近12個小時不吃不喝不拉穩穩安睡的誇張黨,我覺得自己還是有點真乾貨可以分享的。

LGS的腳本,是和配置文件相綁定的。

我們可以為每個程序單獨設置一個配置文件,省去手動切換的麻煩。只需要配置主程序即可,不屬本文範疇,不再贅述。

最近一直都在更新DOTA2的解說,那就先拿DOTA2來做例子。
注意,本系列主要的目的是認知LGS的功能,熟悉一些LUA語法,從而知道要實現某功能的時候「該怎麼做」,而不是說一定就得這麼做。畢竟,需求永遠是在變的。

調試腳本的過程就不上了,我們直接來看成品的代碼。

LGS的事件統一由OnEvent這個函數觸發,並傳遞event, arg, family這三個參數。
event指定事件類型,是滑鼠按下,還是放開等。
arg傳遞事件參數,按下的是哪一個鍵。
family傳遞設備類型,只會有"mouse","kb","lhc"這幾個結果,所以區分多滑鼠是沒希望了。

關於LGS的事件以及參數等API的詳情,驅動是有自帶文檔,但為英文。國內有人翻譯成中文,但是謝絕轉載,所以請搜索「Logitech Gaming Software G 系列 Lua API 中文參考文檔」以獲取。

--do return end;
這句註釋掉的請直接無視。其實就是不想用腳本的時候,取消註釋,就無條件返回。
但是,LUA的語法里,return只能放在一個塊結尾的前面,所以不能直接返回,而要用do和end包起來。

IsKeyLockOn這個函數可以判斷鍵盤上三個燈的狀態。大小寫、NUMLOCK一般都有用,所以我還是用scrolllock這個鍵作為腳本的開關。以前寫的魔獸改鍵器War3assis也是用這個當開關。

而具體的代碼,還是從簡單開始吧,畢竟從入門到放棄嘛 。

這是一個DOTA2沙王跳大的腳本。
第一期的內容比較簡單,屬於用宏也可以做的。關鍵是熟悉LGS內部函數、參數的運用以及相應的LUA語法。首先是語法細節。
細心的朋友會注意到,有的單句末尾我有加分號,有的沒有~
嗯,是的,LUA並不強制加分號……

然後是LGS的一些基礎函數的應用。
PressKey就是按下某按鍵,確切的說,在你用ReleaseKey鬆開某按鍵之前,是「一直按住」狀態。這裡用來模擬按住SHIFT跳大。
PressAndReleaseKey就是按下並馬上放開,可以比先PressKey再ReleaseKey省一句代碼。
Sleep是延遲功能。可能有接觸過編程的朋友,有Sleep會導致某種卡死的印象,不過那是其他語言的事件,和線程有關。在這裡不必擔心,就是普通的延遲。
最後,LGS有一個很坑的地方要提醒大家:

在OnEvent傳遞的參數里,123代表的值是左右中。

而在PressAndReleaseMouseButton函數里,123代表的是左中右。

看出區別了么~簡直坑爹~
比較好的辦法是把這些數值定義成參數常量,使用的時候使用參數。這個下期再講。

然後呢,我用的是DOTA2的QWER按鍵布局,所以大招是R,跳刀的按鍵是V。如果用的是DOTA1按鍵,大應該是C,而物品就是PressAndReleaseKey("num4");了。

其實這段腳本比較關鍵的,反而是中間的SLEEP延遲。
延遲太短或太長,都有出問題的風險。
這個延遲根據你的用途都不一樣,基本每個腳本都要精確到0.1秒級別去調。

延遲能大的,建議還是大一點為好,太快的話,很多時候都會出現問題。
比如如果有DOTA1玩過來的朋友,用猛獁跳大,有時候會莫名失敗,沒跳出來,為什麼呢?
DOTA1的跳刀你如果跳身後的話,英雄是會進行一個小的轉身,再跳出來的。而這時候如果你手快直接V了,在英雄還在轉身的時候,還未跳出就一屁股坐下去,空大~

此處直接上配套視頻看效果。

就算簡單連招用宏也能做,但是腳本仍然具有相當的優勢。比如我需要啟用的時候只需要開啟scrolllock鍵,不用按掉即可。如果用宏,還得進驅動設置。編輯起來也更方便。

好的,第一期的內容就先到這裡,代碼放到度盤裡,車牌1bp3oOP5。

下期預告:表與多按鍵



熱門推薦

本文由 yidianzixun 提供 原文連結

寵物協尋 相信 終究能找到回家的路
寫了7763篇文章,獲得2次喜歡
留言回覆
回覆
精彩推薦