public static Settlement GetSpawnSettlement(Data.SpawnData data, Random rand = null, List <Settlement> exceptions = null) { if (rand == null) { rand = new Random(); } if (exceptions == null) { exceptions = new List <Settlement>(); } Clan spawnClan = data.SpawnClan; //deal with override of spawn clan. if (data.OverridenSpawnClan.Count != 0) { spawnClan = data.OverridenSpawnClan[rand.Next(0, data.OverridenSpawnClan.Count)]; } //check for one hideout Settlement firstHideout = null; if (ConfigLoader.Instance.Config.SpawnAtOneHideout) { foreach (Settlement s in Settlement.All) { if (s.IsHideout) { firstHideout = s; break; } } } //deal with town spawn Settlement spawnOverride = null; if (data.OverridenSpawnSettlements.Count != 0) { spawnOverride = CampaignUtils.PickRandomSettlementAmong(new List <Settlement>(data.OverridenSpawnSettlements.Where(s => !exceptions.Contains(s))), data.TrySpawnAtList, rand); } if (spawnOverride == null && data.OverridenSpawnCultures.Count != 0) { //spawn at overriden spawn instead! spawnOverride = CampaignUtils.PickRandomSettlementOfCulture(data.OverridenSpawnCultures, data.TrySpawnAtList, exceptions); } if (spawnOverride != null) { return(spawnOverride); } //get settlement Settlement spawnSettlement = ConfigLoader.Instance.Config.SpawnAtOneHideout ? firstHideout : (data.TrySpawnAtList.Count == 0 ? CampaignUtils.GetPreferableHideout(spawnClan) : null); return(spawnSettlement); }
public static Settlement GetSpawnSettlement(Data.SpawnData data, Random rand = null) { if (rand == null) { rand = new Random(); } Clan spawnClan = data.SpawnClan; //deal with override of spawn clan. if (data.OverridenSpawnClan.Count != 0) { spawnClan = data.OverridenSpawnClan[rand.Next(0, data.OverridenSpawnClan.Count)]; } //check for one hideout Settlement firstHideout = null; if (CsSettings.SpawnAtOneHideout) { foreach (Settlement s in Settlement.All) { if (s.IsHideout()) { firstHideout = s; break; } } } //deal with town spawn Settlement spawnOverride = null; if (data.OverridenSpawnSettlements.Count != 0) { spawnOverride = CampaignUtils.PickRandomSettlementAmong(data.OverridenSpawnSettlements, data.TrySpawnAtList, rand); } if (spawnOverride == null && data.OverridenSpawnCultures.Count != 0) { //spawn at overriden spawn instead! spawnOverride = CampaignUtils.PickRandomSettlementOfCulture(data.OverridenSpawnCultures, data.TrySpawnAtList); } if (spawnOverride == null && data.OverridenSpawnKingdoms.Count != 0) { spawnOverride = CampaignUtils.PickRandomSettlementOfKingdom(data.OverridenSpawnKingdoms, data.TrySpawnAtList); } //get settlement Settlement spawnSettlement = CsSettings.SpawnAtOneHideout ? firstHideout : (spawnOverride == null ? CampaignUtils.GetPreferableHideout(spawnClan) : spawnOverride); return(spawnSettlement); }
public static void HandleAIChecks(MobileParty mb, Data.SpawnData data, Settlement spawnedSettlement) //TODO handle sub parties being reconstructed! { try { bool invalid = false; Dictionary <string, bool> aiRegistrations = new Dictionary <string, bool>(); if (data.PatrolAroundSpawn) { bool success = AI.AIManager.HourlyPatrolAroundSpawn.RegisterParty(mb, spawnedSettlement); aiRegistrations.Add("Patrol around spawn behaviour: ", success); invalid = invalid ? true : !success; } if (data.AttackClosestIfIdleForADay) { bool success = AI.AIManager.AttackClosestIfIdleForADayBehaviour.RegisterParty(mb); aiRegistrations.Add("Attack Closest Settlement If Idle for A Day Behaviour: ", success); invalid = invalid ? true : !success; } if (data.PatrolAroundClosestLestInterruptedAndSwitch.isValidData) { bool success = AI.AIManager.PatrolAroundClosestLestInterruptedAndSwitchBehaviour.RegisterParty(mb, new AI.PatrolAroundClosestLestInterruptedAndSwitchBehaviour.PatrolAroundClosestLestInterruptedAndSwitchBehaviourData(mb, data.PatrolAroundClosestLestInterruptedAndSwitch)); aiRegistrations.Add("Patrol Around Closest Lest Interrupted And Switch Behaviour: ", success); invalid = invalid ? true : !success; } if (invalid && ConfigLoader.Instance.Config.IsDebugMode) { ErrorHandler.ShowPureErrorMessage("Custom Spawns AI XML registration error has occured. The party being registered was: " + mb.StringId + "\n Here is more info about the behaviours being registered: \n" + aiRegistrations.ToString()); } } catch (Exception e) { ErrorHandler.HandleException(e); } }