public static DiaNode FactionDialogFor(Pawn negotiator, Faction faction) { Map map = negotiator.Map; Pawn p; string text; if (faction.leader != null) { p = faction.leader; text = faction.leader.Name.ToStringFull; } else { Log.Error("Faction " + faction + " has no leader.", false); p = negotiator; text = faction.Name; } DiaNode diaNode; if (faction.PlayerRelationKind == FactionRelationKind.Hostile) { string key; if (!faction.def.permanentEnemy && "FactionGreetingHostileAppreciative".CanTranslate()) { key = "FactionGreetingHostileAppreciative"; } else { key = "FactionGreetingHostile"; } diaNode = new DiaNode(key.Translate(text).AdjustedFor(p, "PAWN")); } else if (faction.PlayerRelationKind == FactionRelationKind.Neutral) { diaNode = new DiaNode("FactionGreetingWary".Translate(text, negotiator.LabelShort, negotiator.Named("NEGOTIATOR"), p.Named("LEADER")).AdjustedFor(p, "PAWN")); } else { diaNode = new DiaNode("FactionGreetingWarm".Translate(text, negotiator.LabelShort, negotiator.Named("NEGOTIATOR"), p.Named("LEADER")).AdjustedFor(p, "PAWN")); } if (map != null && map.IsPlayerHome) { diaNode.options.Add(ReinforcementDialogMakerRC.RequestFreeReinforcements(map, faction, negotiator)); //If the faction is of a tech level that is industrial or higher... if (!(faction.def.techLevel < TechLevel.Spacer)) { diaNode.options.Add(ReinforcementDialogMakerRC.RequestQuickReactionReinforcements(map, faction, negotiator)); diaNode.options.Add(ReinforcementDialogMakerRC.RequestStrongQuickReactionReinforcements(map, faction, negotiator)); } } DiaOption diaOption = new DiaOption("(" + "Disconnect".Translate() + ")") { resolveTree = true }; diaNode.options.Add(diaOption); return(diaNode); }
private static Func <DiaNode> ResetToRoot(Faction faction, Pawn negotiator) { return(() => ReinforcementDialogMakerRC.FactionDialogFor(negotiator, faction)); }
public static DiaOption RequestStrongQuickReactionReinforcements(Map map, Faction faction, Pawn negotiator) { int silverToPay = 900; int goodWillNeeded = 25; string text = "RequestHeavyPaidMilitaryAidRH".Translate(silverToPay); DiaOption result; if (faction.PlayerRelationKind != FactionRelationKind.Ally && faction.PlayerGoodwill < goodWillNeeded) { DiaOption diaOption = new DiaOption(text); diaOption.Disable("NeedGoodwill".Translate(goodWillNeeded.ToString("F0"))); result = diaOption; } else if (ReinforcementDialogMakerRC.AmountSendableSilver(map) < silverToPay) { DiaOption diaOption3 = new DiaOption(text); diaOption3.Disable("NeedSilverLaunchable".Translate(silverToPay.ToString())); result = diaOption3; } else if (!faction.def.allowedArrivalTemperatureRange.ExpandedBy(-4f).Includes(map.mapTemperature.SeasonalTemp)) { DiaOption diaOption2 = new DiaOption(text); diaOption2.Disable("BadTemperature".Translate()); result = diaOption2; } else { int num = faction.lastMilitaryAidRequestTick + 90000 - Find.TickManager.TicksGame; if (num > 0) { DiaOption diaOption3 = new DiaOption(text); diaOption3.Disable("WaitTime".Translate(num.ToStringTicksToPeriod())); result = diaOption3; } else if (NeutralGroupIncidentUtility.AnyBlockingHostileLord(map, faction)) { DiaOption diaOption4 = new DiaOption(text); diaOption4.Disable("HostileVisitorsPresent".Translate()); result = diaOption4; } else { DiaOption diaOption5 = new DiaOption(text); IEnumerable <Faction> source = (from x in map.attackTargetsCache.TargetsHostileToColony where GenHostility.IsActiveThreatToPlayer(x) select((Thing)x).Faction into x where x != null && !x.HostileTo(faction) select x).Distinct <Faction>(); if (source.Any <Faction>()) { DiaNode diaNode = new DiaNode("MilitaryAidConfirmMutualEnemy".Translate(faction.Name, (from fa in source select fa.Name).ToCommaList(true))); DiaOption diaOption6 = new DiaOption("CallConfirm".Translate()) { action = delegate() { ReinforcementDialogMakerRC.CallForStrongAid(map, faction); }, resolveTree = true }; DiaOption diaOption7 = new DiaOption("CallCancel".Translate()) { linkLateBind = ReinforcementDialogMakerRC.ResetToRoot(faction, negotiator) }; diaNode.options.Add(diaOption6); diaNode.options.Add(diaOption7); diaOption5.link = diaNode; } else { diaOption5.action = delegate() { TradeUtility.LaunchThingsOfType(ThingDefOf.Silver, silverToPay, map, null); ReinforcementDialogMakerRC.CallForStrongAid(map, faction); }; diaOption5.resolveTree = true; } result = diaOption5; } } return(result); }
public void OpenCommsWith(Pawn negotiator, Faction faction) { Dialog_Negotiation dialog_Negotiation = new Dialog_Negotiation(negotiator, faction, ReinforcementDialogMakerRC.FactionDialogFor(negotiator, faction), true); //dialog_Negotiation.soundAmbient = RCDefsOf.AmbientRequisitionRelayRH; SoundStarter.PlayOneShot(RCDefsOf.PickUpRequisitionRelayRH, SoundInfo.OnCamera()); Find.WindowStack.Add(dialog_Negotiation); }