protected override IEnumerable <Toil> MakeNewToils() { this.FailOnDestroyedOrNull(TargetIndex.A); this.FailOnBurningImmobile(TargetIndex.B); this.FailOn(() => ((Pawn)((Thing)this.$this.GetActor().CurJob.GetTarget(TargetIndex.A))).guest.interactionMode != PrisonerInteractionModeDefOf.Release); this.FailOnDowned(TargetIndex.A); this.FailOnAggroMentalState(TargetIndex.A); yield return(Toils_Goto.GotoThing(TargetIndex.A, PathEndMode.ClosestTouch).FailOn(() => !this.$this.Prisoner.IsPrisonerOfColony || !this.$this.Prisoner.guest.PrisonerIsSecure).FailOnSomeonePhysicallyInteracting(TargetIndex.A)); yield return(Toils_Haul.StartCarryThing(TargetIndex.A, false, false, false)); Toil carryToCell = Toils_Haul.CarryHauledThingToCell(TargetIndex.B); yield return(carryToCell); yield return(Toils_Haul.PlaceHauledThingInCell(TargetIndex.B, carryToCell, false)); Toil setReleased = new Toil(); setReleased.initAction = delegate { Pawn actor = setReleased.actor; Job curJob = actor.jobs.curJob; Pawn p = curJob.targetA.Thing as Pawn; GenGuest.PrisonerRelease(p); }; yield return(setReleased); }
public override void Arrived(List <ActiveDropPodInfo> pods, int tile) { for (int i = 0; i < pods.Count; i++) { for (int j = 0; j < pods[i].innerContainer.Count; j++) { Pawn pawn = pods[i].innerContainer[j] as Pawn; if (pawn == null) { continue; } if (pawn.RaceProps.Humanlike) { GenGuest.AddPrisonerSoldThoughts(pawn); } else if (pawn.RaceProps.Animal && pawn.relations != null) { Pawn firstDirectRelationPawn = pawn.relations.GetFirstDirectRelationPawn(PawnRelationDefOf.Bond); if (firstDirectRelationPawn != null && firstDirectRelationPawn.needs.mood != null) { pawn.relations.RemoveDirectRelation(PawnRelationDefOf.Bond, firstDirectRelationPawn); firstDirectRelationPawn.needs.mood.thoughts.memories.TryGainMemory(ThoughtDefOf.SoldMyBondedAnimalMood); } } } } FactionGiftUtility.GiveGift(pods, settlement); }
protected override IEnumerable <Toil> MakeNewToils() { this.FailOnDestroyedOrNull(TargetIndex.A); this.FailOnBurningImmobile(TargetIndex.B); this.FailOn(() => ((Pawn)(Thing)GetActor().CurJob.GetTarget(TargetIndex.A)).guest.interactionMode != PrisonerInteractionModeDefOf.Release); this.FailOnDowned(TargetIndex.A); this.FailOnAggroMentalState(TargetIndex.A); yield return(Toils_Goto.GotoThing(TargetIndex.A, PathEndMode.ClosestTouch).FailOn(() => !Prisoner.IsPrisonerOfColony || !Prisoner.guest.PrisonerIsSecure).FailOnSomeonePhysicallyInteracting(TargetIndex.A)); yield return(Toils_Haul.StartCarryThing(TargetIndex.A)); Toil carryToCell = Toils_Haul.CarryHauledThingToCell(TargetIndex.B); yield return(carryToCell); yield return(Toils_Haul.PlaceHauledThingInCell(TargetIndex.B, carryToCell, storageMode: false)); Toil setReleased = new Toil(); setReleased.initAction = delegate { Pawn pawn = setReleased.actor.jobs.curJob.targetA.Thing as Pawn; GenGuest.PrisonerRelease(pawn); pawn.guest.ClearLastRecruiterData(); if (!PawnBanishUtility.WouldBeLeftToDie(pawn, pawn.Map.Tile)) { GenGuest.AddHealthyPrisonerReleasedThoughts(pawn); } }; yield return(setReleased); }
public override void Arrived(List <ActiveDropPodInfo> pods, int tile) { for (int i = 0; i < pods.Count; i++) { for (int j = 0; j < pods[i].innerContainer.Count; j++) { Pawn pawn = pods[i].innerContainer[j] as Pawn; if (pawn != null) { if (pawn.RaceProps.Humanlike) { Pawn arg; if (pawn.HomeFaction == this.settlement.Faction) { GenGuest.AddHealthyPrisonerReleasedThoughts(pawn); } else if (PawnsFinder.AllMapsCaravansAndTravelingTransportPods_Alive_FreeColonists.TryRandomElement(out arg)) { Find.HistoryEventsManager.RecordEvent(new HistoryEvent(HistoryEventDefOf.SoldSlave, arg.Named(HistoryEventArgsNames.Doer)), true); } } else if (pawn.RaceProps.Animal && pawn.relations != null) { Pawn firstDirectRelationPawn = pawn.relations.GetFirstDirectRelationPawn(PawnRelationDefOf.Bond, null); if (firstDirectRelationPawn != null && firstDirectRelationPawn.needs.mood != null) { pawn.relations.RemoveDirectRelation(PawnRelationDefOf.Bond, firstDirectRelationPawn); firstDirectRelationPawn.needs.mood.thoughts.memories.TryGainMemory(ThoughtDefOf.SoldMyBondedAnimalMood, null, null); } } } } } FactionGiftUtility.GiveGift(pods, this.settlement); }
public bool MoveNext() { uint num = (uint)this.$PC; this.$PC = -1; switch (num) { case 0u: this.FailOnDestroyedOrNull(TargetIndex.A); this.FailOnBurningImmobile(TargetIndex.B); this.FailOn(() => ((Pawn)((Thing)this.GetActor().CurJob.GetTarget(TargetIndex.A))).guest.interactionMode != PrisonerInteractionModeDefOf.Release); this.FailOnDowned(TargetIndex.A); this.FailOnAggroMentalState(TargetIndex.A); this.$current = Toils_Goto.GotoThing(TargetIndex.A, PathEndMode.ClosestTouch).FailOn(() => !this.Prisoner.IsPrisonerOfColony || !this.Prisoner.guest.PrisonerIsSecure).FailOnSomeonePhysicallyInteracting(TargetIndex.A); if (!this.$disposing) { this.$PC = 1; } return(true); case 1u: this.$current = Toils_Haul.StartCarryThing(TargetIndex.A, false, false, false); if (!this.$disposing) { this.$PC = 2; } return(true); case 2u: carryToCell = Toils_Haul.CarryHauledThingToCell(TargetIndex.B); this.$current = carryToCell; if (!this.$disposing) { this.$PC = 3; } return(true); case 3u: this.$current = Toils_Haul.PlaceHauledThingInCell(TargetIndex.B, carryToCell, false); if (!this.$disposing) { this.$PC = 4; } return(true); case 4u: < MakeNewToils > c__AnonStorey.setReleased = new Toil(); < MakeNewToils > c__AnonStorey.setReleased.initAction = delegate() { Pawn actor = < MakeNewToils > c__AnonStorey.setReleased.actor; Job curJob = actor.jobs.curJob; Pawn p = curJob.targetA.Thing as Pawn; GenGuest.PrisonerRelease(p); }; this.$current = < MakeNewToils > c__AnonStorey.setReleased; if (!this.$disposing) { this.$PC = 5; } return(true);
public override void Achieve() { foreach (var pawn in Prisoners) { GenGuest.PrisonerRelease(pawn); pawn.DeSpawn(DestroyMode.Vanish); } base.Achieve(); }
public override void DoWindowContents(Rect inRect) { Listing_Standard listingStandard = new Listing_Standard(); listingStandard.Begin(inRect); listingStandard.Label("RansomBargain".Translate(this.prisoner.Name.ToStringFull, this.prisoner.Faction.Name)); listingStandard.Gap(); listingStandard.Gap(); listingStandard.Gap(); listingStandard.Label(label: $"RansomDemandAmount".Translate(RansomSettings.MarketValuePercentage(this.prisoner, this.percentage).ToString(CultureInfo.CurrentCulture), ThingDefOf.Silver.LabelCap)); this.percentage = listingStandard.Slider(this.percentage, -50f, 50f); listingStandard.Gap(); listingStandard.Label(label: $"RansomDemandChance".Translate(Mathf.RoundToInt(RansomSettings.RansomChance(this.prisoner, this.handler, this.percentage) * 100).ToString(CultureInfo.CurrentCulture))); if (listingStandard.ButtonText("RansomSendOffer".Translate())) { Faction faction = this.prisoner.Faction; if (Rand.Value < RansomSettings.RansomChance(this.prisoner, this.handler, this.percentage)) { Messages.Message(text: "RansomFactionDeliveredMessage".Translate(), def: MessageTypeDefOf.PositiveEvent); Thing silver = ThingMaker.MakeThing(def: ThingDefOf.Silver); silver.stackCount = RansomSettings.MarketValuePercentage(this.prisoner, this.percentage); TradeUtility.SpawnDropPod(dropSpot: DropCellFinder.TradeDropSpot(map: this.prisoner.Map), map: this.prisoner.Map, t: silver); if (this.prisoner.Spawned) { GenGuest.PrisonerRelease(p: this.prisoner); this.prisoner.DeSpawn(); } //TaleRecorder.RecordTale(TaleDefOf.SoldPrisoner, this.handler, this.prisoner); //faction.TryAffectGoodwillWith(other: Faction.OfPlayer, RansomSettings.settings.ransomGoodwill); Find.WindowStack.Add(new Dialog_MessageBox("RansomPrisonerSend".Translate())); } else { Find.WindowStack.Add(new Dialog_MessageBox("RansomNotAccepted".Translate())); //faction.TryAffectGoodwillWith(other: Faction.OfPlayer, goodwillChange: RansomSettings.settings.ransomGoodwillFail); IncidentParms incidentParms = StorytellerUtility.DefaultParmsNow(IncidentCategoryDefOf.ThreatBig, this.prisoner.Map); incidentParms.faction = faction; incidentParms.raidStrategy = RaidStrategyDefOf.ImmediateAttack; Find.Storyteller.incidentQueue.Add(IncidentDefOf.RaidEnemy, Find.TickManager.TicksGame + RansomSettings.settings.ransomRaidDelay, incidentParms, RansomSettings.settings.ransomRaidDelay); } this.Close(); } if (listingStandard.ButtonText("Back".Translate())) { this.Close(); } }
// Token: 0x06000057 RID: 87 RVA: 0x00003930 File Offset: 0x00001B30 public void endBrawl(Pawn pawn = null, bool suspended = false) { this.currentState = Building_Bell.State.rest; Pawn winner = null; Pawn loser = null; if (suspended) { Messages.Message("The brawl was suspended.", MessageTypeDefOf.RejectInput, true); } else { Messages.Message("The winner is " + pawn.Name.ToStringShort + "!", MessageTypeDefOf.RejectInput, true); bool flag = pawn == this.fighter1.p; if (flag) { winner = this.fighter1.p; loser = this.fighter2.p; } else { bool flag2 = pawn == this.fighter2.p; if (flag2) { winner = this.fighter2.p; loser = this.fighter1.p; } } if (winnerGetsFreedom) { if (winner.IsPrisonerOfColony) { GenGuest.PrisonerRelease(winner); Messages.Message(pawn.NameFullColored + " has won their freedom and will try to leave this place as soon as possible.", MessageTypeDefOf.PositiveEvent, true); //TryReleasePrisoner(winner); } } else { if (winner.needs.mood != null) { winner.needs.mood.thoughts.memories.TryGainMemory(ThoughtDefOfArena.ArenaWinner, null); } } if (!loser.Dead && loser.needs.mood != null) { loser.needs.mood.thoughts.memories.TryGainMemory(ThoughtDefOfArena.ArenaLoser, null); } winners.Add(winner.NameFullColored); } this.fighter1 = new Fighter(); this.fighter2 = new Fighter(); }
public override void Arrived(List <ActiveDropPodInfo> pods, int tile) { for (int i = 0; i < pods.Count; i++) { for (int j = 0; j < pods[i].innerContainer.Count; j++) { Pawn pawn = pods[i].innerContainer[j] as Pawn; if (pawn != null && pawn.RaceProps.Humanlike) { GenGuest.AddPrisonerSoldThoughts(pawn); } } } FactionGiftUtility.GiveGift(pods, settlement); }