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); }
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); }
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; } } }