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 CalculateRepairCosts() { ConfigNode snapshot; int maxQuality = 0; int integrationBonus = -1; int flightExperienceBonus = BARISScenario.DefaultFlightBonus; int qualityCap = -1; int repairCount = 0; int quality = 5; int vabBonus = BARISScenario.Instance.GetIntegrationCap(true); int sphBonus = BARISScenario.Instance.GetIntegrationCap(false); for (int index = 0; index < qualityModuleSnapshots.Length; index++) { //Get the snapshot snapshot = qualityModuleSnapshots[index].moduleValues; //Setup default values integrationBonus = -1; flightExperienceBonus = BARISScenario.DefaultFlightBonus; qualityCap = -1; repairCount = 0; quality = 5; //Get the stats we need if (snapshot.HasValue("quality")) { quality = int.Parse(qualityModuleSnapshots[index].moduleValues.GetValue("quality")); } if (snapshot.HasValue("qualityCap")) { qualityCap = int.Parse(qualityModuleSnapshots[index].moduleValues.GetValue("qualityCap")); } if (snapshot.HasValue("integrationBonus")) { integrationBonus = int.Parse(qualityModuleSnapshots[index].moduleValues.GetValue("integrationBonus")); } if (snapshot.HasValue("flightExperienceBonus")) { flightExperienceBonus = int.Parse(qualityModuleSnapshots[index].moduleValues.GetValue("flightExperienceBonus")); } if (snapshot.HasValue("repairCount")) { repairCount = int.Parse(qualityModuleSnapshots[index].moduleValues.GetValue("repairCount")); } //Estimate integration bonus if needed. if (integrationBonus == -1) { if (vabBonus > sphBonus) { integrationBonus = vabBonus; } else { integrationBonus = sphBonus; } } //Accumulate max quality. maxQuality += BARISScenario.GetMaxQuality(quality, integrationBonus, flightExperienceBonus, qualityCap, repairCount); } //Calculate the time repairCostTime = Mathf.RoundToInt(maxQuality / BARISScenario.MaxWorkersPerBay); if (repairCostTime <= BARISScenario.MinimumTigerTeamRepairDays) { repairCostTime = BARISScenario.MinimumTigerTeamRepairDays; } //Calculate the funding cost repairCostFunds = repairCostTime * BARISScenario.MaxWorkersPerBay * BARISScenario.PayrollPerWorker * BARISScenario.RepairFactor; //Calculate the science cost repairCostScience = (float)repairCostTime * BARISScenario.RepairFactor; }
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)); } }
public void DeclareVesselFixed() { ConfigNode snapshot; int currentQuality = 0; int integrationBonus = -1; int flightExperienceBonus = BARISScenario.DefaultFlightBonus; int qualityCap = -1; int repairCount = 0; int quality = 5; int vabBonus = BARISScenario.Instance.GetIntegrationCap(true); int sphBonus = BARISScenario.Instance.GetIntegrationCap(false); double mtbfBonus = 600.0f; double mtbf = 600.0f; double mtbfCap = BARISScenario.MTBFCap; float mtbfRepairMultiplier = 0.7f; double currentMTBF = 0; for (int index = 0; index < qualityModuleSnapshots.Length; index++) { //Get the snapshot snapshot = qualityModuleSnapshots[index].moduleValues; //Setup default values integrationBonus = -1; flightExperienceBonus = BARISScenario.DefaultFlightBonus; qualityCap = -1; repairCount = 0; quality = 5; //Get the stats we need if (snapshot.HasValue("quality")) { quality = int.Parse(qualityModuleSnapshots[index].moduleValues.GetValue("quality")); } if (snapshot.HasValue("qualityCap")) { qualityCap = int.Parse(qualityModuleSnapshots[index].moduleValues.GetValue("qualityCap")); } if (snapshot.HasValue("integrationBonus")) { integrationBonus = int.Parse(qualityModuleSnapshots[index].moduleValues.GetValue("integrationBonus")); } if (snapshot.HasValue("flightExperienceBonus")) { flightExperienceBonus = int.Parse(qualityModuleSnapshots[index].moduleValues.GetValue("flightExperienceBonus")); } if (snapshot.HasValue("repairCount")) { repairCount = int.Parse(qualityModuleSnapshots[index].moduleValues.GetValue("repairCount")); } if (snapshot.HasValue("mtbfRepairMultiplier")) { mtbfRepairMultiplier = float.Parse(qualityModuleSnapshots[index].moduleValues.GetValue("mtbfRepairMultiplier")); } if (snapshot.HasValue("mtbfBonus")) { mtbfBonus = double.Parse(qualityModuleSnapshots[index].moduleValues.GetValue("mtbfBonus")); } if (snapshot.HasValue("mtbf")) { mtbf = double.Parse(qualityModuleSnapshots[index].moduleValues.GetValue("mtbf")); } if (snapshot.HasValue("mtbfCap")) { mtbfCap = double.Parse(qualityModuleSnapshots[index].moduleValues.GetValue("mtbfCap")); } //Estimate integration bonus if needed. if (integrationBonus == -1) { if (vabBonus > sphBonus) { integrationBonus = vabBonus; } else { integrationBonus = sphBonus; } } //Increment repair count repairCount += 1; qualityModuleSnapshots[index].moduleValues.SetValue("repairCount", repairCount); //Reset current quality currentQuality = BARISScenario.GetMaxQuality(quality, integrationBonus, flightExperienceBonus, qualityCap, repairCount); if (currentQuality > quality) { currentQuality = quality; } qualityModuleSnapshots[index].moduleValues.SetValue("currentQuality", currentQuality); //Reset current MTBF currentMTBF = BARISScenario.GetMaxMTBF(mtbf, mtbfCap, repairCount, mtbfRepairMultiplier, mtbfBonus); if (currentMTBF > mtbf) { currentMTBF = mtbf; } qualityModuleSnapshots[index].moduleValues.SetValue("currentMTBF", currentMTBF); //Declare the part fixed qualityModuleSnapshots[index].moduleValues.SetValue("isFixedOnStart", true); qualityModuleSnapshots[index].moduleValues.SetValue("isBrokenOnStart", false); } }