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); }