Example #1
0
/*************************************************************************************************************************/
        public void contract_routine(Contracts.Contract input_contract)
        {
#if DEBUG
            //if (Debug_Level_1_Active)
            Log.PushStackInfo("FMRS_Core.contract_routine", "enter vcontract_routine(Contracts.Contract input_contract) " + input_contract.Title);
            if (Debug_Active)
            {
                Log.Info("contract " + input_contract.Title + " " + input_contract.ContractState.ToString());
            }
#endif
            if (HighLogic.CurrentGame.Mode != Game.Modes.CAREER)
            {
#if DEBUG
                if (Debug_Active)
                {
                    Log.Info("not in carreer mode, leave contract_routine(Contracts.Contract input_contract)");
                }
#endif
                return;
            }

            if (!contract_complete.ContainsKey(FlightGlobals.ActiveVessel.id))
            {
                contract_complete.Add(FlightGlobals.ActiveVessel.id, new List <Contract>());
            }

            contract_complete[FlightGlobals.ActiveVessel.id].Add(input_contract);
#if DEBUG
            //if (Debug_Level_1_Active)
            Log.PopStackInfo("leave vcontract_routine(Contracts.Contract input_contract)");
#endif
        }
Example #2
0
 void OnDeclined(Contracts.Contract contract)
 {
     if (MissionControl.Instance == null)
     {
         return;
     }
     declineCost += HighLogic.CurrentGame.Parameters.Career.RepLossDeclined;
     declineContracts++;
     Log("A contract has been declined!", "QGUI");
 }
        //Used for initial orbital and surface survey parameter
        internal static DMCollectScience fetchSurveyScience(Contract.ContractPrestige c, List<CelestialBody> cR, List<CelestialBody> cUR, DMScienceContainer DMScience)
        {
            CelestialBody body;
            ExperimentSituations targetSituation;
            ScienceSubject sub;
            AvailablePart aPart;
            string name;
            string biome = "";

            name = DMUtils.availableScience["All"].FirstOrDefault(n => n.Value == DMScience).Key;

            //Determine if the science part is available if applicable
            if (DMScience.SciPart != "None")
            {
                aPart = PartLoader.getPartInfoByName(DMScience.SciPart);
                if (aPart == null)
                    return null;
                if (!ResearchAndDevelopment.PartModelPurchased(aPart))
                    return null;
            }

            body = DMUtils.nextTargetBody(c, cR, cUR);
            if (body == null)
                return null;

            //Make sure our experiment is OK
            if (DMScience.Exp == null)
                return null;

            if (!body.atmosphere && DMScience.Exp.requireAtmosphere)
                return null;
            if (((ExperimentSituations)DMScience.SitMask & ExperimentSituations.InSpaceHigh) == ExperimentSituations.InSpaceHigh && ((ExperimentSituations)DMScience.SitMask & ExperimentSituations.InSpaceLow) == ExperimentSituations.InSpaceLow)
            {
                if (rand.Next(0, 2) == 0)
                    targetSituation = ExperimentSituations.InSpaceHigh;
                else
                    targetSituation = ExperimentSituations.InSpaceLow;
            }
            else if (((ExperimentSituations)DMScience.SitMask & ExperimentSituations.InSpaceHigh) == ExperimentSituations.InSpaceHigh)
                targetSituation = ExperimentSituations.InSpaceHigh;
            else
                targetSituation = ExperimentSituations.InSpaceLow;

            if (DMUtils.biomeRelevant(targetSituation, DMScience.BioMask) && targetSituation != ExperimentSituations.SrfSplashed)
            {
                List<string> bList = DMUtils.fetchBiome(body, DMScience.Exp, targetSituation);
                if (bList.Count == 0)
                {
                    return null;
                }
                else
                {
                    biome = bList[rand.Next(0, bList.Count)];
                }
            }

            //Make sure that our chosen science subject has science remaining to be gathered
            string subId = string.Format("{0}@{1}{2}{3}", DMScience.Exp.id, body.name, targetSituation, biome.Replace(" ", ""));

            if (ResearchAndDevelopment.GetSubjects().Any(s => s.id == subId))
            {
                sub = ResearchAndDevelopment.GetSubjectByID(subId);
                if (sub.scientificValue < 0.5f)
                    return null;
            }

            return new DMCollectScience(body, targetSituation, "", name, 0);
        }