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)); } }
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)); } } }
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)); } }
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")); } } }
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; }
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; }
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)); } } }
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")); } } }
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)); } } }
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)); }
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)); } }
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)); } }
// 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); }
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")); } }
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; }
/// <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); }
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); } }
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); }
// 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)); } }
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)); }
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); }
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)); }
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; }