Пример #1
0
 private void PodOpen()
 {
     for (int i = 0; i < this.info.containedThings.Count; i++)
     {
         Thing thing = this.info.containedThings[i];
         GenPlace.TryPlaceThing(thing, base.Position, ThingPlaceMode.Near);
         Pawn pawn = thing as Pawn;
         if (pawn != null && pawn.RaceProps.Humanlike)
         {
             TaleRecorder.RecordTale(TaleDef.Named("LandedInPod"), new object[]
             {
                 pawn
             });
         }
     }
     this.info.containedThings.Clear();
     if (this.info.leaveSlag)
     {
         for (int j = 0; j < 1; j++)
         {
             Thing thing2 = ThingMaker.MakeThing(ThingDefOf.ChunkSlagSteel, null);
             GenPlace.TryPlaceThing(thing2, base.Position, ThingPlaceMode.Near);
         }
     }
     SoundDef.Named("DropPodOpen").PlayOneShot(base.Position);
 }
Пример #2
0
 private void ShipOpen()
 {
     // loop over all contents
     for (int i = 0; i < this.info.containedThings.Count; i++)
     {
         // Setup a new thing
         Thing thing = this.info.containedThings[i];
         // Place thing in world
         GenPlace.TryPlaceThing(thing, GenAdj.RandomAdjacentCell8Way(this.Position), ThingPlaceMode.Near);
         // If its a pawn
         Pawn pawn = thing as Pawn;
         // if its a humanlike pawn
         if (pawn != null && pawn.RaceProps.Humanlike)
         {
             // Record a tale
             TaleRecorder.RecordTale(TaleDef.Named("LandedInPod"), new object[]
             {
                 pawn
             });
         }
     }
     // All contents dealt with, clear list
     this.info.containedThings.Clear();
     // Play open sound
     DropPodCrashed.OpenSound.PlayOneShot(base.Position);
 }
        public static void ApplyTaleDef(string defName, Map map)
        {
            var randomPawn = map.mapPawns.FreeColonists.RandomElement();
            var taleToAdd  = TaleDef.Named(defName);

            TaleRecorder.RecordTale(taleToAdd, randomPawn);
        }
Пример #4
0
 public Recipe_Treatment(TraitDef treatedTrait, HediffDef treatedHediff, string treatedTraitName, float treatedDifficulty, TaleDef treatedTale, int treatedDegree = 0) : base()
 {
     traitDef         = treatedTrait;
     traitDegree      = treatedDegree;
     hediffDef        = treatedHediff;
     traitName        = treatedTraitName;
     difficultyFactor = treatedDifficulty;
     taleDef          = treatedTale;
 }
        public static void ApplyTaleDef(string defName, Pawn pawn)
        {
            var taleToAdd = TaleDef.Named(defName);

            if ((pawn.IsColonist || pawn.IsSlaveOfColony || pawn.HostFaction == Faction.OfPlayer) && taleToAdd != null)
            {
                TaleRecorder.RecordTale(taleToAdd, pawn);
            }
        }
Пример #6
0
        private static void LogSpecificTale(TaleDef def, int count)
        {
            List <Tale> list = new List <Tale>();

            for (int i = 0; i < count; i++)
            {
                list.Add(TaleFactory.MakeRandomTestTale(def));
            }
            LogTales(list);
        }
Пример #7
0
        public static void ApplyTaleDef(string defName, Map map)
        {
            Pawn    randomPawn = map.mapPawns.FreeColonists.RandomElement <Pawn>();
            TaleDef taleToAdd  = TaleDef.Named(defName);

            TaleRecorder.RecordTale(taleToAdd, new object[]
            {
                randomPawn,
            });
        }
 private static void Postfix(Tale __result, TaleDef def, params object[] args)
 {
     if (__result != null)
     {
         Log.Message($"{def.defName} Recording new tale: {__result}");
     }
     else
     {
         Log.Message("Couldn't create new tale: " + def + " - " + args);
     }
 }
Пример #9
0
        public static void ApplyTaleDef(string defName, Pawn pawn)
        {
            TaleDef taleToAdd = TaleDef.Named(defName);

            if ((pawn.IsColonist || pawn.HostFaction == Faction.OfPlayer) && taleToAdd != null)
            {
                TaleRecorder.RecordTale(taleToAdd, new object[]
                {
                    pawn,
                });
            }
        }
Пример #10
0
        public static void ArtDescsSpecificTale()
        {
            List <FloatMenuOption> list = new List <FloatMenuOption>();

            foreach (TaleDef item2 in DefDatabase <TaleDef> .AllDefs.OrderBy((TaleDef def) => def.defName))
            {
                TaleDef         localDef = item2;
                FloatMenuOption item     = new FloatMenuOption(localDef.defName, delegate
                {
                    LogSpecificTale(localDef, 40);
                });
                list.Add(item);
            }
            Find.WindowStack.Add(new FloatMenu(list));
        }
        public override void SpawnSetup()
        {
            base.SpawnSetup();

            var     thingDef = (ThingSpawnPawnDef)def;
            var     newPawn  = (PawnConverted)PawnGenerator.GeneratePawn(thingDef.spawnPawnDef, Faction.OfColony);
            IntVec3 pos      = CellFinder.RandomClosewalkCellNear(Position, 2);

            newPawn.workTypes = thingDef.workTypes;
            GenSpawn.Spawn(newPawn, pos);

            TaleRecorder.RecordTale(TaleDef.Named("CreatedMechanoid"), new object[] { newPawn });

            Destroy();
        }
            public static bool Listener(TaleDef def, params object[] args)
            {
                Pawn p1  = null;
                Pawn p2  = null;
                var  nba = args.Count();

                if (nba >= 2)
                {
                    p1 = args[0] as Pawn;
                    p2 = args[1] as Pawn;
                }
                else if (nba == 1)
                {
                    p1 = args[0] as Pawn;
                }
                else
                {
                    return(true);
                }


                if (def == TaleDefOf.KilledColonist)
                {
                    if (p2 != null && (Utils.ExceptionAndroidListBasic.Contains(p2.def.defName) ||
                                       p2.TryGetComp <CompAndroidState>() != null && p2.TryGetComp <CompAndroidState>().isSurrogate))
                    {
                        return(false);
                    }
                }

                else if (def == TaleDefOf.ButcheredHumanlikeCorpse)
                {
                    if (Utils.lastButcheredPawnIsAndroid)
                    {
                        return(false);
                    }
                }

                else if (def == TaleDefOf.AteRawHumanlikeMeat)
                {
                    if (p1 != null && Utils.ExceptionAndroidList.Contains(p1.def.defName))
                    {
                        return(false);
                    }
                }

                return(true);
            }
Пример #13
0
        public void StartPlaying(Pawn musician, Thing instrument, Thing venue, bool isWork)
        {
            var venueHash = venue.GetHashCode();

            foreach (var otherVenueHash in Performances.Keys)
            {
                if (!RadiusAndRoomCheck(Performances[otherVenueHash].Venue, venue))
                {
                    continue;
                }

                venueHash = otherVenueHash;
                break;
            }

            if (!Performances.ContainsKey(venueHash))
            {
                Performances[venueHash] = new Performance(venue);
            }

            var musicianHash = musician.GetHashCode();

            if (Performances[venueHash].Performers.ContainsKey(musicianHash))
            {
                return;
            }

            Performances[venueHash].Performers[musicianHash] =
                new Performer {
                Musician = musician, Instrument = instrument
            };
            Performances[venueHash].CalculateQuality();

            if (Performances[venueHash].Quality >= 2f)
            {
                TaleRecorder.RecordTale(TaleDef.Named("PlayedMusic"), musician, instrument.def);
            }

            if (isWork)
            {
                WorkPerformanceTimestamps[musician.GetHashCode()] = Find.TickManager.TicksGame;
            }

#if DEBUG
            Verse.Log.Message(string.Format("Musicians: {0}", string.Join(", ", Performances[venueHash].Performers.Select(x => LogMusician(x.Value.Musician, x.Value.Instrument)).ToArray())));
            Verse.Log.Message(string.Format("Quality: {0}", Performances[venueHash].Quality));
#endif
        }
Пример #14
0
            public static bool Listener(TaleDef def, params object[] args)
            {
                Pawn p2  = null;
                int  nba = args.Length;

                Pawn p1;

                if (nba >= 2)
                {
                    p1 = args[0] as Pawn;
                    p2 = args[1] as Pawn;
                }
                else if (nba == 1)
                {
                    p1 = args[0] as Pawn;
                }
                else
                {
                    return(true);
                }

                //Si colon tué est un T1/T2 OU un surrogate on s'en fou
                if (def == TaleDefOf.KilledColonist)
                {
                    if (p2 != null && (Utils.ExceptionAndroidListBasic.Contains(p2.def.defName) || (p2.TryGetComp <CompAndroidState>() != null && p2.TryGetComp <CompAndroidState>().isSurrogate)))
                    {
                        return(false);
                    }
                }
                //Si androide butcherisé
                else if (def == TaleDefOf.ButcheredHumanlikeCorpse)
                {
                    if (Utils.lastButcheredPawnIsAndroid)
                    {
                        return(false);
                    }
                }
                //SI viande humaine mangée par androide
                else if (def == TaleDefOf.AteRawHumanlikeMeat)
                {
                    if (p1 != null && Utils.ExceptionAndroidList.Contains(p1.def.defName))
                    {
                        return(false);
                    }
                }

                return(true);
            }
Пример #15
0
        private static void RecruitingSuccess(Pawn guest)
        {
            PlayerKnowledgeDatabase.KnowledgeDemonstrated(ConceptDef.Named("RecruitGuest"), KnowledgeAmount.Total);

            Find.LetterStack.ReceiveLetter(labelRecruitSuccess, String.Format(txtRecruitSuccess, guest), LetterType.Good, guest);

            if (guest.Faction != Faction.OfPlayer)
            {
                if (guest.Faction != null)
                {
                    guest.Faction.AffectGoodwillWith(Faction.OfPlayer, -guest.RecruitPenalty());
                    if (guest.RecruitPenalty() >= 1)
                    {
                        //Log.Message("txtRecruitFactionAnger");
                        string message;
                        if (guest.Faction.leader != null)
                        {
                            message = String.Format(txtRecruitFactionAnger, guest.Faction.leader.Name, guest.Faction.Name, guest.NameStringShort, (-guest.RecruitPenalty()).ToStringByStyle(ToStringStyle.Integer, ToStringNumberSense.Offset));
                            Find.LetterStack.ReceiveLetter(labelRecruitFactionChiefAnger, message, LetterType.BadNonUrgent);
                        }
                        else
                        {
                            message = String.Format(txtRecruitFactionAngerLeaderless, guest.Faction.Name, guest.NameStringShort, (-guest.RecruitPenalty()).ToStringByStyle(ToStringStyle.Integer, ToStringNumberSense.Offset));
                            Find.LetterStack.ReceiveLetter(labelRecruitFactionAnger, message, LetterType.BadNonUrgent);
                        }
                    }
                    else if (guest.RecruitPenalty() <= -1)
                    {
                        //Log.Message("txtRecruitFactionPlease");
                        string message;
                        if (guest.Faction.leader != null)
                        {
                            message = String.Format(txtRecruitFactionPlease, guest.Faction.leader.Name, guest.Faction.Name, guest.NameStringShort, (-guest.RecruitPenalty()).ToStringByStyle(ToStringStyle.Integer, ToStringNumberSense.Offset));
                            Find.LetterStack.ReceiveLetter(labelRecruitFactionChiefPlease, message, LetterType.Good);
                        }
                        else
                        {
                            message = String.Format(txtRecruitFactionPleaseLeaderless, guest.Faction.Name, guest.NameStringShort, (-guest.RecruitPenalty()).ToStringByStyle(ToStringStyle.Integer, ToStringNumberSense.Offset));
                            Find.LetterStack.ReceiveLetter(labelRecruitFactionPlease, message, LetterType.Good);
                        }
                    }
                }
                guest.Adopt();
            }
            var taleParams = new object[] { guest.MapHeld.mapPawns.FreeColonistsSpawned.RandomElement(), guest };

            TaleRecorder.RecordTale(TaleDef.Named("Recruited"), taleParams);
        }
        public static Tale GetLatestTale(TaleDef def, Predicate <Tale> predicate)
        {
            Tale tale  = null;
            int  num   = 0;
            var  tales = Find.TaleManager.AllTalesListForReading;

            for (int i = 0; i < tales.Count; i++)
            {
                if (tales[i].def == def && predicate(tales[i]) && (tale == null || tales[i].AgeTicks < num))
                {
                    tale = tales[i];
                    num  = tales[i].AgeTicks;
                }
            }
            return(tale);
        }
        public static Tale_DoublePawn GetLatestDoublePawnTale(TaleDef def, Predicate <Tale_DoublePawn> predicate)
        {
            Tale_DoublePawn tale = null;
            int             num  = 0;

            for (int i = 0; i < Find.TaleManager.AllTalesListForReading.Count; i++)
            {
                var latestTale = Find.TaleManager.AllTalesListForReading[i];
                if (latestTale.def == def && latestTale is Tale_DoublePawn tale_doublePawn && predicate(tale_doublePawn) && (tale == null || latestTale.AgeTicks < num))
                {
                    tale = tale_doublePawn;
                    num  = latestTale.AgeTicks;
                }
            }
            return(tale);
        }
Пример #18
0
        private static void RecruitingSuccess(Pawn guest, int recruitPenalty)
        {
            if (guest.Faction != Faction.OfPlayer)
            {
                if (guest.Faction != null)
                {
                    guest.Faction.TryAffectGoodwillWith(Faction.OfPlayer, -recruitPenalty, false, true, null, guest);
                    if (recruitPenalty >= 1)
                    {
                        // TODO: Use Translate instead of Format
                        string message;
                        if (guest.Faction.leader != null)
                        {
                            message = Format(txtRecruitFactionAnger, guest.Faction.leader.Name, guest.Faction.Name, guest.Name.ToStringShort, GenText.ToStringByStyle(-recruitPenalty, ToStringStyle.Integer, ToStringNumberSense.Offset));
                            Find.LetterStack.ReceiveLetter(labelRecruitFactionChiefAnger, message, LetterDefOf.NegativeEvent, GlobalTargetInfo.Invalid, guest.Faction);
                        }
                        else
                        {
                            message = Format(txtRecruitFactionAngerLeaderless, guest.Faction.Name, guest.Name.ToStringShort, GenText.ToStringByStyle(-recruitPenalty, ToStringStyle.Integer, ToStringNumberSense.Offset));
                            Find.LetterStack.ReceiveLetter(labelRecruitFactionAnger, message, LetterDefOf.NegativeEvent, GlobalTargetInfo.Invalid, guest.Faction);
                        }
                    }
                    else if (recruitPenalty <= -1)
                    {
                        // TODO: Use Translate instead of Format
                        string message;
                        if (guest.Faction.leader != null)
                        {
                            message = Format(txtRecruitFactionPlease, guest.Faction.leader.Name, guest.Faction.Name, guest.Name.ToStringShort, GenText.ToStringByStyle(-recruitPenalty, ToStringStyle.Integer, ToStringNumberSense.Offset));
                            Find.LetterStack.ReceiveLetter(labelRecruitFactionChiefPlease, message, LetterDefOf.PositiveEvent, GlobalTargetInfo.Invalid, guest.Faction);
                        }
                        else
                        {
                            message = Format(txtRecruitFactionPleaseLeaderless, guest.Faction.Name, guest.Name.ToStringShort, GenText.ToStringByStyle(-recruitPenalty, ToStringStyle.Integer, ToStringNumberSense.Offset));
                            Find.LetterStack.ReceiveLetter(labelRecruitFactionPlease, message, LetterDefOf.PositiveEvent, GlobalTargetInfo.Invalid, guest.Faction);
                        }
                    }
                }

                guest.Adopt();
            }

            var taleParams = new object[] { guest.MapHeld.mapPawns.FreeColonistsSpawned.RandomElement(), guest };

            TaleRecorder.RecordTale(TaleDef.Named("Recruited"), taleParams);
        }
Пример #19
0
        public void InitializeCult(Pawn newFounder)
        {
            Map map = newFounder.Map;

            founder         = newFounder;
            leader          = newFounder;
            foundingFaction = newFounder.Faction;
            foundingCity    = Find.WorldObjects.SettlementAt(newFounder.Map.Tile);
            influences      = new List <CultInfluence>();
            foreach (Settlement set in Find.WorldObjects.Settlements)
            {
                if (set == foundingCity)
                {
                    influences.Add(new CultInfluence(set, 1.0f));
                }
                else
                {
                    influences.Add(new CultInfluence(set, 0.0f));
                }
            }
            active = true;
            Find.World.GetComponent <WorldComponent_GlobalCultTracker>().worldCults.Add(this);

            if (foundingFaction == Faction.OfPlayerSilentFail)
            {
                SendCultLetterFounded(newFounder);

                //It's a day to remember
                TaleDef taleToAdd = TaleDef.Named("FoundedCult");
                if ((newFounder.IsColonist || newFounder.HostFaction == Faction.OfPlayer) && taleToAdd != null)
                {
                    TaleRecorder.RecordTale(taleToAdd, new object[]
                    {
                        newFounder,
                    });
                }
                //The founder will remember that, too.
                newFounder.needs.mood.thoughts.memories.TryGainMemory(CultsDefOf.Cults_FoundedCult);
                map.GetComponent <MapComponent_LocalCultTracker>().ResolveTerribleCultFounder(newFounder);
            }
        }
        protected override IEnumerable <Toil> MakeNewToils()
        {
            //Commence fail checks!

            this.FailOnDestroyedOrNull(TargetIndex.A);
            this.FailOnDestroyedOrNull(TargetIndex.B);
            this.FailOnAggroMentalState(TargetIndex.A);

            yield return(Toils_Reserve.Reserve(TakeeIndex));

            yield return(Toils_Reserve.Reserve(AltarIndex, Building_SacrificialAltar.LyingSlotsCount));

            yield return(new Toil
            {
                initAction = delegate
                {
                    DropAltar.ChangeState(Building_SacrificialAltar.State.sacrificing,
                                          Building_SacrificialAltar.SacrificeState.gathering);
                }
            });

            //Toil 1: Go to prisoner.
            yield return(Toils_Goto.GotoThing(TargetIndex.A, PathEndMode.ClosestTouch)
                         .FailOnDespawnedNullOrForbidden(TargetIndex.A).FailOnDespawnedNullOrForbidden(TargetIndex.B)
                         .FailOn(() => job.def == JobDefOf.Arrest && !Takee.CanBeArrestedBy(pawn))
                         .FailOn(() =>
                                 !pawn.CanReach(DropAltar, PathEndMode.OnCell, Danger.Deadly))
                         .FailOnSomeonePhysicallyInteracting(TargetIndex.A));

            yield return(new Toil
            {
                initAction = delegate
                {
                    if (!job.def.makeTargetPrisoner)
                    {
                        return;
                    }

                    var targetAThing = (Pawn)job.targetA.Thing;
                    var lord = targetAThing.GetLord();
                    lord?.Notify_PawnAttemptArrested(targetAThing);

                    GenClamor.DoClamor(targetAThing, 10f, ClamorDefOf.Harm);
                    if (job.def == JobDefOf.Arrest && !targetAThing.CheckAcceptArrest(pawn))
                    {
                        pawn.jobs.EndCurrentJob(JobCondition.Incompletable);
                    }
                }
            });

            //Toil 2: Carry prisoner.
            yield return(Toils_Haul.StartCarryThing(TargetIndex.A));

            //Toil 3: Go to the altar.
            yield return(Toils_Goto.GotoThing(TargetIndex.B, PathEndMode.InteractionCell));

            //Toil 4: Release the prisoner.
            yield return(Toils_Reserve.Release(TargetIndex.B));

            //Toil 5: Restrain the prisoner.
            yield return(new Toil
            {
                initAction = delegate
                {
                    //In-case this fails...
                    var position = DropAltar.Position;
                    pawn.carryTracker.TryDropCarriedThing(position, ThingPlaceMode.Direct, out _);
                    if (DropAltar.Destroyed || !DropAltar.AnyUnoccupiedLyingSlot)
                    {
                        return;
                    }

                    Takee.Position = DropAltar.GetLyingSlotPos();
                    Takee.Notify_Teleported(false);
                    Takee.stances.CancelBusyStanceHard();
                    var newJob = new Job(CultsDefOf.Cults_WaitTiedDown, DropAltar);
                    Takee.jobs.StartJob(newJob);
                },
                defaultCompleteMode = ToilCompleteMode.Instant
            });

            //Toil 6: Time to chant ominously
            var chantingTime = new Toil
            {
                defaultCompleteMode = ToilCompleteMode.Delay,
                defaultDuration     = CultUtility.ritualDuration
            };

            chantingTime.WithProgressBarToilDelay(TargetIndex.A);
            chantingTime.PlaySustainerOrSound(CultsDefOf.RitualChanting);
            var deitySymbol = ((CosmicEntityDef)DropAltar.SacrificeData.Entity.def).Symbol;

            chantingTime.initAction = delegate
            {
                if (deitySymbol != null)
                {
                    MoteMaker.MakeInteractionBubble(pawn, null, ThingDefOf.Mote_Speech, deitySymbol);
                }


                //STATE - SACRIFICING
                DropAltar.ChangeState(Building_SacrificialAltar.State.sacrificing,
                                      Building_SacrificialAltar.SacrificeState.sacrificing);
            };

            yield return(chantingTime);

            //Toil 8: Execution of Prisoner
            yield return(new Toil
            {
                initAction = delegate
                {
                    //BodyPartDamageInfo value = new BodyPartDamageInfo(this.Takee.health.hediffSet.GetBrain(), false, quiet);
                    Takee.TakeDamage(new DamageInfo(DamageDefOf.ExecutionCut, 99999, 0f, -1f, pawn,
                                                    Utility.GetHeart(Takee.health.hediffSet)));
                    if (!Takee.Dead)
                    {
                        Takee.Kill(null);
                    }

                    //ThoughtUtility.GiveThoughtsForPawnExecuted(this.Takee, PawnExecutionKind.GenericHumane);
                    TaleRecorder.RecordTale(TaleDefOf.ExecutedPrisoner, pawn, Takee);
                    CultUtility.SacrificeExecutionComplete(DropAltar);
                },
                defaultCompleteMode = ToilCompleteMode.Instant
            });

            AddFinishAction(() =>
            {
                //It's a day to remember
                var taleToAdd = TaleDef.Named("HeldSermon");
                if ((pawn.IsColonist || pawn.IsSlaveOfColony || pawn.HostFaction == Faction.OfPlayer) && taleToAdd != null)
                {
                    TaleRecorder.RecordTale(taleToAdd, pawn);
                }

                //When the ritual is finished -- then let's give the thoughts

                /*
                 * if (DropAltar.currentSacrificeState == Building_SacrificialAltar.SacrificeState.finished)
                 * {
                 *  if (this.pawn == null) return;
                 *  if (DropAltar.sacrifice != null)
                 *  {
                 *      CultUtility.AttendSacrificeTickCheckEnd(this.pawn, DropAltar.sacrifice, true);
                 *  }
                 *  else
                 *  {
                 *      CultUtility.AttendSacrificeTickCheckEnd(this.pawn, null);
                 *  }
                 * }
                 */
            });
        }
Пример #21
0
 static bool Prefix(TaleDef def, params object[] args)
 {
     //Prevent the recording of birth if both parents are animals to prevent unnecessary tales that keep global pawns from being garbage collected if they are used as art.
     return(!QOLMod.preventAnimalFamilies() || def != TaleDefOf.GaveBirth || args == null || args.Length < 1 || !IsAnimal(args[0] as Pawn) || args.Length < 2 || !IsAnimal(args[1] as Pawn));
 }
        protected override bool TryExecuteWorker(IncidentParms parms)
        {
            if (parms.target.PlayerWealthForStoryteller < 90000)
            {
                return(false);
            }
            Map map = (Map)parms.target;

            this.ResolveRaidPoints(parms);
            if (!this.TryResolveRaidFaction(parms))
            {
                return(false);
            }

            IntVec3 dropCenter;

            dropCenter = DropCellFinder.FindRaidDropCenterDistant(map);

            var combat = PawnGroupKindDefOf.Combat;

            this.ResolveRaidStrategy(parms, combat);
            this.ResolveRaidArriveMode(parms);
            if (!parms.raidArrivalMode.Worker.TryResolveRaidSpawnCenter(parms))
            {
                return(false);
            }
            PawnGroupMakerParms defaultPawnGroupMakerParms = IncidentParmsUtility.GetDefaultPawnGroupMakerParms(combat, parms, true);
            List <Pawn>         list = PawnGroupMakerUtility.GeneratePawns(defaultPawnGroupMakerParms, true).ToList <Pawn>();

            if (list.Count == 0)
            {
                Log.Error("Got no pawns spawning raid from parms " + parms);
                return(false);
            }
            TargetInfo      target = new TargetInfo(dropCenter, map);
            List <ShipBase> ships  = DropShipUtility.CreateDropShips(list, parms.faction);

            DropShipUtility.DropShipGroups(dropCenter, map, ships, ShipArrivalAction.EnterMapAssault);

            StringBuilder stringBuilder = new StringBuilder();

            stringBuilder.AppendLine("Points = " + parms.points.ToString("F0"));
            foreach (Pawn current2 in list)
            {
                string str = (current2.equipment == null || current2.equipment.Primary == null) ? "unarmed" : current2.equipment.Primary.LabelCap;
                stringBuilder.AppendLine(current2.KindLabel + " - " + str);
            }
            string letterLabel = this.GetLetterLabel(parms);
            string letterText  = this.GetLetterText(parms, list);

            PawnRelationUtility.Notify_PawnsSeenByPlayer_Letter(list, ref letterLabel, ref letterText, this.GetRelatedPawnsInfoLetterText(parms), true);
            Find.LetterStack.ReceiveLetter(letterLabel, letterText, this.GetLetterDef(), target, parms.faction, stringBuilder.ToString());
            if (this.GetLetterDef() == LetterDefOf.ThreatBig)
            {
                TaleDef raidTale = DefDatabase <TaleDef> .GetNamed("Raid", true);

                TaleRecorder.RecordTale(raidTale, new object[0]);
            }
            this.ResolveRaidParmOptions(parms);
            Lord lord = LordMaker.MakeNewLord(parms.faction, new LordJob_AerialAssault(ships, parms.faction, this.Kidnappers(parms.faction), true, this.UseSappers, this.SmartGrid, this.Stealers(parms.faction)), map, list);

            //Lord lord = LordMaker.MakeNewLord(parms.faction, new LordJob_AssaultColony(parms.faction, true, true, true, true, true), map, list);
            //AvoidGridMaker.RegenerateAvoidGridsFor(parms.faction, map);
            LessonAutoActivator.TeachOpportunity(ConceptDefOf.EquippingWeapons, OpportunityType.Critical);
            if (!PlayerKnowledgeDatabase.IsComplete(ConceptDefOf.ShieldBelts))
            {
                for (int i = 0; i < list.Count; i++)
                {
                    Pawn pawn = list[i];
                    if (pawn.apparel.WornApparel.Any((Apparel ap) => ap is ShieldBelt))
                    {
                        LessonAutoActivator.TeachOpportunity(ConceptDefOf.ShieldBelts, OpportunityType.Critical);
                        break;
                    }
                }
            }
            if (DebugViewSettings.drawStealDebug && parms.faction.HostileTo(Faction.OfPlayer))
            {
                Log.Message(string.Concat(new object[]
                {
                    "Market value threshold to start stealing: ",
                    StealAIUtility.StartStealingMarketValueThreshold(lord),
                    " (colony wealth = ",
                    map.wealthWatcher.WealthTotal,
                    ")"
                }));
            }
            return(true);
        }