fgo自動刷本腳本(暫無名稱)更新

上一個腳本用現(xiàn)在的眼光看真是做的稀爛,最近對腳本做了一些功能更新和優(yōu)化。由于反饋甚少,所以優(yōu)化的全是自己的掛機體驗,反正我自己是爽了。腳本現(xiàn)在還有那么一點點的小問題,全部優(yōu)化完成后將會上傳至github。
新版本改動
目前改動主要在四個點上。
一、實現(xiàn)指令卡識別,為此需要在準備戰(zhàn)斗階段進入角色詳情界面獲取角色的指令卡形象。
二、實現(xiàn)mumu12模擬器適配。原先使用minicap對模擬器畫面進行捕捉,mumu12模擬器使用sdk版本為32,資源中缺少與之適配的minicap.so文件,所以需要重新開發(fā)。但是開發(fā)完成之后,mumu12模擬器的性能讓腳本運行的很爽。
三、對設置界面的標簽與對應部分的關(guān)聯(lián)做了優(yōu)化,可以通過點擊標簽進入對應設置。
四、優(yōu)化了點擊邏輯與線程邏輯,點擊”腳本開始“與“連接開始”后按鈕標簽會變?yōu)閷摹睍和!埃c擊”暫?!昂髽撕炞?yōu)椤被謴汀啊.旤c擊右側(cè)的”結(jié)束“后,標簽重新變回”開始“。(以前的腳本由于一次循環(huán)包含了很多動作,所以點擊暫停的后搖很大;同時線程退出并不安全,所以結(jié)束線程后不能重啟,現(xiàn)版本已解決這個問題)
使用前的設置教學
1、模擬器的鏈接
1)開始:進入設置界面,點擊“模擬器”對應的標簽。

2)選擇:在“模擬器選擇”選項中選擇使用的模擬器名稱,我自己只添加了兩個我使用的模擬器分別是mumu和夜神。不提供其余的主流模擬器選項,而是通過用戶自行添加。
3)添加:如果你并不使用這兩個模擬器,那么在第四行的“模擬器添加”右側(cè)文本框內(nèi),輸入自擬的模擬器名稱加空格加adb端口,點擊添加就能將選項添加進模擬器列表。點擊“模擬器列表標簽”能夠看到目前所有添加的模擬器的名稱和adb端口。如果模擬器處于打開的狀態(tài),可以點擊“模擬器鏈接測試”以檢查adb是否有效。

4)minicap與minitouch:如果有使用過maa等腳本,可以點擊”查看MINI安裝情況“,右側(cè)將顯示手機data/local/tmp文件夾下文件的情況,三個必需的文件minicap、minicap.so、minitouch使用黃色標注。如果齊全,則不需要“安裝MINI”按鈕。如果缺少,請點擊該按鈕進行文件傳輸。該過程仍然有可能失敗,對于mumu12而言,它的sdk版本過高導致沒有對應的minicap? .so文件,于是在后續(xù)我們要將其窗口捕獲模式設置為win32gui。我并沒有測試過其他錯誤可能,如果遇見請反饋。如果安裝成功,那么可以設置窗口捕獲模式為minicap。不過minitouch總是能夠安裝成功。


2、模擬器的捕獲設置
注:這一段是以后一大優(yōu)化方向,我希望能夠在python中調(diào)用WGC(windows graphic capture)技術(shù)從而無視模擬器類型,將兩種方式兼容。
目前的已知情報:mumu12適用于win32gui捕獲方式,其余的模擬器通常適用于minicap捕獲方式。
1)測試win32gui是否可用:在下列單選按鈕中選擇win32gui,此時下方設置為有效設置。窗口標題為模擬器標題,我并未為其進行模糊搜索等匹配方式,因此需要準確的窗口標題。
2)更改XYWH:X、Y、W、H為模擬器實際畫面在模擬器窗口中的位置信息,腳本將根據(jù)這個信息對捕獲到的窗口進行截圖。不妨首先將XY設置為0,WH設置為1920*1080,點擊”捕獲測試“,查看捕獲到的窗口,你需要不斷調(diào)整這四個值使得顯示的畫面恰好為模擬器實際畫面。尤其是在窗口縮放的時候,比如小窗口與全屏時,捕獲的窗口大小也會隨之變化,相對于固定的XYWH,設置就失效了。對于mumu12,占據(jù)屏幕左側(cè)時,窗口的寬高比也會隨之變化。因此建議在多次使用的時候不要改變窗口的大小。
在模擬器鏈接環(huán)節(jié)中,如果minicap安裝失敗,請嘗試選擇win32gui的捕獲方式,當然即便minicap安裝成功也可以嘗試。在我曾使用過的模擬器中,只有mumu12模擬器能夠成功。不過目前對我而言,mumu12模擬器體驗最好,它的窗口性質(zhì)更加接近于普通窗口而非類似游戲窗口,這導致眾多僅對普通窗口有效的快捷鍵能夠用于mumu12模擬器。因此我非常樂意針對mumu12做專門的適配。
如果即便輸入正確的標題也無法通過”捕獲測試“獲取模擬器畫面,則說明該模擬器不支持win32gui捕獲方式。你可以嘗試按住win+方向鍵,檢查模擬器是否對所有方向都有所響應。
3、多次戰(zhàn)斗的設置
1)進入:點擊設置界面的多次戰(zhàn)斗標簽,進入多次戰(zhàn)斗選擇。
2)戰(zhàn)斗次數(shù)設置:勾選多次戰(zhàn)斗并選擇戰(zhàn)斗次數(shù)。如果希望掛機一整天的話,填9999吧。
3)設置蘋果類型:僅支持金銀銅藍四種蘋果。如果選擇不吃蘋果,當體力情況清空時,即使戰(zhàn)斗沒有達到指定次數(shù)也會停止。適用于當你算不清多少把能夠恰好清完體力的時候。不支持吃石頭會體力,抵制浪費。
4、助戰(zhàn)設置
1)進入:助戰(zhàn)設置在多次戰(zhàn)斗設置的上方,也可以通過點擊標簽到達。
2)更新助戰(zhàn):當模擬器鏈接開啟時,進入游戲的助戰(zhàn)選擇界面(在運行界面點擊”鏈接開始“按鈕,等待左下方能夠?qū)崟r顯示模擬器畫面),點擊“更新”按鈕,將截取畫面指定位置作為助戰(zhàn)從者和助戰(zhàn)禮裝。具體位置為進入選擇界面時的第一個助戰(zhàn)對應的從者和禮裝。如果希望獲取下方的信息,需要將頁面下滑至該從者在頁面最頂上并完全顯示。
由于在游戲設置內(nèi)關(guān)閉“好友從者滿破形象展示時,同一從者形象只有0破、1破、3破三種可能,故而設置三個備選項(沒人會選擇掛機的時候用不同的助戰(zhàn)吧)
從者與禮裝并非一一對應,當某個助戰(zhàn)同時滿足第一個備選項的從者形象與第三個備選項的禮裝時,腳本依然會選擇。如果在free本或周本希望只選擇羈絆加成禮裝或者量子加成禮裝,請保證備選項中禮裝只有加成禮裝的可能。如果在活動本中,你不是非常關(guān)心禮裝加成如何,或者活動禮裝多到令人發(fā)指,如果指定單一禮裝,可能刷新一天也刷不出來想要的助戰(zhàn)時,勾選不關(guān)心禮裝選項。腳本將只匹配從者。
5、指令卡形象獲取設置
1)選擇助戰(zhàn)角色位置:從左至右分別為1,2,3,4。腳本不再獲取助戰(zhàn)的指令卡形象。為了助戰(zhàn)角色位置擺放正確,請先進行策略的設置,它將限制助戰(zhàn)位置所在。
2)勾選確認所有角色指令卡形象:在以不同陣容首次戰(zhàn)斗的時候必須勾選,以免識別失敗。從第二行的指令卡形象可以看到當前模擬器采用的模板,大紅色(#ff0000)處為蒙版部分,圖像處理時不關(guān)心。如果你的陣容正正好好和腳本顯示的一模一樣,那可以不勾選。當?shù)诙问褂玫臅r候就可以取消勾選以節(jié)省時間。
為了滿足識別指令卡的需求,我們需要在戰(zhàn)斗之前知道每個角色的指令卡形象。我選擇在準備戰(zhàn)斗界面長按從者卡牌,進入從者的詳情界面,向下滑動,找到從者的指令卡介紹,從那里獲取指令卡形象。加上相對簡單的顏色判斷,就能知道指令卡的具體信息。但要完成這一操作,需要長按、下滑、識別(由于角色的固有技能數(shù)目不定,所以指令卡形象位置不定,也就需要多次識別),對于可能上場的四個從者(包含換人禮裝替換的從者,腳本不考慮陳宮獻祭流的指令卡獲取,如果使用該流派請不要指定指令卡優(yōu)先級,反正陳宮加拐的指令卡傷害也沒多少),則需要重復四次這樣的操作??上攵绻粍狱c手腳,每次戰(zhàn)斗都進行一遍這個操作,戰(zhàn)斗時長將直接翻倍。
因此我做出了如下閹割:
(1)只在首次戰(zhàn)斗的時候進行確認。畢竟掛機的多次戰(zhàn)斗也不可能改變陣容。
(2)不確認助戰(zhàn)的指令卡形象。由于指令卡形象也會因為助戰(zhàn)的突破數(shù)而改變,如果想要準確識別指令卡形象,那么每次戰(zhàn)斗都有必要進入助戰(zhàn)界面查看其指令卡形象,這非?;ㄙM時間。但如果只識別其他三個指令卡,當識別失敗時,自動將其歸為助戰(zhàn)從者的指令卡,也同樣能夠完成識別工作。
(3)提供首次戰(zhàn)斗不確認選項。如果以相同的陣容多次戰(zhàn)斗,那么即便是腳本的首次戰(zhàn)斗,也不需要進行指令卡形象確認。
這最大限度的減少了時間的浪費。
6、策略設置
1)進入:設置界面第一個就是
2)修改策略:點擊任意一個已有策略的標簽,標簽將展開。在名稱一欄輸入自己想要的名稱。在每一回合的第一欄中輸入技能釋放策略,第二欄中輸入指令卡選擇策略。

技能釋放策略編碼規(guī)則:為一條多組三個數(shù)字用空格連接而成的字符串。每組三個數(shù)字代表一次技能的釋放,在三個數(shù)字中:第一個數(shù)字代表釋放從者的編號,從左至右為1,2,3,御主禮裝編號為4;第二個數(shù)字為要釋放的技能的編號,每個人從左至右為1,2,3;第三個數(shù)字是釋放對象的編號,對于單體技能,需要選擇釋放對象,對象從左至右編號為1,2,3,如果是群體技能或者自體技能,不需要選擇對象,則該編號為0(這個編號也可以是1,2,3中任選的一個值,不影響結(jié)果)。特別的,換人這一操作編碼為530,它的替換對象為第三個從者與第四個從者,不提供其他位置的替換,因此,如果不希望助戰(zhàn)從者被替換下場,那么他不應再第三的位置;反之則他被限制再第三的位置。注意這里的從者位置并不考慮場下從者,如果已經(jīng)經(jīng)過換人操作,則原本場下的從者編號將被認為是3。
示例:(1)110:第一個從者釋放了第一個技能,不指定釋放對象
?????????? (2)421:釋放御主禮裝的第二個技能,對象為第一個從者
???????????(3)530:將第三位從者與第四位從者替換,請注意必須再攜帶含有換人技能的御主禮裝時才能使用

指令卡選擇編碼規(guī)則:為三組字符串,組與組之間用”/”連接,代表三張指令卡的選擇。每張指令卡的編碼分為兩種:第一種為位置編碼,有且僅有一個字母或數(shù)字,代表指令卡的位置。對寶具而言,從左至右編號為z,x,c(均在鍵盤左下角),對指令卡而言,從左至右編號為1,2,3,4,5;第二種為優(yōu)先級編碼,它是一系列指令卡歸屬編碼的組合,之間用空格連接。每個指令卡歸屬編碼含有一個字母和一個數(shù)字,字母按照紅綠藍編碼為r,g,b,數(shù)字按照可能上場的從者編碼為1,2,3,4。指令卡歸屬編碼之間,按照從左往右具有從高到低的優(yōu)先級,在尋找匹配指令卡的時候,優(yōu)先尋找第一個指令卡歸屬編碼并且沒有被選擇過的指令卡是否存在,如果不存在就尋找下一個。如果編碼種的指令卡均不存在,那么將選擇默認指令卡,即在場上五張指令卡種從左至右選擇第一個沒有選擇的指令卡。理論上可以為9種指令卡(三個從者,三種顏色)一一編碼,但是通常認為這沒有必要,只要把打手指令卡的優(yōu)先級提高即可。
示例:(1)x:釋放第二個從者的寶具
?????????? (2)3:選擇五張指令卡種從左往右的第三章
?????????? (3)b1 r1 b2:優(yōu)先選擇第一個角色的藍卡,其次紅卡,再次為第二個角色的藍卡,其余的按照默認次序選擇
?????????? (4)z/b1 r1/b1 r1:釋放第一個從者的寶具后,后兩張指令卡均優(yōu)先選擇第一個從者的藍卡、紅卡,其余默認。(這通常能夠認定第一個從者為打手,并且具有一定打指令卡暴擊的能力,這次活動的90++本我所采用的大公陣容就需要補刀,這就用到了指令卡識別的功能)
?????????? (5)z/1/2:釋放第一個從者的寶具后,后兩張指令卡選擇第一、二張。(這是第一個從者為打手,且3t通關(guān)完全不依賴指令卡的情況)

在對指令卡編碼的時候,腦子時常想不清楚哪些技能放過了哪些沒放過,這是由于界面不直觀導致的,可以嘗試自己手動操作一邊,在操作的過程中,每釋放一個技能就在設置界面編碼一個。
對于陣容究極全面的玩家而言,不論預先準備多少策略的預備選項,都有可能是不夠用的。因此我不對策略的存儲設置數(shù)目上限,點擊“添加策略”即可在最后添加新的策略選項,編號是自動的,其中的內(nèi)容完全復制當前的最后一個選項,需要修改的話在最后一欄修改即可。當策略數(shù)目完全冗余,不想在設置界面看到那么多策略標簽的時候,可以點擊“刪除策略”,這將刪除最后一個策略。沒有留檔功能,請小心點擊這個按鈕以免刪除常用策略,還得自己重新編寫一遍。
至此所有設置已經(jīng)完成。接下來講講運行的步驟以及可能遇到的問題。
運行操作教學
1、連接開始:點擊“連接開始”按鈕,左下角開始實時顯示模擬器的畫面,為了盡量少使用資源,對腳本界面畫面幀率做出了限制,一般為10幀以下。對于minicap捕獲方式,它需要一定時間啟動服務,并不能在點擊的第一時間顯示畫面,等待一會兒即可,右側(cè)日志將會顯示minicap加載與加載成功的信息;對于win32gui捕獲方式,通常不需要很多啟動時間。本人測試時,當兩種捕獲方式切換時,前兩次連接開始會失敗,但是之后又都好了,不曉得為什么,但是只要不切換,那通常不會出什么大問題。
2、腳本開始:點擊”腳本開始“按鈕,腳本將啟動minitouch服務,右側(cè)日志也會顯示flow/minitouch加載與加載成功的信息,flow指的時自己編寫的運行的狀態(tài)流。后續(xù)腳本將按照1:關(guān)卡選擇,2:吃蘋果,3:助戰(zhàn)選擇,4:戰(zhàn)斗準備,5:戰(zhàn)斗,6:結(jié)算,7:再次戰(zhàn)斗的順序運行,其中2與4可能跳過。在minitouch加載的過程種,腳本可能會閃退,感覺挺怪的,pyhon終端也不報錯,只顯示minitouch結(jié)束連接。搞不懂發(fā)生了什么,如果發(fā)生了的話,重試幾次吧。

上方將顯示模擬器的名稱、已經(jīng)完成的戰(zhàn)斗次數(shù)。
第二行可以對策略、戰(zhàn)斗次數(shù)進行快捷設置。由于在應對不同本時,這兩者通常需要根據(jù)情況改變,如果每次都進入設置界面,個人感覺有點麻煩。
當腳本狀態(tài)識別錯誤時,可能陷入卡死,此時可以點擊“狀態(tài)重置”,當然也可以直接關(guān)了重開,那就是時間成本的問題了。
記得一定要先連接開始再開始腳本。
現(xiàn)在,恭喜你,成功運行腳本了!以后的腳本就不需要這么多設置了,必要的時候改改快捷設置里面的就可以了。
下一篇會寫寫腳本的開發(fā)體會,會講一講新版本更新遇到的困難和技術(shù)迭代過程。