My variant with RNGCryptoServiceProvider
- Code slightly reduced and refactored
- Added minutes randomization
- Fixed maxValue problem (random.Next always return value by 1 less then the specified maximum)
Code:
using System;
using maddox.game;
using System.Security.Cryptography;
public class Mission : AMission
{
public override void OnBattleInit()
{
RandomiseMission();
}
internal ISectionFile RandomiseMission()
{
// initialize a new instance of the Random class
var provider = new RNGCryptoServiceProvider();
var buffer = new byte[4];
provider.GetBytes(buffer);
var random = new Random(BitConverter.ToInt32(buffer, 0));
//time of day
bool RandomiseTime = true;
int minTime = 6; // 6am
int maxTime = 17; // 5pm
// WeatherIndex
bool RandomiseWeatherIndex = true;
int minWeatherIndex = 0; // clear
int maxWeatherIndex = 2; // medium clouds
// cloud height
bool RandomiseClouds = true;
int minClouds = 500; // 500m
int maxClouds = 1500; // 1500m
// BreezeActivity
bool RandomiseBreezeActivity = true;
int minBreezeActivity = 0; // zero breeze
int maxBreezeActivity = 10; // max breeze
// ThermalActivity
bool RandomiseThermalActivity = true;
int minThermalActivity = 0; // zero thermals
int maxThermalActivity = 10; // max thermals
ISectionFile secfile = GamePlay.gpCreateSectionFile();
// time of day
if (RandomiseTime == true)
{
string value = (random.Next(minTime * 100, maxTime * 100) / 100f).ToString();
secfile.add("MAIN", "TIME", value);
}
// WeatherIndex
if (RandomiseWeatherIndex == true)
{
string value = random.Next(minWeatherIndex, maxWeatherIndex + 1).ToString();
secfile.add("MAIN", "WeatherIndex", value);
}
// clouds
if (RandomiseClouds == true)
{
string value = random.Next(minClouds, maxClouds + 1).ToString();
secfile.add("MAIN", "CloudsHeight", value);
}
// minBreezeActivity
if (RandomiseBreezeActivity == true)
{
string value = random.Next(minBreezeActivity, maxBreezeActivity + 1).ToString();
secfile.add("MAIN", "BreezeActivity", value);
}
// ThermalActivity
if (RandomiseThermalActivity == true)
{
string value = random.Next(minThermalActivity, maxThermalActivity + 1).ToString();
secfile.add("MAIN", "ThermalActivity", value);
}
// This post loads the section file secfile into the current battle.
// It's also possible to save the section file secfile first by secfile.save("filename") and then
// call GamePlay.gpPostMissionLoad("filename"); if you want to save the randomised file
// on your hard disk.
GamePlay.gpPostMissionLoad(secfile);
return secfile;
}
}