protected override bool TryExecuteWorker(IncidentParms parms)
        {
            Settlement settlement = IncidentWorker_CaravanRequest.RandomNearbyTradeableSettlement(parms.target.Tile);

            if (settlement == null)
            {
                return(false);
            }
            CaravanRequestComp component = ((WorldObject)settlement).GetComponent <CaravanRequestComp>();

            if (!this.TryGenerateCaravanRequest(component, (Map)parms.target))
            {
                return(false);
            }
            Find.LetterStack.ReceiveLetter("LetterLabelCaravanRequest".Translate(), "LetterCaravanRequest".Translate(settlement.Label, GenLabel.ThingLabel(component.requestThingDef, null, component.requestCount).CapitalizeFirst(), component.rewards[0].LabelCap, (component.expiration - Find.TickManager.TicksGame).ToStringTicksToDays("F0")), LetterDefOf.PositiveEvent, settlement, null);
            return(true);
        }
        public bool TryGenerateCaravanRequest(CaravanRequestComp target, Map map)
        {
            int num = this.RandomOfferDuration(map.Tile, target.parent.Tile);

            if (num < 1)
            {
                return(false);
            }
            if (!IncidentWorker_CaravanRequest.TryFindRandomRequestedThingDef(map, out target.requestThingDef, out target.requestCount))
            {
                return(false);
            }
            target.rewards.ClearAndDestroyContents(DestroyMode.Vanish);
            target.rewards.TryAdd(IncidentWorker_CaravanRequest.GenerateRewardFor(target.requestThingDef, target.requestCount, target.parent.Faction), true);
            target.expiration = Find.TickManager.TicksGame + num;
            return(true);
        }
Esempio n. 3
0
        public bool GenerateCaravanRequest(CaravanRequestComp target, Map map)
        {
            int num = this.RandomOfferDuration(map.Tile, target.parent.Tile);

            if (num < 1)
            {
                return(false);
            }
            target.requestThingDef = IncidentWorker_ArcaneScriptCaravan.RandomRequestedThingDef();
            if (target.requestThingDef == null)
            {
                Log.Error("Attempted to create a caravan request, but couldn't find a valid request object");
                return(false);
            }
            Thing   item          = new Thing();
            Faction playerFaction = new Faction();

            playerFaction.def = FactionDefOf.PlayerColony;

            target.requestCount = IncidentWorker_ArcaneScriptCaravan.RandomRequestCount(target.requestThingDef, map);
            target.rewards.ClearAndDestroyContents(DestroyMode.Vanish);
            System.Random random = new System.Random();
            int           rnd    = GenMath.RoundRandom(random.Next(0, 18));

            if (rnd < 1)
            {
                item = ThingMaker.MakeThing(TorannMagicDefOf.BookOfInnerFire, null);
                target.rewards.TryAdd(item, true);
            }
            else if (rnd >= 1 && rnd < 2)
            {
                item = ThingMaker.MakeThing(TorannMagicDefOf.BookOfHeartOfFrost, null);
                target.rewards.TryAdd(item, true);
            }
            else if (rnd >= 2 && rnd < 3)
            {
                item = ThingMaker.MakeThing(TorannMagicDefOf.BookOfStormBorn, null);
                target.rewards.TryAdd(item, true);
            }
            else if (rnd >= 3 && rnd < 4)
            {
                item = ThingMaker.MakeThing(TorannMagicDefOf.BookOfArcanist, null);
                target.rewards.TryAdd(item, true);
            }
            else if (rnd >= 4 && rnd < 5)
            {
                item = ThingMaker.MakeThing(TorannMagicDefOf.BookOfValiant, null);
                target.rewards.TryAdd(item, true);
            }
            else if (rnd >= 5 && rnd < 6)
            {
                item = ThingMaker.MakeThing(TorannMagicDefOf.BookOfSummoner, null);
                target.rewards.TryAdd(item, true);
            }
            else if (rnd >= 6 && rnd < 7)
            {
                item = ThingMaker.MakeThing(TorannMagicDefOf.BookOfGladiator, null);
                target.rewards.TryAdd(item, true);
            }
            else if (rnd >= 7 && rnd < 8)
            {
                item = ThingMaker.MakeThing(TorannMagicDefOf.BookOfDruid, null);
                target.rewards.TryAdd(item, true);
            }
            else if (rnd >= 8 && rnd < 9)
            {
                item = ThingMaker.MakeThing(TorannMagicDefOf.BookOfNecromancer, null);
                target.rewards.TryAdd(item, true);
            }
            else if (rnd >= 9 && rnd < 10)
            {
                item = ThingMaker.MakeThing(TorannMagicDefOf.BookOfPriest, null);
                target.rewards.TryAdd(item, true);
            }
            else if (rnd >= 10 && rnd < 11)
            {
                item = ThingMaker.MakeThing(TorannMagicDefOf.BookOfBladedancer, null);
                target.rewards.TryAdd(item, true);
            }
            else if (rnd >= 11 && rnd < 12)
            {
                item = ThingMaker.MakeThing(TorannMagicDefOf.BookOfSniper, null);
                target.rewards.TryAdd(item, true);
            }
            else if (rnd >= 12 && rnd < 13)
            {
                item = ThingMaker.MakeThing(TorannMagicDefOf.BookOfRanger, null);
                target.rewards.TryAdd(item, true);
            }
            else if (rnd >= 13 && rnd < 14)
            {
                item = ThingMaker.MakeThing(TorannMagicDefOf.BookOfQuestion, null);
                target.rewards.TryAdd(item, true);
            }
            else
            {
                for (int i = 0; i < 3; i++)
                {
                    if (Rand.Range(0, 10) > 8.5f)
                    {
                        item = ThingMaker.MakeThing(TorannMagicDefOf.SpellOf_Blink, null);
                        target.rewards.TryAdd(item, true);
                    }
                    else if (Rand.Range(0, 10) > 8.5f)
                    {
                        item = ThingMaker.MakeThing(TorannMagicDefOf.SpellOf_Teleport, null);
                        target.rewards.TryAdd(item, true);
                    }
                    else if (Rand.Range(0, 10) > 8.5f)
                    {
                        item = ThingMaker.MakeThing(TorannMagicDefOf.SpellOf_Heal, null);
                        target.rewards.TryAdd(item, true);
                    }
                    else if (Rand.Range(0, 10) > 8.5f)
                    {
                        item = ThingMaker.MakeThing(TorannMagicDefOf.SpellOf_Rain, null);
                        target.rewards.TryAdd(item, true);
                    }
                    else if (Rand.Range(0, 10) > 8.5f)
                    {
                        item = ThingMaker.MakeThing(TorannMagicDefOf.SpellOf_Heater, null);
                        target.rewards.TryAdd(item, true);
                    }
                    else if (Rand.Range(0, 10) > 8.5f)
                    {
                        item = ThingMaker.MakeThing(TorannMagicDefOf.SpellOf_Cooler, null);
                        target.rewards.TryAdd(item, true);
                    }
                    else if (Rand.Range(0, 10) > 8.5f)
                    {
                        item = ThingMaker.MakeThing(TorannMagicDefOf.SpellOf_DryGround, null);
                        target.rewards.TryAdd(item, true);
                    }
                    else if (Rand.Range(0, 10) > 8.5f)
                    {
                        item = ThingMaker.MakeThing(TorannMagicDefOf.SpellOf_WetGround, null);
                        target.rewards.TryAdd(item, true);
                    }
                    else if (Rand.Range(0, 10) > 8.5f)
                    {
                        item = ThingMaker.MakeThing(TorannMagicDefOf.SpellOf_ChargeBattery, null);
                        target.rewards.TryAdd(item, true);
                    }
                    else if (Rand.Range(0, 10) > 8.5f)
                    {
                        item = ThingMaker.MakeThing(TorannMagicDefOf.SpellOf_SmokeCloud, null);
                        target.rewards.TryAdd(item, true);
                    }
                    else if (Rand.Range(0, 10) > 8.5f)
                    {
                        item = ThingMaker.MakeThing(TorannMagicDefOf.SpellOf_EMP, null);
                        target.rewards.TryAdd(item, true);
                    }
                    else if (Rand.Range(0, 10) > 8.5f)
                    {
                        item = ThingMaker.MakeThing(TorannMagicDefOf.SpellOf_Extinguish, null);
                        target.rewards.TryAdd(item, true);
                    }
                    else if (Rand.Range(0, 10) > 8.5f)
                    {
                        item = ThingMaker.MakeThing(TorannMagicDefOf.SpellOf_SiphonMana, null);
                        target.rewards.TryAdd(item, true);
                    }
                    else if (Rand.Range(0, 10) > 8.5f)
                    {
                        item = ThingMaker.MakeThing(TorannMagicDefOf.SpellOf_TransferMana, null);
                        target.rewards.TryAdd(item, true);
                    }
                    else if (Rand.Range(0, 10) > 8.5f)
                    {
                        item = ThingMaker.MakeThing(TorannMagicDefOf.SpellOf_ManaShield, null);
                        target.rewards.TryAdd(item, true);
                    }
                    else
                    {
                        item = ThingMaker.MakeThing(TorannMagicDefOf.ManaPotion, null);
                        target.rewards.TryAdd(item, true);
                    }
                }
            }

            if (item == null)
            {
                item = ThingMaker.MakeThing(TorannMagicDefOf.BookOfValiant, null);
                target.rewards.TryAdd(item, true);
            }



            target.expiration = Find.TickManager.TicksGame + num;
            return(true);
        }