OSDN Git Service

艦隊の番号と連合艦隊の種類をFleetクラスに持たせる
authorKazuhiro Fujieda <fujieda@users.osdn.me>
Fri, 6 Jul 2018 12:45:27 +0000 (21:45 +0900)
committerKazuhiro Fujieda <fujieda@users.osdn.me>
Fri, 6 Jul 2018 12:45:27 +0000 (21:45 +0900)
14 files changed:
KancolleSniffer.Test/SnifferTest.cs
KancolleSniffer.Test/logs
KancolleSniffer/AkashiTimer.cs
KancolleSniffer/AntiAirPanel.cs
KancolleSniffer/ConditionTimer.cs
KancolleSniffer/Fleet.cs
KancolleSniffer/FleetPanel.cs
KancolleSniffer/ItemTreeView.cs
KancolleSniffer/MainForm.cs
KancolleSniffer/ShipInfo.cs
KancolleSniffer/ShipLabel.cs
KancolleSniffer/ShipStatus.cs
KancolleSniffer/Sniffer.cs
KancolleSniffer/TextGenerator.cs

index 7e6e1c9..df2a4da 100644 (file)
@@ -432,10 +432,24 @@ namespace KancolleSniffer.Test
         {\r
             var sniffer = new Sniffer();\r
             SniffLogFile(sniffer, "firepower_001");\r
-            var fleet = sniffer.Fleets[0];\r
+            var ships = sniffer.Fleets[0].Ships;\r
+            // ReSharper disable CompareOfFloatsByEqualityOperator\r
+            PAssert.That(() => ships[0].EffectiveFirepower == 93.5);\r
+            PAssert.That(() => ships[1].EffectiveFirepower == 82.5);\r
+            // ReSharper restore CompareOfFloatsByEqualityOperator\r
+        }\r
+\r
+        /// <summary>\r
+        /// 連合艦隊補正の載った火力を計算する\r
+        /// </summary>\r
+        [TestMethod]\r
+        public void CombinedFleetFirepower()\r
+        {\r
+            var sniffer = new Sniffer();\r
+            SniffLogFile(sniffer, "combined_status_001");\r
             // ReSharper disable CompareOfFloatsByEqualityOperator\r
-            PAssert.That(() => fleet.Ships[0].EffectiveFirepower == 93.5);\r
-            PAssert.That(() => fleet.Ships[1].EffectiveFirepower == 82.5);\r
+            PAssert.That(() => sniffer.Fleets[0].Ships[0].EffectiveFirepower == 117.0);\r
+            PAssert.That(() => sniffer.Fleets[1].Ships[0].EffectiveFirepower == 72.0);\r
             // ReSharper restore CompareOfFloatsByEqualityOperator\r
         }\r
 \r
index 6feb341..f536d67 160000 (submodule)
@@ -1 +1 @@
-Subproject commit 6feb341954d3a0f2bcbd7dd62dad3a50ec81112f
+Subproject commit f536d67271f300eb34b6e2bcc1f077ae19d08d8b
index ecbe951..b262c24 100644 (file)
@@ -176,14 +176,14 @@ namespace KancolleSniffer
 \r
         public void CheckFleet()\r
         {\r
-            for (var fleet = 0; fleet < ShipInfo.FleetCount; fleet++)\r
+            foreach (var fleet in _shipInfo.Fleets)\r
                 CheckFleet(fleet);\r
         }\r
 \r
-        private void CheckFleet(int fleet)\r
+        private void CheckFleet(Fleet fleet)\r
         {\r
-            var deck = _shipInfo.Fleets[fleet].Deck.ToArray();\r
-            var repair = _repairStatuses[fleet];\r
+            var deck = fleet.Deck.ToArray();\r
+            var repair = _repairStatuses[fleet.Number];\r
             var fs = _shipInfo.GetStatus(deck[0]);\r
             repair.State = State.Continue;\r
             if (!fs.Spec.IsRepairShip)\r
index fb70ec0..a2f6dde 100644 (file)
@@ -54,12 +54,12 @@ namespace KancolleSniffer
         {\r
             _table.Clear();\r
             var fn = new[] {"第一艦隊", "第二艦隊", "第三艦隊", "第四艦隊"};\r
-            for (var f = 0; f < fn.Length; f++)\r
+            foreach (var fleet in sniffer.Fleets)\r
             {\r
-                var ships = sniffer.Fleets[f].Ships;\r
+                var ships = fleet.Ships;\r
                 var rawForFleet = ships.Sum(ship => ship.EffectiveAntiAirForFleet);\r
                 var forFleet = new[] {1.0, 1.2, 1.6}.Select(r => (int)(rawForFleet * r) * 2 / 1.3).ToArray();\r
-                _table.Add(new Record {Fleet = fn[f] + " : " + string.Join("/", forFleet.Select(x => x.ToString("f1")))});\r
+                _table.Add(new Record {Fleet = fn[fleet.Number] + " : " + string.Join("/", forFleet.Select(x => x.ToString("f1")))});\r
                 foreach (var ship in ships)\r
                 {\r
                     var rate = ship.EffectiveAntiAirForShip / 4.0;\r
index 8ef0422..965b7c1 100644 (file)
@@ -95,17 +95,17 @@ namespace KancolleSniffer
             var result = new int[ShipInfo.FleetCount];\r
             if (prev == DateTime.MinValue)\r
                 return result;\r
-            for (var f = 0; f < result.Length; f++)\r
+            foreach (var fleet in _shipInfo.Fleets)\r
             {\r
-                if (_shipInfo.Fleets[f].State != FleetState.Port)\r
+                if (fleet.State != FleetState.Port)\r
                     continue;\r
-                var timer = GetTimer(f);\r
+                var timer = GetTimer(fleet.Number);\r
                 if (timer == DateTime.MinValue || prev < _lastUpdate)\r
                     continue;\r
                 if (prev < timer.AddMinutes(-9) && now >= timer.AddMinutes(-9))\r
-                    result[f] = 40;\r
+                    result[fleet.Number] = 40;\r
                 else if (prev < timer && now >= timer)\r
-                    result[f] = 49;\r
+                    result[fleet.Number] = 49;\r
             }\r
             return result;\r
         }\r
index 0054ac9..e906237 100644 (file)
@@ -12,7 +12,6 @@
 // See the License for the specific language governing permissions and\r
 // limitations under the License.\r
 \r
-using System.Collections.Generic;\r
 using System.Linq;\r
 using static System.Math;\r
 \r
@@ -58,16 +57,27 @@ namespace KancolleSniffer
         Practice\r
     }\r
 \r
+    public enum CombinedType\r
+    {\r
+        None,\r
+        Carrier, // 機動\r
+        Surface, // 水上\r
+        Transport // 輸送\r
+    }\r
+\r
     public class Fleet\r
     {\r
         private readonly ShipInfo _shipInfo;\r
+        public int Number { get; }\r
         public FleetState State { get; set; }\r
+        public CombinedType CombinedType { get; set; }\r
         public int[] Deck { get; set; } = Enumerable.Repeat(-1, ShipInfo.MemberCount).ToArray();\r
         public ShipStatus[] Ships => Deck.Where(id => id != -1).Select(_shipInfo.GetStatus).ToArray();\r
 \r
-        public Fleet(ShipInfo shipInfo)\r
+        public Fleet(ShipInfo shipInfo, int number)\r
         {\r
             _shipInfo = shipInfo;\r
+            Number = number;\r
         }\r
 \r
         public ChargeStatus ChargeStatus\r
@@ -167,5 +177,27 @@ namespace KancolleSniffer
         }\r
 \r
         public double TransportPoint => Ships.Where(ship => !ship.Escaped).Sum(ship => ship.TransportPoint);\r
+\r
+        public int CombinedFirepowerBonus\r
+        {\r
+            get\r
+            {\r
+                switch (CombinedType)\r
+                {\r
+                    case CombinedType.None:\r
+                        return 0;\r
+                    case CombinedType.Carrier:\r
+                        return Number == 0 ? 2 : 10;\r
+                    case CombinedType.Surface:\r
+                        return Number == 0 ? 10 : -5;\r
+                    case CombinedType.Transport:\r
+                        return Number == 0 ? -5 : 10;\r
+                    default:\r
+                        return 0;\r
+                }\r
+            }\r
+        }\r
+\r
+        public int CombinedTorpedoPenalty => CombinedType != 0 && Number == 1 ? -5 : 0;\r
     }\r
 }
\ No newline at end of file
index 76d692b..5ea1509 100644 (file)
@@ -89,13 +89,11 @@ namespace KancolleSniffer
         private void CreateTable(Sniffer sniffer)\r
         {\r
             var list = new List<Record>();\r
-            var fleets = sniffer.Fleets;\r
             var fn = new[] {"第一", "第二", "第三", "第四"};\r
-            for (var f = 0; f < fn.Length; f++)\r
+            foreach (var fleet in sniffer.Fleets)\r
             {\r
                 var total = new Total();\r
                 var ships = new List<Record>();\r
-                var fleet = fleets[f];\r
                 foreach (var s in fleet.Ships)\r
                 {\r
                     var equips = new List<Record>();\r
@@ -154,11 +152,11 @@ namespace KancolleSniffer
                 }\r
                 var daihatsu = fleet.DaihatsuBonus;\r
                 var tp = fleet.TransportPoint;\r
-                if (sniffer.CombinedFleetType != 0 && f == 0)\r
-                    tp += fleets[1].TransportPoint;\r
+                if (sniffer.IsCombinedFleet && fleet.Number == 0)\r
+                    tp += sniffer.Fleets[1].TransportPoint;\r
                 list.Add(new Record\r
                 {\r
-                    Fleet = fn[f] + HideIfZero(" Lv", total.Level) +\r
+                    Fleet = fn[fleet.Number] + HideIfZero(" Lv", total.Level) +\r
                             HideIfZero(" ドラム缶", total.Drum) + HideIfZero("(", total.DrumShips, "隻)") +\r
                             HideIfZero(" 大発", daihatsu * 100, "%"),\r
                     Fleet2 = "計:" +\r
@@ -167,7 +165,7 @@ namespace KancolleSniffer
                              " 潜" + CutOverFlow(total.AntiSubmarine) +\r
                              " 索" + CutOverFlow(total.LoS) + "\r\n" +\r
                              $"戦闘:燃{total.Fuel / 5}弾{total.Bull / 5} 支援:燃{total.Fuel / 2}弾{(int)(total.Bull * 0.8)}" +\r
-                             (sniffer.CombinedFleetType != 0 && f == 1 ? "" : $"\r\nTP:S{(int)tp} A{(int)(tp * 0.7)}")\r
+                             (sniffer.IsCombinedFleet && fleet.Number == 1 ? "" : $"\r\nTP:S{(int)tp} A{(int)(tp * 0.7)}")\r
                 });\r
                 list.AddRange(ships);\r
             }\r
index 78ef4a8..9d440fb 100644 (file)
@@ -86,7 +86,7 @@ namespace KancolleSniffer
                             var ship = byShip.First().Holder;\r
                             var name = byShip.Key == -1\r
                                 ? "未装備x" + byShip.Count()\r
-                                : (ship.Fleet != -1 ? ship.Fleet + 1 + " " : "") +\r
+                                : (ship.Fleet == null ? "" : ship.Fleet.Number + 1 + " ") +\r
                                   ship.Name + (ship.Level > 0 ? "Lv" + ship.Level : "") + "x" + byShip.Count();\r
                             paramNode.Nodes.Add(name, name);\r
                         }\r
index e5c1491..21b1c84 100644 (file)
@@ -642,7 +642,7 @@ namespace KancolleSniffer
             var ships = fleets[_currentFleet].Ships;\r
             panel7Ships.Visible = ships.Length == 7;\r
             _mainLabels.SetShipLabels(ships);\r
-            if (_sniffer.CombinedFleetType == 0)\r
+            if (!_sniffer.IsCombinedFleet)\r
                 _combinedFleet = false;\r
             labelFleet1.Text = _combinedFleet ? "連合" : "第一";\r
             panelCombinedFleet.Visible = _combinedFleet;\r
@@ -740,7 +740,7 @@ namespace KancolleSniffer
                 _toolTip.SetToolTip(labelEnemyFighterPower, text);\r
                 _toolTip.SetToolTip(labelEnemyFighterPowerCaption, text);\r
             }\r
-            UpdateFighterPower(_sniffer.CombinedFleetType > 0 && battle.EnemyIsCombined);\r
+            UpdateFighterPower(_sniffer.IsCombinedFleet && battle.EnemyIsCombined);\r
             labelFighterPower.ForeColor = new[]\r
                 {DefaultForeColor, DefaultForeColor, CUDColor.Blue, CUDColor.Green, CUDColor.Orange, CUDColor.Red}[\r
                 battle.AirControlLevel + 1];\r
@@ -1134,7 +1134,7 @@ namespace KancolleSniffer
             {\r
                 if (fleet > 0)\r
                     return;\r
-                _combinedFleet = _sniffer.CombinedFleetType > 0 && !_combinedFleet;\r
+                _combinedFleet = _sniffer.IsCombinedFleet && !_combinedFleet;\r
                 UpdatePanelShipInfo();\r
                 return;\r
             }\r
@@ -1145,7 +1145,7 @@ namespace KancolleSniffer
 \r
         private void labelFleet1_MouseHover(object sender, EventArgs e)\r
         {\r
-            labelFleet1.Text = _currentFleet == 0 && _sniffer.CombinedFleetType > 0 && !_combinedFleet ? "連合" : "第一";\r
+            labelFleet1.Text = _currentFleet == 0 && _sniffer.IsCombinedFleet && !_combinedFleet ? "連合" : "第一";\r
         }\r
 \r
         private void labelFleet1_MouseLeave(object sender, EventArgs e)\r
index cac97a4..7bffa5b 100644 (file)
@@ -30,7 +30,6 @@ namespace KancolleSniffer
         private readonly ShipMaster _shipMaster = new ShipMaster();\r
         private readonly ItemInfo _itemInfo;\r
         private readonly List<int> _escapedShips = new List<int>();\r
-        private int _combinedFleetType;\r
         private ShipStatus[] _battleResult = new ShipStatus[0];\r
         public int HqLevel { get; private set; }\r
         public ShipStatusPair[] BattleResultDiff { get; private set; } = new ShipStatusPair[0];\r
@@ -51,7 +50,7 @@ namespace KancolleSniffer
 \r
         public ShipInfo(ItemInfo itemInfo)\r
         {\r
-            _fleets = Enumerable.Range(0, FleetCount).Select(x => new Fleet(this)).ToArray();\r
+            _fleets = Enumerable.Range(0, FleetCount).Select((x, i) => new Fleet(this, i)).ToArray();\r
             _itemInfo = itemInfo;\r
             ClearShipInfo();\r
         }\r
@@ -72,7 +71,7 @@ namespace KancolleSniffer
                 InspectShipData(json.api_ship);\r
                 InspectBasic(json.api_basic);\r
                 if (json.api_combined_flag())\r
-                    _combinedFleetType = (int)json.api_combined_flag;\r
+                    _fleets[0].CombinedType = _fleets[1].CombinedType = (CombinedType)(int)json.api_combined_flag;\r
                 _itemInfo.NowShips = ((object[])json.api_ship).Length;\r
                 VerifyBattleResult();\r
             }\r
@@ -184,12 +183,13 @@ namespace KancolleSniffer
         public void InspectChange(string request)\r
         {\r
             var values = HttpUtility.ParseQueryString(request);\r
-            var fleet = int.Parse(values["api_id"]) - 1;\r
+            var fleet = _fleets[int.Parse(values["api_id"]) - 1];\r
             var idx = int.Parse(values["api_ship_idx"]);\r
             var ship = int.Parse(values["api_ship_id"]);\r
+\r
             if (idx == -1)\r
             {\r
-                var deck = _fleets[fleet].Deck;\r
+                var deck = fleet.Deck;\r
                 for (var i = 1; i < deck.Length; i++)\r
                     deck[i] = -1;\r
                 return;\r
@@ -200,31 +200,31 @@ namespace KancolleSniffer
                 return;\r
             }\r
             var of = FindFleet(ship, out var oi);\r
-            var orig = _fleets[fleet].Deck[idx];\r
-            _fleets[fleet].Deck[idx] = ship;\r
-            if (of == -1)\r
+            var orig = fleet.Deck[idx];\r
+            fleet.Deck[idx] = ship;\r
+            if (of == null)\r
                 return;\r
             // 入れ替えの場合\r
-            if ((_fleets[of].Deck[oi] = orig) == -1)\r
+            if ((of.Deck[oi] = orig) == -1)\r
                 WithdrowShip(of, oi);\r
         }\r
 \r
-        private int FindFleet(int ship, out int idx)\r
+        private Fleet FindFleet(int ship, out int idx)\r
         {\r
-            for (var f = 0; f < _fleets.Length; f++)\r
+            foreach (var fleet in _fleets)\r
             {\r
-                idx = Array.FindIndex(_fleets[f].Deck, id => id == ship);\r
+                idx = Array.FindIndex(fleet.Deck, id => id == ship);\r
                 if (idx < 0)\r
                     continue;\r
-                return f;\r
+                return fleet;\r
             }\r
             idx = -1;\r
-            return -1;\r
+            return null;\r
         }\r
 \r
-        private void WithdrowShip(int fleet, int idx)\r
+        private void WithdrowShip(Fleet fleet, int idx)\r
         {\r
-            var deck = _fleets[fleet].Deck;\r
+            var deck = fleet.Deck;\r
             var j = idx;\r
             for (var i = idx + 1; i < deck.Length; i++)\r
             {\r
@@ -271,7 +271,7 @@ namespace KancolleSniffer
                 if (delitem)\r
                     _itemInfo.DeleteItems(_shipInfo[ship].AllSlot);\r
                 var of = FindFleet(ship, out var oi);\r
-                if (of != -1)\r
+                if (of != null)\r
                     WithdrowShip(of, oi);\r
                 _shipInfo.Remove(ship);\r
             }\r
@@ -280,14 +280,14 @@ namespace KancolleSniffer
         public void InspectCombined(string request)\r
         {\r
             var values = HttpUtility.ParseQueryString(request);\r
-            _combinedFleetType = int.Parse(values["api_combined_type"]);\r
+            _fleets[0].CombinedType = _fleets[1].CombinedType = (CombinedType)int.Parse(values["api_combined_type"]);\r
         }\r
 \r
         public void InspectMapStart(string request)\r
         {\r
             var values = HttpUtility.ParseQueryString(request);\r
             var fleet = int.Parse(values["api_deck_id"]) - 1;\r
-            if (_combinedFleetType == 0 || fleet > 1)\r
+            if (_fleets[0].CombinedType == 0 || fleet > 1)\r
             {\r
                 _fleets[fleet].State = FleetState.Sortie;\r
             }\r
@@ -323,7 +323,6 @@ namespace KancolleSniffer
             s.Escaped = _escapedShips.Contains(id);\r
             s.Fleet = FindFleet(s.Id, out var idx);\r
             s.DeckIndex = idx;\r
-            s.CombinedFleetType = s.Fleet < 2 ? _combinedFleetType : 0;\r
             return s;\r
         }\r
 \r
@@ -339,14 +338,12 @@ namespace KancolleSniffer
 \r
         public ShipSpec GetSpec(int id) => _shipMaster.GetSpec(id);\r
 \r
-        public int CombinedFleetType => _combinedFleetType;\r
-\r
         public ShipStatus[] ShipList => _shipInfo.Keys.Where(id => id != -1).Select(GetStatus).ToArray();\r
 \r
         public ShipStatus[] GetRepairList(DockInfo dockInfo)\r
             => (from s in ShipList\r
                 where s.NowHp < s.MaxHp && !dockInfo.InNDock(s.Id) &&\r
-                      (s.Fleet == -1 || _fleets[s.Fleet].State != FleetState.Practice)\r
+                      (s.Fleet == null || s.Fleet.State != FleetState.Practice)\r
                 select s).OrderByDescending(s => s.RepairTime).ToArray();\r
 \r
         public string[] BadlyDamagedShips { get; private set; } = new string[0];\r
@@ -357,7 +354,7 @@ namespace KancolleSniffer
             (from s in _fleets.Where(fleet => fleet.State == FleetState.Sortie)\r
                     .SelectMany(fleet => fleet.Deck.Where(id => id != -1).Select(GetStatus))\r
                 where !s.Escaped && s.DamageLevel == ShipStatus.Damage.Badly &&\r
-                      !(s.CombinedFleetType > 0 && s.Fleet == 1 && s.DeckIndex == 0) // 第二艦隊の旗艦を除く\r
+                      !(s.Fleet.CombinedType != 0 && s.Fleet.Number == 1 && s.DeckIndex == 0) // 第二艦隊の旗艦を除く\r
                 select s.Name).ToArray();\r
         }\r
 \r
index 0641d9f..3b8ca01 100644 (file)
@@ -211,7 +211,7 @@ namespace KancolleSniffer
 \r
         public void SetFleet(ShipStatus status)\r
         {\r
-            Text = status == null ? "" : new[] {"", "1", "2", "3", "4"}[status.Fleet + 1];\r
+            Text = status?.Fleet == null ? "" : new[] {"1", "2", "3", "4"}[status.Fleet.Number];\r
         }\r
 \r
         protected override void OnLayout(LayoutEventArgs levent)\r
index d308472..c24b827 100644 (file)
@@ -22,7 +22,7 @@ namespace KancolleSniffer
     public class ShipStatus : ICloneable\r
     {\r
         public int Id { get; set; }\r
-        public int Fleet { get; set; }\r
+        public Fleet Fleet { get; set; }\r
         public int DeckIndex { get; set; }\r
         public ShipSpec Spec { get; set; }\r
 \r
@@ -51,14 +51,11 @@ namespace KancolleSniffer
 \r
         public Damage DamageLevel => CalcDamage(NowHp, MaxHp);\r
 \r
-        public int CombinedFleetType { get; set; }\r
-\r
         public IEnumerable<ItemStatus> AllSlot => SlotEx.Id == 0 ? Slot : Slot.Concat(new[] {SlotEx});\r
 \r
         public ShipStatus()\r
         {\r
             Id = -1;\r
-            Fleet = -1;\r
             Spec = new ShipSpec();\r
             OnSlot = new int[0];\r
             Slot = new ItemStatus[0];\r
@@ -102,34 +99,14 @@ namespace KancolleSniffer
                                      Slot.Any(item => item.Spec.Type == 8); // 艦攻装備\r
                 var levelBonus = AllSlot.Sum(item => item.FirepowerLevelBonus);\r
                 if (!Spec.IsAircraftCarrier && !isRyuseiAttack)\r
-                    return Firepower + levelBonus + CombinedFleetFirepowerBonus + 5;\r
+                    return Firepower + levelBonus + Fleet.CombinedFirepowerBonus + 5;\r
                 var specs = (from item in Slot where item.Spec.IsAircraft select item.Spec).ToArray();\r
                 var torpedo = specs.Sum(s => s.Torpedo);\r
                 var bomber = specs.Sum(s => s.Bomber);\r
                 if (torpedo == 0 && bomber == 0)\r
                     return 0;\r
                 return (int)((Firepower + torpedo + levelBonus +\r
-                              (int)(bomber * 1.3) + CombinedFleetFirepowerBonus) * 1.5) + 55;\r
-            }\r
-        }\r
-\r
-        private int CombinedFleetFirepowerBonus\r
-        {\r
-            get\r
-            {\r
-                switch (CombinedFleetType)\r
-                {\r
-                    case 0:\r
-                        return 0;\r
-                    case 1: // 機動\r
-                        return Fleet == 0 ? 2 : 10;\r
-                    case 2: // 水上\r
-                        return Fleet == 0 ? 10 : -5;\r
-                    case 3: // 輸送\r
-                        return Fleet == 0 ? -5 : 10;\r
-                    default:\r
-                        return 0;\r
-                }\r
+                              (int)(bomber * 1.3) + Fleet.CombinedFirepowerBonus) * 1.5) + 55;\r
             }\r
         }\r
 \r
@@ -139,12 +116,10 @@ namespace KancolleSniffer
             {\r
                 if (Spec.IsAircraftCarrier || Torpedo == 0)\r
                     return 0;\r
-                return Torpedo + AllSlot.Sum(item => item.TorpedoLevelBonus) + CombinedFleetTorpedoPenalty + 5;\r
+                return Torpedo + AllSlot.Sum(item => item.TorpedoLevelBonus) + Fleet.CombinedTorpedoPenalty + 5;\r
             }\r
         }\r
 \r
-        private int CombinedFleetTorpedoPenalty => CombinedFleetType > 0 && Fleet == 1 ? -5 : 0;\r
-\r
         public double EffectiveAntiSubmarine\r
         {\r
             get\r
index 109c110..63c3970 100644 (file)
@@ -568,7 +568,7 @@ namespace KancolleSniffer
 \r
         public ShipStatus[] BattleStartStatus => _shipInfo.BattleStartStatus;\r
 \r
-        public int CombinedFleetType => _shipInfo.CombinedFleetType;\r
+        public bool IsCombinedFleet => _shipInfo.Fleets[0].CombinedType != 0;\r
 \r
         public ShipStatus[] RepairList => _shipInfo.GetRepairList(_dockInfo);\r
 \r
index 94fce21..ef3950c 100644 (file)
@@ -140,12 +140,12 @@ namespace KancolleSniffer
         public static string GenerateDeckBuilderData(Sniffer sniffer)\r
         {\r
             var sb = new StringBuilder("{\"version\": 4,");\r
-            for (var f = 0; f < ShipInfo.FleetCount; f++)\r
+            foreach (var fleet in sniffer.Fleets)\r
             {\r
-                if (f != 0)\r
+                if (fleet.Number != 0)\r
                     sb.Append(",");\r
-                sb.Append($"\"f{f + 1}\":{{");\r
-                var ships = sniffer.Fleets[f].Ships;\r
+                sb.Append($"\"f{fleet.Number + 1}\":{{");\r
+                var ships = fleet.Ships;\r
                 for (var s = 0; s < ships.Length; s++)\r
                 {\r
                     if (s != 0)\r