protected override bool TryExecuteWorker(IncidentParms parms) { Faction faction; if (!this.TryFindFaction(out faction)) { return(false); } int tile; if (!TileFinder.TryFindNewSiteTile(out tile, minDist, maxDist, false, true, -1)) { return(false); } WorldObject_ResearchRequestLGE researchRequest = (WorldObject_ResearchRequestLGE)WorldObjectMaker.MakeWorldObject(SiteDefOf.ResearchRequestLGE); researchRequest.Tile = tile; researchRequest.SetFaction(faction); researchRequest.GetComponent <TimeoutComp>().StartTimeout(TimeoutDaysRange.RandomInRange * 60000); Find.WorldObjects.Add(researchRequest); string text = string.Format(this.def.letterText.AdjustedFor(faction.leader, "PAWN"), faction.def.leaderTitle, faction.Name, TimeoutDaysRange.RandomInRange).CapitalizeFirst(); Find.LetterStack.ReceiveLetter(this.def.letterLabel, text, this.def.letterDef, researchRequest, null); return(true); }
public void Notify_CaravanArrived(Caravan caravan) { Pawn pawn = BestCaravanPawnUtility.FindPawnWithBestStat(caravan, StatDefOf.ResearchSpeed); if (pawn == null) { Messages.Message("MessagePeaceTalksNoDiplomat".Translate(), caravan, MessageTypeDefOf.NegativeEvent); return; } float badOutcomeWeightFactor = WorldObject_ResearchRequestLGE.GetBadOutcomeWeightFactor(pawn); float num = 1f / badOutcomeWeightFactor; WorldObject_ResearchRequestLGE.tmpPossibleOutcomes.Clear(); WorldObject_ResearchRequestLGE.tmpPossibleOutcomes.Add(new Pair <Action, float>(delegate { this.Outcome_Disaster(caravan); }, BaseWeight_Disaster * badOutcomeWeightFactor)); WorldObject_ResearchRequestLGE.tmpPossibleOutcomes.Add(new Pair <Action, float>(delegate { this.Outcome_Backfire(caravan); }, BaseWeight_Backfire * badOutcomeWeightFactor)); WorldObject_ResearchRequestLGE.tmpPossibleOutcomes.Add(new Pair <Action, float>(delegate { this.Outcome_Neutral(caravan); }, BaseWeight_TalksFlounder)); WorldObject_ResearchRequestLGE.tmpPossibleOutcomes.Add(new Pair <Action, float>(delegate { this.Outcome_Success(caravan); }, BaseWeight_Success * num)); WorldObject_ResearchRequestLGE.tmpPossibleOutcomes.Add(new Pair <Action, float>(delegate { this.Outcome_Triumph(caravan); }, BaseWeight_Triumph * num)); Action first = WorldObject_ResearchRequestLGE.tmpPossibleOutcomes.RandomElementByWeight((Pair <Action, float> x) => x.Second).First; first(); pawn.skills.Learn(SkillDefOf.Intellectual, IntellectualXPGainAmount, true); Find.WorldObjects.Remove(this); }
public static IEnumerable <FloatMenuOption> GetFloatMenuOptions(Caravan caravan, WorldObject_ResearchRequestLGE researchRequest) { return(CaravanArrivalActionUtility.GetFloatMenuOptions <CaravanArrivalAction_VisitResearchRequest>(() => CanVisit(caravan, researchRequest), () => new CaravanArrivalAction_VisitResearchRequest(researchRequest), "VisitPeaceTalks".Translate(researchRequest.Label), caravan, researchRequest.Tile, researchRequest)); }
public CaravanArrivalAction_VisitResearchRequest(WorldObject_ResearchRequestLGE researchRequest) { this.researchRequest = researchRequest; }
public static FloatMenuAcceptanceReport CanVisit(Caravan caravan, WorldObject_ResearchRequestLGE researchRequest) { return(researchRequest != null && researchRequest.Spawned); }
private static float GetBadOutcomeWeightFactor(Pawn diplomat) { float statValue = diplomat.GetStatValue(StatDefOf.ResearchSpeed, true); return(WorldObject_ResearchRequestLGE.GetBadOutcomeWeightFactor(statValue)); }