fix: Adds reset RNG command (#1201)

This commit is contained in:
Kamron Batman 2022-10-22 14:46:23 -07:00 committed by GitHub
parent 28040582bc
commit 24e2696510
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 30 additions and 3 deletions

View file

@ -14,6 +14,7 @@
*************************************************************************/
using System;
using System.Buffers.Binary;
using System.Runtime.CompilerServices;
namespace Server.Random;
@ -28,14 +29,20 @@ public class Xoshiro256PlusPlus : BaseRandomSource
private ulong _s0, _s1, _s2, _s3;
public Xoshiro256PlusPlus() : this((ulong)Environment.TickCount64)
public Xoshiro256PlusPlus()
{
Span<byte> states = stackalloc byte[32];
RandomSources.SecureSource.NextBytes(states);
_s0 = BinaryPrimitives.ReadUInt64LittleEndian(states[..8]);
_s1 = BinaryPrimitives.ReadUInt64LittleEndian(states[8..16]);
_s2 = BinaryPrimitives.ReadUInt64LittleEndian(states[16..24]);
_s3 = BinaryPrimitives.ReadUInt64LittleEndian(states[24..32]);
}
public Xoshiro256PlusPlus(ulong seed)
{
var mix = new SplitMix64(seed);
var state = new ulong[4];
Span<ulong> state = stackalloc ulong[4];
mix.FillArray(state);
_s0 = state[0];
_s1 = state[1];
@ -205,7 +212,7 @@ public class SplitMix64
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public void FillArray(ulong[] arr)
public void FillArray(Span<ulong> arr)
{
for (var i = 0; i < arr.Length; i++)
{