public static FCEvent MakeEvent(FCEventDef def) { if (def == null) { return(null); } FCEvent tempEvent = new FCEvent(true); tempEvent.def = def; tempEvent.timeTillTrigger = def.timeTillTrigger + Find.TickManager.TicksGame; return(tempEvent); }
public FCOptionWindow(FCEventDef evt, FCEvent parentEvent) { this.forcePause = !FactionColonies.Settings().disableForcedPausingDuringEvents; this.draggable = true; this.doCloseX = false; this.preventCameraMotion = false; this.header = evt.label; this.options = evt.options; if (evt.optionDescription == "") { this.desc = evt.desc; } else { this.desc = evt.optionDescription; } this.closeOnAccept = false; this.closeOnCancel = false; this.closeOnClickedOutside = false; this.parentEvent = parentEvent; }
public static bool isValidRandomEvent(FCEventDef cEvent) { FactionFC tmp = Find.World.GetComponent <FactionFC>(); if (cEvent.isRandomEvent == true && Find.World.PlayerWealthForStoryteller >= cEvent.requiredWealth) { //If meets happiness requirement if (cEvent.minimumHappiness <= tmp.averageHappiness && tmp.averageHappiness <= cEvent.maximumHappiness) { //If meets loyalty requirement if (cEvent.minimumLoyalty <= tmp.averageLoyalty && tmp.averageLoyalty <= cEvent.maximumLoyalty) { //If meets unrest requirement if (cEvent.minimumUnrest <= tmp.averageUnrest && tmp.averageUnrest <= cEvent.maximumUnrest) { //If meets prosperity requirement if (cEvent.minimumProsperity <= tmp.averageProsperity && tmp.averageProsperity <= cEvent.maximumProsperity) { if (cEvent.rangeSettlementsAffected.min == 0 && cEvent.rangeSettlementsAffected.max == 0 || Find.World.GetComponent <FactionFC>().settlements.Count() >= cEvent.rangeSettlementsAffected.min) { //if doesn't require resource or if required resource has more than 1 production if (cEvent.requiredResource == null ? Find.World.GetComponent <FactionFC>().returnResource(cEvent.requiredResource).assignedWorkers > 0 : true || (cEvent.requiredResource == "research" && traitUtilsFC.returnResearchAmount() > 0)) { //if event is not incompatible with any currently-running events foreach (FCEvent evt in Find.World.GetComponent <FactionFC>().events) { if (evt.def != null) { if (cEvent == evt.def) { //if there's already the same event running return(false); } foreach (FCEventDef inEvt in evt.def.incompatibleEvents) { if (cEvent == inEvt) { //if not compatible return(false); } } } } //If there are no required biomes if (cEvent.applicableBiomes.Count() != 0) { foreach (string biome in cEvent.applicableBiomes) { // if(cEvent.) } } //else if compatible return(true); } else { return(false); } } else { return(false); } } else //if not meet prosperity requirement { return(false); } } else //if not meet unrest requirement { return(false); } } else //if not meet loyalty requirement { return(false); } } else //if not meet happiness requirement { return(false); } } else //if not a random event or enough player wealth { return(false); } }
public static FCEvent MakeRandomEvent(FCEventDef def, List <SettlementFC> SettlementTraitLocations) { FCEvent tempEvent = new FCEvent(true); tempEvent.def = def; tempEvent.timeTillTrigger = def.timeTillTrigger + Find.TickManager.TicksGame; tempEvent.traits = def.traits; tempEvent.settlementTraitLocations = new List <SettlementFC>(); //if affects specific settlement(s) then get settlements. if (tempEvent.def.rangeSettlementsAffected.max != 0) { int numSettlements = tempEvent.def.rangeSettlementsAffected.RandomInRange; //Log.Message("Pre- " + numSettlements); //if random number of settlements more than total settlements, reset number settlements. if (numSettlements > Find.World.GetComponent <FactionFC>().settlements.Count()) { numSettlements = Find.World.GetComponent <FactionFC>().settlements.Count(); //Log.Message("Post- " + numSettlements); } //List of map locations List <SettlementFC> settlements = new List <SettlementFC>(); //temporary list of settlemnts. List <SettlementFC> tmp = new List <SettlementFC>(); if (SettlementTraitLocations == null || SettlementTraitLocations.Count == 0) { foreach (SettlementFC settlement in Find.World.GetComponent <FactionFC>().settlements.InRandomOrder()) { if (tempEvent.def.requiredResource != "") { //if there is a required resource if (settlement.returnResource(tempEvent.def.requiredResource).assignedWorkers > 0) { //if have someone working on that resource tmp.Add(settlement); } else { //don't add } } else { tmp.Add(settlement); } } while (tmp.Count() > 0) { SettlementFC cSettlement = tmp.RandomElement(); if (settlements.Count() < numSettlements) { settlements.Add(cSettlement); } tmp.Remove(cSettlement); } tempEvent.settlementTraitLocations.AddRange(settlements); } else { tempEvent.settlementTraitLocations.AddRange(SettlementTraitLocations); //Log.Message(tempEvent.settlementTraitLocations.Count().ToString()); } //foreach(int loc in tempEvent.settlementTraitLocations) //{ //Log.Message("Location: " + loc); //} } //if event has options //open event option window //Log.Message("option count: " + tempEvent.def.options.Count().ToString()); if (tempEvent.def.options.Count > 0 && tempEvent.def.activateAtStart == true) { Find.WindowStack.Add(new FCOptionWindow(tempEvent.def, tempEvent)); return(null); } else { return(tempEvent); } // }