public override void Init()
        {
            bool tempAllow        = false;
            Map  map              = this.SingleMap;
            MagicMapComponent mmc = map.GetComponent <MagicMapComponent>();

            if (mmc != null && mmc.allowAllIncidents)
            {
                tempAllow = true;
            }
            ModOptions.SettingsRef settingsRef = new ModOptions.SettingsRef();
            if (settingsRef.wanderingLichChallenge > 0 || tempAllow)
            {
                base.Init();
                this.disabled = false;
                this.FindGoodEdgeLocation();
                this.SpawnWanderingLich();
                this.SetEventParameters();
                if (settingsRef.wanderingLichChallenge >= 2)
                {
                    InitializeDeathSkies();
                }
                if (settingsRef.wanderingLichChallenge >= 3)
                {
                    InitializeSolarFlare();
                }
            }
            else
            {
                this.disabled = true;
                Log.Message("Wandering Lich spawning disabled.");
            }
        }
Ejemplo n.º 2
0
        public override void End()
        {
            CompSkeletonLichController comp = null;

            if (!thing.DestroyedOrNull())
            {
                comp = thing.TryGetComp <CompSkeletonLichController>();
                SendAssaultWave(comp.ParentPawn.Faction, true);
            }
            else
            {
                List <Pawn> allPawns = this.SingleMap.mapPawns.AllPawnsSpawned;
                for (int i = 0; i < allPawns.Count; i++)
                {
                    if (allPawns[i].def == TorannMagicDefOf.TM_SkeletonR || allPawns[i].def == TorannMagicDefOf.TM_GiantSkeletonR || allPawns[i].def == TorannMagicDefOf.TM_SkeletonLichR)
                    {
                        if (allPawns[i].Faction != Faction.OfPlayer)
                        {
                            allPawns[i].Kill(null, null);
                            i--;
                        }
                    }
                }
            }
            List <GameCondition> gcs = new List <GameCondition>();

            gcs = this.SingleMap.GameConditionManager.ActiveConditions;
            for (int i = 0; i < gcs.Count; i++)
            {
                if (gcs[i].def == TorannMagicDefOf.DarkClouds)
                {
                    gcs[i].End();
                }
                else if (gcs[i].def == GameConditionDefOf.SolarFlare)
                {
                    gcs[i].End();
                }
            }

            MagicMapComponent mmc = this.SingleMap.GetComponent <MagicMapComponent>();

            if (mmc != null && mmc.allowAllIncidents)
            {
                mmc.allowAllIncidents = false;;
            }
            base.End();
        }
Ejemplo n.º 3
0
        public override void End()
        {
            for (int i = 0; i < spawnedThings.Count; i++)
            {
                Pawn p = spawnedThings[i];
                if (!p.DestroyedOrNull())
                {
                    if (p.Map != null)
                    {
                        p.Map.weatherManager.eventHandler.AddEvent(new TM_WeatherEvent_MeshFlash(p.Map, p.Position, TM_MatPool.redLightning));
                    }
                    p.Destroy(DestroyMode.Vanish);
                }
            }
            List <GameCondition> gcs      = new List <GameCondition>();
            GameCondition        gcClouds = null;
            GameCondition        gcVW     = null;

            gcs = this.SingleMap.GameConditionManager.ActiveConditions;
            for (int i = 0; i < gcs.Count; i++)
            {
                if (gcs[i].def == TorannMagicDefOf.DarkClouds)
                {
                    gcClouds = gcs[i];
                }
                else if (gcs[i].def == GameConditionDefOf.VolcanicWinter)
                {
                    gcVW = gcs[i];
                }
            }
            if (gcClouds != null)
            {
                gcClouds.End();
            }
            if (gcVW != null)
            {
                gcVW.End();
            }
            MagicMapComponent mmc = this.SingleMap.GetComponent <MagicMapComponent>();

            if (mmc != null)
            {
                mmc.allowAllIncidents = false;
            }
            base.End();
        }
Ejemplo n.º 4
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.º 5
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);
            }
        }