Server time at the time the game is calculated? Depending on how much precision you're using, given that the games start calculating at the same time every game night for a given nation's games, that could lead to the same duplicate seeds. If it's c++ I'm not sure of the equivalent, but I'd probably use something like DateTime.Now.Ticks in C# to get a unique seed.
@GM-Hrudey: "The value returned generally represents the number of seconds since 00:00 hours, Jan 1, 1970 UTC (i.e., the current unix timestamp).", which is similar something like this 414086872.
I think we'd had this same discussion previously when this came up and I just plain forgot it.
The only thing new I can think of, and this is even pretty unlikely, is that while the random seed is being assigned to some instance of an RNG, either when the calculations are using it they're either implicitly creating new random number from a new RNG, or possibly threading timing issues causing the RNG to be used before the seed is assigned. I don't think either of these is likely, especially the latter since it doesn't even seem to be a very likely design for this.
If it makes you feel any better, I understand how annoying this can be. I literally had a block of code where if I didn't do the following:
if (sli != null)
{
if (sli != null)
{
linenumber = sli.AltLineNumber;
}
}
I would get a null reference error because it would show as not null at first, but then null when I tried to access the property. I never did determine precisely what caused it other than finding that when I cleaned up some mistakes I mde in multithreading, it worked again. But it only affected that specific area of the code - inside other processes using the exact same code, it never failed.
But that's the life we choose. Just think in another ten years, with Moore's law, what the computers will do to us if they don't like our code then!