admiral_stats_parser 0.1.0 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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