public static GameCondition MakeConditionPermanent(GameConditionDef def)
        {
            GameCondition gameCondition = GameConditionMaker.MakeCondition(def, -1, -180000);

            gameCondition.Permanent = true;
            return(gameCondition);
        }
Ejemplo n.º 2
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.º 3
0
 public Option(GameConditionDef gameCondition, FloatRange durationDaysRange, float difficulty, int challengeRating)
 {
     this.gameCondition     = gameCondition;
     this.durationDaysRange = durationDaysRange;
     this.difficulty        = difficulty;
     this.challengeRating   = challengeRating;
 }
Ejemplo n.º 4
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);
        }
 private Action <DoEditInterface> m__1(GameConditionDef d)
 {
     return(delegate()
     {
         this.gameCondition = d;
     });
 }
Ejemplo n.º 6
0
        public static GameCondition MakeConditionPermanent(GameConditionDef def)
        {
            GameCondition gameCondition = MakeCondition(def);

            gameCondition.Permanent  = true;
            gameCondition.startTick -= 180000;
            return(gameCondition);
        }
Ejemplo n.º 7
0
        private void ChangeIncident()
        {
            GameConditionDef def = incidents.RandomElement();

            foreach (var map in AffectedMaps)
            {
                map.gameConditionManager.RegisterCondition(GameConditionMaker.MakeCondition(def, Rand.Range(4000, 18000)));
            }
        }
        public static GameCondition MakeCondition(GameConditionDef def, int duration = -1, int startTickOffset = 0)
        {
            GameCondition gameCondition = (GameCondition)Activator.CreateInstance(def.conditionClass);

            gameCondition.startTick = Find.TickManager.TicksGame + startTickOffset;
            gameCondition.def       = def;
            gameCondition.Duration  = duration;
            return(gameCondition);
        }
Ejemplo n.º 9
0
        public static bool ConditionIsActive(this GameConditionManager instance, GameConditionDef def)
        {
            bool result = instance.ConditionIsActive(def);

            if (result && def == GameConditionDefOf.SolarFlare)
            {
                return(!instance.ownerMap.GetShieldCoordinator().HasActiveShield());
            }
            return(result);
        }
Ejemplo n.º 10
0
        public static GameCondition MakeCondition(GameConditionDef def, int duration = -1)
        {
            GameCondition obj = (GameCondition)Activator.CreateInstance(def.conditionClass);

            obj.startTick = Find.TickManager.TicksGame;
            obj.def       = def;
            obj.Duration  = duration;
            obj.uniqueID  = Find.UniqueIDsManager.GetNextGameConditionID();
            obj.PostMake();
            return(obj);
        }
Ejemplo n.º 11
0
 public override void DoEditInterface(Listing_ScenEdit listing)
 {
     if (!Widgets.ButtonText(listing.GetScenPartRect(this, ScenPart.RowHeight), gameCondition.LabelCap))
     {
         return;
     }
     FloatMenuUtility.MakeMenu(AllowedGameConditions(), (GameConditionDef d) => d.LabelCap, (GameConditionDef d) => delegate
     {
         gameCondition = d;
     });
 }
Ejemplo n.º 12
0
        public static void Postfix(GameConditionManager __instance, ref GameConditionDef def, ref bool __result)
        {
            if (def == GameConditionDefOf.SolarFlare)
            {
                //    Log.Message(string.Format("GameConditionManager_ConditionIsActive_Patch SolarFlare: {0}", __result));
                __result = __result || __instance.ConditionIsActive(XenomorphDefOf.RRY_Xenomorph_PowerCut);
#if DEBUG
                //    Log.Message(string.Format("GameConditionManager_ConditionIsActive_Patch Xenomorph_PowerCut: {0}", __result));
#endif
            }
        }
        public override void DoEditInterface(Listing_ScenEdit listing)
        {
            Rect scenPartRect = listing.GetScenPartRect(this, ScenPart.RowHeight);

            if (Widgets.ButtonText(scenPartRect, this.gameCondition.LabelCap, true, false, true))
            {
                FloatMenuUtility.MakeMenu <GameConditionDef>(this.AllowedGameConditions(), (GameConditionDef d) => d.LabelCap, (GameConditionDef d) => delegate()
                {
                    this.gameCondition = d;
                });
            }
        }
Ejemplo n.º 14
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.º 15
0
        public override bool CanAffectCondition(GameConditionDef cond)
        {
            if (!Armor.Active)
            {
                return(true);
            }

            if (cond == GameConditionDefOfLocal.HeavyAir)
            {
                return(false);
            }

            return(true);
        }
Ejemplo n.º 16
0
 internal bool AllowEnjoyableOutsideNow(out GameConditionDef reason)
 {
     for (int i = 0; i < this.activeConditions.Count; i++)
     {
         GameCondition gameCondition = this.activeConditions[i];
         if (!gameCondition.AllowEnjoyableOutsideNow())
         {
             reason = gameCondition.def;
             return(false);
         }
     }
     reason = null;
     return(this.Parent == null || this.Parent.AllowEnjoyableOutsideNow(out reason));
 }
Ejemplo n.º 17
0
        public override bool CanAffectCondition(GameConditionDef cond)
        {
            if (!Armor.Active)
            {
                return(true);
            }

            if (cond == GameConditionDefOf.ToxicFallout)
            {
                return(true);
            }

            return(false);
        }
Ejemplo n.º 18
0
 public GameCondition GetActiveCondition(GameConditionDef def)
 {
     for (int i = 0; i < this.activeConditions.Count; i++)
     {
         if (def == this.activeConditions[i].def)
         {
             return(this.activeConditions[i]);
         }
     }
     if (this.Parent != null)
     {
         return(this.Parent.GetActiveCondition(def));
     }
     return(null);
 }
 public GameConditionAction(GameConditionDef ConditionDef, string category = "Game Condition")
 {
     defName          = ConditionDef.defName;
     defLabel         = ConditionDef.label;
     Name             = defLabel;
     Description      = ConditionDef.description;
     ShouldShowAmount = true;
     Prefix           = "Trigger";
     Category         = category;
     thingDef         = ConditionDef;
     LocalCooldownMs  = 30000;
     GlobalCooldownMs = 15000;
     CostSilverStore  = 0;
     BitStoreSKU      = "";
 }
Ejemplo n.º 20
0
        private bool PossibleNow(GameConditionDef def, Slate slate)
        {
            if (def == null)
            {
                return(false);
            }
            Map map = slate.Get <Map>("map");

            if (map.gameConditionManager.ConditionIsActive(def))
            {
                return(false);
            }
            IncidentDef        incidentDef           = null;
            List <IncidentDef> allDefsListForReading = DefDatabase <IncidentDef> .AllDefsListForReading;

            for (int i = 0; i < allDefsListForReading.Count; i++)
            {
                if (allDefsListForReading[i].Worker is IncidentWorker_MakeGameCondition && allDefsListForReading[i].gameCondition == def)
                {
                    incidentDef = allDefsListForReading[i];
                    break;
                }
            }
            if (incidentDef != null)
            {
                if (Find.Storyteller.difficulty.difficulty < incidentDef.minDifficulty)
                {
                    return(false);
                }
                if (GenDate.DaysPassed < incidentDef.earliestDay)
                {
                    return(false);
                }
                if (incidentDef.Worker.FiredTooRecently(map))
                {
                    return(false);
                }
            }
            if (def == GameConditionDefOf.ColdSnap && !IncidentWorker_ColdSnap.IsTemperatureAppropriate(map))
            {
                return(false);
            }
            if (def == GameConditionDefOf.HeatWave && !IncidentWorker_HeatWave.IsTemperatureAppropriate(map))
            {
                return(false);
            }
            return(true);
        }
 internal bool AllowEnjoyableOutsideNow(Map map, out GameConditionDef reason)
 {
     for (int i = 0; i < activeConditions.Count; i++)
     {
         GameCondition gameCondition = activeConditions[i];
         if (!gameCondition.AllowEnjoyableOutsideNow(map))
         {
             reason = gameCondition.def;
             return(false);
         }
     }
     reason = null;
     if (Parent != null)
     {
         return(Parent.AllowEnjoyableOutsideNow(map, out reason));
     }
     return(true);
 }
Ejemplo n.º 22
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.º 23
0
        public static bool EnjoyableOutsideNow(Map map, StringBuilder outFailReason = null)
        {
            if (map.weatherManager.RainRate >= 0.25)
            {
                if (outFailReason != null)
                {
                    outFailReason.Append(map.weatherManager.curWeather.label);
                }
                return(false);
            }
            GameConditionDef gameConditionDef = default(GameConditionDef);

            if (!map.gameConditionManager.AllowEnjoyableOutsideNow(out gameConditionDef))
            {
                if (outFailReason != null)
                {
                    outFailReason.Append(gameConditionDef.label);
                }
                return(false);
            }
            return(true);
        }
        public override void Execute(int amount, string boughtBy)
        {
            GameConditionDef conditionDef = DefDatabase <GameConditionDef> .GetNamed(defName);

            String notificationMessage;

            // I hope no viewer uses RC with the name "Poll"
            if (boughtBy == "Poll")
            {
                notificationMessage = $"<color=#9147ff>By popular opinion</color>, your channel has triggered {defLabel} for a whole day! Let's hope you get out the other side";
            }
            else
            {
                notificationMessage = $"<color=#9147ff>{boughtBy}</color> purchased {defLabel} for a whole day! Let's hope you get out the other side";
            }

            Map map = Find.CurrentMap;

            GameCondition gameCondition = GameConditionMaker.MakeCondition(conditionDef, 60000);

            map.gameConditionManager.RegisterCondition(gameCondition);

            AlertManager.BadEventNotification(notificationMessage);
        }
Ejemplo n.º 25
0
        protected override bool TryExecuteWorker(IncidentParms parms)
        {
            bool tempAllow        = false;
            Map  map              = (Map)parms.target;
            MagicMapComponent mmc = map.GetComponent <MagicMapComponent>();

            if (mmc != null && mmc.allowAllIncidents)
            {
                tempAllow = true;
            }
            ModOptions.SettingsRef settingsRef = new ModOptions.SettingsRef();
            if (settingsRef.demonAssaultChallenge > 0 || tempAllow)
            {
                string str = "";

                int            duration    = Mathf.RoundToInt(this.def.durationDays.RandomInRange * 60000f);
                List <Faction> lichFaction = Find.FactionManager.AllFactions.ToList();
                bool           factionFlag = false;
                for (int i = 0; i < lichFaction.Count; i++)
                {
                    if (lichFaction[i].def.defName == "TM_SkeletalFaction")
                    {
                        Faction.OfPlayer.TrySetRelationKind(lichFaction[i], FactionRelationKind.Hostile, false, null, null);
                        factionFlag = true;
                    }
                }
                if (!factionFlag)
                {
                    return(false);
                }
                TM_Action.ForceFactionDiscoveryAndRelation(TorannMagicDefOf.TM_SkeletalFaction);
                GameCondition_DemonAssault gameCondition_DemonAssault = (GameCondition_DemonAssault)GameConditionMaker.MakeCondition(GameConditionDef.Named("DemonAssault"), duration);
                map.gameConditionManager.RegisterCondition(gameCondition_DemonAssault);
                base.SendStandardLetter(parms, gameCondition_DemonAssault.lookTarget, str);
                //base.SendStandardLetter(new TargetInfo(gameCondition_ElementalAssault.centerLocation.ToIntVec3, map, false), null, new string[0]);
                return(true);
            }
            else
            {
                return(false);
            }
        }
Ejemplo n.º 26
0
        protected override bool TryExecuteWorker(IncidentParms parms)
        {
            Map map = (Map)parms.target;

            map.weatherManager.TransitionTo(WeatherDef.Named("VomitRain"));
            int duration = Mathf.RoundToInt(this.def.durationDays.RandomInRange * 60000f);
            GameCondition_VomitRain gameCondition_VomitRain = (GameCondition_VomitRain)GameConditionMaker.MakeCondition(GameConditionDef.Named("VomitRain"), duration);

            map.gameConditionManager.RegisterCondition(gameCondition_VomitRain);
            base.SendStandardLetter(parms, new TargetInfo(gameCondition_VomitRain.centerLocation.ToIntVec3, map, false));
            if (map.weatherManager.curWeather.rainRate > 0.1f)
            {
                map.weatherDecider.StartNextWeather();
            }
            return(true);
        }
Ejemplo n.º 27
0
        protected override bool CanFireNowSub(IncidentParms parms)
        {
            Map map = (Map)parms.target;

            return(!map.gameConditionManager.ConditionIsActive(GameConditionDef.Named("VomitRain")));
        }
Ejemplo n.º 28
0
 public bool ConditionIsActive(GameConditionDef def)
 {
     return(this.GetActiveCondition(def) != null);
 }
Ejemplo n.º 29
0
 protected override bool TryExecuteWorker(IncidentParms parms)
 {
     ModOptions.SettingsRef settingsRef = new ModOptions.SettingsRef();
     if (settingsRef.riftChallenge > 0)
     {
         Map map      = (Map)parms.target;
         int duration = Mathf.RoundToInt(this.def.durationDays.RandomInRange * 60000f);
         GameCondition_ElementalAssault gameCondition_ElementalAssault = (GameCondition_ElementalAssault)GameConditionMaker.MakeCondition(GameConditionDef.Named("ElementalAssault"), duration, 0);
         map.gameConditionManager.RegisterCondition(gameCondition_ElementalAssault);
         base.SendStandardLetter(new TargetInfo(gameCondition_ElementalAssault.centerLocation.ToIntVec3, map, false), null, new string[0]);
         return(true);
     }
     else
     {
         return(false);
     }
 }
Ejemplo n.º 30
0
        protected override bool TryExecuteWorker(IncidentParms parms)
        {
            ModOptions.SettingsRef settingsRef = new ModOptions.SettingsRef();
            bool tempAllow        = false;
            Map  map              = (Map)parms.target;
            MagicMapComponent mmc = map.GetComponent <MagicMapComponent>();

            if (mmc != null && mmc.allowAllIncidents)
            {
                tempAllow = true;
            }
            if (settingsRef.wanderingLichChallenge > 0 || tempAllow)
            {
                int duration = Mathf.RoundToInt(this.def.durationDays.RandomInRange * 60000f);
                IEnumerable <Faction> lichFaction = Find.FactionManager.AllFactions;
                bool factionFlag = false;
                foreach (var faction in lichFaction)
                {
                    if (faction.def.defName == "TM_SkeletalFaction")
                    {
                        Faction.OfPlayer.TrySetRelationKind(faction, FactionRelationKind.Hostile, false, null, null);
                        factionFlag = true;
                    }
                }
                if (!factionFlag)
                {
                    return(false);
                }
                TM_Action.ForceFactionDiscoveryAndRelation(TorannMagicDefOf.TM_SkeletalFaction);
                GameCondition_WanderingLich gameCondition_WanderingLich = (GameCondition_WanderingLich)GameConditionMaker.MakeCondition(GameConditionDef.Named("WanderingLich"), duration);
                map.gameConditionManager.RegisterCondition(gameCondition_WanderingLich);
                base.SendStandardLetter(parms, gameCondition_WanderingLich.thing, "");
                //base.SendStandardLetter(new TargetInfo(gameCondition_WanderingLich.edgeLocation.ToIntVec3, map, false), null, new string[0]);
                return(true);
            }
            else
            {
                return(false);
            }
        }