public static DiaOption RequestMilitaryAid_LaunchedWarband_Option(Map map, Faction faction, Pawn negotiator) { RimWarData rwd = WorldUtility.GetRimWarDataForFaction(faction); float daysToArrive = 0f; Settlement wos = null; int requestCost = 25; int minPoints = 0; if (rwd != null) { minPoints = (int)(Find.WorldObjects.SettlementAt(map.Tile).GetComponent <RimWarSettlementComp>().RimWarPoints *.9f); wos = rwd.ClosestSettlementTo(map.Tile, minPoints); if (wos != null) { daysToArrive = (float)Utility.ArrivalTimeEstimator.EstimatedTicksToArrive(wos.Tile, map.Tile, 100) / 60000f; } } string text = "RequestMilitaryAid".Translate(requestCost); if (wos != null) { text = "RW_RequestLaunchedWarband".Translate(requestCost, wos.Name, daysToArrive.ToString("#.#"), (int)(minPoints * rwd.combatAttribute)); } if (wos == null) { DiaOption diaOptionUnable = new DiaOption(text); diaOptionUnable.Disable("RW_NoTownForRequest".Translate()); return(diaOptionUnable); } if (faction.PlayerRelationKind != FactionRelationKind.Ally) { DiaOption diaOption = new DiaOption(text); diaOption.Disable("MustBeAlly".Translate()); return(diaOption); } if (!faction.def.allowedArrivalTemperatureRange.ExpandedBy(-4f).Includes(map.mapTemperature.SeasonalTemp)) { DiaOption diaOption2 = new DiaOption(text); diaOption2.Disable("BadTemperature".Translate()); return(diaOption2); } int num = faction.lastMilitaryAidRequestTick + 60000 - Find.TickManager.TicksGame; if (num > 0) { DiaOption diaOption3 = new DiaOption(text); diaOption3.Disable("WaitTime".Translate(num.ToStringTicksToPeriod())); return(diaOption3); } if (!rwd.CanLaunch) { DiaOption diaOption4 = new DiaOption(text); diaOption4.Disable("RW_FactionIncapableOfTech".Translate(faction.Name)); return(diaOption4); } DiaOption diaOption5 = new DiaOption(text); IEnumerable <Faction> source = (from x in map.attackTargetsCache.TargetsHostileToColony where GenHostility.IsActiveThreatToPlayer(x) select((Thing)x).Faction).Where(delegate(Faction x) { if (x != null) { return(!x.HostileTo(faction)); } return(false); }).Distinct(); if (source.Any()) { DiaNode diaNode = new DiaNode("MilitaryAidConfirmMutualEnemy".Translate(faction.Name, (from fa in source select fa.Name).ToCommaList(useAnd: true))); DiaOption diaOption6 = new DiaOption("CallConfirm".Translate()); diaOption6.action = delegate { Faction ofPlayer = Faction.OfPlayer; bool canSendMessage = false; string reason = "GoodwillChangedReason_RequestedMilitaryAid".Translate(); faction.TryAffectGoodwillWith(ofPlayer, -requestCost, canSendMessage, true, reason); wos.GetComponent <RimWarSettlementComp>().RimWarPoints -= minPoints; WorldUtility.CreateLaunchedWarband(minPoints, rwd, wos, wos.Tile, Find.WorldObjects.SettlementAt(map.Tile), WorldObjectDefOf.Settlement); }; diaOption6.link = FightersSent(faction, negotiator); DiaOption diaOption7 = new DiaOption("CallCancel".Translate()); diaOption7.linkLateBind = ResetToRoot(faction, negotiator); diaNode.options.Add(diaOption6); diaNode.options.Add(diaOption7); diaOption5.link = diaNode; } else { diaOption5.action = delegate { Faction ofPlayer = Faction.OfPlayer; bool canSendMessage = false; string reason = "GoodwillChangedReason_RequestedMilitaryAid".Translate(); faction.TryAffectGoodwillWith(ofPlayer, -requestCost, canSendMessage, true, reason); wos.GetComponent <RimWarSettlementComp>().RimWarPoints -= minPoints; WorldUtility.CreateLaunchedWarband(minPoints, rwd, wos, wos.Tile, Find.WorldObjects.SettlementAt(map.Tile), WorldObjectDefOf.Settlement); }; diaOption5.link = FightersSent(faction, negotiator); } return(diaOption5); }
public static DiaOption RequestTraderOption(Map map, Faction faction, Pawn negotiator) { RimWarData rwd = WorldUtility.GetRimWarDataForFaction(faction); float daysToArrive = 0f; Settlement wos = null; int requestCost = 15; if (rwd != null) { wos = rwd.ClosestSettlementTo(map.Tile, 200); if (wos != null) { daysToArrive = (float)Utility.ArrivalTimeEstimator.EstimatedTicksToArrive(wos.Tile, map.Tile, (int)(2500f / rwd.movementAttribute)) / 60000f; } } TaggedString taggedString = "RequestTrader".Translate(requestCost); if (wos != null) { taggedString = "RequestTrader".Translate(requestCost) + "\n" + "RW_RequestAddition".Translate(wos.Name, daysToArrive.ToString("#.#")); } if (wos == null) { DiaOption diaOptionUnable = new DiaOption(taggedString); diaOptionUnable.Disable("RW_NoTownForRequest".Translate()); return(diaOptionUnable); } if (faction.PlayerRelationKind != FactionRelationKind.Ally) { DiaOption diaOption = new DiaOption(taggedString); diaOption.Disable("MustBeAlly".Translate()); return(diaOption); } if (rwd == null) { DiaOption diaOptionRWD = new DiaOption(taggedString); diaOptionRWD.Disable("RW_InvalidRWD".Translate()); return(diaOptionRWD); } if (!faction.def.allowedArrivalTemperatureRange.ExpandedBy(-4f).Includes(map.mapTemperature.SeasonalTemp)) { DiaOption diaOption2 = new DiaOption(taggedString); diaOption2.Disable("BadTemperature".Translate()); return(diaOption2); } int num = faction.lastTraderRequestTick + 240000 - Find.TickManager.TicksGame; if (num > 0) { DiaOption diaOption3 = new DiaOption(taggedString); diaOption3.Disable("WaitTime".Translate(num.ToStringTicksToPeriod())); return(diaOption3); } DiaOption diaOption4 = new DiaOption(taggedString); DiaNode diaNode = new DiaNode("TraderSent".Translate(faction.leader).CapitalizeFirst()); diaNode.options.Add(OKToRoot(faction, negotiator)); DiaNode diaNode2 = new DiaNode("ChooseTraderKind".Translate(faction.leader)); foreach (TraderKindDef item in from x in faction.def.caravanTraderKinds where x.requestable select x) { TraderKindDef localTk = item; DiaOption diaOption5 = new DiaOption(localTk.LabelCap); if (localTk.TitleRequiredToTrade != null && (negotiator.royalty == null || localTk.TitleRequiredToTrade.seniority > negotiator.GetCurrentTitleSeniorityIn(faction))) { DiaNode diaNode3 = new DiaNode("TradeCaravanRequestDeniedDueTitle".Translate(negotiator.Named("NEGOTIATOR"), localTk.TitleRequiredToTrade.GetLabelCapFor(negotiator).Named("TITLE"), faction.Named("FACTION"))); DiaOption diaOption6 = new DiaOption("GoBack".Translate()); diaNode3.options.Add(diaOption6); diaOption5.link = diaNode3; diaOption6.link = diaNode2; } else { diaOption5.action = delegate { Trader trader = WorldUtility.CreateTrader(200, rwd, wos, wos.Tile, Find.WorldObjects.SettlementAt(map.Tile), WorldObjectDefOf.Settlement); trader.traderKind = localTk; wos.GetComponent <RimWarSettlementComp>().RimWarPoints -= 200; faction.lastTraderRequestTick = Find.TickManager.TicksGame; faction.TryAffectGoodwillWith(Faction.OfPlayer, -requestCost, false, true, "GoodwillChangedReason_RequestedTrader".Translate()); }; diaOption5.link = diaNode; } diaNode2.options.Add(diaOption5); } DiaOption diaOption7 = new DiaOption("GoBack".Translate()); diaOption7.linkLateBind = ResetToRoot(faction, negotiator); diaNode2.options.Add(diaOption7); diaOption4.link = diaNode2; return(diaOption4); }
public static DiaOption RequestMilitaryAid_Warband_Option(Map map, Faction faction, Pawn negotiator) { RimWarData rwd = WorldUtility.GetRimWarDataForFaction(faction); float daysToArrive = 0f; Settlement wos = null; int requestCost = 20; int minPoints = 0; if (rwd != null) { minPoints = (int)(Find.WorldObjects.SettlementAt(map.Tile).GetComponent <RimWarSettlementComp>().RimWarPoints * 1.15f); wos = rwd.ClosestSettlementTo(map.Tile, minPoints); if (wos != null) { daysToArrive = (float)Utility.ArrivalTimeEstimator.EstimatedTicksToArrive(wos.Tile, map.Tile, (int)(2800f * (1f / rwd.movementAttribute))) / 60000f; } } string text = "RequestMilitaryAid".Translate(requestCost); if (wos != null) { text = "RW_RequestWarband".Translate(requestCost, wos.Name, daysToArrive.ToString("#.#"), (int)(minPoints * rwd.combatAttribute)); } if (wos == null) { DiaOption diaOptionUnable = new DiaOption(text); diaOptionUnable.Disable("RW_NoTownForRequest".Translate()); return(diaOptionUnable); } if (faction.PlayerRelationKind != FactionRelationKind.Ally) { DiaOption diaOption = new DiaOption(text); diaOption.Disable("MustBeAlly".Translate()); return(diaOption); } if (!faction.def.allowedArrivalTemperatureRange.ExpandedBy(-4f).Includes(map.mapTemperature.SeasonalTemp)) { DiaOption diaOption2 = new DiaOption(text); diaOption2.Disable("BadTemperature".Translate()); return(diaOption2); } int num = faction.lastMilitaryAidRequestTick + 60000 - Find.TickManager.TicksGame; if (num > 0) { DiaOption diaOption3 = new DiaOption(text); diaOption3.Disable("WaitTime".Translate(num.ToStringTicksToPeriod())); return(diaOption3); } //if (NeutralGroupIncidentUtility.AnyBlockingHostileLord(map, faction)) //{ // DiaOption diaOption4 = new DiaOption(text); // diaOption4.Disable("HostileVisitorsPresent".Translate()); // return diaOption4; //} DiaOption diaOption5 = new DiaOption(text); IEnumerable <Faction> source = (from x in map.attackTargetsCache.TargetsHostileToColony where GenHostility.IsActiveThreatToPlayer(x) select((Thing)x).Faction).Where(delegate(Faction x) { if (x != null) { return(!x.HostileTo(faction)); } return(false); }).Distinct(); if (source.Any()) { DiaNode diaNode = new DiaNode("MilitaryAidConfirmMutualEnemy".Translate(faction.Name, (from fa in source select fa.Name).ToCommaList(useAnd: true))); DiaOption diaOption6 = new DiaOption("CallConfirm".Translate()); diaOption6.action = delegate { CallForAid(new Warband(), minPoints, map, faction, requestCost, rwd, wos); }; diaOption6.link = FightersSent(faction, negotiator); DiaOption diaOption7 = new DiaOption("CallCancel".Translate()); diaOption7.linkLateBind = ResetToRoot(faction, negotiator); diaNode.options.Add(diaOption6); diaNode.options.Add(diaOption7); diaOption5.link = diaNode; } else { diaOption5.action = delegate { CallForAid(new Warband(), minPoints, map, faction, requestCost, rwd, wos); }; diaOption5.link = FightersSent(faction, negotiator); } return(diaOption5); }