public MissionClearConditionResult OrCondition(params Action <MissionClearConditionResult>[] conditions)
            {
                var conds = new MissionClearConditionResult[conditions.Length];

                for (int i = 0; i < conditions.Length; i++)
                {
                    conds[i] = new MissionClearConditionResult(targetFleet);
                    conditions[i](conds[i]);
                }

                Assert(conds.Any(c => c.IsSuceeded), () => "(" + string.Join(") or (", conds.Select(c => string.Join(", ", c.FailureReason))) + ")");
                return(this);
            }
        /// <summary>
        /// 遠征に成功する編成かどうかを判定します。
        /// </summary>
        /// <param name="missionID">遠征ID。</param>
        /// <param name="fleet">対象となる艦隊。達成条件を確認したい場合は null を指定します。</param>
        public static MissionClearConditionResult Check(int missionID, FleetData fleet)
        {
            var result = new MissionClearConditionResult(fleet);

            switch (missionID)
            {
            case 1:                         // 練習航海
                return(result
                       .CheckFlagshipLevel(1)
                       .CheckShipCount(2));

            case 2:                         // 長距離練習航海
                return(result
                       .CheckFlagshipLevel(2)
                       .CheckShipCount(4));

            case 3:                         // 警備任務
                return(result
                       .CheckFlagshipLevel(3)
                       .CheckShipCount(3));

            case 4:                         // 対潜警戒任務
                return(result
                       .CheckFlagshipLevel(3)
                       .CheckEscortFleet());

            case 5:                         // 海上護衛任務
                return(result
                       .CheckFlagshipLevel(3)
                       .CheckShipCount(4)
                       .CheckEscortFleet());

            case 6:                         // 防空射撃演習
                return(result
                       .CheckFlagshipLevel(4)
                       .CheckShipCount(4));

            case 7:                         // 観艦式予行
                return(result
                       .CheckFlagshipLevel(5)
                       .CheckShipCount(6));

            case 8:                         // 観艦式
                return(result
                       .CheckFlagshipLevel(6)
                       .CheckShipCount(6));

            case 100:                       // 兵站強化任務
                return(result
                       .CheckFlagshipLevel(5)
                       .CheckLevelSum(10)
                       .CheckShipCount(4)
                       .CheckSmallShipCount(3));

            case 101:                       // 海峡警備行動
                return(result
                       .CheckFlagshipLevel(20)
                       .CheckSmallShipCount(4)
                       .CheckFirepower(50)
                       .CheckAA(70)
                       .CheckASW(180));

            case 102:                       // 長時間対潜警戒
                return(result
                       .CheckFlagshipLevel(35)
                       .CheckLevelSum(185)
                       .CheckShipCount(5)
                       .CheckEscortFleetDD3()
                       .CheckAA(59)
                       .CheckASW(280)
                       .CheckLOS(60));

            case 103:                       // 南西方面連絡線哨戒
                return(result
                       .CheckFlagshipLevel(40)
                       .CheckLevelSum(200)
                       .CheckShipCount(5)
                       .CheckEscortFleet()
                       .CheckFirepower(300)
                       .CheckAA(200)
                       .CheckASW(200)
                       .CheckLOS(120));

            case 104:                       // 小笠原沖哨戒線
                return(result
                       .CheckFlagshipLevel(45)
                       .CheckLevelSum(230)
                       .CheckShipCount(5)
                       .CheckEscortFleetDD3()
                       .CheckFirepower(280)
                       .CheckAA(220)
                       .CheckASW(240)
                       .CheckLOS(150));

            case 105:                       // 小笠原沖戦闘哨戒
                return(result
                       .CheckFlagshipLevel(55)
                       .CheckLevelSum(290)
                       .CheckShipCount(6)
                       .CheckEscortFleetDD3()
                       .CheckFirepower(330)
                       .CheckAA(300)
                       .CheckASW(270)
                       .CheckLOS(180));

            case 9:                         // タンカー護衛任務
                return(result
                       .CheckFlagshipLevel(3)
                       .CheckShipCount(4)
                       .CheckEscortFleet());

            case 10:                        // 強行偵察任務
                return(result
                       .CheckFlagshipLevel(3)
                       .CheckShipCount(3)
                       .CheckShipCountByType(ShipTypes.LightCruiser, 2));

            case 11:                        // ボーキサイト輸送任務
                return(result
                       .CheckFlagshipLevel(6)
                       .CheckShipCount(4)
                       .CheckSmallShipCount(2));

            case 12:                        // 資源輸送任務
                return(result
                       .CheckFlagshipLevel(4)
                       .CheckShipCount(4)
                       .CheckSmallShipCount(2));

            case 13:                        // 鼠輸送作戦
                return(result
                       .CheckFlagshipLevel(5)
                       .CheckShipCount(6)
                       .CheckShipCountByType(ShipTypes.LightCruiser, 1)
                       .CheckShipCountByType(ShipTypes.Destroyer, 4));

            case 14:                        // 包囲陸戦隊撤収作戦
                return(result
                       .CheckFlagshipLevel(6)
                       .CheckShipCount(6)
                       .CheckShipCountByType(ShipTypes.LightCruiser, 1)
                       .CheckShipCountByType(ShipTypes.Destroyer, 3));

            case 15:                        // 囮機動部隊支援作戦
                return(result
                       .CheckFlagshipLevel(8)
                       .CheckShipCount(6)
                       .CheckAircraftCarrierCount(2)
                       .CheckShipCountByType(ShipTypes.Destroyer, 2));

            case 16:                        // 艦隊決戦援護作戦
                return(result
                       .CheckFlagshipLevel(10)
                       .CheckShipCount(6)
                       .CheckShipCountByType(ShipTypes.LightCruiser, 1)
                       .CheckShipCountByType(ShipTypes.Destroyer, 2));

            case 110:                       // 南西方面航空偵察作戦
                return(result
                       .CheckFlagshipLevel(40)
                       .CheckLevelSum(150)
                       .CheckShipCount(6)
                       .CheckShipCountByType(ShipTypes.SeaplaneTender, 1)
                       .CheckShipCountByType(ShipTypes.LightCruiser, 1)
                       .CheckSmallShipCount(2)
                       .CheckAA(200)
                       .CheckASW(200)
                       .CheckLOS(140));

            case 111:                       // 敵泊地強襲反撃作戦
                return(result
                       .CheckFlagshipLevel(45)
                       .CheckLevelSum(220)
                       .CheckShipCount(6)
                       .CheckShipCountByType(ShipTypes.HeavyCruiser, 1)
                       .CheckShipCountByType(ShipTypes.LightCruiser, 1)
                       .CheckShipCountByType(ShipTypes.Destroyer, 3)
                       .CheckFirepower(360)
                       .CheckAA(160)
                       .CheckASW(160)
                       .CheckLOS(140));

            case 112:                       // 南西諸島離島哨戒作戦
                return(result
                       .CheckFlagshipLevel(50)
                       .CheckLevelSum(250)
                       .CheckShipCountByType(ShipTypes.SeaplaneTender, 1)
                       .CheckShipCountByType(ShipTypes.LightCruiser, 1)
                       .CheckSmallShipCount(4)
                       .CheckFirepower(400)
                       .CheckAA(220)
                       .CheckASW(220)
                       .CheckLOS(190));

            case 113:                       // 南西諸島離島防衛作戦
                return(result
                       .CheckFlagshipLevel(55)
                       .CheckLevelSum(300)
                       .CheckShipCountByType(ShipTypes.HeavyCruiser, 2)
                       .CheckShipCountByType(ShipTypes.LightCruiser, 1)
                       .CheckShipCountByType(ShipTypes.Destroyer, 2)
                       .CheckSubmarineCount(1)
                       .CheckFirepower(500)
                       .CheckAA(280)
                       .CheckASW(280)
                       .CheckLOS(170));

            case 114:                       // 南西諸島捜索撃滅戦
                return(result
                       .CheckFlagshipLevel(60)
                       .CheckLevelSum(330)
                       .CheckShipCount(6)
                       .CheckShipCountByType(ShipTypes.SeaplaneTender, 1)
                       .CheckShipCountByType(ShipTypes.LightCruiser, 1)
                       .CheckShipCountByType(ShipTypes.Destroyer, 2)
                       .CheckFirepower(510)
                       .CheckAA(400)
                       .CheckASW(285)
                       .CheckLOS(385));

            case 17:                        // 敵地偵察作戦
                return(result
                       .CheckFlagshipLevel(20)
                       .CheckShipCount(6)
                       .CheckShipCountByType(ShipTypes.LightCruiser, 1)
                       .CheckShipCountByType(ShipTypes.Destroyer, 3));

            case 18:                        // 航空機輸送作戦
                return(result
                       .CheckFlagshipLevel(15)
                       .CheckShipCount(6)
                       .CheckAircraftCarrierCount(3)
                       .CheckShipCountByType(ShipTypes.Destroyer, 2));

            case 19:                        // 北号作戦
                return(result
                       .CheckFlagshipLevel(20)
                       .CheckShipCount(6)
                       .CheckShipCountByType(ShipTypes.AviationBattleship, 2)
                       .CheckShipCountByType(ShipTypes.Destroyer, 2));

            case 20:                        // 潜水艦哨戒任務
                return(result
                       .CheckFlagshipLevel(1)
                       .CheckSubmarineCount(1)
                       .CheckShipCountByType(ShipTypes.LightCruiser, 1));

            case 21:                        // 北方鼠輸送作戦
                return(result
                       .CheckFlagshipLevel(15)
                       .CheckLevelSum(30)
                       .CheckShipCountByType(ShipTypes.LightCruiser, 1)
                       .CheckShipCountByType(ShipTypes.Destroyer, 4)
                       .CheckEquippedShipCount(EquipmentTypes.TransportContainer, 3));

            case 22:                        // 艦隊演習
                return(result
                       .CheckFlagshipLevel(30)
                       .CheckLevelSum(45)
                       .CheckShipCount(6)
                       .CheckShipCountByType(ShipTypes.HeavyCruiser, 1)
                       .CheckShipCountByType(ShipTypes.LightCruiser, 1)
                       .CheckShipCountByType(ShipTypes.Destroyer, 2));

            case 23:                        // 航空戦艦運用演習
                return(result
                       .CheckFlagshipLevel(50)
                       .CheckLevelSum(200)
                       .CheckShipCount(6)
                       .CheckShipCountByType(ShipTypes.AviationBattleship, 2)
                       .CheckShipCountByType(ShipTypes.Destroyer, 2));

            case 24:                        // 北方航路海上護衛
                return(result
                       .CheckFlagshipLevel(50)
                       .CheckLevelSum(200)
                       .CheckShipCount(6)
                       .CheckFlagshipType(ShipTypes.LightCruiser)
                       .CheckSmallShipCount(4));

            case 25:                        // 通商破壊作戦
                return(result
                       .CheckFlagshipLevel(25)
                       .CheckShipCountByType(ShipTypes.HeavyCruiser, 2)
                       .CheckShipCountByType(ShipTypes.Destroyer, 2));

            case 26:                        // 敵母港空襲作戦
                return(result
                       .CheckFlagshipLevel(30)
                       .CheckAircraftCarrierCount(1)
                       .CheckShipCountByType(ShipTypes.LightCruiser, 1)
                       .CheckShipCountByType(ShipTypes.Destroyer, 2));

            case 27:                        // 潜水艦通商破壊作戦
                return(result
                       .CheckFlagshipLevel(1)
                       .CheckSubmarineCount(2));

            case 28:                        // 潜水艦通商破壊作戦
                return(result
                       .CheckFlagshipLevel(30)
                       .CheckSubmarineCount(3));

            case 29:                        // 潜水艦派遣演習
                return(result
                       .CheckFlagshipLevel(50)
                       .CheckSubmarineCount(3));

            case 30:                        // 潜水艦派遣作戦
                return(result
                       .CheckFlagshipLevel(55)
                       .CheckSubmarineCount(4));

            case 31:                        // 海外艦との接触
                return(result
                       .CheckFlagshipLevel(60)
                       .CheckLevelSum(200)
                       .CheckSubmarineCount(4));

            case 32:                        // 遠洋練習航海
                return(result
                       .CheckFlagshipLevel(5)
                       .CheckFlagshipType(ShipTypes.TrainingCruiser)
                       .CheckShipCountByType(ShipTypes.Destroyer, 2));

            case 131:                       // 西方海域偵察作戦
                return(result
                       .CheckFlagshipLevel(50)
                       .CheckLevelSum(200)
                       .CheckShipCount(5)
                       .CheckFlagshipType(ShipTypes.SeaplaneTender)
                       .CheckShipCountByType(ShipTypes.Destroyer, 3)
                       .CheckAA(240)
                       .CheckASW(240)
                       .CheckLOS(300));

            case 132:                       // 西方潜水艦作戦
                return(result
                       .CheckFlagshipLevel(55)
                       .CheckLevelSum(270)
                       .CheckShipCount(5)
                       .CheckFlagshipType(ShipTypes.SubmarineTender)
                       .CheckSubmarineCount(3)
                       .CheckFirepower(60)
                       .CheckAA(80)
                       .CheckASW(50));

            case 33:                        // 前衛支援任務
                return(result
                       .CheckShipCountByType(ShipTypes.Destroyer, 2));

            case 34:                        // 艦隊決戦支援任務
                return(result
                       .CheckShipCountByType(ShipTypes.Destroyer, 2));

            case 35:                        // MO作戦
                return(result
                       .CheckFlagshipLevel(40)
                       .CheckShipCount(6)
                       .CheckAircraftCarrierCount(2)
                       .CheckShipCountByType(ShipTypes.HeavyCruiser, 1)
                       .CheckShipCountByType(ShipTypes.Destroyer, 1));

            case 36:                        // 水上機基地建設
                return(result
                       .CheckFlagshipLevel(30)
                       .CheckShipCount(6)
                       .CheckShipCountByType(ShipTypes.SeaplaneTender, 2)
                       .CheckShipCountByType(ShipTypes.LightCruiser, 1)
                       .CheckShipCountByType(ShipTypes.Destroyer, 1));

            case 37:                        // 東京急行
                return(result
                       .CheckFlagshipLevel(50)
                       .CheckLevelSum(200)
                       .CheckShipCountByType(ShipTypes.LightCruiser, 1)
                       .CheckShipCountByType(ShipTypes.Destroyer, 5)
                       .CheckEquippedShipCount(EquipmentTypes.TransportContainer, 3)
                       .CheckEquipmentCount(EquipmentTypes.TransportContainer, 4));

            case 38:                        // 東京急行(弐)
                return(result
                       .CheckFlagshipLevel(65)
                       .CheckLevelSum(240)
                       .CheckShipCount(6)
                       .CheckShipCountByType(ShipTypes.Destroyer, 5)
                       .CheckEquippedShipCount(EquipmentTypes.TransportContainer, 4)
                       .CheckEquipmentCount(EquipmentTypes.TransportContainer, 8));

            case 39:                        // 遠洋潜水艦作戦
                return(result
                       .CheckFlagshipLevel(3)
                       .CheckLevelSum(180)
                       .CheckShipCountByType(ShipTypes.SubmarineTender, 1)
                       .CheckSubmarineCount(4));

            case 40:                        // 水上機前線輸送
                return(result
                       .CheckFlagshipLevel(25)
                       .CheckLevelSum(150)
                       .CheckShipCount(6)
                       .CheckFlagshipType(ShipTypes.LightCruiser)
                       .CheckShipCountByType(ShipTypes.SeaplaneTender, 2)
                       .CheckShipCountByType(ShipTypes.Destroyer, 2));

            case 141:                        // ラバウル方面艦隊進出
                return(result
                       .CheckFlagshipLevel(55)
                       .CheckLevelSum(290)
                       .CheckShipCount(6)
                       .CheckFlagshipType(ShipTypes.HeavyCruiser)
                       .CheckShipCountByType(ShipTypes.LightCruiser, 1)
                       .CheckShipCountByType(ShipTypes.Destroyer, 3)
                       .CheckFirepower(450)
                       .CheckAA(350)
                       .CheckASW(330)
                       .CheckLOS(250));

            case 142:                       // 強行鼠輸送作戦 (unchecked)
                return(result
                       .CheckFlagshipLevel(70)
                       .CheckLevelSum(353)
                       .CheckShipCountByType(ShipTypes.Destroyer, 5)
                       .CheckEquippedShipCount(EquipmentTypes.TransportContainer, 3)
                       .CheckEquipmentCount(EquipmentTypes.TransportContainer, 5)
                       .CheckFirepower(280)
                       .CheckAA(289)
                       .CheckASW(278)
                       .CheckLOS(164)
                       .SuppressWarnings());

            case 41:                        // ブルネイ泊地沖哨戒
                return(result
                       .CheckFlagshipLevel(30)
                       .CheckLevelSum(100)
                       .CheckSmallShipCount(3)
                       .CheckFirepower(60)
                       .CheckAA(80)
                       .CheckASW(210));

            case 42:                        // ミ船団護衛(一号船団)
                return(result
                       .CheckFlagshipLevel(45)
                       .CheckLevelSum(200)
                       .CheckShipCount(4)
                       .CheckEscortFleet());

            case 43:                        // ミ船団護衛(二号船団)
                return(result
                       .CheckFlagshipLevel(55)
                       .CheckLevelSum(300)
                       .CheckShipCount(6)
                       .CheckFlagshipType(ShipTypes.LightAircraftCarrier)
                       .CheckEscortFleet()
                       .CheckFirepower(500)
                       .CheckAA(280)
                       .CheckASW(280)
                       .CheckLOS(170));

            case 44:                        // 航空装備輸送任務
                return(result
                       .CheckFlagshipLevel(35)
                       .CheckLevelSum(210)
                       .CheckShipCount(6)
                       .CheckAircraftCarrierCount(1, includesSeaplaneTender: false)
                       .CheckShipCountByType(ShipTypes.SeaplaneTender, 1)
                       .CheckShipCountByType(ShipTypes.LightCruiser, 1)
                       .CheckSmallShipCount(2)
                       .CheckEquippedShipCount(EquipmentTypes.TransportContainer, 3)
                       .CheckEquipmentCount(EquipmentTypes.TransportContainer, 6)
                       .CheckAA(200)
                       .CheckASW(200)
                       .CheckLOS(150));

            case 45:                        // ボーキサイト船団護衛
                return(result
                       .CheckFlagshipLevel(50)
                       .CheckLevelSum(240)
                       .CheckFlagshipType(ShipTypes.LightAircraftCarrier)
                       .CheckSmallShipCount(4)
                       .CheckAA(240)
                       .CheckASW(300)
                       .CheckLOS(180));

            case 46:                        // 南西海域戦闘哨戒 (unchecked)
                return(result
                       .CheckFlagshipLevel(65)
                       .CheckLevelSum(300)
                       .CheckShipCount(5)
                       .CheckShipCountByType(ShipTypes.HeavyCruiser, 2)
                       .CheckShipCountByType(ShipTypes.LightCruiser, 1)
                       .CheckShipCountByType(ShipTypes.Destroyer, 2)
                       .CheckFirepower(350)
                       .CheckAA(324)
                       .CheckASW(220)
                       .CheckLOS(220)
                       .SuppressWarnings());

            default:
            {
                // イベント海域での支援遠征への対応
                var mission = KCDatabase.Instance.Mission[missionID];

                if (mission != null && (mission.Name == "前衛支援任務" || mission.Name == "艦隊決戦支援任務"))
                {
                    return(result
                           .CheckShipCountByType(ShipTypes.Destroyer, 2));
                }

                return(result
                       .AddMessage($"未対応(ID:{missionID})"));
            }
            }
        }
        /// <summary>
        /// 遠征に成功する編成かどうかを判定します。
        /// </summary>
        /// <param name="missionID">遠征ID。</param>
        /// <param name="fleet">対象となる艦隊。達成条件を確認したい場合は null を指定します。</param>
        public static MissionClearConditionResult Check(int missionID, FleetData fleet)
        {
            var result = new MissionClearConditionResult(fleet);

            switch (missionID)
            {
            case 1:         // 練習航海
                return(result
                       .CheckFlagshipLevel(1)
                       .CheckShipCount(2));

            case 2:         // 長距離練習航海
                return(result
                       .CheckFlagshipLevel(2)
                       .CheckShipCount(4));

            case 3:         // 警備任務
                return(result
                       .CheckFlagshipLevel(3)
                       .CheckShipCount(3));

            case 4:         // 対潜警戒任務
                return(result
                       .CheckFlagshipLevel(3)
                       .CheckEscortFleet());

            case 5:         // 海上護衛任務
                return(result
                       .CheckFlagshipLevel(3)
                       .CheckShipCount(4)
                       .CheckEscortFleet());

            case 6:         // 防空射撃演習
                return(result
                       .CheckFlagshipLevel(5)
                       .CheckShipCount(4));

            case 7:         // 観艦式予行
                return(result
                       .CheckFlagshipLevel(5)
                       .CheckShipCount(6));

            case 8:         // 観艦式
                return(result
                       .CheckFlagshipLevel(6)
                       .CheckShipCount(6));

            case 100:       // 兵站強化任務
                return(result
                       .CheckFlagshipLevel(15)
                       .CheckShipCount(4)
                       .CheckSmallShipCount(3));

            case 101:       // 海峡警備行動
                return(result
                       .CheckFlagshipLevel(20)
                       .CheckLevelSum(144)
                       .CheckSmallShipCount(4)
                       .CheckAA(70)
                       .CheckASW(180)
                       .CheckLOS(73));

            case 102:       // 長時間対潜警戒
                return(result
                       .CheckFlagshipLevel(35)
                       .CheckLevelSum(185)
                       .CheckShipCount(5)
                       .CheckEscortFleet()
                       .CheckAA(162)
                       .CheckASW(280)
                       .CheckLOS(60));

            case 9:         // タンカー護衛任務
                return(result
                       .CheckFlagshipLevel(3)
                       .CheckShipCount(4)
                       .CheckEscortFleet());

            case 10:        // 強行偵察任務
                return(result
                       .CheckFlagshipLevel(3)
                       .CheckShipCount(3)
                       .CheckShipCountByType(ShipTypes.LightCruiser, 2));

            case 11:        // ボーキサイト輸送任務
                return(result
                       .CheckFlagshipLevel(6)
                       .CheckShipCount(4)
                       .CheckShipCountByType(ShipTypes.Destroyer, 2));

            case 12:        // 資源輸送任務
                return(result
                       .CheckFlagshipLevel(4)
                       .CheckShipCount(4)
                       .CheckShipCountByType(ShipTypes.Destroyer, 2));

            case 13:        // 鼠輸送作戦
                return(result
                       .CheckFlagshipLevel(5)
                       .CheckShipCount(6)
                       .CheckShipCountByType(ShipTypes.LightCruiser, 1)
                       .CheckShipCountByType(ShipTypes.Destroyer, 4));

            case 14:        // 包囲陸戦隊撤収作戦
                return(result
                       .CheckFlagshipLevel(6)
                       .CheckShipCount(6)
                       .CheckShipCountByType(ShipTypes.LightCruiser, 1)
                       .CheckShipCountByType(ShipTypes.Destroyer, 3));

            case 15:        // 囮機動部隊支援作戦
                return(result
                       .CheckFlagshipLevel(8)
                       .CheckShipCount(6)
                       .CheckAircraftCarrierCount(2)
                       .CheckShipCountByType(ShipTypes.Destroyer, 2));

            case 16:        // 艦隊決戦援護作戦
                return(result
                       .CheckFlagshipLevel(10)
                       .CheckShipCount(6)
                       .CheckShipCountByType(ShipTypes.LightCruiser, 1)
                       .CheckShipCountByType(ShipTypes.Destroyer, 2));

            case 110:       // 南西方面航空偵察作戦
                return(result
                       .CheckFlagshipLevel(40)
                       .CheckLevelSum(150)
                       .CheckShipCount(6)
                       .CheckShipCountByType(ShipTypes.SeaplaneTender, 1)
                       .CheckShipCountByType(ShipTypes.LightCruiser, 1)
                       .CheckShipCountByType(ShipTypes.Destroyer, 2)
                       .CheckAA(200)
                       .CheckASW(200)
                       .CheckLOS(140));

            case 111:       // 敵泊地強襲反撃作戦
                return(result
                       .CheckFlagshipLevel(50)
                       .CheckShipCount(6)
                       .CheckShipCountByType(ShipTypes.HeavyCruiser, 1)
                       .CheckShipCountByType(ShipTypes.LightCruiser, 1)
                       .CheckShipCountByType(ShipTypes.Destroyer, 3)
                       .CheckFirepower(360));

            case 17:        // 敵地偵察作戦
                return(result
                       .CheckFlagshipLevel(20)
                       .CheckShipCount(6)
                       .CheckShipCountByType(ShipTypes.LightCruiser, 1)
                       .CheckShipCountByType(ShipTypes.Destroyer, 3));

            case 18:        // 航空機輸送作戦
                return(result
                       .CheckFlagshipLevel(15)
                       .CheckShipCount(6)
                       .CheckAircraftCarrierCount(3)
                       .CheckShipCountByType(ShipTypes.Destroyer, 2));

            case 19:        // 北号作戦
                return(result
                       .CheckFlagshipLevel(20)
                       .CheckShipCount(6)
                       .CheckShipCountByType(ShipTypes.AviationBattleship, 2)
                       .CheckShipCountByType(ShipTypes.Destroyer, 2));

            case 20:        // 潜水艦哨戒任務
                return(result
                       .CheckFlagshipLevel(1)
                       .CheckSubmarineCount(1)
                       .CheckShipCountByType(ShipTypes.LightCruiser, 1));

            case 21:        // 北方鼠輸送作戦
                return(result
                       .CheckFlagshipLevel(15)
                       .CheckLevelSum(30)
                       .CheckShipCountByType(ShipTypes.LightCruiser, 1)
                       .CheckShipCountByType(ShipTypes.Destroyer, 4)
                       .CheckEquippedShipCount(EquipmentTypes.TransportContainer, 3));

            case 22:        // 艦隊演習
                return(result
                       .CheckFlagshipLevel(30)
                       .CheckLevelSum(45)
                       .CheckShipCount(6)
                       .CheckShipCountByType(ShipTypes.HeavyCruiser, 1)
                       .CheckShipCountByType(ShipTypes.LightCruiser, 1)
                       .CheckShipCountByType(ShipTypes.Destroyer, 2));

            case 23:        // 航空戦艦運用演習
                return(result
                       .CheckFlagshipLevel(50)
                       .CheckLevelSum(200)
                       .CheckShipCount(6)
                       .CheckShipCountByType(ShipTypes.AviationBattleship, 2)
                       .CheckShipCountByType(ShipTypes.Destroyer, 2));

            case 24:        // 北方航路海上護衛
                return(result
                       .CheckFlagshipLevel(50)
                       .CheckLevelSum(200)
                       .CheckShipCount(6)
                       .CheckFlagshipType(ShipTypes.LightCruiser)
                       .CheckShipCountByType(ShipTypes.Destroyer, 4));

            case 25:        // 通商破壊作戦
                return(result
                       .CheckFlagshipLevel(25)
                       .CheckShipCountByType(ShipTypes.HeavyCruiser, 2)
                       .CheckShipCountByType(ShipTypes.Destroyer, 2));

            case 26:        // 敵母港空襲作戦
                return(result
                       .CheckFlagshipLevel(30)
                       .CheckAircraftCarrierCount(1)
                       .CheckShipCountByType(ShipTypes.LightCruiser, 1)
                       .CheckShipCountByType(ShipTypes.Destroyer, 2));

            case 27:        // 潜水艦通商破壊作戦
                return(result
                       .CheckFlagshipLevel(1)
                       .CheckSubmarineCount(2));

            case 28:        // 潜水艦通商破壊作戦
                return(result
                       .CheckFlagshipLevel(30)
                       .CheckSubmarineCount(3));

            case 29:        // 潜水艦派遣演習
                return(result
                       .CheckFlagshipLevel(50)
                       .CheckSubmarineCount(3));

            case 30:        // 潜水艦派遣作戦
                return(result
                       .CheckFlagshipLevel(55)
                       .CheckSubmarineCount(4));

            case 31:        // 海外艦との接触
                return(result
                       .CheckFlagshipLevel(60)
                       .CheckLevelSum(200)
                       .CheckSubmarineCount(4));

            case 32:        // 遠洋練習航海
                return(result
                       .CheckFlagshipLevel(5)
                       .CheckFlagshipType(ShipTypes.TrainingCruiser)
                       .CheckShipCountByType(ShipTypes.Destroyer, 2));

            case 33:        // 前衛支援任務
                return(result
                       .CheckShipCountByType(ShipTypes.Destroyer, 2));

            case 34:        // 艦隊決戦支援任務
                return(result
                       .CheckShipCountByType(ShipTypes.Destroyer, 2));

            case 35:        // MO作戦
                return(result
                       .CheckFlagshipLevel(40)
                       .CheckShipCount(6)
                       .CheckAircraftCarrierCount(2)
                       .CheckShipCountByType(ShipTypes.HeavyCruiser, 1)
                       .CheckShipCountByType(ShipTypes.Destroyer, 1));

            case 36:        // 水上機基地建設
                return(result
                       .CheckFlagshipLevel(30)
                       .CheckShipCount(6)
                       .CheckShipCountByType(ShipTypes.SeaplaneTender, 2)
                       .CheckShipCountByType(ShipTypes.LightCruiser, 1)
                       .CheckShipCountByType(ShipTypes.Destroyer, 1));

            case 37:        // 東京急行
                return(result
                       .CheckFlagshipLevel(50)
                       .CheckLevelSum(200)
                       .CheckShipCountByType(ShipTypes.LightCruiser, 1)
                       .CheckShipCountByType(ShipTypes.Destroyer, 5)
                       .CheckEquippedShipCount(EquipmentTypes.TransportContainer, 3)
                       .CheckEquipmentCount(EquipmentTypes.TransportContainer, 4));

            case 38:        // 東京急行(弐)
                return(result
                       .CheckFlagshipLevel(65)
                       .CheckLevelSum(240)
                       .CheckShipCount(6)
                       .CheckShipCountByType(ShipTypes.Destroyer, 5)
                       .CheckEquippedShipCount(EquipmentTypes.TransportContainer, 4)
                       .CheckEquipmentCount(EquipmentTypes.TransportContainer, 8));

            case 39:        // 遠洋潜水艦作戦
                return(result
                       .CheckFlagshipLevel(3)
                       .CheckLevelSum(180)
                       .CheckShipCountByType(ShipTypes.SubmarineTender, 1)
                       .CheckSubmarineCount(4));

            case 40:        // 水上機前線輸送
                return(result
                       .CheckFlagshipLevel(25)
                       .CheckLevelSum(150)
                       .CheckShipCount(6)
                       .CheckFlagshipType(ShipTypes.LightCruiser)
                       .CheckShipCountByType(ShipTypes.SeaplaneTender, 2)
                       .CheckShipCountByType(ShipTypes.Destroyer, 2));

            default:
            {
                // イベント海域での支援遠征への対応
                var mission = KCDatabase.Instance.Mission[missionID];

                if (mission != null && (mission.Name == "前衛支援任務" || mission.Name == "艦隊決戦支援任務"))
                {
                    return(result
                           .CheckShipCountByType(ShipTypes.Destroyer, 2));
                }

                return(result
                       .AddMessage($"未対応(ID:{missionID})"));
            }
            }
        }