Esempio n. 1
0
        protected override Job TryGiveJob(Pawn pawn)
        {
            List <Thing> foundIngredients;
            List <int>   foundIngredientsCount;

            if (!AIRobot_Helper.GetAllNeededIngredients(pawn, DefDatabase <ThingDef> .GetNamed(ingredientDefName), this.ingredientCount, out foundIngredients, out foundIngredientsCount) ||
                foundIngredients == null || foundIngredients.Count == 0)
            {
                return(null);
            }

            //Log.Error("foundIngredients="+foundIngredients.Count.ToString() + " " + "foundIngredientsCount="+foundIngredientsCount.Count.ToString());

            List <LocalTargetInfo> ingredientsLTI = new List <LocalTargetInfo>();

            foreach (Thing t in foundIngredients)
            {
                ingredientsLTI.Add(t);
            }

            X2_JobDriver_RepairStationRobot repairRobot = new X2_JobDriver_RepairStationRobot();
            Job job = new Job(DefDatabase <JobDef> .GetNamed(this.jobDefName), this.rechargeStation, foundIngredients[0], disabledRobot);

            job.targetQueueB = ingredientsLTI;
            job.countQueue   = foundIngredientsCount;

            return(job);
        }
        private void StartRepairJob2(Pawn pawn)
        {
            List <Thing> foundIngredients, foundIngredients2;
            List <int>   foundIngredientsCount, foundIngredients2Count;

            if (!AIRobot_Helper.GetAllNeededIngredients(pawn, DefDatabase <ThingDef> .GetNamed(ingredientDefName), this.ingredientNeedCount, out foundIngredients, out foundIngredientsCount) ||
                foundIngredients == null || foundIngredients.Count == 0)
            {
                return;
            }
            if (!AIRobot_Helper.GetAllNeededIngredients(pawn, DefDatabase <ThingDef> .GetNamed(ingredient2DefName), this.ingredient2NeedCount, out foundIngredients2, out foundIngredients2Count) ||
                foundIngredients2 == null || foundIngredients2.Count == 0)
            {
                return;
            }


            //Log.Error("foundIngredients="+foundIngredients.Count.ToString() + " " + "foundIngredientsCount="+foundIngredientsCount.Count.ToString());

            X2_JobDriver_RepairDamagedRobot repairRobot = new X2_JobDriver_RepairDamagedRobot();
            Job job = new Job(DefDatabase <JobDef> .GetNamed(this.jobDefName_repair), this.rechargestation, this, rechargestation.Position);

            job.count        = 1;
            job.targetQueueB = new List <LocalTargetInfo>(foundIngredients.Count + foundIngredients2.Count);
            job.countQueue   = new List <int>(foundIngredients.Count + foundIngredients2.Count);

            job.targetQueueB.Add(this);
            job.countQueue.Add(1);

            for (int i = 0; i < foundIngredients.Count; i++)
            {
                job.targetQueueB.Add(foundIngredients[i]);
                job.countQueue.Add(foundIngredientsCount[i]);
            }
            for (int i = 0; i < foundIngredients2.Count; i++)
            {
                job.targetQueueB.Add(foundIngredients2[i]);
                job.countQueue.Add(foundIngredients2Count[i]);
            }
            job.haulMode = HaulMode.ToCellNonStorage;


            pawn.jobs.StopAll();
            pawn.jobs.StartJob(job);

            //Log.Error("Pawn.CurJob:" + pawn.CurJob.def.defName);
            //Log.Error("Job: "+ job.def.defName + " Ingredients: "+ foundIngredientsCount[0].ToString());
        }
        private void StartRepairJob(Pawn pawn)
        {
            List <Thing> foundIngredients;
            List <int>   foundIngredientsCount;
            List <Thing> foundIngredients2;
            List <int>   foundIngredients2Count;

            if (!AIRobot_Helper.GetAllNeededIngredients(pawn, DefDatabase <ThingDef> .GetNamed(ingredientDefName), this.ingredientNeedCount, out foundIngredients, out foundIngredientsCount) ||
                foundIngredients == null || foundIngredients.Count == 0)
            {
                return;
            }
            if (!AIRobot_Helper.GetAllNeededIngredients(pawn, DefDatabase <ThingDef> .GetNamed(ingredient2DefName), this.ingredient2NeedCount, out foundIngredients2, out foundIngredients2Count) ||
                foundIngredients == null || foundIngredients.Count == 0)
            {
                return;
            }

            //Log.Error("foundIngredients="+foundIngredients.Count.ToString() + " " + "foundIngredientsCount="+foundIngredientsCount.Count.ToString());

            List <LocalTargetInfo> ingredientsLTI = new List <LocalTargetInfo>();

            foreach (Thing t in foundIngredients)
            {
                ingredientsLTI.Add(t);
            }
            foreach (Thing t in foundIngredients2)
            {
                ingredientsLTI.Add(t);
            }

            X2_JobDriver_RepairDamagedRobot repairRobot = new X2_JobDriver_RepairDamagedRobot();
            Job job = new Job(DefDatabase <JobDef> .GetNamed(this.jobDefName_repair), this.rechargestation, foundIngredients[0], this);

            job.targetQueueB = ingredientsLTI;
            job.countQueue   = foundIngredientsCount;
            pawn.jobs.StopAll();
            pawn.jobs.StartJob(job);

            Log.Error("Pawn.CurJob:" + pawn.CurJob.def.defName);
            //Log.Error("Job: "+ job.def.defName + " Ingredients: "+ foundIngredientsCount[0].ToString());
        }
Esempio n. 4
0
        public static Job GetStationRepairJob(Pawn pawn, X2_Building_AIRobotRechargeStation station, Dictionary <ThingDef, int> resources)
        {
            string jobDefName = "AIRobot_RepairStationRobot";

            List <Thing> foundIngredients      = new List <Thing>();
            List <int>   foundIngredientsCount = new List <int>();
            List <Thing> workIngredients       = new List <Thing>();
            List <int>   workIngredientCount   = new List <int>();

            if (resources != null)
            {
                foreach (ThingDef ingredientDef in resources.Keys)
                {
                    if (!AIRobot_Helper.GetAllNeededIngredients(pawn, ingredientDef, resources[ingredientDef], out workIngredients, out workIngredientCount) ||
                        workIngredients == null || workIngredients.Count == 0)
                    {
                        return(null);
                    }
                    foundIngredients.AddRange(workIngredients);
                    foundIngredientsCount.AddRange(workIngredientCount);
                }
            }

            //X2_JobDriver_RepairStationRobot repairRobot = new X2_JobDriver_RepairStationRobot();

            Job job = new Job(DefDatabase <JobDef> .GetNamed(jobDefName), station, null, station.Position);

            job.count        = 1;
            job.targetQueueB = new List <LocalTargetInfo>(); //new List<LocalTargetInfo>(foundIngredients.Count);
            job.countQueue   = new List <int>(foundIngredients.Count);

            for (int i = 0; i < foundIngredients.Count; i++)
            {
                job.targetQueueB.Add(foundIngredients[i]);
                job.countQueue.Add(foundIngredientsCount[i]);
            }
            job.haulMode = HaulMode.ToCellNonStorage;

            return(job);
        }