艦これのバトルJSONを再解析(祥鳳改小破編)

Fiddlerを使って艦これのバトルJSONを解析(敷波復活編) | Moonmile Solutions Blog
http://www.moonmile.net/blog/archives/5071

結局のところ Feddler 使った諜報ブラウザを作って再び解析。やっぱり夜戦の前とか続行の前とかに「うっかり続行してしまって撃沈」してしまうのもアレなので。いやいや、ゲームとしてはありなんですけどね。

  1. /kcsapi/api_req_sortie/battle
  2. /kcsapi/api_req_sortie/battleresult
  3. /kcsapi/api_get_member/deck
  4. /kcsapi/api_get_member/ship2
  5. /kcsapi/api_get_member/ship3

の順番で流れてくるので順番に調べます。以下、メモ的に。

戦闘を開始すると battle が降ってくるので、

“api_dock_id”:1,
“api_ship_ke”:[-1,510,510,510,505,502,502],
“api_ship_lv”:[-1,1,1,1,1,1,1],
“api_nowhps”:[-1,70,77,45,55,29,74,65,65,65,33,22,22],
“api_maxhps”:[-1,75,77,45,55,32,74,65,65,65,33,22,22],

で敵戦艦の種類とHPを取得。バトル自体の順番は、

“api_hougeki1”:{
“api_at_list”:[-1,2,1,12,6,7,4,5,3],
“api_at_type”:[-1,0,0,0,0,0,0,0,0],
“api_df_list”:[-1,[10],[9],[6],[12],[3],[8],[7],[7]],
“api_si_list”:[-1,7,8,502,7,-1,6,3,-1],
“api_cl_list”:[-1,[2],[1],[0],[1],[1],[1],[2],[1]],
“api_damage”:[-1,[129],[102],[0],[73],[12],[33.1],[28],[65]]
},
“api_hougeki2”:{
“api_at_list”:[-1,1],
“api_at_type”:[-1,0],
“api_df_list”:[-1,[8]],
“api_si_list”:[-1,8],
“api_cl_list”:[-1,[1]],
“api_damage”:[-1,[98]]
},
“api_hougeki3”:null,
“api_raigeki”:null
}

なところで、hougekiX を順番に調べればOK。たぶん、api_at_list のところが味方&敵の攻撃&防御の順番と思う。このあたりはあとで動画キャプチャを利用して突合せ。

戦闘が終わると battleresult が降ってくるので、これで結果をチェック。艦娘の経験値などは

“api_win_rank”:”S”,
“api_get_exp”:60,
“api_mvp”:1,
“api_member_lv”:54,
“api_member_exp”:146241,
“api_get_base_exp”:120,
“api_get_ship_exp”:[-1,432,144,144,144,144,144],
“api_get_exp_lvup”:[[390850,397000],[53943,56100],[41250,43500],[36353,37800],[44292,46500],[5851,6600]],

で取得。

“api_lost_flag”:[-1,0,0,0,0,0,0],

のところは、味方かロスト…だと思う。敵の撃沈がここではわからない?ので、先の api_damage あたりでチェック?

ここで、祥鳳改が「小破」になっているので、

image

続き deck で艦隊に属している艦娘を調べて、

{
“api_member_id”:41898,
“api_id”:1,
“api_name”:”u524du885bu8266u968a”,
“api_name_id”:”110117909,
“api_mission”:[0,0,0,0],
“api_flagship”:”0″,
“api_ship”:[83,252,278,81,288,675]
},

ここの api_ship は「保持してい艦娘」。保持している祥鳳改は「278」なので、ship2 か ship3 で艦娘IDに直すと、「282」が「祥鳳改」とわかる。

{
“api_id”:278,
“api_sortno”:382,
“api_ship_id”:282,
“api_lv”:29,
“api_exp”:[41394,2106,27],
“api_nowhp”:33,
“api_maxhp”:45,
“api_leng”:1,
“api_slot”:[699,700,475,218,-1],
“api_onslot”:[18,12,12,6,0],
“api_kyouka”:[11,0,6,6,0],
“api_backs”:4,
“api_fuel”:40,
“api_bull”:40,
“api_slotnum”:4,
“api_ndock_time”:4260000,
“api_ndock_item”:[15,28],
“api_srate”:1,
“api_cond”:49,
“api_karyoku”:[11,29],
“api_raisou”:[0,0],
“api_taiku”:[30,39],
“api_soukou”:[31,59],
“api_kaihi”:[37,59],
“api_taisen”:[9,0],
“api_sakuteki”:[47,79],
“api_lucky”:[12,59],
“api_locked”:1
},

小破などは、

“api_nowhp”:33,
“api_maxhp”:45,

を見るのだと思う。ここは後で。ちなみに、弾丸と燃料が

“api_fuel”:40,
“api_bull”:40,

入渠がこれ。

“api_ndock_time”:4260000,
“api_ndock_item”:[15,28],

なので、進撃の選択の場合は ship2 が降ってくるので、これから hp を見ればいいんだけど、夜戦の場合は違うようで、battle の後に「夜戦」の選択になるので、battle の api_damage を見て艦娘の hp を減らさないといけない。

多分、艦娘と敵艦の hp と

“api_ship_ke”:[-1,510,510,510,505,502,502],
“api_ship_lv”:[-1,1,1,1,1,1,1],
“api_nowhps”:[-1,70,77,45,55,29,74,65,65,65,33,22,22],
“api_maxhps”:[-1,75,77,45,55,32,74,65,65,65,33,22,22],

バトルの対応(1から12番まで)があるので、これで hp を引けばいい。

“api_hougeki1”:{
“api_at_list”:[-1,2,1,12,6,7,4,5,3],
“api_at_type”:[-1,0,0,0,0,0,0,0,0],
“api_df_list”:[-1,[10],[9],[6],[12],[3],[8],[7],[7]],
“api_si_list”:[-1,7,8,502,7,-1,6,3,-1],
“api_cl_list”:[-1,[2],[1],[0],[1],[1],[1],[2],[1]],
“api_damage”:[-1,[129],[102],[0],[73],[12],[33.1],[28],[65]]
},

演習の場合もいっしょ。小破、大破などは、maxhp が分かっているので hp と比較して割合だと思う。艦娘の名前は先に現れる ship2 などであらかじめチェックしておけばOK。

カテゴリー: 艦これ パーマリンク

艦これのバトルJSONを再解析(祥鳳改小破編) への2件のフィードバック

  1. おかのん のコメント:

    Fiddler文字化けしてしまうのですけど対策ってありますかね?

    • masuda のコメント:

      たぶん、Fiddler.Session#GetResponseBodyAsString で文字列をとってきたときに文字コードがあっていないだけなので、#responseBodyBytes でとってきて、自前でバイナリ配列から適当な文字コードに変換すればよいんじゃないでしょうか?

      バイト型配列のデータを文字コードを指定して文字列に変換: .NET Tips: C#, VB.NET
      http://dobon.net/vb/dotnet/string/getencoding.html

      あたりとか。

コメントは停止中です。