Пример #1
0
        public static float GetProductivityBonus(Part part, string ExperienceEffect, float SpecialistEfficiencyFactor, float ProductivityFactor)
        {
            float adjustedProductivity = ProductivityFactor;

            try
            {
                int crewCount = part.protoModuleCrew.Count;
                if (crewCount == 0)
                {
                    return(ProductivityFactor);
                }

                ProtoCrewMember worker;
                GameParameters.AdvancedParams advancedParams = HighLogic.CurrentGame.Parameters.CustomParams <GameParameters.AdvancedParams>();
                float productivityBonus = 1.0f;

                //Find all crews with the build skill and adjust productivity based upon their skill
                for (int index = 0; index < crewCount; index++)
                {
                    worker = part.protoModuleCrew[index];

                    //Adjust productivity if efficiency is enabled
                    if (WorkshopOptions.EfficiencyEnabled)
                    {
                        if (worker.HasEffect(ExperienceEffect))
                        {
                            if (advancedParams.EnableKerbalExperience)
                            {
                                productivityBonus = worker.experienceTrait.CrewMemberExperienceLevel() * SpecialistEfficiencyFactor;
                            }
                            else
                            {
                                productivityBonus = 5.0f * SpecialistEfficiencyFactor;
                            }
                        }

                        //Adjust for stupidity
                        if (WorkshopOptions.StupidityAffectsEfficiency)
                        {
                            productivityBonus *= (1 - worker.stupidity);
                        }

                        adjustedProductivity += productivityBonus;
                    }
                }
            }
            catch (Exception ex)
            {
                LogError("Error encountered while trying to calculate productivity bonus", ex);
            }

            return(adjustedProductivity);
        }
Пример #2
0
        public static bool IsExperienceEnabled()
        {
            if (HighLogic.CurrentGame == null)
            {
                return(false);
            }

            GameParameters.AdvancedParams advancedParams = HighLogic.CurrentGame.Parameters.CustomParams <GameParameters.AdvancedParams>();
            if (advancedParams != null)
            {
                return(advancedParams.KerbalExperienceEnabled(HighLogic.CurrentGame.Mode));
            }
            return(false);
        }
Пример #3
0
        private void HandleServerSettings(byte[] messageData)
        {
            using (MessageReader mr = new MessageReader(messageData))
            {
                WarpWorker.fetch.warpMode = (WarpMode)mr.Read<int>();
                Client.fetch.gameMode = (GameMode)mr.Read<int>();
                Client.fetch.serverAllowCheats = mr.Read<bool>();
                numberOfKerbals = mr.Read<int>();
                numberOfVessels = mr.Read<int>();
                ScreenshotWorker.fetch.screenshotHeight = mr.Read<int>();
                AsteroidWorker.fetch.maxNumberOfUntrackedAsteroids = mr.Read<int>();
                ChatWorker.fetch.consoleIdentifier = mr.Read<string>();
                Client.fetch.serverDifficulty = (GameDifficulty)mr.Read<int>();
                VesselWorker.fetch.safetyBubbleDistance = mr.Read<float>();
                if (Client.fetch.serverDifficulty != GameDifficulty.CUSTOM)
                {
                    Client.fetch.serverParameters = GameParameters.GetDefaultParameters(Client.fetch.ConvertGameMode(Client.fetch.gameMode), (GameParameters.Preset)Client.fetch.serverDifficulty);
                }
                else
                {
                    GameParameters newParameters = new GameParameters();
                    GameParameters.AdvancedParams newAdvancedParameters = new GameParameters.AdvancedParams();
                    CommNet.CommNetParams newCommNetParameters = new CommNet.CommNetParams();
                    newParameters.Difficulty.AllowStockVessels = mr.Read<bool>();
                    newParameters.Difficulty.AutoHireCrews = mr.Read<bool>();
                    newParameters.Difficulty.BypassEntryPurchaseAfterResearch = mr.Read<bool>();
                    newParameters.Difficulty.IndestructibleFacilities = mr.Read<bool>();
                    newParameters.Difficulty.MissingCrewsRespawn = mr.Read<bool>();
                    newParameters.Difficulty.ReentryHeatScale = mr.Read<float>();
                    newParameters.Difficulty.ResourceAbundance = mr.Read<float>();
                    newParameters.Flight.CanQuickLoad = newParameters.Flight.CanRestart = newParameters.Flight.CanLeaveToEditor = mr.Read<bool>();
                    newParameters.Career.FundsGainMultiplier = mr.Read<float>();
                    newParameters.Career.FundsLossMultiplier = mr.Read<float>();
                    newParameters.Career.RepGainMultiplier = mr.Read<float>();
                    newParameters.Career.RepLossMultiplier = mr.Read<float>();
                    newParameters.Career.RepLossDeclined = mr.Read<float>();
                    newParameters.Career.ScienceGainMultiplier = mr.Read<float>();
                    newParameters.Career.StartingFunds = mr.Read<float>();
                    newParameters.Career.StartingReputation = mr.Read<float>();
                    newParameters.Career.StartingScience = mr.Read<float>();
                    //New KSP 1.2 Settings
                    newParameters.Difficulty.RespawnTimer = mr.Read<float>();
                    newParameters.Difficulty.EnableCommNet = mr.Read<bool>();
                    newParameters.CustomParams<GameParameters.AdvancedParams>().EnableKerbalExperience = mr.Read<bool>();
                    newParameters.CustomParams<GameParameters.AdvancedParams>().ImmediateLevelUp = mr.Read<bool>();
                    newParameters.CustomParams<GameParameters.AdvancedParams>().AllowNegativeCurrency = mr.Read<bool>();
                    newParameters.CustomParams<GameParameters.AdvancedParams>().ResourceTransferObeyCrossfeed = mr.Read<bool>();
                    newParameters.CustomParams<GameParameters.AdvancedParams>().BuildingImpactDamageMult = mr.Read<float>();
                    newParameters.CustomParams<GameParameters.AdvancedParams>().PartUpgradesInCareer = newParameters.CustomParams<GameParameters.AdvancedParams>().PartUpgradesInSandbox = mr.Read<bool>();
                    newParameters.CustomParams<GameParameters.AdvancedParams>().PressurePartLimits = newParameters.CustomParams<GameParameters.AdvancedParams>().GPartLimits = newParameters.CustomParams<GameParameters.AdvancedParams>().GKerbalLimits = mr.Read<bool>();
                    newParameters.CustomParams<GameParameters.AdvancedParams>().KerbalGToleranceMult = mr.Read<float>();
                    newParameters.CustomParams<CommNet.CommNetParams>().requireSignalForControl = mr.Read<bool>();
                    newParameters.CustomParams<CommNet.CommNetParams>().plasmaBlackout = mr.Read<bool>();
                    newParameters.CustomParams<CommNet.CommNetParams>().rangeModifier = mr.Read<float>();
                    newParameters.CustomParams<CommNet.CommNetParams>().DSNModifier = mr.Read<float>();
                    newParameters.CustomParams<CommNet.CommNetParams>().occlusionMultiplierVac = mr.Read<float>();
                    newParameters.CustomParams<CommNet.CommNetParams>().occlusionMultiplierAtm = mr.Read<float>();
                    newParameters.CustomParams<CommNet.CommNetParams>().enableGroundStations = mr.Read<bool>();

                    Client.fetch.serverParameters = newParameters;
                }
            }
        }