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; } } } }
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; }
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; } }
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); } }
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); } }
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; }
public Kerbal(Kerbal k) { _pcm = k._pcm; name = k.name; gender = k.gender; experienceTrait = k.experienceTrait; kerbalType = k.kerbalType; }
/// <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); }
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; }
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)); }
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; }
/// <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); } }
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; }
/// <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(); } }
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(); }
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(); }
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)); } }
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); } }
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; } } }
} // 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()
/// <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); } }
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; }
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); } } }
public CrewMember(string n, ProtoCrewMember.KerbalType t, int e) { name = n; type = t; experienceLevel = e; }
public ProtoCrewMember(ProtoCrewMember.KerbalType type);
public ProtoCrewMember(Game.Modes mode, ConfigNode node, ProtoCrewMember.KerbalType crewType = ProtoCrewMember.KerbalType.Crew);
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; } }
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; } }
public static RMKerbal CreateKerbal(ProtoCrewMember.KerbalType kerbalType) { ProtoCrewMember kerbal = CrewGenerator.RandomCrewMemberPrototype(kerbalType); return(new RMKerbal(Planetarium.GetUniversalTime(), kerbal, true, false)); }
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; }