static void Postfix(Pawn __result) { if (Rand.Chance(0.45f)) { if (__result != null) { QuestsHandler.TryGiveRandomQuestsTo(__result, 1, 2); } } }
static void Postfix(List <Pawn> pawns, Faction faction, Map map) { if (pawns.Count == 0) { return; } Pawn pawn = pawns.Where(p => !p.NonHumanlikeOrWildMan()).RandomElement(); if (pawn != null && pawn.Faction != null) { QuestsHandler.TryGiveRandomQuestTo(pawn); } }
protected override bool TryExecuteWorker(IncidentParms parms) { if (!TileFinder.TryFindPassableTileWithTraversalDistance(Find.AnyPlayerHomeMap.Tile, 7, 15, out int newTile, (int i) => !Find.WorldObjects.AnyWorldObjectAt(i))) { return(false); } if (GssRaids.GssFaction == null) { return(false); } DarkNet darkNet = Current.Game.GetComponent <DarkNet>(); if (darkNet == null || darkNet.Traders == null) { return(false); } DarkNetTrader trader = darkNet.Traders.RandomElement(); Quest_DarkNetKillInformator quest = new Quest_DarkNetKillInformator(trader.def); quest.GenerateRewards(quest.GetQuestThingFilter(), new FloatRange(1200, 2500), new IntRange(1, 4), null, null); quest.id = QuestsManager.Communications.UniqueIdManager.GetNextQuestID(); quest.TicksToPass = 10 * 60000; quest.Faction = GssRaids.GssFaction; string title = string.Format(def.letterLabel, trader.def.LabelCap, quest.Faction.Name); string desc = string.Format(def.letterText, trader.def.LabelCap, quest.Faction.Name); QuestSite site = QuestsHandler.CreateSiteFor(quest, newTile, quest.Faction); Find.WorldObjects.Add(site); QuestsManager.Communications.AddQuest(quest); Find.LetterStack.ReceiveLetter(title, desc, def.letterDef, new LookTargets(site)); return(true); }
protected override bool TryExecuteWorker(IncidentParms parms) { DarkNet darkNet = Current.Game.GetComponent <DarkNet>(); if (darkNet == null || darkNet.Traders == null) { return(false); } DarkNetTrader trader = darkNet.Traders.RandomElement(); Faction attacker = Find.FactionManager.FirstFactionOfDef(MoreEvents.FactionDefOfLocal.Pirate); if (attacker == null || attacker.defeated) { return(false); } if (!TileFinder.TryFindPassableTileWithTraversalDistance(Find.AnyPlayerHomeMap.Tile, 5, 12, out int newTile, (int i) => !Find.WorldObjects.AnyWorldObjectAt(i))) { return(false); } Quest_DarkNetCaptureMaterials quest = new Quest_DarkNetCaptureMaterials(trader.def); quest.id = QuestsManager.Communications.UniqueIdManager.GetNextQuestID(); quest.TicksToPass = 7 * 60000; quest.Faction = attacker; string title = string.Format(def.letterLabel, trader.def.LabelCap); string desc = string.Format(def.letterText, trader.def.LabelCap); QuestSite site = QuestsHandler.CreateSiteFor(quest, newTile, quest.Faction); Find.WorldObjects.Add(site); QuestsManager.Communications.AddQuest(quest); Find.LetterStack.ReceiveLetter(title, desc, def.letterDef, new LookTargets(site)); return(true); }
public override void TakeQuestByQuester(QuestPawn quester, bool notify = true) { TileFinder.TryFindPassableTileWithTraversalDistance(Find.AnyPlayerHomeMap.Tile, 5, 12, out int newTile, (int i) => !Find.WorldObjects.AnyWorldObjectAt(i)); LookTargets target = new LookTargets(newTile); Target = target; QuestSite questPlace = QuestsHandler.CreateSiteFor(this, newTile, Faction); Site = questPlace; Find.WorldObjects.Add(questPlace); ShowInConsole = true; TicksToPass = DaysRange.RandomInRange * 60000; if (notify) { Find.LetterStack.ReceiveLetter(QuestsManager.Communications.MakeQuestLetter(this, "TakeQuestFromPawnLetter".Translate(CardLabel), "TakeQuestFromPawnLetterDesc".Translate(CardLabel, Description))); } }
protected override bool TryExecuteWorker(IncidentParms parms) { DarkNet darkNet = Current.Game.GetComponent <DarkNet>(); if (darkNet == null || darkNet.Traders == null) { return(false); } DarkNetTrader trader = darkNet.Traders.RandomElement(); List <Thing> allTraderThings = new List <Thing>(); Faction attacker = Find.FactionManager.RandomEnemyFaction(); if (attacker == null) { return(false); } if (!TileFinder.TryFindPassableTileWithTraversalDistance(Find.AnyPlayerHomeMap.Tile, 5, 12, out int newTile, (int i) => !Find.WorldObjects.AnyWorldObjectAt(i))) { return(false); } if (!trader.TryGetGoods(allTraderThings)) { return(false); } Quest_DarkNetSupplyAttack quest = new Quest_DarkNetSupplyAttack(trader.def); int takeCount = Rand.Range(1, (int)Mathf.Max(1, allTraderThings.Count * 0.4f)); IEnumerable <Thing> rewards = allTraderThings.TakeRandom(takeCount); quest.Rewards = new List <Thing>(); foreach (var reward in rewards) { Thing copy = ThingMaker.MakeThing(reward.def, reward.Stuff); copy.stackCount = (int)Mathf.Max(1, reward.stackCount * 0.6f); quest.Rewards.Add(copy); } if (quest.Rewards.Count == 0) { return(false); } quest.id = QuestsManager.Communications.UniqueIdManager.GetNextQuestID(); quest.TicksToPass = 6 * 60000; quest.ShowInConsole = false; //release = false quest.Faction = attacker; string title = string.Format(def.letterLabel, trader.def.LabelCap); string desc = string.Format(def.letterText, trader.def.LabelCap); CommunicationDialog dialog = QuestsManager.Communications.AddCommunication(QuestsManager.Communications.UniqueIdManager.GetNextDialogID(), title, desc, incident: def); dialog.KnownFaction = false; quest.CommunicationDialog = dialog; QuestSite site = QuestsHandler.CreateSiteFor(quest, newTile, quest.Faction); Find.WorldObjects.Add(site); QuestsManager.Communications.AddQuest(quest); Find.LetterStack.ReceiveLetter(title, desc, def.letterDef, new LookTargets(site)); return(true); }
protected override bool TryExecuteWorker(IncidentParms parms) { DarkNet darkNet = Current.Game.GetComponent <DarkNet>(); if (darkNet == null || darkNet.Traders == null) { return(false); } DarkNetTrader trader = darkNet.Traders.RandomElement(); List <Thing> allTraderThings = new List <Thing>(); Faction buyer = Find.FactionManager.RandomEnemyFaction(); Faction garant = null; if (!(from x in Find.FactionManager.AllFactions where !x.IsPlayer && !x.def.hidden && !x.defeated && x.def.humanlikeFaction && x.HostileTo(Faction.OfPlayer) && x != buyer select x).TryRandomElement(out garant)) { return(false); } if (buyer == null) { return(false); } if (!TileFinder.TryFindPassableTileWithTraversalDistance(Find.AnyPlayerHomeMap.Tile, 3, 6, out int newTile, (int i) => !Find.WorldObjects.AnyWorldObjectAt(i))) { return(false); } if (!trader.TryGetGoods(allTraderThings)) { return(false); } Quest_DarkNetTraderSupply quest = new Quest_DarkNetTraderSupply(trader.def, garant); int takeCount = Rand.Range(1, (int)Mathf.Max(1, allTraderThings.Count * 0.4f)); IEnumerable <Thing> rewards = allTraderThings.Where(x => !(x is MinifiedThing)).ToList().TakeRandom(takeCount); quest.Rewards = new List <Thing>(); foreach (var reward in rewards) { Thing copy = ThingMaker.MakeThing(reward.def, reward.Stuff); copy.stackCount = (int)Mathf.Max(1, reward.stackCount * 0.6f); quest.Rewards.Add(copy); } if (quest.Rewards.Count == 0) { return(false); } quest.id = QuestsManager.Communications.UniqueIdManager.GetNextQuestID(); quest.TicksToPass = 4 * 60000; quest.Faction = buyer; quest.ShowInConsole = false; string title = string.Format(def.letterLabel, trader.def.LabelCap); string desc = string.Format(def.letterText, trader.def.LabelCap, buyer.Name, garant.Name); CommunicationDialog dialog = QuestsManager.Communications.AddCommunication(QuestsManager.Communications.UniqueIdManager.GetNextDialogID(), title, desc, incident: def); dialog.KnownFaction = true; quest.CommunicationDialog = dialog; QuestSite site = QuestsHandler.CreateSiteFor(quest, newTile, quest.Faction); Find.WorldObjects.Add(site); QuestsManager.Communications.AddQuest(quest); Find.LetterStack.ReceiveLetter(title, desc, def.letterDef, new LookTargets(site)); return(true); }