public override IEnumerable <FloatMenuOption> GetFloatMenuOptions(Pawn myPawn)
        {
            //// No base float menu options allowed!
            //foreach (FloatMenuOption fmo in base.GetFloatMenuOptionsFor(myPawn))
            //{
            //    yield return fmo;
            //}

            // No self medication!
            if (myPawn == this)
            {
                yield break;
            }

            // Sedate AIPawn
            Action action_OrderSedateMai = delegate
            {
                myPawn.drafter.Drafted = false;

                Job jobNew = new Job(DefDatabase <JobDef> .GetNamed("AIPawn_Sedate"), this)
                {
                    count = 1
                };
                myPawn.jobs.TryTakeOrderedJob(jobNew);
            };

            yield return(new FloatMenuOption(txtFloatMenuSedateAIPawn.Translate(this.Label), action_OrderSedateMai));


            // Sedate and Carry AIPawn to recharge station
            Building_AIPawnRechargeStation rechargeStation;

            rechargeStation = HelperAIPawn.FindMedicalRechargeStationFor(this);
            if (rechargeStation == null)
            {
                rechargeStation = HelperAIPawn.FindRechargeStationFor(this);
            }

            Action action_OrderSedateAndCarryMai = delegate
            {
                myPawn.drafter.Drafted = false;

                Job jobNew = new Job(DefDatabase <JobDef> .GetNamed("AIPawn_SedateAndRescue"), this, rechargeStation)
                {
                    count = 1
                };
                myPawn.jobs.TryTakeOrderedJob(jobNew);
            };

            if (rechargeStation != null)
            {
                yield return(new FloatMenuOption(txtFloatMenuSedateAndRescueAIPawn.Translate(this.Label), action_OrderSedateAndCarryMai));
            }
            else
            {
                yield return(new FloatMenuOption(txtFloatMenuSedateAndRescueAIPawn.Translate(this.Label), null));
            }

            yield break;
        }
Beispiel #2
0
        protected override Job TryGiveJob(Pawn pawn)
        {
            if (Find.TickManager.TicksGame - pawn.mindState.lastDisturbanceTick < 400)
            {
                return(null);
            }

            AIPawn aiPawn = pawn as AIPawn;
            Building_AIPawnRechargeStation rechargeStation = HelperAIPawn.FindRechargeStationFor(aiPawn);

            if (rechargeStation == null)
            {
                return(null);
            }

            if (rechargeStation.owners != null && !rechargeStation.owners.Contains(aiPawn) && !rechargeStation.Medical)
            {
                aiPawn.ownership.ClaimBedIfNonMedical(rechargeStation);
            }

            if (aiPawn.ownership.OwnedBed == null || aiPawn.ownership.OwnedBed != rechargeStation)
            {
                return(null);
            }

            Job job = new Job(JobDefOf.LayDown, rechargeStation);

            return(job);
        }
        private void TryGoRecharging()
        {
            // Drafting active, do nothing
            if (this.Drafted || !this.Spawned)
            {
                return;
            }

            // No recharge station, do nothing
            if (this.ownership.OwnedBed == null)
            {
                Building_AIPawnRechargeStation rs = HelperAIPawn.FindRechargeStationFor(this);
                if (rs == null)
                {
                    return;
                }

                this.ownership.ClaimBedIfNonMedical(rs);
                //rs.TryAssignPawn(this); OLD

                if (this.ownership.OwnedBed == null)
                {
                    return;
                }
            }

            Building_AIPawnRechargeStation rechargeStation = this.ownership.OwnedBed as Building_AIPawnRechargeStation;

            if (rechargeStation == null)
            {
                return;
            }

            if (rechargeStation.Position == this.Position)
            {
                return;
            }

            rechargeStation.Button_CallOwnerToRecharge();
        }