Android 台灣中文網

標題: 觸摸精靈-腳本自動化教學區(進階) [打印本頁]

作者: iric    時間: 2013-10-25 22:17
標題: 觸摸精靈-腳本自動化教學區(進階)
本帖最後由 iric 於 2014-3-4 12:44 編輯

你知道你花了多少時間在刷肥,堆肥嗎?
刷肥有精靈腳本,堆肥也可以燒餅加速
放著自動刷把時間省下來去做其他更有意義的事吧。

4.62_自動化小修改
4.6x_完美跳關自動化
4.5x_貪婪30秒神速自動化刷關
4.x_八門自動化修改+刷肥(30秒內改好所有參數)
4.x_八門自動化不動卡珠解鎖
4.x_八門自動化轉珠控制演示(變頻模組)
3.27_八門自動修改(腳本內存處理)
3.27_全程自動轉刷肥演示(智慧型戰鬥回合偵測)
3.20_自動刷展示影片
3.15_自動刷展示影片
自動建立搜圖庫展示影片


目前自動化腳本已經可實現以下功能
- 首次使用自動截圖,建立搜圖庫
- 自動微調程序,適用任何解析度
- 模組式寫法,支援個人化手錄模式
- 斷線自動重連
- 喀石狂刷模式
- 各種防呆設定(debug)
- 速刷(X關)/循序刷肥模式

在此提供"lua語法"教學


腳本教學區(code以黑體字表示)

0. 參考資料 (lua wiki, 待補...)
;   段落點, 可有可無
--  註解
..  連接符, 用來連接字串
* / + - % ^  常用的運算符
連續宣告, 等式左右的變數量要對稱
function s_mode(s_A,s_B,s_C,t_T,t_P,t_R,t_M)
stage_A,stage_B,stage_C,team_T,team_P,team_R,team_M = s_A,s_B,s_C,t_T,t_P,t_R,t_M
end


1. 解析度調整

-- 將屏幕寬度和高度分別保存在變量w、h中
width, high = getScreenResolution();
-- 獲取屏幕色彩位元數
color_bit = getScreenColorBits();
-- 提示屏幕資訊(字串模式導出)
notifyMessage(string.format("%dbit %dx%d",color_bit,width,high));
ok, 有了屏幕參數, 接下來就可以編寫動態的x, y座標來適應各種解析度的手機
-- 等化解析度參數(建議使用Full HD解析度的屏幕來獲取座標)
w = width / 1080 --寬
h = high / 1920  --高
此時的w & h要使用在接下來的每個x, y座標上當作係數


2. 子程序

-- subroutine子程序宣告
function click(fid,xcoor,ycoor,pause)
    fid = 0 -- 手指ID, 識別第幾根手指滑動
    touchDown(fid, xcoor * w, ycoor * h); -- 二次包裝內建的觸控函數
    mSleep(30); -- 按下延遲
    touchUp(0);
    mSleep(pause); -- 彈起後延遲
end
我將觸控函數做二次包裝, 將座標係數跟彈起延遲時間包進去
這樣我一行就可以取代原本約4行的指令, 大大減少coding的複雜度



3. 外部文件

這是最重要的部分, 試過一大堆檔案指令, dofile是最讓我滿意的指令
善用外部呼叫可以減少主程序的複雜度並增加程式的彈性
主程序A -------------------------------> 主程序A
        子程序B  子程序C  子程序D
                  ╲          ╲           ╲
主程序A ═══════════> 主程序A+B+C+D


-- 路徑縮寫
Touchelper ="/mnt/sdcard/Touchelper/scripts/v2/"
-- 呼叫外部文件 "1_選關卡" 並執行裡面的指令
dofile(Touchelper .. "1_選關卡")
我的習慣是路徑我會另外用變數縮寫起來
Touchelper .. "1_選關卡" 就是指以下路徑的檔案
/mnt/sdcard/Touchelper/scripts/v2/1_選關卡
/mnt/sdcard 在任何android手機都是可以適用的系統路徑
各位可以將此路徑輸入到瀏覽器檢查看看mount的路徑是否正確
像是HTC這類鎖RAM的手機也能mount到我們想要的地方


4. 截圖
第4+第5這兩個部分學不學的好就是能不能自動化的關鍵
我用過很多截圖app, 都沒辦法做到100%比對率
唯有內建的截圖函式才能截出正確的圖

截圖之前, 建議放個顏色比對的函式來確保截圖的時機
-- 區域模糊顏色比對, 函式對應的參數分別為(16進制顏色碼,比對率,左上x,左上y,右下x,右下y)
x, y = findColorInRegionFuzzy(0x525142, 99, 500*w, 900*h, 501*w, 1400*h);
-- 印出比對座標x & y (-1即為比對失敗)
notifyMessage(x3 .. "," .. y3)

取得正確的截圖時間後, 接著我想要作出大廳的區域截圖
確切的座標位置需事先用錄製的方式一一點出來
畢竟手機沒有桌機這麼方便
-- 截圖存檔路徑縮寫
mingsnap = "/mnt/sdcard/ming/%s.bmp"
snapmode = "大廳"
    x0     = 520    -- 左上角x

    y0     = 1440  -- 左上角y
    shiftx = 40    -- 截圖寬
    shifty = 40    -- 截圖高
    x1 = x0 * w   -- x乘上座標係數=相對左上角x
    y1 = y0 * h    -- y乘上座標係數=相對左上角y
    x2 = x1 + shiftx * w  -- 相對右下角x
    y2 = y1 + shifty * h   -- 相對右下角y
-- 區域截圖(會存檔成 大廳.bmp 檔於/mnt/sdcard/ming/下)
snapshotRegion(string.format(mingsnap, snapmode),x1,y1,x2,y2);


5. 圖形辨識
-- 路徑縮寫
ming = "/mnt/sdcard/ming/"
-- 搜尋大廳畫面
for i = 1,300 do -- 迴圈300*200ms=60s(實際時間會更長, 視手機效能而定)
x, y = findImageInRegionFuzzy(ming .. "大廳.bmp",80,460*w,1300*h,620*w,1620*h);
    if x ~= -1 and y ~= -1 then
        notifyMessage("in大廳");
        click(0,520,1740,500);
        return;
    else
        mSleep(200); -- 比對延遲200ms
    end
end
notifyMessage("大廳搜圖失敗!!");
os.exit(); -- 結束腳本


***進階多點取色辨識(保留)

6. 流程控制
1. 載入外部程式碼可以使用dofile(檔案), 直接且容易, 缺點是物件不能加密

2. branch指令, 可以輕易地跳至指定處執行
goto AAA  
--branch到AAA程序
::BBB::
... ... ...
::AAA::  --AAA branch point
goto BBB  --branch回BBB處

3. 調用subroutine
local function CCC()  --宣告區域型子程序, 調用後即消滅並釋出記憶體
... ... ...
end
function DDD()  --宣告全域型子程序, 可重複調用
... ... ...
end

function main() --主程序
CCC ()  --調用區域型子程序CCC(), 只能調用一次
DDD()  --調用全域型子程序DDD()
... ... ...
DDD()  --重複調用全域型子程序DDD()
end


--子程序宣告(放置於主程序end後)
local function CCC()  --宣告區域型子程序, 調用後即消滅並釋出記憶體
... ... ...
end

function DDD()  --宣告全域型子程序, 可重複調用
... ... ...
end

4. 一個完整的lua腳本, 裡面可以有很多的subroutine
但只需要一個function main()主程序, 只有主程序才會自動被執行

5. break(跳離迴圈), return(可附返回值) 都是很好用的返回函數

***進階迴圈控制(保留)


7. debug
還沒想到怎麼寫, 除了經驗還是經驗

***進階debug函數(保留)


8. memoryRead()
讀取指定應用的內存

參數
參數1 (字符串) : 想要讀取的軟件的包名
參數2 (數字) : 想要讀取的内存地址
參數3 (字符串) : 想要讀取的類型,
神魔的資料類型如下

返回值
返回值1 (boolean) : 是否成功
返回值2 (數字) : 讀取到的數據, 僅當返回值1為真時有效
示例
success, data = memoryRead("com.test.test", 0x1000000, "U32");  -- 讀取app為com.test.test的應用中,內存地址為0x1000000處的無符號的32位整數
if success then
    notifyMessage(string.format("%s", tostring(data)));
else
    notifyMessage("fail");
end

PS. 當你無法確認輸出是否為有效數,請勿使用比較符號,lua只有nil才是false,其餘都是true(包含0)正確的用法是:
if  xxx then
    yyy
end
(如果xxx有效,則執行yyy)


9. 三元運算法
C語言: a?b:c --> (a and b) or c --a為真, 則返回b, 否則返回c
不過由於Lua邏輯運算優先權的關係, a為真的時候會優先返回a
所以可以稍微修改一下邏輯運算的方式, 如下
Lua: a=a or c --> if not a then a=c --當a為無效數時, 返回c


10. UI使用者介面
>>>說明請參考官網

配置流程
UI={... ... ...}

function main()
... ... ...
end

function abc()
... ... ...
end

function def()
... ... ...
end






作者: vmix1234    時間: 2013-10-25 22:21
學習一下,感謝大大分享,來去研究看看
作者: zxcz0323    時間: 2013-10-25 22:21
我差跳關,感謝分享了....
作者: www920304    時間: 2013-10-25 22:25
感謝指點阿  我也希望能夠學會!
作者: 12574301    時間: 2013-10-25 22:31
我怎麼沒看到影片?
作者: masterkiong    時間: 2013-10-25 23:35
好東西就是要分享啊~~
作者: tse120493    時間: 2013-10-25 23:53

神印我差跳關,感謝分享了....
作者: a94952984    時間: 2013-10-26 00:46
謝謝大大喔
作者: smallbird1201    時間: 2013-10-26 01:07
請問大大都是用幾版的觸碰精靈 怎麼我用都沒辦法@@
作者: smallbird1201    時間: 2013-10-26 02:13
看不懂  但超厲害..............
作者: iric    時間: 2013-10-26 02:19
smallbird1201 發表於 2013-10-26 01:07
請問大大都是用幾版的觸碰精靈 怎麼我用都沒辦法@@

程式當然是自己寫的
稍微懂點c或vba(按鍵精靈)就可以上手了

作者: smallbird1201    時間: 2013-10-26 02:20
原來是用寫的....看來我無緣了    哪裡有新手教學的地方嗎...
剛上手 有點看不懂
作者: gordon1    時間: 2013-10-26 12:21
謝謝大大喔
作者: ch925413438    時間: 2013-10-26 13:18

該用戶還沒有設置簽名,暫不外售!謝謝大大喔
作者: y88882003    時間: 2013-10-26 14:25
跳關 只有意外一次成功= =!!

其餘都是 直接往前走 卡住 不然就是  出現過關畫面 自己關掉 從開又再出現過關畫面 沒卡片

那一次 意外成功  讓我百般驚喜 = =
作者: spammepk    時間: 2013-10-26 14:49
學習一下 learning
作者: amy0207    時間: 2013-10-26 14:55
神印我差跳關,感謝分享了....
作者: y88882003    時間: 2013-10-26 23:44
成功一次   接下來就是無止境的 失敗失敗在失敗  到底哪裡有錯= = ?

那次成功又怎麼辦到的= =

可以提示看看嗎
作者: iric    時間: 2013-10-27 01:08
腳本的跑法已經去蕪存菁,不會再更簡單了
或許因此你忽略了很多細節(沒仔細觀察影片)

越來越難改了,所以我不能說太明
作者: hr1001    時間: 2013-10-27 06:18
感謝樓主影片

已成功X關  ^^Y

另補上鮮花~聽說跟蛋一起服用...可以懷孕 @@!!
作者: iric    時間: 2013-10-27 09:26
恭喜,會改的請勿公開
因為這次的改版看到官方對X關加了很多惡意的設定,版上沒有高手願意分享了
作者: tutelary613    時間: 2013-10-27 11:56
好想學著寫腳本 ,
但新手上路不知道如何著手 ,
能否懇請大大指點 @@
作者: subfusc    時間: 2013-10-27 20:27

感謝樓主影片

已成功X關  ^^Y

另補上鮮花~聽說跟蛋一起服用...可以懷孕 @@!!
作者: hauting0331    時間: 2013-10-27 23:30
趕快來看一下神氣的東西
作者: iric    時間: 2013-12-12 12:37
本帖最後由 iric 於 2013-12-14 09:35 編輯

這個東西如果放出來。。。挫勒等
管你什麼鬼隨機數,直接內存處理
-------------------------------
個人低調使用, 官方不要逼我下毒手

作者: bani8188    時間: 2013-12-12 15:01
iric 發表於 2013-12-12 12:37
這個東西放出來。。。挫勒等
管你什麼鬼隨機數,直接內存處理

大大。。。可以教教怎樣靈活運用memoryRead()函數嗎
在觸摸論壇見到有人已經成功了,但根據他說的,要配搭八門的map列表來確認基址。。。
求教
作者: iric    時間: 2013-12-12 15:07
所以你可以看到我先存八門地址,然後再運算出另一個正確的修改位址載入。要寫出八門功能的搜尋不難。
作者: bani8188    時間: 2013-12-12 15:52
iric 發表於 2013-12-12 15:07
所以你可以看到我先存八門地址,然後再運算出另一個正確的修改位址載入。要寫出八門功能的搜尋不難。 ...

明白了,看來全自動化,暫時看觸摸還是做不到了
謝大大
作者: iric    時間: 2013-12-12 15:55
這篇是教學,不會可以問
作者: bani8188    時間: 2013-12-12 17:26
gg,4.0顏色完全不同。。。
又要重新抓素材。。。
越來越想做內存腳本了
作者: iric    時間: 2013-12-12 21:41
動態素材語法會嗎?

1. 2~3點精確抓色來確定所在版面

2. 然後區域截圖, 存成搜圖素材

3. 再馬上區域模糊搜剛存的圖即可

4. 設好flag, 下次直接搜圖
作者: bani8188    時間: 2013-12-12 22:31
iric 發表於 2013-12-12 21:41
動態素材語法會嗎?

1. 2~3點精確抓色來確定所在版面

明白。。。就是1樓的那段影片那樣吧
另外想請教,dofile的格式是怎樣用的?
我見到那個表格很漂亮
作者: aa50410atw    時間: 2013-12-12 22:49
感謝大大無私分享噢
作者: abcd850306    時間: 2013-12-12 22:50
恩恩,,,有看沒有懂內
作者: iric    時間: 2013-12-21 02:48
目前還沒看到夠水準的腳本
作者: iric    時間: 2013-12-21 14:41
不動值+自動轉有時候會卡珠

解開不動值又怕手動打特殊怪的時候忘記鎖回去
don"t worry

新功能: 不動值卡珠解鎖



作者: wisteryip    時間: 2013-12-21 16:20
可否指點八門自動化不動卡珠解鎖
作者: iric    時間: 2013-12-21 16:45
很簡單,

先建立全部的色珠表
版面抓珠色, 判斷自動轉停止後仍有連珠未消的情況
然後移動消珠

因為已經有自動轉珠了, 我懶的再開發腳本自動轉功能
作者: iric    時間: 2014-1-1 09:29
本帖最後由 iric 於 2014-1-1 09:59 編輯

客戶端自錄腳本,隨錄隨用。
秒改參數捨我其誰。


(key錯腳本註解,小瑕疵XD)


作者: w11223310    時間: 2014-1-12 22:40

感謝大大無私分享
作者: iric    時間: 2014-1-13 00:33
不錯, 版上有心研究的同學還是可以寫出腳本的

以下是新的腳本技術
UI介面演示





作者: iric    時間: 2014-2-16 21:53
完美跳關自動化

作者: ttung    時間: 2014-2-17 09:03
不給您按個讚,怎對得起我的優良教養
作者: styx0623    時間: 2014-2-25 12:50
太棒的東西。哪邊可以載到腳本?
作者: sorrymom123    時間: 2015-1-5 18:43
感謝指點阿  我也希望能夠學會!

作者: danne135    時間: 2015-1-22 10:54
感謝教學
這得研究才以辦法了= =
作者: woodstock670922    時間: 2015-3-6 16:15
我的老天爺呀,真的太神了,以後不用在進入史萊姆地獄了...




歡迎光臨 Android 台灣中文網 (https://apk.tw/) Powered by Discuz! X3.1