綁定帳號登入

Android 台灣中文網

打印 上一主題 下一主題

[攻略] 觸摸精靈-腳本自動化教學區(進階)

   關閉 [複製連結] 查看: 26510|回覆: 49|好評: 9
跳轉到指定樓層
樓主
iric | 收聽TA | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
發表於 2013-10-25 22:17

馬上加入Android 台灣中文網,立即免費下載應用遊戲。

您需要 登錄 才可以下載或查看,沒有帳號?註冊

x
本帖最後由 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 (字符串) : 想要讀取的類型,
神魔的資料類型如下
  • I32: 有符號的32位整數 [D]
  • U16: 無符號的16位整數[W]
  • U8: 無符號的8位整數 [B]
  • F32: 有符號的32位浮點數 [F]

返回值
返回值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





「用Android 就來APK.TW」,快來加入粉絲吧!
Android 台灣中文網(APK.TW)

評分

參與人數 24碎鑽 +19 經驗 +1 幫助 +27 收起 理由
wu6491 + 1
dinodiary + 1 + 1 非常讚
crazy411sam + 3 + 1 + 5 很給力!
lu582 + 1 + 1 非常讚
asd139643179 + 1 + 1 很給力!
zten600 + 1 + 1 非常讚
phyu99 + 1 + 1 非常讚
liuhongjun84 + 1 + 1 非常讚
473633662 + 1 + 1 技術文章,贊一個
kofdc4990 + 1 非常讚

查看全部評分

收藏收藏25 分享分享 分享專題
用Android 就來Android 台灣中文網(https://apk.tw)
回覆

使用道具 舉報

沙發
vmix1234 | 收聽TA | 只看該作者
發表於 2013-10-25 22:21
學習一下,感謝大大分享,來去研究看看
用Android 就來Android 台灣中文網(https://apk.tw)
回覆 支持 0 反對 1

使用道具 舉報

板凳
zxcz0323 | 收聽TA | 只看該作者
發表於 2013-10-25 22:21
我差跳關,感謝分享了....
用Android 就來Android 台灣中文網(https://apk.tw)
回覆 支持 反對

使用道具 舉報

地板
www920304 | 收聽TA | 只看該作者
發表於 2013-10-25 22:25
感謝指點阿  我也希望能夠學會!
用Android 就來Android 台灣中文網(https://apk.tw)
回覆 支持 反對

使用道具 舉報

5
12574301 | 收聽TA | 只看該作者
發表於 2013-10-25 22:31
我怎麼沒看到影片?
用Android 就來Android 台灣中文網(https://apk.tw)
回覆 支持 反對

使用道具 舉報

6
masterkiong | 收聽TA | 只看該作者
發表於 2013-10-25 23:35
好東西就是要分享啊~~
用Android 就來Android 台灣中文網(https://apk.tw)
回覆 支持 反對

使用道具 舉報

7
tse120493 | 收聽TA | 只看該作者
發表於 2013-10-25 23:53

神印我差跳關,感謝分享了....
用Android 就來Android 台灣中文網(https://apk.tw)
回覆 支持 反對

使用道具 舉報

8
a94952984 | 收聽TA | 只看該作者
發表於 2013-10-26 00:46
謝謝大大喔
用Android 就來Android 台灣中文網(https://apk.tw)
回覆 支持 反對

使用道具 舉報

9
smallbird1201 | 收聽TA | 只看該作者
發表於 2013-10-26 01:07
請問大大都是用幾版的觸碰精靈 怎麼我用都沒辦法@@
用Android 就來Android 台灣中文網(https://apk.tw)
回覆 支持 反對

使用道具 舉報

10
smallbird1201 | 收聽TA | 只看該作者
發表於 2013-10-26 02:13
看不懂  但超厲害..............
用Android 就來Android 台灣中文網(https://apk.tw)
回覆 支持 反對

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 註冊

本版積分規則