The solution to this problem is fairly simple, you just need a pseudo random number generator, that uses the original post creation time as seed:
That’s my implementation of a javascript module that does something similar, adding a syntax for dice would be trivial.
Using a PRNG you don’t need to lock a player’s edits.
The main characteristic of this implementation of a pseudo random number generator ( PRNG ) is that numbers are pregenerated in an array using a seed.
If you use the same seed, you’ll get the same sequence of numbers every time.
From the top of my head, that has another two use cases:
Say you are playing Endless Sea (or another roguelike), and a player tries to cheat the random number generator saving just before a skill check (or closing the program), to reload the game until it’s possible to pass a check with a 1% chance of happening.
Using a PRNG you can prevent that, because after every load, the PRNG will give you the same number sequence. That is, unless the player decides to take another action that causes a PRNG number to be provided before the check, and even then, it mitigates the effect of that kind of cheat, because the player does not know how many times he has to cause a check before it is possible to succeed on the check he wants.
The other use case, is to make the seed transparent to the player, in order to allow them to share it:
That is used in Dwarf Fortress to share pregenerated worlds, and in The Binding of Isaach Rebirth, allowing players to share a procedurally generated dungeon with other players. (Say you want to play the same map that Northernlion is playing on youtube).
PS: If you use the same seeds I provide on Usage you’ll get the same numbers I did.