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."); } }
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(); }
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(); }
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); } }
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); } }