public void AutoAddFreeProxy(DailyLogger logger = null) { var freeProxySrcList = GetFreeProxySrc(); foreach (var src in freeProxySrcList) { try { DoAutoAddFreeProxy(src); } catch (Exception e) { if (logger != null) { logger.Write(e, src.Host); } } } }
private void RegularSpawn() { try { var list = SpawnDataManager.Instance.Data; Random rand = new Random(); var isSpawnSoundPlaying = false; foreach (Data.SpawnData data in list) { for (int i = 0; i < data.RepeatSpawnRolls; i++) { if (data.CanSpawn() && (data.MinimumNumberOfDaysUntilSpawn < (int)Math.Ceiling(Campaign.Current.CampaignStartTime.ElapsedDaysUntilNow))) { float currentChanceOfSpawn = data.ChanceOfSpawn; if (!ConfigLoader.Instance.Config.IsAllSpawnMode && (float)rand.NextDouble() >= currentChanceOfSpawn * ConfigLoader.Instance.Config.SpawnChanceFlatMultiplier) { continue; } var spawnSettlement = Spawner.GetSpawnSettlement(data, (s => data.MinimumDevestationToSpawn > DevestationMetricData.Singleton.GetDevestation(s)), rand); //spawn nao! if (spawnSettlement == null) { //no valid spawn settlement break; } MobileParty spawnedParty = Spawner.SpawnParty(spawnSettlement, data.SpawnClan, data.PartyTemplate, data.PartyType, new TextObject(data.Name)); if (spawnedParty == null) { return; } data.IncrementNumberSpawned(); //increment for can spawn and chance modifications //dynamic data registration //dynamic spawn tracking DynamicSpawnData.Instance.AddDynamicSpawnData(spawnedParty, new CSPartyData(data, spawnSettlement)); //AI Checks! Spawner.HandleAIChecks(spawnedParty, data, spawnSettlement); //accompanying spawns foreach (var accomp in data.SpawnAlongWith) { MobileParty juniorParty = Spawner.SpawnParty(spawnSettlement, data.SpawnClan, accomp.templateObject, data.PartyType, new TextObject(accomp.name)); if (juniorParty == null) { continue; } Spawner.HandleAIChecks(juniorParty, data, spawnSettlement); //junior party has same AI behaviour as main party. TODO in future add some junior party AI and reconstruction. } //message if available if (data.spawnMessage != null) { UX.ShowParseSpawnMessage(data.spawnMessage, spawnSettlement.Name.ToString()); //if (data.SoundEvent != -1 && !isSpawnSoundPlaying && ConfigLoader.Instance.Config.SpawnSoundEnabled) //{ // var sceneEmpty = Scene.CreateNewScene(false); // SoundEvent sound = SoundEvent.CreateEvent(data.SoundEvent, sceneEmpty); // sound.Play(); // isSpawnSoundPlaying = true; //} } DailyLogger.ReportSpawn(spawnedParty, currentChanceOfSpawn); } else { break; } } } } catch (Exception e) { ErrorHandler.HandleException(e); } }