public override void CompTick()
        {
            base.CompTick();
            if (!waitingForNight && this.parent.IsHashIntervalTick(Props.checkingInterval) && this.parent.Map != null &&
                (!Props.requiresTamed || (Props.requiresTamed && this.parent.Faction != null && this.parent.Faction.IsPlayer)))
            {
                IncidentDef incidentDef = IncidentDef.Named(Props.incidentToCause);

                if (incidentDef.defName == "Aurora")
                {
                    waitingForNight = true;
                }
                else
                {
                    IncidentParms parms = StorytellerUtility.DefaultParmsNow(incidentDef.category, this.parent.Map);
                    incidentDef.Worker.TryExecute(parms);
                }
            }
            if (waitingForNight && this.parent.IsHashIntervalTick(this.checkingForNightInterval) && this.parent.Map != null && GenCelestial.CurCelestialSunGlow(this.parent.Map) <= 0.4f &&
                (!Props.requiresTamed || (Props.requiresTamed && this.parent.Faction != null && this.parent.Faction.IsPlayer)))
            {
                IncidentDef   incidentDef = IncidentDef.Named(Props.incidentToCause);
                IncidentParms parms       = StorytellerUtility.DefaultParmsNow(incidentDef.category, this.parent.Map);
                incidentDef.Worker.TryExecute(parms);
                waitingForNight = false;
            }
        }
Exemple #2
0
 public override bool IsPossible()
 {
     base.IsPossible();
     worker.def   = IncidentDef.Named("Disease_Flu");
     parms.points = parms.points / 3;
     return(worker.CanFireNow(parms));
 }
        public override bool IsPossible()
        {
            List <string> animals = new List <string>()
            {
                "Bear_Grizzly", "Bear_Polar", "Rhinoceros", "Elephant", "Megasloth", "Thrumbo"
            };

            animals.Shuffle();

            ThingDef def          = ThingDef.Named(animals[0]);
            float    averagePower = 0;

            if (def != null && def.race != null)
            {
                foreach (Tool t in def.tools)
                {
                    averagePower += t.power;
                }
                averagePower = averagePower / def.tools.Count;
            }

            float animalCount = 2.5f;

            if (averagePower > 18)
            {
                animalCount = 2.0f;
            }

            worker     = new IncidentWorker_SpecificAnimalsWanderIn("TwitchStoriesLetterLabelPredators", PawnKindDef.Named(animals[0]), false, (int)animalCount, true, true);
            worker.def = IncidentDef.Named("HerdMigration");

            parms = StorytellerUtility.DefaultParmsNow(IncidentCategoryDefOf.ThreatBig, target);

            return(worker.CanFireNow(parms));
        }
Exemple #4
0
        public override void PostMapGenerate(Map map)
        {
            base.PostMapGenerate(map);

            this.MakeMuffalo(map);
            this.QueueArrivals(map);
            if (Rand.Chance(0.05f))
            {
                IEnumerable <Pawn> source = from p in map.mapPawns.FreeColonistsSpawned
                                            where p.story.traits.HasTrait(TraitDef.Named("PsychicSensitivity"))
                                            select p;
                if (source.Count <Pawn>() > 0)
                {
                    Pawn pawn = source.RandomElement <Pawn>();
                    Find.LetterStack.ReceiveLetter("RD_ManhunterDanger".Translate(), "RD_MalevolentPsychicDesc".Translate(pawn.Named("PAWN"))                     //"{0} believes that a malevolent psychic energy is massing, and that this peaceful herd of muffalo are on the brink of a mass insanity."
                                                   , LetterDefOf.ThreatSmall, null);
                }
                //TODO: check if it works
                IncidentParms incidentParms = StorytellerUtility.DefaultParmsNow(IncidentCategoryDefOf.FactionArrival, map);
                incidentParms.forced = true;
                incidentParms.points = 100f;
                QueuedIncident qi = new QueuedIncident(new FiringIncident(IncidentDef.Named("RD_MuffaloMassInsanity"), null, incidentParms), Find.TickManager.TicksGame + Rand.RangeInclusive(10000, 45000));
                Find.Storyteller.incidentQueue.Add(qi);
            }
        }
Exemple #5
0
        public void DoExtraSetup(IncidentWorker worker, IncidentParms @params, StoreIncident incident)
        {
            if (!(worker is AnimalSpawnWorker spawnWorker))
            {
                return;
            }

            if (!_predators.TryRandomElement(out string predator))
            {
                predator = "Thrumbo";
            }

            ThingDef thing = ThingDef.Named(predator);
            var      power = 0.0f;

            if (thing?.race != null)
            {
                power += thing.tools.Sum(t => t.power);
                power /= thing.tools.Count;
            }

            spawnWorker.Quantity       = power > 18f ? 2 : 3;
            spawnWorker.SpawnManhunter = true;
            spawnWorker.AnimalDef      = PawnKindDef.Named(predator);
            spawnWorker.def            = IncidentDef.Named("HerdMigration");
            spawnWorker.Label          = "TwitchStoriesLetterLabelPredators".Localize();
            spawnWorker.Text           = "ManhunterPackArrived".LocalizeKeyed(spawnWorker.AnimalDef.GetLabelPlural());
        }
Exemple #6
0
        public static void ResetInterval(Map map)
        {
            FiringIncident fi = new FiringIncident();

            fi = new FiringIncident(IncidentDef.Named("ZTrib_TribbleArrival"), null, null);
            map.StoryState.Notify_IncidentFired(fi);
        }
        private static DiaOption PeaceTalksOption(Faction faction, Map map)
        {
            var def = IncidentDef.Named("QuestPeaceTalks");

            if (PeaceTalksExist(faction))
            {
                var diaOption = new DiaOption(def.letterLabel);
                diaOption.Disable("InProgress".Translate());
                return(diaOption);
            }

            var diaOption2 = new DiaOption(def.letterLabel)
            {
                action = delegate
                {
                    PlaySoundFor(faction);
                    if (!TryStartPeaceTalks(faction))
                    {
                        Log.Error("Peace talks event failed to start. This should never happen.");
                    }
                }
            };
            var text = string.Format(def.letterText.AdjustedFor(faction.leader), faction.def.leaderTitle, faction.Name, 15)
                       .CapitalizeFirst();

            diaOption2.link = new DiaNode(text)
            {
                options =
                {
                    OKToRoot()
                }
            };
            return(diaOption2);
        }
Exemple #8
0
        public override void Execute(int amount, string boughtBy)
        {
            var currentMap = Find.CurrentMap;

            var parms = StorytellerUtility.DefaultParmsNow(IncidentCategoryDefOf.Misc, currentMap);

            parms.forced = true;

            for (int i = 0; i < amount; i++)
            {
                var beaverWorker = new IncidentWorker_MeteoriteImpact();
                beaverWorker.def = IncidentDef.Named("MeteoriteImpact");
                beaverWorker.TryExecute(parms);
            }

            string notification;

            if (boughtBy == "Poll")
            {
                notification = $"<color=#9147ff>Your viewers</color> have dislodged a chunk of asteroid from orbit";
            }
            else
            {
                notification = $"<color=#9147ff>{boughtBy}</color> has dislodged a chunk of asteroid from orbit";
            }

            AlertManager.NormalEventNotification(notification);
        }
        private FiringIncident GenerateQueuedThreatBig(IIncidentTarget target, bool isCosmicHorrorEvent = false)
        {
            IncidentParms parms        = this.GenerateParms(IncidentCategory.ThreatBig, target);
            IncidentDef   omenIncident = IncidentDef.Named("HPLovecraft_OmenIncident");

            if (isCosmicHorrorEvent)
            {
                omenIncident = IncidentDef.Named("HPLovecraft_OmenIncidentCosmicHorror");
            }

            //Vanilla code
            if (GenDate.DaysPassed < 20)
            {
                if (!IncidentDefOf.RaidEnemy.Worker.CanFireNow(target))
                {
                    return(null);
                }
            }

            //Throw an omen instead of a big incident
            return(new FiringIncident(omenIncident, this, null)
            {
                parms = parms
            });
        }
Exemple #10
0
 public static List <IncidentDef> CosmicHorrorIncidents()
 {
     return(new List <IncidentDef> {
         IncidentDef.Named("ROM_RaidCosmicHorrors"),
         IncidentDef.Named("ROM_StarVampireAttack"),
         IncidentDef.Named("ROM_ChthonianPit")
     });
 }
Exemple #11
0
 public override bool IsPossible()
 {
     worker       = new EarthQuake();
     worker.def   = IncidentDef.Named("VEE_Earthquake");
     parms        = new IncidentParms();
     parms.target = Current.Game.RandomPlayerHomeMap;
     return(worker.CanFireNow(parms));
 }
Exemple #12
0
 public override bool IsPossible()
 {
     worker       = new IncidentWorker_MakeGameConditionVEE();
     worker.def   = IncidentDef.Named("VEE_HailStorm");
     parms        = new IncidentParms();
     parms.target = Current.Game.RandomPlayerHomeMap;
     return(worker.CanFireNow(parms));
 }
Exemple #13
0
        public override bool IsPossible()
        {
            worker     = new IncidentWorker_ShipChunkDrop();
            worker.def = IncidentDef.Named("PsychicEmanatorShipPartCrash");

            parms = StorytellerUtility.DefaultParmsNow(IncidentCategoryDefOf.ThreatBig, target);

            return(worker.CanFireNow(parms));
        }
        public override bool IsPossible()
        {
            worker     = new IncidentWorker_PsychicDrone();;
            worker.def = IncidentDef.Named("PsychicDrone");

            parms = StorytellerUtility.DefaultParmsNow(IncidentCategoryDefOf.Misc, target);

            return(worker.CanFireNow(parms));
        }
        public override bool IsPossible()
        {
            worker     = new IncidentWorker_AnimalInsanityMass();
            worker.def = IncidentDef.Named("AnimalInsanityMass");

            parms = StorytellerUtility.DefaultParmsNow(IncidentCategoryDefOf.ThreatBig, target);

            return(worker.CanFireNow(parms));
        }
 public override bool IsPossible()
 {
     worker       = new IncidentWorker_DrunkMuffalos();
     worker.def   = IncidentDef.Named("DrunkMuffalos");
     parms        = new IncidentParms();
     parms.target = Current.Game.RandomPlayerHomeMap;
     parms.points = StorytellerUtility.DefaultThreatPointsNow(parms.target);
     return(worker.CanFireNow(parms));
 }
Exemple #17
0
        public override bool IsPossible()
        {
            worker     = new IncidentWorker_MeteoriteImpact();
            worker.def = IncidentDef.Named("MeteoriteImpact");

            parms = StorytellerUtility.DefaultParmsNow(IncidentCategoryDefOf.Misc, target);

            return(worker.CanFireNow(parms));
        }
Exemple #18
0
        public override bool IsPossible()
        {
            worker = new IncidentWorker_MakeGameCondition();
            worker.def = IncidentDef.Named(incidentDefName);

            parms = StorytellerUtility.DefaultParmsNow(IncidentCategoryDefOf.Misc, target);

            return worker.CanFireNow(parms);
        }
        //
        //        (( B18 ))
        //        private FiringIncident GenerateQueuedThreatSmall(IIncidentTarget target)
        //        {
        //            IncidentDef incidentDef;
        //            if (!this.UsableIncidentsInCategory(IncidentCategoryDefOf.ThreatSmall, target)
        //                .TryRandomElementByWeight(new Func<IncidentDef, float>(base.IncidentChanceFinal), out incidentDef))
        //            {
        //                return null;
        //            }
        //            return new FiringIncident(incidentDef, this, null)
        //            {
        //                parms = this.GenerateParms(incidentDef.category, target)
        //            };
        //        }


        private FiringIncident GenerateIncident(IIncidentTarget target)
        {
            var parms = GenerateParms(Props.IncidentCategory, target);

            return(new FiringIncident(IncidentDef.Named("HPLovecraft_OmenIncident"), this)
            {
                parms = parms
            });
        }
Exemple #20
0
        public override bool IsPossible()
        {
            worker     = new IncidentWorker_WildManWandersIn();
            worker.def = IncidentDef.Named("WildManWandersIn");

            parms = StorytellerUtility.DefaultParmsNow(IncidentCategoryDefOf.Misc, target);

            return(worker.CanFireNow(parms));
        }
Exemple #21
0
 public override void PawnDied(Corpse corpse)
 {
     if (corpse.Map != null)
     {
         IncidentDef   localDef = IncidentDef.Named("Flashstorm");
         IncidentParms parms    = StorytellerUtility.DefaultParmsNow(localDef.category, corpse.Map);
         localDef.Worker.TryExecute(parms);
     }
 }
Exemple #22
0
        public override bool IsPossible(string message, Viewer viewer, bool separateChannel = false)
        {
            this.separateChannel = separateChannel;
            this.viewer          = viewer;
            string[] command = message.Split(' ');
            if (command.Length < 4)
            {
                Toolkit.client.SendMessage($"@{viewer.username} syntax is {this.storeIncident.syntax}", separateChannel);
                return(false);
            }

            if (!VariablesHelpers.PointsWagerIsValid(
                    command[3],
                    viewer,
                    ref pointsWager,
                    ref storeIncident,
                    separateChannel
                    ))
            {
                return(false);
            }

            string animalKind = command[2].ToLower();


            List <PawnKindDef> allAnimals = DefDatabase <PawnKindDef> .AllDefs.Where(
                s => s.RaceProps.Animal &&
                string.Join("", s.defName.Split(' ')).ToLower() == animalKind
                ).ToList();

            if (allAnimals.Count < 1)
            {
                Toolkit.client.SendMessage($"@{viewer.username} no animal {animalKind} found.", separateChannel);
                return(false);
            }

            target = Current.Game.AnyPlayerHomeMap;
            if (target == null)
            {
                return(false);
            }

            float points = IncidentHelper_PointsHelper.RollProportionalGamePoints(storeIncident, pointsWager, StorytellerUtility.DefaultThreatPointsNow(target));

            pawnKind = allAnimals[0];
            int num = ManhunterPackIncidentUtility.GetAnimalsCount(pawnKind, points);

            worker = new IncidentWorker_SpecificAnimalsWanderIn(null, pawnKind, true, num, false, true);

            worker.def = IncidentDef.Named("FarmAnimalsWanderIn");

            float defaultThreatPoints = StorytellerUtility.DefaultSiteThreatPointsNow();

            parms        = StorytellerUtility.DefaultParmsNow(worker.def.category, target);
            parms.points = points;
            return(worker.CanFireNow(parms));
        }
        public override bool IsPossible()
        {
            worker       = new IncidentWorker_Infestation();
            worker.def   = IncidentDef.Named("Infestation");
            parms        = StorytellerUtility.DefaultParmsNow(IncidentCategoryDefOf.ThreatBig, target);
            parms.forced = true;
            points       = parms.points;

            return(worker.CanFireNow(parms));
        }
        private void TryExecuteAnimal(ThingDef animal, int count)
        {
            string         letter = Helper.ReplacePlaceholder("TwitchStoriesDescription80".Translate(), from: Viewer.username, amount: quantity.ToString(), item: item.abr.CapitalizeFirst());
            IncidentWorker worker = new IncidentWorker_SpecificAnimalsWanderIn(animal.LabelCap + "'s join", PawnKindDef.Named(animal.defName), true, count, false, true);

            worker.def = IncidentDef.Named("FarmAnimalsWanderIn");
            worker.TryExecute(StorytellerUtility.DefaultParmsNow(IncidentCategoryDefOf.Misc, Helper.AnyPlayerMap));

            EndCarePackage();
        }
Exemple #25
0
        private static IncidentDef ReplaceIncidentWorker(String name, Type newWorker)
        {
            IncidentDef incident = IncidentDef.Named(name);

            if (incident != null && incident.workerClass != null)
            {
                incident.workerClass = newWorker;
            }
            return(incident);
        }
        public override bool IsPossible(string message, Viewer viewer, bool separateChannel = false)
        {
            this.separateChannel = separateChannel;
            this.Viewer          = viewer;
            string[] command = message.Split(' ');
            if (command.Length < 3)
            {
                VariablesHelpers.ViewerDidWrongSyntax(viewer.username, storeIncident.syntax, separateChannel);
                return(false);
            }

            if (!VariablesHelpers.PointsWagerIsValid(
                    command[2],
                    viewer,
                    ref pointsWager,
                    ref storeIncident,
                    separateChannel
                    ))
            {
                ToolkitPatchLogger.Log(LOGGER_NAME, "Cannot fire custom manhunter. No valid points wagered");
                return(false);
            }

            target = Current.Game.AnyPlayerHomeMap;
            if (target == null)
            {
                ToolkitPatchLogger.Log(LOGGER_NAME, "Cannot fire custom manhunter. No valid tile");
                return(false);
            }

            parms        = StorytellerUtility.DefaultParmsNow(IncidentCategoryDefOf.RaidBeacon, target);
            parms.points = IncidentHelper_PointsHelper.RollProportionalGamePoints(storeIncident, pointsWager, parms.points);

            IEnumerable <string> animals = Settings.AnimalMap.Where(x => x.Value).Select(x => x.Key);

            ToolkitPatchLogger.Log(LOGGER_NAME, $"{animals.Count()}/{Settings.AnimalMap.Count} animals for selection.");

            string animal = animals.RandomElement();

            ToolkitPatchLogger.Log(LOGGER_NAME, $"Chose animal {animal} for the attack beast");

            ThingDef def = ThingDef.Named(animal);

            worker     = new CustomManhunterIncidentWorker(PawnKindDef.Named(animal));
            worker.def = IncidentDef.Named("BeastAttack");

            bool success = worker.CanFireNow(parms);

            if (!success)
            {
                WorkerCanFireCheck.CheckDefaultFireNowConditions(worker, parms, worker.def);
            }

            return(success);
        }
        public void ApplySettings()
        {
            IncidentDef tornado = IncidentDef.Named("Tornado");

            tornado.baseChance    = baseChanceHandler;
            tornado.minRefireDays = minRefireDaysHandler;

            Logger.Message(String.Format(
                               "Settings loaded:\n\tbaseChange: {0}\n\tminRefireDays: {1}",
                               tornado.baseChance, tornado.minRefireDays));
        }
        public override void TryExecute()
        {
            IncidentWorker worker = new IncidentWorker_VomitRain
            {
                def = IncidentDef.Named("VomitRain")
            };

            IncidentParms parms = StorytellerUtility.DefaultParmsNow(IncidentCategoryDefOf.Misc, map);

            worker.TryExecute(parms);
        }
Exemple #29
0
        public static bool CanSpawnNow(IncidentParms parms)
        {
            //IncidentWorker.CanFireNow(parms)

            IncidentDef def = IncidentDef.Named("ZTrib_TribbleArrival");

            if (def.Worker.CanFireNow(parms))
            {
                return(true);
            }
            return(false);
        }
        public override bool IsPossible()
        {
            PawnKindDef animalKind = PawnKindDef.Named("YorkshireTerrier");
            int         num        = AnimalsCount.RandomInRange;

            worker     = new IncidentWorker_SpecificAnimalsWanderIn(null, animalKind, true, num, false, true);
            worker.def = IncidentDef.Named("SelfTame");

            parms = StorytellerUtility.DefaultParmsNow(IncidentCategoryDefOf.Misc, target);

            return(worker.CanFireNow(parms));
        }