前言
最近在玩王者榮耀,看到百里守約這個英雄千里狙殺,我在想如果能夠實現百里守約指哪打哪那豈不是無敵了?能夠在保證自身安全的前提下無限消耗英雄。
於是我便想到了開發一個自瞄軟體,只需要點選對面英雄,百里守約就能夠自動開二技能在0.2秒內自動準確命中點選位置。
有人會問,這不是外掛嗎?哈哈,我告訴你這個永遠都不會封號,因為傳統的外掛是靠讀取修改王者榮耀的資料實現自瞄的,而這個則是模擬人操作英雄百里的射擊實現的,對王者榮耀的底層資料沒有任何訪問和修改,自然不存在修改王者王者榮耀資料被封號的情況。懂得都明白,不懂的瞎擔心。重點就是模擬人的操作,而非讀寫王者榮耀資料,因此在後臺看來你就是個人在操作,跟著看就明白了。
當然我已經實現了,從青銅開小號到王者局已經亂殺了,一起跟我看看實現原理吧。
原理比較硬核,不知道你能不能看得懂哈。
具體介紹
1.原理就是使用投屏軟體,將手機上的王者榮耀投屏到電腦上,此時電腦是可以用滑鼠和鍵盤操作投屏到電腦上的王者榮耀的。
沒錯,原理就是我們手機點選一個位置,然後將手機點選的位置xy傳送給電腦,然後電腦得到手機的點選位置xy轉化為電腦的點選位置x1,y1,然後保證電腦自動控制百里守約開二技能射擊電腦上的座標x1,y1即可,這裡你聽懂了嗎?
當然,這只是一小部分功能,具體的是:
手機上先傳送一個讓電腦開二技能的指令,比如手機向電腦傳送“k”字元,電腦收到“k”以後開啟二技能,然後手機上開始點選敵方英雄,手機上檢測到點選位置,然後發給電腦,電腦控制百里守約射擊目標位置。
問題
1,可能有人問,為什麼手機要向電腦先發送一個“k”讓電腦開啟百里守約的二技能呢?
我就問你玩過百里守約沒有,百里不開二技能那麼大的視野範圍怎麼獲得,怎麼看見敵方英雄,百里的強勢不就是開啟二技能獲得大範圍視野以及超遠射擊嗎?
當然要先開二技能獲得敵方英雄位置,然後你再點選敵方英雄讓他射擊啊,
2,可能有人問,為什麼手機上點選的座標需要轉化為電腦螢幕上的座標呢?
先說一下,免得你放棄不好好看:
這裡涉及了大量的數學變換,如果你得到了百里二技能最終拖動的座標,你從青銅一路打上巔峰賽3000不是夢,你將成為神槍手,因為一個百發百中的百里守約克制峽谷一切生物。
有人說,哎呀,別人把百里禁了你不就涼涼了,我呵呵一笑,難道干將,鍾馗,墨子的自瞄你也不喜歡嗎?只要把這個百里的自瞄看懂了,他們的自瞄輕而易舉。
好了,接下來說座標轉化的問題。
這樣說吧,我的手機解析度是2400x1080,電腦螢幕解析度是1366x769,你說你在手機上點選的敵人英雄的位置,比如(300,600),就是電腦上(300,600)的座標嗎?
當然不是,那麼該如何將手機上點選的敵方英雄座標轉化為電腦上的敵方英雄座標呢?
接下來說硬核一點的座標轉換,公式就是y=kx+b,手機上點選的x和y座標都需要進行轉換才能對映為電腦的敵方英雄目標,解釋一下,這裡的k代表的是手機上解析度和電腦上王者視窗解析度之比,b代表王者榮耀視窗的偏移量,放個圖你就明白了
如圖,王者視窗是位於正中的,這和手機顯示的肯定不一樣,
經過y=kx+b的伸縮變換後,點選手機上的座標就能轉化為電腦上王者視窗的敵方英雄的座標。
你以為這就結束了嗎?SO YONG SO SIMPLE!
你以為你知道電腦上敵方英雄的座標你就能打中嗎?
你需要將電腦上敵方英雄的座標轉化為百里二技能拖動的座標,玩過百里的都懂,
也就是說手機上點選的敵方英雄的座標需要經過兩次轉換,第一次轉化為電腦螢幕上敵方英雄的座標,第二步轉化為百里二技能的拖動的座標。
如何轉化呢?
你如果細心一點就會發現百里和敵方英雄之間的連線,和二技能技能中心到拖動到的目標位置的連線是平行線關係,
運用初中的知識知道,平行線的斜率是相同的,這意味著你需要知道百里的位置,敵人的位置得到一條y=kx+b的直線,以及二技能座標中心的位置來得到最終二技能需要拖動到的目標座標。仔細看,不然你是無法成為“神槍手”的。
你以為這就結束了嗎?So Yang So Simple!!!
百里的射擊範圍實際上是一個橢圓,在平面上如果你把百里的射擊範圍標註出來,你會得到一個橢圓的射擊範圍,也就是說你需要得到的二技能的拖動目標,還需要擬合百里橢圓的射擊範圍,得到一個公式。
數學不夠用了有沒有,但是我告訴你,你只要得到了這個百里的二技能拖動座標,那麼你從青銅可以一路殺上巔峰賽3000分,因為沒有誰能擋得住一個百發百中的百里。
而且重點是,他不讀取王者榮耀的底層資料,就是模擬人在玩王者榮耀,沒有任何透視等等,但是實現了自瞄的效果,哈哈哈哈
電腦上敵方座標有了,怎麼控制電腦自動開二技能射擊目標位置?
我是用python實現的,使用的是pyautogui這個可以控制電腦滑鼠鍵盤的包
至於如何接收開啟二技能的命令“k”字元,以及如何收到敵方英雄座標,我使用的TCP的客戶端/伺服器模式,
接下來就比較硬核了
當手機軟體客戶端和電腦的python伺服器通訊時,python伺服器等待手機客戶端傳送“k”,其他命令不觸發。
python伺服器收到“k”後,立刻啟動pyautogui的拖動函式,將百里的二技能開始向後拖動,拖動到一個指定的座標,此時百里的二技能啟動,開始獲得超大範圍視野,玩過百里的都懂,然後等待手機向python伺服器傳送敵方英雄座標位置。
我修改了pyautogui的原始碼,在他的拖動函數里加入了一個TCP的接收命令,此時收到類似(100,200)指定格式的字串就會觸發座標轉換函式,其他的命令比如“k”就過濾掉了,接下來就是轉換手機發送來的敵方英雄座標為百里二技能的拖動座標,然後電腦控制百里守約的二技能向指定的座標拖動,完成對敵方英雄的射擊。
安卓端如何開發
需要設定兩個按鈕懸浮在桌面上,這樣開啟王者榮耀你也能隨時點選這個按鈕,一個按鈕傳送射擊命令,另一個傳送座標,然後點選按鈕時彈出來一個彈出視窗,我設定的為popwindow,透明度設定的為10%,
不會有人懷疑為什麼要透明吧?全遮住王者榮耀視窗你怎麼看敵方英雄然後點選啊
有人可能會疑惑,百里開啟二技能後,再點選其他位置,難道,不會提前觸發讓百里射擊嗎?
呵呵,那我設定popwindow幹嘛,當popwindow彈起的時候自動遮蔽了王者榮耀視窗的焦點,此時你點選王者榮耀視窗他是不會觸發的。
點選射擊指令按鈕後,會發送一個“k”字元到python伺服器,此時能夠看到百里二技能開啟,並自動拖動到指定座標
然後點選座標傳送的按鈕,彈出半透明的popwindow,點選對方的英雄,完成對方英雄的座標傳送,popwindow點選後消失,以免遮住王者視窗讓電腦不能完成射擊。
此時就完成了。
後續
百里的指哪打哪你都會了,竟然你說不會幹將,鍾馗,墨子自瞄,把百里二技能蓄勢的函式刪了,直接指哪打哪不香嗎?
升級
哈哈哈哈,你以為這就結束了嗎?
我知道如何利用影象識別識別對方英雄,這意味著我不需要安卓端點選來確定敵方位置,我寫了一個影象識別函式,當敵方英雄出現的時候他會自動標註敵方英雄得到敵方英雄座標,也就是我只需要將安卓手機投屏到電腦上,然後影象識別模組識別對面英雄位置,百里守約就能夠自己開二技能然後自己獲得敵方英雄座標自己射擊了
這是指哪打哪嗎?
這是自動追擊導彈