OSDN Git Service

集中開発に対応する
authorKazuhiro Fujieda <fujieda@users.osdn.me>
Thu, 3 Oct 2019 13:35:32 +0000 (22:35 +0900)
committerKazuhiro Fujieda <fujieda@users.osdn.me>
Thu, 3 Oct 2019 13:35:32 +0000 (22:35 +0900)
KancolleSniffer.Test/LoggerTest.cs
KancolleSniffer.Test/QuestCounterTest.cs
KancolleSniffer.Test/SnifferTest.cs
KancolleSniffer.Test/logs
KancolleSniffer/Log/Logger.cs
KancolleSniffer/Model/ItemInfo.cs
KancolleSniffer/Model/QuestCounter.cs
KancolleSniffer/Sniffer.cs

index 965f8d3..333e9ea 100644 (file)
@@ -238,6 +238,20 @@ namespace KancolleSniffer.Test
         }\r
 \r
         [TestMethod]\r
+        public void InspectCreateItemMulti()\r
+        {\r
+            var sniffer = new Sniffer();\r
+            var result = "";\r
+            sniffer.SetLogWriter((path, s, h) => { result += s + "|"; }, () => new DateTime(2019, 1, 1));\r
+            sniffer.EnableLog(LogType.CreateItem);\r
+            SnifferTest.SniffLogFile(sniffer, "createitem_002");\r
+            Assert.AreEqual("2019-01-01 00:00:00,失敗,,10,10,30,10,大淀改(167),120|" +\r
+                               "2019-01-01 00:00:00,,,10,10,30,10,大淀改(167),120|" +\r
+                               "2019-01-01 00:00:00,失敗,,10,10,30,10,大淀改(167),120|",\r
+                result);\r
+        }\r
+\r
+        [TestMethod]\r
         public void InspectGetShip()\r
         {\r
             var sniffer = new Sniffer();\r
index 688c2f0..c53a460 100644 (file)
@@ -1403,7 +1403,8 @@ namespace KancolleSniffer.Test
         {\r
             _questInfo.InspectQuestList(CreateQuestList(new[] {605, 606, 607, 608, 609, 619}));\r
 \r
-            _questCounter.CountCreateItem();\r
+            _questCounter.InspectCreateItem("api_verno=1&api_item1=10&api_item2=10&api_item3=30&api_item4=10&api_multiple_flag=0");\r
+            _questCounter.InspectCreateItem("api_verno=1&api_item1=10&api_item2=10&api_item3=30&api_item4=10&api_multiple_flag=1");\r
             _questCounter.CountCreateShip();\r
             _questCounter.InspectDestroyShip("api%5Fship%5Fid=98159%2C98166%2C98168&api%5Fverno=1");\r
             _questCounter.CountRemodelSlot();\r
@@ -1411,7 +1412,7 @@ namespace KancolleSniffer.Test
                 _questInfo.Quests.Select(q => new {q.Id, q.Count.Now})\r
                     .SequenceEqual(new[]\r
                     {\r
-                        new {Id = 605, Now = 1}, new {Id = 606, Now = 1}, new {Id = 607, Now = 1},\r
+                        new {Id = 605, Now = 4}, new {Id = 606, Now = 1}, new {Id = 607, Now = 4},\r
                         new {Id = 608, Now = 1}, new {Id = 609, Now = 3}, new {Id = 619, Now = 1}\r
                     }));\r
         }\r
index 8484a65..9832e54 100644 (file)
@@ -456,12 +456,16 @@ namespace KancolleSniffer.Test
         [TestMethod]\r
         public void CountItem()\r
         {\r
-            var sniffer1 = new Sniffer();\r
-            SniffLogFile(sniffer1, "createitem_001");\r
-            PAssert.That(() => sniffer1.ItemCounter.Now == 900);\r
-            var sniffer2 = new Sniffer();\r
-            SniffLogFile(sniffer2, "createship_001");\r
-            PAssert.That(() => sniffer2.ItemCounter.Now == 904);\r
+            var createItems = new Sniffer();\r
+            SniffLogFile(createItems, "createitem_001");\r
+            Assert.AreEqual(900, createItems.ItemCounter.Now);\r
+            PAssert.That(() => createItems.ItemCounter.Now == 900);\r
+            var createShips = new Sniffer();\r
+            SniffLogFile(createShips, "createship_001");\r
+            Assert.AreEqual(904, createShips.ItemCounter.Now);\r
+            var multiItems = new Sniffer();\r
+            SniffLogFile(multiItems, "createitem_002");\r
+            Assert.AreEqual(1307, multiItems.ItemCounter.Now);\r
         }\r
 \r
         /// <summary>\r
index 90ec01a..2975685 160000 (submodule)
@@ -1 +1 @@
-Subproject commit 90ec01acb709b2bef390d427b765aa0b08c48c10
+Subproject commit 2975685eb2dffae8f81255ca2375bfe880ded6fd
index 633843c..b6b754c 100644 (file)
@@ -13,6 +13,7 @@
 // limitations under the License.\r
 \r
 using System;\r
+using System.Collections.Generic;\r
 using System.Globalization;\r
 using System.IO;\r
 using System.Linq;\r
@@ -26,7 +27,7 @@ namespace KancolleSniffer.Log
     public enum LogType\r
     {\r
         None = 0,\r
-        Mission = 1 << 0,\r
+        Mission = 1,\r
         Battle = 1 << 1,\r
         Material = 1 << 2,\r
         CreateItem = 1 << 3,\r
@@ -242,19 +243,34 @@ namespace KancolleSniffer.Log
             if ((_logType & LogType.CreateItem) == 0)\r
                 return;\r
             var values = HttpUtility.ParseQueryString(request);\r
-            var name = "失敗";\r
-            var type = "";\r
-            if (json.api_slot_item())\r
+            foreach (var spec in CreateSpecList(json))\r
             {\r
-                var spec = _itemInfo.GetSpecByItemId((int)json.api_slot_item.api_slotitem_id);\r
-                name = spec.Name;\r
-                type = spec.TypeName;\r
+                WriteNow("開発報告書",\r
+                    string.Join(",", spec.Name, spec.TypeName,\r
+                        values["api_item1"], values["api_item2"], values["api_item3"], values["api_item4"],\r
+                        Secretary(), _basic.api_level),\r
+                    "日付,開発装備,種別,燃料,弾薬,鋼材,ボーキ,秘書艦,司令部Lv");\r
             }\r
-            WriteNow("開発報告書",\r
-                string.Join(",", name, type,\r
-                    values["api_item1"], values["api_item2"], values["api_item3"], values["api_item4"],\r
-                    Secretary(), _basic.api_level),\r
-                "日付,開発装備,種別,燃料,弾薬,鋼材,ボーキ,秘書艦,司令部Lv");\r
+        }\r
+\r
+        private IEnumerable<ItemSpec> CreateSpecList(dynamic json)\r
+        {\r
+            var fail = new ItemSpec\r
+            {\r
+                Name = "失敗",\r
+                TypeName = ""\r
+            };\r
+            if (json.api_get_items())\r
+            {\r
+                return ((dynamic[])json.api_get_items).Select(entry =>\r
+                    entry.api_id != -1 ? _itemInfo.GetSpecByItemId((int)entry.api_id) : fail);\r
+            }\r
+            return new[]\r
+            {\r
+                json.api_slot_item()\r
+                    ? _itemInfo.GetSpecByItemId((int)json.api_slot_item.api_slotitem_id)\r
+                    : fail\r
+            };\r
         }\r
 \r
         public void InspectCreateShip(string request)\r
index 991cd59..02c722c 100644 (file)
@@ -50,6 +50,8 @@ namespace KancolleSniffer.Model
             foreach (var entry in json)\r
             {\r
                 var id = (int)entry.api_id;\r
+                if (id == -1)\r
+                    continue;\r
                 _itemInventory[id] = new ItemStatus(id)\r
                 {\r
                     Spec = _itemMaster[(int)entry.api_slotitem_id],\r
@@ -61,9 +63,15 @@ namespace KancolleSniffer.Model
 \r
         public void InspectCreateItem(dynamic json)\r
         {\r
-            if (!json.IsDefined("api_slot_item"))\r
-                return;\r
-            InspectSlotItem(json.api_slot_item);\r
+\r
+            if (json.api_slot_item())\r
+            {\r
+                InspectSlotItem(json.api_slot_item);\r
+            }\r
+            else if (json.api_get_items())\r
+            {\r
+                InspectSlotItem(json.api_get_items);\r
+            }\r
         }\r
 \r
         public void InspectGetShip(dynamic json)\r
index f28d1a7..453a544 100644 (file)
@@ -568,10 +568,12 @@ namespace KancolleSniffer.Model
 \r
         public void CountCharge() => Increment(504);\r
 \r
-        public void CountCreateItem()\r
+        public void InspectCreateItem(string request)\r
         {\r
-            Increment(605);\r
-            Increment(607);\r
+            var values = HttpUtility.ParseQueryString(request);\r
+            var count = values["api_multiple_flag"] == "1" ? 3 : 1;\r
+            Add(605, count);\r
+            Add(607, count);\r
         }\r
 \r
         public void CountCreateShip()\r
index 41a3ee5..44e8f00 100644 (file)
@@ -333,7 +333,7 @@ namespace KancolleSniffer
                 _itemInfo.InspectCreateItem(data);\r
                 _materialInfo.InspectCreateIem(data);\r
                 _logger.InspectCreateItem(request, data);\r
-                _questCounter.CountCreateItem();\r
+                _questCounter.InspectCreateItem(request);\r
                 return Update.Item | Update.QuestList;\r
             }\r
             if (url.EndsWith("api_req_kousyou/getship"))\r