public SettlementInfo ClosestSettlementOfFaction(Faction faction)
        {
            InitListOfSettlements();
            var            travelTicks       = maxTicksToNeighbour;
            SettlementInfo closestSettlement = null;

            if (listOfSettlements == null)
            {
                return(null);
            }

            foreach (var si in listOfSettlements)
            {
                if (si.settlement.Faction != faction)
                {
                    continue;
                }

                var travelTicksFromHere =
                    CaravanArrivalTimeEstimator.EstimatedTicksToArrive(si.settlement.Tile, Tile, null);
                if (travelTicksFromHere >= travelTicks)
                {
                    continue;
                }

                closestSettlement = si;
                travelTicks       = travelTicksFromHere;
            }

            return(closestSettlement);
        }
Esempio n. 2
0
        public void startHelping(Faction faction, RoadConstructionSite site, Pawn negotiator)
        {
            // Test success or failure of the negotiator, plus amount of help obtained (based on negotiation value & roll)
            float negotiationValue = negotiator.GetStatValue(StatDefOf.NegotiationAbility, true);
            float failChance       = helpRequestFailChance / negotiationValue;
            float roll             = Rand.Value;
            float amountOfHelp     = helpBaseAmount * (1 + negotiationValue * roll * 5);
            //Log.Message(String.Format("[RotR] - Negotiation for road construction help : negotiation value = {0:0.00} , fail chance = {1:P} , roll = {2:0.00} , help = {3:0.00}", negotiationValue , failChance, roll , amountOfHelp));

            // Calculate how long the faction needs to start helping
            SettlementInfo closestSettlement = site.closestSettlementOfFaction(faction);
            int            tick = Find.TickManager.TicksGame + closestSettlement.distance;

            // Determine amount of help per tick
            float amountPerTick = Math.Max(Rand.Gaussian(helpPerTickMedian, helpPerTickVariance), helpPerTickMin);

            setCurrentlyHelping(faction);
            site.initiateFactionHelp(faction, tick, amountOfHelp, amountPerTick);
        }
Esempio n. 3
0
        public SettlementInfo closestSettlementOfFaction(Faction faction)
        {
            initListOfSettlements();
            int            travelTicks       = maxTicksToNeighbour;
            SettlementInfo closestSettlement = null;

            if (listOfSettlements != null)
            {
                foreach (SettlementInfo si in listOfSettlements)
                {
                    if (si.settlement.Faction == faction)
                    {
                        int travelTicksFromHere = CaravanArrivalTimeEstimator.EstimatedTicksToArrive(si.settlement.Tile, Tile, null);
                        if (travelTicksFromHere < travelTicks)
                        {
                            closestSettlement = si;
                            travelTicks       = travelTicksFromHere;
                        }
                    }
                }
            }
            return(closestSettlement);
        }