示例#1
0
        public override IEnumerable <FloatMenuOption> GetFloatMenuOptions(Pawn myPawn)
        {
            foreach (FloatMenuOption floatMenuOption in base.GetFloatMenuOptions(myPawn))
            {
                yield return(floatMenuOption);
            }
            if (!MutagenDefOf.MergeMutagen.CanTransform(myPawn))
            {
                yield break;
            }

            if (innerContainer.Count == 0)
            {
                if (!myPawn.CanReach(this, PathEndMode.InteractionCell, Danger.Deadly))
                {
                    yield return(new FloatMenuOption("CannotUseNoPath".Translate(), null));

                    yield break;
                }
                JobDef jobDef    = EnterMutagenChamber;
                string jobStr    = "EnterMutagenChamber".Translate();
                Action jobAction = delegate
                {
                    Job job = new Job(jobDef, this);
                    myPawn.jobs.TryTakeOrderedJob(job);
                };
                yield return(FloatMenuUtility.DecoratePrioritizedTask(new FloatMenuOption(jobStr, jobAction), myPawn, this));
            }
        }
示例#2
0
        public override IEnumerable <FloatMenuOption> CompFloatMenuOptions(Pawn selPawn)
        {
            string       text4 = "Reload".Translate(this.parent.Named("GEAR"), this.AmmoDef.Named("AMMO")) + " (" + this.LabelRemaining + ")";
            List <Thing> chosenAmmo;

            if (!selPawn.CanReach(Operator, PathEndMode.ClosestTouch, Danger.Deadly, false, TraverseMode.ByPawn))
            {
                yield return(new FloatMenuOption(text4 + ": " + "NoPath".Translate().CapitalizeFirst(), null, MenuOptionPriority.Default, null, null, 0f, null, null));
            }
            else if (!this.NeedsReload(true))
            {
                yield return(new FloatMenuOption(text4 + ": " + "ReloadFull".Translate(), null, MenuOptionPriority.Default, null, null, 0f, null, null));
            }
            else if ((chosenAmmo = CompTurretReloadableUtility.FindEnoughAmmo(selPawn, Operator.Position, this, true)) == null)
            {
                yield return(new FloatMenuOption(text4 + ": " + "ReloadNotEnough".Translate(), null, MenuOptionPriority.Default, null, null, 0f, null, null));
            }
            else
            {
                Action action4 = delegate()
                {
                    selPawn.jobs.TryTakeOrderedJob(JobGiver_ReloadCompTurret.MakeReloadJob(this, chosenAmmo), JobTag.Misc);
                };
                yield return(FloatMenuUtility.DecoratePrioritizedTask(new FloatMenuOption(text4, action4, MenuOptionPriority.Default, null, null, 0f, null, null), selPawn, Operator, "ReservedBy"));
            }
            foreach (var item in base.CompFloatMenuOptions(selPawn))
            {
                yield return(item);
            }
        }
        public static void Postfix(Vector3 clickPos, Pawn pawn, List <FloatMenuOption> opts)
        {
            if (!pawn.health.capacities.CapableOf(PawnCapacityDefOf.Manipulation))
            {
                return;
            }
            IntVec3 position = IntVec3.FromVector3(clickPos);
            var     tools    = position.GetThingList(pawn.Map).OfType <ThingWithComps>().Where(t => t.IsTool(true)).ToList();

            foreach (var tool in tools)
            {
                if (!pawn.CanReach(tool, PathEndMode.ClosestTouch, Danger.Deadly))
                {
                    return;
                }
                if (!MassUtility.WillBeOverEncumberedAfterPickingUp(pawn, tool, 1))
                {
                    opts.Add(FloatMenuUtility.DecoratePrioritizedTask(new FloatMenuOption("PickUp".Translate(tool.Label, tool) + "AsTool".Translate() + " (" + "ApparelForcedLower".Translate() + ")", delegate
                    {
                        tool.SetForbidden(value: false, warnOnFail: false);
                        var job = pawn.TakeTool(tool);
                        pawn.jobs.TryTakeOrderedJob(job);
                    }, MenuOptionPriority.High), pawn, tool));
                }
            }
        }
示例#4
0
        public override IEnumerable <FloatMenuOption> GetFloatMenuOptions(Pawn selPawn)
        {
            foreach (var op in base.GetFloatMenuOptions(selPawn))
            {
                yield return(op);
            }

            if (!selPawn.health.capacities.CapableOf(PawnCapacityDefOf.Sight) ||
                !selPawn.health.capacities.CapableOf(PawnCapacityDefOf.Manipulation))
            {
                yield return(new FloatMenuOption(
                                 "RimWriter_CannotRead".Translate(Label) + " (" + "Incapable".Translate() + ")", null));
            }
            else
            {
                yield return(FloatMenuUtility.DecoratePrioritizedTask(
                                 new FloatMenuOption("RimWriter_Read".Translate(Label), delegate()
                {
                    var job = new Job(DefDatabase <JobDef> .GetNamedSilentFail("RimWriter_ReadABook"), this)
                    {
                        count = 1
                    };
                    selPawn.jobs.TryTakeOrderedJob(job, JobTag.MiscWork);
                },
                                                     MenuOptionPriority.Low), selPawn, this));
            }
        }
示例#5
0
        public static void Postfix(Vector3 clickPos, Pawn pawn, ref List <FloatMenuOption> opts)
        {
            IntVec3 c = IntVec3.FromVector3(clickPos);

            foreach (Pair <CompTurret, Thing> pair in CompTurretReloadableUtility.FindPotentiallyReloadableGear(pawn, c.GetThingList(pawn.Map)))
            {
                CompTurretGun comp   = pair.First as CompTurretGun;
                Thing         second = pair.Second;
                string        text4  = "Reload".Translate(comp.parent.Named("GEAR"), comp.AmmoDef.Named("AMMO")) + " (" + comp.LabelRemaining + ")";
                List <Thing>  chosenAmmo;
                if (!pawn.CanReach(second, PathEndMode.ClosestTouch, Danger.Deadly, false, TraverseMode.ByPawn))
                {
                    opts.Add(new FloatMenuOption(text4 + ": " + "NoPath".Translate().CapitalizeFirst(), null, MenuOptionPriority.Default, null, null, 0f, null, null));
                }
                else if (!comp.NeedsReload(true))
                {
                    opts.Add(new FloatMenuOption(text4 + ": " + "ReloadFull".Translate(), null, MenuOptionPriority.Default, null, null, 0f, null, null));
                }
                else if ((chosenAmmo = CompTurretReloadableUtility.FindEnoughAmmo(pawn, second.Position, comp, true)) == null)
                {
                    opts.Add(new FloatMenuOption(text4 + ": " + "ReloadNotEnough".Translate(), null, MenuOptionPriority.Default, null, null, 0f, null, null));
                }
                else
                {
                    Action action4 = delegate()
                    {
                        pawn.jobs.TryTakeOrderedJob(JobGiver_ReloadCompTurret.MakeReloadJob(comp, chosenAmmo), JobTag.Misc);
                    };
                    opts.Add(FloatMenuUtility.DecoratePrioritizedTask(new FloatMenuOption(text4, action4, MenuOptionPriority.Default, null, null, 0f, null, null), pawn, second, "ReservedBy"));
                }
            }
        }
示例#6
0
 public override IEnumerable <FloatMenuOption> GetFloatMenuOptions(Pawn myPawn)
 {
     if (!ReachabilityUtility.CanReach(myPawn, this, PathEndMode.InteractionCell, Danger.Deadly, false, 0))
     {
         FloatMenuOption floatMenuOption = new FloatMenuOption(Translator.Translate("CannotUseNoPath"), null,
                                                               MenuOptionPriority.Default, null, null, 0f, null, null);
         yield return(floatMenuOption);
     }
     else if (this.CanLearnFromBook(myPawn))
     {
         string label  = "VBE.ReadBook".Translate();
         Action action = delegate()
         {
             Job job = JobMaker.MakeJob(VBE_DefOf.VBE_ReadBook, null, this);
             job.count = 1;
             myPawn.jobs.TryTakeOrderedJob(job, JobTag.Misc);
         };
         yield return(FloatMenuUtility.DecoratePrioritizedTask(new FloatMenuOption
                                                                   (label, action, MenuOptionPriority.Default, null, null, 0f, null, null), myPawn,
                                                               this, "ReservedBy"));
     }
     else if (!this.CanLearnFromBook(myPawn))
     {
         FloatMenuOption floatMenuOption = new FloatMenuOption(Translator.Translate("VBE.CantReadSkillBookTooSimple"), null,
                                                               MenuOptionPriority.Default, null, null, 0f, null, null);
         yield return(floatMenuOption);
     }
     yield break;
 }
 // Token: 0x06002514 RID: 9492 RVA: 0x00116FA0 File Offset: 0x001153A0
 public override IEnumerable <FloatMenuOption> GetFloatMenuOptions(Pawn myPawn)
 {
     foreach (FloatMenuOption o in base.GetFloatMenuOptions(myPawn))
     {
         yield return(o);
     }
     if (!this.TryGetComp <CompPowerTrader>().PowerOn)
     {
         yield return(new FloatMenuOption("CannotUseNoPower".Translate(), null, MenuOptionPriority.Default, null, null, 0f, null, null));
     }
     else if (this.innerContainer.Count == 0)
     {
         if (myPawn.CanReach(this, PathEndMode.InteractionCell, Danger.Deadly, false, TraverseMode.ByPawn))
         {
             JobDef jobDef    = BarberPodDefsOf.UseBarberPod;
             string jobStr    = "Enter barber pod";
             Action jobAction = delegate()
             {
                 Job job = new Job(jobDef, this);
                 myPawn.jobs.TryTakeOrderedJob(job, JobTag.Misc);
             };
             yield return(FloatMenuUtility.DecoratePrioritizedTask(new FloatMenuOption(jobStr, jobAction, MenuOptionPriority.Default, null, null, 0f, null, null), myPawn, this, "ReservedBy"));
         }
     }
     yield break;
 }
示例#8
0
 public override IEnumerable <FloatMenuOption> GetFloatMenuOptions(Pawn myPawn)
 {
     foreach (FloatMenuOption o in base.GetFloatMenuOptions(myPawn))
     {
         yield return(o);
     }
     if (innerContainer.Count == 0)
     {
         if (!myPawn.CanReach(this, PathEndMode.InteractionCell, Danger.Deadly, false, TraverseMode.ByPawn))
         {
             FloatMenuOption failer = new FloatMenuOption("CannotUseNoPath".Translate(), null, MenuOptionPriority.Default, null, null, 0f, null, null);
             yield return(failer);
         }
         else
         {
             JobDef jobDef    = Bio_JobDefOf.EnterBioReactor;
             string jobStr    = "EnterBioReactor".Translate();
             Action jobAction = delegate()
             {
                 Job job = new Job(jobDef, this);
                 myPawn.jobs.TryTakeOrderedJob(job, JobTag.Misc);
             };
             yield return(FloatMenuUtility.DecoratePrioritizedTask(new FloatMenuOption(jobStr, jobAction, MenuOptionPriority.Default, null, null, 0f, null, null), myPawn, this, "ReservedBy"));
         }
     }
     yield break;
 }
示例#9
0
        public override IEnumerable <FloatMenuOption> GetFloatMenuOptions(Pawn myPawn)
        {
            foreach (var o in base.GetFloatMenuOptions(myPawn))
            {
                yield return(o);
            }

            if (innerContainer.Count >= maxCount)
            {
                yield break;
            }

            var jobDef = DefDatabase <JobDef> .GetNamed("EnterRa2Bunker"); //JobDefOf.EnterCryptosleepCasket;

            string jobStr = "EnterRa2Bunker".Translate();

            void jobAction()
            {
                var job = new Job(jobDef, this);

                myPawn.jobs.TryTakeOrderedJob(job, JobTag.Misc);
            }

            yield return(FloatMenuUtility.DecoratePrioritizedTask(new FloatMenuOption(jobStr, jobAction),
                                                                  myPawn, this));
        }
        public override IEnumerable <FloatMenuOption> CompFloatMenuOptions(Pawn selPawn)
        {
            foreach (FloatMenuOption item in base.CompFloatMenuOptions(selPawn))
            {
                yield return(item);
            }

            if ((this.parent as Pawn)?.GetLord()?.CurLordToil is LordToil_MillAboutCloseBy)
            {
                if (selPawn.CanReach(this.parent, PathEndMode.Touch, Danger.Deadly))
                {
                    void setFree()
                    {
                        selPawn.jobs.TryTakeOrderedJob(new Job(DefsOfLGE.OfferRescueLGE, this.parent));
                    }

                    MenuOptionPriority priority = MenuOptionPriority.RescueOrCapture;
                    Thing revalidateClickTarget = this.parent;
                    yield return(FloatMenuUtility.DecoratePrioritizedTask(new FloatMenuOption("FreePrisoner".Translate(), setFree, priority, null, revalidateClickTarget), selPawn, this.parent));
                }
                else
                {
                    yield return(new FloatMenuOption("CannotGoNoPath".Translate(), null));
                }
            }
        }
示例#11
0
        public static void AddTakeToBedOrder(Vector3 clickPos, Pawn pawn, List <FloatMenuOption> opts)
        {
            if (pawn.health.capacities.CapableOf(PawnCapacityDefOf.Manipulation))
            {
                foreach (LocalTargetInfo current in GenUI.TargetsAt(clickPos, ForEscortToBed(pawn), true))
                {
                    LocalTargetInfo dest = current;


                    if (!pawn.CanReach(dest, PathEndMode.OnCell, Danger.Deadly, false, false, TraverseMode.ByPawn))
                    {
                        opts.Add(new FloatMenuOption("PrisonLabor_CannotTakeToBed".Translate() + " (" + "NoPath".Translate() + ")", null, MenuOptionPriority.Default, null, null, 0f, null, null));
                    }
                    else
                    {
                        Pawn   pTarg  = (Pawn)dest.Thing;
                        Action action = delegate
                        {
                            ArrestUtility.TakePrisonerToBed(pTarg, pawn);
                        };
                        string             label    = "PrisonLabor_TakingToBed".Translate(dest.Thing.LabelCap);
                        MenuOptionPriority priority = MenuOptionPriority.High;
                        Thing thing = dest.Thing;
                        opts.Add(FloatMenuUtility.DecoratePrioritizedTask(new FloatMenuOption(label, action, priority, null, thing, 0f, null, null), pawn, pTarg, "ReservedBy"));
                    }
                }
            }
        }
 public override IEnumerable <FloatMenuOption> CompFloatMenuOptions(Pawn pawn)
 {
     if (items.Any(x => x < this.Props.itemCapacity))
     {
         if (!pawn.CanReach(this.parent, PathEndMode.InteractionCell, Danger.Deadly, false, TraverseMode.ByPawn))
         {
             FloatMenuOption failer = new FloatMenuOption("CannotUseNoPath".Translate(), null, MenuOptionPriority.Default, null, null, 0f, null, null);
             yield return(failer);
         }
         else if (this.IsFull())
         {
             FloatMenuOption failer = new FloatMenuOption("Does not need to be refilled", null, MenuOptionPriority.Default, null, null, 0f, null, null);
             yield return(failer);
         }
         else
         {
             string jobStr    = "Filling Machine";
             Action jobAction = delegate()
             {
                 Job job = RefillWorkGiverUtility.RefillJob(pawn, this.parent, true);
                 pawn.jobs.TryTakeOrderedJob(job, JobTag.Misc);
             };
             yield return(FloatMenuUtility.DecoratePrioritizedTask(new FloatMenuOption(jobStr, jobAction, MenuOptionPriority.Default, null, null, 0f, null, null), pawn, this.parent, "ReservedBy"));
         }
     }
 }
示例#13
0
            public static void Postfix(Vector3 clickPos, Pawn pawn, List <FloatMenuOption> opts)
            {
                if (pawn.needs == null || pawn.needs.rest == null)
                {
                    return;
                }

                foreach (LocalTargetInfo bed in GenUI.TargetsAt(clickPos, ForSleeping(pawn), thingsOnly: true))
                {
                    if (pawn.needs.rest.CurLevel > RestUtility.FallAsleepMaxLevel(pawn))
                    {
                        opts.Add(new FloatMenuOption("CM_Go_To_Sleep_Cannot_Sleep".Translate() + ": " + "CM_Go_To_Sleep_Not_Tired".Translate().CapitalizeFirst(), null));
                    }
                    else if (!pawn.CanReach(bed, PathEndMode.OnCell, Danger.Deadly))
                    {
                        opts.Add(new FloatMenuOption("CM_Go_To_Sleep_Cannot_Sleep".Translate() + ": " + "NoPath".Translate().CapitalizeFirst(), null));
                    }
                    else
                    {
                        opts.Add(FloatMenuUtility.DecoratePrioritizedTask(new FloatMenuOption("CM_Go_To_Sleep_GoToSleep".Translate(), delegate
                        {
                            Job job = JobMaker.MakeJob(JobDefOf.LayDown, bed.Thing);

                            pawn.jobs.TryTakeOrderedJob(job);
                        }, MenuOptionPriority.High), pawn, bed.Thing));
                    }
                }
            }
示例#14
0
 private static FloatMenuOption AddOption(Pawn pawn, LocalTargetInfo target, string keyname, JobDef jobdef)
 {
     return(FloatMenuUtility.DecoratePrioritizedTask(new FloatMenuOption(keyname.Translate(), delegate()
     {
         pawn.jobs.TryTakeOrderedJob(new Job(jobdef, target.Pawn));
     }, MenuOptionPriority.High), pawn, target));
 }
示例#15
0
        public override IEnumerable <FloatMenuOption> CompFloatMenuOptions(Pawn selPawn)
        {
            ArmorRack armorRack = this.parent as ArmorRack;

            if (!selPawn.CanReach(armorRack, PathEndMode.Touch, Danger.Deadly, false, false, TraverseMode.ByPawn))
            {
                FloatMenuOption failer = new FloatMenuOption("CannotUseNoPath".Translate(), null, MenuOptionPriority.Default, null, null, 0f, null, null);
                yield return(failer);

                yield break;
            }

            var nonViolentOptionYielded = false;

            if (ArmorRackJobUtil.PawnCanEquipWeaponSet(armorRack, selPawn))
            {
                // Transfer to
                var swapWithOption = new FloatMenuOption("ArmorRacks_TransferToRack_FloatMenuLabel".Translate(), delegate
                {
                    var target_info = new LocalTargetInfo(armorRack);
                    var wearRackJob = new Job(ArmorRacksJobDefOf.ArmorRacks_JobTransferToRack, target_info);
                    selPawn.jobs.TryTakeOrderedJob(wearRackJob);
                });
                yield return(FloatMenuUtility.DecoratePrioritizedTask(swapWithOption, selPawn, armorRack, "ReservedBy"));
            }
            else
            {
                yield return(new FloatMenuOption("ArmorRacks_WearRack_FloatMenuLabel_NonViolent".Translate(), null));

                nonViolentOptionYielded = true;
            }

            if (ForbidUtility.IsForbidden(armorRack, selPawn))
            {
                yield break;
            }

            if (ArmorRackJobUtil.RackHasItems(armorRack))
            {
                if (ArmorRackJobUtil.PawnCanEquipWeaponSet(armorRack, selPawn))
                {
                    // Equip from
                    var equipFromOption = new FloatMenuOption("ArmorRacks_WearRack_FloatMenuLabel".Translate(), delegate
                    {
                        var target_info = new LocalTargetInfo(armorRack);
                        var wearRackJob = new Job(ArmorRacksJobDefOf.ArmorRacks_JobWearRack, target_info);
                        selPawn.jobs.TryTakeOrderedJob(wearRackJob);
                    });
                    yield return(FloatMenuUtility.DecoratePrioritizedTask(equipFromOption, selPawn, armorRack, "ReservedBy"));
                }
                else if (!nonViolentOptionYielded)
                {
                    yield return(new FloatMenuOption("ArmorRacks_WearRack_FloatMenuLabel_NonViolent".Translate(), null));
                }
            }
            else
            {
                yield return(new FloatMenuOption("ArmorRacks_WearRack_FloatMenuLabel_Empty".Translate(), null));
            }
        }
示例#16
0
 protected void processCommunicable(ICommunicable comm, Pawn myPawn, List <FloatMenuOption> result)
 {
     if (comm != null)
     {
         string text   = "CallOnRadio".Translate(comm.GetCallLabel());
         Action action = delegate {
             ICommunicable localCommTarget = comm;
             if (!Building_OrbitalTradeBeacon.AllPowered(this.Map).Any <Building_OrbitalTradeBeacon>())
             {
                 Messages.Message("MessageNeedBeaconToTradeWithShip".Translate(), this, MessageTypeDefOf.RejectInput);
                 return;
             }
             if (comm is ILoadReferenceable)
             {
                 //if we communicate with an object that can be saved we create a job.
                 Job job = new Job(JobDefOf.UseCommsConsole, this);
                 job.commTarget = localCommTarget;
                 myPawn.jobs.TryTakeOrderedJob(job, JobTag.Misc);
             }
             else
             {
                 //if we cannot save the com target we avoid creating a job and start the communication immediately.
                 localCommTarget.TryOpenComms(myPawn);
             }
             PlayerKnowledgeDatabase.KnowledgeDemonstrated(ConceptDefOf.OpeningComms, KnowledgeAmount.Total);
         };
         result.Add(FloatMenuUtility.DecoratePrioritizedTask(new FloatMenuOption(text, action, MenuOptionPriority.InitiateSocial, null, null, 0f, null, null), myPawn, this));
     }
 }
示例#17
0
        // this allow the work giver to be present in both drafted and undrafted float menus
        public static FloatMenuOption InjectThingFloatOptionIfNeeded(Thing target, Pawn selPawn)
        {
            if (Designator_FinishOff.IsValidDesignationTarget(target))
            {
                if (WorkGiverEnabled)
                {
                    JobFailReason.Clear();
                    var giver = CreateInstance();
                    var job   = giver.JobOnThing(selPawn, target, true);
                    var opt   = new FloatMenuOption("Finish_off_floatMenu".Translate(target.LabelShort),
                                                    () => { selPawn.jobs.TryTakeOrderedJobPrioritizedWork(job, giver, target.Position); });
                    opt = FloatMenuUtility.DecoratePrioritizedTask(opt, selPawn, target);
                    if (job == null)
                    {
                        opt.Disabled = true;
                        if (JobFailReason.HaveReason)
                        {
                            opt.Label = "CannotGenericWork".Translate(giver.def.verb, target.LabelShort, target) + " (" + JobFailReason.Reason + ")";
                        }
                    }

                    return(opt);
                }
            }

            return(null);
        }
示例#18
0
            public static void AddHumanlikeOrdersPostfix(Vector3 clickPos, Pawn pawn, List <FloatMenuOption> opts)
            {
                if (!pawn.health.capacities.CapableOf(PawnCapacityDefOf.Manipulation) || pawn.WorkTagIsDisabled(WorkTags.Caring) || pawn.WorkTypeIsDisabled(WorkTypeDefOf.Doctor) || !pawn.workSettings.WorkIsActive(WorkTypeDefOf.Doctor))
                {
                    return;
                }

                foreach (LocalTargetInfo localTargetInfo in GenUI.TargetsAt(clickPos, TargetingParameters.ForRescue(pawn), true))
                {
                    Pawn target = (Pawn)localTargetInfo.Thing;

                    if (!target.health.HasHediffsNeedingTend())
                    {
                        continue;
                    }

                    if (!pawn.CanReserveAndReach(target, PathEndMode.OnCell, Danger.Deadly, 1, -1, null, true))
                    {
                        // TODO: Add grayed out message
                        continue;
                    }

                    JobDef stabilizeJD = DefDatabase <JobDef> .GetNamed("StabilizeHere");

                    Action action = () => {
                        Job job = new Job(stabilizeJD, target);
                        job.count = 1;

                        pawn.jobs.TryTakeOrderedJob(job);
                    };

                    string text = "StabilizePawn".Translate(target.LabelCap, target);
                    opts.Add(FloatMenuUtility.DecoratePrioritizedTask(new FloatMenuOption(text, action, MenuOptionPriority.RescueOrCapture, null, target, 0f, null, null), pawn, target, "ReservedBy"));
                }
            }
示例#19
0
        public override IEnumerable <FloatMenuOption> GetFloatMenuOptions(Pawn myPawn)
        {
            foreach (FloatMenuOption o in base.GetFloatMenuOptions(myPawn))
            {
                yield return(o);
            }
            if (this.innerContainer.Count < maxCount)
            {
                if (Toils_bunker.getEnterOutLoc(this) == null)//!myPawn.CanReach(this, PathEndMode.InteractionCell, Danger.Deadly, false, TraverseMode.ByPawn))
                {
                    FloatMenuOption failer = new FloatMenuOption("CannotUseNoPath".Translate(), null, MenuOptionPriority.Default, null, null, 0f, null, null);
                    yield return(failer);
                }
                else
                {
                    JobDef jobDef = DefDatabase <JobDef> .GetNamed("EnterRa2Bunker", true);  //JobDefOf.EnterCryptosleepCasket;

                    string jobStr    = "EnterRa2Bunker".Translate();
                    Action jobAction = delegate
                    {
                        Job job = new Job(jobDef, this);
                        myPawn.jobs.TryTakeOrderedJob(job, JobTag.Misc);
                    };
                    yield return(FloatMenuUtility.DecoratePrioritizedTask(new FloatMenuOption(jobStr, jobAction, MenuOptionPriority.Default, null, null, 0f, null, null), myPawn, this, "ReservedBy"));
                }
            }
            yield break;
        }
示例#20
0
        /// <summary>
        /// Adds the "Find Treasure" option to the right click menu.
        /// </summary>
        private static void AddHumanlikeOrders(Vector3 clickPos, Pawn pawn, List <FloatMenuOption> opts)
        {
            var c = IntVec3.FromVector3(clickPos);

            if (!(c is IntVec3 vec) || !vec.IsValid || !(vec.GetTerrain(pawn.MapHeld) is TerrainDef def) ||
                (def != TerrainDefOf.WaterDeep && def != TerrainDefOf.WaterMovingDeep &&
                 def != TerrainDefOf.WaterOceanDeep
                ))
            {
                return;
            }
            FloatMenuOption item5;
            var             BOX = "Find Treasure";

            if (!pawn.CanReach(c, PathEndMode.OnCell, Danger.Deadly, false, TraverseMode.ByPawn))
            {
                item5 = new FloatMenuOption(" (" + "NoPath".Translate() + ")", null, MenuOptionPriority.Default, null,
                                            null, 0f, null, null);
            }
            else
            {
                var priority = MenuOptionPriority.Low;
                item5 = FloatMenuUtility.DecoratePrioritizedTask(new FloatMenuOption(BOX, delegate
                {
                    var job   = new Job(DefDatabase <JobDef> .GetNamed("LZG_FindTreasure"), c);
                    job.count = 1;
                    pawn.jobs.TryTakeOrderedJob(job, JobTag.Misc);
                }, priority, null, null, 0f, null, null), pawn, c, "ReservedBy");
            }

            opts.Add(item5);
        }
示例#21
0
        public static void AddShieldFloatMenuOption(Pawn pawn, Thing equipment, ref List <FloatMenuOption> opts)
        {
            // Add an extra option to the float menu if the thing is a shield
            if (equipment.IsShield(out CompShield shieldComp) && ApparelUtility.HasPartsToWear(pawn, equipment.def))
            {
                string          labelShort = equipment.LabelShort;
                FloatMenuOption shieldOption;

                // Pawn is pacifist
                if (equipment.def.IsWeapon && pawn.WorkTagIsDisabled(WorkTags.Violent))
                {
                    shieldOption = new FloatMenuOption("CannotEquip".Translate(labelShort) + " (" + "IsIncapableOfViolenceLower".Translate(pawn.LabelShort, pawn) + ")", null);
                }

                // Pawn cannot path to shield
                else if (!pawn.CanReach(equipment, PathEndMode.ClosestTouch, Danger.Deadly, false, false, TraverseMode.ByPawn))
                {
                    shieldOption = new FloatMenuOption("CannotEquip".Translate(labelShort) + " (" + "NoPath".Translate() + ")", null);
                }

                // Pawn cannot manipulate
                else if (!pawn.health.capacities.CapableOf(PawnCapacityDefOf.Manipulation) || !pawn.CanUseShields())
                {
                    shieldOption = new FloatMenuOption("CannotEquip".Translate(labelShort) + " (" + "Incapable".Translate() + ")", null);
                }

                // Shield is burning
                else if (equipment.IsBurning())
                {
                    shieldOption = new FloatMenuOption("CannotEquip".Translate(labelShort) + " (" + "BurningLower".Translate() + ")", null);
                }

                // Able to equip shield
                else
                {
                    string optionLabel = "VanillaFactionsExpanded.EquipShield".Translate(labelShort);

                    // I seriously doubt this'll ever return true but hey, why not
                    if (equipment.def.IsRangedWeapon && pawn.story != null && pawn.story.traits.HasTrait(TraitDefOf.Brawler))
                    {
                        optionLabel = optionLabel + " " + "EquipWarningBrawler".Translate();
                    }

                    // Primary cannot be used with shields
                    if (pawn.equipment.Primary is ThingWithComps weapon && !weapon.def.UsableWithShields())
                    {
                        optionLabel += $" {"VanillaFactionsExpanded.EquipWarningShieldUnusable".Translate(weapon.def.label)}";
                    }

                    shieldOption = FloatMenuUtility.DecoratePrioritizedTask(new FloatMenuOption(optionLabel, delegate() {
                        equipment.SetForbidden(false, true);
                        pawn.jobs.TryTakeOrderedJob(new Job(VFEDefOf.VFEC_EquipShield, equipment), JobTag.Misc);
                        FleckMaker.Static(equipment.DrawPos, equipment.Map, FleckDefOf.FeedbackEquip, 1f);
                        PlayerKnowledgeDatabase.KnowledgeDemonstrated(ConceptDefOf.EquippingWeapons, KnowledgeAmount.Total);
                    }, MenuOptionPriority.High, null, null, 0f, null, null), pawn, equipment, "ReservedBy");
                }
                opts.Add(shieldOption);
            }
        }
示例#22
0
            public static FloatMenuOption AddCaptureOption(Pawn pawn, Pawn victim)
            {
                var floatOption = FloatMenuUtility.DecoratePrioritizedTask(new FloatMenuOption("Capture".Translate
                                                                                                   (victim.LabelCap, victim), delegate()
                {
                    var ZTracker     = ZUtils.ZTracker;
                    var oldMap       = pawn.Map;
                    var oldPosition1 = pawn.Position;
                    var oldPosition2 = victim.Position;
                    bool select      = Find.Selector.SelectedObjects.Contains(pawn);

                    Building building_Bed = null;
                    foreach (var otherMap in ZUtils.GetAllMapsInClosestOrderForTwoThings(pawn, oldMap, oldPosition1,
                                                                                         victim, oldMap, oldPosition2))
                    {
                        building_Bed = RestUtility.FindBedFor(victim, pawn, true, false, false);
                        if (building_Bed == null)
                        {
                            building_Bed = RestUtility.FindBedFor(victim, pawn, true, false, true);
                        }

                        if (building_Bed != null)
                        {
                            break;
                        }
                    }

                    ZUtils.TeleportThing(pawn, oldMap, oldPosition1);
                    ZUtils.TeleportThing(victim, oldMap, oldPosition2);

                    if (select)
                    {
                        Find.Selector.Select(pawn);
                    }

                    if (building_Bed == null)
                    {
                        Messages.Message("CannotCapture".Translate() + ": " + "NoPrisonerBed".Translate(), victim,
                                         MessageTypeDefOf.RejectInput, false);
                        return;
                    }

                    Job job   = JobMaker.MakeJob(JobDefOf.Capture, victim, building_Bed);
                    job.count = 1;
                    ZTracker.BuildJobListFor(pawn, pawn.Map, job);
                    ZLogger.Message(pawn + " taking first job 3");
                    pawn.jobs.EndCurrentJob(JobCondition.InterruptForced, false);
                    PlayerKnowledgeDatabase.KnowledgeDemonstrated(ConceptDefOf.Capturing, KnowledgeAmount.Total);
                    if (victim.Faction != null && victim.Faction != Faction.OfPlayer &&
                        !victim.Faction.def.hidden && !victim.Faction.HostileTo(Faction.OfPlayer) &&
                        !victim.IsPrisonerOfColony)
                    {
                        Messages.Message("MessageCapturingWillAngerFaction".Translate(victim.Named("PAWN"))
                                         .AdjustedFor(victim, "PAWN", true), victim, MessageTypeDefOf.CautionInput, false);
                    }
                }, MenuOptionPriority.RescueOrCapture, null, victim, 0f, null, null), pawn, victim, "ReservedBy");

                return(floatOption);
            }
示例#23
0
        // Token: 0x060024DD RID: 9437 RVA: 0x00114E18 File Offset: 0x00113218
        public override IEnumerable <FloatMenuOption> GetFloatMenuOptions(Pawn myPawn)
        {
            foreach (var o in base.GetFloatMenuOptions(myPawn))
            {
                yield return(o);
            }

            if (innerContainer.Count != 0)
            {
                yield break;
            }

            if (!myPawn.CanReach(this, PathEndMode.InteractionCell, Danger.Deadly))
            {
                var failer = new FloatMenuOption("CannotUseNoPath".Translate(), null);
                yield return(failer);
            }
            else if (myPawn.IsWarframe())
            {
                var failer = new FloatMenuOption("CannotWFenter".Translate(), null);
                yield return(failer);
            }
            else
            {
                /*
                 *  bool flag = false;
                 *  foreach(Trait tt in myPawn.story.traits.allTraits)
                 *  {
                 *      if (tt.def.defName.Equals("Warframe_Trait"))
                 *      {
                 *          flag = true;
                 *          break;
                 *      }
                 *  }
                 *  if (!flag)
                 *  {
                 *      FloatMenuOption failer = new FloatMenuOption("PawnWithOutWFTrait".Translate(new object[] {myPawn.Name} ), null, MenuOptionPriority.Default, null, null, 0f, null, null);
                 *      yield return failer;
                 *      yield break;
                 *  }
                 */


                var jobDef = DefDatabase <JobDef> .GetNamed("EnterControlCell");

                string jobStr = "EnterControlCell".Translate();

                void JobAction()
                {
                    var job = new Job(jobDef, this);

                    myPawn.jobs.TryTakeOrderedJob(job, JobTag.Misc);
                }

                yield return(FloatMenuUtility.DecoratePrioritizedTask(new FloatMenuOption(jobStr, JobAction),
                                                                      myPawn, this));
            }
        }
示例#24
0
        public static FloatMenuOption MakeMenu(Pawn pawn, LocalTargetInfo target)
        {
            FloatMenuOption option = FloatMenuUtility.DecoratePrioritizedTask(new FloatMenuOption(Keyed.RS_GatherCum, delegate()
            {
                pawn.jobs.TryTakeOrderedJob(new Verse.AI.Job(VariousDefOf.VaginaWashingwithBucket, null, target, target.Cell));
            }, MenuOptionPriority.Low), pawn, target);

            return(option);
        }
        public static FloatMenuOption MakeSelfMenu(Pawn pawn, LocalTargetInfo target)
        {
            FloatMenuOption option = FloatMenuUtility.DecoratePrioritizedTask(new FloatMenuOption(Translations.FloatMenu_CleanSelf, delegate()
            {
                pawn.jobs.TryTakeOrderedJob(new Verse.AI.Job(VariousDefOf.VaginaWashing, null, null, target.Cell));
            }, MenuOptionPriority.Low), pawn, target);

            return(option);
        }
 private static FloatMenuOption MakeDecoratedOption(string label, Action action, Pawn pawn, Thing thing)
 {
     return(FloatMenuUtility.DecoratePrioritizedTask(
                new FloatMenuOption(
                    label
                    , action
                    , MenuOptionPriority.High)
                , pawn
                , thing));
 }
示例#27
0
        private static FloatMenuOption GetEquipOffHandOption(Pawn pawn, ThingWithComps equipment)
        {
            string          labelShort = equipment.LabelShort;
            FloatMenuOption menuItem;

            if (equipment.def.IsWeapon && pawn.story.DisabledWorkTagsBackstoryAndTraits.HasFlag(WorkTags.Violent))
            {
                menuItem = new FloatMenuOption("CannotEquip".Translate(labelShort) + " " + "DW_AsOffHand".Translate() + " (" + "IsIncapableOfViolenceLower".Translate(pawn.LabelShort, pawn) + ")", null, MenuOptionPriority.Default, null, null, 0f, null, null);
            }
            else if (!pawn.CanReach(equipment, PathEndMode.ClosestTouch, Danger.Deadly, false, false, TraverseMode.ByPawn))
            {
                menuItem = new FloatMenuOption("CannotEquip".Translate(labelShort) + " " + "DW_AsOffHand".Translate() + " (" + "NoPath".Translate() + ")", null, MenuOptionPriority.Default, null, null, 0f, null, null);
            }
            else if (!pawn.health.capacities.CapableOf(PawnCapacityDefOf.Manipulation))
            {
                menuItem = new FloatMenuOption("CannotEquip".Translate(labelShort) + " " + "DW_AsOffHand".Translate() + " (" + "Incapable".Translate() + ")", null, MenuOptionPriority.Default, null, null, 0f, null, null);
            }
            else if (equipment.IsBurning())
            {
                menuItem = new FloatMenuOption("CannotEquip".Translate(labelShort) + " " + "DW_AsOffHand".Translate() + " (" + "BurningLower".Translate() + ")", null, MenuOptionPriority.Default, null, null, 0f, null, null);
            }
            else if (pawn.HasMissingArmOrHand())
            {
                menuItem = new FloatMenuOption("CannotEquip".Translate(labelShort) + " " + "DW_AsOffHand".Translate() + " ( " + "DW_MissArmOrHand".Translate() + " )", null, MenuOptionPriority.Default, null, null, 0f, null, null);
            }
            else if (pawn.equipment != null && pawn.equipment.Primary != null && pawn.equipment.Primary.def.IsTwoHand())
            {
                menuItem = new FloatMenuOption("CannotEquip".Translate(labelShort) + " " + "DW_AsOffHand".Translate() + " ( " + "DW_WieldingTwoHanded".Translate() + ")", null, MenuOptionPriority.Default, null, null, 0f, null, null);
            }
            else if (equipment.def.IsTwoHand())
            {
                menuItem = new FloatMenuOption("CannotEquip".Translate(labelShort) + " " + "DW_AsOffHand".Translate() + " ( " + "DW_NoTwoHandedInOffHand".Translate() + ")", null, MenuOptionPriority.Default, null, null, 0f, null, null);
            }
            else if (!equipment.def.CanBeOffHand())
            {
                menuItem = new FloatMenuOption("CannotEquip".Translate(labelShort) + " " + "DW_AsOffHand".Translate() + " ( " + "DW_CannotBeOffHand".Translate() + ")", null, MenuOptionPriority.Default, null, null, 0f, null, null);
            }
            else
            {
                string text5 = "DW_EquipOffHand".Translate(labelShort);
                if (equipment.def.IsRangedWeapon && pawn.story != null && pawn.story.traits.HasTrait(TraitDefOf.Brawler))
                {
                    text5 = text5 + " " + "EquipWarningBrawler".Translate();
                }
                menuItem = FloatMenuUtility.DecoratePrioritizedTask(new FloatMenuOption(text5, delegate
                {
                    equipment.SetForbidden(false, true);
                    pawn.jobs.TryTakeOrderedJob(new Job(DW_DefOff.DW_EquipOffhand, equipment), JobTag.Misc);
                    FleckMaker.Static(equipment.DrawPos, equipment.Map, FleckDefOf.FeedbackEquip, 1f);
                    PlayerKnowledgeDatabase.KnowledgeDemonstrated(ConceptDefOf.EquippingWeapons, KnowledgeAmount.Total);
                }, MenuOptionPriority.High, null, null, 0f, null, null), pawn, equipment, "ReservedBy");
            }

            return(menuItem);
        }
示例#28
0
        private static void DoPickupOrder(Vector3 clickPos, Pawn pawn, List <FloatMenuOption> opts)
        {
            if (!HugsLibUtility.ShiftIsHeld)
            {
                return;
            }

            IntVec3 c    = IntVec3.FromVector3(clickPos);
            Thing   item = c.GetFirstItem(pawn.Map);

            if (item != null && item.def.EverHaulable)
            {
                if (!pawn.CanReach(item, PathEndMode.ClosestTouch, Danger.Deadly, false, TraverseMode.ByPawn))
                {
                    opts.Add(new FloatMenuOption("CannotPickUp".Translate(new object[]
                    {
                        item.Label
                    }) + " (" + "NoPath".Translate() + ")", null, MenuOptionPriority.Default, null, null, 0f, null, null));
                }
                else if (MassUtility.WillBeOverEncumberedAfterPickingUp(pawn, item, 1))
                {
                    opts.Add(new FloatMenuOption("CannotPickUp".Translate(new object[]
                    {
                        item.Label
                    }) + " (" + "TooHeavy".Translate() + ")", null, MenuOptionPriority.Default, null, null, 0f, null, null));
                }
                else if (item.stackCount == 1)
                {
                    opts.Add(FloatMenuUtility.DecoratePrioritizedTask(new FloatMenuOption("PickUp".Translate(new object[]
                    {
                        item.Label
                    }), delegate
                    {
                        item.SetForbidden(false, false);
                        Job job   = new Job(NewOrderJobDefOf.QOL_PickupObject, item);
                        job.count = 1;
                        pawn.jobs.TryTakeOrderedJob(job, JobTag.Misc);
                    }, MenuOptionPriority.High, null, null, 0f, null, null), pawn, item, "ReservedBy"));
                }
                else
                {
                    opts.Add(FloatMenuUtility.DecoratePrioritizedTask(new FloatMenuOption("PickUpAll".Translate(new object[]
                    {
                        item.Label
                    }), delegate
                    {
                        item.SetForbidden(false, false);
                        Job job   = new Job(NewOrderJobDefOf.QOL_PickupObject, item);
                        job.count = item.stackCount;
                        pawn.jobs.TryTakeOrderedJob(job, JobTag.Misc);
                    }, MenuOptionPriority.High, null, null, 0f, null, null), pawn, item, "ReservedBy"));
                }
            }
        }
        public FloatMenuOption QuestGiverFloatMenuOption(Pawn user)
        {
            string label  = Props.floatOptionLabel;
            Action action = delegate
            {
                Job job = JobMaker.MakeJob(Props.jobToGive, this.parent);
                user.jobs.TryTakeOrderedJob(job);
            };

            return(FloatMenuUtility.DecoratePrioritizedTask(new FloatMenuOption(label, action, MenuOptionPriority.VeryLow), user, this.parent));
        }
示例#30
0
        public override IEnumerable <FloatMenuOption> CompFloatMenuOptions(Pawn negotiator)
        {
            string label = "TradeWith".Translate(tradeShip.GetCallLabel());

            yield return(FloatMenuUtility.DecoratePrioritizedTask(new FloatMenuOption(label, delegate()
            {
                Job job = JobMaker.MakeJob(Globals.TraderShipsTradeWithShip, parent);
                negotiator.jobs.TryTakeOrderedJob(job, JobTag.Misc);
            }, MenuOptionPriority.InitiateSocial, null, null, 0f, null, null), negotiator, parent));

            yield break;
        }