public override void Notify_DoBillStarted(Pawn billDoer) { base.Notify_DoBillStarted(billDoer); consumedInitialMedicineDef = null; if (GiverPawn.Dead || !recipe.anesthetize || !HealthUtility.TryAnesthetize(GiverPawn)) { return; } List <ThingCountClass> placedThings = billDoer.CurJob.placedThings; for (int i = 0; i < placedThings.Count; i++) { if (placedThings[i].thing is Medicine) { recipe.Worker.ConsumeIngredient(placedThings[i].thing.SplitOff(1), recipe, billDoer.MapHeld); placedThings[i].Count--; consumedInitialMedicineDef = placedThings[i].thing.def; if (placedThings[i].thing.Destroyed || placedThings[i].Count <= 0) { placedThings.RemoveAt(i); } break; } } }
public override void Notify_DoBillStarted(Pawn billDoer) { base.Notify_DoBillStarted(billDoer); consumedInitialMedicineDef = null; if (!GiverPawn.Dead && recipe.anesthetize && HealthUtility.TryAnesthetize(GiverPawn)) { List <ThingCountClass> placedThings = billDoer.CurJob.placedThings; int num = 0; while (true) { if (num >= placedThings.Count) { return; } if (placedThings[num].thing is Medicine) { break; } num++; } recipe.Worker.ConsumeIngredient(placedThings[num].thing.SplitOff(1), recipe, billDoer.MapHeld); placedThings[num].Count--; consumedInitialMedicineDef = placedThings[num].thing.def; if (placedThings[num].thing.Destroyed || placedThings[num].Count <= 0) { placedThings.RemoveAt(num); } } }
public override void Notify_DoBillStarted(Pawn billDoer) { base.Notify_DoBillStarted(billDoer); this.consumedInitialMedicineDef = null; if (!this.GiverPawn.Dead && base.recipe.anesthetize && HealthUtility.TryAnesthetize(this.GiverPawn)) { List <ThingStackPartClass> placedThings = billDoer.CurJob.placedThings; int num = 0; while (true) { if (num < placedThings.Count) { if (!(placedThings[num].thing is Medicine)) { num++; continue; } break; } return; } base.recipe.Worker.ConsumeIngredient(placedThings[num].thing.SplitOff(1), base.recipe, billDoer.MapHeld); placedThings[num].Count--; this.consumedInitialMedicineDef = placedThings[num].thing.def; if (!placedThings[num].thing.Destroyed && placedThings[num].Count > 0) { return; } placedThings.RemoveAt(num); } }
public override void Notify_QuestSignalReceived(Signal signal) { base.Notify_QuestSignalReceived(signal); if (!(signal.tag == inSignal)) { return; } pawns.RemoveAll((Pawn x) => x.Destroyed); if (joinPlayer) { for (int i = 0; i < pawns.Count; i++) { if (pawns[i].Faction != Faction.OfPlayer) { pawns[i].SetFaction(Faction.OfPlayer); } } } else { if (!makePrisoners) { return; } for (int j = 0; j < pawns.Count; j++) { if (pawns[j].RaceProps.Humanlike) { if (!pawns[j].IsPrisonerOfColony) { pawns[j].guest.SetGuestStatus(Faction.OfPlayer, prisoner: true); } HealthUtility.TryAnesthetize(pawns[j]); } } } }
public override void DoWindowContents(Rect inRect) { //grab before anchor/font GameFont fontBefore = Text.Font; TextAnchor anchorBefore = Text.Anchor; //top label Text.Font = GameFont.Small; Text.Anchor = TextAnchor.MiddleCenter; Text.Anchor = TextAnchor.MiddleLeft; int i = 0; foreach (FCPrisoner prisoner in prisoners) { Rect Box; Rect PawnIcon; Rect PawnName; Rect PawnHealth; Rect PawnUnrest; Rect PawnWorkload; Rect ButtonInfo; Rect ButtonAction; Box = optionBox; PawnIcon = optionPawnIcon; PawnName = optionPawnName; PawnHealth = optionPawnHealth; PawnUnrest = optionPawnUnrest; PawnWorkload = optionPawnWorkload; ButtonInfo = optionButtonInfo; ButtonAction = optionButtonAction; Box.y += scroll + optionHeight * i; PawnIcon.y += scroll + optionHeight * i; PawnName.y += scroll + optionHeight * i; PawnHealth.y += scroll + optionHeight * i; PawnUnrest.y += scroll + optionHeight * i; PawnWorkload.y += scroll + optionHeight * i; ButtonInfo.y += scroll + optionHeight * i; ButtonAction.y += scroll + optionHeight * i; //display stuff now Widgets.DrawMenuSection(Box); //on every other box if (i % 2 == 0) { Widgets.DrawHighlight(Box); } //show pawn; Widgets.ThingIcon(PawnIcon, prisoner.prisoner); //Pawn Name Widgets.Label(PawnName, prisoner.prisoner.Name.ToString()); //Pawn Health Widgets.Label(PawnHealth, "Health".Translate().CapitalizeFirst() + " " + prisoner.health); //Pawn Unrest //Widgets.Label(PawnUnrest, "Unrest".Translate().CapitalizeFirst() + " " + prisoner.unrest); //Pawn Workload string workload; switch (prisoner.workload) { case FCWorkLoad.Heavy: workload = "FCHeavy".Translate().CapitalizeFirst(); break; case FCWorkLoad.Medium: workload = "FCMedium".Translate().CapitalizeFirst(); break; case FCWorkLoad.Light: workload = "FCLight".Translate().CapitalizeFirst(); break; default: workload = "null"; break; } if (Widgets.ButtonText(PawnWorkload, "FCWorkload".Translate().CapitalizeFirst() + ": " + workload)) { List <FloatMenuOption> list = new List <FloatMenuOption>(); list.Add(new FloatMenuOption("FCHeavy".Translate().CapitalizeFirst() + " - " + "FCHeavyExplanation".Translate(), delegate { prisoner.workload = FCWorkLoad.Heavy; })); list.Add(new FloatMenuOption("FCMedium".Translate().CapitalizeFirst() + " - " + "FCMediumExplanation".Translate(), delegate { prisoner.workload = FCWorkLoad.Medium; })); list.Add(new FloatMenuOption("FCLight".Translate().CapitalizeFirst() + " - " + "FCLightExplanation".Translate(), delegate { prisoner.workload = FCWorkLoad.Light; })); FloatMenu menu = new FloatMenu(list); Find.WindowStack.Add(menu); } //Info Button if (Widgets.ButtonTextSubtle(ButtonInfo, "ViewInfo".Translate())) { Pawn pawn = new Pawn(); pawn = prisoner.prisoner; if (prisoner.healthTracker != null) { prisoner.prisoner.health = prisoner.healthTracker; } else { prisoner.prisoner.health = new Pawn_HealthTracker(prisoner.prisoner); prisoner.healthTracker = new Pawn_HealthTracker(prisoner.prisoner); } pawn.health = prisoner.healthTracker; Find.WindowStack.Add(new Dialog_InfoCard(pawn)); } //Action button if (Widgets.ButtonTextSubtle(ButtonAction, "Actions".Translate())) { List <FloatMenuOption> list = new List <FloatMenuOption>(); list.Add(new FloatMenuOption("SellPawn".Translate() + " $" + prisoner.prisoner.MarketValue + " " + "SellPawnInfo".Translate(), delegate { settlement.addSilverIncome(prisoner.prisoner.MarketValue); //reset window prisoners.Remove(prisoner); WindowUpdate(); return; })); list.Add(new FloatMenuOption("ReturnToPlayer".Translate(), delegate { if (prisoner.healthTracker != null) { prisoner.prisoner.health = prisoner.healthTracker; } else { prisoner.prisoner.health = new Pawn_HealthTracker(prisoner.prisoner); prisoner.healthTracker = new Pawn_HealthTracker(prisoner.prisoner); } if (!HealthUtility.TryAnesthetize(prisoner.prisoner)) { HealthUtility.DamageUntilDowned(prisoner.prisoner, false); } if (prisoner.prisoner.guest == null) { prisoner.prisoner.guest = new Pawn_GuestTracker(); } prisoner.prisoner.guest.guestStatusInt = GuestStatus.Prisoner; FieldInfo hostFaction = typeof(Pawn_GuestTracker).GetField("hostFactionInt", BindingFlags.NonPublic | BindingFlags.Instance); hostFaction.SetValue(prisoner.prisoner.guest, Find.FactionManager.OfPlayer); DeliveryEvent.CreateDeliveryEvent(new FCEvent { location = Find.AnyPlayerHomeMap.Tile, source = settlement.mapLocation, planetName = settlement.planetName, goods = new List <Thing> { prisoner.prisoner }, customDescription = "aPrisonerIsBeingDeliveredToYou".Translate(), timeTillTrigger = Find.TickManager.TicksGame + FactionColonies.ReturnTicksToArrive(settlement.mapLocation, Find.AnyPlayerHomeMap.Tile) }); //reset window prisoners.Remove(prisoner); WindowUpdate(); return; })); FloatMenu menu = new FloatMenu(list); Find.WindowStack.Add(menu); } //increment i i++; } Text.Font = fontBefore; Text.Anchor = anchorBefore; if (Event.current.type == EventType.ScrollWheel) { scrollWindow(Event.current.delta.y); } }
public override void Notify_QuestSignalReceived(Signal signal) { base.Notify_QuestSignalReceived(signal); if (!(signal.tag == inSignal)) { return; } pawns.RemoveAll((Pawn x) => x.Destroyed); items.RemoveAll((Thing x) => x.Destroyed); Thing thing = Things.Where((Thing x) => x is Pawn).MaxByWithFallback((Thing x) => x.MarketValue); Thing thing2 = Things.MaxByWithFallback((Thing x) => x.MarketValue * (float)x.stackCount); if (mapParent != null && mapParent.HasMap && Things.Any()) { Map map = mapParent.Map; IntVec3 intVec = (dropSpot.IsValid ? dropSpot : GetRandomDropSpot()); if (sendStandardLetter) { TaggedString title; TaggedString text; if (joinPlayer && pawns.Count == 1 && pawns[0].RaceProps.Humanlike) { text = "LetterRefugeeJoins".Translate(pawns[0].Named("PAWN")); title = "LetterLabelRefugeeJoins".Translate(pawns[0].Named("PAWN")); PawnRelationUtility.TryAppendRelationsWithColonistsInfo(ref text, ref title, pawns[0]); } else { text = "LetterQuestDropPodsArrived".Translate(GenLabel.ThingsLabel(Things)); title = "LetterLabelQuestDropPodsArrived".Translate(); PawnRelationUtility.Notify_PawnsSeenByPlayer_Letter(pawns, ref title, ref text, "LetterRelatedPawnsNeutralGroup".Translate(Faction.OfPlayer.def.pawnsPlural), informEvenIfSeenBefore: true); } title = (customLetterLabel.NullOrEmpty() ? title : customLetterLabel.Formatted(title.Named("BASELABEL"))); text = (customLetterText.NullOrEmpty() ? text : customLetterText.Formatted(text.Named("BASETEXT"))); Find.LetterStack.ReceiveLetter(title, text, customLetterDef ?? LetterDefOf.PositiveEvent, new TargetInfo(intVec, map), null, quest); } if (joinPlayer) { for (int i = 0; i < pawns.Count; i++) { if (pawns[i].Faction != Faction.OfPlayer) { pawns[i].SetFaction(Faction.OfPlayer); } } } else if (makePrisoners) { for (int j = 0; j < pawns.Count; j++) { if (pawns[j].RaceProps.Humanlike) { if (!pawns[j].IsPrisonerOfColony) { pawns[j].guest.SetGuestStatus(Faction.OfPlayer, prisoner: true); } HealthUtility.TryAnesthetize(pawns[j]); } } } for (int k = 0; k < pawns.Count; k++) { pawns[k].needs.SetInitialLevels(); } DropPodUtility.DropThingsNear(intVec, map, Things, 110, canInstaDropDuringInit: false, leaveSlag: false, !useTradeDropSpot, forbid: false); importantLookTarget = items.Find((Thing x) => x.GetInnerIfMinified() is MonumentMarker).GetInnerIfMinified(); items.Clear(); } if (!outSignalResult.NullOrEmpty()) { if (thing != null) { Find.SignalManager.SendSignal(new Signal(outSignalResult, thing.Named("SUBJECT"))); } else if (thing2 != null) { Find.SignalManager.SendSignal(new Signal(outSignalResult, thing2.Named("SUBJECT"))); } else { Find.SignalManager.SendSignal(new Signal(outSignalResult)); } } }