}\r
\r
/// <summary>\r
+ /// 改修効果込みの制空値を正しく計算する\r
+ /// </summary>\r
+ [TestMethod]\r
+ public void FighterPowerWithImprovement()\r
+ {\r
+ var sniffer = new Sniffer();\r
+ SniffLogFile(sniffer, "fighterpower_003");\r
+ PAssert.That(() => sniffer.GetFighterPower(0).SequenceEqual(new [] {135, 135}));\r
+ }\r
+\r
+ /// <summary>\r
/// マップ索敵の判定式(33)を正しく計算する\r
/// </summary>\r
[TestMethod]\r
}\r
}\r
\r
+ public double FighterPowerLevelBonus\r
+ {\r
+ get\r
+ {\r
+ if (Spec.Type == 6)\r
+ return 0.2 * Level;\r
+ if (Spec.Type == 7) // 改修可能なのは爆戦のみ\r
+ return 0.25 * Level;\r
+ return 0;\r
+ }\r
+ }\r
+\r
public double LoSLevelBonus\r
{\r
get\r
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