OSDN Git Service

ドロップした艦娘の装備を母港に戻る前に装備数に反映する
authorKazuhiro Fujieda <fujieda@users.sourceforge.jp>
Tue, 23 Dec 2014 11:16:30 +0000 (20:16 +0900)
committerKazuhiro Fujieda <fujieda@users.sourceforge.jp>
Sat, 27 Dec 2014 06:22:50 +0000 (15:22 +0900)
KancolleSniffer/ItemInfo.cs
KancolleSniffer/ShipInfo.cs

index ae4b7ce..46efdaa 100644 (file)
@@ -17,6 +17,7 @@
 \r
 using System;\r
 using System.Collections.Generic;\r
+using System.Linq;\r
 using System.Web;\r
 \r
 namespace KancolleSniffer\r
@@ -120,7 +121,7 @@ namespace KancolleSniffer
         public int NowEquips\r
         {\r
             get { return _nowEquips; }\r
-            set\r
+            private set\r
             {\r
                 if (MaxEquips != 0)\r
                 {\r
@@ -204,7 +205,6 @@ namespace KancolleSniffer
             if (!json.IsDefined("api_slot_item"))\r
                 return;\r
             InspectSlotItem(json.api_slot_item);\r
-            NowEquips++;\r
         }\r
 \r
         public void InspectGetShip(dynamic json)\r
@@ -213,13 +213,12 @@ namespace KancolleSniffer
             if (json.api_slotitem == null) // まるゆにはスロットがない\r
                 return;\r
             InspectSlotItem(json.api_slotitem);\r
-            NowEquips += ((object[])json.api_slotitem).Length;\r
         }\r
 \r
         public void InspectDestroyItem(string request, dynamic json)\r
         {\r
             var values = HttpUtility.ParseQueryString(request);\r
-            NowEquips -= values["api_slotitem_ids"].Split(',').Length;\r
+            DeleteItems(values["api_slotitem_ids"].Split(',').Select(int.Parse).ToArray());\r
             var get = (int[])json.api_get_material;\r
             for (var i = 0; i < get.Length; i++)\r
                 MaterialHistory[i].Now += get[i];\r
@@ -227,9 +226,29 @@ namespace KancolleSniffer
 \r
         public void InspectRemodelSlot(dynamic json)\r
         {\r
+            if (json.api_after_slot())\r
+                InspectSlotItem(json.api_after_slot);\r
             if (!json.api_use_slot_id())\r
                 return;\r
-            NowEquips -= ((object[])json.api_use_slot_id).Length;\r
+            DeleteItems(((int[])json.api_use_slot_id));\r
+        }\r
+\r
+        public void DeleteItems(int[] ids)\r
+        {\r
+            foreach (var id in ids.Where(id => id != -1))\r
+            {\r
+                _itemInfo.Remove(id);\r
+                NowEquips--;\r
+            }\r
+        }\r
+\r
+        public void CountNewItems(int[] ids)\r
+        {\r
+            foreach (var id in ids.Where(id => id != -1 && !_itemInfo.ContainsKey(id)))\r
+            {\r
+                _itemInfo[id] = new ItemStatus();\r
+                NowEquips++;\r
+            }\r
         }\r
 \r
         public void InspectMissionResult(dynamic json)\r
index bba53d4..97b4e5a 100644 (file)
@@ -231,10 +231,11 @@ namespace KancolleSniffer
                     Cond = (int)entry.api_cond,\r
                     Fuel = (int)entry.api_fuel,\r
                     Bull = (int)entry.api_bull,\r
-                    OnSlot = (from num in (dynamic[])entry.api_onslot select (int)num).ToArray(),\r
-                    Slot = (from num in (dynamic[])entry.api_slot select (int)num).ToArray(),\r
+                    OnSlot = (int[])entry.api_onslot,\r
+                    Slot = (int[])entry.api_slot,\r
                     LoS = (int)entry.api_sakuteki[0]\r
                 };\r
+                _itemInfo.CountNewItems((int[])entry.api_slot);\r
             }\r
         }\r
 \r
@@ -317,7 +318,7 @@ namespace KancolleSniffer
             var values = HttpUtility.ParseQueryString(request);\r
             var ships = values["api_id_items"].Split(',');\r
             _itemInfo.NowShips -= ships.Length;\r
-            _itemInfo.NowEquips -= (from s in ships select SlotItemCount(int.Parse(s))).Sum();\r
+            _itemInfo.DeleteItems(ships.SelectMany(s => _shipInfo[int.Parse(s)].Slot).ToArray());\r
             foreach (var ship in ships)\r
                 _shipInfo.Remove(int.Parse(ship));\r
             InspectDeck(json.api_deck);\r
@@ -328,8 +329,8 @@ namespace KancolleSniffer
         {\r
             var values = HttpUtility.ParseQueryString(request);\r
             var ship = int.Parse(values["api_ship_id"]);\r
-            _itemInfo.NowShips -= 1;\r
-            _itemInfo.NowEquips -= SlotItemCount(ship);\r
+            _itemInfo.NowShips--;\r
+            _itemInfo.DeleteItems(_shipInfo[ship].Slot);\r
             int oi;\r
             var of = FindFleet(ship, out oi);\r
             if (of != -1)\r
@@ -341,11 +342,6 @@ namespace KancolleSniffer
                 _itemInfo.MaterialHistory[i].Now = material[i];\r
         }\r
 \r
-        private int SlotItemCount(int id)\r
-        {\r
-            return _shipInfo[id].Slot.Count(item => item != -1);\r
-        }\r
-\r
         public void StartSortie(string request)\r
         {\r
             var values = HttpUtility.ParseQueryString(request);\r