OSDN Git Service

TPの計算式を修正する
[kancollesniffer/KancolleSniffer.git] / KancolleSniffer / ShipMaster.cs
index f4d9d73..a40c567 100644 (file)
@@ -32,19 +32,25 @@ namespace KancolleSniffer
                 var shipSpec = _shipSpecs[(int)entry.api_id] = new ShipSpec\r
                 {\r
                     Id = (int)entry.api_id,\r
+                    SortNo = entry.api_sortno() ? (int)entry.api_sortno : 0,\r
                     Name = ShipName(entry),\r
                     FuelMax = entry.api_fuel_max() ? (int)entry.api_fuel_max : 0,\r
                     BullMax = entry.api_bull_max() ? (int)entry.api_bull_max : 0,\r
                     ShipType = (int)entry.api_stype,\r
                     ShipTypeName = dict[entry.api_stype]\r
                 };\r
-                shipSpec.ShortName = ShortName(shipSpec.Name);\r
+                if (entry.api_afterlv())\r
+                {\r
+                    shipSpec.Remodel.Level = (int)entry.api_afterlv;\r
+                    shipSpec.Remodel.After = int.Parse(entry.api_aftershipid);\r
+                }\r
                 int[] maxEq;\r
                 shipSpec.MaxEq = entry.api_maxeq()\r
                     ? entry.api_maxeq\r
                     : MissingData.MaxEq.TryGetValue(shipSpec.Id, out maxEq) ? maxEq : null;\r
             }\r
             _shipSpecs[-1] = new ShipSpec();\r
+            SetRemodelBaseAndStep();\r
         }\r
 \r
         // 深海棲艦の名前にelite/flagshipを付ける\r
@@ -57,44 +63,56 @@ namespace KancolleSniffer
             return name + "(" + flagship + ")";\r
         }\r
 \r
-        private readonly Dictionary<string, string> _shortNameDict = new Dictionary<string, string>\r
-        {\r
-            {"千代田航改", "千代田航"},\r
-            {"千代田航改二", "千代田航"},\r
-            {"千歳航改二", "千歳航改"},\r
-            {"五十鈴改二", "五十鈴改"},\r
-            {"あきつ丸改", "あきつ丸"},\r
-            {"Bismarck改", "Bismarck"},\r
-            {"Bismarck twei", "Bismarck"},\r
-            {"Bismarck drei", "Bismarck"},\r
-            {"Prinz Eugen", "Prinz Eug"},\r
-            {"Prinz Eugen改", "Prinz Eug"},\r
-            {"Graf Zeppelin", "Graf Zep"},\r
-            {"Libeccio改", "Libeccio"},\r
-            {"阿武隈改二", "阿武隈改"},\r
-            {"瑞鶴改二甲", "瑞鶴改二"},\r
-            {"翔鶴改二甲", "瑞鶴改二"},\r
-        };\r
+        public ShipSpec this[int id] => _shipSpecs[id];\r
 \r
-        private string ShortName(string name)\r
+        private void SetRemodelBaseAndStep()\r
         {\r
-            string r;\r
-            return _shortNameDict.TryGetValue(name, out r) ? r : name;\r
+            // 改造後のデータをマーク\r
+            foreach (var spec in _shipSpecs.Values)\r
+            {\r
+                if (spec.Remodel.After == 0)\r
+                    continue;\r
+                _shipSpecs[spec.Remodel.After].Remodel.Base = 1;\r
+            }\r
+            foreach (var spec in _shipSpecs.Values)\r
+            {\r
+                if (spec.Remodel.Base != 0)\r
+                    continue;\r
+                var step = 0;\r
+                var hash = new HashSet<int> {spec.Id};\r
+                var s = spec;\r
+                s.Remodel.Base = spec.Id;\r
+                while (s.Remodel.After != 0)\r
+                {\r
+                    s.Remodel.Step = ++step;\r
+                    if (!hash.Add(s.Remodel.After))\r
+                        break;\r
+                    s = _shipSpecs[s.Remodel.After];\r
+                    s.Remodel.Base = spec.Id;\r
+                }\r
+            }\r
         }\r
-\r
-        public ShipSpec this[int id] => _shipSpecs[id];\r
     }\r
 \r
     public class ShipSpec\r
     {\r
         public int Id { get; set; }\r
+        public int SortNo { get; set; }\r
         public string Name { get; set; }\r
-        public string ShortName { get; set; }\r
         public int FuelMax { get; set; }\r
         public int BullMax { get; set; }\r
         public int[] MaxEq { get; set; }\r
         public int ShipType { get; set; }\r
         public string ShipTypeName { get; set; }\r
+        public RemodelInfo Remodel { get; } = new RemodelInfo();\r
+\r
+        public class RemodelInfo\r
+        {\r
+            public int Level { get; set; }\r
+            public int After { get; set; }\r
+            public int Base { get; set; } // 艦隊晒しページ用\r
+            public int Step { get; set; } // 同上\r
+        }\r
 \r
         public ShipSpec()\r
         {\r
@@ -136,6 +154,36 @@ namespace KancolleSniffer
             }\r
         }\r
 \r
+        public double TransportPoint\r
+        {\r
+            get\r
+            {\r
+                switch (ShipType)\r
+                {\r
+                    case 2:\r
+                        return 5.0;\r
+                    case 3:\r
+                        return Id == 487 ? 10.0 : 2.0; // 鬼怒改二は大発分を加算\r
+                    case 6:\r
+                        return 4.0;\r
+                    case 10:\r
+                        return 7.0;\r
+                    case 15:\r
+                        return 15.0;\r
+                    case 16:\r
+                        return 9.0;\r
+                    case 17:\r
+                        return 12.0;\r
+                    case 20:\r
+                        return 7.0;\r
+                    case 21:\r
+                        return 6.0;\r
+                    default:\r
+                        return 0;\r
+                }\r
+            }\r
+        }\r
+\r
         public bool IsSubmarine => ShipType == 13 || ShipType == 14;\r
 \r
         public bool IsAircraftCarrier => ShipType == 7 || ShipType == 11 || ShipType == 18;\r