Beispiel #1
0
        private void TryTransfer(Caravan caravan)
        {
            Map map = Find.AnyPlayerHomeMap;

            quest.CheckPrisoners();

            for (int i = quest.DropedPawns.Count - 1; i >= 0; i--)
            {
                Pawn p = quest.DropedPawns[i];
                if (caravan.ContainsPawn(p))
                {
                    caravan.pawns.Remove(p);
                    Find.WorldPawns.RemovePawn(p);
                    quest.DropedPawns.Remove(p);

                    IntVec3 intVec     = DropCellFinder.TradeDropSpot(map);
                    Thing   rewardCopy = ThingMaker.MakeThing(ThingDefOf.Silver);
                    rewardCopy.stackCount = quest.Rewards[0].stackCount;

                    DropPodUtility.DropThingsNear(intVec, map, new List <Thing> {
                        rewardCopy
                    }, 110, canInstaDropDuringInit: false, leaveSlag: false, canRoofPunch: false);

                    Find.LetterStack.ReceiveLetter("CaravanArrivalAction_TransferPrisoners_SuccessTitle".Translate(), "CaravanArrivalAction_TransferPrisoners_SuccessDesc".Translate(p.Name.ToStringFull, GssRaids.GssFaction.Name, quest.Rewards[0]), LetterDefOf.PositiveEvent, new LookTargets(intVec, map));
                }
            }

            if (quest.DropedPawns.Count == 0)
            {
                quest.Site.EndQuest(null, EndCondition.Success);
            }
        }
        public override void Notify_CaravanFormed(QuestSite site, Caravan caravan)
        {
            base.Notify_CaravanFormed(site, caravan);

            if (!caravan.pawns.InnerListForReading.Any(x => DropedPawns.Contains(x)))
            {
                Site.EndQuest(null, EndCondition.None);

                Find.LetterStack.ReceiveLetter("Quest_PrisonShipAccident_NCTitle".Translate(), "Quest_PrisonShipAccident_NCDesc".Translate(), LetterDefOf.NeutralEvent);
            }

            DropedPawns.RemoveAll(x => !caravan.ContainsPawn(x));

            UnlimitedTime = false;
            TicksToPass   = 4 * 60000;
        }
        private void TryTransfer(Caravan caravan)
        {
            StringBuilder builder = new StringBuilder();

            builder.Append("Quest_MissingPeople_End".Translate());
            int saved = 0;

            foreach (var pawn in quest.SavedPawns)
            {
                if (caravan.ContainsPawn(pawn))
                {
                    caravan.RemovePawn(pawn);
                    saved++;
                    builder.AppendLine($"- {pawn.Name.ToStringFull}");
                    pawn.Destroy();
                }
            }

            EndCondition condition = EndCondition.Success;

            if (saved == quest.SavedPawns.Count)
            {
                builder.Append("Quest_MissingPeople_EndFull".Translate(Quest.Faction.Name));
            }
            else
            {
                if (saved == 0)
                {
                    builder.Append("Quest_MissingPeople_Fiasko".Translate(Quest.Faction.Name));
                    condition = EndCondition.Fail;
                }
                else
                {
                    builder.Append("Quest_MissingPeople_EndPart".Translate());
                }
            }

            if (caravan.pawns.Count == 0)
            {
                Find.WorldObjects.Remove(caravan);
            }

            Find.LetterStack.ReceiveLetter("Quest_MissingPeople_EndQuest".Translate(), builder.ToString(), LetterDefOf.NeutralEvent);
            QuestSite site = (QuestSite)mapParent;

            site.EndQuest(caravan, condition);
        }