예제 #1
0
        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);
        }
예제 #2
0
        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);
        }
예제 #3
0
 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);
     }
 }