public static Quest MakeAndAddTradeRequestQuest(WorldObject destination, string description, TradeRequestComp tradeRequest) { Quest quest = Quest.MakeRaw(); quest.SetInitiallyAccepted(); string text = "Quest" + quest.id + ".TradeRequestSite"; QuestUtility.AddQuestTag(ref destination.questTags, text); QuestPartUtility.MakeAndAddEndCondition <QuestPart_NoWorldObject>(quest, quest.InitiateSignal, QuestEndOutcome.Unknown).worldObject = destination; QuestPartUtility.MakeAndAddEndCondition <QuestPart_NoWorldObject>(quest, text + ".TradeRequestFulfilled", QuestEndOutcome.Success); if (destination.rewards != null) { QuestPart_GiveToCaravan questPart_GiveToCaravan = new QuestPart_GiveToCaravan { inSignal = text + ".TradeRequestFulfilled", Things = destination.rewards }; foreach (Thing thing in questPart_GiveToCaravan.Things) { thing.holdingOwner = null; } quest.AddPart(questPart_GiveToCaravan); } quest.description = description; Find.QuestManager.Add(quest); return(quest); }
public static Quest MakeAndAddWorldObjectQuest(WorldObject destination, string description) { Quest quest = Quest.MakeRaw(); quest.SetInitiallyAccepted(); QuestPartUtility.MakeAndAddEndCondition <QuestPart_NoWorldObject>(quest, quest.InitiateSignal, QuestEndOutcome.Unknown).worldObject = destination; quest.description = description; Find.QuestManager.Add(quest); return(quest); }
public static void Postfix(Reward_BestowingCeremony __instance, ref IEnumerable <GenUI.AnonymousStackElement> __result) { if (__instance.royalTitle.defName == "Baron" || __instance.royalTitle.defName == "Count") { var list = __result.ToList(); var item = QuestPartUtility.GetStandardRewardStackElement(AlteredCarbonDefOf.AC_EmptyCorticalStack.label.CapitalizeFirst(), AlteredCarbonDefOf.AC_EmptyCorticalStack.uiIcon, () => AlteredCarbonDefOf.AC_EmptyCorticalStack.description, delegate { Find.WindowStack.Add(new Dialog_InfoCard(AlteredCarbonDefOf.AC_EmptyCorticalStack)); }); list.Insert(1, item); __result = list; } }
public override void PostLoadSavegame(string loadingVersion) { oldCrashedShipParts.Clear(); foreach (UpgradedCrashedShipPart upgradedCrashedShipPart in upgradedCrashedShipParts) { Thing thing = upgradedCrashedShipPart.thing; IntVec3 invalid = IntVec3.Invalid; Map map = null; if (thing.Spawned) { invalid = thing.Position; map = thing.Map; } else { Skyfaller obj = thing.ParentHolder as Skyfaller; if (obj == null) { thing.Destroy(); } invalid = obj.Position; map = obj.Map; } if (!(invalid == IntVec3.Invalid)) { invalid = new IntVec3(invalid.x - Mathf.CeilToInt((float)thing.def.size.x / 2f), invalid.y, invalid.z); Thing item = null; if (upgradedCrashedShipPart.originalDefName == "CrashedPoisonShipPart" || upgradedCrashedShipPart.originalDefName == "PoisonSpreaderShipPart") { item = ThingMaker.MakeThing(ThingDefOf.DefoliatorShipPart); } else if (upgradedCrashedShipPart.originalDefName == "CrashedPsychicEmanatorShipPart") { item = ThingMaker.MakeThing(ThingDefOf.PsychicDronerShipPart); } ActiveDropPodInfo activeDropPodInfo = new ActiveDropPodInfo(); activeDropPodInfo.innerContainer.TryAdd(item, 1); activeDropPodInfo.openDelay = 60; activeDropPodInfo.leaveSlag = false; activeDropPodInfo.despawnPodBeforeSpawningThing = true; activeDropPodInfo.spawnWipeMode = WipeMode.Vanish; DropPodUtility.MakeDropPodAt(invalid, map, activeDropPodInfo); } } upgradedCrashedShipParts.Clear(); List <Site> sites = Find.WorldObjects.Sites; int l; for (l = 0; l < sites.Count; l++) { if (!Find.QuestManager.QuestsListForReading.Any((Quest x) => x.QuestLookTargets.Contains(sites[l]))) { Quest quest = Quest.MakeRaw(); QuestUtility.GenerateBackCompatibilityNameFor(quest); quest.SetInitiallyAccepted(); quest.appearanceTick = sites[l].creationGameTicks; TimeoutComp component = sites[l].GetComponent <TimeoutComp>(); if (component != null && component.Active && !sites[l].HasMap) { QuestPartUtility.MakeAndAddQuestTimeoutDelay(quest, component.TicksLeft, sites[l]); component.StopTimeout(); } QuestPartUtility.MakeAndAddEndCondition <QuestPart_NoWorldObject>(quest, quest.InitiateSignal, QuestEndOutcome.Unknown).worldObject = sites[l]; ChoiceLetter choiceLetter = Find.Archive.ArchivablesListForReading.OfType <ChoiceLetter>().FirstOrDefault((ChoiceLetter x) => x.lookTargets != null && x.lookTargets.targets.Contains(sites[l])); if (choiceLetter != null) { quest.description = choiceLetter.text; } Find.QuestManager.Add(quest); } } List <WorldObject> worldObjects = Find.WorldObjects.AllWorldObjects; int k; for (k = 0; k < worldObjects.Count; k++) { if (worldObjects[k].def == WorldObjectDefOf.EscapeShip && !Find.QuestManager.QuestsListForReading.Any((Quest x) => x.PartsListForReading.Any((QuestPart y) => y is QuestPart_NoWorldObject && ((QuestPart_NoWorldObject)y).worldObject == worldObjects[k]))) { MakeAndAddWorldObjectQuest(worldObjects[k], null); } } int j; for (j = 0; j < worldObjects.Count; j++) { if (worldObjects[j] is PeaceTalks && !Find.QuestManager.QuestsListForReading.Any((Quest x) => x.PartsListForReading.Any((QuestPart y) => y is QuestPart_NoWorldObject && ((QuestPart_NoWorldObject)y).worldObject == worldObjects[j]))) { Quest quest2 = MakeAndAddWorldObjectQuest(worldObjects[j], null); ChoiceLetter choiceLetter2 = Find.Archive.ArchivablesListForReading.OfType <ChoiceLetter>().FirstOrDefault((ChoiceLetter x) => x.lookTargets != null && x.lookTargets.targets.Contains(worldObjects[j])); if (choiceLetter2 != null) { quest2.description = choiceLetter2.text; } } } int i; for (i = 0; i < worldObjects.Count; i++) { TradeRequestComp component2 = worldObjects[i].GetComponent <TradeRequestComp>(); if (component2 != null && component2.ActiveRequest && !Find.QuestManager.QuestsListForReading.Any((Quest x) => x.PartsListForReading.Any((QuestPart y) => y is QuestPart_NoWorldObject && ((QuestPart_NoWorldObject)y).worldObject == worldObjects[i]))) { Quest quest3 = MakeAndAddTradeRequestQuest(worldObjects[i], null, component2); ChoiceLetter choiceLetter3 = Find.Archive.ArchivablesListForReading.OfType <ChoiceLetter>().FirstOrDefault((ChoiceLetter x) => x.lookTargets != null && x.lookTargets.targets.Contains(worldObjects[i])); if (choiceLetter3 != null) { quest3.description = choiceLetter3.text; } } } }