protected void addFlightExperience() { List <ModuleQualityControl> qualityModules = FlightGlobals.ActiveVessel.FindPartModulesImplementing <ModuleQualityControl>(); foreach (ModuleQualityControl qualityModule in qualityModules) { //Add flight experience BARISScenario.Instance.RecordFlightExperience(qualityModule.part, 5); //Now recalcuate quality qualityModule.flightExperienceBonus = BARISScenario.Instance.GetFlightBonus(qualityModule.part); qualityModule.quality = qualityModule.GetMaxQuality(); qualityModule.currentQuality = qualityModule.quality; qualityModule.UpdateQualityDisplay(BARISScenario.GetConditionSummary(qualityModule.currentMTBF, qualityModule.MaxMTBF, qualityModule.currentQuality, qualityModule.quality)); debugLog(qualityModule.part.partInfo.title + " Flight Experience: " + qualityModule.flightExperienceBonus + " New Quality: " + qualityModule.quality); } //Update editor bays BARISScenario.Instance.UpdateEditorBayFlightBonuses(); //Update the cache UpdateCachedData(); //Save the game GamePersistence.SaveGame("persistent", HighLogic.SaveFolder, SaveMode.OVERWRITE); }
public void onPartBroken(BaseQualityControl moduleQualityControl) { if (!isRunning || moduleQualityControl.part == this.part) { return; } ModuleQualityControl qualityModule = null; if (moduleQualityControl is ModuleQualityControl) { qualityModule = (ModuleQualityControl)moduleQualityControl; } if (qualityModule == null) { return; } //Record original highlight color qualityModule.originalHighlightColor = qualityModule.part.highlightColor; //Set broken highlight color qualityModule.part.highlightColor = Color.red; qualityModule.part.Highlight(true); //Roll RNG to see if the part gains quality. int rollResult = UnityEngine.Random.Range(minDieRoll, maxDieRoll); string partTitle = string.Empty; int totalQuality = 0; string message = ""; //If we've met our target number then improve part quality. if (rollResult >= improveQualityTargetNumber) { //Get the part title partTitle = qualityModule.part.partInfo.title; //Don't exceed max quality. totalQuality = qualityModule.quality + BARISScenario.Instance.GetFlightBonus(qualityModule.part); if (totalQuality + qualityImprovementAmount <= BARISBridge.QualityCap) { //Record the flight experience. BARISScenario.Instance.RecordFlightExperience(qualityModule.part, BARISBridge.FlightsPerQualityBonus * qualityImprovementAmount); //Calculate the new quality rating. totalQuality = qualityModule.quality + BARISScenario.Instance.GetFlightBonus(qualityModule.part); message = partTitle + " " + BARISScenario.QualityLabel + totalQuality; //Inform the user. ScreenMessages.PostScreenMessage(message, BARISScenario.MessageDuration, ScreenMessageStyle.UPPER_CENTER); } else { //Max quality reached. message = partTitle + Localizer.Format(BARISScenario.kMaxQualityReached); //Inform the user. ScreenMessages.PostScreenMessage(message, BARISScenario.MessageDuration, ScreenMessageStyle.UPPER_CENTER); } } //Roll to see if the vessel explodes. If not then increase the chances slightly. float explodeResult = UnityEngine.Random.Range(0f, 100.0f); if (explodeResult >= (100.0f - vesselExplodeProbability)) { for (int index = 0; index < qualityModules.Length; index++) { qualityModules[index].SetMarkedForDeath(true); } } else { vesselExplodeProbability += explodeProbabilityIncrement; //Update quality qualityModule.quality = totalQuality; qualityModule.UpdateQualityDisplay(BARISScenario.GetConditionSummary(qualityModule.currentMTBF, qualityModule.MaxMTBF, qualityModule.currentQuality, qualityModule.MaxQuality)); } }