Exemple #1
0
        public override bool TryExecute(IncidentParms parms)
        {
            Map map = (Map)parms.target;
            // Cheaty:
            int durationDays = parms.raidPodOpenDelay == 140 ? 3 : parms.raidPodOpenDelay;

            // End cheaty.

            // Resolve parms (currently counting on parent class to handle this)
            if (!base.TryResolveParms(parms))
            {
                if (Prefs.DevMode)
                {
                    Log.Warning("[Carnivale] Could not execute CarnivalArrives: the spawn point calculated yesterday is probably no longer valid.");
                }
                return(false);
            }

            // Spawn pawns. Counting on you, IncidentWorker_NeutralGroup.
            List <Pawn> pawns = this.SpawnPawns(parms, 17);

            if (pawns.Count < 3)
            {
                if (Prefs.DevMode)
                {
                    Log.Warning("[Carnivale] Could not execute CarnivalArrives: could not generate enough valid pawns.");
                }
                return(false);
            }

            List <Pawn> vendors = new List <Pawn>();

            foreach (Pawn p in pawns)
            {
                if (p.TraderKind != null)
                {
                    // Get list of vendors
                    vendors.Add(p);
                }
                if (p.needs != null && p.needs.food != null)
                {
                    // Also feed the carnies
                    p.needs.food.CurLevel = p.needs.food.MaxLevel;
                }
            }

            string label = "LetterLabelCarnivalArrival".Translate();

            string text = "LetterCarnivalArrival".Translate(parms.faction.Name, durationDays);

            if (vendors.Count > 0)
            {
                text += "CarnivalArrivalVendorsList".Translate();
                foreach (Pawn vendor in vendors)
                {
                    text += "\n  " + vendor.NameStringShort + ", " + vendor.TraderKind.label.CapitalizeFirst();
                }
            }

            PawnRelationUtility.Notify_PawnsSeenByPlayer(pawns, ref label, ref text, "LetterRelatedPawnsNeutralGroup".Translate(), true);
            Find.LetterStack.ReceiveLetter(label, text, LetterDefOf.Good, parms.faction.leader, null);

            //LordJob_EntertainColony lordJob = new LordJob_EntertainColony(durationDays);
            //Lord lord = LordMaker.MakeNewLord(parms.faction, lordJob, map, pawns);

            //CarnivalUtils.Info.ReInitWith(lord, parms.spawnCenter);

            CarnUtils.MakeNewCarnivalLord(parms.faction, map, parms.spawnCenter, durationDays, pawns);

            return(true);
        }