public override void Execute(object context) { base.Execute(context); if (base.Context.Settings.GlobalAnomalyMultiplier <= 0) { return; } for (int i = 0; i < base.Context.Grid.Rows; i++) { for (int j = 0; j < base.Context.Grid.Columns; j++) { int index = (int)base.Context.TerrainData[i, j]; Terrain terrain = base.Context.Settings.Terrains[index]; HexPos item = new HexPos(j, i); int num = 0; if (base.Context.POIValidityMap[item.Row, item.Column] == WorldGeneratorContext.POIValidity.Free || base.Context.POIValidityMap[item.Row, item.Column] == WorldGeneratorContext.POIValidity.Excluded) { item.Neighbours.ForEach(delegate(HexPos hex) { int num2 = hex.Row; if (num2 < 0) { num2 = base.Context.AnomalyMap.GetLength(0) - 1; } else if (num2 >= base.Context.AnomalyMap.GetLength(0)) { num2 -= num2; } int num3 = hex.Column; if (num3 < 0) { num3 = base.Context.AnomalyMap.GetLength(1) - 1; } else if (num3 >= base.Context.AnomalyMap.GetLength(1)) { num3 -= num3; } if (base.Context.AnomalyMap[num2, num3] != null) { this.XephiAnyNeighborAnomalies = true; } }); if (base.Context.Settings.AnomalyOdds.ContainsKey(terrain.Name)) { num = base.Context.Settings.AnomalyOdds[terrain.Name]; } num *= 10000; num /= base.Context.Settings.GlobalAnomalyMultiplier; bool flag = base.Context.Randomizer.Next(num) <= 100; if ((num > 0 && base.Context.Settings.AnomalyWeightsPerTerrain.ContainsKey(terrain.Name) && flag) || (this.XephiConfirmNextHexAnomaly > 0 && base.Context.Settings.AnomalyWeightsPerTerrain.ContainsKey(terrain.Name))) { if (flag) { this.XephiConfirmNextHexAnomaly++; } if (this.XephiAnyNeighborAnomalies && base.Context.Settings.XephiWorldGeneratorBalance) { this.XephiAnyNeighborAnomalies = false; } else { WeightedRandomSelector <string> weightedRandomSelector = new WeightedRandomSelector <string>(); weightedRandomSelector.Randomizer = base.Context.Randomizer; weightedRandomSelector.UseDictionary(base.Context.Settings.AnomalyWeightsPerTerrain[terrain.Name]); string randomSelected = weightedRandomSelector.RandomSelected; if (!base.Context.Settings.UniqueAnomaliesQuantities.ContainsKey(randomSelected) && (!base.Context.HasRiver[item.Row, item.Column] || !base.Context.Settings.NoRiverHexAnomalies.Contains(randomSelected))) { if (!base.Context.Anomalies.ContainsKey(randomSelected)) { base.Context.Anomalies.Add(randomSelected, new List <HexPos>()); } base.Context.Anomalies[randomSelected].Add(item); base.Silent = false; base.Trace(string.Format("{0} at {1}", randomSelected, item.ToString())); base.Silent = true; base.Context.AnomalyMap[item.Row, item.Column] = randomSelected; base.Context.POIValidityMap[item.Row, item.Column] = WorldGeneratorContext.POIValidity.Impossible; this.XephiConfirmNextHexAnomaly--; this.XephiAnomalyCountTracker++; } } } } } } string[,] array = new string[base.Context.Grid.Rows, base.Context.Grid.Columns]; foreach (PointOfInterestDefinition pointOfInterestDefinition in base.Context.POIDefinitions) { array[pointOfInterestDefinition.Position.Row, pointOfInterestDefinition.Position.Column] = pointOfInterestDefinition.TemplateName; if (base.Context.AnomalyMap[pointOfInterestDefinition.Position.Row, pointOfInterestDefinition.Position.Column] != null) { base.Trace(string.Format("Dual setup POI/Anomaly at {0} : {1} & {2}", pointOfInterestDefinition.Position.ToString(), pointOfInterestDefinition.TemplateName, base.Context.AnomalyMap[pointOfInterestDefinition.Position.Row, pointOfInterestDefinition.Position.Column])); } } }