OSDN Git Service

補強増設スロットの装備状況が装備一覧に反映されないのを直す
[kancollesniffer/KancolleSniffer.git] / KancolleSniffer / ShipInfo.cs
index 7bd113e..215446e 100644 (file)
@@ -42,6 +42,7 @@ namespace KancolleSniffer
         public int Torpedo { get; set; }\r
         public int AntiSubmarine { get; set; }\r
         public int Lucky { get; set; }\r
+        public bool Locked { get; set; }\r
         public bool Escaped { get; set; }\r
 \r
         public Damage DamageLevel => CalcDamage(NowHp, MaxHp);\r
@@ -51,6 +52,7 @@ namespace KancolleSniffer
         public ShipStatus()\r
         {\r
             Id = -1;\r
+            Fleet = -1;\r
             Spec = new ShipSpec();\r
             OnSlot = new int[0];\r
             Slot = new ItemStatus[0];\r
@@ -199,7 +201,9 @@ namespace KancolleSniffer
 \r
         public object Clone()\r
         {\r
-            return MemberwiseClone();\r
+            var r = (ShipStatus)MemberwiseClone();\r
+            r.Slot = r.Slot.ToArray(); // 戦闘中のダメコンの消費が見えないように複製する\r
+            return r;\r
         }\r
     }\r
 \r
@@ -249,7 +253,6 @@ namespace KancolleSniffer
         private int _hqLevel;\r
         private readonly List<int> _escapedShips = new List<int>();\r
         private int _combinedFleetType;\r
-        private readonly int[][] _presetDeck = new int[8][];\r
 \r
         public ShipInfo(ItemInfo itemInfo)\r
         {\r
@@ -297,7 +300,7 @@ namespace KancolleSniffer
                 InspectDeck(json.api_deck_data);\r
                 InspectShipData(json.api_ship_data);\r
             }\r
-            else if (json.api_ship()) // getship\r
+            else if (json.api_ship()) // getshipとpowerup\r
             {\r
                 InspectShipData(new[] {json.api_ship});\r
             }\r
@@ -343,9 +346,9 @@ namespace KancolleSniffer
                     Firepower = (int)entry.api_karyoku[0],\r
                     Torpedo = (int)entry.api_raisou[0],\r
                     AntiSubmarine = (int)entry.api_taisen[0],\r
-                    Lucky = (int)entry.api_lucky[0]\r
+                    Lucky = (int)entry.api_lucky[0],\r
+                    Locked = entry.api_locked() && entry.api_locked == 1\r
                 };\r
-                _itemInfo.CountNewItems((int[])entry.api_slot);\r
             }\r
         }\r
 \r
@@ -429,7 +432,7 @@ namespace KancolleSniffer
             foreach (var ship in ships)\r
                 _shipInfo.Remove(int.Parse(ship));\r
             InspectDeck(json.api_deck);\r
-            InspectShip(json.api_ship);\r
+            InspectShip(json);\r
         }\r
 \r
         public void InspectSlotExchange(string request, dynamic json)\r
@@ -457,32 +460,12 @@ namespace KancolleSniffer
             _shipInfo.Remove(ship);\r
         }\r
 \r
-        public void InspectPresetDeck(dynamic json)\r
-        {\r
-            foreach (KeyValuePair<string, dynamic> entry in json.api_deck)\r
-                InspectPresetRegister(entry.Value);\r
-        }\r
-\r
-        public void InspectPresetRegister(dynamic json)\r
-        {\r
-            var no = (int)json.api_preset_no - 1;\r
-            _presetDeck[no] = json.api_ship;\r
-        }\r
-\r
-        public void InspectPresetDelete(string request)\r
-        {\r
-            var values = HttpUtility.ParseQueryString(request);\r
-            _presetDeck[int.Parse(values["api_preset_no"]) - 1] = null;\r
-        }\r
-\r
         public void InspectCombined(string request)\r
         {\r
             var values = HttpUtility.ParseQueryString(request);\r
             _combinedFleetType = int.Parse(values["api_combined_type"]);\r
         }\r
 \r
-        public int[][] PresetDeck => _presetDeck;\r
-\r
         public void InspectMapStart(string request)\r
         {\r
             var values = HttpUtility.ParseQueryString(request);\r
@@ -526,6 +509,16 @@ namespace KancolleSniffer
             return s;\r
         }\r
 \r
+        public void SetItemHolder()\r
+        {\r
+            foreach (var ship in _shipInfo.Values)\r
+            {\r
+                foreach (var item in ship.Slot)\r
+                    _itemInfo.GetStatus(item.Id).Holder = ship;\r
+                _itemInfo.GetStatus(ship.SlotEx.Id).Holder = ship;\r
+            }\r
+        }\r
+\r
         public ShipSpec GetSpec(int id) => _shipMaster[id];\r
 \r
         public bool InMission(int fleet) => _inMission[fleet];\r
@@ -550,13 +543,12 @@ namespace KancolleSniffer
         public int[] GetFighterPower(int fleet)\r
             => GetShipStatuses(fleet).Where(ship => !ship.Escaped).SelectMany(ship =>\r
                 ship.Slot.Zip(ship.OnSlot, (slot, onslot) =>\r
-                    !slot.Spec.CanAirCombat || onslot == 0\r
-                        ? new[] {0, 0}\r
-                        : new[]\r
-                        {\r
-                            (int)((slot.Spec.AntiAir + slot.Level * 0.2) * Sqrt(onslot) + slot.AlvBonus[0]),\r
-                            (int)((slot.Spec.AntiAir + slot.Level * 0.2) * Sqrt(onslot) + slot.AlvBonus[1])\r
-                        }))\r
+                {\r
+                    if (!slot.Spec.CanAirCombat || onslot == 0)\r
+                        return new[] {0, 0};\r
+                    var unskilled = (slot.Spec.AntiAir + slot.FighterPowerLevelBonus) * Sqrt(onslot);\r
+                    return new[] {(int)(unskilled + slot.AlvBonus[0]), (int)(unskilled + slot.AlvBonus[1])};\r
+                }))\r
                 .Aggregate(new[] {0, 0}, (prev, fp) => new[] {prev[0] + fp[0], prev[1] + fp[1]});\r
 \r
         public double GetContactTriggerRate(int fleet)\r
@@ -564,7 +556,7 @@ namespace KancolleSniffer
                 ship.Slot.Zip(ship.OnSlot, (slot, onslot) =>\r
                     slot.Spec.ContactTriggerRate * slot.Spec.LoS * Sqrt(onslot))).Sum();\r
 \r
-        public ShipStatus[] GetDamagedShipList(DockInfo dockInfo)\r
+        public ShipStatus[] GetRepairList(DockInfo dockInfo)\r
             => (from s in ShipList\r
                 where s.NowHp < s.MaxHp && !dockInfo.InNDock(s.Id)\r
                 select s).OrderByDescending(s => s.RepairTime).ToArray();\r