I've researched and made something interesting regarding the random roll algorithm for rare items (seeds, gold, gems).

First, vanilla version (A27 prior to patch) for an item with 1/1000th drop chance:

As you can see, the problem with it is that it's quite...random. While on average you can obtain an item with 1/1000th drop change with 1000 attempts, it may require any number of attempts from 1 to over 10000. Which is in no way fun especially when you're playing solo or on a local server and cannot trade with other players.

You may find it mildly interesting: with this (old) roll algorithm number of lucky players (those that obtained a gem (1/1000th probability) with less than 50 attempts) was 5%. Same as the number of really unlucky (that obtained a gem only after 3000+ attempts) — yes, also 5%. It's really not good! But that's what most games are using...

A new feedback-augmented roll algorithm:

How does it work? Basically, it increases your chance a bit with every failed attempt (for an item with 1/1000th probability the roll formula is

1/(2000-#attemptNumber)).

And the end result is a completely flat distribution chart. The chance to obtain an item that has 1/1000th drop rate is still 1/1000th in average but it will require no more than 1999 attempts in any circumstances, and it's random—but with flat distribution instead of a bell curve! The number of attempts is evenly distributed while the average and a median number of attempts necessary are precisely around 1000 attempts (on a large sampling number) for an item with 1/1000th drop probability.

What does it mean? The new algorithm will ensure that you can obtain even the rarest items in a reasonable time, while on average it will require as many attempts as we intended. It will be much more consistent, with less lucky streaks but also without infinite bad luck that followed every player from time to time!

In the server patch (that is already deployed on all the PvE servers) it applies to various rare items: seeds from grass (1/50th chance), gold nuggets (1/100th chance), and gemstones (1/1000th). The challenge was to elegantly integrate this in the game, and ensure that the number of attempts made is properly stored in the world savegame and restored on the world load after the server restart—but we've made it. Enjoy the game!

Regards!

P. S. If you want to play with this simulation model yourself here is the link on the source code of the sample app

https://github.com/aienabled/RandomDistributionTest (requires Visual Studio 2019 with desktop development setup for WPF apps).

There is also a sample written in JavaScript

https://gist.github.com/Jimbly/9364e1bd50877357c74d8ff5d3631ac1 from the community member @Jimbly that wanted to verify the formula. It doesn't draw a chart but it demonstrates the flat distribution if you run it with a JS editor.

UPD. I've made two JSFiddle samples based on the code from @Jimbly but advanced further to demonstrate the

regular random approach and the described above

my feedback-augmented roll aglorithm. There are no graphs but if you open the console you can read the output.