Ejemplo n.º 1
0
 public CrewMemberInfo(string crewMemberName, string vesselName, Guid vesselId, double currentTime)
 {
     name                   = crewMemberName;
     lastUpdate             = currentTime;
     lastFood               = currentTime;
     lastWater              = currentTime;
     this.vesselName        = vesselName;
     this.vesselId          = vesselId;
     this.vesselIsPreLaunch = true;
     hibernating            = false;
     DFfrozen               = false;
     recoverykerbal         = false;
     crewType               = ProtoCrewMember.KerbalType.Crew;
     if (HighLogic.CurrentGame != null)
     {
         if (HighLogic.CurrentGame.CrewRoster.Exists(name))
         {
             ProtoCrewMember kerbal = HighLogic.CurrentGame.CrewRoster[name];
             if (kerbal != null)
             {
                 crewType = kerbal.type;
             }
         }
     }
 }
Ejemplo n.º 2
0
        internal bool setComatoseKerbal(Part part, ProtoCrewMember crew, ProtoCrewMember.KerbalType type, bool start)
        {
            try
            {
                if (start)
                {
                    crew.UnregisterExperienceTraits(part);
                    DFGameEvents.onKerbalSetComatose.Fire(part, crew);
                }

                crew.type = type;

                if (!start)
                {
                    crew.RegisterExperienceTraits(part);
                    DFGameEvents.onKerbalUnSetComatose.Fire(part, crew);
                    ScreenMessages.PostScreenMessage(
                        Localizer.Format("#autoLOC_DF_00001", crew.name), 5.0f,
                        ScreenMessageStyle.UPPER_CENTER);
                }
                else
                {
                    ScreenMessages.PostScreenMessage(Localizer.Format("#autoLOC_DF_00002", crew.name, Instance.DFsettings.comatoseTime / 60), 5.0f, ScreenMessageStyle.UPPER_CENTER);
                }

                return(true);
            }
            catch (Exception)
            {
                Utilities.Log("DeepFreeze Failed to set " + crew.name + " to status of " + type + " during emergency thaw processing.");
                return(false);
            }
        }
        public override bool Load(ConfigNode configNode)
        {
            // Load base class
            bool valid = base.Load(configNode);

            if (configNode.HasValue("passengerName"))
            {
                LoggingUtil.LogWarning(this, "The passengerName and gender attributes are obsolete since Contract Configurator 1.9.0, use kerbal instead.");
                valid &= ConfigNodeUtil.ParseValue<List<string>>(configNode, "passengerName", x => passengerName = x, this, new List<string>());
                valid &= ConfigNodeUtil.ParseValue<ProtoCrewMember.Gender>(configNode, "gender", x => gender = x, this, Kerbal.RandomGender());
                valid &= ConfigNodeUtil.ParseValue<string>(configNode, "experienceTrait", x => experienceTrait = x, this, Kerbal.RandomExperienceTrait());

                legacy = true;
            }
            else
            {
                valid &= ConfigNodeUtil.ParseValue<List<Kerbal>>(configNode, "kerbal", x => kerbals = x, this, new List<Kerbal>());
                legacy = false;
            }

            valid &= ConfigNodeUtil.ParseValue<int>(configNode, "count", x => count = x, this, 1, x => Validation.GE(x, 1));
            valid &= ConfigNodeUtil.ParseValue<ProtoCrewMember.KerbalType>(configNode, "kerbalType", x => kerbalType = x, this, ProtoCrewMember.KerbalType.Tourist);

            return valid;
        }
Ejemplo n.º 4
0
        public void Initialize(ProtoCrewMember.Gender?gender = null, string name = null)
        {
            if (name != null)
            {
                this.name = name;
                _pcm      = pcm;
            }

            if (gender != null)
            {
                this.gender = gender.Value;
            }
            else
            {
                this.gender = RandomGender();
            }

            if (_pcm != null)
            {
                SetCrew(_pcm);
            }
            else
            {
                this.name       = name ?? KerbalName(this.gender);
                experienceTrait = RandomExperienceTrait();
                kerbalType      = ProtoCrewMember.KerbalType.Crew;
            }
        }
Ejemplo n.º 5
0
        internal bool setComatoseKerbal(Part part, ProtoCrewMember crew, ProtoCrewMember.KerbalType type, bool start)
        {
            try
            {
                if (start)
                {
                    crew.UnregisterExperienceTraits(part);
                    DFGameEvents.onKerbalSetComatose.Fire(part, crew);
                }

                crew.type = type;

                if (!start)
                {
                    crew.RegisterExperienceTraits(part);
                    DFGameEvents.onKerbalUnSetComatose.Fire(part, crew);
                    ScreenMessages.PostScreenMessage(
                        crew.name + " has recovered from emergency thaw and resumed normal duties.", 5.0f,
                        ScreenMessageStyle.UPPER_CENTER);
                }
                else
                {
                    ScreenMessages.PostScreenMessage(crew.name + " has been emergency thawed and cannot perform duties for " + Instance.DFsettings.comatoseTime / 60 + " minutes.", 5.0f, ScreenMessageStyle.UPPER_CENTER);
                }

                return(true);
            }
            catch (Exception)
            {
                Utilities.Log("DeepFreeze Failed to set " + crew.name + " to status of " + type + " during emergency thaw processing.");
                return(false);
            }
        }
Ejemplo n.º 6
0
        void AddCustomKerbal(string name, bool veteran)
        {
            ProtoCrewMember.KerbalType type = veteran ? ProtoCrewMember.KerbalType.Crew : ProtoCrewMember.KerbalType.Applicant;

            ProtoCrewMember customVet = HighLogic.CurrentGame.CrewRoster[name];

            if (customVet == null)
            {
                if (type == ProtoCrewMember.KerbalType.Applicant)
                {
                    customVet = HighLogic.CurrentGame.CrewRoster?.Applicants?.ToList()?.FirstOrDefault(k => !customKerbals.Contains(k.name));
                }
            }

            if (customVet == null)
            {
                customVet = new ProtoCrewMember(type, name);
            }

            SetCustomKerbal(customVet, name);

            if (!HighLogic.CurrentGame.CrewRoster.Exists(name))
            {
                HighLogic.CurrentGame.CrewRoster.AddCrewMember(customVet);
            }
        }
Ejemplo n.º 7
0
 public CrewMemberInfo(string crewMemberName, string vesselName, Guid vesselId, double currentTime)
 {
     name = crewMemberName;
     lastUpdate = currentTime;
     lastFood = currentTime;
     lastWater = currentTime;
     this.vesselName = vesselName;
     this.vesselId = vesselId;
     this.vesselIsPreLaunch = true;
     hibernating = false;
     DFfrozen = false;
     recoverykerbal = false;
     crewType = ProtoCrewMember.KerbalType.Crew;
     if (HighLogic.CurrentGame != null)
     {
         if (HighLogic.CurrentGame.CrewRoster.Exists(name))
         {
             ProtoCrewMember kerbal = HighLogic.CurrentGame.CrewRoster[name];
             if (kerbal != null)
             {
                 crewType = kerbal.type;
             }
         }
     }
 }
Ejemplo n.º 8
0
 public void SetCrew(ProtoCrewMember pcm)
 {
     this._pcm       = pcm;
     gender          = pcm.gender;
     name            = pcm.name;
     experienceTrait = pcm.experienceTrait.TypeName;
     kerbalType      = pcm.type;
 }
 public SpawnPassengers(List<string> passengerNames, int minPassengers, ProtoCrewMember.Gender? gender, ProtoCrewMember.KerbalType kerbalType, string experienceTrait)
 {
     this.passengerNames = passengerNames;
     this.count = passengerNames.Count != 0 ? passengerNames.Count : minPassengers;
     this.gender = gender;
     this.kerbalType = kerbalType;
     this.experienceTrait = experienceTrait;
 }
Ejemplo n.º 10
0
 public Kerbal(Kerbal k)
 {
     _pcm            = k._pcm;
     name            = k.name;
     gender          = k.gender;
     experienceTrait = k.experienceTrait;
     kerbalType      = k.kerbalType;
 }
Ejemplo n.º 11
0
 public Kerbal(Kerbal k)
 {
     _pcm = k._pcm;
     name = k.name;
     gender = k.gender;
     experienceTrait = k.experienceTrait;
     kerbalType = k.kerbalType;
 }
Ejemplo n.º 12
0
        /// <summary>
        /// Sets the kerbal type without triggering the event (usefull when receiveing kerbals from other clients)
        /// </summary>
        public void SetKerbalTypeWithoutTriggeringEvent(ProtoCrewMember crew, ProtoCrewMember.KerbalType newType)
        {
            if (crew == null)
            {
                return;
            }

            KerbalTypeField?.SetValue(crew, newType);
        }
Ejemplo n.º 13
0
 public KerbalModel(ProtoCrewMember kerbal, bool isNew)
 {
     this.Kerbal = kerbal;
     Name = kerbal.name;
     Stupidity = kerbal.stupidity;
     Courage = kerbal.courage;
     Badass = kerbal.isBadass;
     Gender = kerbal.gender;
     Type = kerbal.type;
     IsNew = isNew;
 }
Ejemplo n.º 14
0
 void onKerbalTypeChange(ProtoCrewMember pcm, ProtoCrewMember.KerbalType old_type, ProtoCrewMember.KerbalType new_type)
 {
     if (pcm.name == null || pcm.name == "")
     {
         // premature event: the kerbal is still in the process of being
         // created by KSP
         return;
     }
     Debug.Log(String.Format("[KS Exp] {0}: {1} {2} {3}",
                             "onKerbalTypeChange", pcm.name, old_type, new_type));
 }
Ejemplo n.º 15
0
 public KerbalModel(ProtoCrewMember kerbal, bool isNew)
 {
     this.Kerbal = kerbal;
     Name        = kerbal.name;
     Stupidity   = kerbal.stupidity;
     Courage     = kerbal.courage;
     Badass      = kerbal.isBadass;
     Gender      = kerbal.gender;
     Type        = kerbal.type;
     IsNew       = isNew;
 }
Ejemplo n.º 16
0
        private void OnKerbalTypeChange(ProtoCrewMember pcm, ProtoCrewMember.KerbalType oldType, ProtoCrewMember.KerbalType newType)
        {
            if (oldType == ProtoCrewMember.KerbalType.Applicant && newType == ProtoCrewMember.KerbalType.Crew)
            {
                // Check for correct trait
                if (!string.IsNullOrEmpty(trait) && pcm.experienceTrait.Config.Name != trait)
                {
                    return;
                }

                // Check for correct gender
                if (gender != null && pcm.gender != gender.Value)
                {
                    return;
                }

                CelestialBody homeworld = FlightGlobals.Bodies.Where(cb => cb.isHomeWorld).FirstOrDefault();

                Debug.Log("Strategia: Awarding experience to " + pcm.name);

                // Find existing entries
                int currentValue = 2;
                foreach (FlightLog.Entry entry in pcm.careerLog.Entries.Concat(pcm.flightLog.Entries).Where(e => e.type.Contains(SPECIAL_XP)))
                {
                    // Get the entry with the largest value
                    int entryValue = Convert.ToInt32(entry.type.Substring(SPECIAL_XP.Length, entry.type.Length - SPECIAL_XP.Length));
                    currentValue = Math.Max(currentValue, entryValue);
                }

                // Get the experience level
                int    value = level;
                string type  = SPECIAL_XP + value.ToString();

                // Do the awarding
                pcm.flightLog.AddEntry(type, homeworld.name);
                pcm.ArchiveFlightLog();

                // Force the astronaut complex GUI to refresh so we actually see the experience
                AstronautComplex ac = UnityEngine.Object.FindObjectOfType <AstronautComplex>();
                if (ac != null)
                {
                    Debug.Log("NewKerbalExperience: CreateAvailableList");
                    MethodInfo updateListMethod = typeof(AstronautComplex).GetMethods(BindingFlags.NonPublic | BindingFlags.Instance).
                                                  Where(mi => mi.Name == "CreateAvailableList").First();
                    updateListMethod.Invoke(ac, new object[] { });

                    Debug.Log("NewKerbalExperience: AddItem_Available");
                    MethodInfo addToListMethod = typeof(AstronautComplex).GetMethods(BindingFlags.NonPublic | BindingFlags.Instance).
                                                 Where(mi => mi.Name == "AddItem_Available").First();
                    addToListMethod.Invoke(ac, new object[] { pcm });
                }
            }
        }
        public override bool Load(ConfigNode configNode)
        {
            // Load base class
            bool valid = base.Load(configNode);

            valid &= ConfigNodeUtil.ParseValue<int>(configNode, "count", x => count = x, this, 1, x => Validation.GE(x, 1));
            valid &= ConfigNodeUtil.ParseValue<List<string>>(configNode, "passengerName", x => passengerName = x, this, new List<string>());
            valid &= ConfigNodeUtil.ParseValue<ProtoCrewMember.Gender?>(configNode, "gender", x => gender = x, this, (ProtoCrewMember.Gender?)null);
            valid &= ConfigNodeUtil.ParseValue<ProtoCrewMember.KerbalType>(configNode, "kerbalType", x => kerbalType = x, this, ProtoCrewMember.KerbalType.Tourist);
            valid &= ConfigNodeUtil.ParseValue<string>(configNode, "experienceTrait", x => experienceTrait = x, this, "");

            return valid;
        }
Ejemplo n.º 18
0
        /// <summary>
        /// This event is triggered when we hire a kerbal (previous type was applicant, new is crew)
        /// Also triggered when we sack a kerbal (previous type was crew, new is applicant)
        /// </summary>
        public void TypeChange(ProtoCrewMember kerbal, ProtoCrewMember.KerbalType previousType, ProtoCrewMember.KerbalType newType)
        {
            if (previousType != newType)
            {
                if (previousType == ProtoCrewMember.KerbalType.Crew && newType == ProtoCrewMember.KerbalType.Applicant && !SettingsSystem.ServerSettings.AllowSackKerbals)
                {
                    //This means that we sacked the crew and we are not allowed to do it
                    System.SetKerbalTypeWithoutTriggeringEvent(kerbal, ProtoCrewMember.KerbalType.Crew);
                    return;
                }

                System.SetKerbalTypeWithoutTriggeringEvent(kerbal, newType);
                System.MessageSender.SendKerbal(kerbal);
            }
        }
Ejemplo n.º 19
0
        public CrewMember(Type type, Roster rosterStatus, string name, Gender gender, string trait, bool veteran, bool isBadass, float courage, float stupidity, int experienceLevel, int activity = 0) : base(type, name)
        {
            Debug.Log("CrewMember", "new CrewMember (" + name + ") from stats");

            this.type            = type;
            this.rosterStatus    = rosterStatus;
            this.name            = name;
            this.gender          = gender;
            this.trait           = trait;
            this.veteran         = veteran;
            this.isBadass        = isBadass;
            this.courage         = courage;
            this.stupidity       = stupidity;
            this.experienceLevel = experienceLevel;
            this.activity        = activity;
        }
Ejemplo n.º 20
0
        /// <summary>
        /// This event is triggered when we hire a kerbal (previous type was applicant, new is crew)
        /// Also triggered when we sack a kerbal (previous type was crew, new is applicant)
        /// </summary>
        public void TypeChange(ProtoCrewMember kerbal, ProtoCrewMember.KerbalType previousType, ProtoCrewMember.KerbalType newType)
        {
            if (previousType != newType)
            {
                if (LockSystem.LockQuery.KerbalLockExists(kerbal.name) && !LockSystem.LockQuery.KerbalLockBelongsToPlayer(kerbal.name, SettingsSystem.CurrentSettings.PlayerName))
                {
                    LunaScreenMsg.PostScreenMessage(LocalizationContainer.ScreenText.KerbalNotYours, 5f, ScreenMessageStyle.UPPER_CENTER);
                    System.SetKerbalTypeWithoutTriggeringEvent(kerbal, ProtoCrewMember.KerbalType.Crew);
                    return;
                }

                System.SetKerbalTypeWithoutTriggeringEvent(kerbal, newType);
                System.MessageSender.SendKerbal(kerbal);
                System.RefreshCrewDialog();
            }
        }
Ejemplo n.º 21
0
        internal static void DisplaySelectType()
        {
            GUILayout.BeginHorizontal();
            // at first initialization in Create Mode, Selected Kerbal is null...
            _kerbalType = SelectedKerbal == null ?  ProtoCrewMember.KerbalType.Crew : SelectedKerbal.Type;
            if (SelectedKerbal != null && SelectedKerbal.SalaryContractDispute)
            {
                GUI.enabled = false;
            }
            GUILayout.Label("KerbalType:", GUILayout.Width(80));

            var isApplicant = KerbalType == ProtoCrewMember.KerbalType.Applicant.ToString();

            isApplicant = GUILayout.Toggle(isApplicant, ProtoCrewMember.KerbalType.Applicant.ToString(), GUILayout.Width(70));
            if (isApplicant)
            {
                _kerbalType = ProtoCrewMember.KerbalType.Applicant;
            }

            var isCrew = KerbalType == ProtoCrewMember.KerbalType.Crew.ToString();

            isCrew = GUILayout.Toggle(isCrew, ProtoCrewMember.KerbalType.Crew.ToString(), GUILayout.Width(70));
            if (isCrew)
            {
                _kerbalType = ProtoCrewMember.KerbalType.Crew;
            }

            var isTourist = KerbalType == ProtoCrewMember.KerbalType.Tourist.ToString();

            isTourist = GUILayout.Toggle(isTourist, ProtoCrewMember.KerbalType.Tourist.ToString(), GUILayout.Width(70));
            if (isTourist)
            {
                _kerbalType = ProtoCrewMember.KerbalType.Tourist;
            }

            var isUnowned = KerbalType == ProtoCrewMember.KerbalType.Unowned.ToString();

            isUnowned = GUILayout.Toggle(isUnowned, ProtoCrewMember.KerbalType.Unowned.ToString(), GUILayout.Width(70));
            if (isUnowned)
            {
                _kerbalType = ProtoCrewMember.KerbalType.Unowned;
            }

            GUI.enabled = true;
            GUILayout.EndHorizontal();
        }
Ejemplo n.º 22
0
        private static void CreateKerbalViewer()
        {
            DisplaySelectProfession();
            GUILayout.BeginHorizontal();
            // "Create", "Creates a Kerbal with profession selected above.\r\nAdds him/her to the Roster."
            GUIContent guilabel = new GUIContent(SmUtils.SmTags["#smloc_roster_003"], SmUtils.SmTags["#smloc_roster_tt_002"]);

            if (GUILayout.Button(guilabel, GUILayout.MaxWidth(80), GUILayout.Height(20)))
            {
                bool kerbalFound = false;
                ProtoCrewMember.KerbalType kerbalType = KerbalProfession == Professions.Tourist
          ? ProtoCrewMember.KerbalType.Tourist
          : ProtoCrewMember.KerbalType.Crew;
                while (!kerbalFound)
                {
                    SelectedKerbal = ModKerbal.CreateKerbal(kerbalType);
                    if (SelectedKerbal.Trait == KerbalProfession.ToString())
                    {
                        kerbalFound = true;
                    }
                }
                OnCreate = false;
            }
            Rect rect = GUILayoutUtility.GetLastRect();

            if (Event.current.type == EventType.Repaint && ShowToolTips)
            {
                ToolTip = SMToolTips.SetActiveToolTip(rect, GUI.tooltip, ref ToolTipActive, 10);
            }
            //guilabel = new GUIContent("Cancel", "Cancels current creation and exit editor.");
            guilabel = new GUIContent(SmUtils.SmTags["#smloc_roster_004"], SmUtils.SmTags["#smloc_roster_tt_003"]);
            if (GUILayout.Button(guilabel, GUILayout.MaxWidth(80), GUILayout.Height(20)))
            {
                OnCreate       = false;
                SelectedKerbal = null;
            }
            rect = GUILayoutUtility.GetLastRect();
            if (Event.current.type == EventType.Repaint && ShowToolTips)
            {
                ToolTip = SMToolTips.SetActiveToolTip(rect, GUI.tooltip, ref ToolTipActive, 10);
            }
            GUILayout.EndHorizontal();
        }
Ejemplo n.º 23
0
        public static CrewMemberType ToCrewMemberType(this ProtoCrewMember.KerbalType type)
        {
            switch (type)
            {
            case ProtoCrewMember.KerbalType.Applicant:
                return(CrewMemberType.Applicant);

            case ProtoCrewMember.KerbalType.Crew:
                return(CrewMemberType.Crew);

            case ProtoCrewMember.KerbalType.Tourist:
                return(CrewMemberType.Tourist);

            case ProtoCrewMember.KerbalType.Unowned:
                return(CrewMemberType.Unowned);

            default:
                throw new ArgumentOutOfRangeException(nameof(type));
            }
        }
Ejemplo n.º 24
0
        public static Kerbal Load(ConfigNode node)
        {
            string          name = ConfigNodeUtil.ParseValue <string>(node, "name");
            ProtoCrewMember crew = HighLogic.CurrentGame.CrewRoster.AllKerbals().Where(pcm => pcm.name == name).FirstOrDefault();

            if (crew != null)
            {
                return(new Kerbal(crew));
            }
            else
            {
                ProtoCrewMember.Gender gender         = ConfigNodeUtil.ParseValue <ProtoCrewMember.Gender>(node, "gender", RandomGender());
                string experienceTrait                = ConfigNodeUtil.ParseValue <string>(node, "experienceTrait", RandomExperienceTrait());
                ProtoCrewMember.KerbalType kerbalType = ConfigNodeUtil.ParseValue <ProtoCrewMember.KerbalType>(node, "kerbalType", ProtoCrewMember.KerbalType.Crew);

                Kerbal k = new Kerbal(gender, name, experienceTrait);
                k.kerbalType = kerbalType;
                return(k);
            }
        }
Ejemplo n.º 25
0
        protected override void OnLoad(ConfigNode node)
        {
            base.OnLoad(node);
            count            = Convert.ToInt32(node.GetValue("count"));
            removePassengers = ConfigNodeUtil.ParseValue <bool?>(node, "removePassengers", null) ?? true;

            // Legacy support from Contract Configurator 1.8.3
            if (node.HasValue("potentialPassenger"))
            {
                List <string>              passengerNames = ConfigNodeUtil.ParseValue <List <string> >(node, "potentialPassenger", new List <string>());
                ProtoCrewMember.Gender     gender         = ConfigNodeUtil.ParseValue <ProtoCrewMember.Gender>(node, "gender", Kerbal.RandomGender());
                ProtoCrewMember.KerbalType kerbalType     = ConfigNodeUtil.ParseValue <ProtoCrewMember.KerbalType>(node, "kerbalType", ProtoCrewMember.KerbalType.Tourist);
                string experienceTrait = ConfigNodeUtil.ParseValue <string>(node, "experienceTrait", Kerbal.RandomExperienceTrait());

                kerbals = passengerNames.Select(name => new Kerbal(gender, name, experienceTrait)).ToList();

                foreach (Kerbal kerbal in kerbals)
                {
                    kerbal.kerbalType = kerbalType;
                }
            }
            else
            {
                foreach (ConfigNode kerbalNode in node.GetNodes("KERBAL"))
                {
                    kerbals.Add(Kerbal.Load(kerbalNode));
                }
            }

            foreach (ConfigNode child in node.GetNodes("PASSENGER_DATA"))
            {
                ProtoCrewMember crew   = ConfigNodeUtil.ParseValue <ProtoCrewMember>(child, "passenger");
                bool            loaded = ConfigNodeUtil.ParseValue <bool>(child, "loaded");

                if (crew != null)
                {
                    passengers[crew] = loaded;
                }
            }
        }
Ejemplo n.º 26
0
        } // KerbalListUpdate()

        public void TypeChange(ProtoCrewMember KerbalCrew, ProtoCrewMember.KerbalType TypeFrom, ProtoCrewMember.KerbalType TypeTo)
        {
            // Captures when Kerbals experience a TypeChange. If the TypeChange is from Crew to Applicant, the kerbal is being fired.
            // Upon firing, the kerbal is set to "Missing" to indicate that the kerbal was modified during this visit to the complex.
            // ComplexExit() can then search through the flags. If the type is from Applicant to Crew, the flag is set to "Available"
            // to ensure it doesn't get saved incorrectly if a kerbal was fired, then rehired.

            // Debug.LogWarning("CRFFix.TypeChange(): From - " + TypeFrom + " To - " + TypeTo);

            if (ProtoCrewMember.KerbalType.Crew == TypeFrom &&
                ProtoCrewMember.KerbalType.Applicant == TypeTo)
            {
                // Debug.Log("CRFFix: Setting Kerbal Status to Missing");
                KerbalCrew.rosterStatus = ProtoCrewMember.RosterStatus.Missing;
            }
            else if (ProtoCrewMember.KerbalType.Applicant == TypeFrom &&
                     ProtoCrewMember.KerbalType.Crew == TypeTo)
            {
                // Debug.Log("CRFFix: Setting Kerbal Status to Available");
                KerbalCrew.rosterStatus = ProtoCrewMember.RosterStatus.Available;
            }
        } // TypeChange()
Ejemplo n.º 27
0
        /// <summary>
        /// This event is triggered when we hire a kerbal (previous type was applicant, new is crew)
        /// Also triggered when we sack a kerbal (previous type was crew, new is applicant)
        /// </summary>
        public void TypeChange(ProtoCrewMember kerbal, ProtoCrewMember.KerbalType previousType, ProtoCrewMember.KerbalType newType)
        {
            if (previousType != newType)
            {
                if (!LockSystem.LockQuery.CanEditKerbal(kerbal.name, SettingsSystem.CurrentSettings.PlayerName))
                {
                    LunaScreenMsg.PostScreenMessage("This kerbal does not belongs you", 5f, ScreenMessageStyle.UPPER_CENTER);
                    System.SetKerbalTypeWithoutTriggeringEvent(kerbal, ProtoCrewMember.KerbalType.Crew);
                    return;
                }

                if (previousType == ProtoCrewMember.KerbalType.Crew && newType == ProtoCrewMember.KerbalType.Applicant && !SettingsSystem.ServerSettings.AllowSackKerbals)
                {
                    //This means that we sacked the crew and we are not allowed to do it
                    System.SetKerbalTypeWithoutTriggeringEvent(kerbal, ProtoCrewMember.KerbalType.Crew);
                    return;
                }

                System.SetKerbalTypeWithoutTriggeringEvent(kerbal, newType);
                System.MessageSender.SendKerbal(kerbal);
            }
        }
Ejemplo n.º 28
0
 private void OnKerbalTypeChange(ProtoCrewMember kerbal, ProtoCrewMember.KerbalType oldType, ProtoCrewMember.KerbalType newType)
 {
     Log.Info("kerbal type change: " + kerbal.name + " from " + oldType + " to " + newType);
     HallOfFame.Instance().UpdateKerbal(kerbal);
 }
 public KerbalData(KerbalData k)
 {
     name = k.name;
     crewMember = k.crewMember;
     body = k.body;
     orbit = k.orbit;
     latitude = k.latitude;
     longitude = k.longitude;
     altitude = k.altitude;
     landed = k.landed;
     owned = k.owned;
     addToRoster = k.addToRoster;
     gender = k.gender;
     kerbalType = k.kerbalType;
     pqsCity = k.pqsCity;
     pqsOffset = k.pqsOffset;
     heading = k.heading;
 }
Ejemplo n.º 30
0
        public override bool Load(ConfigNode configNode)
        {
            // Load base class
            bool valid = base.Load(configNode);

            if (configNode.HasValue("passengerName"))
            {
                LoggingUtil.LogWarning(this, "The passengerName and gender attributes are obsolete since Contract Configurator 1.9.0, use kerbal instead.");
                valid &= ConfigNodeUtil.ParseValue <List <string> >(configNode, "passengerName", x => passengerName = x, this, new List <string>());
                valid &= ConfigNodeUtil.ParseValue <ProtoCrewMember.Gender>(configNode, "gender", x => gender = x, this, Kerbal.RandomGender());
                valid &= ConfigNodeUtil.ParseValue <string>(configNode, "experienceTrait", x => experienceTrait = x, this, Kerbal.RandomExperienceTrait());

                legacy = true;
            }
            else
            {
                valid &= ConfigNodeUtil.ParseValue <List <Kerbal> >(configNode, "kerbal", x => kerbals = x, this, new List <Kerbal>());
                legacy = false;
            }

            valid &= ConfigNodeUtil.ParseValue <int>(configNode, "count", x => count = x, this, 1, x => Validation.GE(x, 1));
            valid &= ConfigNodeUtil.ParseValue <ProtoCrewMember.KerbalType>(configNode, "kerbalType", x => kerbalType = x, this, ProtoCrewMember.KerbalType.Tourist);
            valid &= ConfigNodeUtil.ParseValue <bool>(configNode, "removePassengers", x => removePassengers = x, this, true);

            return(valid);
        }
        protected override void OnLoad(ConfigNode node)
        {
            base.OnLoad(node);
            count = Convert.ToInt32(node.GetValue("count"));
            passengerNames = ConfigNodeUtil.ParseValue<List<string>>(node, "potentialPassenger", new List<string>());
            gender = ConfigNodeUtil.ParseValue<ProtoCrewMember.Gender?>(node, "gender", (ProtoCrewMember.Gender?)null);
            kerbalType = ConfigNodeUtil.ParseValue<ProtoCrewMember.KerbalType>(node, "kerbalType", ProtoCrewMember.KerbalType.Tourist);
            experienceTrait = ConfigNodeUtil.ParseValue<string>(node, "experienceTrait", "");

            foreach (ConfigNode child in node.GetNodes("PASSENGER_DATA"))
            {
                ProtoCrewMember crew = ConfigNodeUtil.ParseValue<ProtoCrewMember>(child, "passenger");
                bool loaded = ConfigNodeUtil.ParseValue<bool>(child, "loaded");

                if (crew != null)
                {
                    passengers[crew] = loaded;

                    if (!string.IsNullOrEmpty(experienceTrait))
                    {
                        KerbalRoster.SetExperienceTrait(crew, experienceTrait);
                    }
                }
            }
        }
        private void UpdateRepository(CivPopRepository repo)
        {
            if (repo.GetFunds() > 0)
            {
                Funding.Instance.AddFunds(repo.GetFunds(), TransactionReasons.Progression);
                repo.AddFunds(repo.GetFunds() * -1);
            }

            ProtoCrewMember.KerbalType type = ProtoCrewMember.KerbalType.Crew;
            //ProtoCrewMember.KerbalType.Applicant;
            //ProtoCrewMember.KerbalType.Crew;
            //ProtoCrewMember.KerbalType.Tourist;
            //ProtoCrewMember.KerbalType.Unowned;

            ProtoCrewMember.RosterStatus[] statuses =
            {
                ProtoCrewMember.RosterStatus.Assigned,
                ProtoCrewMember.RosterStatus.Available,
                ProtoCrewMember.RosterStatus.Dead,
                ProtoCrewMember.RosterStatus.Missing
            };
            IEnumerable <ProtoCrewMember> kerbals = HighLogic.CurrentGame.CrewRoster.Kerbals(type, statuses);

            foreach (ProtoCrewMember kerbal in kerbals)
            {
                CivPopKerbal civKerbal = repo.GetKerbal(kerbal.name);
                if (civKerbal == null)
                {
                    string             kerbalName = kerbal.name;
                    CivPopKerbalGender gender     = CivPopKerbalGender.FEMALE;
                    if (ProtoCrewMember.Gender.Male.Equals(kerbal.gender))
                    {
                        gender = CivPopKerbalGender.MALE;
                    }
                    double birthdate = Planetarium.GetUniversalTime() - 15 * TimeUnit.YEAR - rng.Next(15 * TimeUnit.YEAR);
                    civKerbal = new CivPopKerbal(kerbalName, gender, birthdate, false);
                }
                bool civilian = "Civilian".Equals(kerbal.trait);
                civKerbal.SetCivilian(civilian);
                if (ProtoCrewMember.RosterStatus.Assigned.Equals(kerbal.rosterStatus))
                {
                    repo.Add(civKerbal);
                }
                else
                {
                    repo.Remove(civKerbal);
                }
            }

            foreach (Vessel vessel in FlightGlobals.Vessels)
            {
                CivPopVessel civVessel;
                if (vessel != null && !repo.VesselExists(vessel.id.ToString()))
                {
                    civVessel = new CivPopVessel(vessel);
                }
                else
                {
                    civVessel = repo.GetVessel(vessel.id.ToString());
                }
                civVessel.SetOrbiting(!vessel.LandedOrSplashed);
                civVessel.SetBody(new Domain.CelestialBody(vessel.mainBody.name, GetBodyType(vessel.mainBody)));

                foreach (VesselModule module in vessel.vesselModules)
                {
                    if (module.GetType() == typeof(CivilianPopulationVesselModule))
                    {
                        CivilianPopulationVesselModule civModule = (CivilianPopulationVesselModule)module;
                        civVessel.SetCapacity(civModule.capacity);
                        civVessel.SetAllowDocking(civModule.allowDocking);
                        civVessel.SetAllowBreeding(civModule.allowBreeding);
                    }
                }

                foreach (ProtoCrewMember kerbal in vessel.GetVesselCrew())
                {
                    CivPopKerbal civKerbal = repo.GetKerbal(kerbal.name);
                    if (civKerbal != null)
                    {
                        civKerbal.SetVesselId(vessel.id.ToString());
                    }
                }
                repo.Add(civVessel);
            }

            foreach (CivPopVessel civVessel in repo.GetVessels())
            {
                bool found = false;
                foreach (Vessel vessel in FlightGlobals.Vessels)
                {
                    if (vessel != null && vessel.id.ToString().Equals(civVessel.GetId()))
                    {
                        found = true;
                        break;
                    }
                }
                if (!found)
                {
                    repo.Remove(civVessel);
                }
            }
        }
Ejemplo n.º 33
0
 public void SetCrew(ProtoCrewMember pcm)
 {
     this._pcm = pcm;
     gender = pcm.gender;
     name = pcm.name;
     experienceTrait = pcm.experienceTrait.TypeName;
     kerbalType = pcm.type;
 }
Ejemplo n.º 34
0
 public CrewMember(string n, ProtoCrewMember.KerbalType t, int e)
 {
     name            = n;
     type            = t;
     experienceLevel = e;
 }
Ejemplo n.º 35
0
 public ProtoCrewMember(ProtoCrewMember.KerbalType type);
Ejemplo n.º 36
0
 public ProtoCrewMember(Game.Modes mode, ConfigNode node, ProtoCrewMember.KerbalType crewType = ProtoCrewMember.KerbalType.Crew);
Ejemplo n.º 37
0
        public void DodgeKerbals(ConfigNode inputNode, Guid protovesselID)
        {
            List <string> takenKerbals = new List <string>();

            foreach (ConfigNode partNode in inputNode.GetNodes("PART"))
            {
                int crewIndex = 0;
                foreach (string currentKerbalName in partNode.GetValues("crew"))
                {
                    if (kerbalToVessel.ContainsKey(currentKerbalName) ? kerbalToVessel[currentKerbalName] != protovesselID : false)
                    {
                        ProtoCrewMember        newKerbal       = null;
                        ProtoCrewMember.Gender newKerbalGender = GetKerbalGender(currentKerbalName);
                        string newExperienceTrait = null;
                        if (HighLogic.CurrentGame.CrewRoster.Exists(currentKerbalName))
                        {
                            ProtoCrewMember oldKerbal = HighLogic.CurrentGame.CrewRoster[currentKerbalName];
                            newKerbalGender    = oldKerbal.gender;
                            newExperienceTrait = oldKerbal.experienceTrait.TypeName;
                        }
                        foreach (ProtoCrewMember possibleKerbal in HighLogic.CurrentGame.CrewRoster.Crew)
                        {
                            bool kerbalOk = true;
                            if (kerbalOk && kerbalToVessel.ContainsKey(possibleKerbal.name) && (takenKerbals.Contains(possibleKerbal.name) || kerbalToVessel[possibleKerbal.name] != protovesselID))
                            {
                                kerbalOk = false;
                            }
                            if (kerbalOk && possibleKerbal.gender != newKerbalGender)
                            {
                                kerbalOk = false;
                            }
                            if (kerbalOk && newExperienceTrait != null && newExperienceTrait != possibleKerbal.experienceTrait.TypeName)
                            {
                                kerbalOk = false;
                            }
                            if (kerbalOk)
                            {
                                newKerbal = possibleKerbal;
                                break;
                            }
                        }
                        int kerbalTries = 0;
                        while (newKerbal == null)
                        {
                            bool kerbalOk = true;
                            ProtoCrewMember.KerbalType kerbalType = ProtoCrewMember.KerbalType.Crew;
                            if (newExperienceTrait == "Tourist")
                            {
                                kerbalType = ProtoCrewMember.KerbalType.Tourist;
                            }
                            if (newExperienceTrait == "Unowned")
                            {
                                kerbalType = ProtoCrewMember.KerbalType.Unowned;
                            }
                            ProtoCrewMember possibleKerbal = HighLogic.CurrentGame.CrewRoster.GetNewKerbal(kerbalType);
                            if (kerbalTries < 200 && possibleKerbal.gender != newKerbalGender)
                            {
                                kerbalOk = false;
                            }
                            if (kerbalTries < 100 && newExperienceTrait != null && newExperienceTrait != possibleKerbal.experienceTrait.TypeName)
                            {
                                kerbalOk = false;
                            }
                            if (kerbalOk)
                            {
                                newKerbal = possibleKerbal;
                            }
                            kerbalTries++;
                        }
                        DarkLog.Debug("Generated dodged kerbal with " + kerbalTries + " tries");
                        partNode.SetValue("crew", newKerbal.name, crewIndex);
                        newKerbal.seatIdx      = crewIndex;
                        newKerbal.rosterStatus = ProtoCrewMember.RosterStatus.Assigned;
                        takenKerbals.Add(newKerbal.name);
                    }
                    else
                    {
                        takenKerbals.Add(currentKerbalName);
                        CreateKerbalIfMissing(currentKerbalName, protovesselID);
                        HighLogic.CurrentGame.CrewRoster[currentKerbalName].rosterStatus = ProtoCrewMember.RosterStatus.Assigned;
                        HighLogic.CurrentGame.CrewRoster[currentKerbalName].seatIdx      = crewIndex;
                    }
                    crewIndex++;
                }
            }
            vesselToKerbal[protovesselID] = takenKerbals;
            foreach (string name in takenKerbals)
            {
                kerbalToVessel[name] = protovesselID;
            }
        }
Ejemplo n.º 38
0
        public void Initialize(ProtoCrewMember.Gender? gender = null, string name = null)
        {
            if (name != null)
            {
                this.name = name;
                _pcm = pcm;
            }

            if (gender != null)
            {
                this.gender = gender.Value;
            }
            else
            {
                this.gender = RandomGender();
            }

            if (_pcm != null)
            {
                SetCrew(_pcm);
            }
            else
            {
                this.name = name ?? KerbalName(this.gender);
                experienceTrait = RandomExperienceTrait();
                kerbalType = ProtoCrewMember.KerbalType.Crew;
            }
        }
Ejemplo n.º 39
0
        public static RMKerbal CreateKerbal(ProtoCrewMember.KerbalType kerbalType)
        {
            ProtoCrewMember kerbal = CrewGenerator.RandomCrewMemberPrototype(kerbalType);

            return(new RMKerbal(Planetarium.GetUniversalTime(), kerbal, true, false));
        }
Ejemplo n.º 40
0
 public RMKerbal(double currentTime, ProtoCrewMember kerbal, bool isnew, bool modKerbal)
 {
     LastUpdate = currentTime;
     Kerbal     = kerbal;
     IsNew      = isnew;
     Name       = kerbal.name;
     if (isnew)
     {
         Trait      = kerbal.trait;
         Type       = kerbal.type;
         Status     = kerbal.rosterStatus;
         VesselId   = Guid.Empty;
         VesselName = string.Empty;
         double diceMinage = _rnd.Next(RMLifeSpan.Instance.RMGameSettings.MinimumAge - 3, RMLifeSpan.Instance.RMGameSettings.MinimumAge + 3); // Randomly set their age.
         Age = diceMinage;
         double diceMaxage = _rnd.Next(RMLifeSpan.Instance.RMGameSettings.MaximumAge - 5, RMLifeSpan.Instance.RMGameSettings.MaximumAge + 5); // Randomly set their age.
         Lifespan         = diceMaxage;
         TimelastBirthday = currentTime;
         TimeNextBirthday = BirthdayNextDue(currentTime);
         Timelastsalary   = currentTime;
         TimeSalaryDue    = SalaryNextDue(currentTime);
         Salary           = RMLifeSpan.Instance.RMGameSettings.DefaultSalary;
         if (Api.InstalledMods.IsDfInstalled)
         {
             if (kerbal.rosterStatus == ProtoCrewMember.RosterStatus.Dead && kerbal.type == ProtoCrewMember.KerbalType.Unowned) // if they are frozen store time frozen
             {
                 if (RMAddon.FrozenKerbals.ContainsKey(kerbal.name))
                 {
                     TimeDfFrozen = RMAddon.FrozenKerbals[kerbal.name].LastUpdate;
                 }
             }
         }
         Name       = kerbal.name;
         Stupidity  = kerbal.stupidity;
         Courage    = kerbal.courage;
         Badass     = kerbal.isBadass;
         Gender     = kerbal.gender;
         Suit       = kerbal.suit;
         Skill      = kerbal.experienceLevel;
         Experience = kerbal.experience;
         Kerbal     = kerbal;
     }
     if (!modKerbal)
     {
         return;
     }
     Stupidity = kerbal.stupidity;
     Courage   = kerbal.courage;
     Badass    = kerbal.isBadass;
     if (SalaryContractDispute)
     {
         RealTrait = kerbal.trait;
         Trait     = "Tourist";
         KerbalRoster.SetExperienceTrait(kerbal, Trait);
     }
     else
     {
         if (Status == ProtoCrewMember.RosterStatus.Assigned)
         {
             UnregisterExperienceTrait(this);
         }
         Trait     = kerbal.trait;
         RealTrait = kerbal.trait;
         KerbalRoster.SetExperienceTrait(kerbal, Trait);
         if (Status == ProtoCrewMember.RosterStatus.Assigned)
         {
             RegisterExperienceTrait(this);
         }
     }
     Gender     = kerbal.gender;
     Suit       = kerbal.suit;
     Skill      = kerbal.experienceLevel;
     Experience = kerbal.experience;
 }