admiral_stats_parser 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 15a61b2178653f51b485092de86610692e07b3fd
4
- data.tar.gz: 57db109cd0d32925ee00bb1bf8deae3b24ea15c4
3
+ metadata.gz: bc271aeb0bd7b05e05e5a2b7669d5b1fa0ad1608
4
+ data.tar.gz: 980774085dbc450097256409f8d3d90e5102de3b
5
5
  SHA512:
6
- metadata.gz: 6fdcb4926dd56b28b57ab0a2ba92ee1f91eea80c114fe362239a23f9cd778b0bb7bc4d17e7a6ccb5bb63ecaa9db89fa87a257c906271a839057f8794fe3fe1ee
7
- data.tar.gz: 3965ee565b083a15d363fb6e09d949b0f33d54e2d5e3189a5d6655425e1b49576fc0a6743915d092448774cb87fc03eed16cb2df6d5d70681eaeee4e7dc3da51
6
+ metadata.gz: c0c2fd5dff2512cb00aba64b976992f032c2b38bc25b63db24b1174bc29ac175a0060e5285fe84975bf807b9f6c9f09ed10e1eb450b609ec29244006e3e1a620
7
+ data.tar.gz: cfc325f69e5020f4c2885f83a2ead90ad12199ee91ac87f21de7f8fae7eee32f28fdad04d0964e065f1e59e7c23f6cfc4864c79a1e30f7293274dce9f8412ad7
data/README.md CHANGED
@@ -21,12 +21,23 @@ Or install it yourself as:
21
21
  ## Usage
22
22
 
23
23
  ```
24
- AdmiralStatsParser.parse_personal_basic(json, api_version)
25
- AdmiralStatsParser.parse_area_capture(json, api_version)
26
- AdmiralStatsParser.parse_tc_book(json, api_version)
27
- AdmiralStatsParser.parse_equip_book(json, api_version)
28
- AdmiralStatsParser.parse_character_list(json, api_version)
29
- AdmiralStatsParser.parse_equip_list(json, api_version)
24
+ # 基本情報
25
+ AdmiralStatsParser.parse_personal_basic_info(json, api_version)
26
+
27
+ # 海域情報
28
+ AdmiralStatsParser.parse_area_capture_info(json, api_version)
29
+
30
+ # 艦娘図鑑
31
+ AdmiralStatsParser.parse_tc_book_info(json, api_version)
32
+
33
+ # 装備図鑑
34
+ AdmiralStatsParser.parse_equip_book_info(json, api_version)
35
+
36
+ # 艦娘一覧
37
+ AdmiralStatsParser.parse_character_list_info(json, api_version)
38
+
39
+ # 装備一覧
40
+ AdmiralStatsParser.parse_equip_list_info(json, api_version)
30
41
  ```
31
42
 
32
43
  ## Specification
@@ -1,10 +1,41 @@
1
1
  # -*- coding: utf-8 -*-
2
+ # 海域情報
2
3
  class AreaCaptureInfo
4
+ # 海域番号と海域名の対応関係
5
+ AREA_NAMES = {
6
+ 1 => '鎮守府海域',
7
+ 2 => '南西諸島海域',
8
+ 3 => '北方海域',
9
+ 4 => '西方海域',
10
+ }
11
+
12
+ # サブ海域番号と海域名の対応関係
13
+ AREA_SUB_NAMES = {
14
+ 1 => {
15
+ 1 => '鎮守府正面海域',
16
+ 2 => '南西諸島沖',
17
+ 3 => '製油所地帯沿岸',
18
+ 4 => '南西諸島防衛戦',
19
+ },
20
+ 2 => {
21
+ 1 => 'カムラン半島',
22
+ 2 => 'バシー島沖',
23
+ 3 => '東部オリョール海',
24
+ 4 => '沖ノ島海域',
25
+ },
26
+ 3 => {
27
+ 1 => 'モーレイ海哨戒',
28
+ 2 => 'キス島撤退作戦',
29
+ 3 => 'アルフォンシーノ方面進出',
30
+ 4 => '北方海域艦隊決戦',
31
+ },
32
+ 4 => {
33
+ 1 => 'ジャム島攻略作戦',
34
+ 2 => 'カレー洋制圧戦',
35
+ },
36
+ }
37
+
3
38
  # 海域番号
4
- # 1: 鎮守府海域
5
- # 2: 南西諸島海域
6
- # 3: 北方海域
7
- # 4: 西方海域
8
39
  attr_accessor :area_id
9
40
 
10
41
  # サブ海域番号
@@ -57,4 +88,20 @@ class AreaCaptureInfo
57
88
  # NOTCLEAR: 出撃可能だが未クリア
58
89
  # NOOPEN: 出撃不可
59
90
  attr_accessor :area_clear_state
91
+
92
+ # 海域を表す数値を、海域名に変換して返します。
93
+ def area_id_to_s
94
+ AREA_NAMES.include?(@area_id) ? AREA_NAMES[@area_id] : @area_id.to_s
95
+ end
96
+
97
+ # サブ海域を表す数値を、海域名に変換して返します。
98
+ def area_sub_id_to_s
99
+ return "#{@area_id}-#{@area_sub_id}" unless AREA_SUB_NAMES.include?(@area_id)
100
+
101
+ if AREA_SUB_NAMES[@area_id].include?(@area_sub_id)
102
+ AREA_SUB_NAMES[@area_id][@area_sub_id]
103
+ else
104
+ "#{@area_id}-#{@area_sub_id}"
105
+ end
106
+ end
60
107
  end
@@ -1,4 +1,5 @@
1
1
  # -*- coding: utf-8 -*-
2
+ # 艦娘一覧
2
3
  class CharacterListInfo
3
4
  # 図鑑No.
4
5
  attr_accessor :book_no
@@ -23,4 +24,60 @@ class CharacterListInfo
23
24
 
24
25
  # 艦娘のステータス画像(横長の画像)のファイル名
25
26
  attr_accessor :status_img
27
+
28
+ # 累計経験値表
29
+ EXP_TABLE = {
30
+ 92 => 584500,
31
+ 93 => 606500,
32
+ 94 => 631500,
33
+ 95 => 661500,
34
+ 96 => 701500,
35
+ 97 => 761500,
36
+ 98 => 851500,
37
+ 99 => 1000000,
38
+ }
39
+
40
+ # Lv を、これまでに取得した累計経験値に変換して返します。
41
+ # ただし、Lv をもとに計算する都合上、その Lv になってから取得した経験値は含みません。
42
+ # この累計経験値は、艦娘の経験値テーブルが、艦これの本家と同じと仮定して計算しています。
43
+ def lv_to_exp
44
+ case @lv
45
+ when 1..50
46
+ # Lv51までは、必要経験値が100ずつ増えていく
47
+ @lv * (@lv - 1) * 100 / 2
48
+ when 51..60
49
+ # Lv61までは、次レベルまでの必要経験値が200ずつ増えていく
50
+ a = 5000
51
+ d = 200
52
+ n = @lv - 50
53
+ # Lv50 までの累計経験値 = 122500
54
+ 122500 + n * (2 * a + (n - 1) * d) / 2
55
+ when 61..70
56
+ # Lv71までは、次レベルまでの必要経験値が300ずつ増えていく
57
+ a = 7000
58
+ d = 300
59
+ n = @lv - 60
60
+ # Lv60 までの累計経験値 = 181500
61
+ 181500 + n * (2 * a + (n - 1) * d) / 2
62
+ when 71..80
63
+ # Lv81までは、次レベルまでの必要経験値が400ずつ増えていく
64
+ a = 10000
65
+ d = 400
66
+ n = @lv - 70
67
+ # Lv70 までの累計経験値 = 265000
68
+ 265000 + n * (2 * a + (n - 1) * d) / 2
69
+ when 81..91
70
+ # Lv91までは、次レベルまでの必要経験値が500ずつ増えていく
71
+ a = 14000
72
+ d = 500
73
+ n = @lv - 80
74
+ # Lv80 までの累計経験値 = 383000
75
+ 383000 + n * (2 * a + (n - 1) * d) / 2
76
+ when 92..99
77
+ # Lv92以降は規則性がなくなるため、累計経験値表から取得
78
+ EXP_TABLE[@lv]
79
+ else
80
+ nil
81
+ end
82
+ end
26
83
  end
@@ -1,4 +1,5 @@
1
1
  # -*- coding: utf-8 -*-
2
+ # 装備図鑑
2
3
  class EquipBookInfo
3
4
  # 図鑑No.
4
5
  attr_accessor :book_no
@@ -1,14 +1,21 @@
1
1
  # -*- coding: utf-8 -*-
2
+ # 装備一覧
2
3
  class EquipListInfo
3
- # 種別
4
- # 1: 主砲
5
- # 2: 副砲・高角
6
- # 3: 魚雷
7
- # 4: 艦戦
8
- # 5: 艦爆・艦攻
9
- # 6: 偵察機
10
- # 7: ソナー・爆雷
11
- # 8: その他
4
+ # 種別の文字列表記
5
+ TYPE_NAMES = {
6
+ 1 => '主砲',
7
+ 2 => '副砲・高角',
8
+ 3 => '魚雷',
9
+ 4 => '艦戦',
10
+ 5 => '艦爆・艦攻',
11
+ 6 => '偵察機',
12
+ 7 => 'ソナー・爆雷',
13
+ 8 => 'その他',
14
+ }
15
+
16
+ # 種別を表す数値
17
+ # 装備図鑑の種別のほうが細かいので、こちらを使うメリットはほとんどない。
18
+ # 強いて言えば、提督情報のページと同じ表現に揃えたい場合か。
12
19
  attr_accessor :type
13
20
 
14
21
  # 図鑑No.
@@ -22,4 +29,9 @@ class EquipListInfo
22
29
 
23
30
  # アイコン画像のファイル名
24
31
  attr_accessor :img
32
+
33
+ # 装備の種別を表す文字列を返します。
34
+ def type_to_s
35
+ TYPE_NAMES.include?(@type) ? TYPE_NAMES[@type] : @type.to_s
36
+ end
25
37
  end
@@ -1,5 +1,22 @@
1
1
  # -*- coding: utf-8 -*-
2
+ # 基本情報
2
3
  class PersonalBasicInfo
4
+ # 階級を表す数値と、階級名の対応関係
5
+ # 新米少佐
6
+ # 中堅少佐
7
+ # 少佐
8
+ # 新米中佐
9
+ # 中佐
10
+ # 大佐
11
+ # 少将
12
+ # 7: 中将
13
+ # 大将
14
+ # 元帥
15
+ # 集計中
16
+ TITLES = {
17
+ 7 => '中将',
18
+ }
19
+
3
20
  # 提督名
4
21
  attr_accessor :admiral_name
5
22
 
@@ -33,7 +50,6 @@ class PersonalBasicInfo
33
50
  attr_accessor :rank
34
51
 
35
52
  # 階級を表す数値 (From API version 2)
36
- # 7: 中将
37
53
  attr_accessor :title_id
38
54
 
39
55
  # 最大備蓄可能各資源量 (From API version 2)
@@ -42,5 +58,9 @@ class PersonalBasicInfo
42
58
  # 戦略ポイント (From API version 2)
43
59
  attr_accessor :strategy_point
44
60
 
45
- # {"admiralName":"ムジ","fuel":6750,"ammo":6183,"steel":7126,"bauxite":6513,"bucket":46,"level":32,"roomItemCoin":82,"resultPoint":"3571","rank":"圏外","titleId":7,"materialMax":7200,"strategyPoint":915}
61
+ # 階級を表す数値を、階級を表す文字列に変換して返します。
62
+ # 数値と階級の対応関係を未調査のため、私が自分で確認できた範囲だけ、文字列にして返します。
63
+ def title_id_to_s
64
+ TITLES.include?(@title_id) ? TITLES[@title_id] : @title_id.to_s
65
+ end
46
66
  end
@@ -1,4 +1,5 @@
1
1
  # -*- coding: utf-8 -*-
2
+ # 艦娘図鑑
2
3
  class TcBookInfo
3
4
  # 図鑑No.
4
5
  attr_accessor :book_no
@@ -5,7 +5,6 @@ require 'admiral_stats_parser/model/personal_basic_info'
5
5
  module PersonalBasicInfoParser
6
6
  MANDATORY_KEYS = {
7
7
  1 => {
8
- :admiral_name => String,
9
8
  :fuel => Integer,
10
9
  :ammo => Integer,
11
10
  :steel => Integer,
@@ -15,7 +14,6 @@ module PersonalBasicInfoParser
15
14
  :room_item_coin => Integer,
16
15
  },
17
16
  2 => {
18
- :admiral_name => String,
19
17
  :fuel => Integer,
20
18
  :ammo => Integer,
21
19
  :steel => Integer,
@@ -31,6 +29,16 @@ module PersonalBasicInfoParser
31
29
  }
32
30
  }
33
31
 
32
+ OPTIONAL_KEYS = {
33
+ 1 => {
34
+ # 元のデータには必ず提督名が含まれるが、データ解析の上では不要のため、オプションとする
35
+ :admiral_name => String,
36
+ },
37
+ 2 => {
38
+ :admiral_name => String,
39
+ }
40
+ }
41
+
34
42
  def self.parse(json, api_version)
35
43
  items = JSON.parse(json)
36
44
 
@@ -51,6 +59,19 @@ module PersonalBasicInfoParser
51
59
  result.instance_variable_set("@#{key.to_s}", items[camel_case_key])
52
60
  end
53
61
 
62
+ OPTIONAL_KEYS[api_version].each do |key, key_class|
63
+ # キーが含まれなければ、処理をスキップ
64
+ camel_case_key = key.to_s.split('_').inject([]){ |buffer,e| buffer.push(buffer.empty? ? e : e.capitalize) }.join
65
+ next unless items.include?(camel_case_key)
66
+
67
+ # 結果のクラスが合わなければエラー
68
+ unless items[camel_case_key].is_a?(key_class)
69
+ raise "Optional key #{key} is not class #{key_class}"
70
+ end
71
+
72
+ result.instance_variable_set("@#{key.to_s}", items[camel_case_key])
73
+ end
74
+
54
75
  result
55
76
  end
56
77
  end
@@ -1,3 +1,3 @@
1
1
  module AdmiralStatsParser
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.1"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: admiral_stats_parser
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Masahiro Yoshizawa
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-07-25 00:00:00.000000000 Z
11
+ date: 2016-07-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler