Пример #1
0
        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);
        }
Пример #2
0
        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));
            }
        }