OSDN Git Service

演習の獲得経験値に練習巡洋艦の効果を反映させる
authorKazuhiro Fujieda <fujieda@users.osdn.me>
Tue, 22 May 2018 11:24:21 +0000 (20:24 +0900)
committerKazuhiro Fujieda <fujieda@users.osdn.me>
Tue, 22 May 2018 11:24:21 +0000 (20:24 +0900)
KancolleSniffer/MiscTextInfo.cs
KancolleSniffer/ShipMaster.cs

index f01852b..eac9ecc 100644 (file)
@@ -113,7 +113,62 @@ namespace KancolleSniffer
             var raw = _expTable[Min(s1, _expTable.Length) - 1] / 100.0 +\r
                       _expTable[Min(s2, _expTable.Length) - 1] / 300.0;\r
             var exp = raw >= 500 ? 500 + (int)Sqrt(raw - 500) : (int)raw;\r
-            Text += $"獲得経験値 : {exp}\r\nS勝利 : {(int)(exp * 1.2)}";\r
+            var bonus = 1 + TrainingCruiserBonus(_shipInfo.GetShipStatuses(0));\r
+            Text += $"獲得経験値 : {(int)(exp * bonus)}\r\nS勝利 : {(int)((int)(exp * 1.2) * bonus)}";\r
+        }\r
+\r
+        private double TrainingCruiserBonus(ShipStatus[] fleet)\r
+        {\r
+            if (fleet[0].Spec.IsTrainingCruiser)\r
+            {\r
+                var fsLevel = fleet[0].Level;\r
+                if (fleet.Skip(1).Any(s => s.Spec.IsTrainingCruiser))\r
+                {\r
+                    if (fsLevel < 10)\r
+                        return 0.10;\r
+                    if (fsLevel < 30)\r
+                        return 0.13;\r
+                    if (fsLevel < 60)\r
+                        return 0.16;\r
+                    if (fsLevel < 100)\r
+                        return 0.20;\r
+                    return 0.25;\r
+                }\r
+                if (fsLevel < 10)\r
+                    return 0.05;\r
+                if (fsLevel < 30)\r
+                    return 0.08;\r
+                if (fsLevel < 60)\r
+                    return 0.12;\r
+                if (fsLevel < 100)\r
+                    return 0.15;\r
+                return 0.20;\r
+            }\r
+            var tc = fleet.Count(s => s.Spec.IsTrainingCruiser);\r
+            if (tc == 0)\r
+                return 0;\r
+            var level = fleet.Where(s => s.Spec.IsTrainingCruiser).Max(s => s.Level);\r
+            if (tc == 1)\r
+            {\r
+                if (level < 10)\r
+                    return 0.03;\r
+                if (level < 30)\r
+                    return 0.05;\r
+                if (level < 60)\r
+                    return 0.07;\r
+                if (level < 100)\r
+                    return 0.10;\r
+                return 0.15;\r
+            }\r
+            if (level < 10)\r
+                return 0.04;\r
+            if (level < 30)\r
+                return 0.06;\r
+            if (level < 60)\r
+                return 0.08;\r
+            if (level < 100)\r
+                return 0.12;\r
+            return 0.175;\r
         }\r
 \r
         public void InspectMapNext(dynamic json)\r
index 8d53623..e9975af 100644 (file)
@@ -225,5 +225,7 @@ namespace KancolleSniffer
         }\r
 \r
         public bool IsRepairShip => ShipType == 19;\r
+\r
+        public bool IsTrainingCruiser => ShipType == 21;\r
     }\r
 }
\ No newline at end of file