protected override void OnLoad(ConfigNode node)
        {
            base.OnLoad(node);

            body2Shoot = MerillUtil.getPlanet(node.GetValue("body"));

            situationForShoot = (ExperimentSituations)System.Enum.Parse(typeof(ExperimentSituations), node.GetValue("situation"));

            useKerbal = node.GetValue("withKerbal").Equals("true");
        }
        protected override void OnLoad(ConfigNode node)
        {
            //MerillData.log(" contract photo OnLoad ");
            base.OnLoad(node);
            if (node.GetValue("body2Shoot") == "null")
            {
                body2Shoot = null;
                //MerillData.log(" contract photo body null ");
            }
            else
            {
                body2Shoot = MerillUtil.getPlanet(node.GetValue("body2Shoot"));
            }

            situationForShoot = (ExperimentSituations)System.Enum.Parse(typeof(ExperimentSituations), node.GetValue("situation"));

            useKerbal = node.GetValue("withKerbal").Equals("true");
        }
        //omg, it's called a big amount of time
        protected override bool Generate()
        {
            //if (base.Prestige != ContractPrestige.Significant)
            //{
            //	return false;
            //}
            //MerillData.log("camera mission generate");

            //TODO use/create 'KTV' (KerbalTV)
            if (Contracts.Agents.AgentList.Instance != null)
            {
                agent = Contracts.Agents.AgentList.Instance.GetAgent(MerillData.str_agent_secretary);
            }


            //1 human day in kerbal days
            //SetDeadlineDays(4);
            base.deadlineType = DeadlineType.None;
            base.expiryType   = DeadlineType.None;

            //choose a body
            this.body2Shoot = MerillUtil.getPlanet("Mun");
            //default (erase latter)
            this.useKerbal         = false;
            this.situationForShoot = ExperimentSituations.InSpaceLow;

            //check if a contract of this type with a kerbal is already taken
            bool alreadyHereKerbal = false;
            bool alreadyHereProbe  = false;

            foreach (MerillContractUseCamera oldContract in ContractSystem.Instance.GetCompletedContracts <MerillContractUseCamera>())
            {
                if (oldContract.body2Shoot == body2Shoot && oldContract.useKerbal)
                {
                    alreadyHereKerbal = true;
                    MerillData.log("camera mission manned already done / here");
                }
                if (oldContract.body2Shoot == body2Shoot && !oldContract.useKerbal)
                {
                    alreadyHereProbe = true;
                    MerillData.log("camera mission probe already done / here");
                }
            }
            //check if it's in available contract
            if (!alreadyHereKerbal || !alreadyHereProbe)
            {
                //MerillData.log("camera mission generated? " + ContractSystem.Instance.Contracts.Count);
                foreach (Contract tempContract in ContractSystem.Instance.Contracts)
                {
                    if (tempContract is MerillContractUseCamera)
                    {
                        if (((MerillContractUseCamera)tempContract).body2Shoot == body2Shoot &&
                            ((MerillContractUseCamera)tempContract).useKerbal)
                        {
                            MerillData.log("camera mission kerbal generated? true! ");
                            alreadyHereKerbal = true;
                        }
                        if (((MerillContractUseCamera)tempContract).body2Shoot == body2Shoot &&
                            !((MerillContractUseCamera)tempContract).useKerbal)
                        {
                            MerillData.log("camera mission probe generated? true! ");
                            alreadyHereProbe = true;
                        }
                    }
                }
            }

            if (!alreadyHereKerbal)
            {
                situationForShoot = ExperimentSituations.InSpaceLow;
                useKerbal         = true;
                ContractParameter parameter = AddParameter(new MerillContractParameterCameraFooting(body2Shoot, situationForShoot, true));
                //MerillData.log("camera mission generate manned "+GetTitle());
                parameter.SetReputation(20);

                //advance, reward, failure
                //BTSM fly by mission:160k total needed: 200k
                SetFunds(0, 30000, 0);

                //reward, failure
                SetReputation(0, 0);
            }
            else if (!alreadyHereProbe)
            {
                useKerbal = false;
                //MerillData.log("camera mission generate unmanned");
                //is highorbit?
                //0 : none, 1= HO, 2=LO , 3 = landed
                //int situation = 0;
                //foreach (MerillContractUseCamera oldContract in ContractSystem.Instance.GetCompletedContracts<MerillContractUseCamera>())
                //{
                //	if(oldContract.body2Shoot == body2Shoot){
                //		if(oldContract.situationForShoot == ExperimentSituations.InSpaceHigh)
                //		{
                //			situation = Math.Max(situation, 1);
                //			coeff = 1;
                //		}
                //		else if(oldContract.situationForShoot == ExperimentSituations.InSpaceLow)
                //		{
                //			situation = Math.Max(situation, 2);
                //			coeff = 1;
                //		}
                //		else if(oldContract.situationForShoot == ExperimentSituations.SrfLanded)
                //		{
                //			situation = Math.Max(situation, 3);
                //			coeff = 2;
                //		}
                //	}
                //}
                //if(situation == 0){
                //	situationForShoot = ExperimentSituations.InSpaceHigh;
                //}else if(situation == 1){
                //	situationForShoot = ExperimentSituations.InSpaceLow;
                //}else if(situation == 2){
                //	situationForShoot = ExperimentSituations.SrfLanded;
                //}else{
                //	//all are done
                //	return false;
                //}
                ////MerillData.log("camera mission generate UNmanned " + string.Format(GetTitle(), body2Shoot.name, situationForShoot.ToString()) );

                ////is already active?
                //foreach (MerillContractUseCamera currentContract in ContractSystem.Instance.GetCurrentContracts<MerillContractUseCamera>())
                //{
                //	//MerillData.log("camera mission find current " + currentContract.useKerbal + ", " + currentContract.body2Shoot + ", " + currentContract.situationForShoot);
                //	if (!currentContract.useKerbal && currentContract.body2Shoot == body2Shoot && currentContract.situationForShoot == situationForShoot)
                //	{
                //		//MerillData.log("camera mission return false");
                //		return false;
                //	}
                //}

                //all green : generate parameter
                ContractParameter parameter1 = AddParameter(new MerillContractParameterCameraFooting(body2Shoot, ExperimentSituations.InSpaceHigh, false));
                ContractParameter parameter2 = AddParameter(new MerillContractParameterCameraFooting(body2Shoot, ExperimentSituations.InSpaceLow, false));
                ContractParameter parameter3 = AddParameter(new MerillContractParameterCameraFooting(body2Shoot, ExperimentSituations.SrfLanded, false));

                //130k via btsm "explore body"
                parameter3.SetFunds(30000);
                //parameter3.SetReputation(10);

                //18k for btsm " explore body" -> need 50k
                parameter1.SetFunds(30000);
                parameter2.SetFunds(30000);

                //reputation
                parameter1.SetReputation(5);
                parameter2.SetReputation(5);
                parameter3.SetReputation(10);

                //already done via "expore body" contract
                SetFunds(0, 30000, 0);

                //reward, failure
                SetReputation(00, 00);
            }
            else
            {
                MerillData.log(" end generate camera: false");
                return(false);
            }

            //no science, use experiment for that (and if !=0, need to add "BTSM" at the begining of this class name)
            SetScience(0);

            MerillData.log(" end generate camera: true");
            return(true);
        }