Beispiel #1
0
        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);
        }
Beispiel #4
0
 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();
            }
        }
Beispiel #8
0
        // 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);
 }