Ejemplo n.º 1
0
        protected override void RunInt()
        {
            Slate                   slate                   = QuestGen.slate;
            float                   points                  = QuestGen.slate.Get("points", 0f);
            GameCondition           gameCondition           = GameConditionMaker.MakeCondition(this.gameCondition.GetValue(slate), duration.GetValue(slate));
            QuestPart_GameCondition questPart_GameCondition = new QuestPart_GameCondition();

            questPart_GameCondition.gameCondition = gameCondition;
            List <Rule> list = new List <Rule>();
            Dictionary <string, string> dictionary = new Dictionary <string, string>();

            if (targetWorld.GetValue(slate))
            {
                questPart_GameCondition.targetWorld = true;
                gameCondition.RandomizeSettings(points, null, list, dictionary);
            }
            else
            {
                Map map = GetMap(QuestGen.slate);
                questPart_GameCondition.mapParent = map.Parent;
                gameCondition.RandomizeSettings(points, map, list, dictionary);
            }
            questPart_GameCondition.inSignal = (QuestGenUtility.HardcodedSignalWithQuestID(inSignal.GetValue(slate)) ?? QuestGen.slate.Get <string>("inSignal"));
            QuestGen.quest.AddPart(questPart_GameCondition);
            if (!storeGameConditionDescriptionFutureAs.GetValue(slate).NullOrEmpty())
            {
                slate.Set(storeGameConditionDescriptionFutureAs.GetValue(slate), gameCondition.def.descriptionFuture);
            }
            QuestGen.AddQuestNameRules(list);
            QuestGen.AddQuestDescriptionRules(list);
            QuestGen.AddQuestDescriptionConstants(dictionary);
        }
Ejemplo n.º 2
0
            private static bool Prefix(GameConditionManager __instance, GameCondition cond)
            {
                var ind = ZUtils.ZTracker.GetZIndexFor(__instance.ownerMap);

                if (ind == 0 && !(__instance.ownerMap.Parent is MapParent_ZLevel))
                {
                    AddCondition = true;
                    foreach (var map in ZUtils.ZTracker.GetAllMaps(__instance.ownerMap.Tile))
                    {
                        if (map != __instance.ownerMap && (ZUtils.ZTracker.GetZIndexFor(map) < 0 &&
                                                           !blackList.Contains(cond.def) || ZUtils.ZTracker.GetZIndexFor(map) > 0))
                        {
                            var newCond = GameConditionMaker.MakeCondition(cond.def, cond.Duration);
                            newCond.conditionCauser = cond.conditionCauser;
                            newCond.Permanent       = cond.Permanent;
                            newCond.startTick       = cond.startTick;
                            newCond.quest           = cond.quest;
                            ZLogger.Message("Register: " + newCond + " in the " + ZUtils.ZTracker.GetMapInfo(map), true);
                            map.gameConditionManager.RegisterCondition(newCond);
                        }
                    }
                    AddCondition = false;
                }
                else if (ind < 0 && (!AddCondition || blackList.Contains(cond.def)))
                {
                    return(false);
                }
                else if (ind > 0 && !AddCondition)
                {
                    return(false);
                }
                return(true);
            }
Ejemplo n.º 3
0
        public static void Postfix(Map __instance)
        {
            Log.Message("WeatherChecker: " + __instance.ToString());
            bool comeFromOuterSource;
            var  tempComp = new WorldObjectComp_InfectedTile();

            tempComp.infectedTile = __instance.Tile;
            if (PurpleIvyUtils.getFogProgressWithOuterSources(0, tempComp, out comeFromOuterSource) > 0f &&
                !__instance.gameConditionManager.ConditionIsActive(PurpleIvyDefOf.PurpleFogGameCondition))
            {
                GameCondition_PurpleFog gameCondition =
                    (GameCondition_PurpleFog)GameConditionMaker.MakeConditionPermanent
                        (PurpleIvyDefOf.PurpleFogGameCondition);
                __instance.gameConditionManager.RegisterCondition(gameCondition);
                tempComp.parent = __instance.Parent;
                tempComp.StartInfection();
                tempComp.gameConditionCaused = PurpleIvyDefOf.PurpleFogGameCondition;
                tempComp.counter             = 0;
                tempComp.infected            = false;
                tempComp.infectedTile        = __instance.Tile;
                tempComp.radius = tempComp.GetRadius();
                PurpleIvyData.TotalFogProgress[tempComp] = PurpleIvyUtils.getFogProgress(tempComp.counter);
                tempComp.fillRadius();
                __instance.Parent.AllComps.Add(tempComp);
            }
        }
Ejemplo n.º 4
0
        private static void SupernovaUltra(IncidentParms parms)
        {
            GameConditionDef[] conditions = new GameConditionDef[5]
            {
                GameConditionDefOfLocal.BoulderMassHit,
                GameConditionDefOfLocal.SuperHeatWave,
                GameConditionDefOfLocal.Endlessday,
                GameConditionDefOfLocal.LeanAtmosphere,
                GameConditionDefOfLocal.IonizedAtmosphere
            };

            int[] durations = new int[5]
            {
                Rand.Range(250000, 350000),
                Rand.Range(250000, 350000),
                Rand.Range(250000, 350000),
                -1,
                Rand.Range(250000, 350000)
            };

            for (int i = 0; i < conditions.Length; i++)
            {
                parms.target.GameConditionManager.RegisterCondition(GameConditionMaker.MakeCondition(conditions[i], durations[i]));
            }
            Find.LetterStack.ReceiveLetter(Translator.Translate("Supernova_label"), Translator.Translate("SupernovaExp_ultra"), LetterDefOf.NegativeEvent);
        }
Ejemplo n.º 5
0
        public override bool TryExecuteEvent()
        {
            Map map = Find.CurrentMap;
            //int duration = Mathf.RoundToInt(1 * 60000f); // 1 день грозы
            int duration         = Mathf.RoundToInt(1000f); // время шторма в тиках
            GameConditionDef def = new GameConditionDef
            {
                conditionClass    = typeof(OC_GameCondition_Storm),
                canBePermanent    = false,
                preventRain       = false,
                temperatureOffset = 0,
            };
            OC_GameCondition_Storm storm = (OC_GameCondition_Storm)GameConditionMaker.MakeCondition(def, duration); // единственный способ вставить своё время

            storm.cooldown = 25;                                                                                    // кд в тиках между ударами
            string label = "Гнев зевса";
            string text  = "";

            Find.LetterStack.ReceiveLetter(label, text, LetterDefOf.NegativeEvent);
            map.gameConditionManager.RegisterCondition(storm);

            if (map.weatherManager.curWeather.rainRate > 0.1f)
            {
                map.weatherDecider.StartNextWeather();
            }
            return(true);
        }
        protected void DoConditionAndLetter(int duration, IIncidentTarget target)
        {
            Map map = (Map)target;
            //Cthulhu.Utility.DebugReport("Generating Map Condition");
            GameCondition_AuroraEffect GameCondition = (GameCondition_AuroraEffect)GameConditionMaker.MakeCondition(CultsDefOf.Cults_Aurora, duration);
            string text3 = "";
            //Cthulhu.Utility.DebugReport("Getting coords.");
            Vector2 coords = Find.WorldGrid.LongLatOf(map.Tile);

            if (coords.y >= 74)
            {
                text3 = "Borealis";
            }
            else
            {
                text3 = "Australis";
            }
            //Cthulhu.Utility.DebugReport("Getting label");
            string textLabel = "LetterLabelAurora".Translate(
                text3
                );

            //Cthulhu.Utility.DebugReport("Registering Conditions");
            map.GameConditionManager.RegisterCondition(GameCondition);
            string textDesc = "LetterIncidentAurora".Translate();

            //Cthulhu.Utility.DebugReport("Sending letter");
            Find.LetterStack.ReceiveLetter(textLabel, textDesc, LetterDefOf.PositiveEvent, null);
            map.GetComponent <MapComponent_SacrificeTracker>().lastLocation = IntVec3.Invalid;
        }
Ejemplo n.º 7
0
        protected override bool TryExecuteWorker(IncidentParms parms)
        {
            this.ResolveArrivalPoints(parms);
            Map         map    = (Map)parms.target;
            PawnKindDef scp939 = PawnKindDefOf_SCP.SCP_939_PawnKindDef;

            if (scp939 is null)
            {
                return(false);
            }
            float num = parms.points;

            int num2   = GenMath.RoundRandom(num / scp939.combatPower);
            int numMax = Rand.RangeInclusive(15, 20);

            num2 = Mathf.Clamp(num2, 1, numMax);

            int duration = Mathf.RoundToInt(this.def.durationDays.RandomInRange * 60000);
            GameCondition_SCP939 cond = (GameCondition_SCP939)GameConditionMaker.MakeCondition(this.def.gameCondition, duration);

            cond.scp939Count = num2;
            parms.target.GameConditionManager.RegisterCondition(cond);
            Find.LetterStack.ReceiveLetter("LetterSCP939Enters".Translate().CapitalizeFirst(), "LetterSCP939EntersText".Translate(), LetterDefOf.ThreatBig);
            return(true);
        }
Ejemplo n.º 8
0
        private void InitializeVolcanicWinter()
        {
            GameConditionManager gameConditionManager = this.gameConditionManager;
            int           duration = Mathf.RoundToInt(this.Duration);
            GameCondition cond     = GameConditionMaker.MakeCondition(GameConditionDefOf.VolcanicWinter, duration);

            gameConditionManager.RegisterCondition(cond);
        }
Ejemplo n.º 9
0
        private void InitializeDeathSkies()
        {
            GameConditionManager gameConditionManager = this.gameConditionManager;
            int           duration = Mathf.RoundToInt(this.Duration);
            GameCondition cond2    = GameConditionMaker.MakeCondition(TorannMagicDefOf.DarkClouds, duration);

            gameConditionManager.RegisterCondition(cond2);
        }
        public override void Init()
        {
            this.Duration  = -1;
            this.Permanent = true;
            GameCondition cond = GameConditionMaker.MakeConditionPermanent(GameConditionDefOfLocal.RadiationFon);

            Find.World.gameConditionManager.RegisterCondition(cond);
        }
        private void InitializeSolarFlare()
        {
            GameConditionManager gameConditionManager = this.gameConditionManager;
            int           duration = Mathf.RoundToInt(this.Duration);
            GameCondition cond     = GameConditionMaker.MakeCondition(GameConditionDefOf.SolarFlare, duration);

            gameConditionManager.RegisterCondition(cond);
        }
Ejemplo n.º 12
0
        protected override bool TryExecuteWorker(IncidentParms parms)
        {
            GameConditionManager gameConditionManager = parms.target.GameConditionManager;
            GameCondition        cond = GameConditionMaker.MakeCondition(this.def.gameCondition, Ticks, 0);

            gameConditionManager.RegisterCondition(cond);
            base.SendStandardLetter();
            return(true);
        }
Ejemplo n.º 13
0
        private void ChangeIncident()
        {
            GameConditionDef def = incidents.RandomElement();

            foreach (var map in AffectedMaps)
            {
                map.gameConditionManager.RegisterCondition(GameConditionMaker.MakeCondition(def, Rand.Range(4000, 18000)));
            }
        }
Ejemplo n.º 14
0
        public void BeginAssaultCondition()
        {
            List <GameCondition> currentGameConditions = this.Map.gameConditionManager.ActiveConditions;
            WeatherDef           weatherDef            = new WeatherDef();

            if (this.rnd < 2) //earth
            {
                if (!this.Map.GameConditionManager.ConditionIsActive(GameConditionDefOf.ToxicFallout))
                {
                    this.Map.GameConditionManager.RegisterCondition(GameConditionMaker.MakeCondition(GameConditionDefOf.ToxicFallout, 500000, 60));
                }
                this.eventFrequencyMultiplier = 4;
            }
            else if (this.rnd < 4) //fire
            {
                for (int i = 0; i < currentGameConditions.Count; i++)
                {
                    if (currentGameConditions[i].def == GameConditionDefOf.ColdSnap)
                    {
                        currentGameConditions[i].Duration = 0;
                        currentGameConditions[i].End();
                    }
                }
                if (!this.Map.GameConditionManager.ConditionIsActive(GameConditionDefOf.HeatWave))
                {
                    this.Map.GameConditionManager.RegisterCondition(GameConditionMaker.MakeCondition(GameConditionDefOf.HeatWave, 500000, 60));
                }
                this.eventFrequencyMultiplier = .5f;
                this.areaRadius = 2;
            }
            else if (this.rnd < 6) //water
            {
                for (int i = 0; i < currentGameConditions.Count; i++)
                {
                    if (currentGameConditions[i].def == GameConditionDefOf.HeatWave)
                    {
                        currentGameConditions[i].Duration = 0;
                        currentGameConditions[i].End();
                    }
                }
                if (!this.Map.GameConditionManager.ConditionIsActive(GameConditionDefOf.ColdSnap))
                {
                    this.Map.GameConditionManager.RegisterCondition(GameConditionMaker.MakeCondition(GameConditionDefOf.ColdSnap, 500000, 60));
                }
                weatherDef = WeatherDef.Named("SnowHard");
                this.Map.weatherManager.TransitionTo(weatherDef);
                this.eventFrequencyMultiplier = .5f;
                this.areaRadius = 3;
            }
            else //air
            {
                weatherDef = WeatherDef.Named("RainyThunderstorm");
                this.Map.weatherManager.TransitionTo(weatherDef);
                this.eventFrequencyMultiplier = .4f;
                this.areaRadius = 2;
            }
        }
Ejemplo n.º 15
0
        protected override bool TryExecuteWorker(IncidentParms parms)
        {
            GameConditionManager gameConditionManager = parms.target.GameConditionManager;
            int           duration = Mathf.RoundToInt(base.def.durationDays.RandomInRange * 60000f);
            GameCondition cond     = GameConditionMaker.MakeCondition(base.def.gameCondition, duration, 0);

            gameConditionManager.RegisterCondition(cond);
            //base.SendStandardLetter();    //it's that easy!
            return(true);
        }
Ejemplo n.º 16
0
        public static GameCondition CreateConditionOn2(CompCauseGameCondition __instance, Map map)
        {
            GameCondition gameCondition = GameConditionMaker.MakeCondition(__instance.ConditionDef);

            gameCondition.Duration        = gameCondition.TransitionTicks;
            gameCondition.conditionCauser = __instance.parent;
            map.gameConditionManager.RegisterCondition(gameCondition);
            causedConditions(__instance).Add(map, gameCondition);
            SetupCondition2(gameCondition, map);
            return(gameCondition);
        }
        protected override bool TryExecuteWorker(IncidentParms parms)
        {
            Map            map            = (Map)parms.target;
            SettlementBase settlementBase = Find.WorldObjects.ObjectsAt(map.Tile).OfType <SettlementBase>().First();
            int            duration       = Mathf.RoundToInt(this.def.durationDays.RandomInRange * GenDate.TicksPerDay);
            GameCondition  cond           = GameConditionMaker.MakeCondition(this.def.gameCondition, duration, 0);

            map.gameConditionManager.RegisterCondition(cond);
            Find.LetterStack.ReceiveLetter("LetterLabelNewElection".Translate(settlementBase.Label), "LetterNewElection".Translate(settlementBase.Label), LetterDefOf.PositiveEvent, new TargetInfo(map.Center, map, false), null);
            return(true);
        }
Ejemplo n.º 18
0
        protected override bool TryExecuteWorker(IncidentParms parms)
        {
            Map map = (Map)parms.target;

            Find.LetterStack.ReceiveLetter(this.def.letterLabel, def.letterText, LetterDefOf.NeutralEvent);
            //parms.customLetterDef = LetterDefOf.NeutralEvent;
            //parms.customLetterLabel = this.def.letterLabel;
            //parms.customLetterText = def.letterText;
            map.gameConditionManager.RegisterCondition(GameConditionMaker.MakeCondition(DefDatabase <GameConditionDef> .GetNamed("BlueSnowCondition")));
            //return base.TryExecuteWorker(parms);
            return(true);
        }
Ejemplo n.º 19
0
        public override void Generate(Map map, GenStepParams parms)
        {
            base.Generate(map, parms);
            this.baseResolveParams.rect = new CellRect(0, 0, map.Size.x, map.Size.z);
            BaseGen.symbolStack.Push("toxicFalloutCityBaseLGE", this.baseResolveParams);
            BaseGen.Generate();

            //after generation spawn permanent toxic fallout
            GameCondition falloutCondition = GameConditionMaker.MakeCondition(GameConditionDefOf.ToxicFallout);

            falloutCondition.Permanent = true;
            map.GameConditionManager.RegisterCondition(falloutCondition);
        }
Ejemplo n.º 20
0
        public override void PostMapGenerate(Map map)
        {
            base.PostMapGenerate(map);
            List <Thing> list = map.listerThings.ThingsInGroup(ThingRequestGroup.Plant).ToList <Thing>();

            foreach (Thing thing in list)
            {
                thing.Destroy(DestroyMode.Vanish);
            }
            GameCondition gameCondition = GameConditionMaker.MakeCondition(GameConditionDef.Named("RD_Radiation"), 3000000);

            map.gameConditionManager.RegisterCondition(gameCondition);
        }
Ejemplo n.º 21
0
        private void InitializeDarkStorms()
        {
            GameConditionManager gameConditionManager = base.CasterPawn.Map.gameConditionManager;
            int           duration = 45000;
            GameCondition cond     = GameConditionMaker.MakeCondition(TorannMagicDefOf.DarkThunderstorm, duration);

            gameConditionManager.RegisterCondition(cond);
            GameCondition_DarkThunderstorm gcdt = cond as GameCondition_DarkThunderstorm;

            if (gcdt != null)
            {
                gcdt.faction = base.CasterPawn.Faction;
            }
        }
        public override void Generate(Map map)
        {
            if (map.Biome != Util_CaveBiome.CaveBiomeDef)
            {
                // Nothing to do in other biomes.
                return;
            }
            // To avoid starting with standard Clear weather, immediately force to reselect a cave biome weather.
            map.weatherDecider.StartNextWeather();

            GameCondition condition = GameConditionMaker.MakeConditionPermanent(Util_CaveBiome.CaveEnvironmentGameConditionDef);

            map.gameConditionManager.RegisterCondition(condition);
        }
Ejemplo n.º 23
0
        protected override bool TryExecuteWorker(IncidentParms parms)
        {
            if (!settings.Active)
            {
                return(false);
            }

            GameConditionManager gameConditionManager = parms.target.GameConditionManager;
            int           duration = Mathf.RoundToInt(def.durationDays.RandomInRange * 60000f);
            GameCondition cond     = GameConditionMaker.MakeCondition(def.gameCondition, duration);

            gameConditionManager.RegisterCondition(cond);
            SendStandardLetter(parms, null);
            return(true);
        }
        public static bool CreateConditionOn(CompCauseGameCondition __instance, ref GameCondition __result, Map map)
        {
            GameCondition gameCondition = GameConditionMaker.MakeCondition(__instance.ConditionDef);

            gameCondition.Duration        = gameCondition.TransitionTicks;
            gameCondition.conditionCauser = __instance.parent;
            map.gameConditionManager.RegisterCondition(gameCondition);
            lock (__instance)
            {
                causedConditionsFieldRef(__instance).Add(map, gameCondition);
            }
            gameCondition.suppressEndMessage = true;
            __result = gameCondition;
            return(false);
        }
Ejemplo n.º 25
0
        public override void WorldComponentTick()
        {
            base.WorldComponentTick();
            if (!moons.NullOrEmpty())
            {
                foreach (var moon in moons)
                {
                    moon.Tick();
                }
            }

            if (gcMoonCycle == null)
            {
                gcMoonCycle = GameConditionMaker.MakeConditionPermanent(WWDefOf.ROM_MoonCycle);
                Find.World.gameConditionManager.RegisterCondition(gcMoonCycle);
            }

            if (recentWerewolves.Any())
            {
                recentWerewolves.RemoveAll(x => x.Key.Dead || x.Key.DestroyedOrNull());
            }

            if (!recentWerewolves.Any())
            {
                return;
            }

            var recentVampiresKeys = new List <Pawn>(recentWerewolves.Keys);

            foreach (var key in recentVampiresKeys)
            {
                recentWerewolves[key] += 1;
                if (recentWerewolves[key] <= 100)
                {
                    continue;
                }

                recentWerewolves.Remove(key);
                if (!key.Spawned || key.Faction == Faction.OfPlayerSilentFail)
                {
                    continue;
                }

                Find.LetterStack.ReceiveLetter("ROM_WerewolfEncounterLabel".Translate(),
                                               "ROM_WerewolfEncounterDesc".Translate(key.LabelShort), LetterDefOf.ThreatSmall, key);
            }
        }
Ejemplo n.º 26
0
        public void DetonateBomb()
        {
            RemoveAfterLeave = true;
            var condition = GameConditionMaker.MakeCondition(GameConditionDefOfLocal.ClimateChaos, Rand.Range(15, 25) * 60000);

            Find.World.gameConditionManager.RegisterCondition(condition);
            Find.LetterStack.ReceiveLetter(GameConditionDefOfLocal.ClimateChaos.label, GameConditionDefOfLocal.ClimateChaos.description, LetterDefOf.NegativeEvent);

            if (HasMap)
            {
                Bomb.Detonate();
            }
            else
            {
                Find.WorldObjects.Remove(this);
            }
        }
Ejemplo n.º 27
0
        public override void MapComponentTick()
        {
            if (Severity > 0.1) // TODO: optimize
            {
                if (!map.GameConditionManager.ConditionIsActive(CultsDefOf.Cults_GameCondition_ResidualEnergy))
                {
                    map.GameConditionManager.RegisterCondition(GameConditionMaker.MakeCondition(CultsDefOf.Cults_GameCondition_ResidualEnergy));
                }
            }
            else
            {
                GameCondition_ResidualEnergy condition = map.GameConditionManager.GetActiveCondition <GameCondition_ResidualEnergy>();
                condition?.End();
            }

            if (counter++ % Tick.hour == 0)
            {
                severity -= dispersePerHour;
            }
        }
Ejemplo n.º 28
0
        private static void SupernovaMedium(IncidentParms parms)
        {
            GameConditionDef[] conditions = new GameConditionDef[2]
            {
                GameConditionDefOf.HeatWave,
                GameConditionDefOfLocal.BoulderMassHit
            };
            int[] durations = new int[2]
            {
                Rand.Range(10000, 50000),
                Rand.Range(15000, 50000)
            };

            for (int i = 0; i < conditions.Length; i++)
            {
                parms.target.GameConditionManager.RegisterCondition(GameConditionMaker.MakeCondition(conditions[i], durations[i]));
            }

            Find.LetterStack.ReceiveLetter(Translator.Translate("Supernova_label"), Translator.Translate("SupernovaExp_medium"), LetterDefOf.NeutralEvent);
        }
Ejemplo n.º 29
0
        public override void Execute()
        {
            List <Map> maps = Current.Game.Maps;

            foreach (Map map in maps)
            {
                if (!map.IsPlayerHome || map.GameConditionManager.ConditionIsActive(GameConditionDefOf.Sanctuary))
                {
                    continue;
                }

                map.GameConditionManager.RegisterCondition(GameConditionMaker.MakeCondition(GameConditionDefOf.Sanctuary, Rand.Range(2, 6) * 60000));
            }

            Viewer.Charge(storeIncident);

            Find.LetterStack.ReceiveLetter("TKUtils.SanctuaryLetter.Title".Localize(), "TKUtils.SanctuaryLetter.Description".Localize(), LetterDefOf.PositiveEvent);

            MessageHelper.SendConfirmation(Viewer.username, "TKUtils.Sanctuary.Complete".Localize());
        }
Ejemplo n.º 30
0
        public override void CompTickRare()
        {
            base.CompTickRare();
            if (!LoadedModManager.GetMod <MonsterHunterRimworldMod>().GetSettings <MonsterHunterRimworldModSettings>().elderDragonWeatherEffects)
            {
                return;
            }
            if (!(parent is Pawn elderDragon))
            {
                return;
            }
            if (!WyvernUtility.IsElderDragon(elderDragon))
            {
                return;
            }
            if (elderDragon.Dead)
            {
                return;
            }
            Map map = elderDragon.Map;

            if (map == null)
            {
                return;
            }

            GameConditionManager gameConditionManager = map.GameConditionManager;

            if (gameConditionManager.ConditionIsActive(GameConditionDefOf.ToxicFallout))
            {
                return;
            }
            int           duration = Mathf.RoundToInt(0.5f * 60000f); // lasts half a day after elder dragon dies
            GameCondition cond     = GameConditionMaker.MakeCondition(GameConditionDefOf.ToxicFallout, duration);

            gameConditionManager.RegisterCondition(cond);
        }