OSDN Git Service

報告書の海戦に中破艦を表示する
authorKazuhiro Fujieda <fujieda@users.osdn.me>
Fri, 21 Feb 2020 10:55:58 +0000 (19:55 +0900)
committerKazuhiro Fujieda <fujieda@users.osdn.me>
Fri, 21 Feb 2020 10:56:53 +0000 (19:56 +0900)
KancolleSniffer.Test/BattleLogProcessorTest.cs
KancolleSniffer.Test/LogProcessorTest.cs
KancolleSniffer/Log/BattleLogProcessor.cs
LogViewer/tags.tag

index fd9f6db..6a6441f 100644 (file)
@@ -41,11 +41,14 @@ namespace KancolleSniffer.Test
             input[14] = "5/36";\r
             input[15] = "綾波改二(Lv148)";\r
             input[16] = "20/37";\r
+            input[17] = "夕立改二(Lv148)";\r
+            input[18] = "18/36";\r
             input[37] = "制空権確保";\r
             var result = new BattleLogProcessor().Process(input);\r
             PAssert.That(() => result[5] == "T字有利");\r
             PAssert.That(() => result[37] == "確保");\r
             PAssert.That(() => result[38] == "龍鳳改(Lv97)・夕立改(Lv148)");\r
+            PAssert.That(() => result[39] == "夕立改二(Lv148)");\r
         }\r
 \r
         [TestMethod]\r
@@ -100,7 +103,7 @@ namespace KancolleSniffer.Test
             var result = new BattleLogProcessor().Process(input);\r
             PAssert.That(() => result[21] == "潮改二(Lv94)・龍驤改二(Lv99)" &&\r
                                result[22] == "33/33・50/50");\r
-            PAssert.That(() => result.Length == 40);\r
+            PAssert.That(() => result.Length == 41);\r
         }\r
 \r
         [TestMethod]\r
@@ -109,7 +112,7 @@ namespace KancolleSniffer.Test
             var input = Enumerable.Repeat("", 38).ToArray();\r
             input[1] = "サーモン海域";\r
             var result = new BattleLogProcessor(new Dictionary<string, string> {{"サーモン海域", "5-4"}}).Process(input);\r
-            PAssert.That(() => result[39] == "5-4");\r
+            PAssert.That(() => result[40] == "5-4");\r
         }\r
     }\r
 }
\ No newline at end of file
index b8c7c8c..8b9769c 100644 (file)
@@ -68,7 +68,7 @@ namespace KancolleSniffer.Test
                 result.First() ==\r
                 "[\"2018-09-08 11:28:01\",\"鎮守府正面海域\",\"3\",\"ボス\",\"A\",\"同航戦\",\"単縦陣\",\"単縦陣\",\"敵主力艦隊\",\"駆逐艦\",\"雷\"," +\r
                 "\"浜波改(Lv78)\",\"32/32\",\"涼風(Lv10)\",\"3/16\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\"," +\r
-                "\"軽巡ホ級\",\"0/33\",\"駆逐イ級\",\"0/20\",\"駆逐イ級\",\"7/20\",\"\",\"\",\"\",\"\",\"\",\"\",\"0\",\"0\",\"\",\"涼風(Lv10)\",\"1-1\"]");\r
+                "\"軽巡ホ級\",\"0/33\",\"駆逐イ級\",\"0/20\",\"駆逐イ級\",\"7/20\",\"\",\"\",\"\",\"\",\"\",\"\",\"0\",\"0\",\"\",\"涼風(Lv10)\",\"\",\"1-1\"]");\r
         }\r
 \r
         /// <summary>\r
index 8a8ad06..e374f89 100644 (file)
@@ -62,9 +62,11 @@ namespace KancolleSniffer.Log
             if (data[7].EndsWith("航行序列"))\r
                 data[7] = data[7].Substring(0, 4);\r
             data[37] = ShortenAirBattleResult(data[37]);\r
-            var result = new string[40];\r
-            result[38] = GenerateDamagedShip(data);\r
-            result[39] = map;\r
+            var result = new string[41];\r
+            var damage = GenerateDamagedShip(data);\r
+            result[38] = damage[0];\r
+            result[39] =  damage[1];\r
+            result[40] = map;\r
             Array.Copy(data, result, 38);\r
             return result;\r
         }\r
@@ -88,9 +90,10 @@ namespace KancolleSniffer.Log
             }\r
         }\r
 \r
-        private static string GenerateDamagedShip(string[] data)\r
+        private static string[] GenerateDamagedShip(string[] data)\r
         {\r
-            var damaged = new List<string>();\r
+            var badly = new List<string>();\r
+            var half = new List<string>();\r
             for (var i = 11; i < 11 + 12; i += 2)\r
             {\r
                 if (data[i] == "")\r
@@ -99,18 +102,24 @@ namespace KancolleSniffer.Log
                 var hp = data[i + 1];\r
                 try\r
                 {\r
-                    damaged.AddRange(from entry in ship.Split('・').Zip(hp.Split('・'), (s, h) => new {s, h})\r
+                    foreach (var entry in from entry in ship.Split('・').Zip(hp.Split('・'), (s, h) => new {s, h})\r
                         where entry.h.Contains("/")\r
                         let nm = entry.h.Split('/').Select(int.Parse).ToArray()\r
-                        where ShipStatus.CalcDamage(nm[0], nm[1]) == ShipStatus.Damage.Badly\r
-                        select entry.s);\r
+                        let level = ShipStatus.CalcDamage(nm[0], nm[1])\r
+                        select new {level, name = entry.s})\r
+                    {\r
+                        if (entry.level == ShipStatus.Damage.Half)\r
+                            half.Add(entry.name);\r
+                        else if (entry.level == ShipStatus.Damage.Badly)\r
+                            badly.Add(entry.name);\r
+                    }\r
                 }\r
                 catch (FormatException)\r
                 {\r
-                    return "";\r
+                    return new[] {"", ""};\r
                 }\r
             }\r
-            return string.Join("・", damaged);\r
+            return new []{string.Join("・", badly), string.Join("・", half)};\r
         }\r
 \r
         private static readonly Regex Kana = new Regex(@"\([^)]+\)\(", RegexOptions.Compiled);\r
index 6d81974..3bfd73a 100644 (file)
@@ -83,7 +83,7 @@ this.rangeTabChange = function(e) {
 <script>
 this.tables = [
 "<th>日付</th><th>海域</th><th>マップ</th><th>マス</th><th>ボス</th><th>ランク</th><th>ドロップ艦種</th><th>ドロップ艦娘", // ドロップ
-"<th>日付</th><th style=\"min-width: 3.2em;\">海域</th><th>マップ</th><th>マス</th><th>ボス</th><th>ランク</th><th>艦隊行動</th><th>味方陣形</th><th>敵陣形</th><th style=\"min-width: 3.2em;\">敵艦隊</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 style=\"min-width: 2.2em;\">敵艦1</th><th>敵艦1HP</th><th style=\"min-width: 2.2em;\">敵艦2</th><th>敵艦2HP</th><th style=\"min-width: 2.2em;\">敵艦3</th><th>敵艦3HP</th><th style=\"min-width: 2.2em;\">敵艦4</th><th>敵艦4HP</th><th style=\"min-width: 2.2em;\">敵艦5</th><th>敵艦5HP</th><th style=\"min-width: 2.2em;\">敵艦6</th><th>敵艦6HP</th><th>味方制空値</th><th>敵制空値</th><th>制空状態</th>", // 海戦
+"<th>日付</th><th style=\"min-width: 3.2em;\">海域</th><th>マップ</th><th>マス</th><th>ボス</th><th>ランク</th><th>艦隊行動</th><th>味方陣形</th><th>敵陣形</th><th style=\"min-width: 3.2em;\">敵艦隊</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 style=\"min-width: 2.2em;\">敵艦1</th><th>敵艦1HP</th><th style=\"min-width: 2.2em;\">敵艦2</th><th>敵艦2HP</th><th style=\"min-width: 2.2em;\">敵艦3</th><th>敵艦3HP</th><th style=\"min-width: 2.2em;\">敵艦4</th><th>敵艦4HP</th><th style=\"min-width: 2.2em;\">敵艦5</th><th>敵艦5HP</th><th style=\"min-width: 2.2em;\">敵艦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>秘書艦</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>", // 建造
@@ -147,18 +147,20 @@ this.tableOptions = function(tableId) {
 };
 
 this.dropColumns = function() {
-    return [{data: 0}, {data: 1}, {data: 39}, {data: 2}, {data: 3}, {data: 4}, {data: 9}, {data: 10}];
+    return [{data: 0}, {data: 1}, {data: 40}, {data: 2}, {data: 3}, {data: 4}, {data: 9}, {data: 10}];
 };
 
 this.sortieColumns = function() {
     var entries = [];
     for (var i = 0; i < 38; i++) {
         if (i === 2)
-            entries.push({data: 39});
+            entries.push({data: 40});
         if (i === 9 || i === 10)
             continue;
-        if (i === 23)
+        if (i === 23) {
             entries.push({data: 38});
+            entries.push({data: 39});
+        }
         entries.push({data: i});
     }
     return entries;