Beispiel #1
0
        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);
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        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);
        }