public MyAlienGateMission()
        {
            ID = MyMissionID.ALIEN_GATE;
            DebugName = new StringBuilder("22-Alien artifact");
            Name = MyTextsWrapperEnum.ALIEN_GATE;
            Description = MyTextsWrapperEnum.ALIEN_GATE_Description;
            Flags = MyMissionFlags.Story;
            AchievementName = MySteamAchievementNames.Mission31_AlienGate;

            MyMwcVector3Int baseSector = new MyMwcVector3Int(-1202900, 0, -112652); // Story sector of the script - i.e. (-2465,0,6541)

            Location = new MyMissionLocation(baseSector, (uint)EntityID.FollowCoordinatesDummy); // Starting dummy point - must by typecasted to uint and referenced from EntityID enum

            RequiredMissions = new MyMissionID[] { MyMissionID.EAC_TRANSMITTER }; // IDs of missions required to make this mission available
            RequiredMissionsForSuccess = new MyMissionID[] { MyMissionID.ALIEN_GATE_23 };
            RequiredActors = new MyActorEnum[] { MyActorEnum.MARCUS, MyActorEnum.MADELYN, MyActorEnum.TARJA, MyActorEnum.VALENTIN };

            #region Objectives
            m_objectives = new List<MyObjective>();


            var keepFormation = new MyObjective(
                (MyTextsWrapperEnum.ALIEN_GATE_RIGHT_WING_Name),
                MyMissionID.ALIEN_GATE_RIGHT_WING,
                (MyTextsWrapperEnum.ALIEN_GATE_RIGHT_WING_Description),
                null,
                this,
                new MyMissionID[] { },
                new MyMissionLocation(baseSector, (uint)EntityID.MadelynSRightWingPosition)) { HudName = MyTextsWrapperEnum.HudLeftWing };
            m_objectives.Add(keepFormation);


            m_followCords = new MyDestroyWavesObjective(
                (MyTextsWrapperEnum.ALIEN_GATE_FOLLOW_COORDINATES_Name),
                MyMissionID.ALIEN_GATE_FOLLOW_COORDINATES,
                (MyTextsWrapperEnum.ALIEN_GATE_FOLLOW_COORDINATES_Description),
                null,
                this,
                new MyMissionID[] { MyMissionID.ALIEN_GATE_RIGHT_WING, },
                new List<uint>() { },
                new MyMissionLocation(baseSector, (uint)EntityID.FollowCoordinatesDummy),
                radiusOverride: 150) { StartDialogId = MyDialogueEnum.ALIEN_GATE_0100, SuccessDialogId = MyDialogueEnum.ALIEN_GATE_0300 };
            m_followCords.AddWave(new List<uint>() { (uint)EntityID.FollowCoordinatesSpawnPoint });
            m_followCords.OnMissionLoaded += M01FollowCordsOnOnMissionLoaded;
            m_followCords.OnMissionSuccess += M01FollowCordsOnOnMissionSuccess;
            m_followCords.Components.Add(new MyMovingEntity("Madelyn", (uint)EntityID.FollowCoordinatesDummy, FollowCoordinatesMadelynTime));
            m_objectives.Add(m_followCords);


            var continueSearching = new MyObjective(
                (MyTextsWrapperEnum.ALIEN_GATE_CONTINUE_SEARCHING_Name),
                MyMissionID.ALIEN_GATE_CONTINUE_SEARCHING,
                (MyTextsWrapperEnum.ALIEN_GATE_CONTINUE_SEARCHING_Description),
                null,
                this,
                new MyMissionID[] { MyMissionID.ALIEN_GATE_FOLLOW_COORDINATES },
                new MyMissionLocation(baseSector, (uint)EntityID.ContinueSearchingDummy)
                ) { SaveOnSuccess = false, SuccessDialogId = MyDialogueEnum.ALIEN_GATE_0400, HudName = MyTextsWrapperEnum.HudSearch };
            continueSearching.Components.Add(new MyMovingEntity("Madelyn", (uint)EntityID.ContinueSearchingDummy, ContinueSearchingMadelynTime));
            m_objectives.Add(continueSearching);


            var followDirection = new MyObjective(
                (MyTextsWrapperEnum.ALIEN_GATE_FOLLOW_DIRECTION_Name),
                MyMissionID.ALIEN_GATE_FOLLOW_DIRECTION,
                (MyTextsWrapperEnum.ALIEN_GATE_FOLLOW_DIRECTION_Description),
                null,
                this,
                new MyMissionID[] { MyMissionID.ALIEN_GATE_CONTINUE_SEARCHING },
                new MyMissionLocation(baseSector, (uint)EntityID.FollowDirectionDummy)) { HudName = MyTextsWrapperEnum.HudFollow };
            followDirection.OnMissionLoaded += M03FollowDirectionOnOnMissionLoaded;
            followDirection.OnMissionCleanUp += M03FollowDirectionOnOnMissionCleanUp;
            m_objectives.Add(followDirection);


            m_coughtInTrap = new MyObjectiveDialog
                (MyTextsWrapperEnum.ALIEN_GATE_COUGHT_IN_TRAP_Name,
                 MyMissionID.ALIEN_GATE_COUGHT_IN_TRAP,
                 MyTextsWrapperEnum.ALIEN_GATE_COUGHT_IN_TRAP_Description,
                 null,
                 this,
                 new MyMissionID[] { MyMissionID.ALIEN_GATE_FOLLOW_DIRECTION },
                 MyDialogueEnum.ALIEN_GATE_0500
                 ) { Location = new MyMissionLocation(baseSector, (uint)EntityID.CoughtInTrapDummy), SaveOnSuccess = true };
            m_coughtInTrap.OnMissionLoaded += M04CoughtInTrapOnOnMissionLoaded;
            m_coughtInTrap.Components.Add(new MyMovingEntity((uint)EntityID.CoughtInTrapShip1, (uint)EntityID.CoughtInTrapShip1Target, CoughtInTrapMoveTime));
            m_coughtInTrap.Components.Add(new MyMovingEntity((uint)EntityID.CoughtInTrapShip2, (uint)EntityID.CoughtInTrapShip2Target, CoughtInTrapMoveTime));
            m_coughtInTrap.Components.Add(new MyMovingEntity((uint)EntityID.CoughtInTrapShip3, (uint)EntityID.CoughtInTrapShip3Target, CoughtInTrapMoveTime));
            m_objectives.Add(m_coughtInTrap);
            



            m_runForYourLife = new MyTimedObjective
                ((MyTextsWrapperEnum.ALIEN_GATE_RUN_FOR_LIFE_Name),
                 MyMissionID.ALIEN_GATE_RUN_FOR_LIFE,
                 (MyTextsWrapperEnum.ALIEN_GATE_RUN_FOR_LIFE_Description),
                 null,
                 this,
                 new MyMissionID[] { MyMissionID.ALIEN_GATE_COUGHT_IN_TRAP },
                 TimeSpan.FromMilliseconds(RunForYourLifeObjectiveTime),
                 startDialogId: MyDialogueEnum.ALIEN_GATE_0600
                ) { DisplayCounter = false, Location = new MyMissionLocation(baseSector, (uint)EntityID.RunForYourLifeDummy), HudName = MyTextsWrapperEnum.HudRun };
            m_runForYourLife.OnMissionLoaded += M05RunForYourLifeOnOnMissionLoaded;
            m_runForYourLife.Components.Add(new MyMovingEntity(MyActorConstants.GetActorName(MyActorEnum.MADELYN), (uint)EntityID.RunForYourLifeShipTarget, RunForYourLifeShipMoveTime));
            m_objectives.Add(m_runForYourLife);
            
            m_regroupWithMadelyn = new MyTimedObjective(
                (MyTextsWrapperEnum.ALIEN_GATE_REGROUP_WITH_MADELYN_Name),
                MyMissionID.ALIEN_GATE_REGROUP_WITH_MADELYN,
                (MyTextsWrapperEnum.ALIEN_GATE_REGROUP_WITH_MADELYN_Description),
                null,
                this,
                new MyMissionID[] { MyMissionID.ALIEN_GATE_RUN_FOR_LIFE, },
                TimeSpan.FromMilliseconds(RegroupWithMadelynMissionTime)
            ) { DisplayCounter = false, Location = new MyMissionLocation(baseSector, (uint)EntityID.RegroupWithMadelynShip1Target), HudName = MyTextsWrapperEnum.HudRegroup, SaveOnSuccess = true };
            m_regroupWithMadelyn.OnMissionLoaded += M06RegroupWithMadelynOnOnMissionLoaded;
            m_regroupWithMadelyn.Components.Add(new MySpawnpointWaves((uint)EntityID.RegroupWithMadelynDetector, 1, new List<uint[]>()
                                                                                                         {
                                                                                                             new uint[]{(uint)EntityID.RegroupWithMadelynSpawn1},
                                                                                                             new uint[]{(uint)EntityID.RegroupWithMadelynSpawn2}
                                                                                                         }));
            m_regroupWithMadelyn.Components.Add(new MySpawnpointWaves((uint)EntityID.RegroupWithMadelynDetector2, 1, new List<uint[]>()
                                                                                                         {
                                                                                                             new uint[]{(uint)EntityID.RegroupWithMadelynSpawn3, (uint)EntityID.RegroupWithMadelynSpawn4}
                                                                                                         }));

            m_regroupWithMadelyn.Components.Add(new MyMovingEntity(MyActorConstants.GetActorName(MyActorEnum.MADELYN), (uint)EntityID.RegroupWithMadelynShip1Target, RegroupWithMadelynMissionTime));
            m_regroupWithMadelyn.Components.Add(new MyMovingEntity((uint)EntityID.CoughtInTrapShip1, (uint)EntityID.RegroupWithMadelynShip2Target, RegroupWithMadelynMissionTime));
            m_regroupWithMadelyn.Components.Add(new MyMovingEntity((uint)EntityID.CoughtInTrapShip2, (uint)EntityID.RegroupWithMadelynShip3Target, RegroupWithMadelynMissionTime));
            m_regroupWithMadelyn.Components.Add(new MyMovingEntity((uint)EntityID.CoughtInTrapShip3, (uint)EntityID.RegroupWithMadelynShip4Target, RegroupWithMadelynMissionTime));
            m_regroupWithMadelyn.Components.Add(new MyTimedDialogue(new TimeSpan(0, 0, 50), MyDialogueEnum.ALIEN_GATE_0900));
            m_regroupWithMadelyn.Components.Add(new MyDetectorDialogue((uint)EntityID.RegroupWithMadelynShip1Target, MyDialogueEnum.ALIEN_GATE_0800B));
            m_objectives.Add(m_regroupWithMadelyn);
            


            m_boardMotherShip = new MyObjective
                ((MyTextsWrapperEnum.ALIEN_GATE_BOARD_MOTHER_SHIP_Name),
                 MyMissionID.ALIEN_GATE_BOARD_MOTHER_SHIP,
                 (MyTextsWrapperEnum.ALIEN_GATE_BOARD_MOTHER_SHIP_Description),
                 null,
                 this,
                 new MyMissionID[] { MyMissionID.ALIEN_GATE_REGROUP_WITH_MADELYN, },
                 new MyMissionLocation(baseSector, (uint)EntityID.BoardmotherShipDummy)
                ) { SuccessDialogId = MyDialogueEnum.ALIEN_GATE_1100, HudName = MyTextsWrapperEnum.HudMothership };
            m_boardMotherShip.Components.Add(new MySpawnpointWaves((uint)EntityID.BoardmotherShipDetector1, 1, (uint)EntityID.BoardmotherShipSpawn1));
            m_boardMotherShip.Components.Add(new MySpawnpointWaves((uint)EntityID.BoardmotherShipDetector2, 1, (uint)EntityID.BoardmotherShipSpawn2));
            m_boardMotherShip.Components.Add(new MySpawnpointWaves((uint)EntityID.BoardmotherShipDetector3, 1, (uint)EntityID.BoardmotherShipSpawn3));
            m_boardMotherShip.Components.Add(new MyDetectorDialogue((uint)EntityID.RussianGeneralSpeak, MyDialogueEnum.ALIEN_GATE_1000));
            m_boardMotherShip.OnMissionLoaded += BoardMotherShipOnOnMissionLoaded;
            m_objectives.Add(m_boardMotherShip);

            m_hackGenerator = new MyUseObjective
                ((MyTextsWrapperEnum.ALIEN_GATE_HACK_GENERATOR_Name),
                 MyMissionID.ALIEN_GATE_HACK_GENERATOR,
                 (MyTextsWrapperEnum.ALIEN_GATE_HACK_GENERATOR_Description),
                 null,
                 this,
                 new MyMissionID[] { MyMissionID.ALIEN_GATE_BOARD_MOTHER_SHIP },
                 new MyMissionLocation(baseSector, (uint)EntityID.HackGeneratorDummy),
                 MyTextsWrapperEnum.PressToHack,
                 MyTextsWrapperEnum.Generator,
                 MyTextsWrapperEnum.StartingProgress,
                 5000
                );
            m_hackGenerator.SaveOnSuccess = true;
            m_hackGenerator.OnMissionLoaded += M08HackGeneratorOnOnMissionLoaded;
            m_hackGenerator.Components.Add(new MyTimedDialogue(new TimeSpan(0, 0, 2), MyDialogueEnum.ALIEN_GATE_1200));
            m_hackGenerator.Components.Add(new MySpawnpointWaves((uint)EntityID.HackGeneratorDetector1, 1, new List<uint[]>()
                                                                                                         {
                                                                                                             new uint[]{(uint)EntityID.HackGeneratorSpawn11},
                                                                                                             new uint[]{(uint)EntityID.HackGeneratorSpawn12}
                                                                                                         }));
            m_hackGenerator.Components.Add(new MySpawnpointWaves((uint)EntityID.HackGeneratorDetector2, 1, new List<uint[]>()
                                                                                                         {
                                                                                                             new uint[]{(uint)EntityID.HackGeneratorSpawn21},
                                                                                                             new uint[]{(uint)EntityID.HackGeneratorSpawn22}
                                                                                                         }));
            m_hackGenerator.Components.Add(new MySpawnpointWaves((uint)EntityID.HackGeneratorDetector3, 1, new List<uint[]>()
                                                                                                         {
                                                                                                             new uint[]{(uint)EntityID.HackGeneratorSpawn31,(uint)EntityID.HackGeneratorSpawn32,(uint)EntityID.HackGeneratorSpawn33},
                                                                                                         }));
            m_hackGenerator.Components.Add(new MySpawnpointWaves((uint)EntityID.HackGeneratorDetector4, 1, new List<uint[]>()
                                                                                                         {
                                                                                                             new uint[]{(uint)EntityID.HackGeneratorSpawn41,(uint)EntityID.HackGeneratorSpawn42},
                                                                                                         }));
            m_hackGenerator.Components.Add(new MySpawnpointWaves((uint)EntityID.HackGeneratorDetector5, 1, new List<uint[]>()
                                                                                                         {
                                                                                                             new uint[]{(uint)EntityID.HackGeneratorSpawn5},
                                                                                                         }));
            m_objectives.Add(m_hackGenerator);


            m_hackEngine = new MyUseObjective
                ((MyTextsWrapperEnum.ALIEN_GATE_HACK_ENGINE_Name),
                 MyMissionID.ALIEN_GATE_HACK_ENGINE,
                 (MyTextsWrapperEnum.ALIEN_GATE_HACK_ENGINE_Description),
                 null,
                 this,
                 new MyMissionID[] { MyMissionID.ALIEN_GATE_HACK_GENERATOR },
                 new MyMissionLocation(baseSector, (uint)EntityID.HackEngineDummy),
                 MyTextsWrapperEnum.PressToHack,
                 MyTextsWrapperEnum.Generator,
                 MyTextsWrapperEnum.StartingProgress,
                 5000,
                 MyUseObjectiveType.Hacking,
                 startDialogId: MyDialogueEnum.ALIEN_GATE_1300
                ) { SuccessDialogId = MyDialogueEnum.ALIEN_GATE_1500, SaveOnSuccess = true };
            m_hackEngine.OnMissionLoaded += M09HackEngineOnOnMissionLoaded;
            m_hackEngine.Components.Add(new MyDetectorDialogue((uint)EntityID.HackEngineDummy, MyDialogueEnum.ALIEN_GATE_1400));
            m_hackEngine.Components.Add(new MySpawnpointWaves((uint)EntityID.HackGeneratorDetector5, 1, new List<uint[]>()
                                                                                                         {
                                                                                                             new uint[]{(uint)EntityID.HackGeneratorSpawn5},
                                                                                                        }));

            m_hackEngine.Components.Add(new MySpawnpointWaves((uint)EntityID.HackGeneratorDetector4, 1, new List<uint[]>()
                                                                                                         {
                                                                                                             new uint[]{(uint)EntityID.HackEngineSpawn2},
                                                                                                         }));
            m_hackEngine.Components.Add(new MySpawnpointWaves((uint)EntityID.HackEngineDetector3, 1, new List<uint[]>()
                                                                                                         {
                                                                                                             new uint[]{(uint)EntityID.HackEngineSpawn3},
                                                                                                         }));
            m_hackEngine.Components.Add(new MySpawnpointWaves((uint)EntityID.HackEngineDetector4, 1, new List<uint[]>()
                                                                                                         {
                                                                                                             new uint[]{(uint)EntityID.HackEngineSpawn4},
                                                                                                         }));
            m_hackEngine.Components.Add(new MySpawnpointWaves((uint)EntityID.HackEngineDetector5, 1, new List<uint[]>()
                                                                                                         {
                                                                                                             new uint[]{(uint)EntityID.HackEngineSpawn51},
                                                                                                             new uint[]{(uint)EntityID.HackEngineSpawn52},
                                                                                                         }));
            m_hackEngine.Components.Add(new MySpawnpointWaves((uint)EntityID.HackEngineDetector6, 1, new List<uint[]>()
                                                                                                         {
                                                                                                             new uint[]{(uint)EntityID.HackEngineSpawn6},
                                                                                                         }));
            m_objectives.Add(m_hackEngine);


            m_leaveShip1 = new MyTimedReachLocationObjective
                ((MyTextsWrapperEnum.ALIEN_GATE_LEAVE_SHIP_Name),
                 MyMissionID.ALIEN_GATE_LEAVE_SHIP,
                 (MyTextsWrapperEnum.ALIEN_GATE_LEAVE_SHIP_Description),
                 null,
                 this,
                 new MyMissionID[] { MyMissionID.ALIEN_GATE_HACK_ENGINE, },
                 TimeSpan.FromMilliseconds((double)m_10ObjectiveTime),
                 new MyMissionLocation(baseSector, (uint)EntityID._10Dummy)
                ) { HudName = MyTextsWrapperEnum.Nothing };

            m_leaveShip1.OnMissionLoaded += M10LeaveShip1OnOnMissionLoaded;
            m_leaveShip1.OnMissionFailed += M10LeaveShip1OnOnMissionFailed;
            m_leaveShip1.Components.Add(new MySpawnpointWaves((uint)EntityID.HackEngineDetector4, 1, new List<uint[]>()
                                                                                                         {
                                                                                                             new uint[]{(uint)EntityID.HackEngineSpawn4},
                                                                                                        }));

            m_leaveShip1.Components.Add(new MySpawnpointWaves((uint)EntityID.HackGeneratorDetector3, 1, new List<uint[]>()
                                                                                                         {
                                                                                                             new uint[]{(uint)EntityID._10Spawn2},
                                                                                                         }));
            m_objectives.Add(m_leaveShip1);


            m_regroupWithMadelyn2 = new MyObjective(
                (MyTextsWrapperEnum.ALIEN_GATE_REGROPUP_WITH_MADELYN_Name),
                MyMissionID.ALIEN_GATE_REGROPUP_WITH_MADELYN,
                (MyTextsWrapperEnum.ALIEN_GATE_REGROPUP_WITH_MADELYN_Description),
                null,
                this,
                new MyMissionID[] { MyMissionID.ALIEN_GATE_LEAVE_SHIP, },
                new MyMissionLocation(baseSector, (uint)EntityID.RegroupWithMadelynShip1Target),
                startDialogId: MyDialogueEnum.ALIEN_GATE_1700
            ) { HudName = MyTextsWrapperEnum.HudRegroup, SaveOnSuccess = true };
            m_regroupWithMadelyn2.OnMissionLoaded += M11RegroupWithMadelyn2OnOnMissionLoaded;
            m_objectives.Add(m_regroupWithMadelyn2);

            m_shipbBoard2 = new MyObjective(
                (MyTextsWrapperEnum.ALIEN_GATE_BOARD_SECOND_Name),
                MyMissionID.ALIEN_GATE_BOARD_SECOND,
                (MyTextsWrapperEnum.ALIEN_GATE_BOARD_SECOND_Description),
                null,
                this,
                new MyMissionID[] { MyMissionID.ALIEN_GATE_REGROPUP_WITH_MADELYN, },
                new MyMissionLocation(baseSector, (uint)EntityID.BoardSecondShipbDummy)
                ) { StartDialogId = MyDialogueEnum.ALIEN_GATE_1900, HudName = MyTextsWrapperEnum.HudMothership };
            m_shipbBoard2.Components.Add(new MySpawnpointWaves((uint)EntityID.RegroupWithMadelynDetector, 1, new List<uint[]>()
                                                                                                         {
                                                                                                             new uint[]{(uint)EntityID.BoardSecondShipbSpawn1, (uint)EntityID.BoardSecondShipbSpawn2},
                                                                                                        }));
            m_shipbBoard2.OnMissionLoaded += M11BBoard2OnOnMissionLoaded;
            m_objectives.Add(m_shipbBoard2);


            m_hackGenerator2 = new MyUseObjective
                ((MyTextsWrapperEnum.ALIEN_GATE_HACK_GENERATOR2_Name),
                 MyMissionID.ALIEN_GATE_HACK_GENERATOR2,
                 (MyTextsWrapperEnum.ALIEN_GATE_HACK_GENERATOR2_Description),
                 null,
                 this,
                 new MyMissionID[] { MyMissionID.ALIEN_GATE_BOARD_SECOND },
                 new MyMissionLocation(baseSector, (uint)EntityID.HackGenerator2Dummy),
                 MyTextsWrapperEnum.PressToHack,
                 MyTextsWrapperEnum.Generator,
                 MyTextsWrapperEnum.StartingProgress,
                 5000,
                 MyUseObjectiveType.Hacking
                ) { StartDialogId = MyDialogueEnum.ALIEN_GATE_2000, SaveOnSuccess = true };
            m_hackGenerator2.OnMissionLoaded += M12HackGenerator2OnOnMissionLoaded;

            m_hackGenerator2.Components.Add(new MySpawnpointWaves((uint)EntityID.HackGenerator2Detector1, 1, new List<uint[]>()
                                                                                                         {
                                                                                                             new uint[]{(uint)EntityID.HackGenerator2Spawn11, (uint)EntityID.HackGenerator2Spawn12},
                                                                                                        }));
            m_hackGenerator2.Components.Add(new MySpawnpointWaves((uint)EntityID.HackGenerator2Detector2, 1, new List<uint[]>()
                                                                                                         {
                                                                                                             new uint[]{(uint)EntityID.HackGenerator2Spawn2},
                                                                                                        }));
            m_objectives.Add(m_hackGenerator2);


            m_hackEngine2 = new MyObjective(
                (MyTextsWrapperEnum.ALIEN_GATE_HACK_ENGINE_2_Name),
                MyMissionID.ALIEN_GATE_HACK_ENGINE_2,
                (MyTextsWrapperEnum.ALIEN_GATE_HACK_ENGINE_2_Description),
                null,
                this,
                new MyMissionID[] { MyMissionID.ALIEN_GATE_HACK_GENERATOR2 },
                new MyMissionLocation(baseSector, (uint)EntityID._13Dummy)/*,
                startDialogId: MyDialogueEnum.ALIEN_GATE_2100*/
                );
            m_hackEngine2.OnMissionLoaded += M13HackEngine2OnOnMissionLoaded;
            m_hackEngine2.Components.Add(new MySpawnpointWaves((uint)EntityID._13Detector1, 1, new List<uint[]>()
                                                                                                         {
                                                                                                             new uint[]{(uint)EntityID._13Spawn11, (uint)EntityID._13Spawn12,(uint)EntityID._13Spawn13},
                                                                                                        }));
            m_hackEngine2.Components.Add(new MySpawnpointWaves((uint)EntityID._13Detector2, 1, new List<uint[]>()
                                                                                                         {
                                                                                                             new uint[]{(uint)EntityID._13Spawn2}
                                                                                                        }));
            m_hackEngine2.Components.Add(new MySpawnpointWaves((uint)EntityID._13Detector3, 1, new List<uint[]>()
                                                                                                         {
                                                                                                             new uint[]{(uint)EntityID._13Spawn3}
                                                                                                        }));
            m_hackEngine2.Components.Add(new MySpawnpointWaves((uint)EntityID._13Detector4, 1, new List<uint[]>()
                                                                                                         {
                                                                                                             new uint[]{(uint)EntityID._13Spawn41},
                                                                                                            new uint[]{(uint)EntityID._13Spawn42}
                                                                                                        }));
            m_hackEngine2.Components.Add(new MySpawnpointWaves((uint)EntityID._13Detector5, 1, new List<uint[]>()
                                                                                                         {
                                                                                                             new uint[]{(uint)EntityID._13Spawn51},
                                                                                                            new uint[]{(uint)EntityID._13Spawn52}
                                                                                                        }));
            m_objectives.Add(m_hackEngine2);


            m_enableDoors = new MyObjectiveEnablePrefabs(
                (MyTextsWrapperEnum.ALIEN_GATE_ENABLE_DOORS_Name),
                MyMissionID.ALIEN_GATE_ENABLE_DOORS,
                (MyTextsWrapperEnum.ALIEN_GATE_ENABLE_DOORS_Description),
                null,
                this,
                new MyMissionID[] { MyMissionID.ALIEN_GATE_HACK_ENGINE_2 },
                null,
                new List<uint> { (uint)EntityID.EnableDoorsHUB },
                new List<uint> { (uint)EntityID.EnableDoorsDoors, }


                ) { HudName = MyTextsWrapperEnum.HudHub };
            m_enableDoors.Components.Add(new MySpawnpointWaves((uint)EntityID.EnableDoorsDetector, 1, new List<uint[]>()
                                                                                                         {
                                                                                                             new uint[]{(uint)EntityID.EnableDoorsSpawnPoint}
                                                                                                        }));

            m_enableDoors.Components.Add(new MyDetectorDialogue((uint)EntityID.DoorsDialogue, MyDialogueEnum.ALIEN_GATE_2200));
            m_objectives.Add(m_enableDoors);

            m_enterlaboratory = new MyObjective(
                (MyTextsWrapperEnum.ALIEN_GATE_ENTER_LAB_Name),
                MyMissionID.ALIEN_GATE_ENTER_LAB,
                (MyTextsWrapperEnum.ALIEN_GATE_ENTER_LAB_Description),
                null,
                this,
                new MyMissionID[] { MyMissionID.ALIEN_GATE_ENABLE_DOORS },
                new MyMissionLocation(baseSector, (uint)EntityID.EnterLaboratoryDummy)
                // startDialogId: m_dialog12
                ) { StartDialogId = MyDialogueEnum.ALIEN_GATE_2300, HudName = MyTextsWrapperEnum.HudLab };
            m_enterlaboratory.Components.Add(new MySpawnpointWaves((uint)EntityID.EnterLaboratoryDetector, 1, new List<uint[]>()
                                                                                                         {
                                                                                                             new uint[]{(uint)EntityID.EnterLaboratorySpawn}
                                                                                                        }));
            m_objectives.Add(m_enterlaboratory);

            m_downloadData = new MyUseObjective
                ((MyTextsWrapperEnum.ALIEN_GATE_16_Name),
                 MyMissionID.ALIEN_GATE_16,
                 (MyTextsWrapperEnum.ALIEN_GATE_16_Description),
                 null,
                 this,
                 new MyMissionID[] { MyMissionID.ALIEN_GATE_ENTER_LAB },
                 new MyMissionLocation(baseSector, (uint)EntityID._16Dummy),
                 MyTextsWrapperEnum.PressToDownloadData,
                 MyTextsWrapperEnum.DataTransfer,
                 MyTextsWrapperEnum.DownloadingData,
                 3000,
                 MyUseObjectiveType.Taking
                ) { StartDialogId = MyDialogueEnum.ALIEN_GATE_2400, SaveOnSuccess = true };
            m_objectives.Add(m_downloadData);


            m_hackGenerator3 = new MyUseObjective
                ((MyTextsWrapperEnum.ALIEN_GATE_17_Name),
                 MyMissionID.ALIEN_GATE_17,
                 (MyTextsWrapperEnum.ALIEN_GATE_17_Description),
                 null,
                 this,
                 new MyMissionID[] { MyMissionID.ALIEN_GATE_16 },
                 new MyMissionLocation(baseSector, (uint)EntityID._17Dummy),
                 MyTextsWrapperEnum.PressToHack,
                 MyTextsWrapperEnum.Generator,
                 MyTextsWrapperEnum.StartingProgress,
                 5000,
                 MyUseObjectiveType.Hacking,
                 startDialogId: MyDialogueEnum.ALIEN_GATE_2500
                );
            m_objectives.Add(m_hackGenerator3);
            m_hackGenerator3.OnMissionLoaded += M17HackGenerator3OnOnMissionLoaded;

            m_hackGenerator3.Components.Add(new MySpawnpointWaves((uint)EntityID._17Detector, 1, new List<uint[]>()
                                                                                                         {
                                                                                                             new uint[]{(uint)EntityID._17Spawn1,(uint)EntityID.EnterLaboratorySpawn}
                                                                                                        }));

            m_leaveShip = new MyTimedReachLocationObjective
                ((MyTextsWrapperEnum.ALIEN_GATE_18_Name),
                 MyMissionID.ALIEN_GATE_18,
                 (MyTextsWrapperEnum.ALIEN_GATE_18_Description),
                 null,
                 this,
                 new MyMissionID[] { MyMissionID.ALIEN_GATE_17, },
                 TimeSpan.FromMilliseconds((double)m_18ObjectiveTime),
                 new MyMissionLocation(baseSector, (uint)EntityID._18Dummy)

                ) { StartDialogId = MyDialogueEnum.ALIEN_GATE_2600, HudName = MyTextsWrapperEnum.Nothing, SaveOnSuccess = true };
            m_leaveShip.OnMissionLoaded += M18LeaveShipOnOnMissionLoaded;
            m_leaveShip.OnMissionFailed += M18LeaveShipOnOnMissionFailed;
            m_leaveShip.Components.Add(new MySpawnpointWaves((uint)EntityID._13Detector5, 1, new List<uint[]>()
                                                                                                         {
                                                                                                             new uint[]{(uint)EntityID._18Spawn1}
                                                                                                        }));
            m_objectives.Add(m_leaveShip);

            m_killReef = new MyObjective(
                (MyTextsWrapperEnum.ALIEN_GATE_19_Name),
                MyMissionID.ALIEN_GATE_19,
                (MyTextsWrapperEnum.ALIEN_GATE_19_Description),
                null,
                this,
                new MyMissionID[] { MyMissionID.ALIEN_GATE_18 },
                new MyMissionLocation(baseSector, (uint)EntityID._19Dummy)

                ) { StartDialogId = MyDialogueEnum.ALIEN_GATE_2800 };
            m_killReef.OnMissionLoaded += M19KilReefOnOnMissionLoaded;
            m_objectives.Add(m_killReef);


            m_20ReefEscape = new MyTimedObjective
                ((MyTextsWrapperEnum.ALIEN_GATE_20_Name),
                 MyMissionID.ALIEN_GATE_20,
                 (MyTextsWrapperEnum.ALIEN_GATE_20_Description),
                 null,
                 this,
                 new MyMissionID[] { MyMissionID.ALIEN_GATE_19, },
                 TimeSpan.FromMilliseconds(m_20ObjectiveTime)
                ) { HudName = MyTextsWrapperEnum.HudFrancisReef };
            m_20ReefEscape.Location = new MyMissionLocation(baseSector, (uint)EntityID._20Prefab);
            m_20ReefEscape.Components.Add(new MyMovingEntity((uint)EntityID._19Ship, (uint)EntityID._20ShipTarget, m_20ObjectiveTime));
            m_20ReefEscape.OnMissionLoaded += M20ReefEscapeOnOnMissionLoaded;
            m_20ReefEscape.OnMissionSuccess += ReefEscapeOnOnMissionSuccess;
            m_objectives.Add(m_20ReefEscape);

            m_21DestroyReef = new MyObjectiveDestroy(
                (MyTextsWrapperEnum.ALIEN_GATE_21_Name),
                MyMissionID.ALIEN_GATE_21,
                (MyTextsWrapperEnum.ALIEN_GATE_21_Description),
                null,
                this,
                new MyMissionID[] { MyMissionID.ALIEN_GATE_20 },
                new List<uint>() { (uint)EntityID._21ToDesroy }) { StartDialogId = MyDialogueEnum.ALIEN_GATE_2900, HudName = MyTextsWrapperEnum.HudFrancisReef, SaveOnSuccess = true };
            m_21DestroyReef.OnMissionLoaded += M21DestroyReefOnOnMissionLoaded;
            m_21DestroyReef.OnMissionSuccess += M21DestroyReefOnOnMissionSuccess;
            m_21DestroyReef.Components.Add(new MySpawnpointWaves((uint)EntityID._21Detector1, 1, new List<uint[]>()
                                                                                                         {
                                                                                                             new uint[]{(uint)EntityID._21SpawnPoint11},
                                                                                                             new uint[]{(uint)EntityID._21SpawnPoint12}
                                                                                                        }));
            m_21DestroyReef.Components.Add(new MyMovingEntity((uint)EntityID._21Ship2, (uint)EntityID._21Ship2Target, m_21ObjectiveMovingTime));
            m_21DestroyReef.Components.Add(new MyMovingEntity((uint)EntityID._21Particle1, (uint)EntityID._21Particle1Target, m_21ObjectiveMovingTime, false));
            m_21DestroyReef.Components.Add(new MyMovingEntity((uint)EntityID._21Particle2, (uint)EntityID._21Particle2Target, m_21ObjectiveMovingTime, false));
            //m_21DestroyReef.Components.Add(new MyTimedDialogue(TimeSpan.FromMilliseconds(m_21ObjectiveMovingTime), MyDialogueEnum.ALIEN_GATE_3100));
            m_21DestroyReef.Components.Add(new MyTimedDialogue(TimeSpan.FromMilliseconds(5000), MyDialogueEnum.ALIEN_GATE_3000));
            m_objectives.Add(m_21DestroyReef);


            m_22FlyBackTomadelyn = new MyObjective(
                (MyTextsWrapperEnum.ALIEN_GATE_22_Name),
                MyMissionID.ALIEN_GATE_22,
                (MyTextsWrapperEnum.ALIEN_GATE_22_Description),
                null,
                this,
                new MyMissionID[] { MyMissionID.ALIEN_GATE_21 },
                new MyMissionLocation(baseSector, (uint)EntityID._22Dummy),
                startDialogId: MyDialogueEnum.ALIEN_GATE_3200
                ) { HudName = MyTextsWrapperEnum.HudMeetingPoint };
            m_22FlyBackTomadelyn.OnMissionLoaded += M22FlyBackTomadelynOnOnMissionLoaded;
            m_objectives.Add(m_22FlyBackTomadelyn);

            m_23ExploreAliengate = new MyObjective(
                (MyTextsWrapperEnum.ALIEN_GATE_23_Name),
                MyMissionID.ALIEN_GATE_23,
                (MyTextsWrapperEnum.ALIEN_GATE_23_Description),
                null,
                this,
                new MyMissionID[] { MyMissionID.ALIEN_GATE_22 },
                new MyMissionLocation(baseSector, (uint)EntityID._23Dummy),
                startDialogId: MyDialogueEnum.ALIEN_GATE_3300
                ) { HudName = MyTextsWrapperEnum.Nothing };
            m_23ExploreAliengate.Components.Add(new MyMovingEntity(MyActorConstants.GetActorName(MyActorEnum.MADELYN), (uint)EntityID._23Shiptarget, 50000));
            m_23ExploreAliengate.OnMissionLoaded += M23ExploreAliengateOnOnMissionLoaded;
            m_objectives.Add(m_23ExploreAliengate);
            #endregion
        }
Example #2
0
        //private MySubmisisonDefend m_defendGenerator;

        #endregion

        public MySlaverBaseMission()
        {
            m_ValidateIDlists = new List <List <uint> >();
            m_ValidateIDlists.Add(m_closeddoors);
            m_ValidateIDlists.Add(m_finalparticle);
            m_ValidateIDlists.Add(m_openedddoors);
            m_ValidateIDlists.Add(m_standbyparticle);
            m_ValidateIDlists.Add(m_pilotsSpawn);
            m_ValidateIDlists.Add(m_closeentiites);
            ID          = MyMissionID.SLAVER_BASE_1; /* ID must be added to MyMissions.cs */
            Name        = MyTextsWrapperEnum.SLAVER_BASE_GRAND_BURROW;
            Description = MyTextsWrapperEnum.SLAVER_BASE_GRAND_BURROW_Description;
            DebugName   = new StringBuilder("09b-Slaver base Grand Burrow"); // Nazev mise

            Flags = MyMissionFlags.Story;

            MyMwcVector3Int baseSector = new MyMwcVector3Int(2052452, 0, -10533886);     // Story sector of the script

            Location = new MyMissionLocation(baseSector, (uint)EntityID.StartLocation);  // Starting dummy point

            RequiredMissions           = new MyMissionID[] { MyMissionID.FORT_VALIANT }; // mise ktere musi byt splneny pred prijetim teto mise
            RequiredMissionsForSuccess = new MyMissionID[] { MyMissionID.SLAVER_BASE_1_DIALOG_10 };
            RequiredActors             = new MyActorEnum[] { MyActorEnum.MARCUS, MyActorEnum.MADELYN, MyActorEnum.TARJA, MyActorEnum.VALENTIN };

            m_objectives = new List <MyObjective>(); // Creating of list of submissions


            // -------------- START DEFINICE SUBMISE ---------------------

            var talkWith = new MyObjectiveDialog(
                (MyTextsWrapperEnum.SLAVER_BASE_1_DIALOG_1_Name),
                MyMissionID.SLAVER_BASE_1_DIALOG_1,
                (MyTextsWrapperEnum.SLAVER_BASE_1_DIALOG_1_Description),
                null,
                this,
                new MyMissionID[] { },
                dialogId: MyDialogueEnum.SLAVERBASE_0100_INTRODUCE
                )
            {
                SaveOnSuccess = false
            };

            m_objectives.Add(talkWith);


            var DestroyGenerators = new MyObjectiveDestroy(
                // Var is used to call functions on that member
                (MyTextsWrapperEnum.SLAVER_BASE_1_DESTROY_GENERATOR_Name),
                MyMissionID.SLAVER_BASE_1_DESTROY_GENERATOR,
                (MyTextsWrapperEnum.SLAVER_BASE_1_DESTROY_GENERATOR_Description),
                null,
                this,
                new MyMissionID[] { MyMissionID.SLAVER_BASE_1_DIALOG_1 },
                Generators,
                false
                )
            {
                SaveOnSuccess = false, HudName = MyTextsWrapperEnum.HudGenerator
            };

            m_objectives.Add(DestroyGenerators); // pridani do seznamu submisi
            DestroyGenerators.OnMissionSuccess += DestroyGeneratorMSSuccess;


            var talkWith2 = new MyObjectiveDialog(
                (MyTextsWrapperEnum.SLAVER_BASE_1_DIALOG_2_Name),
                MyMissionID.SLAVER_BASE_1_DIALOG_2,
                (MyTextsWrapperEnum.SLAVER_BASE_1_DIALOG_2_Description),
                null,
                this,
                new MyMissionID[] { MyMissionID.SLAVER_BASE_1_DESTROY_GENERATOR },
                dialogId: MyDialogueEnum.SLAVERBASE_0200_GENERATORS_DESTROYED
                )
            {
                SaveOnSuccess = false
            };

            m_objectives.Add(talkWith2);


            var DestroyBatteries = new MyObjectiveDestroy(
                // Var is used to call functions on that member

                (MyTextsWrapperEnum.SLAVER_BASE_1_DESTROY_BATTERIES_Name),
                MyMissionID.SLAVER_BASE_1_DESTROY_BATTERIES,
                (MyTextsWrapperEnum.SLAVER_BASE_1_DESTROY_BATTERIES_Description),
                null,
                this,
                new MyMissionID[] { MyMissionID.SLAVER_BASE_1_DIALOG_2 },
                Batteries,
                false
                )
            {
                SaveOnSuccess = true, HudName = MyTextsWrapperEnum.HudBatteries
            };

            m_objectives.Add(DestroyBatteries); // pridani do seznamu submisi
            DestroyBatteries.OnMissionSuccess += DestroyBatteriesMSSuccess;


            var FindPrison = new MyObjective(                               // One member of that list - je to MyObjective takze cilem je doletet do checkpointu
                (MyTextsWrapperEnum.SLAVER_BASE_1_FIND_PRISON_Name),        // nazev submise
                MyMissionID.SLAVER_BASE_1_FIND_PRISON,                      // id submise
                (MyTextsWrapperEnum.SLAVER_BASE_1_FIND_PRISON_Description), // popis submise
                null,
                this,
                new MyMissionID[] { MyMissionID.SLAVER_BASE_1_DESTROY_BATTERIES }, // ID submisi ktere musi byt splneny - je to prazdne takze je to prvni submise
                new MyMissionLocation(baseSector, (uint)EntityID.Prison_Dummy),
                startDialogId: MyDialogueEnum.SLAVERBASE_0300_BATTERIES_DESTROYED  // ID of dummy point of checkpoint
                )
            {
                SaveOnSuccess = false, HudName = MyTextsWrapperEnum.HudPrison
            };                            // nastaveni save na checkpointu nebo ne

            m_objectives.Add(FindPrison); // pridani do seznamu submisi
            FindPrison.OnMissionSuccess += FindPrisonMSSuccess;


            m_freeSlaves = new MyObjectiveDestroy(
                // Var is used to call functions on that member
                (MyTextsWrapperEnum.SLAVER_BASE_1_FREE_SLAVES_Name),
                MyMissionID.SLAVER_BASE_1_FREE_SLAVES,
                (MyTextsWrapperEnum.SLAVER_BASE_1_FREE_SLAVES_Description),
                null,
                this,
                new MyMissionID[] { MyMissionID.SLAVER_BASE_1_FIND_PRISON },
                m_Bars,
                false
                )
            {
                SaveOnSuccess = false, HudName = MyTextsWrapperEnum.HudCage
            };
            m_objectives.Add(m_freeSlaves); // pridani do seznamu submisi


            var talkWith4 = new MyObjectiveDialog(
                MyMissionID.SLAVER_BASE_1_DIALOG_4,
                null,
                this,
                new MyMissionID[] { MyMissionID.SLAVER_BASE_1_FREE_SLAVES },
                dialogId: MyDialogueEnum.SLAVERBASE_0400_SLAVES_SAVED
                )
            {
                SaveOnSuccess = true
            };

            m_objectives.Add(talkWith4);


            m_hackHangar = new MyObjectiveEnablePrefabs(
                (MyTextsWrapperEnum.SLAVER_BASE_1_HACK_HANGAR_Name),
                MyMissionID.SLAVER_BASE_1_HACK_HANGAR,
                (MyTextsWrapperEnum.SLAVER_BASE_1_HACK_HANGAR_Description),
                null,
                this,
                new MyMissionID[] { MyMissionID.SLAVER_BASE_1_DIALOG_4 },
                null,
                new List <uint> {
                (uint)EntityID.Hack_PC
            },
                new List <uint> {
                (uint)EntityID.Hangar_Doors
            }
                )
            {
                HudName = MyTextsWrapperEnum.HudHub
            };
            m_objectives.Add(m_hackHangar);
            m_hackHangar.OnMissionSuccess += HangarOpen;

            m_freeSlavesMS = new MyObjectiveDestroy( // Var is used to call functions on that member
                (MyTextsWrapperEnum.SLAVER_BASE_1_FREE_SLAVES_2_Name),
                MyMissionID.SLAVER_BASE_1_FREE_SLAVES_2,
                (MyTextsWrapperEnum.SLAVER_BASE_1_FREE_SLAVES_2_Description),
                null,
                this,
                new MyMissionID[] { MyMissionID.SLAVER_BASE_1_HACK_HANGAR },
                Mothership_Bars,
                false
                )
            {
                SaveOnSuccess = false, ToDestroyCount = 1, HudName = MyTextsWrapperEnum.HudCage
            };
            m_objectives.Add(m_freeSlavesMS); // pridani do seznamu submisi


            var talkWith6 = new MyObjectiveDialog(
                (MyTextsWrapperEnum.SLAVER_BASE_1_DIALOG_6_Name),
                MyMissionID.SLAVER_BASE_1_DIALOG_6,
                (MyTextsWrapperEnum.SLAVER_BASE_1_DIALOG_6_Description),
                null,
                this,
                new MyMissionID[] { MyMissionID.SLAVER_BASE_1_FREE_SLAVES_2, },
                dialogId: MyDialogueEnum.SLAVERBASE_0600_MOTHERSHIP_EMPTY
                )
            {
                SaveOnSuccess = false
            };

            m_objectives.Add(talkWith6);


            var findSlaves = new MyObjectiveDestroy(
                // Var is used to call functions on that member
                (MyTextsWrapperEnum.SLAVER_BASE_1_FIND_SLAVES_Name),
                MyMissionID.SLAVER_BASE_1_FIND_SLAVES,
                (MyTextsWrapperEnum.SLAVER_BASE_1_FIND_SLAVES_Description),
                null,
                this,
                new MyMissionID[] { MyMissionID.SLAVER_BASE_1_DIALOG_6 },
                bar_pit,
                // ID of dummy point of checkpoint
                false
                )
            {
                SaveOnSuccess = true, HudName = MyTextsWrapperEnum.HudCage
            };

            findSlaves.MissionEntityIDs.Add((uint)EntityID.Bar_pit);
            m_objectives.Add(findSlaves); // pridani do seznamu submisi


            var talkWith7 = new MyObjectiveDialog(
                (MyTextsWrapperEnum.SLAVER_BASE_1_DIALOG_7_Name),
                MyMissionID.SLAVER_BASE_1_DIALOG_7,
                (MyTextsWrapperEnum.SLAVER_BASE_1_DIALOG_7_Description),
                null,
                this,
                new MyMissionID[] { MyMissionID.SLAVER_BASE_1_FIND_SLAVES, },
                dialogId: MyDialogueEnum.SLAVERBASE_0700_PIT_EMPTY
                )
            {
                SaveOnSuccess = false
            };

            m_objectives.Add(talkWith7);
            talkWith7.OnMissionLoaded += FreePilotsMSSuccess;


            var destroyEnemies = new MyDestroyWavesObjective(
                // Var is used to call functions on that member
                (MyTextsWrapperEnum.SLAVER_BASE_1_DESTROY_ENEMIES_Name),
                MyMissionID.SLAVER_BASE_1_DESTROY_ENEMIES,
                (MyTextsWrapperEnum.SLAVER_BASE_1_DESTROY_ENEMIES_Description),
                null,
                this,
                new[] { MyMissionID.SLAVER_BASE_1_DIALOG_7 }
                //new List<uint>
                //    {
                //        (uint) EntityID.Mothership_Spawn_1,
                //        (uint) EntityID.Mothership_Spawn_2,
                //        (uint) EntityID.Mothership_Spawn_3
                //    },
                )
            {
                SaveOnSuccess = false
            };

            destroyEnemies.AddWave(new List <uint> {
                (uint)EntityID.Mothership_Spawn_1
            });
            destroyEnemies.AddWave(new List <uint> {
                (uint)EntityID.Mothership_Spawn_2
            });
            destroyEnemies.AddWave(new List <uint> {
                (uint)EntityID.Mothership_Spawn_3
            });
            destroyEnemies.OnMissionSuccess += EnemiesDestroyed;
            m_objectives.Add(destroyEnemies); // pridani do seznamu submisi

            var talkWith9 = new MyObjectiveDialog(
                (MyTextsWrapperEnum.SLAVER_BASE_1_DIALOG_9_Name),
                MyMissionID.SLAVER_BASE_1_DIALOG_9,
                (MyTextsWrapperEnum.SLAVER_BASE_1_DIALOG_9_Description),
                null,
                this,
                new MyMissionID[] { MyMissionID.SLAVER_BASE_1_DESTROY_ENEMIES },
                dialogId: MyDialogueEnum.SLAVERBASE_0800_ENEMIES_DESTROYED
                )
            {
                SaveOnSuccess = false
            };

            m_objectives.Add(talkWith9);


            m_openHangarDoors = new MyObjectiveEnablePrefabs(
                (MyTextsWrapperEnum.SLAVER_BASE_1_HACK_NUKE_Name),
                MyMissionID.SLAVER_BASE_1_HACK_NUKE,
                (MyTextsWrapperEnum.SLAVER_BASE_1_HACK_NUKE_Description),
                null,
                this,
                new MyMissionID[] { MyMissionID.SLAVER_BASE_1_DIALOG_9 },
                null,
                new List <uint> {
                (uint)EntityID.HangarDoorsHub
            },
                new List <uint> {
                (uint)EntityID.Cargo_Bay_Doors
            }
                )
            {
                HudName = MyTextsWrapperEnum.HudHub
            };
            m_objectives.Add(m_openHangarDoors);
            m_openHangarDoors.OnMissionSuccess += MSEscape;
            m_openHangarDoors.OnMissionSuccess += MoveFourthReichMSStart;



            var talkWith10 = new MyTimedObjective(
                (MyTextsWrapperEnum.SLAVER_BASE_1_DIALOG_10_Name),
                MyMissionID.SLAVER_BASE_1_DIALOG_10,
                (MyTextsWrapperEnum.SLAVER_BASE_1_DIALOG_10_Description),
                null,
                this,
                new MyMissionID[] { MyMissionID.SLAVER_BASE_1_HACK_NUKE },
                TimeSpan.FromSeconds(50)
                )
            {
                SaveOnSuccess   = false,
                SuccessDialogId = MyDialogueEnum.SLAVERBASE_1100_FAKE_ESCAPED,
                DisplayCounter  = false,
            };

            talkWith10.MissionEntityIDs.Add((uint)EntityID.Escape_Dummy);
            m_objectives.Add(talkWith10);
        }
        public MyBarthsMoonPlantMission()
            : base(MyMissionID.BARTHS_MOON_PLANT,
                   new StringBuilder("15-Barth's moon plant"),
                   MyTextsWrapperEnum.BARTHS_MOON_PLANT,
                   MyTextsWrapperEnum.BARTHS_MOON_PLANT_Description,
                   new MyMissionID[] { MyMissionID.RIFT },
                   new EntityID[] { EntityID.BuildContainer4 },
                   EntityID.PlayerStartLocationPlant)
        {
            m_objectives = new List<MyObjective>();
            RequiredMissionsForSuccess = new MyMissionID[] { MyMissionID.BARTHS_MOON_PLANT_TALK_BARTH };
            RequiredActors = new MyActorEnum[] { MyActorEnum.MADELYN, MyActorEnum.VALENTIN, MyActorEnum.TARJA };
            RequiredMissions = new MyMissionID[] { MyMissionID.RIFT };

            #region Objectives
            var saveThomas = new MyTimedMeetObjective(
                (MyTextsWrapperEnum.BARTHS_MOON_PLANT_SAVE_BARTH_Name),
                MyMissionID.BARTHS_MOON_PLANT_SAVE_BARTH,
                (MyTextsWrapperEnum.BARTHS_MOON_PLANT_SAVE_BARTH_Description),
                this,
                new MyMissionID[] { },
                (uint)EntityID._01Detector,
                (uint)EntityID._01SmallShipBarth,
                100,
                0.25f,
                new TimeSpan(0, 1, 30),
                startDialogueId: MyDialogueEnum.BARTHS_MOON_PLANT_0100,
                successDialogueId: MyDialogueEnum.BARTHS_MOON_PLANT_0200,
                stopFollow: false
                ) { SaveOnSuccess = true, PathName = "BarthEs" };
            saveThomas.Components.Add(new MyMovingEntity((uint)EntityID._01PirateShip, (uint)EntityID._01PirateShiptarget, (int)new TimeSpan(0, 1, 30).TotalMilliseconds));
            saveThomas.OnMissionLoaded += SaveThomas_Loaded;
            m_objectives.Add(saveThomas);

            var killAttackers = new MyObjectiveDestroy(
                (MyTextsWrapperEnum.BARTHS_MOON_PLANT_KILL_ATTACKERS_Name),
                MyMissionID.BARTHS_MOON_PLANT_KILL_ATTACKERS,
                (MyTextsWrapperEnum.BARTHS_MOON_PLANT_KILL_ATTACKERS_Description),
                null,
                this,
                new MyMissionID[] { MyMissionID.BARTHS_MOON_PLANT_SAVE_BARTH },
                null,
                m_02SpawnPoints,
                false
                ) { SaveOnSuccess = true, };
            killAttackers.OnMissionLoaded += KillAttackers_Loaded;
            m_objectives.Add(killAttackers);


            var getTurrets = new MyUseObjective(
                (MyTextsWrapperEnum.BARTHS_MOON_PLANT_DEFENCE_Name),
                MyMissionID.BARTHS_MOON_PLANT_DEFENCE,
                (MyTextsWrapperEnum.BARTHS_MOON_PLANT_DEFENCE_Description),
                null,
                this,
                new MyMissionID[] { MyMissionID.BARTHS_MOON_PLANT_KILL_ATTACKERS },
                new MyMissionLocation(baseSector, (uint)EntityID._03Dummy),
                MyTextsWrapperEnum.PressToTakeTurrets,
                MyTextsWrapperEnum.Turrets,
                MyTextsWrapperEnum.TransferInProgress,
                3000,
                startDialogId: MyDialogueEnum.BARTHS_MOON_PLANT_0300) { SaveOnSuccess = true };
            getTurrets.OnMissionLoaded += GetTurrets_Loaded;
            getTurrets.OnMissionSuccess += GetTurrets_Success;
            m_objectives.Add(getTurrets);



            m_buildDefenses = new MyTimedObjective(
                (MyTextsWrapperEnum.BARTHS_MOON_PLANT_BUILD_DEFENCE_LINE_Name),
                MyMissionID.BARTHS_MOON_PLANT_BUILD_DEFENCE_LINE,
                (MyTextsWrapperEnum.BARTHS_MOON_PLANT_BUILD_DEFENCE_LINE_Description),
                null,
                this,
                new MyMissionID[] { MyMissionID.BARTHS_MOON_PLANT_DEFENCE },
                new TimeSpan(0, 0, minutes: 1, seconds: 30)

                ) { DisplayCounter = true, SaveOnSuccess = true };
            m_buildDefenses.OnMissionLoaded += BuildDefenses_Loaded;
            m_buildDefenses.OnMissionUpdate += BuildDefenses_Update;
            m_buildDefenses.OnMissionCleanUp += BuildDefenses_Unloaded;
            m_objectives.Add(m_buildDefenses);



            m_protectBarth = new MyTimedObjective(
                (MyTextsWrapperEnum.BARTHS_MOON_PLANT_PROTECT_BARTH_Name),
                MyMissionID.BARTHS_MOON_PLANT_PROTECT_BARTH,
                (MyTextsWrapperEnum.BARTHS_MOON_PLANT_PROTECT_BARTH_Description),
                null,
                this,
                new MyMissionID[] { MyMissionID.BARTHS_MOON_PLANT_BUILD_DEFENCE_LINE },
                new TimeSpan(0, minutes: 2, seconds: 0),
                true
                ) { DisplayCounter = false, SaveOnSuccess = true, StartDialogId = MyDialogueEnum.BARTHS_MOON_PLANT_0400, MakeEntityIndestructible = false };
            m_protectBarth.MissionEntityIDs.Add((uint)EntityID._01SmallShipBarth);
            m_protectBarth.Components.Add(new MyMovingEntity((uint)EntityID._05PirateShip, (uint)EntityID._01PirateShiptarget, (int)m_protectBarth.SubmissionDuration.TotalMilliseconds));
            m_protectBarth.Components.Add(new MyMovingEntity((uint)EntityID._05PirateBigShip, (uint)EntityID._05PirateBigShipTarget, (int)m_protectBarth.SubmissionDuration.TotalMilliseconds));
            m_protectBarth.OnMissionLoaded += ProtectBarth_Loaded;
            m_protectBarth.OnMissionCleanUp += ProtectBarth_Unloaded;
            m_protectBarth.OnMissionSuccess += ProtectBarth_Success;
            m_objectives.Add(m_protectBarth);


            m_protectMadelyn = new MyTimedObjective(
                (MyTextsWrapperEnum.BARTHS_MOON_PLANT_PROTECT_MADELYN_Name),
                MyMissionID.BARTHS_MOON_PLANT_PROTECT_MADELYN,
                (MyTextsWrapperEnum.BARTHS_MOON_PLANT_PROTECT_MADELYN_Description),
                null,
                this,
                new MyMissionID[] { MyMissionID.BARTHS_MOON_PLANT_PROTECT_BARTH },
                new TimeSpan(0, minutes: 3, seconds: 0),
                true) { SaveOnSuccess = true, DisplayCounter = false, HudName = MyTextsWrapperEnum.HudCommandCenter };
            m_protectMadelyn.OnMissionLoaded += ProtectMadelyn_Loaded;
            m_protectMadelyn.OnMissionSuccess += ProtectMadelyn_Success;
            m_protectMadelyn.OnMissionCleanUp += ProtectMadelyn_CleanUp;
            m_protectMadelyn.OnMissionUpdate += ProtectMadelyn_Update;
            m_protectMadelyn.Components.Add(new MyTimedDialogue(new TimeSpan(0, 0, 5), MyDialogueEnum.BARTHS_MOON_PLANT_0600));
            m_objectives.Add(m_protectMadelyn);


            m_lastStand = new MyTimedObjective(
                (MyTextsWrapperEnum.BARTHS_MOON_PLANT_ENEMY_Name),
                MyMissionID.BARTHS_MOON_PLANT_ENEMY,
                (MyTextsWrapperEnum.BARTHS_MOON_PLANT_ENEMY_Description),
                null,
                this,
                new MyMissionID[] { MyMissionID.BARTHS_MOON_PLANT_PROTECT_MADELYN },
                new TimeSpan(0, 0, 50),
                true
            ) { /*DisplayCounter = false, */ SaveOnSuccess = true, StartDialogId = MyDialogueEnum.BARTHS_MOON_PLANT_0800 };
            m_lastStand.Components.Add(new MyMovingEntity((uint)EntityID._05PirateShip, (uint)EntityID._07PirateShipTarget, (int)m_lastStand.SubmissionDuration.TotalMilliseconds));
            m_lastStand.Components.Add(new MyMovingEntity((uint)EntityID._05PirateBigShip, (uint)EntityID._07PirateBigShipTarget, (int)m_lastStand.SubmissionDuration.TotalMilliseconds));
            m_lastStand.OnMissionLoaded += LastStand_Loaded;
            m_lastStand.OnMissionCleanUp += LastStand_CleanUp;
            m_objectives.Add(m_lastStand);


            m_destroyGenerators = new MyObjectiveDestroy(
                (MyTextsWrapperEnum.BARTHS_MOON_PLANT_DESTROY_GENERATORS_Name),
                MyMissionID.BARTHS_MOON_PLANT_DESTROY_GENERATORS,
                (MyTextsWrapperEnum.BARTHS_MOON_PLANT_DESTROY_GENERATORS_Description),
                null,
                this,
                new MyMissionID[] { MyMissionID.BARTHS_MOON_PLANT_ENEMY },
                new List<uint> { (uint)EntityID._08generator1, (uint)EntityID._08generator2 },         // entities needed to kill
                new List<uint> { },  // spawnpoint from which bots must be killed
                true,
                false // dont count 
            ) { SaveOnSuccess = true, StartDialogId = MyDialogueEnum.BARTHS_MOON_PLANT_0900, HudName = MyTextsWrapperEnum.HudGenerator };
            m_destroyGenerators.OnMissionSuccess += DestroyGenerators_Success;
            m_destroyGenerators.OnMissionLoaded += DestroyGenerators_Loaded;
            m_objectives.Add(m_destroyGenerators);



            var getComponents = new MyUseObjective(
                (MyTextsWrapperEnum.BARTHS_MOON_PLANT_GET_NEEDED_COMPONENTS_Name),
                MyMissionID.BARTHS_MOON_PLANT_GET_NEEDED_COMPONENTS,
                (MyTextsWrapperEnum.BARTHS_MOON_PLANT_GET_NEEDED_COMPONENTS_Description),
                null,
                this,
                new MyMissionID[] { MyMissionID.BARTHS_MOON_PLANT_DESTROY_GENERATORS },
                new MyMissionLocation(baseSector, (uint)EntityID.GetNeededComponentsDummy),
                MyTextsWrapperEnum.PressToPickItems,
                MyTextsWrapperEnum.Items,
                MyTextsWrapperEnum.PickingInProgress,
                4000,
                MyUseObjectiveType.Taking,
                startDialogId: MyDialogueEnum.BARTHS_MOON_PLANT_1000) { SaveOnSuccess = true };
            getComponents.OnMissionLoaded += GetComponents_Loaded;
            getComponents.OnMissionSuccess += GetComponents_Success;
            m_objectives.Add(getComponents);

            var buildPlant = new MyUseObjective(
                    (MyTextsWrapperEnum.BARTHS_MOON_PLANT_BUILD_PLANT_Name),
                    MyMissionID.BARTHS_MOON_PLANT_BUILD_PLANT,
                    (MyTextsWrapperEnum.BARTHS_MOON_PLANT_BUILD_PLANT_Description),
                    null,
                    this,
                    new MyMissionID[] { MyMissionID.BARTHS_MOON_PLANT_GET_NEEDED_COMPONENTS },
                    new MyMissionLocation(baseSector, (uint)EntityID.ConstructDetector),
                    MyTextsWrapperEnum.PressToBuildTransmitter,
                    MyTextsWrapperEnum.Items,
                    MyTextsWrapperEnum.BuildingInProgress,
                    4000,
                    MyUseObjectiveType.Activating,
                    startDialogId: MyDialogueEnum.BARTHS_MOON_PLANT_1100) { SaveOnSuccess = true };
            buildPlant.OnMissionLoaded += new MissionHandler(BuildPlant_OnMissionLoaded);
            buildPlant.OnMissionSuccess += new MissionHandler(BuildPlant_OnMissionSuccess);
            m_objectives.Add(buildPlant);

            var constructDetectors = new MyUseObjective(
                    (MyTextsWrapperEnum.BARTHS_MOON_PLANT_CONSTRUCT_DETECTORS_Name),
                    MyMissionID.BARTHS_MOON_PLANT_CONSTRUCT_DETECTORS,
                    (MyTextsWrapperEnum.BARTHS_MOON_PLANT_CONSTRUCT_DETECTORS_Description),
                    null,
                    this,
                    new MyMissionID[] { MyMissionID.BARTHS_MOON_PLANT_BUILD_PLANT },
                    new MyMissionLocation(baseSector, (uint)EntityID.ConstructDetector),
                    MyTextsWrapperEnum.PressToBuildTransmitter,
                    MyTextsWrapperEnum.Items,
                    MyTextsWrapperEnum.BuildingInProgress,
                    4000,
                    MyUseObjectiveType.Activating) { SaveOnSuccess = true };
            constructDetectors.OnMissionLoaded +=new MissionHandler(ConstructDetectors_Loaded);
            constructDetectors.OnMissionSuccess += new MissionHandler(ConstructDetectors_Success);
            m_objectives.Add(constructDetectors);



            m_barthEndDialogue = new MyMeetObjective(
                (MyTextsWrapperEnum.BARTHS_MOON_PLANT_TALK_BARTH_Name),
                MyMissionID.BARTHS_MOON_PLANT_TALK_BARTH,
                (MyTextsWrapperEnum.BARTHS_MOON_PLANT_TALK_BARTH_Description),
                this,
                new MyMissionID[] { MyMissionID.BARTHS_MOON_PLANT_CONSTRUCT_DETECTORS },
                (uint)EntityID._01Detector,
                (uint)EntityID._01SmallShipBarth,
                50,
                0.25f,
                successDialogueId: MyDialogueEnum.BARTHS_MOON_PLANT_1200
            ) { SaveOnSuccess = true, FollowMe = false, PathName = "Group23", MakeEntityIndestructible = false };
            m_barthEndDialogue.OnMissionLoaded += BarthEndDialogue_Loaded;
            m_objectives.Add(m_barthEndDialogue);
            #endregion
        }
Example #4
0
        public MyLaikaMission()
        {
            ID = MyMissionID.LAIKA; /* ID must be added to MyMissions.cs */
            Name = MyTextsWrapperEnum.LAIKA;
            Description = MyTextsWrapperEnum.LAIKA_Description;
            DebugName = new StringBuilder("02-Laika");
            Flags = MyMissionFlags.Story;

            MyMwcVector3Int baseSector = new MyMwcVector3Int(-3851812, 0, -2054500);

            /* sector where the mission is located */
            Location = new MyMissionLocation(baseSector, (uint)EntityID.StartLocation);

            RequiredMissions = new MyMissionID[] { MyMissionID.EAC_SURVEY_SITE };
            RequiredMissionsForSuccess = new MyMissionID[] { MyMissionID.LAIKA_LASTSTAND };
            RequiredActors = new MyActorEnum[] { MyActorEnum.MARCUS, MyActorEnum.MADELYN };

            m_objectives = new List<MyObjective>();

            var toHangarSubmission = new MyObjective(
                (MyTextsWrapperEnum.LAIKA_GOTO_10_Name),
                MyMissionID.LAIKA_GOTO_10,
                (MyTextsWrapperEnum.LAIKA_GOTO_10_Description),
                null,
                this,
                new MyMissionID[] { },
                new MyMissionLocation(baseSector, (uint)EntityID.Objective01_Hangar)
            ) { HudName = MyTextsWrapperEnum.HudHangar };
            //{ SaveOnSuccess = true };
            toHangarSubmission.OnMissionUpdate += new MissionHandler(toHangarSubmission_OnMissionUpdate);

            //toHangarSubmission.OnMissionSuccess += ToHangarSubmissionSuccess;
            toHangarSubmission.OnMissionLoaded += ToHangarSubmissionLoaded;
            m_objectives.Add(toHangarSubmission);

            var inHangarSubmission = new MyTimedObjective(
                MyTextsWrapperEnum.Null,
                MyMissionID.LAIKA_GOTO_11,
                MyTextsWrapperEnum.Null,
                null,
                this,
                new MyMissionID[] { MyMissionID.LAIKA_GOTO_10 },
                TimeSpan.FromSeconds(0.2f),
                successDialogId: MyDialogueEnum.LAIKA_0275_INSIDEHANGAR
            ) { DisplayCounter = false };

            inHangarSubmission.OnMissionSuccess += InHangarSubmissionSuccess;
            m_objectives.Add(inHangarSubmission);

            var inHangarSubmission2 = new MyTimedObjective(
                MyTextsWrapperEnum.Null,
                MyMissionID.LAIKA_GOTO_12,
                MyTextsWrapperEnum.Null,
                null,
                this,
                new MyMissionID[] { MyMissionID.LAIKA_GOTO_11 },
                TimeSpan.FromSeconds(5)
            ) { DisplayCounter = false };
            m_objectives.Add(inHangarSubmission2);

            m_generatorSubmission = new MyObjectiveDestroy(
                (MyTextsWrapperEnum.LAIKA_GOTO_GENERATOR_Name),
                MyMissionID.LAIKA_GOTO_GENERATOR,
                (MyTextsWrapperEnum.LAIKA_GOTO_GENERATOR_Description),
                null,
                this,
                new MyMissionID[] { MyMissionID.LAIKA_GOTO_12, },
                new List<uint> { (uint)EntityID.Objective01_Generator },
                successDialogID: MyDialogueEnum.LAIKA_0300_AFTERHANGAR,
                startDialogID: MyDialogueEnum.LAIKA_0277_DESTROYGENERATOR
            ) { SaveOnSuccess = true, HudName = MyTextsWrapperEnum.HudGenerator };
            m_generatorSubmission.OnMissionSuccess += GeneratorSubmissionSuccess;
            m_generatorSubmission.OnMissionLoaded += GeneratorSubmissionLoaded;
            m_objectives.Add(m_generatorSubmission);

            m_toCommandCentreSubmission = new MyObjective(
                (MyTextsWrapperEnum.LAIKA_GOTO_COMMAND_Name),
                MyMissionID.LAIKA_GOTO_COMMAND,
                (MyTextsWrapperEnum.LAIKA_GOTO_COMMAND_Description),
                null,
                this,
                new MyMissionID[] { MyMissionID.LAIKA_GOTO_GENERATOR },
                null,
                new List<uint>() { (uint)EntityID.Objective02_CommandHub },
                successDialogId: MyDialogueEnum.LAIKA_0500_COMMAND,
                startDialogId: MyDialogueEnum.LAIKA_0350_GPS
            ) { SaveOnSuccess = true, HudName = MyTextsWrapperEnum.HudCommandCenter };
            m_toCommandCentreSubmission.OnMissionSuccess += ToCommandCentreSubmissionSuccess;
            m_toCommandCentreSubmission.OnMissionLoaded += ToCommandCentreSubmissionLoaded;
            m_objectives.Add(m_toCommandCentreSubmission);


            m_communication01Submission = new MyObjective(
                (MyTextsWrapperEnum.LAIKA_GOTO_COMMUNICATION_01_Name),
                MyMissionID.LAIKA_GOTO_COMMUNICATION_01,
                (MyTextsWrapperEnum.LAIKA_GOTO_COMMUNICATION_01_Description),
                null,
                this,
                new MyMissionID[] { MyMissionID.LAIKA_GOTO_COMMAND },
                null,
                new List<uint>() { (uint)EntityID.Objective03_Transmitter1Hub },
                successDialogId: MyDialogueEnum.LAIKA_0700_LEFTHUB
            ) { SaveOnSuccess = true, HudName = MyTextsWrapperEnum.HudCommunicationHub };
            m_communication01Submission.OnMissionSuccess += Communication01SubmissionSuccess;
            m_communication01Submission.OnMissionLoaded += Communication01SubmissionLoaded;
            m_objectives.Add(m_communication01Submission);


            m_communication02Submission = new MyObjective(
                (MyTextsWrapperEnum.LAIKA_GOTO_COMMUNICATION_02_Name),
                MyMissionID.LAIKA_GOTO_COMMUNICATION_02,
                (MyTextsWrapperEnum.LAIKA_GOTO_COMMUNICATION_02_Description),
                null,
                this,
                new MyMissionID[] { MyMissionID.LAIKA_GOTO_COMMUNICATION_01 },
                null,
                new List<uint>() { (uint)EntityID.Objective04_Transmitter2Hub },
                successDialogId: MyDialogueEnum.LAIKA_0800_RIGHTHUB,
                startDialogId: MyDialogueEnum.LAIKA_0700_LEFTHUB2
            ) { SaveOnSuccess = true, HudName = MyTextsWrapperEnum.HudCommunicationHub };
            m_communication02Submission.OnMissionSuccess += Communication02SubmissionSuccess;
            m_communication02Submission.OnMissionLoaded += Communication02SubmissionLoaded;
            m_objectives.Add(m_communication02Submission);


            m_warheadSubmission = new MyObjective(
                (MyTextsWrapperEnum.LAIKA_WARHEAD_Name),
                MyMissionID.LAIKA_WARHEAD,
                (MyTextsWrapperEnum.LAIKA_WARHEAD_Description),
                null,
                this,
                new MyMissionID[] { MyMissionID.LAIKA_GOTO_COMMUNICATION_02 },
                null,
                new List<uint>() { (uint)EntityID.Objective05_Warhead },
                successDialogId: MyDialogueEnum.LAIKA_1800_WARHEAD_DONE
            ) { SaveOnSuccess = true, HudName = MyTextsWrapperEnum.HudWarhead };
            m_warheadSubmission.OnMissionSuccess += WarheadSubmissionSuccess;
            m_warheadSubmission.OnMissionLoaded += WarheadSubmissionLoaded;
            m_objectives.Add(m_warheadSubmission);


            m_escapeSubmission = new MyObjective(
                (MyTextsWrapperEnum.LAIKA_RETURN_Name),
                MyMissionID.LAIKA_RETURN,
                (MyTextsWrapperEnum.LAIKA_RETURN_Description),
                null,
                this,
                new MyMissionID[] { MyMissionID.LAIKA_WARHEAD },
                new MyMissionLocation(baseSector, MyMissionLocation.MADELYN_HANGAR),
                radiusOverride: 1000
            ) { HudName = MyTextsWrapperEnum.HudMadelynsSapho };
            m_escapeSubmission.OnMissionLoaded += EscapeSubmissionLoaded;
            m_escapeSubmission.OnMissionSuccess += EscapeSubmissionSuccess;
            m_escapeSubmission.OnMissionUpdate += EscapeSubmissionUpdate;
            m_escapeSubmission.OnMissionCleanUp += EscapeSubmissionUnload;
            m_objectives.Add(m_escapeSubmission);
                                
            var hideSubmission = new MyTimedObjective(
                (MyTextsWrapperEnum.LAIKA_LASTSTAND_Name),
                MyMissionID.LAIKA_LASTSTAND,
                (MyTextsWrapperEnum.LAIKA_LASTSTAND_Description),
                null,
                this,
                new MyMissionID[] { MyMissionID.LAIKA_RETURN },
                TimeSpan.FromSeconds(15), true
            ) { SaveOnSuccess = false,
                DisplayCounter = false,
                HudName = MyTextsWrapperEnum.Nothing
            };
            m_objectives.Add(hideSubmission);
            hideSubmission.OnMissionLoaded += new MissionHandler(hideSubmission_OnMissionLoaded);
        }
        public MyTwinTowersMission()
        {
            ID = MyMissionID.TWIN_TOWERS; /* ID must be added to MyMissions.cs */
            Name = MyTextsWrapperEnum.TWIN_TOWERS;
            Description = MyTextsWrapperEnum.TWIN_TOWERS_Description;
            DebugName = new StringBuilder("19-Doppelburg");
            Flags = MyMissionFlags.Story;

            MyMwcVector3Int baseSector = new MyMwcVector3Int(-2809328, 0, -4609055);

            /* sector where the mission is located */
            Location = new MyMissionLocation(baseSector, (uint)EntityID.StartLocation);

            RequiredMissions = new MyMissionID[] { MyMissionID.REICHSTAG_C };
            RequiredMissionsForSuccess = new MyMissionID[] { MyMissionID.TWIN_TOWERS_MOTHERSHIP1_V2 };
            RequiredActors = new MyActorEnum[] { MyActorEnum.MADELYN, MyActorEnum.TARJA, MyActorEnum.VALENTIN  };
            MovePlayerToMadelynHangar = false;

            m_objectives = new List<MyObjective>();

            m_introTalk = new MyObjective(
                MyTextsWrapperEnum.Blank,
                MyMissionID.TWIN_TOWERS_INTRO,
                MyTextsWrapperEnum.Blank,
                null,
                this,
                new MyMissionID[] { },
                null
                ) { StartDialogId = MyDialogueEnum.TWIN_TOWERS_0100_INTRO };
            m_objectives.Add(m_introTalk);

            var multipleSabotage = new MyMultipleUseObjective(
                (MyTextsWrapperEnum.TWIN_TOWERS_SABOTAGE_Name),
                MyMissionID.TWIN_TOWERS_SABOTAGE,
                (MyTextsWrapperEnum.TWIN_TOWERS_SABOTAGE_Description),
                null,
                this,
                new MyMissionID[] { MyMissionID.TWIN_TOWERS_INTRO },
                MyTextsWrapperEnum.PressToPlaceExplosive,
                MyTextsWrapperEnum.Blank,
                MyTextsWrapperEnum.PlacingExplosives,
                1000,
                new List<uint> { (uint)EntityID.Explosives2, (uint)EntityID.Explosives3, (uint)EntityID.Explosives1 },
                MyUseObjectiveType.Putting
                ) { StartDialogId = MyDialogueEnum.TWIN_TOWERS_0200_PLACE_EXPLOSIVES };
            multipleSabotage.OnObjectUsedSucces += MultipleSabotageOnOnObjectUsedSucces;
            multipleSabotage.RequiredUncompletedMissions = new MyMissionID[] { MyMissionID.TWIN_TOWERS_RANDEVOUZ };
            multipleSabotage.Components.Add(
                new MyDetectorDialogue(
                    (uint) EntityID.Sabotage1,
                    MyDialogueEnum.TWIN_TOWERS_0300_player_reaching_the_main_electricity_supply));
            multipleSabotage.Components.Add(
                new MyDetectorDialogue(
                    (uint) EntityID.Sabotage2,
                    MyDialogueEnum.TWIN_TOWERS_0400_reaching_a_hangar_with_unmanned_enemy_small_ships));
            multipleSabotage.Components.Add(
                new MyDetectorDialogue(
                    (uint) EntityID.Sabotage3, MyDialogueEnum.TWIN_TOWERS_0500_reaching_electricity_distribution_HUB));
            m_objectives.Add(multipleSabotage);

            /*
            var sabotageSubmission04 = new MySabotageSubmission(
                new StringBuilder("Industrial section control room"),
                MyMissionID.TWIN_TOWERS_SABOTAGE04,
                new StringBuilder(""),
                null,
                this,
                new MyMissionID[] { },
                new MyMissionLocation(baseSector, (uint)EntityID.Sabotage4)
            );
            sabotageSubmission04.RequiredUncompletedMissions = new MyMissionID[] { MyMissionID.TWIN_TOWERS_RANDEVOUZ };
            sabotageSubmission04.OnMissionSuccess += Sabotage04SubmissionSuccess;
            m_objectives.Add(sabotageSubmission04);
            */
            var randevouzSubmission = new MyObjective(
                (MyTextsWrapperEnum.TWIN_TOWERS_RANDEVOUZ_Name),
                MyMissionID.TWIN_TOWERS_RANDEVOUZ,
                (MyTextsWrapperEnum.TWIN_TOWERS_RANDEVOUZ_Description),
                null,
                this,
                new MyMissionID[] { MyMissionID.TWIN_TOWERS_SABOTAGE },
                new MyMissionLocation(baseSector, (uint)EntityID.Objective_randevouz)
            )
                {
                    SaveOnSuccess = true,
                    StartDialogId = MyDialogueEnum.TWIN_TOWERS_0600_after_all_the_sabotages_are_done,
                    HudName = MyTextsWrapperEnum.HudMeetingPoint
                };
            randevouzSubmission.OnMissionLoaded += RandevouzSubmissionLoaded;
            randevouzSubmission.OnMissionSuccess += RandevouzSubmissionSuccess;
            m_objectives.Add(randevouzSubmission);

            m_assaultSubmission = new MyObjectiveDestroy(
                (MyTextsWrapperEnum.TWIN_TOWERS_ASSAULT_Name),
                MyMissionID.TWIN_TOWERS_ASSAULT,
                (MyTextsWrapperEnum.TWIN_TOWERS_ASSAULT_Description),
                null,
                this,
                new MyMissionID[] { MyMissionID.TWIN_TOWERS_RANDEVOUZ },
                null,
                new List<uint> { (uint) EntityID.Spawnpoint_Command }
                )
                {
                    SaveOnSuccess = true,
                    StartDialogId = MyDialogueEnum.TWIN_TOWERS_0700_Meeting_point,
                    SuccessDialogId = MyDialogueEnum.TWIN_TOWERS_0800_command_center_cleared
                };
            m_assaultSubmission.OnMissionSuccess += AssaultSubmissionSuccess;
            m_assaultSubmission.OnMissionLoaded += AssaultSubmissionLoaded;
            m_objectives.Add(m_assaultSubmission);

            m_hackerSubmission = new MyTimedObjective(
                (MyTextsWrapperEnum.TWIN_TOWERS_HACKING_Name),
                MyMissionID.TWIN_TOWERS_HACKING,
                (MyTextsWrapperEnum.TWIN_TOWERS_HACKING_Description),
                null,
                this,
                new MyMissionID[] { MyMissionID.TWIN_TOWERS_ASSAULT },
                new TimeSpan(0, 3, 0),
                false
                )
                {
                    SaveOnSuccess = true,
                    StartDialogId = MyDialogueEnum.TWIN_TOWERS_0900_hacker_reaches_computer,
                    SuccessDialogId = MyDialogueEnum.TWIN_TOWERS_1100_hacking_gets_jammed,
                    HudName = MyTextsWrapperEnum.HudHacker
                };
            m_hackerSubmission.OnMissionSuccess += HackerSubmissionSuccess;
            m_hackerSubmission.OnMissionLoaded += HackerSubmissionLoaded;
            m_hackerSubmission.NotificationText = MyTextsWrapperEnum.CountdownHacker;
            m_hackerSubmission.Components.Add(new MyTimedDialogue(TimeSpan.FromSeconds(90), MyDialogueEnum.TWIN_TOWERS_1000_through_the_fight));
            m_objectives.Add(m_hackerSubmission);

            m_jammerSubmission = new MyObjectiveDestroy(
                (MyTextsWrapperEnum.TWIN_TOWERS_JAMMER_Name),
                MyMissionID.TWIN_TOWERS_JAMMER,
                (MyTextsWrapperEnum.TWIN_TOWERS_JAMMER_Description),
                null,
                this,
                new MyMissionID[] { MyMissionID.TWIN_TOWERS_HACKING },
                null,
                new List<uint> { (uint) EntityID.Spawnpoint_Jammer }
                )
                {
                    SaveOnSuccess = true,
                    SuccessDialogId = MyDialogueEnum.TWIN_TOWERS_1200_killing_jammer,
                    HudName = MyTextsWrapperEnum.HudJammer
                };
            m_jammerSubmission.OnMissionSuccess += JammerSubmissionSuccess;
            m_jammerSubmission.OnMissionLoaded += JammerSubmissionLoaded;
            m_objectives.Add(m_jammerSubmission);

            m_hackerSubmission2 = new MyTimedObjective(
                (MyTextsWrapperEnum.TWIN_TOWERS_HACKING_CONTINUE_Name),
                MyMissionID.TWIN_TOWERS_HACKING_CONTINUE,
                (MyTextsWrapperEnum.TWIN_TOWERS_HACKING_CONTINUE_Description),
                null,
                this,
                new MyMissionID[] { MyMissionID.TWIN_TOWERS_JAMMER },
                new TimeSpan(0, 1, 7)
                )
                {
                    SaveOnSuccess = true,
                    SuccessDialogId = MyDialogueEnum.TWIN_TOWERS_1300_hacking_done,
                    HudName = MyTextsWrapperEnum.HudHacker
                };
            m_hackerSubmission2.OnMissionSuccess += Hacker2SubmissionSuccess;
            m_hackerSubmission2.OnMissionLoaded += Hacker2SubmissionLoaded;
            m_hackerSubmission2.NotificationText = MyTextsWrapperEnum.CountdownHacker;
            m_objectives.Add(m_hackerSubmission2);

            var railgun01Submission = new MyObjectiveDestroy(
                (MyTextsWrapperEnum.TWIN_TOWERS_RAILGUN1_Name),
                MyMissionID.TWIN_TOWERS_RAILGUN1,
                (MyTextsWrapperEnum.TWIN_TOWERS_RAILGUN1_Description),
                null,
                this,
                new MyMissionID[] { MyMissionID.TWIN_TOWERS_HACKING_CONTINUE },
                new List<uint>
                    { (uint) EntityID.Objective_Railgun1_Controls_01, (uint) EntityID.Objective_Railgun1_Controls_02 }
                )
                {
                    SuccessDialogId = MyDialogueEnum.TWIN_TOWERS_1400_clearing_first_control_room
                };
            railgun01Submission.OnMissionSuccess += Railgun01SubmissionSuccess;
            m_objectives.Add(railgun01Submission);

            var railgun02Submission = new MyObjectiveDestroy(
                (MyTextsWrapperEnum.TWIN_TOWERS_RAILGUN2_Name),
                MyMissionID.TWIN_TOWERS_RAILGUN2,
                (MyTextsWrapperEnum.TWIN_TOWERS_RAILGUN2_Description),
                null,
                this,
                new MyMissionID[] { MyMissionID.TWIN_TOWERS_RAILGUN1 },
                new List<uint>
                    {
                        (uint) EntityID.Objective_Railgun2_Controls_01,
                        (uint) EntityID.Objective_Railgun2_Controls_02,
                        (uint) EntityID.Objective_Railgun2_Controls_03,
                        (uint) EntityID.Objective_Railgun2_Controls_04
                    }
                )
                {
                    SaveOnSuccess = true
                };
            railgun02Submission.OnMissionLoaded += Railgun02SubmissionLoaded;
            railgun02Submission.OnMissionSuccess += Railgun02SubmissionSuccess;
            m_objectives.Add(railgun02Submission);

            var rightBaseGoToSubmission = new MyObjective(
                (MyTextsWrapperEnum.TWIN_TOWERS_GOTO_RIGHT_Name),
                MyMissionID.TWIN_TOWERS_GOTO_RIGHT,
                (MyTextsWrapperEnum.TWIN_TOWERS_GOTO_RIGHT_Description),
                null,
                this,
                new MyMissionID[] { MyMissionID.TWIN_TOWERS_RAILGUN2 },
                new MyMissionLocation(baseSector, (uint) EntityID.Objective_RightBase)
                )
                {
                    StartDialogId = MyDialogueEnum.TWIN_TOWERS_1500_clearing_second_control_room,
                    HudName = MyTextsWrapperEnum.HudTowerB
                };
            rightBaseGoToSubmission.OnMissionSuccess += RightBaseGoToSubmissionSuccess;
            m_objectives.Add(rightBaseGoToSubmission);

            var rightBaseGeneratorSubmission = new MyObjectiveDestroy(
                (MyTextsWrapperEnum.TWIN_TOWERS_GENERATOR_Name),
                MyMissionID.TWIN_TOWERS_GENERATOR,
                (MyTextsWrapperEnum.TWIN_TOWERS_GENERATOR_Description),
                null,
                this,
                new MyMissionID[] { MyMissionID.TWIN_TOWERS_GOTO_RIGHT },
                new List<uint> { (uint) EntityID.Objective_Generator_Pipe1, (uint) EntityID.Objective_Generator_Pipe2 }
                )
                {
                    StartDialogId = MyDialogueEnum.TWIN_TOWERS_1600_in_tower_B,
                    HudName = MyTextsWrapperEnum.HudGenerator
                };
            rightBaseGeneratorSubmission.SaveOnSuccess = true;
            rightBaseGeneratorSubmission.OnMissionLoaded += RightBaseGeneratorSubmissionLoaded;
            rightBaseGeneratorSubmission.OnMissionSuccess += RightBaseGeneratorSubmissionSuccess;
            m_objectives.Add(rightBaseGeneratorSubmission);

            m_rightBaseCommandSubmission = new MyObjective(
                (MyTextsWrapperEnum.TWIN_TOWERS_COMMAND_Name),
                MyMissionID.TWIN_TOWERS_COMMAND,
                (MyTextsWrapperEnum.TWIN_TOWERS_COMMAND_Description),
                null,
                this,
                new MyMissionID[] { MyMissionID.TWIN_TOWERS_GENERATOR },
                null,
                new List<uint> { (uint) EntityID.Objective_Command_HUB }
                )
                {
                    StartDialogId = MyDialogueEnum.TWIN_TOWERS_1700_reactor_shut_down,
                    SuccessDialogId = MyDialogueEnum.TWIN_TOWERS_1800_computer_hacked,
                    HudName = MyTextsWrapperEnum.HudCommandCenter
                };
            m_rightBaseCommandSubmission.OnMissionLoaded += RightBaseCommandSubmissionLoaded;
            m_rightBaseCommandSubmission.OnMissionSuccess += RightBaseCommandSubmissionSuccess;
            m_objectives.Add(m_rightBaseCommandSubmission);

            m_waitSubmission = new MyObjective(
                (MyTextsWrapperEnum.TWIN_TOWERS_WAIT_Name),
                MyMissionID.TWIN_TOWERS_WAIT,
                (MyTextsWrapperEnum.TWIN_TOWERS_WAIT_Description),
                null,
                this,
                new MyMissionID[] { MyMissionID.TWIN_TOWERS_COMMAND },
                null
                )
                {
                    SuccessDialogId = MyDialogueEnum.TWIN_TOWERS_1900_motherships_arrived
                };
            m_waitSubmission.SaveOnSuccess = true;
            m_waitSubmission.OnMissionLoaded += WaitSubmissionLoaded;
            m_waitSubmission.OnMissionSuccess += WaitSubmissionSuccess;
            m_objectives.Add(m_waitSubmission);

            m_mothership1Submission = new MyObjectiveDestroy(
                (MyTextsWrapperEnum.TWIN_TOWERS_MOTHERSHIP1_Name),
                MyMissionID.TWIN_TOWERS_MOTHERSHIP1,
                (MyTextsWrapperEnum.TWIN_TOWERS_MOTHERSHIP1_Description),
                null,
                this,
                new MyMissionID[] { MyMissionID.TWIN_TOWERS_WAIT },
                new List<uint> { (uint)EntityID.Objective_Zeppelin1_Generator }
                )
                {
                    HudName = MyTextsWrapperEnum.HudGenerator
                };
            m_mothership1Submission.SaveOnSuccess = true;
            m_mothership1Submission.Components.Add(new MySpawnpointWaves((uint)EntityID.Detector_Zeppelin_WW1_Hounds, 0, (uint)EntityID.Spawnpoint_Zeppelin_WW1_03_Hounds));
            m_mothership1Submission.OnMissionLoaded += Mothership1SubmissionLoaded;
            m_mothership1Submission.OnMissionSuccess += Mothership1SubmissionSuccess;
            m_mothership1Submission.Components.Add(new MySpawnpointLimiter(m_WWZeppelinSpawns, 10));
            m_objectives.Add(m_mothership1Submission);

            m_mothership1Submission2 = new MyObjectiveDestroy(
                (MyTextsWrapperEnum.TWIN_TOWERS_MOTHERSHIP1_V2_Name),
                MyMissionID.TWIN_TOWERS_MOTHERSHIP1_V2,
                (MyTextsWrapperEnum.TWIN_TOWERS_MOTHERSHIP1_V2_Description),
                null,
                this,
                new MyMissionID[] { MyMissionID.TWIN_TOWERS_MOTHERSHIP1 },
                new List<uint>
                    { (uint) EntityID.Objective_Zeppelin1_Battery1, (uint) EntityID.Objective_Zeppelin1_Battery2 }
                )
                {
                    StartDialogId = MyDialogueEnum.TWIN_TOWERS_2000_destroying_the_generator,
                    SuccessDialogId = MyDialogueEnum.TWIN_TOWERS_2100_destroying_batteries,
                    HudName = MyTextsWrapperEnum.HudBatteries
                };
            m_mothership1Submission2.Components.Add(new MySpawnpointWaves((uint)EntityID.Detector_Zeppelin_WW1_Hounds, 0, (uint)EntityID.Spawnpoint_Zeppelin_WW1_03_Hounds));
            m_mothership1Submission2.OnMissionLoaded += Mothership1Submission2Loaded;
            m_mothership1Submission2.OnMissionSuccess += Mothership1Submission2Success;
            m_mothership1Submission2.Components.Add(new MySpawnpointLimiter(m_WWZeppelinSpawns, 10));
            m_objectives.Add(m_mothership1Submission2);
            /*
            var mothership2Submission = new MyObjective(
                new StringBuilder("Destroy the second mothership"),
                MyMissionID.TWIN_TOWERS_MOTHERSHIP2,
                new StringBuilder(""),
                null,
                this,
                new MyMissionID[] { MyMissionID.TWIN_TOWERS_MOTHERSHIP1_V2 },
                new MyMissionLocation(baseSector, (uint)EntityID.Objective_Zeppelin2_Command)
            );
            mothership2Submission.OnMissionLoaded += Mothership2SubmissionLoaded;
            mothership2Submission.OnMissionSuccess += Mothership2SubmissionSuccess;
            m_objectives.Add(mothership2Submission);
            */  /*
            var returnSubmission = new MyObjective(
                new StringBuilder("Return to Madelyn"),
                MyMissionID.TWIN_TOWERS_GOTO_MADELYN,
                new StringBuilder(""),
                null,
                this,
                new MyMissionID[] { MyMissionID.TWIN_TOWERS_MOTHERSHIP1_V2 },
                new MyMissionLocation(baseSector, MyMissionLocation.MADELYN_HANGAR)
            );
            m_objectives.Add(returnSubmission);*/
        }
        public MyPirateBaseMission()
        {
            ID = MyMissionID.PIRATE_BASE; /* ID must be added to MyMissions.cs */
            DebugName = new StringBuilder("04-Pirate base");
            Name = MyTextsWrapperEnum.PIRATE_BASE;
            Description = MyTextsWrapperEnum.PIRATE_BASE_Description;
            Flags = MyMissionFlags.Story;
            
            MyMwcVector3Int baseSector = new MyMwcVector3Int(190921, 0, 2152692);

            /* sector where the mission is located */
            Location = new MyMissionLocation(baseSector, 228782);

            RequiredMissions = new MyMissionID[] { MyMissionID.BARTHS_MOON_CONVINCE };
            RequiredMissionsForSuccess = new MyMissionID[] { MyMissionID.PIRATE_BASE_ALLY_ARRIVED };
            RequiredActors = new MyActorEnum[] { MyActorEnum.MARCUS, MyActorEnum.MADELYN };

            m_objectives = new List<MyObjective>();

            // == Objective 01 ==
            var travel = new MyObjective(
                (MyTextsWrapperEnum.PIRATE_BASE_TRAVEL_TO_BASE_Name),
                MyMissionID.PIRATE_BASE_TRAVEL_TO_BASE,
                (MyTextsWrapperEnum.PIRATE_BASE_TRAVEL_TO_BASE_Description),
                null,
                this,
                new MyMissionID[] {  },
                new MyMissionLocation(baseSector, (uint)EntityID.FIND_PIRATE_BASE_LOCATION)
            ) { SaveOnSuccess = true, HudName = MyTextsWrapperEnum.Nothing };

            travel.Components.Add(new MySpawnpointWaves((uint)EntityID.AMBUSH_1_DETECTOR, 0,
                new List<uint[]> { new uint[] { (uint)EntityID.AMBUSH_1_SPAWNPOINT_A }, new uint[] { (uint)EntityID.AMBUSH_1_SPAWNPOINT_B } }));

            travel.Components.Add(new MySpawnpointWaves((uint)EntityID.AMBUSH_2_DETECTOR, 0,
                new List<uint[]> { new uint[] { (uint)EntityID.AMBUSH_2_SPAWNPOINT_A }, new uint[] { (uint)EntityID.AMBUSH_2_SPAWNPOINT_B } }));

            travel.Components.Add(new MySpawnpointWaves((uint)EntityID.AMBUSH_3_DETECTOR, 0,
                new List<uint[]> { new uint[] { (uint)EntityID.AMBUSH_3_SPAWNPOINT_A }, new uint[] { (uint)EntityID.AMBUSH_3_SPAWNPOINT_B } }));

            travel.Components.Add(new MySpawnpointWaves((uint)EntityID.AMBUSH_4_DETECTOR, 0,
                new List<uint[]> { new uint[] { (uint)EntityID.AMBUSH_4_SPAWNPOINT_A }, new uint[] { (uint)EntityID.AMBUSH_4_SPAWNPOINT_B } }));

            travel.Components.Add(new MySpawnpointWaves((uint)EntityID.AMBUSH_5_DETECTOR, 0,
                new List<uint[]> { new uint[] { (uint)EntityID.AMBUSH_5_SPAWNPOINT_A }, new uint[] { (uint)EntityID.AMBUSH_5_SPAWNPOINT_B } }));

            travel.Components.Add(new MySpawnpointWaves((uint)EntityID.AMBUSH_6_DETECTOR, 0,
                new List<uint[]> { new uint[] { (uint)EntityID.AMBUSH_6_SPAWNPOINT_A }, new uint[] { (uint)EntityID.AMBUSH_6_SPAWNPOINT_B } }));

            //travel.OnMissionSuccess += ArrivedToBase;
            travel.OnMissionLoaded += Travel_OnMissionLoaded;
            travel.OnMissionCleanUp += Travel_OnMissionUnload;
            m_objectives.Add(travel);

            // == Objective 02 ==
            var speakWithPirates = new MyMeetObjective(
                (MyTextsWrapperEnum.PIRATE_BASE_SPEAK_WITH_PIRATES_Name),
                MyMissionID.PIRATE_BASE_SPEAK_WITH_PIRATES,
                (MyTextsWrapperEnum.PIRATE_BASE_SPEAK_WITH_PIRATES_Description),
                this,
                new MyMissionID[] { MyMissionID.PIRATE_BASE_TRAVEL_TO_BASE },
                null, (uint)EntityID.PIRATE_LEADER, 300) { SaveOnSuccess = true, HudName = MyTextsWrapperEnum.HudPirateCaptain };
            speakWithPirates.OnMissionLoaded += SpeakWithPirates_OnMissionLoaded;
            m_objectives.Add(speakWithPirates);

            // == Objective 03 ==
            var listenToCaptain = new MyObjectiveDialog(
                MyMissionID.PIRATE_BASE_LISTEN_TO_CAPTAIN,
                null,
                this,
                new MyMissionID[] { MyMissionID.PIRATE_BASE_SPEAK_WITH_PIRATES },
                MyDialogueEnum.PIRATE_BASE_0600);
            listenToCaptain.OnMissionLoaded += ListenToCaptain_OnMissionLoaded;
            listenToCaptain.OnMissionCleanUp += ListenToCaptain_OnMissionUnload;
            m_objectives.Add(listenToCaptain);

            // == Objective 04 ==
            var prepareForDefense = new MyObjective(
                (MyTextsWrapperEnum.PIRATE_BASE_PREPARE_FOR_DEFENSE_Name),
                MyMissionID.PIRATE_BASE_PREPARE_FOR_DEFENSE,
                (MyTextsWrapperEnum.PIRATE_BASE_PREPARE_FOR_DEFENSE_Description),
                null,
                this,
                new MyMissionID[] { MyMissionID.PIRATE_BASE_LISTEN_TO_CAPTAIN },
                new MyMissionLocation(baseSector, (uint)EntityID.PREPARE_FOR_DEFENSE_LOCATION),
                startDialogId: MyDialogueEnum.PIRATE_BASE_0800) { SaveOnSuccess = true };
            prepareForDefense.Components.Add(new MySpawnpointWaves((uint)EntityID.PREPARE_DETECTOR, 0, new List<uint[]> { new uint[] { (uint)EntityID.PREPARE_SPAWNPOINT0, (uint)EntityID.PREPARE_SPAWNPOINT1, (uint)EntityID.PREPARE_SPAWNPOINT2 } }));
            prepareForDefense.OnMissionLoaded += PrepareForDefense_OnMissionLoaded;
            m_objectives.Add(prepareForDefense);

            // == Objective 05 ==
            m_getTurrets = new MyUseObjective(
                (MyTextsWrapperEnum.PIRATE_BASE_GET_TURRETS_Name),
                MyMissionID.PIRATE_BASE_GET_TURRETS,
                (MyTextsWrapperEnum.PIRATE_BASE_GET_TURRETS_Description),
                null,
                this,
                new MyMissionID[] { MyMissionID.PIRATE_BASE_PREPARE_FOR_DEFENSE },
                new MyMissionLocation(baseSector, (uint)EntityID.TURRET_PREFABS_DUMMY),
                MyTextsWrapperEnum.PressToTakeTurrets,
                MyTextsWrapperEnum.Turrets,
                MyTextsWrapperEnum.TransferInProgress,
                3000,
                objectiveType: MyUseObjectiveType.Taking) { SaveOnSuccess = true };
            m_getTurrets.OnMissionLoaded += GetTurrets_OnMissionLoaded;
            m_getTurrets.OnMissionSuccess += GetTurrets_OnMissionSuccess;
            m_objectives.Add(m_getTurrets);

            // == Objective 06 ==
            m_buildDefensesObjective = new MyTimedObjective(
                (MyTextsWrapperEnum.PIRATE_BASE_DEFENSE_SETUP_Name),
                MyMissionID.PIRATE_BASE_DEFENSE_SETUP,
                (MyTextsWrapperEnum.PIRATE_BASE_DEFENSE_SETUP_Description),
                null,
                this,
                new MyMissionID[] { MyMissionID.PIRATE_BASE_GET_TURRETS },
                new TimeSpan(0, 0, minutes: 5, seconds: 0)
                ) { SaveOnSuccess = true };
            
            m_buildDefensesObjective.OnMissionLoaded += BuildDefenses_OnMissionLoaded;
            m_buildDefensesObjective.OnMissionUpdate += BuildDefenses_OnMissionUpdate;
            m_buildDefensesObjective.OnMissionCleanUp += BuildDefenses_OnMissionUnloaded;
            m_buildDefensesObjective.OnMissionSuccess += BuildDefenses_OnMissionSuccess;
            m_objectives.Add(m_buildDefensesObjective);

            // == Objective 07 ==
            m_defendObjective = new MyTimedObjective(
                (MyTextsWrapperEnum.PIRATE_BASE_DEFEND_Name),
                MyMissionID.PIRATE_BASE_DEFEND,
                (MyTextsWrapperEnum.PIRATE_BASE_DEFEND_Description),
                null,
                this,
                new MyMissionID[] { MyMissionID.PIRATE_BASE_DEFENSE_SETUP },
                new TimeSpan(0, 0, minutes: 5, seconds: 0),
                startDialogId: MyDialogueEnum.PIRATE_BASE_0900
                ) { SaveOnSuccess = true, HudName = MyTextsWrapperEnum.HudGenerator };
            
            m_defendObjective.OnMissionLoaded += Defend_OnMissionLoaded;
            m_defendObjective.OnMissionCleanUp += Defend_OnMissionUnloaded;
            m_defendObjective.OnMissionUpdate += Defend_OnMissionUpdate;
            m_defendObjective.OnMissionSuccess += Defend_OnMissionSuccess;

            m_defendObjective.Components.Add(new MyHeadshake((3*60)*1000, MyHeadshake.DefaultShaking));
            m_defendObjective.Components.Add(new MyHeadshake((6*60)*1000, MyHeadshake.DefaultShaking));
            m_defendObjective.Components.Add(new MyHeadshake((9*60)*1000, MyHeadshake.DefaultShaking));

            m_objectives.Add(m_defendObjective);

            // == Objective 08 ==
            m_allyArrivedObjective = new MyObjective(
                (MyTextsWrapperEnum.PIRATE_BASE_ALLY_ARRIVED_Name),
                MyMissionID.PIRATE_BASE_ALLY_ARRIVED,
                (MyTextsWrapperEnum.PIRATE_BASE_ALLY_ARRIVED_Description),
                null,
                this,
                new MyMissionID[] { MyMissionID.PIRATE_BASE_DEFEND },
                null,
                startDialogId: MyDialogueEnum.PIRATE_BASE_1100) { SaveOnSuccess = true };
            m_allyArrivedObjective.OnMissionLoaded += AllyArrived_OnMissionLoaded;
            m_allyArrivedObjective.OnMissionCleanUp += AllyArrived_OnMissionUnload;
            m_allyArrivedObjective.OnMissionUpdate += AllyArrived_OnMissionUpdate;
            m_allyArrivedObjective.OnMissionSuccess += AllyArrived_OnMissionSuccess;
            m_objectives.Add(m_allyArrivedObjective);

            /*
            var returnBackToMotherShip = new MyObjective(
                new StringBuilder("Return to your mothership"),
                MyMissionID.PIRATE_BASE_RETURN_BACK_TO_MOTHERSHIP,
                new StringBuilder(""),
                null,
                this,
                new MyMissionID[] { MyMissionID.PIRATE_BASE_ALLY_ARRIVED },
                new MyMissionLocation(baseSector, (uint)EntityID.MADELYN_DUMMY)
            ) { SaveOnSuccess = true };
            m_objectives.Add(returnBackToMotherShip);
             */
        }
        //private MySubmisisonDefend m_defendGenerator;

        #endregion

        public MySlaverBaseMission()
        {
            m_ValidateIDlists = new List<List<uint>>();
            m_ValidateIDlists.Add(m_closeddoors);
            m_ValidateIDlists.Add(m_finalparticle);
            m_ValidateIDlists.Add(m_openedddoors);
            m_ValidateIDlists.Add(m_standbyparticle);
            m_ValidateIDlists.Add(m_pilotsSpawn);
            m_ValidateIDlists.Add(m_closeentiites);
            ID = MyMissionID.SLAVER_BASE_1; /* ID must be added to MyMissions.cs */
            Name = MyTextsWrapperEnum.SLAVER_BASE_GRAND_BURROW;
            Description = MyTextsWrapperEnum.SLAVER_BASE_GRAND_BURROW_Description;
            DebugName = new StringBuilder("09b-Slaver base Grand Burrow"); // Nazev mise

            Flags = MyMissionFlags.Story;

            MyMwcVector3Int baseSector = new MyMwcVector3Int(2052452, 0, -10533886); // Story sector of the script

            Location = new MyMissionLocation(baseSector, (uint)EntityID.StartLocation); // Starting dummy point

            RequiredMissions = new MyMissionID[] { MyMissionID.FORT_VALIANT }; // mise ktere musi byt splneny pred prijetim teto mise
            RequiredMissionsForSuccess = new MyMissionID[] { MyMissionID.SLAVER_BASE_1_DIALOG_10 };
            RequiredActors = new MyActorEnum[] { MyActorEnum.MARCUS, MyActorEnum.MADELYN, MyActorEnum.TARJA, MyActorEnum.VALENTIN };

            m_objectives = new List<MyObjective>(); // Creating of list of submissions


            // -------------- START DEFINICE SUBMISE ---------------------

            var talkWith = new MyObjectiveDialog(
                (MyTextsWrapperEnum.SLAVER_BASE_1_DIALOG_1_Name),
                MyMissionID.SLAVER_BASE_1_DIALOG_1,
                (MyTextsWrapperEnum.SLAVER_BASE_1_DIALOG_1_Description),
                null,
                this,
                new MyMissionID[] { },
                dialogId: MyDialogueEnum.SLAVERBASE_0100_INTRODUCE
                ) { SaveOnSuccess = false };
            m_objectives.Add(talkWith);


            var DestroyGenerators = new MyObjectiveDestroy(
                // Var is used to call functions on that member
                (MyTextsWrapperEnum.SLAVER_BASE_1_DESTROY_GENERATOR_Name),
                MyMissionID.SLAVER_BASE_1_DESTROY_GENERATOR,
                (MyTextsWrapperEnum.SLAVER_BASE_1_DESTROY_GENERATOR_Description),
                null,
                this,
                new MyMissionID[] { MyMissionID.SLAVER_BASE_1_DIALOG_1 },
                Generators,
                false
                ) { SaveOnSuccess = false, HudName = MyTextsWrapperEnum.HudGenerator };
            m_objectives.Add(DestroyGenerators); // pridani do seznamu submisi
            DestroyGenerators.OnMissionSuccess += DestroyGeneratorMSSuccess;


            var talkWith2 = new MyObjectiveDialog(
                (MyTextsWrapperEnum.SLAVER_BASE_1_DIALOG_2_Name),
                MyMissionID.SLAVER_BASE_1_DIALOG_2,
                (MyTextsWrapperEnum.SLAVER_BASE_1_DIALOG_2_Description),
                null,
                this,
                new MyMissionID[] { MyMissionID.SLAVER_BASE_1_DESTROY_GENERATOR },
                dialogId: MyDialogueEnum.SLAVERBASE_0200_GENERATORS_DESTROYED
                ) { SaveOnSuccess = false };
            m_objectives.Add(talkWith2);


            var DestroyBatteries = new MyObjectiveDestroy(
                // Var is used to call functions on that member

                (MyTextsWrapperEnum.SLAVER_BASE_1_DESTROY_BATTERIES_Name),
                MyMissionID.SLAVER_BASE_1_DESTROY_BATTERIES,
                (MyTextsWrapperEnum.SLAVER_BASE_1_DESTROY_BATTERIES_Description),
                null,
                this,
                new MyMissionID[] { MyMissionID.SLAVER_BASE_1_DIALOG_2 },
                Batteries,
                false
                ) { SaveOnSuccess = true, HudName = MyTextsWrapperEnum.HudBatteries };
            m_objectives.Add(DestroyBatteries); // pridani do seznamu submisi
            DestroyBatteries.OnMissionSuccess += DestroyBatteriesMSSuccess;


            var FindPrison = new MyObjective( // One member of that list - je to MyObjective takze cilem je doletet do checkpointu
                (MyTextsWrapperEnum.SLAVER_BASE_1_FIND_PRISON_Name), // nazev submise
                MyMissionID.SLAVER_BASE_1_FIND_PRISON, // id submise
                (MyTextsWrapperEnum.SLAVER_BASE_1_FIND_PRISON_Description), // popis submise
                null,
                this,
                new MyMissionID[] { MyMissionID.SLAVER_BASE_1_DESTROY_BATTERIES }, // ID submisi ktere musi byt splneny - je to prazdne takze je to prvni submise
                new MyMissionLocation(baseSector, (uint)EntityID.Prison_Dummy),
                startDialogId: MyDialogueEnum.SLAVERBASE_0300_BATTERIES_DESTROYED// ID of dummy point of checkpoint
                ) { SaveOnSuccess = false, HudName = MyTextsWrapperEnum.HudPrison }; // nastaveni save na checkpointu nebo ne
            m_objectives.Add(FindPrison); // pridani do seznamu submisi
            FindPrison.OnMissionSuccess += FindPrisonMSSuccess;


            m_freeSlaves = new MyObjectiveDestroy(
                // Var is used to call functions on that member
                (MyTextsWrapperEnum.SLAVER_BASE_1_FREE_SLAVES_Name),
                MyMissionID.SLAVER_BASE_1_FREE_SLAVES,
                (MyTextsWrapperEnum.SLAVER_BASE_1_FREE_SLAVES_Description),
                null,
                this,
                new MyMissionID[] { MyMissionID.SLAVER_BASE_1_FIND_PRISON },
                m_Bars,
                false
                ) { SaveOnSuccess = false, HudName = MyTextsWrapperEnum.HudCage };
            m_objectives.Add(m_freeSlaves); // pridani do seznamu submisi


            var talkWith4 = new MyObjectiveDialog(
                MyMissionID.SLAVER_BASE_1_DIALOG_4,
                null,
                this,
                new MyMissionID[] { MyMissionID.SLAVER_BASE_1_FREE_SLAVES },
                dialogId: MyDialogueEnum.SLAVERBASE_0400_SLAVES_SAVED
                ) { SaveOnSuccess = true };
            m_objectives.Add(talkWith4);


            m_hackHangar = new MyObjectiveEnablePrefabs(
                (MyTextsWrapperEnum.SLAVER_BASE_1_HACK_HANGAR_Name),
                MyMissionID.SLAVER_BASE_1_HACK_HANGAR,
                (MyTextsWrapperEnum.SLAVER_BASE_1_HACK_HANGAR_Description),
                null,
                this,
                new MyMissionID[] { MyMissionID.SLAVER_BASE_1_DIALOG_4 },
                null,
                new List<uint> { (uint)EntityID.Hack_PC },
                new List<uint> { (uint)EntityID.Hangar_Doors }
                ) { HudName = MyTextsWrapperEnum.HudHub };
            m_objectives.Add(m_hackHangar);
            m_hackHangar.OnMissionSuccess += HangarOpen;

            m_freeSlavesMS = new MyObjectiveDestroy( // Var is used to call functions on that member
               (MyTextsWrapperEnum.SLAVER_BASE_1_FREE_SLAVES_2_Name),
               MyMissionID.SLAVER_BASE_1_FREE_SLAVES_2,
               (MyTextsWrapperEnum.SLAVER_BASE_1_FREE_SLAVES_2_Description),
               null,
               this,
               new MyMissionID[] { MyMissionID.SLAVER_BASE_1_HACK_HANGAR },
               Mothership_Bars,
               false
           ) { SaveOnSuccess = false, ToDestroyCount = 1, HudName = MyTextsWrapperEnum.HudCage };
            m_objectives.Add(m_freeSlavesMS); // pridani do seznamu submisi


            var talkWith6 = new MyObjectiveDialog(
                (MyTextsWrapperEnum.SLAVER_BASE_1_DIALOG_6_Name),
                MyMissionID.SLAVER_BASE_1_DIALOG_6,
                (MyTextsWrapperEnum.SLAVER_BASE_1_DIALOG_6_Description),
                null,
                this,
                new MyMissionID[] { MyMissionID.SLAVER_BASE_1_FREE_SLAVES_2, },
                dialogId: MyDialogueEnum.SLAVERBASE_0600_MOTHERSHIP_EMPTY
                ) { SaveOnSuccess = false };
            m_objectives.Add(talkWith6);


            var findSlaves = new MyObjectiveDestroy(
                // Var is used to call functions on that member
                (MyTextsWrapperEnum.SLAVER_BASE_1_FIND_SLAVES_Name),
                MyMissionID.SLAVER_BASE_1_FIND_SLAVES,
                (MyTextsWrapperEnum.SLAVER_BASE_1_FIND_SLAVES_Description),
                null,
                this,
                new MyMissionID[] { MyMissionID.SLAVER_BASE_1_DIALOG_6 },
                bar_pit,
                // ID of dummy point of checkpoint
                false
                ) { SaveOnSuccess = true, HudName = MyTextsWrapperEnum.HudCage };
            findSlaves.MissionEntityIDs.Add((uint)EntityID.Bar_pit);
            m_objectives.Add(findSlaves); // pridani do seznamu submisi


            var talkWith7 = new MyObjectiveDialog(
                (MyTextsWrapperEnum.SLAVER_BASE_1_DIALOG_7_Name),
                MyMissionID.SLAVER_BASE_1_DIALOG_7,
                (MyTextsWrapperEnum.SLAVER_BASE_1_DIALOG_7_Description),
                null,
                this,
                new MyMissionID[] { MyMissionID.SLAVER_BASE_1_FIND_SLAVES, },
                dialogId: MyDialogueEnum.SLAVERBASE_0700_PIT_EMPTY
                ) { SaveOnSuccess = false };
            m_objectives.Add(talkWith7);
            talkWith7.OnMissionLoaded += FreePilotsMSSuccess;


            var destroyEnemies = new MyDestroyWavesObjective(
                // Var is used to call functions on that member
                (MyTextsWrapperEnum.SLAVER_BASE_1_DESTROY_ENEMIES_Name),
                MyMissionID.SLAVER_BASE_1_DESTROY_ENEMIES,
                (MyTextsWrapperEnum.SLAVER_BASE_1_DESTROY_ENEMIES_Description),
                null,
                this,
                new[] { MyMissionID.SLAVER_BASE_1_DIALOG_7 }
                //new List<uint>
                //    {
                //        (uint) EntityID.Mothership_Spawn_1,
                //        (uint) EntityID.Mothership_Spawn_2,
                //        (uint) EntityID.Mothership_Spawn_3
                //    },
                ) { SaveOnSuccess = false };
            destroyEnemies.AddWave(new List<uint> { (uint)EntityID.Mothership_Spawn_1 });
            destroyEnemies.AddWave(new List<uint> { (uint)EntityID.Mothership_Spawn_2 });
            destroyEnemies.AddWave(new List<uint> { (uint)EntityID.Mothership_Spawn_3 });
            destroyEnemies.OnMissionSuccess += EnemiesDestroyed;
            m_objectives.Add(destroyEnemies); // pridani do seznamu submisi

            var talkWith9 = new MyObjectiveDialog(
                (MyTextsWrapperEnum.SLAVER_BASE_1_DIALOG_9_Name),
                MyMissionID.SLAVER_BASE_1_DIALOG_9,
                (MyTextsWrapperEnum.SLAVER_BASE_1_DIALOG_9_Description),
                null,
                this,
                new MyMissionID[] { MyMissionID.SLAVER_BASE_1_DESTROY_ENEMIES },
                dialogId: MyDialogueEnum.SLAVERBASE_0800_ENEMIES_DESTROYED
                ) { SaveOnSuccess = false };
            m_objectives.Add(talkWith9);


            m_openHangarDoors = new MyObjectiveEnablePrefabs(
                (MyTextsWrapperEnum.SLAVER_BASE_1_HACK_NUKE_Name),
                MyMissionID.SLAVER_BASE_1_HACK_NUKE,
                (MyTextsWrapperEnum.SLAVER_BASE_1_HACK_NUKE_Description),
                null,
                this,
                new MyMissionID[] { MyMissionID.SLAVER_BASE_1_DIALOG_9 },
                null,
                new List<uint> { (uint)EntityID.HangarDoorsHub },
                new List<uint> { (uint)EntityID.Cargo_Bay_Doors }
                ) { HudName = MyTextsWrapperEnum.HudHub };
            m_objectives.Add(m_openHangarDoors);
            m_openHangarDoors.OnMissionSuccess += MSEscape;
            m_openHangarDoors.OnMissionSuccess += MoveFourthReichMSStart;
          


            var talkWith10 = new MyTimedObjective(
                (MyTextsWrapperEnum.SLAVER_BASE_1_DIALOG_10_Name),
                MyMissionID.SLAVER_BASE_1_DIALOG_10,
                (MyTextsWrapperEnum.SLAVER_BASE_1_DIALOG_10_Description),
                null,
                this,
                new MyMissionID[] { MyMissionID.SLAVER_BASE_1_HACK_NUKE },
                TimeSpan.FromSeconds(50)
                )
                {
                    SaveOnSuccess = false,
                    SuccessDialogId = MyDialogueEnum.SLAVERBASE_1100_FAKE_ESCAPED,
                    DisplayCounter = false,
                };
            talkWith10.MissionEntityIDs.Add((uint) EntityID.Escape_Dummy);
            m_objectives.Add(talkWith10);
        }