May 9, 2015

製作艦隊收藏(艦これ)外掛 (一) 事前準備

此系列文紀錄我撰寫艦隊收藏(艦これ)遊戲外掛的過程。


目錄


(零) 聲明

此程式僅為個人學習 Python 的實作練習,並藉由此遊戲來分析與驗證網路傳輸行為,所有程式及文章僅為程式學習目的,架設於 Bitbucket 的私人 repository 中,無任何公開、散佈或任何營利行為,

不正ツール使用は規約違反です。お辞め頂けますようお願い申し上げます。 – 艦これ開発/運営 公式ツイート

本人不鼓勵也不贊同於艦これ使用任何形式的外掛或任何不正的工具,使用此類工具違反 艦これ 的 利用規約,並可能導致帳號被永久刪除。

The program was built for Python learning purpose only. Both the source codes and the program are stored in Bitbucket’s private repository. They are not disclosed to anyone in any form. Using such programs violates kancolle’s Terms of Use and may result in a permanent account ban.


(一) 背景動機

1. 什麼是艦隊收藏(艦これ)

一款網頁遊戲,詳情請參考 維基百科巴哈姆特 或 PTT 的 kancolle 版。

2. 為什麼選擇 Python

兩個月前,有位非本科系的朋友想學寫程式,我上網查了一下發現 Python 似乎很適合新手,便推薦他學習。為了怕他有問題沒人可以問,於是我也跟著一起修線上課程。

我的學習資源是:

我已經有足夠的 coding 經驗,學習起 Python 十分迅速。

於是想說來做點不一樣的 project,希望能藉由實作的過程更深入學習 Python。

3. 為什麼選擇艦隊收藏(艦これ)

差不多也是兩個月前,在學長的推薦下我開始玩艦これ,邊玩邊觀察這個遊戲,得到的結論如下:

  • 不用課金,只要運氣不要太差,肯花時間就能蒐集到幾乎所有腳色。
  • 與多數網頁遊戲類似,有時必須在特定時間做特定的事
  • 每日/每周任務的獎勵非常豐富,大部分任務都很簡單,但有些任務在做重複的事
  • 某些時候玩家只是在等待遊戲進行,並不須做任何操作。
  • 有些介面很不友善,玩家必須花多餘的步驟才能得到想要的資訊

基於上列粗字的部分,我認為這款遊戲十分適合輔助性質的外掛。


(二) 現有之工具 Survey

跟學術研究一樣,在開始實作之前,我們必須先對現有工具做 survey,避免花了時間後卻做出跟別人一樣的東西。

外掛程式本身遊走在不正使用的邊緣,很少公開,固這邊只針對 Open Source 的工具做 Survey。

在 Github 搜尋 kancolle,歸類後大致可以分成下列幾個類型:

1. 資料庫 Database 工具

統計各種遊戲資訊的資料庫。

2. 直連、代連等 VPN/Proxy 工具

艦これ網頁頁面封鎖日本海外 IP,故海外玩家大部分必須經由 VPN 啟動連線。

只有遊戲網頁頁面會偵測 IP,遊戲本身的 Flash 不會,故連上遊戲(讀進 Flash)後就可以切斷 VPN。

這類 Proxy 程式可以讓玩家不須連上 VPN 即可連上遊戲 Flash 本體,也就是俗稱的「直連」,或是提供 VPN 代連的服務。

3. 加快讀取速度的工具

艦これ伺服器架在日本,國外玩家若透過 VPN 連線,速度會偏慢,故能讀取越少東西越好。

瀏覽器在開啟艦これ時,需要從伺服器初始化一些資料,有時候某些 Request 其實是多餘的(已經 Cache 過了),此類工具檢查瀏覽器是否已有相關 Cache,加快遊戲讀取速度。

4. 輔助型、提供資訊工具

艦これ預設的 UI 實在設計的不太好,此類工具能更簡潔明瞭顯示遊戲資訊。

這類工具僅抓取遊戲與伺服器間傳送的資訊,並沒有破壞遊戲的平衡或增加伺服器負擔。


Kancolle Viewer

日本人開發的最強的艦これ專用瀏覽器,提供非常多玩家需要的資訊,可惜 Windows 限定。


Screenshot from 提督業も忙しい!


Kancolle Tool

跟上述 Kancolle Viewer 功能類似,但是完成度較低,是歪國人開發的。

其最大特色在於能夠「抓取」並過濾從伺服器來的訊息,對照資料庫翻譯成英文後,再顯示在遊戲中,讓遊戲變成英文介面。

The patch works by laying a filter between the game and the server.
When the game requests some data from the server, this little filter (a protocol/reply handler, depending on the system), catches the response and looks up translations in a database, swaps the Japanese text out for English, and hands it back.
Kancolle Tool FAQ

非常有創意的做法。


Kancolle Widget

很實用的 Chrome 外掛,用 OCR 技術分析船艦建造時間等,本體是個 Chrome 外掛,故只要是 Chrome 瀏覽器都可使用,不限定作業系統。


Kancolle Helper

也是個 Chrome 外掛,可顯示四個艦隊的艦娘與裝備資訊。


5. 作弊型外掛

這類工具如同其名稱,已經超越了輔助性質,直接影響到遊戲公平性,且會增加遊戲伺服器的負擔。

https://github.com/methane/kancolle-tools/blob/master/autorepair.py
自動維修,程式解析 API 後直接發封包給 Server 要求維修。
最後更新 26 Oct 2013,使用舊的 API,已經不能用了。

https://github.com/tesseract2048/kancolle-warden/blob/master/client_simulator.py
自動遠征、戰鬥、維修等等,解析 API 後直接發封包給 Server 做要求。
最後更新 19 Feb 2014,使用舊的 API,已經不能用了。

https://github.com/niyuna/kancolle_echor/blob/master/kancolle_echor.py
跟上面一樣,自動遠征、戰鬥、維修等等,解析 API 後直接發封包給 Server 做要求。
最後更新 7 Jun 2014

https://github.com/amylase/kancolle-auto
用 Sikuli 偵測遊戲畫面,並模擬玩家執行自動重複遠征-完成-補給-遠征等動作。
最後更新 Mar 22, 2014


(三) 分析與結論

我們分析完艦これ遊戲的特色,也針對現有工具做了調查,接下來就要寫下結論並擬定我們的目標。

1. 結論

若作業系統是 Windows,忽略所有外掛,直接使用 Kancolle Viewer 就對了,如果有不足的地方 fork 修改就好,不用重造輪子。

Kancolle Viewer 唯一的缺點就是 不支援 Windows 以外的作業系統

2. 目標

而我正好都使用 MAC 在玩艦娘,故不能用 Kancolle Viewer。

於是我的外掛目標如下:

  • 在 MAC 上能夠執行。
  • 能解決或簡化 VPN 問題。
  • 能像 Unix 一樣透過指令操作遊戲。
  • 能透過擷取伺服器與客戶端的資料,顯示原本 UI 沒顯示的資訊。
  • 能夠自動更換單一艦娘。
  • 能夠自動更換整個艦隊(使用者自訂的艦隊)。
  • 能夠自動建造、自動開發(自動輸入レシピ)。
  • 能夠自動全部補給/一個一個補給。
  • 能夠自動遠征。
  • 能夠自動閃亮亮(キラ付け)。
  • 能夠自動練功。
  • 能夠自動維修(維修完成後自動換下一個)。

上述目標應該都很好理解,我只稍微解釋一下「能像 Unix 一樣透過指令操作遊戲」

我使用 MAC Pro 13” 的觸控滑鼠來玩艦これ,但身為一個型男工程師,打字遠比點選要快,鍵盤遠比滑鼠要方便,故希望能夠像 Unix 系統一樣,透過 termianl 指令 (ls, cat, cd..) 來遊玩艦これ。如下圖:


(四) 製作過程

製作過程請參閱下方文章。


(五) 成果展示

1. 各功能分別展示

請參閱上方「製作過程」部分,每篇文章都分別展示其外掛功能的影片。

2. 所有功能

這個影片則是上方所有功能(影片)的合輯:

https://www.youtube.com/watch?v=J5FkO7qKq4c

在 Youtube 可選擇 HD 高畫質。