OSDN Git Service

基地航空隊の飛行場拡張に対応する
authorKazuhiro Fujieda <fujieda@users.osdn.me>
Tue, 11 Oct 2016 11:54:42 +0000 (20:54 +0900)
committerKazuhiro Fujieda <fujieda@users.osdn.me>
Tue, 11 Oct 2016 11:54:42 +0000 (20:54 +0900)
KancolleSniffer/BaseAirCoprs.cs
KancolleSniffer/Sniffer.cs

index d617f4d..dba0bc1 100644 (file)
@@ -12,7 +12,9 @@
 // See the License for the specific language governing permissions and\r
 // limitations under the License.\r
 \r
+using System;\r
 using System.Collections.Generic;\r
+using System.Collections.Specialized;\r
 using System.Linq;\r
 using static System.Math;\r
 \r
@@ -134,9 +136,7 @@ namespace KancolleSniffer
             if (AllAirCorps == null)\r
                 return;\r
             var values = HttpUtility.ParseQueryString(request);\r
-            var areaId = int.Parse(values["api_area_id"] ?? "0");\r
-            var airCorps =\r
-                AllAirCorps.First(b => b.AreaId == areaId).AirCorps[int.Parse(values["api_base_id"]) - 1];\r
+            var airCorps = GetBaseInfo(values).AirCorps[int.Parse(values["api_base_id"]) - 1];\r
             if (json.api_distance()) // 2016春イベにはない\r
                 airCorps.Distance = (int)json.api_distance;\r
             foreach (var planeInfo in json.api_plane_info)\r
@@ -165,8 +165,7 @@ namespace KancolleSniffer
             if (AllAirCorps == null)\r
                 return;\r
             var values = HttpUtility.ParseQueryString(request);\r
-            var areaId = int.Parse(values["api_area_id"] ?? "0");\r
-            var airCorps = AllAirCorps.First(b => b.AreaId == areaId).AirCorps;\r
+            var airCorps = GetBaseInfo(values).AirCorps;\r
             foreach (var entry in\r
                 values["api_base_id"].Split(',')\r
                     .Zip(values["api_action_kind"].Split(','), (b, a) => new {baseId = b, action = a}))\r
@@ -175,6 +174,27 @@ namespace KancolleSniffer
             }\r
         }\r
 \r
+        public void InspectExpandBase(string request, dynamic json)\r
+        {\r
+            var values = HttpUtility.ParseQueryString(request);\r
+            var baseInfo = GetBaseInfo(values);\r
+            var airCorps = baseInfo.AirCorps;\r
+            Array.Resize(ref airCorps, airCorps.Length + 1);\r
+            baseInfo.AirCorps = airCorps;\r
+            airCorps[airCorps.Length - 1] = new AirCorpsInfo\r
+            {\r
+                Planes =\r
+                    ((dynamic[])json[0].api_plane_info).\r
+                        Select(plane => new PlaneInfo {Slot = new ItemStatus()}).ToArray()\r
+            };\r
+        }\r
+\r
+        private BaseInfo GetBaseInfo(NameValueCollection values)\r
+        {\r
+            var areaId = int.Parse(values["api_area_id"] ?? "0"); // 古いAPIに対応するため\r
+            return AllAirCorps.First(b => b.AreaId == areaId);\r
+        }\r
+\r
         public void InspectPlaneInfo(dynamic json)\r
         {\r
             _relocationgPlanes = json.api_base_convert_slot()\r
index b941c9c..4107a48 100644 (file)
@@ -483,6 +483,11 @@ namespace KancolleSniffer
                 _baseAirCoprs.InspectSetAction(request);\r
                 return Update.Ship;\r
             }\r
+            if (url.EndsWith("api_req_air_corps/expand_base"))\r
+            {\r
+                _baseAirCoprs.InspectExpandBase(request, data);\r
+                return Update.Ship;\r
+            }\r
             return Update.None;\r
         }\r
 \r