示例#1
0
            public void ExtractJobPrefab(string[] tags)
            {
                string jobIdTag = tags.FirstOrDefault(s => s.StartsWith("jobid:"));

                if (jobIdTag != null && jobIdTag.Length > 6)
                {
                    string jobId = jobIdTag.Substring(6);
                    if (jobId != string.Empty)
                    {
                        JobPrefab = JobPrefab.Get(jobId);
                    }
                }
            }
示例#2
0
        public JobPrefab GetJob()
        {
            if (cachedJobPrefab != null)
            {
                return(cachedJobPrefab);
            }

            foreach (string tag in item.GetTags())
            {
                if (tag.StartsWith("jobid:"))
                {
                    string jobIdentifier = tag.Split(':').Last();
                    if (JobPrefab.Get(jobIdentifier) is { } jobPrefab)
                    {
                        cachedJobPrefab = jobPrefab;
                        return(jobPrefab);
                    }
                }
            }

            return(null);
        }
示例#3
0
        public override void Start()
        {
            base.Start();

            var firstAidOrder = Order.GetPrefab("requestfirstaid");

            doctor_firstAidIcon      = firstAidOrder.SymbolSprite;
            doctor_firstAidIconColor = firstAidOrder.Color;

            subPatients      = new List <Character>();
            radioSpeakerName = TextManager.Get("Tutorial.Radio.Speaker");
            doctor           = Character.Controlled;

            var bandages = FindOrGiveItem(doctor, "antibleeding1");

            bandages.Unequip(doctor);
            doctor.Inventory.RemoveItem(bandages);

            var syringegun = FindOrGiveItem(doctor, "syringegun");

            syringegun.Unequip(doctor);
            doctor.Inventory.RemoveItem(syringegun);

            var antibiotics = FindOrGiveItem(doctor, "antibiotics");

            antibiotics.Unequip(doctor);
            doctor.Inventory.RemoveItem(antibiotics);

            var morphine = FindOrGiveItem(doctor, "antidama1");

            morphine.Unequip(doctor);
            doctor.Inventory.RemoveItem(morphine);

            doctor_suppliesCabinet = Item.ItemList.Find(i => i.HasTag("doctor_suppliescabinet"))?.GetComponent <ItemContainer>();
            doctor_medBayCabinet   = Item.ItemList.Find(i => i.HasTag("doctor_medbaycabinet"))?.GetComponent <ItemContainer>();

            var patientHull1 = WayPoint.WayPointList.Find(wp => wp.IdCardDesc == "waitingroom").CurrentHull;
            var patientHull2 = WayPoint.WayPointList.Find(wp => wp.IdCardDesc == "airlock").CurrentHull;

            medBay = WayPoint.WayPointList.Find(wp => wp.IdCardDesc == "medbay").CurrentHull;

            var assistantInfo = new CharacterInfo(CharacterPrefab.HumanSpeciesName, jobPrefab: JobPrefab.Get("assistant"));

            patient1        = Character.Create(assistantInfo, patientHull1.WorldPosition, "1");
            patient1.TeamID = CharacterTeamType.Team1;
            patient1.GiveJobItems(null);
            patient1.CanSpeak = false;
            patient1.AddDamage(patient1.WorldPosition, new List <Affliction>()
            {
                new Affliction(AfflictionPrefab.Burn, 15.0f)
            }, stun: 0, playSound: false);
            patient1.AIController.Enabled = false;

            assistantInfo   = new CharacterInfo(CharacterPrefab.HumanSpeciesName, jobPrefab: JobPrefab.Get("assistant"));
            patient2        = Character.Create(assistantInfo, patientHull2.WorldPosition, "2");
            patient2.TeamID = CharacterTeamType.Team1;
            patient2.GiveJobItems(null);
            patient2.CanSpeak             = false;
            patient2.AIController.Enabled = false;

            var mechanicInfo = new CharacterInfo(CharacterPrefab.HumanSpeciesName, jobPrefab: JobPrefab.Get("engineer"));
            var subPatient1  = Character.Create(mechanicInfo, WayPoint.GetRandom(SpawnType.Human, mechanicInfo.Job?.Prefab, Submarine.MainSub).WorldPosition, "3");

            subPatient1.TeamID = CharacterTeamType.Team1;
            subPatient1.AddDamage(patient1.WorldPosition, new List <Affliction>()
            {
                new Affliction(AfflictionPrefab.Burn, 40.0f)
            }, stun: 0, playSound: false);
            subPatients.Add(subPatient1);

            var securityInfo = new CharacterInfo(CharacterPrefab.HumanSpeciesName, jobPrefab: JobPrefab.Get("securityofficer"));
            var subPatient2  = Character.Create(securityInfo, WayPoint.GetRandom(SpawnType.Human, securityInfo.Job?.Prefab, Submarine.MainSub).WorldPosition, "3");

            subPatient2.TeamID = CharacterTeamType.Team1;
            subPatient2.AddDamage(patient1.WorldPosition, new List <Affliction>()
            {
                new Affliction(AfflictionPrefab.InternalDamage, 40.0f)
            }, stun: 0, playSound: false);
            subPatients.Add(subPatient2);

            var engineerInfo = new CharacterInfo(CharacterPrefab.HumanSpeciesName, jobPrefab: JobPrefab.Get("engineer"));
            var subPatient3  = Character.Create(securityInfo, WayPoint.GetRandom(SpawnType.Human, engineerInfo.Job?.Prefab, Submarine.MainSub).WorldPosition, "3");

            subPatient3.TeamID = CharacterTeamType.Team1;
            subPatient3.AddDamage(patient1.WorldPosition, new List <Affliction>()
            {
                new Affliction(AfflictionPrefab.Burn, 20.0f)
            }, stun: 0, playSound: false);
            subPatients.Add(subPatient3);

            doctor_firstDoor        = Item.ItemList.Find(i => i.HasTag("doctor_firstdoor")).GetComponent <Door>();
            doctor_secondDoor       = Item.ItemList.Find(i => i.HasTag("doctor_seconddoor")).GetComponent <Door>();
            doctor_thirdDoor        = Item.ItemList.Find(i => i.HasTag("doctor_thirddoor")).GetComponent <Door>();
            tutorial_upperFinalDoor = Item.ItemList.Find(i => i.HasTag("tutorial_upperfinaldoor")).GetComponent <Door>();
            doctor_firstDoorLight   = Item.ItemList.Find(i => i.HasTag("doctor_firstdoorlight")).GetComponent <LightComponent>();
            doctor_secondDoorLight  = Item.ItemList.Find(i => i.HasTag("doctor_seconddoorlight")).GetComponent <LightComponent>();
            doctor_thirdDoorLight   = Item.ItemList.Find(i => i.HasTag("doctor_thirddoorlight")).GetComponent <LightComponent>();
            SetDoorAccess(doctor_firstDoor, doctor_firstDoorLight, false);
            SetDoorAccess(doctor_secondDoor, doctor_secondDoorLight, false);
            SetDoorAccess(doctor_thirdDoor, doctor_thirdDoorLight, false);
            tutorial_submarineDoor      = Item.ItemList.Find(i => i.HasTag("tutorial_submarinedoor")).GetComponent <Door>();
            tutorial_submarineDoorLight = Item.ItemList.Find(i => i.HasTag("tutorial_submarinedoorlight")).GetComponent <LightComponent>();
            SetDoorAccess(tutorial_submarineDoor, tutorial_submarineDoorLight, false);
            tutorial_lockedDoor_2 = Item.ItemList.Find(i => i.HasTag("tutorial_lockeddoor_2")).GetComponent <Door>();
            SetDoorAccess(tutorial_lockedDoor_2, null, true);


            foreach (var patient in subPatients)
            {
                patient.CanSpeak             = false;
                patient.AIController.Enabled = false;
                patient.GiveJobItems();
            }

            Item reactorItem = Item.ItemList.Find(i => i.Submarine == Submarine.MainSub && i.GetComponent <Reactor>() != null);

            reactorItem.GetComponent <Reactor>().AutoTemp = true;
        }
示例#4
0
        public override void Start()
        {
            base.Start();

            captain          = Character.Controlled;
            radioSpeakerName = TextManager.Get("Tutorial.Radio.Watchman");
            GameMain.GameSession.CrewManager.AllowCharacterSwitch = false;

            var revolver = FindOrGiveItem(captain, "revolver");

            revolver.Unequip(captain);
            captain.Inventory.RemoveItem(revolver);

            var captainscap =
                captain.Inventory.FindItemByIdentifier("captainscap1") ??
                captain.Inventory.FindItemByIdentifier("captainscap2") ??
                captain.Inventory.FindItemByIdentifier("captainscap3");

            if (captainscap != null)
            {
                captainscap.Unequip(captain);
                captain.Inventory.RemoveItem(captainscap);
            }

            var captainsuniform =
                captain.Inventory.FindItemByIdentifier("captainsuniform1") ??
                captain.Inventory.FindItemByIdentifier("captainsuniform2") ??
                captain.Inventory.FindItemByIdentifier("captainsuniform3");

            if (captainsuniform != null)
            {
                captainsuniform.Unequip(captain);
                captain.Inventory.RemoveItem(captainsuniform);
            }

            var steerOrder = Order.GetPrefab("steer");

            captain_steerIcon      = steerOrder.SymbolSprite;
            captain_steerIconColor = steerOrder.Color;

            // Room 2
            captain_equipmentObjectiveSensor = Item.ItemList.Find(i => i.HasTag("captain_equipmentobjectivesensor")).GetComponent <MotionSensor>();
            captain_equipmentCabinet         = Item.ItemList.Find(i => i.HasTag("captain_equipmentcabinet")).GetComponent <ItemContainer>();
            captain_firstDoor      = Item.ItemList.Find(i => i.HasTag("captain_firstdoor")).GetComponent <Door>();
            captain_firstDoorLight = Item.ItemList.Find(i => i.HasTag("captain_firstdoorlight")).GetComponent <LightComponent>();

            SetDoorAccess(captain_firstDoor, captain_firstDoorLight, true);

            // Room 3
            captain_medicObjectiveSensor = Item.ItemList.Find(i => i.HasTag("captain_medicobjectivesensor")).GetComponent <MotionSensor>();
            captain_medicSpawnPos        = Item.ItemList.Find(i => i.HasTag("captain_medicspawnpos")).WorldPosition;
            tutorial_submarineDoor       = Item.ItemList.Find(i => i.HasTag("tutorial_submarinedoor")).GetComponent <Door>();
            tutorial_submarineDoorLight  = Item.ItemList.Find(i => i.HasTag("tutorial_submarinedoorlight")).GetComponent <LightComponent>();
            var medicInfo = new CharacterInfo(CharacterPrefab.HumanSpeciesName, "", JobPrefab.Get("medicaldoctor"));

            captain_medic        = Character.Create(medicInfo, captain_medicSpawnPos, "medicaldoctor");
            captain_medic.TeamID = Character.TeamType.Team1;
            captain_medic.GiveJobItems(null);
            captain_medic.CanSpeak = captain_medic.AIController.Enabled = false;
            SetDoorAccess(tutorial_submarineDoor, tutorial_submarineDoorLight, false);

            // Submarine
            captain_enteredSubmarineSensor    = Item.ItemList.Find(i => i.HasTag("captain_enteredsubmarinesensor")).GetComponent <MotionSensor>();
            tutorial_submarineReactor         = Item.ItemList.Find(i => i.HasTag("engineer_submarinereactor")).GetComponent <Reactor>();
            captain_navConsole                = Item.ItemList.Find(i => i.HasTag("command")).GetComponent <Steering>();
            captain_navConsoleCustomInterface = Item.ItemList.Find(i => i.HasTag("command")).GetComponent <CustomInterface>();
            captain_sonar         = captain_navConsole.Item.GetComponent <Sonar>();
            captain_statusMonitor = Item.ItemList.Find(i => i.HasTag("captain_statusmonitor"));

            tutorial_submarineReactor.CanBeSelected = false;
            tutorial_submarineReactor.IsActive      = tutorial_submarineReactor.AutoTemp = false;

            tutorial_lockedDoor_1 = Item.ItemList.Find(i => i.HasTag("tutorial_lockeddoor_1")).GetComponent <Door>();
            tutorial_lockedDoor_2 = Item.ItemList.Find(i => i.HasTag("tutorial_lockeddoor_2")).GetComponent <Door>();
            SetDoorAccess(tutorial_lockedDoor_1, null, false);
            SetDoorAccess(tutorial_lockedDoor_2, null, false);

            var mechanicInfo = new CharacterInfo(CharacterPrefab.HumanSpeciesName, "", JobPrefab.Get("mechanic"));

            captain_mechanic        = Character.Create(mechanicInfo, WayPoint.GetRandom(SpawnType.Human, mechanicInfo.Job, Submarine.MainSub).WorldPosition, "mechanic");
            captain_mechanic.TeamID = Character.TeamType.Team1;
            captain_mechanic.GiveJobItems();

            var securityInfo = new CharacterInfo(CharacterPrefab.HumanSpeciesName, "", JobPrefab.Get("securityofficer"));

            captain_security        = Character.Create(securityInfo, WayPoint.GetRandom(SpawnType.Human, securityInfo.Job, Submarine.MainSub).WorldPosition, "securityofficer");
            captain_security.TeamID = Character.TeamType.Team1;
            captain_security.GiveJobItems();

            var engineerInfo = new CharacterInfo(CharacterPrefab.HumanSpeciesName, "", JobPrefab.Get("engineer"));

            captain_engineer        = Character.Create(engineerInfo, WayPoint.GetRandom(SpawnType.Human, engineerInfo.Job, Submarine.MainSub).WorldPosition, "engineer");
            captain_engineer.TeamID = Character.TeamType.Team1;
            captain_engineer.GiveJobItems();

            captain_mechanic.CanSpeak             = captain_security.CanSpeak = captain_engineer.CanSpeak = false;
            captain_mechanic.AIController.Enabled = captain_security.AIController.Enabled = captain_engineer.AIController.Enabled = false;
        }
示例#5
0
        public override void Start()
        {
            base.Start();

            Submarine.MainSub.GodMode = true;
            foreach (Structure wall in Structure.WallList)
            {
                if (wall.Submarine != null && wall.Submarine.Info.IsOutpost)
                {
                    wall.Indestructible = true;
                }
            }

            CharacterInfo charInfo = configElement.Element("Character") == null ?
                                     new CharacterInfo(CharacterPrefab.HumanSpeciesName, jobPrefab: JobPrefab.Get("engineer")) :
                                     new CharacterInfo(configElement.Element("Character"));

            WayPoint wayPoint = GetSpawnPoint(charInfo);

            if (wayPoint == null)
            {
                DebugConsole.ThrowError("A waypoint with the spawntype \"" + spawnPointType + "\" is required for the tutorial event");
                return;
            }

            character            = Character.Create(charInfo, wayPoint.WorldPosition, "", isRemotePlayer: false, hasAi: false);
            character.TeamID     = CharacterTeamType.Team1;
            Character.Controlled = character;
            character.GiveJobItems(null);

            var idCard = character.Inventory.FindItemByIdentifier("idcard");

            if (idCard == null)
            {
                DebugConsole.ThrowError("Item prefab \"ID Card\" not found!");
                return;
            }
            idCard.AddTag("com");
            idCard.AddTag("eng");

            foreach (Item item in Item.ItemList)
            {
                Door door = item.GetComponent <Door>();
                if (door != null)
                {
                    door.CanBeWelded = false;
                }
            }

            tutorialCoroutine = CoroutineManager.StartCoroutine(UpdateState());
        }
示例#6
0
        public override void Start()
        {
            base.Start();

            Submarine.MainSub.GodMode = true;

            CharacterInfo charInfo = configElement.Element("Character") == null ?
                                     new CharacterInfo(Character.HumanSpeciesName, "", JobPrefab.Get("engineer")) :
                                     new CharacterInfo(configElement.Element("Character"));

            WayPoint wayPoint = GetSpawnPoint(charInfo);

            if (wayPoint == null)
            {
                DebugConsole.ThrowError("A waypoint with the spawntype \"" + spawnPointType + "\" is required for the tutorial event");
                return;
            }

            character            = Character.Create(charInfo, wayPoint.WorldPosition, "", false, false);
            Character.Controlled = character;
            character.GiveJobItems(null);

            var idCard = character.Inventory.FindItemByIdentifier("idcard");

            if (idCard == null)
            {
                DebugConsole.ThrowError("Item prefab \"ID Card\" not found!");
                return;
            }
            idCard.AddTag("com");
            idCard.AddTag("eng");

            List <Entity> entities = Entity.GetEntityList();

            for (int i = 0; i < entities.Count; i++)
            {
                if (entities[i] is Item)
                {
                    Door door = (entities[i] as Item).GetComponent <Door>();
                    if (door != null)
                    {
                        door.CanBeWelded = false;
                    }
                }
            }

            tutorialCoroutine = CoroutineManager.StartCoroutine(UpdateState());
        }