OSDN Git Service

海戦報告書に大破艦の欄を追加する
authorKazuhiro Fujieda <fujieda@users.osdn.me>
Sat, 12 Aug 2017 10:29:10 +0000 (19:29 +0900)
committerKazuhiro Fujieda <fujieda@users.osdn.me>
Sat, 12 Aug 2017 10:29:10 +0000 (19:29 +0900)
KancolleSniffer/LogServer.cs
LogViewer/tags.html

index af74ab9..51672bb 100644 (file)
@@ -153,7 +153,7 @@ namespace KancolleSniffer
                 }\r
                 else if (path.EndsWith("海戦・ドロップ報告書.json"))\r
                 {\r
-                    records = 38;\r
+                    records = 39;\r
                     battle = true;\r
                 }\r
                 else if (path.EndsWith("開発報告書.json"))\r
@@ -196,7 +196,7 @@ namespace KancolleSniffer
                     if (material)\r
                         entries = data.Take(9);\r
                     if (battle)\r
-                        entries = data.Concat(Enumerable.Repeat("", 3)).Take(38);\r
+                        entries = ProcessBattleLog(data);\r
                     if (entries.Count() != records)\r
                         continue;\r
                     if (number)\r
@@ -221,6 +221,52 @@ namespace KancolleSniffer
             }\r
         }\r
 \r
+        private static IEnumerable<string> ProcessBattleLog(string[] data)\r
+        {\r
+            if (data.Length == 35)\r
+                data = data.Concat(Enumerable.Repeat("", 3)).ToArray();\r
+            if (data.Length != 38)\r
+                return data;\r
+            return AddDamagedShip(data);\r
+        }\r
+\r
+        private static IEnumerable<string> AddDamagedShip(string[] data)\r
+        {\r
+            var damaged = new List<string>();\r
+            for (var i = 11; i < 11 + 12; i += 2)\r
+            {\r
+                var ship = data[i];\r
+                if (ship == "")\r
+                    continue;\r
+                var hp = data[i + 1];\r
+                try\r
+                {\r
+                    if (ship.Contains("・"))\r
+                    {\r
+                        var ships = ship.Split('・');\r
+                        var hps = hp.Split('・');\r
+                        var nowMax = hps[0].Split('/').Select(int.Parse).ToArray();\r
+                        if (ShipStatus.CalcDamage(nowMax[0], nowMax[1]) == ShipStatus.Damage.Badly)\r
+                            damaged.Add(ships[0]);\r
+                        nowMax = hps[1].Split('/').Select(int.Parse).ToArray();\r
+                        if (ShipStatus.CalcDamage(nowMax[0], nowMax[1]) == ShipStatus.Damage.Badly)\r
+                            damaged.Add(ships[1]);\r
+                    }\r
+                    else\r
+                    {\r
+                        var nowMax = hp.Split('/').Select(int.Parse).ToArray();\r
+                        if (ShipStatus.CalcDamage(nowMax[0], nowMax[1]) == ShipStatus.Damage.Badly)\r
+                            damaged.Add(ship);\r
+                    }\r
+                }\r
+                catch (FormatException)\r
+                {\r
+                    return data;\r
+                }\r
+            }\r
+            return data.Take(23).Concat(new []{string.Join("・", damaged)}).Concat(data.Skip(23));\r
+        }\r
+\r
         private static void SendFile(Socket client, string path, string mime)\r
         {\r
             using (var header = new StreamWriter(new MemoryStream(), Encoding.ASCII))\r
index 4ca4648..5ad2723 100644 (file)
@@ -62,7 +62,7 @@ opts.observable.on("mainTabChanged", function(idx) {
 <script>
 this.tables = [
 "<th>日付</th><th>海域</th><th>マス</th><th>ボス</th><th>ランク</th><th>ドロップ艦種</th><th>ドロップ艦娘", // ドロップ
-"<th>日付</th><th>海域</th><th>マス</th><th>ボス</th><th>ランク</th><th>艦隊行動</th><th>味方陣形</th><th>敵陣形</th><th>敵艦隊</th><th>味方艦1</th><th>味方艦1HP</th><th>味方艦2</th><th>味方艦2HP</th><th>味方艦3</th><th>味方艦3HP</th><th>味方艦4</th><th>味方艦4HP</th><th>味方艦5</th><th>味方艦5HP</th><th>味方艦6</th><th>味方艦6HP</th><th>敵艦1</th><th>敵艦1HP</th><th>敵艦2</th><th>敵艦2HP</th><th>敵艦3</th><th>敵艦3HP</th><th>敵艦4</th><th>敵艦4HP</th><th>敵艦5</th><th>敵艦5HP</th><th>敵艦6</th><th>敵艦6HP</th><th>味方制空値</th><th>敵制空値</th><th>制空状態</th>", // 海戦
+"<th>日付</th><th>海域</th><th>マス</th><th>ボス</th><th>ランク</th><th>艦隊行動</th><th>味方陣形</th><th>敵陣形</th><th>敵艦隊</th><th>味方艦1</th><th>味方艦1HP</th><th>味方艦2</th><th>味方艦2HP</th><th>味方艦3</th><th>味方艦3HP</th><th>味方艦4</th><th>味方艦4HP</th><th>味方艦5</th><th>味方艦5HP</th><th>味方艦6</th><th>味方艦6HP</th><th>大破艦</ht><th>敵艦1</th><th>敵艦1HP</th><th>敵艦2</th><th>敵艦2HP</th><th>敵艦3</th><th>敵艦3HP</th><th>敵艦4</th><th>敵艦4HP</th><th>敵艦5</th><th>敵艦5HP</th><th>敵艦6</th><th>敵艦6HP</th><th>味方制空値</th><th>敵制空値</th><th>制空状態</th>", // 海戦
 "<th>日付</th><th>結果</th><th>遠征</th><th>燃料</th><th>弾薬</th><th>鋼材</th><th>ボーキ</th><th>開発資材</th><th>高速修復材</th><th>高速建造材</th>", // 遠征
 "<th>日付</th><th>開発装備</th><th>種別</th><th>燃料</th><th>弾薬</th><th>鋼材</th><th>ボーキ</th><th>秘書艦</th><th>司令部Lv</th>", // 開発
 "<th>日付</th><th>種類</th><th>名前</th><th>艦種</th><th>燃料</th><th>弾薬</th><th>鋼材</th><th>ボーキ</th><th>開発資材</th><th>空きドック</th><th>秘書艦</th><th>司令部Lv</th>", // 建造
@@ -116,7 +116,7 @@ this.init = function() {
             opts.columns = [{ data: 0 }, { data: 1 }, { data: 2 }, { data: 3 }, { data: 4 }, { data: 9 }, { data: 10 }];
         } else if (t === 1) {
             var entries = [];
-            for (var i = 0; i < 38; i++) {
+            for (var i = 0; i < 39; i++) {
                 if (i === 9 || i === 10)
                     continue;
                 entries.push({ data: i });